aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2024-03-17 00:13:09 +0000
committerCy Schubert <cy@FreeBSD.org>2024-03-17 07:57:42 +0000
commitb7c0c8c18e0f12bc22e251fbcabad719b364a38a (patch)
tree6669f319df4f9e40d63928f3c3b29db68b0746a1
parentd50685b303e3353aa1aeaea022a80f31e3732a29 (diff)
parent5a33598e88ad8fbc0affa74dee0a2d8cc4010fbc (diff)
downloadsrc-b7c0c8c18e0f12bc22e251fbcabad719b364a38a.tar.gz
src-b7c0c8c18e0f12bc22e251fbcabad719b364a38a.zip
unbound: Vendor import 1.19.3
Release notes at https://www.nlnetlabs.nl/news/2024/Mar/14/unbound-1.19.3-released/ MFC after: 1 week Merge commit '5a33598e88ad8fbc0affa74dee0a2d8cc4010fbc' into main
-rw-r--r--contrib/unbound/acx_nlnetlabs.m4121
-rwxr-xr-xcontrib/unbound/configure350
-rw-r--r--contrib/unbound/configure.ac28
-rw-r--r--contrib/unbound/daemon/remote.c10
-rw-r--r--contrib/unbound/daemon/worker.c28
-rw-r--r--contrib/unbound/dnstap/dnstap.c32
-rw-r--r--contrib/unbound/dnstap/dnstap.h4
-rw-r--r--contrib/unbound/dnstap/dnstap.m4107
-rw-r--r--contrib/unbound/dnstap/dnstap.proto82
-rw-r--r--contrib/unbound/doc/Changelog140
-rw-r--r--contrib/unbound/doc/README11
-rw-r--r--contrib/unbound/doc/example.conf.in25
-rw-r--r--contrib/unbound/doc/libunbound.3.in4
-rw-r--r--contrib/unbound/doc/unbound-anchor.8.in2
-rw-r--r--contrib/unbound/doc/unbound-checkconf.8.in2
-rw-r--r--contrib/unbound/doc/unbound-control.8.in2
-rw-r--r--contrib/unbound/doc/unbound-host.1.in2
-rw-r--r--contrib/unbound/doc/unbound.8.in4
-rw-r--r--contrib/unbound/doc/unbound.conf.5.in24
-rw-r--r--contrib/unbound/iterator/iter_fwd.c1
-rw-r--r--contrib/unbound/iterator/iter_hints.c5
-rw-r--r--contrib/unbound/iterator/iter_scrub.c3
-rw-r--r--contrib/unbound/iterator/iterator.c8
-rw-r--r--contrib/unbound/services/authzone.c2
-rw-r--r--contrib/unbound/services/cache/dns.c12
-rw-r--r--contrib/unbound/services/localzone.c6
-rw-r--r--contrib/unbound/services/mesh.c10
-rw-r--r--contrib/unbound/services/outside_network.c46
-rw-r--r--contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.post2
-rw-r--r--contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.test14
-rw-r--r--contrib/unbound/testdata/iter_cname_minimise_nx.rpl1
-rw-r--r--contrib/unbound/testdata/iter_dname_ttl.rpl310
-rw-r--r--contrib/unbound/testdata/root_zonemd.tdir/root_zonemd.test32
-rw-r--r--contrib/unbound/testdata/rrset_use_cached.rpl151
-rw-r--r--contrib/unbound/testdata/serve_expired_0ttl_nodata.rpl2
-rw-r--r--contrib/unbound/testdata/serve_expired_0ttl_nxdomain.rpl2
-rw-r--r--contrib/unbound/testdata/serve_expired_0ttl_servfail.rpl2
-rw-r--r--contrib/unbound/testdata/serve_expired_cached_servfail.rpl2
-rw-r--r--contrib/unbound/testdata/serve_expired_cached_servfail_refresh.rpl2
-rw-r--r--contrib/unbound/testdata/subnet_scopezero_noedns.crpl441
-rw-r--r--contrib/unbound/util/config_file.c3
-rw-r--r--contrib/unbound/util/config_file.h2
-rw-r--r--contrib/unbound/util/configlexer.c7627
-rw-r--r--contrib/unbound/util/configlexer.lex1
-rw-r--r--contrib/unbound/util/configparser.c7713
-rw-r--r--contrib/unbound/util/configparser.h781
-rw-r--r--contrib/unbound/util/configparser.y13
-rw-r--r--contrib/unbound/util/data/msgencode.c3
-rw-r--r--contrib/unbound/util/data/msgreply.c53
-rw-r--r--contrib/unbound/util/data/msgreply.h6
-rw-r--r--contrib/unbound/util/data/packed_rrset.c5
-rw-r--r--contrib/unbound/util/iana_ports.inc1
-rw-r--r--contrib/unbound/util/netevent.c12
-rw-r--r--contrib/unbound/validator/autotrust.c8
-rw-r--r--contrib/unbound/validator/val_sigcrypt.c2
-rw-r--r--contrib/unbound/validator/val_utils.c55
-rw-r--r--contrib/unbound/validator/validator.c2
-rw-r--r--lib/libunbound/config.h6
58 files changed, 18038 insertions, 287 deletions
diff --git a/contrib/unbound/acx_nlnetlabs.m4 b/contrib/unbound/acx_nlnetlabs.m4
index f27615bd8bce..6a01dc5a4769 100644
--- a/contrib/unbound/acx_nlnetlabs.m4
+++ b/contrib/unbound/acx_nlnetlabs.m4
@@ -2,7 +2,10 @@
# Copyright 2009, Wouter Wijngaards, NLnet Labs.
# BSD licensed.
#
-# Version 46
+# Version 48
+# 2024-01-16 fix to add -l:libssp.a to -lcrypto link check.
+# and check for getaddrinfo with only header.
+# 2024-01-15 fix to add crypt32 to -lcrypto link check when checking for gdi32.
# 2023-05-04 fix to remove unused whitespace.
# 2023-01-26 fix -Wstrict-prototypes.
# 2022-09-01 fix checking if nonblocking sockets work on OpenBSD.
@@ -707,7 +710,7 @@ AC_DEFUN([ACX_SSL_CHECKS], [
LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir_lib"
ACX_RUNTIME_PATH_ADD([$ssldir_lib])
fi
-
+
AC_MSG_CHECKING([for EVP_sha256 in -lcrypto])
LIBS="$LIBS -lcrypto"
LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
@@ -732,40 +735,73 @@ AC_DEFUN([ACX_SSL_CHECKS], [
]])],[
AC_DEFINE([HAVE_EVP_SHA256], 1,
[If you have EVP_sha256])
- AC_MSG_RESULT(yes)
+ AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)
LIBS="$BAKLIBS"
LIBSSL_LIBS="$BAKSSLLIBS"
- LIBS="$LIBS -ldl"
- LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
- AC_MSG_CHECKING([if -lcrypto needs -ldl])
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
- int EVP_sha256(void);
- (void)EVP_sha256();
- ]])],[
- AC_DEFINE([HAVE_EVP_SHA256], 1,
- [If you have EVP_sha256])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- LIBS="$BAKLIBS"
- LIBSSL_LIBS="$BAKSSLLIBS"
- LIBS="$LIBS -ldl -pthread"
- LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
- AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread])
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
- int EVP_sha256(void);
- (void)EVP_sha256();
- ]])],[
- AC_DEFINE([HAVE_EVP_SHA256], 1,
- [If you have EVP_sha256])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
+
+ LIBS="$LIBS -lgdi32 -lws2_32 -lcrypt32"
+ LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32 -lcrypt32"
+ AC_MSG_CHECKING([if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
+ int EVP_sha256(void);
+ (void)EVP_sha256();
+ ]])],[
+ AC_DEFINE([HAVE_EVP_SHA256], 1,
+ [If you have EVP_sha256])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ LIBS="$BAKLIBS"
+ LIBSSL_LIBS="$BAKSSLLIBS"
+
+ LIBS="$LIBS -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a"
+ LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a"
+ AC_MSG_CHECKING([if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
+ int EVP_sha256(void);
+ (void)EVP_sha256();
+ ]])],[
+ AC_DEFINE([HAVE_EVP_SHA256], 1,
+ [If you have EVP_sha256])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ LIBS="$BAKLIBS"
+ LIBSSL_LIBS="$BAKSSLLIBS"
+
+ LIBS="$LIBS -ldl"
+ LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
+ AC_MSG_CHECKING([if -lcrypto needs -ldl])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
+ int EVP_sha256(void);
+ (void)EVP_sha256();
+ ]])],[
+ AC_DEFINE([HAVE_EVP_SHA256], 1,
+ [If you have EVP_sha256])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ LIBS="$BAKLIBS"
+ LIBSSL_LIBS="$BAKSSLLIBS"
+ LIBS="$LIBS -ldl -pthread"
+ LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
+ AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
+ int EVP_sha256(void);
+ (void)EVP_sha256();
+ ]])],[
+ AC_DEFINE([HAVE_EVP_SHA256], 1,
+ [If you have EVP_sha256])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required])
+ ])
+ ])
])
- ])
+ ])
])
])
fi
@@ -779,7 +815,7 @@ AC_CHECK_HEADERS([openssl/rand.h],,, [AC_INCLUDES_DEFAULT])
dnl Check for SSL, where SSL is mandatory
dnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found
-dnl Setup of CPPFLAGS, CFLAGS. Adds -lcrypto to LIBS.
+dnl Setup of CPPFLAGS, CFLAGS. Adds -lcrypto to LIBS.
dnl Checks main header files of SSL.
dnl
AC_DEFUN([ACX_WITH_SSL],
@@ -872,7 +908,7 @@ dnl see if on windows
if test "$ac_cv_header_windows_h" = "yes"; then
AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
USE_WINSOCK="1"
- if echo $LIBS | grep 'lws2_32' >/dev/null; then
+ if echo "$LIBS" | grep 'lws2_32' >/dev/null; then
:
else
LIBS="$LIBS -lws2_32"
@@ -880,6 +916,24 @@ if test "$ac_cv_header_windows_h" = "yes"; then
fi
],
dnl no quick getaddrinfo, try mingw32 and winsock2 library.
+dnl perhaps getaddrinfo needs only the include
+AC_LINK_IFELSE(
+[AC_LANG_PROGRAM(
+[
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+],
+[
+ (void)getaddrinfo(NULL, NULL, NULL, NULL);
+]
+)],
+[
+ac_cv_func_getaddrinfo="yes"
+AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used])
+USE_WINSOCK="1"
+],
+
ORIGLIBS="$LIBS"
LIBS="$LIBS -lws2_32"
AC_LINK_IFELSE(
@@ -904,6 +958,7 @@ ac_cv_func_getaddrinfo="no"
LIBS="$ORIGLIBS"
])
)
+)
AC_MSG_RESULT($ac_cv_func_getaddrinfo)
if test $ac_cv_func_getaddrinfo = yes; then
diff --git a/contrib/unbound/configure b/contrib/unbound/configure
index c87c669c8435..6aa1aeb80676 100755
--- a/contrib/unbound/configure
+++ b/contrib/unbound/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.19.1.
+# Generated by GNU Autoconf 2.69 for unbound 1.19.3.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.19.1'
-PACKAGE_STRING='unbound 1.19.1'
+PACKAGE_VERSION='1.19.3'
+PACKAGE_STRING='unbound 1.19.3'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
PACKAGE_URL=''
@@ -655,6 +655,8 @@ DNSTAP_SOCKET_TESTBIN
DNSTAP_SOCKET_PATH
opt_dnstap_socket_path
ENABLE_DNSTAP
+PROTOBUFC_LIBS
+PROTOBUFC_CFLAGS
PROTOC_C
UBSYMS
EXTRALINK
@@ -926,7 +928,9 @@ SYSTEMD_CFLAGS
SYSTEMD_LIBS
SYSTEMD_DAEMON_CFLAGS
SYSTEMD_DAEMON_LIBS
-PYTHON_VERSION'
+PYTHON_VERSION
+PROTOBUFC_CFLAGS
+PROTOBUFC_LIBS'
# Initialize some variables set by options.
@@ -1477,7 +1481,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.19.1 to adapt to many kinds of systems.
+\`configure' configures unbound 1.19.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1543,7 +1547,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.19.1:";;
+ short | recursive ) echo "Configuration of unbound 1.19.3:";;
esac
cat <<\_ACEOF
@@ -1718,6 +1722,10 @@ Some influential environment variables:
The installed Python version to use, for example '2.3'. This
string will be appended to the Python interpreter canonical
name.
+ PROTOBUFC_CFLAGS
+ C compiler flags for PROTOBUFC, overriding pkg-config
+ PROTOBUFC_LIBS
+ linker flags for PROTOBUFC, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1785,7 +1793,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.19.1
+unbound configure 1.19.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2494,7 +2502,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.19.1, which was
+It was created by unbound $as_me 1.19.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2846,11 +2854,11 @@ UNBOUND_VERSION_MAJOR=1
UNBOUND_VERSION_MINOR=19
-UNBOUND_VERSION_MICRO=1
+UNBOUND_VERSION_MICRO=3
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=24
+LIBUNBOUND_REVISION=26
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -2942,6 +2950,8 @@ LIBUNBOUND_AGE=1
# 1.18.0 had 9:22:1
# 1.19.0 had 9:23:1
# 1.19.1 had 9:24:1
+# 1.19.2 had 9:25:1
+# 1.19.3 had 9:26:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -14416,7 +14426,7 @@ CC=$lt_save_CC
# pkg-config is only needed for these options, do not require it otherwise
-if test "$enable_systemd" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
+if test "$enable_systemd" = "yes" -o "$enable_dnstap" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
@@ -18104,19 +18114,86 @@ else
$as_echo "no" >&6; }
LIBS="$BAKLIBS"
LIBSSL_LIBS="$BAKSSLLIBS"
- LIBS="$LIBS -ldl"
- LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl" >&5
+
+ LIBS="$LIBS -lgdi32 -lws2_32 -lcrypt32"
+ LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32 -lcrypt32"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32" >&5
+$as_echo_n "checking if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ int EVP_sha256(void);
+ (void)EVP_sha256();
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+
+$as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ LIBS="$BAKLIBS"
+ LIBSSL_LIBS="$BAKSSLLIBS"
+
+ LIBS="$LIBS -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a"
+ LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a" >&5
+$as_echo_n "checking if -lcrypto needs -lgdi32 -lws2_32 -lcrypt32 -l:libssp.a... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ int EVP_sha256(void);
+ (void)EVP_sha256();
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+
+$as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ LIBS="$BAKLIBS"
+ LIBSSL_LIBS="$BAKSSLLIBS"
+
+ LIBS="$LIBS -ldl"
+ LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl" >&5
$as_echo_n "checking if -lcrypto needs -ldl... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
- int EVP_sha256(void);
- (void)EVP_sha256();
+ int EVP_sha256(void);
+ (void)EVP_sha256();
;
return 0;
@@ -18127,28 +18204,28 @@ if ac_fn_c_try_link "$LINENO"; then :
$as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- LIBS="$BAKLIBS"
- LIBSSL_LIBS="$BAKSSLLIBS"
- LIBS="$LIBS -ldl -pthread"
- LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl -pthread" >&5
+ LIBS="$BAKLIBS"
+ LIBSSL_LIBS="$BAKSSLLIBS"
+ LIBS="$LIBS -ldl -pthread"
+ LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl -pthread" >&5
$as_echo_n "checking if -lcrypto needs -ldl -pthread... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
- int EVP_sha256(void);
- (void)EVP_sha256();
+ int EVP_sha256(void);
+ (void)EVP_sha256();
;
return 0;
@@ -18159,14 +18236,22 @@ if ac_fn_c_try_link "$LINENO"; then :
$as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5
+ as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext \
@@ -19847,7 +19932,7 @@ if test x_$enable_static_exe = x_yes; then
if test "$on_mingw" = yes; then
staticexe="-all-static"
# for static compile, include gdi32 and zlib here.
- if echo $LIBS | grep 'lgdi32' >/dev/null; then
+ if echo "$LIBS" | grep 'lgdi32' >/dev/null; then
:
else
LIBS="$LIBS -lgdi32"
@@ -19892,7 +19977,11 @@ if test "x$ac_cv_lib_z_compress" = xyes; then :
LIBS="$LIBS -lz"
fi
- LIBS="$LIBS -l:libssp.a"
+ if echo "$LIBS" | grep -e "libssp.a" -e "lssp" >/dev/null; then
+ :
+ else
+ LIBS="$LIBS -l:libssp.a"
+ fi
fi
fi
@@ -19951,7 +20040,11 @@ if test "x$ac_cv_lib_z_compress" = xyes; then :
LIBS="$LIBS -lz"
fi
- LIBS="$LIBS -l:libssp.a"
+ if echo "$LIBS" | grep -e "libssp.a" -e "lssp" >/dev/null; then
+ :
+ else
+ LIBS="$LIBS -l:libssp.a"
+ fi
fi
fi
@@ -19998,7 +20091,7 @@ if test "$ac_cv_header_windows_h" = "yes"; then
$as_echo "#define USE_WINSOCK 1" >>confdefs.h
USE_WINSOCK="1"
- if echo $LIBS | grep 'lws2_32' >/dev/null; then
+ if echo "$LIBS" | grep 'lws2_32' >/dev/null; then
:
else
LIBS="$LIBS -lws2_32"
@@ -20006,6 +20099,33 @@ $as_echo "#define USE_WINSOCK 1" >>confdefs.h
fi
else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+
+int
+main ()
+{
+
+ (void)getaddrinfo(NULL, NULL, NULL, NULL);
+
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ac_cv_func_getaddrinfo="yes"
+
+$as_echo "#define USE_WINSOCK 1" >>confdefs.h
+
+USE_WINSOCK="1"
+
+else
ORIGLIBS="$LIBS"
LIBS="$LIBS -lws2_32"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20047,6 +20167,10 @@ fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getaddrinfo" >&5
$as_echo "$ac_cv_func_getaddrinfo" >&6; }
if test $ac_cv_func_getaddrinfo = yes; then
@@ -20166,7 +20290,11 @@ else
WINDRES="$ac_cv_prog_WINDRES"
fi
- LIBS="$LIBS -liphlpapi -lcrypt32"
+ if echo "$LIBS" | grep crypt32 >/dev/null; then
+ LIBS="$LIBS -liphlpapi"
+ else
+ LIBS="$LIBS -liphlpapi -lcrypt32"
+ fi
WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe"
WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c"
@@ -21199,7 +21327,7 @@ fi
# check for dnstap if requested
- # Check whether --enable-dnstap was given.
+ # Check whether --enable-dnstap was given.
if test "${enable_dnstap+set}" = set; then :
enableval=$enable_dnstap; opt_dnstap=$enableval
else
@@ -21216,8 +21344,8 @@ else
fi
- if test "x$opt_dnstap" != "xno"; then
- # Extract the first word of "protoc-c", so it can be a program name with args.
+ if test "x$opt_dnstap" != "xno"; then
+ # Extract the first word of "protoc-c", so it can be a program name with args.
set dummy protoc-c; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
@@ -21257,36 +21385,132 @@ $as_echo "no" >&6; }
fi
- if test -z "$PROTOC_C"; then
- as_fn_error $? "The protoc-c program was not found. Please install protobuf-c!" "$LINENO" 5
- fi
+ if test -z "$PROTOC_C"; then
+ as_fn_error $? "The protoc-c program was not found. Please install protobuf-c!" "$LINENO" 5
+ fi
# Check whether --with-protobuf-c was given.
if test "${with_protobuf_c+set}" = set; then :
withval=$with_protobuf_c;
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f $withval/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I$withval/include/google"
- else
- CFLAGS="$CFLAGS -I$withval/include"
- fi
- LDFLAGS="$LDFLAGS -L$withval/lib"
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f $withval/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I$withval/include/google"
+ else
+ CFLAGS="$CFLAGS -I$withval/include"
+ fi
+ LDFLAGS="$LDFLAGS -L$withval/lib"
else
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
- else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- fi
- fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PROTOBUFC" >&5
+$as_echo_n "checking for PROTOBUFC... " >&6; }
+
+if test -n "$PROTOBUFC_CFLAGS"; then
+ pkg_cv_PROTOBUFC_CFLAGS="$PROTOBUFC_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libprotobuf-c\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libprotobuf-c") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PROTOBUFC_CFLAGS=`$PKG_CONFIG --cflags "libprotobuf-c" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PROTOBUFC_LIBS"; then
+ pkg_cv_PROTOBUFC_LIBS="$PROTOBUFC_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libprotobuf-c\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libprotobuf-c") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PROTOBUFC_LIBS=`$PKG_CONFIG --libs "libprotobuf-c" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ PROTOBUFC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libprotobuf-c" 2>&1`
+ else
+ PROTOBUFC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libprotobuf-c" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PROTOBUFC_PKG_ERRORS" >&5
+
+
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+ else
+ as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
+ fi
+ fi
+
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing protobuf_c_message_pack" >&5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+ else
+ as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
+ fi
+ fi
+
+
+else
+ PROTOBUFC_CFLAGS=$pkg_cv_PROTOBUFC_CFLAGS
+ PROTOBUFC_LIBS=$pkg_cv_PROTOBUFC_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
+ LIBS="$LIBS $PROTOBUFC_LIBS"
+
+fi
+
+
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing protobuf_c_message_pack" >&5
$as_echo_n "checking for library containing protobuf_c_message_pack... " >&6; }
if ${ac_cv_search_protobuf_c_message_pack+:} false; then :
$as_echo_n "(cached) " >&6
@@ -21368,13 +21592,13 @@ _ACEOF
DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"
- else
+ else
ENABLE_DNSTAP=0
- fi
+ fi
# check for dnscrypt if requested
@@ -21895,7 +22119,7 @@ _ACEOF
-version=1.19.1
+version=1.19.3
date=`date +'%b %e, %Y'`
@@ -22414,7 +22638,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.19.1, which was
+This file was extended by unbound $as_me 1.19.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22480,7 +22704,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.19.1
+unbound config.status 1.19.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/contrib/unbound/configure.ac b/contrib/unbound/configure.ac
index 70fc7e7fdf49..e0dedbef9add 100644
--- a/contrib/unbound/configure.ac
+++ b/contrib/unbound/configure.ac
@@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4)
# must be numbers. ac_defun because of later processing
m4_define([VERSION_MAJOR],[1])
m4_define([VERSION_MINOR],[19])
-m4_define([VERSION_MICRO],[1])
+m4_define([VERSION_MICRO],[3])
AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound])
AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=24
+LIBUNBOUND_REVISION=26
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -110,6 +110,8 @@ LIBUNBOUND_AGE=1
# 1.18.0 had 9:22:1
# 1.19.0 had 9:23:1
# 1.19.1 had 9:24:1
+# 1.19.2 had 9:25:1
+# 1.19.3 had 9:26:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -407,7 +409,7 @@ AC_CHECK_TOOL(STRIP, strip)
ACX_LIBTOOL_C_ONLY
# pkg-config is only needed for these options, do not require it otherwise
-if test "$enable_systemd" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
+if test "$enable_systemd" = "yes" -o "$enable_dnstap" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
PKG_PROG_PKG_CONFIG
fi
@@ -1526,13 +1528,17 @@ if test x_$enable_static_exe = x_yes; then
if test "$on_mingw" = yes; then
staticexe="-all-static"
# for static compile, include gdi32 and zlib here.
- if echo $LIBS | grep 'lgdi32' >/dev/null; then
+ if echo "$LIBS" | grep 'lgdi32' >/dev/null; then
:
else
LIBS="$LIBS -lgdi32"
fi
AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
- LIBS="$LIBS -l:libssp.a"
+ if echo "$LIBS" | grep -e "libssp.a" -e "lssp" >/dev/null; then
+ :
+ else
+ LIBS="$LIBS -l:libssp.a"
+ fi
fi
fi
@@ -1549,7 +1555,11 @@ if test x_$enable_fully_static = x_yes; then
LIBS="$LIBS -lgdi32"
fi
AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
- LIBS="$LIBS -l:libssp.a"
+ if echo "$LIBS" | grep -e "libssp.a" -e "lssp" >/dev/null; then
+ :
+ else
+ LIBS="$LIBS -l:libssp.a"
+ fi
fi
fi
@@ -1569,7 +1579,11 @@ if test "$USE_WINSOCK" = 1; then
#include <windows.h>
])
AC_CHECK_TOOL(WINDRES, windres)
- LIBS="$LIBS -liphlpapi -lcrypt32"
+ if echo "$LIBS" | grep crypt32 >/dev/null; then
+ LIBS="$LIBS -liphlpapi"
+ else
+ LIBS="$LIBS -liphlpapi -lcrypt32"
+ fi
WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe"
AC_SUBST(WINAPPS)
WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c"
diff --git a/contrib/unbound/daemon/remote.c b/contrib/unbound/daemon/remote.c
index 3eb711ce6428..5d79eafd23be 100644
--- a/contrib/unbound/daemon/remote.c
+++ b/contrib/unbound/daemon/remote.c
@@ -553,7 +553,7 @@ ssl_print_text(RES* res, const char* text)
static int
ssl_print_vmsg(RES* ssl, const char* format, va_list args)
{
- char msg[1024];
+ char msg[65535];
vsnprintf(msg, sizeof(msg), format, args);
return ssl_print_text(ssl, msg);
}
@@ -3181,10 +3181,10 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
do_flush_bogus(ssl, worker);
} else if(cmdcmp(p, "flush_negative", 14)) {
do_flush_negative(ssl, worker);
- } else if(cmdcmp(p, "rpz_enable", 10)) {
- do_rpz_enable(ssl, worker, skipwhite(p+10));
- } else if(cmdcmp(p, "rpz_disable", 11)) {
- do_rpz_disable(ssl, worker, skipwhite(p+11));
+ } else if(cmdcmp(p, "rpz_enable", 10)) {
+ do_rpz_enable(ssl, worker, skipwhite(p+10));
+ } else if(cmdcmp(p, "rpz_disable", 11)) {
+ do_rpz_disable(ssl, worker, skipwhite(p+11));
} else {
(void)ssl_printf(ssl, "error unknown command '%s'\n", p);
}
diff --git a/contrib/unbound/daemon/worker.c b/contrib/unbound/daemon/worker.c
index 8ae05eb67e66..176abf57d56e 100644
--- a/contrib/unbound/daemon/worker.c
+++ b/contrib/unbound/daemon/worker.c
@@ -1151,7 +1151,7 @@ deny_refuse(struct comm_point* c, enum acl_access acl,
log_assert(sldns_buffer_limit(c->buffer) >= LDNS_HEADER_SIZE
&& LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) == 1);
- sldns_buffer_skip(c->buffer, LDNS_HEADER_SIZE); /* skip header */
+ sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE); /* skip header */
/* check additional section is present and that we respond with EDEs */
if(LDNS_ARCOUNT(sldns_buffer_begin(c->buffer)) != 1
@@ -1163,6 +1163,7 @@ deny_refuse(struct comm_point* c, enum acl_access acl,
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
LDNS_RCODE_REFUSED);
+ sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE);
sldns_buffer_flip(c->buffer);
return 1;
}
@@ -1326,15 +1327,6 @@ deny_refuse_non_local(struct comm_point* c, enum acl_access acl,
worker, repinfo, acladdr, ede, check_result);
}
-/* Returns 1 if the ip rate limit check can happen before EDNS parsing,
- * else 0 */
-static int
-pre_edns_ip_ratelimit_check(enum acl_access acl)
-{
- if(acl == acl_allow_cookie) return 0;
- return 1;
-}
-
/* Check if the query is blocked by source IP rate limiting.
* Returns 1 if it passes the check, 0 otherwise. */
static int
@@ -1463,7 +1455,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
if(worker->dtenv.log_client_query_messages) {
log_addr(VERB_ALGO, "request from client", &repinfo->client_addr, repinfo->client_addrlen);
log_addr(VERB_ALGO, "to local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
- dt_msg_send_client_query(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer,
+ dt_msg_send_client_query(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->ssl, c->buffer,
((worker->env.cfg->sock_queue_timeout && timeval_isset(&c->recv_tv))?&c->recv_tv:NULL));
}
#endif
@@ -1498,7 +1490,9 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
}
worker->stats.num_queries++;
- pre_edns_ip_ratelimit = pre_edns_ip_ratelimit_check(acl);
+ pre_edns_ip_ratelimit = !worker->env.cfg->do_answer_cookie
+ || sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE
+ || LDNS_ARCOUNT(sldns_buffer_begin(c->buffer)) == 0;
/* If the IP rate limiting check needs extra EDNS information (e.g.,
* DNS Cookies) postpone the check until after EDNS is parsed. */
@@ -1952,7 +1946,7 @@ send_reply_rc:
if(worker->dtenv.log_client_response_messages) {
log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
log_addr(VERB_ALGO, "response to client", &repinfo->client_addr, repinfo->client_addrlen);
- dt_msg_send_client_response(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer);
+ dt_msg_send_client_response(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->ssl, c->buffer);
}
#endif
if(worker->env.cfg->log_replies)
@@ -1966,11 +1960,15 @@ send_reply_rc:
qinfo.qname = qinfo.local_alias->rrset->rk.dname;
log_reply_info(NO_VERBOSE, &qinfo,
&repinfo->client_addr, repinfo->client_addrlen,
- tv, 1, c->buffer);
+ tv, 1, c->buffer,
+ (worker->env.cfg->log_destaddr?(void*)repinfo->c->socket->addr->ai_addr:NULL),
+ c->type);
} else {
log_reply_info(NO_VERBOSE, &qinfo,
&repinfo->client_addr, repinfo->client_addrlen,
- tv, 1, c->buffer);
+ tv, 1, c->buffer,
+ (worker->env.cfg->log_destaddr?(void*)repinfo->c->socket->addr->ai_addr:NULL),
+ c->type);
}
}
#ifdef USE_DNSCRYPT
diff --git a/contrib/unbound/dnstap/dnstap.c b/contrib/unbound/dnstap/dnstap.c
index d15eb9b004b2..5cdda0c2d77e 100644
--- a/contrib/unbound/dnstap/dnstap.c
+++ b/contrib/unbound/dnstap/dnstap.c
@@ -305,6 +305,7 @@ dt_msg_fill_net(struct dt_msg *dm,
struct sockaddr_storage *qs,
struct sockaddr_storage *rs,
enum comm_point_type cptype,
+ void *cpssl,
ProtobufCBinaryData *qaddr, protobuf_c_boolean *has_qaddr,
uint32_t *qport, protobuf_c_boolean *has_qport,
ProtobufCBinaryData *raddr, protobuf_c_boolean *has_raddr,
@@ -371,13 +372,26 @@ dt_msg_fill_net(struct dt_msg *dm,
*has_rport = 1;
}
- log_assert(cptype == comm_udp || cptype == comm_tcp);
if (cptype == comm_udp) {
/* socket_protocol */
dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__UDP;
dm->m.has_socket_protocol = 1;
} else if (cptype == comm_tcp) {
+ if (cpssl == NULL) {
+ /* socket_protocol */
+ dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__TCP;
+ dm->m.has_socket_protocol = 1;
+ } else {
+ /* socket_protocol */
+ dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__DOT;
+ dm->m.has_socket_protocol = 1;
+ }
+ } else if (cptype == comm_http) {
/* socket_protocol */
+ dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__DOH;
+ dm->m.has_socket_protocol = 1;
+ } else {
+ /* other socket protocol */
dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__TCP;
dm->m.has_socket_protocol = 1;
}
@@ -388,6 +402,7 @@ dt_msg_send_client_query(struct dt_env *env,
struct sockaddr_storage *qsock,
struct sockaddr_storage *rsock,
enum comm_point_type cptype,
+ void *cpssl,
sldns_buffer *qmsg,
struct timeval* tstamp)
{
@@ -410,8 +425,7 @@ dt_msg_send_client_query(struct dt_env *env,
dt_fill_buffer(qmsg, &dm.m.query_message, &dm.m.has_query_message);
/* socket_family, socket_protocol, query_address, query_port, response_address, response_port */
- log_assert(cptype == comm_udp || cptype == comm_tcp);
- dt_msg_fill_net(&dm, qsock, rsock, cptype,
+ dt_msg_fill_net(&dm, qsock, rsock, cptype, cpssl,
&dm.m.query_address, &dm.m.has_query_address,
&dm.m.query_port, &dm.m.has_query_port,
&dm.m.response_address, &dm.m.has_response_address,
@@ -427,6 +441,7 @@ dt_msg_send_client_response(struct dt_env *env,
struct sockaddr_storage *qsock,
struct sockaddr_storage *rsock,
enum comm_point_type cptype,
+ void *cpssl,
sldns_buffer *rmsg)
{
struct dt_msg dm;
@@ -446,8 +461,7 @@ dt_msg_send_client_response(struct dt_env *env,
dt_fill_buffer(rmsg, &dm.m.response_message, &dm.m.has_response_message);
/* socket_family, socket_protocol, query_address, query_port, response_address, response_port */
- log_assert(cptype == comm_udp || cptype == comm_tcp);
- dt_msg_fill_net(&dm, qsock, rsock, cptype,
+ dt_msg_fill_net(&dm, qsock, rsock, cptype, cpssl,
&dm.m.query_address, &dm.m.has_query_address,
&dm.m.query_port, &dm.m.has_query_port,
&dm.m.response_address, &dm.m.has_response_address,
@@ -462,6 +476,7 @@ dt_msg_send_outside_query(struct dt_env *env,
struct sockaddr_storage *rsock,
struct sockaddr_storage *qsock,
enum comm_point_type cptype,
+ void *cpssl,
uint8_t *zone, size_t zone_len,
sldns_buffer *qmsg)
{
@@ -497,8 +512,7 @@ dt_msg_send_outside_query(struct dt_env *env,
dt_fill_buffer(qmsg, &dm.m.query_message, &dm.m.has_query_message);
/* socket_family, socket_protocol, response_address, response_port, query_address, query_port */
- log_assert(cptype == comm_udp || cptype == comm_tcp);
- dt_msg_fill_net(&dm, rsock, qsock, cptype,
+ dt_msg_fill_net(&dm, rsock, qsock, cptype, cpssl,
&dm.m.response_address, &dm.m.has_response_address,
&dm.m.response_port, &dm.m.has_response_port,
&dm.m.query_address, &dm.m.has_query_address,
@@ -513,6 +527,7 @@ dt_msg_send_outside_response(struct dt_env *env,
struct sockaddr_storage *rsock,
struct sockaddr_storage *qsock,
enum comm_point_type cptype,
+ void *cpssl,
uint8_t *zone, size_t zone_len,
uint8_t *qbuf, size_t qbuf_len,
const struct timeval *qtime,
@@ -556,8 +571,7 @@ dt_msg_send_outside_response(struct dt_env *env,
dt_fill_buffer(rmsg, &dm.m.response_message, &dm.m.has_response_message);
/* socket_family, socket_protocol, response_address, response_port, query_address, query_port */
- log_assert(cptype == comm_udp || cptype == comm_tcp);
- dt_msg_fill_net(&dm, rsock, qsock, cptype,
+ dt_msg_fill_net(&dm, rsock, qsock, cptype, cpssl,
&dm.m.response_address, &dm.m.has_response_address,
&dm.m.response_port, &dm.m.has_response_port,
&dm.m.query_address, &dm.m.has_query_address,
diff --git a/contrib/unbound/dnstap/dnstap.h b/contrib/unbound/dnstap/dnstap.h
index 169bdc2c6815..77914c20c9cf 100644
--- a/contrib/unbound/dnstap/dnstap.h
+++ b/contrib/unbound/dnstap/dnstap.h
@@ -133,6 +133,7 @@ dt_msg_send_client_query(struct dt_env *env,
struct sockaddr_storage *qsock,
struct sockaddr_storage *rsock,
enum comm_point_type cptype,
+ void *cpssl,
struct sldns_buffer *qmsg,
struct timeval* tstamp);
@@ -149,6 +150,7 @@ dt_msg_send_client_response(struct dt_env *env,
struct sockaddr_storage *qsock,
struct sockaddr_storage *rsock,
enum comm_point_type cptype,
+ void *cpssl,
struct sldns_buffer *rmsg);
/**
@@ -168,6 +170,7 @@ dt_msg_send_outside_query(struct dt_env *env,
struct sockaddr_storage *rsock,
struct sockaddr_storage *qsock,
enum comm_point_type cptype,
+ void *cpssl,
uint8_t *zone, size_t zone_len,
struct sldns_buffer *qmsg);
@@ -192,6 +195,7 @@ dt_msg_send_outside_response(struct dt_env *env,
struct sockaddr_storage *rsock,
struct sockaddr_storage *qsock,
enum comm_point_type cptype,
+ void *cpssl,
uint8_t *zone, size_t zone_len,
uint8_t *qbuf, size_t qbuf_len,
const struct timeval *qtime,
diff --git a/contrib/unbound/dnstap/dnstap.m4 b/contrib/unbound/dnstap/dnstap.m4
index be8b40c4505d..80b7bc92c927 100644
--- a/contrib/unbound/dnstap/dnstap.m4
+++ b/contrib/unbound/dnstap/dnstap.m4
@@ -5,45 +5,76 @@
# Check for required dnstap libraries and add dnstap configure args.
AC_DEFUN([dt_DNSTAP],
[
- AC_ARG_ENABLE([dnstap],
- AS_HELP_STRING([--enable-dnstap],
- [Enable dnstap support (requires protobuf-c)]),
- [opt_dnstap=$enableval], [opt_dnstap=no])
+ AC_ARG_ENABLE([dnstap],
+ AS_HELP_STRING([--enable-dnstap],
+ [Enable dnstap support (requires protobuf-c)]),
+ [opt_dnstap=$enableval],
+ [opt_dnstap=no])
- AC_ARG_WITH([dnstap-socket-path],
- AS_HELP_STRING([--with-dnstap-socket-path=pathname],
- [set default dnstap socket path]),
- [opt_dnstap_socket_path=$withval], [opt_dnstap_socket_path="$1"])
+ AC_ARG_WITH([dnstap-socket-path],
+ AS_HELP_STRING([--with-dnstap-socket-path=pathname],
+ [set default dnstap socket path]),
+ [opt_dnstap_socket_path=$withval],
+ [opt_dnstap_socket_path="$1"])
- if test "x$opt_dnstap" != "xno"; then
- AC_PATH_PROG([PROTOC_C], [protoc-c])
- if test -z "$PROTOC_C"; then
- AC_MSG_ERROR([The protoc-c program was not found. Please install protobuf-c!])
+ if test "x$opt_dnstap" != "xno"; then
+ AC_PATH_PROG([PROTOC_C], [protoc-c])
+ if test -z "$PROTOC_C"; then
+ AC_MSG_ERROR([The protoc-c program was not found. Please install protobuf-c!])
+ fi
+ AC_ARG_WITH([protobuf-c],
+ AS_HELP_STRING([--with-protobuf-c=path], [Path where protobuf-c is installed, for dnstap]),
+ [
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f $withval/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I$withval/include/google"
+ else
+ CFLAGS="$CFLAGS -I$withval/include"
+ fi
+ LDFLAGS="$LDFLAGS -L$withval/lib"
+ ],
+ [
+ ifdef([PKG_CHECK_MODULES],
+ [
+ PKG_CHECK_MODULES([PROTOBUFC], [libprotobuf-c],
+ [
+ CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
+ LIBS="$LIBS $PROTOBUFC_LIBS"
+ ],
+ [
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+ else
+ AC_MSG_ERROR([The protobuf-c package was not found with pkg-config. Please install protobuf-c!])
+ fi
+ fi
+ ]
+ )
+ ],
+ [
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+ fi
+ fi
+ ]
+ )
+ ]
+ )
+ AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [],
+ AC_MSG_ERROR([The protobuf-c library was not found. Please install the development libraries for protobuf-c!]))
+ $2
+ else
+ $3
fi
- AC_ARG_WITH([protobuf-c], AS_HELP_STRING([--with-protobuf-c=path],
- [Path where protobuf-c is installed, for dnstap]), [
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f $withval/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I$withval/include/google"
- else
- CFLAGS="$CFLAGS -I$withval/include"
- fi
- LDFLAGS="$LDFLAGS -L$withval/lib"
- ], [
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
- else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- fi
- fi
- ])
- AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [],
- AC_MSG_ERROR([The protobuf-c library was not found. Please install the development libraries for protobuf-c!]))
- $2
- else
- $3
- fi
])
diff --git a/contrib/unbound/dnstap/dnstap.proto b/contrib/unbound/dnstap/dnstap.proto
index 88bfb4e94129..dfc8ad411d94 100644
--- a/contrib/unbound/dnstap/dnstap.proto
+++ b/contrib/unbound/dnstap/dnstap.proto
@@ -13,8 +13,8 @@
// with this file. If not, see:
//
// <http://creativecommons.org/publicdomain/zero/1.0/>.
-syntax = "proto2";
+syntax = "proto2";
package dnstap;
// "Dnstap": this is the top-level dnstap type, which is a "union" type that
@@ -56,11 +56,60 @@ enum SocketFamily {
INET6 = 2; // IPv6 (RFC 2460)
}
-// SocketProtocol: the transport protocol of a socket. This specifies how to
-// interpret "transport port" fields.
+// SocketProtocol: the protocol used to transport a DNS message.
enum SocketProtocol {
- UDP = 1; // User Datagram Protocol (RFC 768)
- TCP = 2; // Transmission Control Protocol (RFC 793)
+ UDP = 1; // DNS over UDP transport (RFC 1035 section 4.2.1)
+ TCP = 2; // DNS over TCP transport (RFC 1035 section 4.2.2)
+ DOT = 3; // DNS over TLS (RFC 7858)
+ DOH = 4; // DNS over HTTPS (RFC 8484)
+ DNSCryptUDP = 5; // DNSCrypt over UDP (https://dnscrypt.info/protocol)
+ DNSCryptTCP = 6; // DNSCrypt over TCP (https://dnscrypt.info/protocol)
+ DOQ = 7; // DNS over QUIC (RFC 9250)
+}
+
+// Policy: information about any name server operator policy
+// applied to the processing of a DNS message.
+message Policy {
+
+ // Match: what aspect of the message or message exchange
+ // triggered the application of the Policy.
+ enum Match {
+ QNAME = 1; // Name in question section of query
+ CLIENT_IP = 2; // Client IP address
+ RESPONSE_IP = 3; // Address in A/AAAA RRSet
+ NS_NAME = 4; // Authoritative name server, by name
+ NS_IP = 5; // Authoritative name server, by IP address
+ }
+
+ // The Action taken to implement the Policy.
+ enum Action {
+ NXDOMAIN = 1; // Respond with NXDOMAIN
+ NODATA = 2; // Respond with empty answer section
+ PASS = 3; // Do not alter the response (passthrough)
+ DROP = 4; // Do not respond.
+ TRUNCATE = 5; // Truncate UDP response, forcing TCP retry
+ LOCAL_DATA = 6; // Respond with local data from policy
+ }
+
+ // type: the type of policy applied, e.g. "RPZ" for a
+ // policy from a Response Policy Zone.
+ optional string type = 1;
+
+ // rule: the rule matched by the message.
+ //
+ // In a RPZ context, this is the owner name of the rule in
+ // the Reponse Policy Zone in wire format.
+ optional bytes rule = 2;
+
+ // action: the policy action taken in response to the
+ // rule match.
+ optional Action action = 3;
+
+ // match: the feature of the message exchange which matched the rule.
+ optional Match match = 4;
+
+ // The matched value. Format depends on the matched feature .
+ optional bytes value = 5;
}
// Message: a wire-format (RFC 1035 section 4) DNS message and associated
@@ -158,6 +207,24 @@ message Message {
// STUB_RESPONSE is a DNS response message sent from a DNS server to a
// stub resolver, from the perspective of the stub resolver.
STUB_RESPONSE = 10;
+
+ // TOOL_QUERY is a DNS query message sent from a DNS software tool to a
+ // DNS server, from the perspective of the tool.
+ TOOL_QUERY = 11;
+
+ // TOOL_RESPONSE is a DNS response message received by a DNS software
+ // tool from a DNS server, from the perspective of the tool.
+ TOOL_RESPONSE = 12;
+
+ // UPDATE_QUERY is a Dynamic DNS Update request (RFC 2136) received
+ // by an authoritative name server, from the perspective of the
+ // authoritative name server.
+ UPDATE_QUERY = 13;
+
+ // UPDATE_RESPONSE is a Dynamic DNS Update response (RFC 2136) sent
+ // from an authoritative name server, from the perspective of the
+ // authoritative name server.
+ UPDATE_RESPONSE = 14;
}
// One of the Type values described above.
@@ -215,6 +282,9 @@ message Message {
// The responder's original wire-format DNS response message, verbatim.
optional bytes response_message = 14;
+
+ // Operator policy applied to the processing of this message, if any.
+ optional Policy policy = 15;
}
// All fields except for 'type' in the Message schema are optional.
@@ -236,7 +306,6 @@ message Message {
// RESOLVER_QUERY:
// socket_family, socket_protocol
-// query_name, query_type, query_class
// query_message
// query_time_sec, query_time_nsec
// query_zone
@@ -244,7 +313,6 @@ message Message {
// RESOLVER_RESPONSE:
// socket_family, socket_protocol
-// query_name, query_type, query_class
// query_time_sec, query_time_nsec
// query_zone
// response_address, response_port
diff --git a/contrib/unbound/doc/Changelog b/contrib/unbound/doc/Changelog
index 05112e898a39..328e83289102 100644
--- a/contrib/unbound/doc/Changelog
+++ b/contrib/unbound/doc/Changelog
@@ -1,6 +1,144 @@
+8 March 2024: Wouter
+ - Fix unbound-control-setup.cmd to use 3072 bits so that certificates
+ are long enough for newer OpenSSL versions.
+ - Fix TTL of synthesized CNAME when a DNAME is used from cache.
+ - Fix unbound-control-setup.cmd to have CA v3 basicConstraints,
+ like unbound-control-setup.sh has.
+
+7 March 2024: Wouter
+ - Version set to 1.19.3 for release. After 1.19.2 point release with
+ security fix for CVE-2024-1931, Denial of service when trimming
+ EDE text on positive replies. The code repo includes the fix and
+ is for version 1.19.3.
+
+5 March 2024: Wouter
+ - Fix for #1022: Fix ede prohibited in access control refused answers.
+
+4 March 2024: Wouter
+ - Fix edns subnet replies for scope zero answers to not get stored
+ in the global cache, and in cachedb, when the upstream replies
+ without an EDNS record.
+
+28 February 2024: Wouter
+ - Move github workflows to use checkoutv4.
+
+23 February 2024: Yorgos
+ - Document the suspend argument for process_ds_response().
+
+22 February 2024: Wouter
+ - Fix trim of EDE text from large udp responses from spinning cpu.
+
+20 February 2024: Yorgos
+ - Merge #1010: Mention REFUSED has the TC bit set with unmatched
+ allow_cookie acl in the manpage. It also fixes the code to match the
+ documentation about clients with a valid cookie that bypass the
+ ratelimit regardless of the allow_cookie acl.
+
+13 February 2024: Wouter
+ - Fix CVE-2023-50387, DNSSEC verification complexity can be exploited
+ to exhaust CPU resources and stall DNS resolvers.
+ - Fix CVE-2023-50868, NSEC3 closest encloser proof can exhaust CPU.
+ - These fixes are part of the 1.19.1 release, that is a security
+ point release on 1.19.0, the code repository continues with these
+ fixes, with version number 1.19.2.
+
+8 February 2024: Wouter
+ - Fix documentation for access-control in the unbound.conf man page.
+
+7 February 2024: Yorgos
+ - Fix #1006: Can't find protobuf-c package since #999.
+
+30 January 2024: Wouter
+ - Merge #999: Search for protobuf-c with pkg-config.
+
+23 January 2024: Yorgos
+ - Update message TTL when using cached RRSETs. It could result in
+ non-expired messages with expired RRSETs (non-usable messages by
+ Unbound).
+
+22 January 2024: Yorgos
+ - Update error printout for duplicate trust anchors to include the
+ trust anchor name (relates to #920).
+
+22 January 2024: Wouter
+ - Fix for #997: Print details for SSL certificate failure.
+
+17 January 2024: Wouter
+ - Update workflow for ports to use newer openssl on windows compile.
+ - Fix warning for windres on resource files due to redefinition.
+
+16 January 2024: Wouter
+ - Fix to link with libssp for libcrypto and getaddrinfo check for
+ only header. Also update crosscompile to remove ssp for 32bit.
+ - Merge #993: Update b.root-servers.net also in example config file.
+
+15 January 2024: Wouter
+ - Fix to link with -lcrypt32 for OpenSSL 3.2.0 on Windows.
+
+9 January 2024: Wouter
+ - Merge #988: Fix NLnetLabs#981: dump_cache truncates large records.
+
+5 January 2024: Wouter
+ - Merge #987: skip edns frag retry if advertised udp payload size is
+ not smaller.
+ - Fix unit test for #987 change in udp1xxx retry packet send.
+
+4 January 2024: Wouter
+ - Remove unneeded newlines and improve indentation in remote control
+ code.
+
+3 January 2024: Wouter
+ - Merge #980: DoH: reject non-h2 early. To fix #979: Improve errors
+ for non-HTTP/2 DoH clients.
+ - Merge #985: Add DoH and DoT to dnstap message.
+ - Fix #983: Sha1 runtime insecure change was incomplete.
+
+22 December 2023: Yorgos
+ - Update example.conf with cookie options.
+
+8 December 2023: Yorgos
+ - Merge PR #973: Use the origin (DNAME) TTL for synthesized CNAMEs as
+ per RFC 6672.
+
+8 December 2023: Wouter
+ - Fix root_zonemd unit test, it checks that the root ZONEMD verifies,
+ now that the root has a valid ZONEMD.
+
+7 December 2023: Wouter
+ - Fix #974: doc: default number of outgoing ports without libevent.
+ - Merge #975: Fixed some syntax errors in rpl files.
+
+6 December 2023: Wouter
+ - Fix to sync the tests script file common.sh.
+ - iana portlist update.
+ - Updated IPv4 and IPv6 address for b.root-servers.net in root hints.
+ - Update test script file common.sh.
+ - Fix tests to use new common.sh functions, wait_logfile and
+ kill_from_pidfile.
+
+5 December 2023: Wouter
+ - Merge #971: fix 'WARNING: Message has 41 extra bytes at end'.
+ - Fix #969: [FR] distinguish Do53, DoT and DoH in the logs.
+ - Fix dnstap that assertion failed on logging other than UDP and TCP
+ traffic. It lists it as TCP traffic.
+
+27 November 2023: Yorgos
+ - Merge #968: Replace the obsolescent fgrep with grep -F in tests.
+
+27 November 2023: Wouter
+ - Fix #964: config.h.in~ backup file in release tar balls.
+
+24 November 2023: Yorgos
+ - Use 127.0.0.1 explicitly in tests to avoid delays and errors on
+ newer systems.
+
+9 November 2023: Wouter
+ - Fix unit test parse of origin syntax.
+
2 November 2023: Wouter
- Set version number to 1.19.0.
- - Tag for 1.19.0rc1 release.
+ - Tag for 1.19.0rc1 release. It became 1.19.0 release on 8 nov 2023.
+ The repository continues with 1.19.1.
1 November 2023: George
- Mention flex and bison in README.md when building from repository
diff --git a/contrib/unbound/doc/README b/contrib/unbound/doc/README
index eef91ce02836..b92f649ef30f 100644
--- a/contrib/unbound/doc/README
+++ b/contrib/unbound/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.19.1
+README for Unbound 1.19.3
Copyright 2007 NLnet Labs
http://unbound.net
@@ -19,11 +19,10 @@ The DNSTAP code has BSD license in dnstap/dnstap.c.
* Make and install: ./configure; make; make install
* --with-libevent=/path/to/libevent
Can be set to either the system install or the build directory.
- --with-libevent=no (default) gives a builtin alternative
- implementation. libevent is useful when having many (thousands)
- of outgoing ports. This improves randomization and spoof
- resistance. For the default of 16 ports the builtin alternative
- works well and is a little faster.
+ --with-libevent=no gives a builtin alternative implementation.
+ Libevent is enabled by default, it is useful when having many
+ (thousands) of outgoing ports. This improves randomization and spoof
+ resistance. It also allows a higher number of outgoing queries.
* --with-libexpat=/path/to/libexpat
Can be set to the install directory of libexpat.
* --without-pthreads
diff --git a/contrib/unbound/doc/example.conf.in b/contrib/unbound/doc/example.conf.in
index fcfb1da815db..d791cf8d4761 100644
--- a/contrib/unbound/doc/example.conf.in
+++ b/contrib/unbound/doc/example.conf.in
@@ -1,7 +1,7 @@
#
# Example configuration file.
#
-# See unbound.conf(5) man page, version 1.19.1.
+# See unbound.conf(5) man page, version 1.19.3.
#
# this is a comment.
@@ -303,6 +303,7 @@ server:
# Choose deny (drop message), refuse (polite error reply),
# allow (recursive ok), allow_setrd (recursive ok, rd bit is forced on),
# allow_snoop (recursive and nonrecursive ok)
+ # allow_cookie (allow UDP with valid cookie or stateful transport)
# deny_non_local (drop queries unless can be answered from local-data)
# refuse_non_local (like deny_non_local but polite error reply).
# access-control: 127.0.0.0/8 allow
@@ -441,6 +442,9 @@ server:
# filtering log-queries and log-replies from the log.
# log-tag-queryreply: no
+ # log with destination address, port and type for log-replies.
+ # log-destaddr: no
+
# log the local-zone actions, like local-zone type inform is enabled
# also for the other local zone types.
# log-local-actions: no
@@ -983,6 +987,13 @@ server:
# if 0(default) it is disabled, otherwise states qps allowed per ip address
# ip-ratelimit: 0
+ # global query ratelimit for all ip addresses with a valid DNS Cookie.
+ # feature is experimental.
+ # if 0(default) it is disabled, otherwise states qps allowed per ip address
+ # useful in combination with 'allow_cookie'.
+ # If used, suggested to be higher than ip-ratelimit, tenfold.
+ # ip-ratelimit-cookie: 0
+
# ip ratelimits are tracked in a cache, size in bytes of cache (or k,m).
# ip-ratelimit-size: 4m
# ip ratelimit cache slabs, reduces lock contention if equal to cpucount.
@@ -1004,6 +1015,14 @@ server:
# the number of servers that will be used in the fast server selection.
# fast-server-num: 3
+ # reply to requests containing DNS Cookies as specified in RFC 7873 and RFC 9018.
+ # answer-cookie: no
+
+ # secret for DNS Cookie generation.
+ # useful for anycast deployments.
+ # example value "000102030405060708090a0b0c0d0e0f".
+ # cookie-secret: <128 bit random hex string>
+
# Enable to attach Extended DNS Error codes (RFC8914) to responses.
# ede: no
@@ -1150,7 +1169,7 @@ remote-control:
# sources of notifies.
# auth-zone:
# name: "."
-# primary: 199.9.14.201 # b.root-servers.net
+# primary: 170.247.170.2 # b.root-servers.net
# primary: 192.33.4.12 # c.root-servers.net
# primary: 199.7.91.13 # d.root-servers.net
# primary: 192.5.5.241 # f.root-servers.net
@@ -1158,7 +1177,7 @@ remote-control:
# primary: 193.0.14.129 # k.root-servers.net
# primary: 192.0.47.132 # xfr.cjr.dns.icann.org
# primary: 192.0.32.132 # xfr.lax.dns.icann.org
-# primary: 2001:500:200::b # b.root-servers.net
+# primary: 2801:1b8:10::b # b.root-servers.net
# primary: 2001:500:2::c # c.root-servers.net
# primary: 2001:500:2d::d # d.root-servers.net
# primary: 2001:500:2f::f # f.root-servers.net
diff --git a/contrib/unbound/doc/libunbound.3.in b/contrib/unbound/doc/libunbound.3.in
index 4a55eaa9e2ca..aeffa9516514 100644
--- a/contrib/unbound/doc/libunbound.3.in
+++ b/contrib/unbound/doc/libunbound.3.in
@@ -1,4 +1,4 @@
-.TH "libunbound" "3" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "libunbound" "3" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" 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.19.1 functions.
+\- Unbound DNS validating resolver 1.19.3 functions.
.SH "SYNOPSIS"
.B #include <unbound.h>
.LP
diff --git a/contrib/unbound/doc/unbound-anchor.8.in b/contrib/unbound/doc/unbound-anchor.8.in
index fee56e9dfa51..f372d58e278a 100644
--- a/contrib/unbound/doc/unbound-anchor.8.in
+++ b/contrib/unbound/doc/unbound-anchor.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-anchor" "8" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "unbound-anchor" "8" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" unbound-anchor.8 -- unbound anchor maintenance utility manual
.\"
diff --git a/contrib/unbound/doc/unbound-checkconf.8.in b/contrib/unbound/doc/unbound-checkconf.8.in
index 9a14ef06bc3d..cde6d5c7aef2 100644
--- a/contrib/unbound/doc/unbound-checkconf.8.in
+++ b/contrib/unbound/doc/unbound-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-checkconf" "8" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "unbound-checkconf" "8" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" unbound-checkconf.8 -- unbound configuration checker manual
.\"
diff --git a/contrib/unbound/doc/unbound-control.8.in b/contrib/unbound/doc/unbound-control.8.in
index e747ec47e25a..4de6988ba0c0 100644
--- a/contrib/unbound/doc/unbound-control.8.in
+++ b/contrib/unbound/doc/unbound-control.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-control" "8" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "unbound-control" "8" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" unbound-control.8 -- unbound remote control manual
.\"
diff --git a/contrib/unbound/doc/unbound-host.1.in b/contrib/unbound/doc/unbound-host.1.in
index 9c9e9e2bf4a0..aacaa0e2eb31 100644
--- a/contrib/unbound/doc/unbound-host.1.in
+++ b/contrib/unbound/doc/unbound-host.1.in
@@ -1,4 +1,4 @@
-.TH "unbound\-host" "1" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "unbound\-host" "1" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" unbound-host.1 -- unbound DNS lookup utility
.\"
diff --git a/contrib/unbound/doc/unbound.8.in b/contrib/unbound/doc/unbound.8.in
index 4967a22d328c..542c71e52486 100644
--- a/contrib/unbound/doc/unbound.8.in
+++ b/contrib/unbound/doc/unbound.8.in
@@ -1,4 +1,4 @@
-.TH "unbound" "8" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "unbound" "8" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" unbound.8 -- unbound manual
.\"
@@ -9,7 +9,7 @@
.\"
.SH "NAME"
.B unbound
-\- Unbound DNS validating resolver 1.19.1.
+\- Unbound DNS validating resolver 1.19.3.
.SH "SYNOPSIS"
.B unbound
.RB [ \-h ]
diff --git a/contrib/unbound/doc/unbound.conf.5.in b/contrib/unbound/doc/unbound.conf.5.in
index 79ca04904c96..d37451aa4539 100644
--- a/contrib/unbound/doc/unbound.conf.5.in
+++ b/contrib/unbound/doc/unbound.conf.5.in
@@ -1,4 +1,4 @@
-.TH "unbound.conf" "5" "Feb 13, 2024" "NLnet Labs" "unbound 1.19.1"
+.TH "unbound.conf" "5" "Mar 14, 2024" "NLnet Labs" "unbound 1.19.3"
.\"
.\" unbound.conf.5 -- unbound.conf manual
.\"
@@ -699,6 +699,12 @@ When at the limit, further connections are accepted but closed immediately.
This option is experimental at this time.
.TP
.B access\-control: \fI<IP netblock> <action>
+Specify treatment of incoming queries from their originating IP address.
+Queries can be allowed to have access to this server that gives DNS
+answers, or refused, with other actions possible. The IP address range
+can be specified as a netblock, it is possible to give the statement
+several times in order to specify the treatment of different netblocks.
+.IP
The netblock is given as an IP4 or IP6 address with /size appended for a
classless network block. The action can be \fIdeny\fR, \fIrefuse\fR,
\fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIallow_cookie\fR,
@@ -738,7 +744,7 @@ the cache contents (for malicious acts). However, nonrecursive queries can
also be a valuable debugging tool (when you want to examine the cache
contents). In that case use \fIallow_snoop\fR for your administration host.
.IP
-The \fIallow_cookie\fR action allows access to UDP queries that contain a
+The \fIallow_cookie\fR action allows access only to UDP queries that contain a
valid DNS Cookie as specified in RFC 7873 and RFC 9018, when the
\fBanswer\-cookie\fR option is enabled.
UDP queries containing only a DNS Client Cookie and no Server Cookie, or an
@@ -747,10 +753,8 @@ generated DNS Cookie, allowing clients to retry with that DNS Cookie.
The \fIallow_cookie\fR action will also accept requests over stateful
transports, regardless of the presence of an DNS Cookie and regardless of the
\fBanswer\-cookie\fR setting.
-If \fBip\-ratelimit\fR is used, clients with a valid DNS Cookie will bypass the
-ratelimit.
-If a ratelimit for such clients is still needed, \fBip\-ratelimit\-cookie\fR
-can be used instead.
+UDP queries without a DNS Cookie receive REFUSED responses with the TC flag set,
+that may trigger fall back to TCP for those clients.
.IP
By default only localhost is \fIallow\fRed, the rest is \fIrefuse\fRd.
The default is \fIrefuse\fRd, because that is protocol\-friendly. The DNS
@@ -913,6 +917,11 @@ Prints the word 'query' and 'reply' with log\-queries and log\-replies.
This makes filtering logs easier. The default is off (for backwards
compatibility).
.TP
+.B log\-destaddr: \fI<yes or no>
+Prints the destination address, port and type in the log\-replies output.
+This disambiguates what type of traffic, eg. udp or tcp, and to what local
+port the traffic was sent to.
+.TP
.B log\-local\-actions: \fI<yes or no>
Print log lines to inform about local zone actions. These lines are like the
local\-zone type inform prints out, but they are also printed for the other
@@ -1839,6 +1848,9 @@ The ratelimit is in queries per second that are allowed. More queries are
completely dropped and will not receive a reply, SERVFAIL or otherwise.
IP ratelimiting happens before looking in the cache. This may be useful for
mitigating amplification attacks.
+Clients with a valid DNS Cookie will bypass the ratelimit.
+If a ratelimit for such clients is still needed, \fBip\-ratelimit\-cookie\fR
+can be used instead.
Default is 0 (disabled).
.TP 5
.B ip\-ratelimit\-cookie: \fI<number or 0>
diff --git a/contrib/unbound/iterator/iter_fwd.c b/contrib/unbound/iterator/iter_fwd.c
index 151372912476..c4b2411297e3 100644
--- a/contrib/unbound/iterator/iter_fwd.c
+++ b/contrib/unbound/iterator/iter_fwd.c
@@ -523,4 +523,3 @@ forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm)
fwd_zone_free(z);
fwd_init_parents(fwd);
}
-
diff --git a/contrib/unbound/iterator/iter_hints.c b/contrib/unbound/iterator/iter_hints.c
index a60d9a6b1cf2..4f86f3676a29 100644
--- a/contrib/unbound/iterator/iter_hints.c
+++ b/contrib/unbound/iterator/iter_hints.c
@@ -129,7 +129,7 @@ compile_time_root_prime(int do_ip4, int do_ip6)
dp->has_parent_side_NS = 1;
if(do_ip4) {
if(!ah(dp, "A.ROOT-SERVERS.NET.", "198.41.0.4")) goto failed;
- if(!ah(dp, "B.ROOT-SERVERS.NET.", "199.9.14.201")) goto failed;
+ if(!ah(dp, "B.ROOT-SERVERS.NET.", "170.247.170.2")) goto failed;
if(!ah(dp, "C.ROOT-SERVERS.NET.", "192.33.4.12")) goto failed;
if(!ah(dp, "D.ROOT-SERVERS.NET.", "199.7.91.13")) goto failed;
if(!ah(dp, "E.ROOT-SERVERS.NET.", "192.203.230.10")) goto failed;
@@ -144,7 +144,7 @@ compile_time_root_prime(int do_ip4, int do_ip6)
}
if(do_ip6) {
if(!ah(dp, "A.ROOT-SERVERS.NET.", "2001:503:ba3e::2:30")) goto failed;
- if(!ah(dp, "B.ROOT-SERVERS.NET.", "2001:500:200::b")) goto failed;
+ if(!ah(dp, "B.ROOT-SERVERS.NET.", "2801:1b8:10::b")) goto failed;
if(!ah(dp, "C.ROOT-SERVERS.NET.", "2001:500:2::c")) goto failed;
if(!ah(dp, "D.ROOT-SERVERS.NET.", "2001:500:2d::d")) goto failed;
if(!ah(dp, "E.ROOT-SERVERS.NET.", "2001:500:a8::e")) goto failed;
@@ -560,4 +560,3 @@ hints_delete_stub(struct iter_hints* hints, uint16_t c, uint8_t* nm)
hints_stub_free(z);
name_tree_init_parents(&hints->tree);
}
-
diff --git a/contrib/unbound/iterator/iter_scrub.c b/contrib/unbound/iterator/iter_scrub.c
index 5f2e30337229..48867e50c557 100644
--- a/contrib/unbound/iterator/iter_scrub.c
+++ b/contrib/unbound/iterator/iter_scrub.c
@@ -283,7 +283,8 @@ synth_cname_rrset(uint8_t** sname, size_t* snamelen, uint8_t* alias,
sizeof(uint32_t)+sizeof(uint16_t)+aliaslen);
if(!cn->rr_first->ttl_data)
return NULL;
- sldns_write_uint32(cn->rr_first->ttl_data, 0); /* TTL = 0 */
+ memmove(cn->rr_first->ttl_data, rrset->rr_first->ttl_data,
+ sizeof(uint32_t)); /* RFC6672: synth CNAME TTL == DNAME TTL */
sldns_write_uint16(cn->rr_first->ttl_data+4, aliaslen);
memmove(cn->rr_first->ttl_data+6, alias, aliaslen);
cn->rr_first->size = sizeof(uint16_t)+aliaslen;
diff --git a/contrib/unbound/iterator/iterator.c b/contrib/unbound/iterator/iterator.c
index 6ff811a27d06..e9fea544aa69 100644
--- a/contrib/unbound/iterator/iterator.c
+++ b/contrib/unbound/iterator/iterator.c
@@ -4151,10 +4151,10 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
/* like packet got dropped */
goto handle_it;
}
- if(!inplace_cb_edns_back_parsed_call(qstate->env, qstate)) {
- log_err("unable to call edns_back_parsed callback");
- goto handle_it;
- }
+ }
+ if(!inplace_cb_edns_back_parsed_call(qstate->env, qstate)) {
+ log_err("unable to call edns_back_parsed callback");
+ goto handle_it;
}
/* remove CD-bit, we asked for in case we handle validation ourself */
diff --git a/contrib/unbound/services/authzone.c b/contrib/unbound/services/authzone.c
index 761bcc6d9a75..dae89ffb63a5 100644
--- a/contrib/unbound/services/authzone.c
+++ b/contrib/unbound/services/authzone.c
@@ -2702,7 +2702,7 @@ create_synth_cname(uint8_t* qname, size_t qname_len, struct regional* region,
if(!d)
return 0; /* out of memory */
(*cname)->entry.data = d;
- d->ttl = 0; /* 0 for synthesized CNAME TTL */
+ d->ttl = dname->data->ttl; /* RFC6672: synth CNAME TTL == DNAME TTL */
d->count = 1;
d->rrsig_count = 0;
d->trust = rrset_trust_ans_noAA;
diff --git a/contrib/unbound/services/cache/dns.c b/contrib/unbound/services/cache/dns.c
index 7bc1b7b47bf1..6a980548d72f 100644
--- a/contrib/unbound/services/cache/dns.c
+++ b/contrib/unbound/services/cache/dns.c
@@ -80,6 +80,7 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now,
struct regional* region, time_t qstarttime)
{
size_t i;
+ time_t ttl, min_ttl = rep->ttl;
/* see if rrset already exists in cache, if not insert it. */
for(i=0; i<rep->rrset_count; i++) {
rep->ref[i].key = rep->rrsets[i];
@@ -112,6 +113,15 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now,
case 1: /* ref updated, item inserted */
rep->rrsets[i] = rep->ref[i].key;
}
+ /* if ref was updated make sure the message ttl is updated to
+ * the minimum of the current rrsets. */
+ ttl = ((struct packed_rrset_data*)rep->rrsets[i]->entry.data)->ttl;
+ if(ttl < min_ttl) min_ttl = ttl;
+ }
+ if(min_ttl < rep->ttl) {
+ rep->ttl = min_ttl;
+ rep->prefetch_ttl = PREFETCH_TTL_CALC(rep->ttl);
+ rep->serve_expired_ttl = rep->ttl + SERVE_EXPIRED_TTL;
}
}
@@ -818,7 +828,7 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
if(!newd)
return NULL;
ck->entry.data = newd;
- newd->ttl = 0; /* 0 for synthesized CNAME TTL */
+ newd->ttl = d->ttl - now; /* RFC6672: synth CNAME TTL == DNAME TTL */
newd->count = 1;
newd->rrsig_count = 0;
newd->trust = rrset_trust_ans_noAA;
diff --git a/contrib/unbound/services/localzone.c b/contrib/unbound/services/localzone.c
index 44da22d785d9..9c8e3c7acb16 100644
--- a/contrib/unbound/services/localzone.c
+++ b/contrib/unbound/services/localzone.c
@@ -1532,7 +1532,7 @@ local_data_answer(struct local_zone* z, struct module_env* env,
return 0; /* invalid cname */
if(dname_is_wild(ctarget)) {
/* synthesize cname target */
- struct packed_rrset_data* d;
+ struct packed_rrset_data* d, *lr_d;
/* -3 for wildcard label and root label from qname */
size_t newtargetlen = qinfo->qname_len + ctargetlen - 3;
@@ -1560,8 +1560,10 @@ local_data_answer(struct local_zone* z, struct module_env* env,
+ newtargetlen);
if(!d)
return 0; /* out of memory */
+ lr_d = (struct packed_rrset_data*)lr->rrset->entry.data;
qinfo->local_alias->rrset->entry.data = d;
- d->ttl = 0; /* 0 for synthesized CNAME TTL */
+ d->ttl = lr_d->rr_ttl[0]; /* RFC6672-like behavior:
+ synth CNAME TTL uses original TTL*/
d->count = 1;
d->rrsig_count = 0;
d->trust = rrset_trust_ans_noAA;
diff --git a/contrib/unbound/services/mesh.c b/contrib/unbound/services/mesh.c
index 509bee36a2c4..47cfb04249b5 100644
--- a/contrib/unbound/services/mesh.c
+++ b/contrib/unbound/services/mesh.c
@@ -69,6 +69,12 @@
#include "edns-subnet/subnetmod.h"
#include "edns-subnet/edns-subnet.h"
#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
/**
* Compare two response-ip client info entries for the purpose of mesh state
@@ -1429,7 +1435,9 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
if(m->s.env->cfg->log_replies) {
log_reply_info(NO_VERBOSE, &m->s.qinfo,
&r->query_reply.client_addr,
- r->query_reply.client_addrlen, duration, 0, r_buffer);
+ r->query_reply.client_addrlen, duration, 0, r_buffer,
+ (m->s.env->cfg->log_destaddr?(void*)r->query_reply.c->socket->addr->ai_addr:NULL),
+ r->query_reply.c->type);
}
}
diff --git a/contrib/unbound/services/outside_network.c b/contrib/unbound/services/outside_network.c
index 12923f07d788..1f89740da360 100644
--- a/contrib/unbound/services/outside_network.c
+++ b/contrib/unbound/services/outside_network.c
@@ -1009,7 +1009,7 @@ use_free_buffer(struct outside_network* outnet)
sldns_buffer tmp;
sldns_buffer_init_frm_data(&tmp, w->pkt, w->pkt_len);
dt_msg_send_outside_query(outnet->dtenv, &w->sq->addr,
- &pend_tcp->pi->addr, comm_tcp, w->sq->zone,
+ &pend_tcp->pi->addr, comm_tcp, NULL, w->sq->zone,
w->sq->zonelen, &tmp);
}
#endif
@@ -2237,7 +2237,7 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout)
outnet->dtenv->log_forwarder_query_messages)) {
log_addr(VERB_ALGO, "from local addr", &pend->pc->pif->addr, pend->pc->pif->addrlen);
log_addr(VERB_ALGO, "request to upstream", &pend->addr, pend->addrlen);
- dt_msg_send_outside_query(outnet->dtenv, &pend->addr, &pend->pc->pif->addr, comm_udp,
+ dt_msg_send_outside_query(outnet->dtenv, &pend->addr, &pend->pc->pif->addr, comm_udp, NULL,
pend->sq->zone, pend->sq->zonelen, packet);
}
#endif
@@ -2517,7 +2517,7 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet,
sldns_buffer tmp;
sldns_buffer_init_frm_data(&tmp, w->pkt, w->pkt_len);
dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr,
- &pend->pi->addr, comm_tcp, sq->zone,
+ &pend->pi->addr, comm_tcp, NULL, sq->zone,
sq->zonelen, &tmp);
}
#endif
@@ -2820,6 +2820,25 @@ serviced_perturb_qname(struct ub_randstate* rnd, uint8_t* qbuf, size_t len)
}
}
+static uint16_t
+serviced_query_udp_size(struct serviced_query* sq, enum serviced_query_status status) {
+ uint16_t udp_size;
+ if(status == serviced_query_UDP_EDNS_FRAG) {
+ if(addr_is_ip6(&sq->addr, sq->addrlen)) {
+ if(EDNS_FRAG_SIZE_IP6 < EDNS_ADVERTISED_SIZE)
+ udp_size = EDNS_FRAG_SIZE_IP6;
+ else udp_size = EDNS_ADVERTISED_SIZE;
+ } else {
+ if(EDNS_FRAG_SIZE_IP4 < EDNS_ADVERTISED_SIZE)
+ udp_size = EDNS_FRAG_SIZE_IP4;
+ else udp_size = EDNS_ADVERTISED_SIZE;
+ }
+ } else {
+ udp_size = EDNS_ADVERTISED_SIZE;
+ }
+ return udp_size;
+}
+
/** put serviced query into a buffer */
static void
serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns)
@@ -2843,19 +2862,7 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns)
edns.opt_list_in = NULL;
edns.opt_list_out = sq->opt_list;
edns.opt_list_inplace_cb_out = NULL;
- if(sq->status == serviced_query_UDP_EDNS_FRAG) {
- if(addr_is_ip6(&sq->addr, sq->addrlen)) {
- if(EDNS_FRAG_SIZE_IP6 < EDNS_ADVERTISED_SIZE)
- edns.udp_size = EDNS_FRAG_SIZE_IP6;
- else edns.udp_size = EDNS_ADVERTISED_SIZE;
- } else {
- if(EDNS_FRAG_SIZE_IP4 < EDNS_ADVERTISED_SIZE)
- edns.udp_size = EDNS_FRAG_SIZE_IP4;
- else edns.udp_size = EDNS_ADVERTISED_SIZE;
- }
- } else {
- edns.udp_size = EDNS_ADVERTISED_SIZE;
- }
+ edns.udp_size = serviced_query_udp_size(sq, sq->status);
edns.bits = 0;
if(sq->dnssec & EDNS_DO)
edns.bits = EDNS_DO;
@@ -3083,7 +3090,7 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error,
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(sq->outnet->dtenv, &sq->addr,
- &pi->addr, c->type, sq->zone, sq->zonelen, sq->qbuf,
+ &pi->addr, c->type, c->ssl, sq->zone, sq->zonelen, sq->qbuf,
sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv,
c->buffer);
}
@@ -3252,7 +3259,8 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
sq->pending = NULL; /* removed after callback */
if(error == NETEVENT_TIMEOUT) {
- if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000) {
+ if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000 &&
+ (serviced_query_udp_size(sq, serviced_query_UDP_EDNS_FRAG) < serviced_query_udp_size(sq, serviced_query_UDP_EDNS))) {
/* fallback to 1480/1280 */
sq->status = serviced_query_UDP_EDNS_FRAG;
log_name_addr(VERB_ALGO, "try edns1xx0", sq->qbuf+10,
@@ -3296,7 +3304,7 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
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,
+ &p->pc->pif->addr, c->type, c->ssl, sq->zone, sq->zonelen,
sq->qbuf, sq->qbuflen, &sq->last_sent_time,
sq->outnet->now_tv, c->buffer);
}
diff --git a/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.post b/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.post
index 901f01a8753d..320dcc3e3e3b 100644
--- a/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.post
+++ b/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.post
@@ -16,5 +16,5 @@ if test -f fwd4.log; then cat fwd4.log; else echo "no fwd4.log"; fi
cat unbound.log
if test -f unbound2.log; then cat unbound2.log; else echo "no unbound2.log"; fi
kill_pid $FWD_PID
-kill_pid `cat unbound.pid`
+kill_from_pidfile "unbound.pid"
rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID
diff --git a/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.test b/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.test
index 352026844776..47a89656c6c2 100644
--- a/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.test
+++ b/contrib/unbound/testdata/cachedb_no_store.tdir/cachedb_no_store.test
@@ -13,7 +13,7 @@ get_ldns_testns
# query for a text record that is stored by unbound's cache and cachedb
# in the testframe cache.
echo "> dig txt1.example.com."
-dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
+dig @127.0.0.1 -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
if grep "example text message" outfile; then
echo "OK"
else
@@ -31,7 +31,7 @@ echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
wait_ldns_testns_up fwd2.log
echo "> dig txt1.example.com. from unbound cache"
-dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
+dig @127.0.0.1 -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
if grep "example text message" outfile; then
echo "OK"
else
@@ -50,7 +50,7 @@ else
fi
echo "> dig txt1.example.com. from cachedb"
-dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
+dig @127.0.0.1 -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
if grep "example text message" outfile; then
echo "OK"
else
@@ -69,7 +69,7 @@ wait_ldns_testns_up fwd3.log
# stop unbound to flush the cachedb cache
echo "> stop unbound"
-kill_pid `cat unbound.pid`
+kill_from_pidfile "unbound.pid"
echo ""
echo "> config unbound with cachedb-no-store: yes"
@@ -84,7 +84,7 @@ wait_unbound_up unbound2.log
echo ""
echo "> dig txt1.example.com."
-dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
+dig @127.0.0.1 -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
if grep "example text message" outfile; then
echo "OK"
else
@@ -102,7 +102,7 @@ echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
wait_ldns_testns_up fwd4.log
echo "> dig txt1.example.com. from unbound cache"
-dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
+dig @127.0.0.1 -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
if grep "example text message" outfile; then
echo "OK"
else
@@ -121,7 +121,7 @@ else
fi
echo "> dig txt1.example.com. from cachedb, but that has no message stored"
-dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
+dig @127.0.0.1 -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile
if grep "SERVFAIL" outfile; then
echo "OK"
else
diff --git a/contrib/unbound/testdata/iter_cname_minimise_nx.rpl b/contrib/unbound/testdata/iter_cname_minimise_nx.rpl
index 080055208daf..a04eb8b24791 100644
--- a/contrib/unbound/testdata/iter_cname_minimise_nx.rpl
+++ b/contrib/unbound/testdata/iter_cname_minimise_nx.rpl
@@ -241,6 +241,5 @@ v.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 ex
example.com. 3600 IN NSEC abc.example.com. NS SOA RRSIG NSEC DNSKEY
example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. ABEOu6iietfjKY1MS0TutZZxUtRYA6XKsC1rMTrenwBF2darY3/Emco=
ENTRY_END
-ENTRY_END
SCENARIO_END
diff --git a/contrib/unbound/testdata/iter_dname_ttl.rpl b/contrib/unbound/testdata/iter_dname_ttl.rpl
new file mode 100644
index 000000000000..115947af3ab3
--- /dev/null
+++ b/contrib/unbound/testdata/iter_dname_ttl.rpl
@@ -0,0 +1,310 @@
+; config options
+; The island of trust is at example.com
+; validation is enabled because the pickup of DNAME from cache wants
+; a DNSSEC signed DNAME.
+server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}"
+ val-override-date: "20070916134226"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator for TTL of synthesized CNAME of a DNAME from cache.
+
+; 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 subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. 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
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+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 DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{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
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN CNAME
+SECTION ANSWER
+www.example.com. IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. 3600 IN CNAME www.example.net.
+www2.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926135752 20070829135752 2854 example.com. AGgh6pDCL7VF0uJablClW7cgvsPuNzpHZ+M7nZIwi61+0RPhFZLHcN4=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 3600 IN DNAME example.net.
+test-dname.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926135752 20070829135752 2854 example.com. ACp31Evt1c6tKzmTh/smAuGFydZ1OO26Qkej/BW4Bw5RFBQiKaY22Z0=
+foo.test-dname.example.com. 3600 IN CNAME foo.example.net.
+ENTRY_END
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN DNSKEY
+SECTION ANSWER
+example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
+example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899}
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.net. IN A
+SECTION ANSWER
+www.example.net. IN A 11.12.13.14
+www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo.example.net. IN A
+SECTION ANSWER
+foo.example.net. IN A 11.12.13.15
+foo.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. X6T6SE9UzxAD/4zKpwGOxEDyE4g7lfYYw3lvw533uwRN8mWTcBvSva0/jjyhrogJcuLO32jPHK6zGb93w2xnuA==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo2.example.net. IN A
+SECTION ANSWER
+foo2.example.net. IN A 11.12.13.16
+foo2.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 TIME_PASSES ELAPSE 10
+; Get DNAME in cache and then pick it up again from cache.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo.test-dname.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 3600 IN DNAME example.net.
+test-dname.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926135752 20070829135752 2854 example.com. ACp31Evt1c6tKzmTh/smAuGFydZ1OO26Qkej/BW4Bw5RFBQiKaY22Z0=
+foo.test-dname.example.com. 3600 IN CNAME foo.example.net.
+foo.example.net. IN A 11.12.13.15
+foo.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. X6T6SE9UzxAD/4zKpwGOxEDyE4g7lfYYw3lvw533uwRN8mWTcBvSva0/jjyhrogJcuLO32jPHK6zGb93w2xnuA==
+ENTRY_END
+
+STEP 30 TIME_PASSES ELAPSE 10
+
+; Use DNAME from cache
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+ENTRY_END
+
+; Test the TTL on the synthesized CNAME for the DNAME record from cache.
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 3590 IN DNAME example.net.
+test-dname.example.com. 3590 IN RRSIG DNAME 3 3 3600 20070926135752 20070829135752 2854 example.com. ACp31Evt1c6tKzmTh/smAuGFydZ1OO26Qkej/BW4Bw5RFBQiKaY22Z0=
+foo2.test-dname.example.com. 3590 IN CNAME foo2.example.net.
+foo2.example.net. 3600 IN A 11.12.13.16
+foo2.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+ENTRY_END
+
+SCENARIO_END
diff --git a/contrib/unbound/testdata/root_zonemd.tdir/root_zonemd.test b/contrib/unbound/testdata/root_zonemd.tdir/root_zonemd.test
index da64ab6e9c2d..2745b5009e8f 100644
--- a/contrib/unbound/testdata/root_zonemd.tdir/root_zonemd.test
+++ b/contrib/unbound/testdata/root_zonemd.tdir/root_zonemd.test
@@ -6,8 +6,8 @@
PRE="../.."
# do the test
-echo "> dig www.example.com."
-dig @localhost -p $UNBOUND_PORT . SOA | tee outfile
+echo "> dig . SOA"
+dig @127.0.0.1 -p $UNBOUND_PORT . SOA | tee outfile
echo "> check answer"
if grep root-servers outfile | grep "nstld.verisign-grs.com"; then
echo "OK"
@@ -26,7 +26,19 @@ else
fi
# This is the output when an unsupported algorithm is used.
-if grep "auth zone . ZONEMD unsupported algorithm" unbound.log; then
+if grep "auth zone . zonemd DNSSEC verification of SOA and ZONEMD RRsets secure" unbound.log; then
+ echo "OK"
+else
+ echo "ZONEMD verification not OK"
+ exit 1
+fi
+if grep "auth-zone . ZONEMD hash is correct" unbound.log; then
+ echo "OK"
+else
+ echo "ZONEMD verification not OK"
+ exit 1
+fi
+if grep "auth zone . ZONEMD verification successful" unbound.log; then
echo "OK"
else
echo "ZONEMD verification not OK"
@@ -40,12 +52,12 @@ if test $? -ne 0; then
exit 1
fi
# The output of the reload can be checked.
-#echo "> check unbound-control output"
-#if grep "example.com: ZONEMD verification successful" outfile; then
- #echo "OK"
-#else
- #echo "Not OK"
- #exit 1
-#fi
+echo "> check unbound-control output"
+if grep ".: ZONEMD verification successful" outfile; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
exit 0
diff --git a/contrib/unbound/testdata/rrset_use_cached.rpl b/contrib/unbound/testdata/rrset_use_cached.rpl
new file mode 100644
index 000000000000..8420ae02afe6
--- /dev/null
+++ b/contrib/unbound/testdata/rrset_use_cached.rpl
@@ -0,0 +1,151 @@
+server:
+ minimal-responses: no
+ serve-expired: yes
+ # The value does not matter, we will not simulate delay.
+ # We do not want only serve-expired because fetches from that
+ # apply a generous PREFETCH_LEEWAY.
+ serve-expired-client-timeout: 1000
+ # So that we can only have to give one SERVFAIL answer.
+ outbound-msg-retry: 0
+
+forward-zone: name: "." forward-addr: 216.0.0.1
+CONFIG_END
+
+SCENARIO_BEGIN RRset from cache updates the message TTL.
+
+STEP 1 QUERY
+ENTRY_BEGIN
+ REPLY RD
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+; the query is sent to the forwarder - no cache yet.
+STEP 2 CHECK_OUT_QUERY
+ENTRY_BEGIN
+ MATCH qname qtype opcode
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+STEP 3 REPLY
+ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ ; authoritative answer
+ REPLY QR AA RD RA NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 5 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. 10 IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. 10 IN A 10.20.30.50
+ENTRY_END
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ttl
+ REPLY QR RD RA
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 5 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. 10 IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. 10 IN A 10.20.30.50
+ENTRY_END
+
+; Wait for the A RRSET to expire.
+STEP 5 TIME_PASSES ELAPSE 6
+
+STEP 6 QUERY
+ENTRY_BEGIN
+ REPLY RD
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+; expired answer will not be served due to serve-expired-client-timeout.
+STEP 7 CHECK_OUT_QUERY
+ENTRY_BEGIN
+ MATCH qname qtype opcode
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+STEP 8 REPLY
+ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ ; authoritative answer
+ REPLY QR AA RD RA NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 5 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. 10 IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. 10 IN A 10.20.30.50
+ENTRY_END
+; The cached NS related RRSETs will not be overwritten by the fresh answer.
+; The message should have a TTL of 4 instead of 5 from above.
+STEP 9 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ttl
+ REPLY QR RD RA
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 5 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. 4 IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. 4 IN A 10.20.30.50
+ENTRY_END
+
+; Wait for the NS RRSETs to expire.
+STEP 10 TIME_PASSES ELAPSE 5
+
+STEP 11 QUERY
+ENTRY_BEGIN
+ REPLY RD
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+; The message should be expired, again no expired answer at this point due to
+; serve-expired-client-timeout.
+STEP 12 CHECK_OUT_QUERY
+ENTRY_BEGIN
+ MATCH qname qtype opcode
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+STEP 13 REPLY
+ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD RA SERVFAIL
+ SECTION QUESTION
+ www.example.com. IN A
+ENTRY_END
+; The SERVFAIL will trigger the serve-expired-client-timeout logic to try and
+; replace the SERVFAIL with a possible cached (expired) answer.
+; The A RRSET would be at 0TTL left (not expired) but the message should have
+; been updated to use a TTL of 4 so expired by now.
+; If the message TTL was not updated (bug), this message would be treated as
+; non-expired and the now expired NS related RRSETs would fail sanity checks
+; for non-expired messages. The result would be SERVFAIL here.
+STEP 14 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ttl
+ REPLY QR RD RA
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 0 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. 30 IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. 30 IN A 10.20.30.50
+ENTRY_END
+
+SCENARIO_END
diff --git a/contrib/unbound/testdata/serve_expired_0ttl_nodata.rpl b/contrib/unbound/testdata/serve_expired_0ttl_nodata.rpl
index 45b51444bccd..7f1b5a565853 100644
--- a/contrib/unbound/testdata/serve_expired_0ttl_nodata.rpl
+++ b/contrib/unbound/testdata/serve_expired_0ttl_nodata.rpl
@@ -46,7 +46,7 @@ RANGE_BEGIN 30 100
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
- example.com. 10 IN NS
+ example.com. IN NS
SECTION ANSWER
example.com. 10 IN NS ns.example.com.
SECTION ADDITIONAL
diff --git a/contrib/unbound/testdata/serve_expired_0ttl_nxdomain.rpl b/contrib/unbound/testdata/serve_expired_0ttl_nxdomain.rpl
index 0fcde9f2ddb6..4adb4b839a69 100644
--- a/contrib/unbound/testdata/serve_expired_0ttl_nxdomain.rpl
+++ b/contrib/unbound/testdata/serve_expired_0ttl_nxdomain.rpl
@@ -46,7 +46,7 @@ RANGE_BEGIN 30 100
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
- example.com. 10 IN NS
+ example.com. IN NS
SECTION ANSWER
example.com. 10 IN NS ns.example.com.
SECTION ADDITIONAL
diff --git a/contrib/unbound/testdata/serve_expired_0ttl_servfail.rpl b/contrib/unbound/testdata/serve_expired_0ttl_servfail.rpl
index aad7aa8c984f..6833af17b827 100644
--- a/contrib/unbound/testdata/serve_expired_0ttl_servfail.rpl
+++ b/contrib/unbound/testdata/serve_expired_0ttl_servfail.rpl
@@ -44,7 +44,7 @@ RANGE_BEGIN 30 100
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
- example.com. 10 IN NS
+ example.com. IN NS
SECTION ANSWER
example.com. 10 IN NS ns.example.com.
SECTION ADDITIONAL
diff --git a/contrib/unbound/testdata/serve_expired_cached_servfail.rpl b/contrib/unbound/testdata/serve_expired_cached_servfail.rpl
index 286de708b9c5..f5f4c7030198 100644
--- a/contrib/unbound/testdata/serve_expired_cached_servfail.rpl
+++ b/contrib/unbound/testdata/serve_expired_cached_servfail.rpl
@@ -45,7 +45,7 @@ RANGE_BEGIN 30 100
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
- example.com. 10 IN NS
+ example.com. IN NS
SECTION ANSWER
example.com. 10 IN NS ns.example.com.
SECTION ADDITIONAL
diff --git a/contrib/unbound/testdata/serve_expired_cached_servfail_refresh.rpl b/contrib/unbound/testdata/serve_expired_cached_servfail_refresh.rpl
index 664de9aa8732..9b7c1fda16c1 100644
--- a/contrib/unbound/testdata/serve_expired_cached_servfail_refresh.rpl
+++ b/contrib/unbound/testdata/serve_expired_cached_servfail_refresh.rpl
@@ -49,7 +49,7 @@ RANGE_BEGIN 60 100
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
- example.com. 10 IN NS
+ example.com. IN NS
SECTION ANSWER
example.com. 10 IN NS ns.example.com.
SECTION ADDITIONAL
diff --git a/contrib/unbound/testdata/subnet_scopezero_noedns.crpl b/contrib/unbound/testdata/subnet_scopezero_noedns.crpl
new file mode 100644
index 000000000000..25df0dd71cf2
--- /dev/null
+++ b/contrib/unbound/testdata/subnet_scopezero_noedns.crpl
@@ -0,0 +1,441 @@
+; scope of 0, if the query also had scope of 0, do not answer this
+; to everyone, but only for scope 0 queries. Otherwise can answer cached.
+
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ send-client-subnet: 1.2.3.4
+ module-config: "subnetcache validator iterator"
+ verbosity: 4
+ qname-minimisation: no
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129
+
+stub-zone:
+ name: "example.com"
+ stub-addr: 1.2.3.4
+CONFIG_END
+
+SCENARIO_BEGIN Test subnet cache with scope zero response without EDNS.
+
+; the upstream server.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+HEX_EDNSDATA_END
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 11
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+;copy_ednsdata_assume_clientsubnet
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 11 ; source mask, scopemask
+ 7f 00 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 20 31
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+;copy_ednsdata_assume_clientsubnet
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.41
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 11 ; source mask, scopemask
+ 7f 01 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 40 51
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+;copy_ednsdata_assume_clientsubnet
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.42
+SECTION AUTHORITY
+SECTION ADDITIONAL
+;no EDNS in this answer. Tests if the back_parsed callback
+;is called to process the lack of edns contents.
+;HEX_EDNSDATA_BEGIN
+ ;00 08 ; OPC
+ ;00 04 ; option length
+ ;00 01 ; Family
+ ;00 00 ; source mask, scopemask
+ ; ; address 0.0.0.0/0 scope 0
+;HEX_EDNSDATA_END
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 120 131
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+;copy_ednsdata_assume_clientsubnet
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.43
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 7f 02 00 ; address 127.2.0.0/24 scope 0
+HEX_EDNSDATA_END
+ENTRY_END
+RANGE_END
+
+; query for 127.0.0.0/24
+STEP 1 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 18 00 ; ip4, scope 24, source 0
+ 7f 00 00 ;127.0.0.0/24
+HEX_ANSWER_END
+ENTRY_END
+
+; answer is 10.20.30.40 for 127.0.0.0/24 scope 17
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 11 ; source mask, scopemask
+ 7f 00 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; query for 127.1.0.0/24
+STEP 20 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 18 00 ; ip4, scope 24, source 0
+ 7f 01 00 ;127.1.0.0/24
+HEX_ANSWER_END
+ENTRY_END
+
+; answer is 10.20.30.41 for 127.1.0.0/24 scope 17
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.41
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.1.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 11 ; source mask, scopemask
+ 7f 01 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; query for 0.0.0.0/0
+STEP 40 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 08
+
+ 00 08 00 04 ; OPC, optlen
+ 00 01 00 00 ; ip4, scope 0, source 0
+ ;0.0.0.0/0
+HEX_ANSWER_END
+ENTRY_END
+
+; answer is 10.20.30.42 for 0.0.0.0/0 scope 0
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.42
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ 00 08 ; OPC
+ 00 04 ; option length
+ 00 01 ; Family
+ 00 00 ; source mask, scopemask
+ ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; query for 127.0.0.0/24, again, it should be in cache.
+; and not from the scope 0 answer.
+STEP 60 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 18 00 ; ip4, scope 24, source 0
+ 7f 00 00 ;127.0.0.0/24
+HEX_ANSWER_END
+ENTRY_END
+
+; answer should be 10.20.30.40 for 127.0.0.0/24 scope 17
+STEP 70 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 11 ; source mask, scopemask
+ 7f 00 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; query for 127.1.0.0/24, again, it should be in cache.
+STEP 80 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 18 00 ; ip4, scope 24, source 0
+ 7f 01 00 ;127.1.0.0/24
+HEX_ANSWER_END
+ENTRY_END
+
+; answer should be 10.20.30.41 for 127.1.0.0/24 scope 17
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.41
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.1.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 11 ; source mask, scopemask
+ 7f 01 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; query for 0.0.0.0/0, again.
+STEP 100 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 08
+
+ 00 08 00 04 ; OPC, optlen
+ 00 01 00 00 ; ip4, scope 0, source 0
+ ;0.0.0.0/0
+HEX_ANSWER_END
+ENTRY_END
+
+; answer should be 10.20.30.42 for 0.0.0.0/0 scope 0
+STEP 110 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.42
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ 00 08 ; OPC
+ 00 04 ; option length
+ 00 01 ; Family
+ 00 00 ; source mask, scopemask
+ ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; now a query for a /24 that gets an answer for a /0.
+STEP 120 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 18 00 ; ip4, scope 24, source 0
+ 7f 02 00 ;127.2.0.0/24
+HEX_ANSWER_END
+ENTRY_END
+
+; answer should be 10.20.30.43 for 127.2.0.0/24 scope 0
+STEP 130 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.43
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.2.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 7f 02 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+; the scope 0 answer is now used to answer queries from
+; query for 127.0.0.0/24
+STEP 140 QUERY
+ENTRY_BEGIN
+HEX_ANSWER_BEGIN
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 01 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 18 00 ; ip4, scope 24, source 0
+ 7f 00 00 ;127.0.0.0/24
+HEX_ANSWER_END
+ENTRY_END
+
+STEP 150 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ednsdata
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.43
+SECTION AUTHORITY
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 7f 00 00 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+SCENARIO_END
diff --git a/contrib/unbound/util/config_file.c b/contrib/unbound/util/config_file.c
index 5d3cdfb669af..e8de5119ba68 100644
--- a/contrib/unbound/util/config_file.c
+++ b/contrib/unbound/util/config_file.c
@@ -142,6 +142,7 @@ config_create(void)
cfg->log_tag_queryreply = 0;
cfg->log_local_actions = 0;
cfg->log_servfail = 0;
+ cfg->log_destaddr = 0;
#ifndef USE_WINSOCK
# ifdef USE_MINI_EVENT
/* select max 1024 sockets */
@@ -690,6 +691,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_YNO("log-tag-queryreply:", log_tag_queryreply)
else S_YNO("log-local-actions:", log_local_actions)
else S_YNO("log-servfail:", log_servfail)
+ else S_YNO("log-destaddr:", log_destaddr)
else S_YNO("val-permissive-mode:", val_permissive_mode)
else S_YNO("aggressive-nsec:", aggressive_nsec)
else S_YNO("ignore-cd-flag:", ignore_cd)
@@ -1127,6 +1129,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_YNO(opt, "log-tag-queryreply", log_tag_queryreply)
else O_YNO(opt, "log-local-actions", log_local_actions)
else O_YNO(opt, "log-servfail", log_servfail)
+ else O_YNO(opt, "log-destaddr", log_destaddr)
else O_STR(opt, "pidfile", pidfile)
else O_YNO(opt, "hide-identity", hide_identity)
else O_YNO(opt, "hide-version", hide_version)
diff --git a/contrib/unbound/util/config_file.h b/contrib/unbound/util/config_file.h
index ad22b8330e36..491109833e4b 100644
--- a/contrib/unbound/util/config_file.h
+++ b/contrib/unbound/util/config_file.h
@@ -349,6 +349,8 @@ struct config_file {
int log_servfail;
/** log identity to report */
char* log_identity;
+ /** log dest addr for log_replies */
+ int log_destaddr;
/** do not report identity (id.server, hostname.bind) */
int hide_identity;
diff --git a/contrib/unbound/util/configlexer.c b/contrib/unbound/util/configlexer.c
new file mode 100644
index 000000000000..4fe0d8b4d61e
--- /dev/null
+++ b/contrib/unbound/util/configlexer.c
@@ -0,0 +1,7627 @@
+#include "config.h"
+#include "util/configyyrename.h"
+
+#line 2 "<stdout>"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 4
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+/* begin standard C++ headers. */
+
+/* TODO: this is always defined, so inline it */
+#define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
+#else
+#define yynoreturn
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an
+ * integer in range [0..255] for use as an array index.
+ */
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
+#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern int yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+ #define YY_LINENO_REWIND_TO(ptr)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ int yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = NULL;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart ( FILE *input_file );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
+void yy_delete_buffer ( YY_BUFFER_STATE b );
+void yy_flush_buffer ( YY_BUFFER_STATE b );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state ( void );
+
+static void yyensure_buffer_stack ( void );
+static void yy_load_buffer_state ( void );
+static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
+
+void *yyalloc ( yy_size_t );
+void *yyrealloc ( void *, yy_size_t );
+void yyfree ( void * );
+
+#define yy_new_buffer yy_create_buffer
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+typedef flex_uint8_t YY_CHAR;
+
+FILE *yyin = NULL, *yyout = NULL;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+int yylineno = 1;
+
+extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state ( void );
+static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
+static int yy_get_next_buffer ( void );
+static void yynoreturn yy_fatal_error ( const char* msg );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ (yytext_ptr) -= (yy_more_len); \
+ yyleng = (int) (yy_cp - (yytext_ptr)); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+#define YY_NUM_RULES 385
+#define YY_END_OF_BUFFER 386
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static const flex_int16_t yy_accept[3816] =
+ { 0,
+ 1, 1, 359, 359, 363, 363, 367, 367, 371, 371,
+ 1, 1, 375, 375, 379, 379, 386, 383, 1, 357,
+ 357, 384, 2, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 384, 359, 360, 360, 361,
+ 384, 363, 364, 364, 365, 384, 370, 367, 368, 368,
+ 369, 384, 371, 372, 372, 373, 384, 382, 358, 2,
+ 362, 382, 384, 378, 375, 376, 376, 377, 384, 379,
+ 380, 380, 381, 384, 383, 0, 1, 2, 2, 2,
+ 2, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 359, 0, 363, 0, 370, 0, 367, 371, 0, 382,
+ 0, 2, 2, 382, 378, 0, 375, 379, 0, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 382, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 355, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 136, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 146, 383, 383, 383, 383, 383,
+
+ 383, 383, 382, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 118,
+ 383, 383, 354, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 8, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 137, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 151, 383,
+ 383, 382, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 345, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 382, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 71, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 267, 383, 14, 15, 383, 383,
+
+ 20, 19, 383, 383, 246, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 144, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 244, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 3, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 382, 383, 383, 383, 383, 383,
+ 383, 383, 383, 335, 383, 383, 383, 334, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 366, 383, 383, 383, 383, 383, 383, 383, 383,
+ 70, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 74, 383,
+ 304, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 346, 347, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 75, 383, 383, 145, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 140, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 233, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 22, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 172, 383, 383, 383, 383, 383, 382, 366, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 116, 383, 383, 383, 383, 383, 383,
+ 383, 383, 312, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 16, 383, 383, 383, 383, 383, 383,
+ 383, 383, 200, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 171, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 115, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 37,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 38, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 72,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 143, 383, 383, 383, 382, 383, 383, 383, 383, 383,
+ 383, 135, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 73,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 271, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 201, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 60, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 290, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 65, 383, 66, 383, 383, 383, 383, 383,
+ 383, 119, 383, 120, 383, 383, 383, 383, 383, 117,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 7, 383, 383, 383, 383, 382, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 256, 383, 383, 383, 383, 383, 175, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 272, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 51, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 61, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 224, 383, 223, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 17,
+ 18, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 76, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 232, 383, 383, 383, 383, 383, 383, 383, 122, 383,
+ 121, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 214, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 152, 383, 383,
+ 383, 382, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 110, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 97, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 245, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 102, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 69, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 217, 218, 383, 383, 383, 306, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 6, 383, 383, 383, 383, 383, 383,
+ 383, 325, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 310, 383, 383, 383, 383, 383, 383, 383,
+ 336, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 48, 383, 383, 383,
+
+ 383, 383, 50, 383, 383, 383, 98, 383, 383, 383,
+ 383, 383, 58, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 382, 383, 210, 383, 383, 383,
+ 147, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 237, 383, 383, 211, 383, 383, 383,
+ 383, 252, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 59, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 149, 128, 383, 129, 383, 383,
+ 383, 383, 127, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 168, 383, 383, 56, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 288, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 212, 383, 383,
+ 383, 383, 383, 222, 215, 383, 221, 383, 383, 383,
+ 383, 383, 383, 383, 383, 251, 383, 383, 383, 383,
+ 383, 383, 255, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 114, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 141, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 67, 383, 383, 383, 383,
+ 31, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 21, 383, 383, 383, 383, 383, 383,
+ 383, 32, 41, 383, 180, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 208,
+ 383, 383, 382, 383, 383, 383, 383, 350, 383, 383,
+ 84, 86, 383, 383, 383, 383, 383, 383, 383, 383,
+ 351, 383, 383, 383, 383, 383, 383, 383, 314, 383,
+ 383, 383, 383, 268, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 383, 130, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 167, 383, 52, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 262, 383, 383, 383, 383, 383, 383,
+ 383, 383, 329, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 174, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 323, 383,
+ 383, 383, 383, 243, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 342, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 193, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 123, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 187, 383, 202, 383, 383, 383,
+ 383, 383, 383, 383, 382, 383, 155, 383, 383, 383,
+ 383, 383, 383, 109, 383, 383, 383, 383, 235, 383,
+ 383, 383, 383, 383, 383, 383, 253, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 280, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 148, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 191, 383, 383, 383, 383, 383,
+ 383, 383, 87, 383, 88, 383, 383, 383, 383, 383,
+ 265, 383, 383, 383, 383, 383, 68, 332, 383, 383,
+ 383, 383, 383, 96, 203, 383, 225, 383, 257, 383,
+ 383, 216, 307, 383, 383, 383, 383, 302, 383, 383,
+ 383, 80, 383, 205, 383, 383, 383, 383, 383, 383,
+ 9, 383, 383, 383, 383, 383, 113, 383, 383, 383,
+
+ 383, 383, 383, 294, 383, 383, 383, 383, 383, 383,
+ 234, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 382, 383, 383,
+ 383, 383, 190, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 192, 176, 383, 313, 383, 383,
+ 383, 383, 383, 279, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 247, 383, 383, 383, 383,
+ 383, 383, 305, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 173, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 333, 383, 204, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 79, 81, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 112, 383, 383,
+ 383, 383, 383, 383, 292, 383, 383, 383, 383, 383,
+ 383, 383, 309, 383, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 239, 383, 39, 33,
+ 35, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 40, 383, 34, 36, 383, 42,
+ 383, 383, 383, 383, 383, 383, 383, 108, 383, 186,
+ 383, 383, 383, 383, 383, 383, 383, 382, 383, 383,
+ 383, 383, 383, 383, 337, 383, 383, 383, 383, 383,
+ 241, 238, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 78, 383, 383, 383, 150, 383, 131, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 169,
+
+ 53, 383, 383, 383, 374, 13, 383, 383, 383, 383,
+ 383, 383, 383, 156, 383, 383, 383, 383, 383, 383,
+ 383, 383, 327, 383, 330, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 12, 383,
+ 383, 23, 383, 383, 383, 383, 383, 383, 383, 298,
+ 383, 383, 344, 383, 383, 383, 383, 311, 383, 383,
+ 383, 383, 82, 383, 249, 383, 383, 383, 383, 383,
+ 240, 383, 383, 383, 383, 77, 383, 383, 383, 383,
+ 383, 383, 24, 383, 383, 49, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 185, 184,
+
+ 383, 383, 374, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 242, 236, 383, 254, 383, 383, 315, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 198, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 89, 383, 383, 383,
+ 383, 383, 383, 383, 383, 293, 383, 383, 383, 383,
+ 220, 383, 383, 383, 383, 383, 383, 248, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 300, 383,
+ 383, 383, 338, 383, 340, 339, 182, 383, 383, 383,
+
+ 83, 383, 383, 383, 383, 194, 383, 383, 383, 383,
+ 383, 124, 126, 125, 383, 383, 383, 26, 383, 383,
+ 177, 383, 179, 383, 226, 383, 383, 383, 383, 183,
+ 383, 383, 383, 383, 258, 383, 383, 383, 383, 383,
+ 383, 383, 158, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 270, 383, 383, 383, 383,
+ 383, 383, 383, 352, 383, 28, 383, 308, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 94, 227, 383, 383,
+ 264, 383, 383, 383, 291, 383, 331, 383, 219, 383,
+
+ 383, 303, 383, 383, 383, 301, 62, 383, 383, 383,
+ 383, 383, 383, 383, 4, 383, 383, 383, 383, 383,
+ 139, 383, 157, 383, 383, 383, 199, 30, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 261, 43, 44,
+ 383, 383, 383, 383, 383, 383, 383, 316, 383, 383,
+ 383, 383, 383, 383, 383, 278, 383, 383, 383, 383,
+ 383, 383, 383, 383, 230, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 93, 92, 383, 383, 63, 383, 383, 289, 297, 383,
+
+ 266, 383, 383, 383, 383, 383, 11, 383, 383, 383,
+ 383, 356, 383, 383, 383, 383, 383, 138, 383, 383,
+ 383, 383, 383, 383, 228, 99, 383, 383, 46, 383,
+ 383, 383, 383, 383, 383, 383, 383, 189, 383, 383,
+ 383, 383, 383, 383, 383, 160, 383, 383, 383, 383,
+ 269, 383, 383, 383, 383, 383, 277, 383, 383, 383,
+ 383, 153, 383, 383, 383, 132, 134, 133, 383, 383,
+ 383, 101, 105, 100, 383, 170, 383, 383, 383, 383,
+ 90, 383, 263, 299, 383, 383, 383, 383, 383, 383,
+ 10, 383, 383, 383, 383, 383, 295, 343, 383, 383,
+
+ 383, 383, 383, 383, 383, 383, 349, 45, 383, 383,
+ 383, 383, 383, 188, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 106,
+ 104, 383, 383, 57, 383, 383, 91, 383, 328, 383,
+ 383, 383, 383, 25, 383, 383, 383, 383, 383, 213,
+ 383, 383, 341, 383, 383, 383, 383, 229, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 209, 383, 383,
+ 178, 85, 383, 383, 383, 383, 383, 317, 383, 383,
+ 383, 383, 383, 383, 383, 274, 383, 383, 273, 154,
+
+ 383, 383, 103, 383, 54, 383, 383, 161, 162, 165,
+ 166, 163, 164, 95, 326, 383, 383, 296, 142, 383,
+ 383, 383, 383, 27, 383, 181, 383, 383, 383, 383,
+ 207, 383, 260, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 196, 195, 231, 47, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 324, 383, 383, 383, 383, 111, 383,
+ 259, 383, 287, 321, 383, 383, 383, 383, 383, 383,
+
+ 383, 383, 383, 383, 383, 353, 383, 107, 55, 64,
+ 5, 383, 383, 250, 383, 383, 322, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 275, 29, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 276, 383, 383, 383, 159, 383, 383, 383, 383, 383,
+ 383, 383, 383, 197, 383, 206, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 318, 383, 383, 383, 383,
+ 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
+ 383, 383, 383, 348, 383, 383, 283, 383, 383, 383,
+ 383, 383, 319, 383, 383, 383, 383, 383, 383, 320,
+
+ 383, 383, 383, 281, 383, 284, 285, 383, 383, 383,
+ 383, 383, 282, 286, 0
+ } ;
+
+static const YY_CHAR yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 5, 6, 1, 1, 1, 7, 1,
+ 1, 1, 1, 1, 8, 1, 1, 1, 9, 1,
+ 10, 11, 1, 12, 1, 1, 1, 13, 1, 1,
+ 1, 1, 1, 1, 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,
+ 1, 40, 1, 1, 1, 1, 41, 42, 43, 44,
+
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static const YY_CHAR yy_meta[67] =
+ { 0,
+ 1, 2, 3, 4, 5, 1, 6, 1, 1, 1,
+ 1, 1, 7, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1
+ } ;
+
+static const flex_int16_t yy_base[3834] =
+ { 0,
+ 0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
+ 131, 137, 112, 118, 123, 142, 616, 527, 96,10847,
+ 10847,10847, 160, 185, 116, 183, 229, 132, 175, 173,
+ 232, 50, 66, 120, 263, 275, 159, 323, 134, 375,
+ 416, 286, 308, 283, 126, 258, 516,10847,10847,10847,
+ 95, 496,10847,10847,10847, 187, 471, 490,10847,10847,
+ 10847, 238, 449,10847,10847,10847, 104, 401,10847, 351,
+ 10847, 194, 369, 379, 381,10847,10847,10847, 375, 309,
+ 10847,10847,10847, 146, 307, 392, 177, 0, 405, 0,
+ 0, 201, 270, 233, 230, 310, 259, 290, 371, 178,
+
+ 335, 396, 413, 415, 330, 358, 417, 368, 442, 402,
+ 453, 423, 448, 451, 450, 454, 412, 481, 476, 469,
+ 480, 503, 494, 475, 463, 381, 504, 502, 511, 512,
+ 514, 515, 530, 531, 532, 551, 543, 345, 544, 561,
+ 540, 542, 554, 591, 559, 581, 577, 596, 595, 373,
+ 579, 599, 569, 608, 603, 622, 616, 621, 629, 624,
+ 281, 180, 273, 339, 268, 668, 273, 228, 222, 210,
+ 678, 682, 0, 650, 152, 690, 188, 128, 672, 663,
+ 680, 660, 670, 665, 683, 675, 692, 674, 679, 699,
+ 676, 697, 702, 727, 705, 709, 716, 250, 743, 787,
+
+ 732, 722, 745, 720, 747, 748, 738, 731, 761, 758,
+ 766, 721, 754, 767, 785, 765, 794, 798, 835, 810,
+ 786, 789, 256, 816, 825, 258, 802, 418, 845, 829,
+ 792, 833, 91, 851, 843, 856, 857, 862, 848, 863,
+ 865, 867, 880, 852, 879, 882, 892, 889, 884, 888,
+ 881, 910, 908, 900, 917, 911, 922, 923, 919, 928,
+ 912, 929, 945, 924, 946, 957, 959, 939, 967, 951,
+ 950, 970, 965, 981, 980, 977, 960, 984, 976, 974,
+ 987, 982, 1000, 990, 1007, 1023, 1024, 1016, 1020, 1029,
+ 1015, 1014, 1017, 1022, 1019, 1037, 1011, 1042, 1050, 1052,
+
+ 1058, 167, 1043, 1064, 1066, 1055, 1072, 1075, 1070, 1080,
+ 1081, 1049,10847, 1088, 1082, 1108, 1102, 1111, 1106, 1112,
+ 1114, 1116, 1117, 1098, 1103, 1099, 1115, 1123, 1129, 1131,
+ 1130, 1133, 1135, 1163, 1147, 1166, 1155, 1171, 1170, 1156,
+ 1210, 1172, 1157, 1180, 1255, 1174, 1176, 1193, 1215, 1211,
+ 320, 1206, 1188, 1204, 1208, 1225, 1244, 1250, 1254, 1226,
+ 1238, 1265, 1267, 1253, 1264, 1270, 1257, 1285, 1287, 1283,
+ 1183, 1308,10847, 1295, 1312, 1313, 1314, 1318, 1321, 1316,
+ 1333, 1346, 1328, 1331, 1357, 1361, 1358, 1394, 1442, 1351,
+ 1366, 1359, 1364, 1386,10847, 1401, 1391, 1491, 1384, 1408,
+
+ 1375, 1427, 1389, 1422, 1435, 1437, 1429, 1382, 1439, 1355,
+ 1432, 1460, 1485, 1490, 1451, 1482, 1481, 1492, 1509, 1484,
+ 1424, 1454, 1508, 1488, 1511, 1544, 1517, 1527, 1540, 1548,
+ 1529, 1530, 1535, 1537, 1546, 1556, 1554, 1586, 1564, 1578,
+ 1565, 1571, 1569, 1583, 1576, 1587, 1610, 1655, 1607, 1595,
+ 1615, 1596, 1616, 1612, 1608, 1634, 1644, 1635, 1631, 1650,
+ 1652, 1651, 1654, 1661, 1671, 1682, 1617, 1680, 1686, 1659,
+ 1681, 1687, 1689, 1714, 1693, 1698, 1704, 1712, 1703, 1707,
+ 1721, 1730, 1732, 1725, 1739, 1733, 1747, 1742, 1734,10847,
+ 1749, 1745,10847, 1750, 1767, 1757, 1770, 1759, 1776, 1762,
+
+ 1773,10847, 1772, 1769, 1784, 1793, 1796, 1798, 1806, 1818,
+ 1811, 1807, 1819, 1823, 1808, 1809, 1820, 1833, 1812, 1837,
+ 1857, 1841, 1839, 1836, 1849, 1861, 1774, 1864, 1847, 1867,
+ 1863, 1854, 1874, 1914,10847, 1866, 1856, 1883, 1876, 1889,
+ 1900, 1896, 1917, 1941, 1909, 1938, 1910, 1945, 1957, 1944,
+ 1942, 1961, 1951, 1891, 1965, 1955, 1975, 1968, 1967, 1972,
+ 1995, 1978, 1982, 1993, 1991, 1989, 2002, 2005,10847, 2003,
+ 2009, 2015, 2020, 2014, 2006, 2018, 2029, 2033, 2034, 2032,
+ 2047, 2039, 2053, 2030, 2057, 1727, 2063, 2056, 2067, 2072,
+ 2059, 2066, 2061, 2058, 2082, 2086, 2088, 2085, 2108, 2078,
+
+ 2106, 2110, 158, 2116, 2117, 2119, 2125, 2126, 2105, 2109,
+ 2115, 2135, 2124, 2120, 2114, 2137, 2143, 2132, 2141, 2154,
+ 2150, 2149, 2157, 2145, 2166, 2159, 2177, 2164, 2153, 2184,
+ 2175, 2176, 2187, 2188, 2190, 2183, 2215, 2202, 2208, 2210,
+ 2214, 2233, 2234, 2217, 2198,10847, 2237, 2240, 2243, 2248,
+ 2232, 2257, 2253, 2258, 2255, 2250, 2265, 2273, 2264, 2261,
+ 2287, 2284, 2275, 2292, 2282, 2290, 2289, 2298, 2300, 2311,
+ 2309, 2319, 2330, 2310, 2320, 2313, 2317, 2327, 2329, 2328,
+ 2332, 2353, 2347, 2363, 2358, 2339, 2360, 2355, 2372, 2356,
+ 2362, 2381, 2368, 2357, 2385, 2392, 2384, 2405, 2402, 2403,
+
+ 2420, 2378, 2395, 2430, 2444, 2413, 2390, 2424, 2427, 2441,
+ 2428, 2434, 2440, 2442, 2429, 2439, 2468, 2470, 2455, 2462,
+ 2463, 2465, 2461, 2481, 2479, 2486, 2476, 2485, 2488, 2490,
+ 2495, 2505, 2498, 2501, 2514, 2513, 2515, 2518, 2520, 2543,
+ 2535, 2551, 2540, 2536, 2546, 2542, 2541, 2554, 2556, 2566,
+ 2561, 2577, 2582, 2583, 2567, 2592, 2593, 2578, 2588, 2580,
+ 2586, 2594, 2614, 2607, 2601, 2605, 2625, 2617, 2627, 2622,
+ 2635, 2628, 2618, 2640, 2650, 2648, 2641, 2652,10847, 2653,
+ 2655, 2657, 2654, 2656, 2658, 2664, 2675, 2695, 2684, 2687,
+ 2678, 2673, 2686, 2732,10847, 2697,10847,10847, 1581, 2691,
+
+ 10847,10847, 2700, 2720,10847, 2716, 2722, 2721, 2688, 2736,
+ 2745, 2749, 2718, 2742, 2748, 2763, 2715, 2810, 2766, 2753,
+ 2761, 2773, 2770, 2768, 2803, 2789, 2779, 2800, 2793, 2799,
+ 2830, 2845, 2835, 2846, 2821, 2838, 2851, 2848, 2856, 2849,
+ 2861, 2862, 2855, 2858, 2880, 2870, 2868, 2885, 2891, 2881,
+ 2878, 2886, 2901, 2888, 2897, 2894, 2775, 2905, 2899, 2935,
+ 10847, 2917, 2876, 2913, 2915, 2918, 2944, 2936, 2951, 2945,
+ 2946, 2939, 2950, 2953, 2937, 2949, 2942, 2954, 2963, 2976,
+ 2970, 2969, 2972, 2989, 2984, 2987, 2992, 2975, 2980, 2981,
+ 10847, 2996, 2997, 2977, 2994, 3008, 3017, 3027, 3024, 3020,
+
+ 3012, 3022, 3025, 3046, 3028, 3044, 3033, 3040, 3041, 3039,
+ 3052, 3071,10847, 3060, 3076, 3057, 3075, 3064, 3083, 3072,
+ 3073, 3084, 3094, 3086, 3081, 3112, 3099, 3105, 3101, 3109,
+ 3111, 3113, 3108, 3120, 3119, 3122, 3128, 3132, 3148, 3139,
+ 3133, 3154, 3145, 3159, 3150, 3146, 3152, 3156, 3162, 3179,
+ 3183, 3173, 3189, 3174, 3184, 3196, 3198, 3195, 3186, 3200,
+ 3197, 3207, 3216, 3213, 3223, 3218, 3215, 3222, 3224, 3210,
+ 3236, 3234, 3241, 3251, 3258, 3244, 3260, 3255, 3243, 3257,
+ 3261, 3270, 3247,10847, 3271, 3285, 3286,10847, 3288, 3287,
+ 3284, 3332, 3304, 3289, 3302, 3303, 3319, 3298, 3334, 3325,
+
+ 3328, 3344, 3333, 3356, 3345, 3359, 3374, 3362, 3379, 3370,
+ 3380, 3381, 3387, 3371, 3388, 3401, 3386, 3393, 3398, 3294,
+ 3421, 3396, 477, 3429, 3405, 3412, 3415, 3460, 3423, 3438,
+ 3422, 3428, 3444, 3446, 3449, 3450, 3465, 3455, 3456, 3470,
+ 3478, 3458, 3485, 3487, 3482, 3488, 3492, 3493, 3498, 3514,
+ 3502,10847, 3508, 3520, 3505, 3525, 3515, 3538, 3529, 3517,
+ 10847, 3531, 3537, 3527, 3544, 3539, 3541, 3554, 3542, 3558,
+ 3552, 3556, 3565, 3569, 3573, 3568, 3567, 3593,10847, 3575,
+ 10847, 3583, 3586, 3587, 3602, 3595, 3589, 3601, 3599, 3604,
+ 3616, 3618,10847,10847, 3620, 3622, 3628, 3629, 3641, 3643,
+
+ 3631, 3636, 3646,10847, 3644, 3666,10847, 3661, 3654, 3650,
+ 3658, 3655, 3663, 3667, 3673, 3670, 3680, 3681, 3678, 3689,
+ 3688, 3699, 3697,10847, 3708, 3710, 3693, 3707, 3716, 3701,
+ 3718, 3724, 3728, 3720,10847, 3736, 3730, 3743, 3731, 3755,
+ 3753, 3756, 3744, 3758, 3763, 3748, 3759, 3747, 3769, 3768,
+ 3773, 3782, 3789, 3792, 3793, 3806, 3799, 3807,10847, 3805,
+ 3785, 3791, 3812, 3808, 3787, 3814, 3818, 3816, 3824, 3809,
+ 3819, 3826, 3833, 3847, 3839, 3846, 3840, 3820, 3866, 3848,
+ 3860, 3862, 3845, 3854, 3870, 3876, 552, 3878, 3871, 3881,
+ 3874,10847, 3883, 3877, 3898, 3907, 3908, 3891, 115, 3901,
+
+ 3904, 3905, 3909, 3921, 3922, 3916, 3925, 3893, 3927, 3932,
+ 3934, 3946, 3953, 3957, 3942, 3944, 3960, 3948, 3949, 3964,
+ 3959, 3973, 3977,10847, 3970, 3984, 3975, 3981, 3986, 3997,
+ 3985, 4002,10847, 4006, 4008, 4012, 4014, 4013, 4024, 4019,
+ 4023, 4034, 4044,10847, 4049, 4036, 4045, 4032, 4051, 4046,
+ 4047, 4043,10847, 4064, 4061, 4063, 4072, 4070, 4073, 4085,
+ 4071, 4081, 4082, 4102, 4088, 4099, 4095, 4091, 4090, 4098,
+ 4118, 4112, 4109, 4136, 4115, 4126, 4131, 4129, 4130, 4138,
+ 4133, 4134, 4151, 4153, 4148,10847, 4160, 4154, 4156, 4164,
+ 4162, 4158, 4179, 4176, 4205, 4171, 4180, 4189, 4191, 4232,
+
+ 4195, 4203, 4209, 4219, 4221, 4223, 4216, 4215, 4229, 4239,
+ 4230, 4242, 4248, 4274, 4253, 4247, 4243, 4267, 4278, 4275,
+ 4266, 4280, 4269, 4270, 4292, 4289, 4294, 4293, 4287, 4290,
+ 4322, 4318, 4310, 4325, 4329, 4321,10847, 4330, 4320, 4319,
+ 4337, 4345, 4373, 4351, 4361, 4349, 4369, 4363, 4366, 4364,
+ 4365, 4372, 4314, 4378, 4368, 4381, 4395, 4398, 4400, 4385,
+ 4408, 4399, 4393, 4419, 4423, 4413, 4429, 4426, 4430,10847,
+ 4434, 4433, 4420, 4440, 4443, 4442, 4448, 4451, 4458, 4447,
+ 4450, 4459, 4454, 4464, 4455, 4470, 4467, 4488, 4491, 4483,
+ 4499, 4475,10847, 4500, 4489, 4495, 4507, 4510, 4516, 4498,
+
+ 4527, 4514, 4531, 4528, 4533, 4522, 4539, 4535, 4534,10847,
+ 4551, 4555, 4548, 4552, 4569, 4559, 4554, 4560, 4570, 4556,
+ 10847, 4572, 4567, 4578, 4574, 4582, 4583, 4595, 4596, 4586,
+ 4597,10847, 4598, 4600, 4591, 4612, 4601, 4605, 4616, 4613,
+ 4625, 4622, 4609, 4619, 4640, 4632, 4651, 4633, 4649,10847,
+ 4636, 4648, 4670, 4653, 4657, 4660, 4659, 4664, 4681, 4680,
+ 4665, 4692, 4676,10847, 4707, 4700, 4698, 4710, 4695, 4702,
+ 4693, 4708, 4719, 4725, 4715, 4712, 4738, 4727,10847, 4731,
+ 4726, 4746, 4748, 4752, 4750, 4742, 4721, 4751, 4765, 4766,
+ 4753, 4769, 4771, 4770, 4777, 4780, 4794, 4783, 4788, 4779,
+
+ 4796, 4816, 4803, 4810, 4804, 4821, 4723, 4808, 4806, 4833,
+ 4825, 4830, 4823, 4832, 4835, 4843, 4846, 4847, 4854, 4857,
+ 10847, 4856, 4860, 4859, 4851, 4863, 4862, 4873, 4865, 4870,
+ 4874, 4885, 4900, 4895, 4889, 4918, 4919, 4903, 4890, 4922,
+ 4906, 4912, 4902, 4921, 4924, 4920, 4936, 4929, 4937, 4939,
+ 4935, 4944, 4934, 4946, 4949, 4966, 4970, 4956, 4965, 4958,
+ 4961, 4971, 4981, 4964, 4982, 4979, 4988, 4993, 4991, 4992,
+ 5001, 5012, 5014, 5017, 5020, 5016, 5018, 5023, 5021, 5051,
+ 10847, 5028, 5039, 5031, 5037, 5045, 5055, 5035, 5049, 5072,
+ 5059, 5062, 5073, 5078, 5081, 5084, 5067, 5077, 5082, 5076,
+
+ 5098, 5090,10847, 5089,10847, 5111, 5092, 5115, 5123, 5126,
+ 5108,10847, 5127,10847, 5129, 5130, 5117, 5121, 5125,10847,
+ 5136, 5122, 5138, 5152, 5142, 5144, 5159, 5146, 5156, 5171,
+ 5163, 5151, 5179, 5172, 5164, 5169, 5168, 5185, 5186, 5183,
+ 5198, 5195, 5202, 5192, 5211, 5201, 5222, 5204, 5214, 5207,
+ 5231, 5220, 5225,10847, 5236, 5234, 5227, 5241, 5243, 5238,
+ 5255, 5252, 5260, 5250, 5267, 5277, 5279, 5261, 5265, 5270,
+ 5280, 5282, 5288, 5290, 5298, 5308, 5295, 5294, 5324, 5318,
+ 10847, 5312, 5328, 5311, 5315, 5325,10847, 5327, 5309, 5342,
+ 5345, 5335, 5329, 5348, 5341, 5364, 5359, 5354, 5358, 5376,
+
+ 5353, 5383, 5381,10847, 5380, 5390, 5371, 5398, 5387, 5375,
+ 5402, 5417, 5408, 5418, 5423, 5425, 5426, 5420, 5412, 5415,
+ 5416, 5429, 5442, 5443, 5446, 5444, 5453, 5439, 5450, 5454,
+ 5459, 5447, 5448, 5452, 5466, 5463, 5470, 5473, 5474, 5478,
+ 5477, 5494, 5497, 5489, 5500,10847, 5491, 5501, 5493, 5514,
+ 5511, 5516, 5517, 5522, 5539, 5518, 5538,10847, 5548, 5530,
+ 5546, 5540, 5553, 5541, 5557, 5558, 5543, 5563, 5574, 5569,
+ 5583, 5570,10847, 5585,10847, 5575, 5579, 5588, 5594, 5607,
+ 5596, 5599, 5611, 5624, 5612, 5609, 5632, 5635, 5626, 5621,
+ 5638, 5627, 5631, 5636, 5630, 5659, 5651, 5652, 5655, 5633,
+
+ 5670, 5660, 5672, 5663, 5669, 5673, 5706, 5686, 5682,10847,
+ 10847, 5678, 5666, 5713, 5712, 5701, 5710, 5721, 5723, 5720,
+ 5730, 5733, 5709, 5704, 5737, 5763,10847, 5752, 5753, 5745,
+ 5764, 5756, 5748, 5758, 5771, 5750, 5773, 5760, 5786, 5782,
+ 10847, 5772, 5784, 5775, 5791, 5793, 5805, 5812,10847, 5802,
+ 10847, 5798, 5803, 5807, 5813, 5818, 5815, 5825, 5819, 5830,
+ 5833, 5840, 5856, 5832, 5841, 5855, 5848, 5862, 5844, 5845,
+ 5857, 5866, 5860, 5874, 5870, 5878, 5868,10847, 5879, 5882,
+ 5895, 5891, 5887, 5893, 5903, 5901, 5888,10847, 5905, 5915,
+ 5909, 5919, 5918, 5917, 5921, 5929, 5928, 5927, 5944, 5936,
+
+ 5945, 5953, 5954, 5937,10847, 5942, 5955, 5958, 5971, 5960,
+ 5964, 5959, 5986, 5974, 5973,10847, 5985, 6000, 5987, 6004,
+ 6003, 5995, 6006, 6012, 5991, 5997, 6002, 6010, 6021, 6027,
+ 6016, 6024, 6029, 6035, 6048, 6038, 6056, 6045, 6049, 6060,
+ 6014, 6052,10847, 6053, 6047, 6059, 6065, 6062, 6088, 6085,
+ 6093, 6098, 6102, 6083, 6104, 6105, 6086, 6095, 6097, 6111,
+ 6110, 6124, 6120,10847, 6132, 6117, 6141, 6119, 6134, 6127,
+ 6137, 6148, 6129, 6150, 6153, 6143, 6136, 6160, 6166, 6172,
+ 6169, 6177, 6176, 6182, 6179, 6185, 6183, 6187, 6191, 6201,
+ 6214,10847, 6186, 6206, 6210, 6221, 6215, 6212, 6235, 6222,
+
+ 6216, 6224, 6194, 6229, 6239, 6237, 6238, 6243, 6259, 6261,
+ 6248,10847,10847, 6269, 6249, 6264,10847, 6270, 6256, 6283,
+ 6262, 6276, 6266, 6285, 6278, 6275, 6287, 6289, 6296, 6308,
+ 6311, 6301, 6297,10847, 6320, 6324, 6323, 6310, 6325, 6336,
+ 6331,10847, 6315, 6344, 6341, 6338, 6337, 6340, 6342, 6326,
+ 6363, 6364, 6371, 6357, 6351, 6378, 6353, 6369, 6388, 6365,
+ 6372, 6390,10847, 6380, 6389, 6392, 6386, 6396, 6399, 6407,
+ 10847, 6406, 6405, 6427, 6423, 6421, 6431, 6426, 6436, 6448,
+ 6439, 6444, 6446, 6424, 6456, 6449, 6452, 6454, 6451, 6450,
+ 6467, 6475, 6471, 6485, 6488, 6486,10847, 6491, 6492, 6477,
+
+ 6501, 6493,10847, 6505, 6526, 6515,10847, 6519, 6496, 6520,
+ 6517, 6536,10847, 6527, 6530, 6528, 6537, 6516, 6542, 6523,
+ 6553, 6551, 6543, 6554, 6555, 6546,10847, 6559, 6556, 6572,
+ 10847, 6576, 6581, 6578, 6588, 6590, 6580, 6573, 6564, 6586,
+ 6589, 6591, 6587,10847, 6604, 6610,10847, 6622, 6608, 6614,
+ 6627,10847, 6617, 6618, 6633, 6632, 6631, 6637, 6641, 6644,
+ 6634, 6623, 6639, 6645, 6657, 6658, 6672, 6656, 6660, 6670,
+ 6664, 6666,10847, 6699, 6668, 6683, 6685, 6661, 6695, 6689,
+ 6690, 6693, 6710, 6705,10847,10847, 6701,10847, 6721, 6717,
+ 6719, 6720,10847, 6716, 6725, 6745, 6732, 6729, 6748, 6740,
+
+ 6737, 6734, 6757,10847, 6753, 6767,10847, 6746, 6764, 6776,
+ 6760, 6771, 6761, 6759, 6784, 6798, 6781, 6777, 6788, 6794,
+ 6801, 6791, 6805, 6804, 6835, 6797, 6836,10847, 6823, 6810,
+ 6837, 6845, 6830, 6831, 6850, 6847, 6834,10847, 6862, 6857,
+ 6865, 6863, 6864,10847,10847, 6876,10847, 6869, 6879, 6881,
+ 6895, 6880, 6882, 6795, 6884,10847, 6898, 6891, 6901, 6890,
+ 6908, 6917,10847, 6918, 6925, 6915, 6920, 6914, 6926, 6931,
+ 6924, 6927, 6967, 6941,10847, 6929, 6945, 6943, 6969, 6970,
+ 6962, 6963, 6954, 6982, 6975, 6977, 6965, 6989, 6987, 6985,
+ 6981, 6990, 6998, 7002, 7008, 6997,10847, 7017, 7019, 7025,
+
+ 7012, 7037, 7022, 7014, 7024,10847, 7030, 7035, 7040, 7048,
+ 10847, 7046, 7057, 7060, 7056, 7058, 7061, 7063, 7055, 7041,
+ 7064, 7074, 7090,10847, 7082, 7085, 7080, 7105, 7106, 7093,
+ 7096,10847,10847, 7107,10847, 7109, 7108, 7103, 7101, 7122,
+ 7116, 7139, 7135, 7148, 7132, 7136, 7152, 7146, 7141,10847,
+ 7138, 6992, 7142, 7172, 7165, 7166, 7167,10847, 7168, 7160,
+ 10847,10847, 7171, 7185, 7187, 7181, 7196, 7199, 7192, 7183,
+ 10847, 7191, 7194, 7206, 7219, 7205, 7217, 7229,10847, 7221,
+ 7210, 7231, 7214,10847, 7218, 7237, 7227, 7224, 7248, 7241,
+ 7244, 7245, 7258, 7251, 7255, 7270, 7252, 7271, 7266, 7262,
+
+ 7277, 7269, 7264, 7294, 7289, 7287, 7306,10847, 7301, 7293,
+ 7298, 7300, 7307, 7311, 7304, 7297, 7325, 7320, 7345, 7347,
+ 10847, 7328,10847, 7336, 7334, 7350, 7351, 7338, 7354, 7355,
+ 7363, 7346, 7364, 7357, 7376, 7368, 7367, 7377, 7392, 7382,
+ 7384, 7387, 7401,10847, 7407, 7409, 7393, 7411, 7413, 7417,
+ 7418, 7416,10847, 7426, 7403, 7427, 7429, 7433, 7442, 7432,
+ 7446, 7437, 7457, 7448, 7456, 7462, 7465, 7452, 7458, 7469,
+ 7454, 7472, 7473, 7476,10847, 7475, 7477, 7482, 7486, 7488,
+ 7500, 7485, 7507, 7515, 7508, 7492, 7502, 7518,10847, 7509,
+ 7521, 7523, 7526,10847, 7519, 7534, 7529, 7542, 7537, 7554,
+
+ 7536, 7560, 7558, 7544, 7573,10847, 7570, 7563, 7568, 7564,
+ 7576, 7580, 7581, 7546, 7592, 7595, 7607, 7608,10847, 7585,
+ 7602, 7612, 7613, 7619, 7605, 7620, 7616, 7639, 7622, 7632,
+ 10847, 7645, 7647, 7651, 7646, 7667, 7668, 7644, 7654, 7672,
+ 7671, 7675, 7657, 7673, 7684, 7670, 7692, 7695, 7696, 7697,
+ 7694, 7698, 7715, 7685,10847, 7700,10847, 7709, 7717, 7733,
+ 7723, 7736, 7721, 7738, 7735, 7732,10847, 7742, 7755, 7741,
+ 7728, 7764, 7769,10847, 7763, 7760, 7762, 7766,10847, 7780,
+ 7779, 7768, 7782, 7786, 7792, 7796,10847, 7799, 7805, 7807,
+ 7819, 7821, 7809, 7817, 7806, 7824, 7810, 7813, 7811, 7828,
+
+ 7833, 7836, 7826,10847, 7837, 7839, 7843, 7854, 7856, 7853,
+ 7858, 7845, 7869, 7871, 7863,10847, 7870, 7864, 7879, 7881,
+ 7868, 7883, 7885, 7888, 7909, 7907, 7915, 7917, 7903, 7900,
+ 7904, 7920, 7908, 7922,10847, 7912, 7937, 7928, 7942, 7943,
+ 7946, 7939,10847, 7948,10847, 7944, 7945, 7960, 7962, 7966,
+ 10847, 7971, 7963, 7973, 7956, 7990,10847,10847, 7975, 7968,
+ 7984, 7977, 7988,10847,10847, 7999,10847, 7989,10847, 7994,
+ 7998,10847,10847, 8005, 7986, 8001, 8006,10847, 8015, 8017,
+ 8029,10847, 8030,10847, 8036, 8018, 8039, 8032, 8028, 8046,
+ 10847, 8033, 8055, 8041, 8049, 8043,10847, 8056, 8060, 8065,
+
+ 8067, 8063, 8059,10847, 8064, 8086, 8082, 8076, 8085, 8075,
+ 10847, 8096, 8100, 8101, 8092, 8098, 8102, 8109, 8116, 8103,
+ 8112, 8123, 8133, 8120, 8128, 8141, 8149, 8136, 8152, 8154,
+ 8156, 8145, 8159, 8153, 8164, 8165, 8173, 8176, 8158, 8162,
+ 8175, 8179, 8184, 8191, 8190, 8189, 8194, 8195, 8201, 8210,
+ 8203, 8206, 8211, 8200, 8214, 8204, 8209, 8225, 8234, 8244,
+ 8222, 8233, 8232, 8230, 8241, 8236, 8260, 8252, 8265, 8267,
+ 8259, 8263,10847, 8270, 8273, 8269, 8275, 8280, 8285, 8279,
+ 8303, 8277, 8309, 8312,10847,10847, 8315,10847, 8317, 8296,
+ 8310, 8300, 8305,10847, 8304, 8311, 8306, 8330, 8325, 8333,
+
+ 8347, 8338, 8336, 8341, 8361,10847, 8360, 8366, 8355, 8345,
+ 8370, 8371,10847, 8374, 8373, 8357, 8372, 8377, 8385, 8388,
+ 8387, 8389, 8393, 8394, 8404, 8411, 8423, 8424, 8406, 8410,
+ 8419,10847, 8427, 8429, 8416, 8421, 8431, 8432, 8438, 8446,
+ 8436, 8442, 8444, 8450, 8452, 8451, 8456, 8455, 8476, 8459,
+ 8480, 8483, 8490,10847, 8473,10847, 8484, 8477, 8486, 8489,
+ 8500, 8494, 8501, 8495, 8499,10847,10847, 8504, 8511, 8527,
+ 8534, 8520, 8519, 8539, 8532, 8525, 8544,10847, 8538, 8545,
+ 8549, 8546, 8558, 8556,10847, 8559, 8563, 8561, 8565, 8570,
+ 8571, 8568,10847, 8567, 8580, 8595, 8592, 8600, 8583, 8603,
+
+ 8604, 8605, 8596, 8601, 8597, 8615,10847, 8616,10847,10847,
+ 10847, 8620, 8624, 8623, 8625, 8622, 8640, 8641, 8629, 8646,
+ 8648, 8634, 8639, 8643,10847, 8663,10847,10847, 8664,10847,
+ 8666, 8660, 8672, 8668, 8670, 8679, 8675,10847, 8685,10847,
+ 8687, 8702, 8690, 8694, 8708, 8704, 8699, 8711, 8706, 8715,
+ 8710, 8712, 8651, 8717,10847, 8723, 8726, 8738, 8725, 8746,
+ 10847,10847, 8735, 8754, 8753, 8763, 8755, 8759, 8747, 8771,
+ 8765, 8762, 8768, 8757, 8770, 8758, 8776, 8781, 8788, 8789,
+ 8800,10847, 8795, 8804, 8807,10847, 8799,10847, 8808, 8812,
+ 8814, 8803, 8805, 8815, 8816, 8822, 8838, 8829, 8848,10847,
+
+ 10847, 8836, 8860, 8851,10847,10847, 8839, 8841, 8842, 8840,
+ 8864, 8863, 8852,10847, 8867, 8868, 8872, 8878, 8874, 8881,
+ 8882, 8887,10847, 8892,10847, 8891, 8898, 8912, 8888, 8897,
+ 8921, 8903, 8899, 8926, 8927, 8920, 8910, 8931,10847, 8923,
+ 8929,10847, 8946, 8940, 8941, 8933, 8938, 8957, 8949,10847,
+ 8960, 8948,10847, 8971, 8954, 8974, 8980,10847, 8982, 8979,
+ 8981, 8976,10847, 8989,10847, 8970, 8987, 8984, 8999, 8988,
+ 10847, 8975, 8998, 9001, 9004,10847, 9020, 9024, 9029, 9027,
+ 9022, 9023,10847, 9033, 9016,10847, 9017, 9038, 9039, 9041,
+ 9031, 9042, 9057, 9053, 9045, 9058, 9052, 9051,10847,10847,
+
+ 9079, 9072, 73, 9081, 9060, 9068, 9069, 9084, 9080, 9066,
+ 9096, 9092,10847,10847, 9097,10847, 9086, 9098,10847, 9078,
+ 9106, 9111, 9114, 9115, 9108, 9117, 9129, 9122, 9134, 9149,
+ 9136, 9127, 9147,10847, 9145, 9162, 9159, 9165, 9166, 9168,
+ 9170, 9179, 9182, 9172, 9176, 9164, 9174, 9193, 9190, 9207,
+ 9194, 9209, 9210, 9196, 9198, 9206,10847, 9222, 9224, 9225,
+ 9215, 9232, 9229, 9233, 9236,10847, 9244, 9240, 9248, 9245,
+ 10847, 9258, 9252, 9255, 9266, 9259, 9260,10847, 9262, 9270,
+ 9273, 9272, 9274, 9265, 9267, 9275, 9286, 9309,10847, 9285,
+ 9299, 9310,10847, 9300,10847,10847,10847, 9311, 9318, 9305,
+
+ 10847, 9320, 9307, 9297, 9312,10847, 9323, 9328, 9331, 9139,
+ 9317,10847,10847,10847, 9326, 9347, 9345,10847, 9339, 9336,
+ 10847, 9348,10847, 9341,10847, 9356, 9364, 9370, 9367,10847,
+ 9368, 9372, 9363, 9401,10847, 9365, 9380, 9382, 9384, 9386,
+ 9389, 9409,10847, 9415, 9412, 9413, 9419, 9403, 9410, 9404,
+ 9429, 9420, 9428, 9399, 9427,10847, 9439, 9445, 9448, 9456,
+ 9440, 9447, 9449,10847, 9451,10847, 9458,10847, 9455, 9460,
+ 9466, 9465, 9454, 9472, 9475, 9489, 9496, 9483, 9484, 9506,
+ 9499, 9487, 9486, 9509, 9517, 9500,10847,10847, 9525, 9515,
+ 10847, 9516, 9518, 9537,10847, 9520,10847, 9538,10847, 9524,
+
+ 9532,10847, 9545, 9539, 9549,10847,10847, 9553, 9542, 9551,
+ 9563, 9534, 9570, 9552,10847, 9572, 9569, 9566, 9568, 9574,
+ 10847, 9593,10847, 9582, 9596, 9587,10847,10847, 9581, 9578,
+ 9594, 9606, 9600, 9591, 9607, 9605, 9608, 9619, 9627, 9609,
+ 9613, 9621, 9624, 9622, 9642, 9644, 9649,10847,10847,10847,
+ 9646, 9636, 9662, 9659, 9657, 9666, 9652,10847, 9673, 9665,
+ 9675, 9648, 9686, 9681, 9682,10847, 9676, 9677, 9685, 9693,
+ 9690, 9692, 9700, 9687,10847, 9691, 9701, 9721, 9719, 9715,
+ 9725, 9731, 9732, 9734, 9726, 9736, 9727, 9718, 9746, 9742,
+ 10847,10847, 9739, 9733,10847, 9750, 9755,10847,10847, 9745,
+
+ 10847, 9743, 9753, 9759, 9757, 9767,10847, 9781, 9761, 9766,
+ 9769,10847, 9770, 9780, 9798, 9799, 9796,10847, 9786, 9806,
+ 9791, 9801, 9810, 9814,10847,10847, 9782, 9821,10847, 9822,
+ 9824, 9818, 9839, 9823, 9828, 9840, 9838,10847, 9848, 9849,
+ 9833, 9837, 9856, 9846, 9862,10847, 9863, 9850, 9866, 9867,
+ 10847, 9864, 9876, 9883, 9851, 9897,10847, 9899, 9885, 9879,
+ 9903,10847, 9891, 9912, 9894,10847,10847,10847, 9916, 9917,
+ 9918,10847,10847,10847, 9910,10847, 9920, 9928, 9921, 9923,
+ 10847, 9926,10847,10847, 9936, 7880, 9958, 9946, 9960, 9947,
+ 10847, 9949, 9952, 9962, 9948, 9950,10847,10847, 9965, 9968,
+
+ 9963, 9974, 9975, 9970, 9981, 9978,10847,10847, 9957, 9979,
+ 9996, 9995, 9988,10847, 9993,10007,10014,10008,10015,10018,
+ 10019,10009,10023,10020,10053,10038,10027,10022,10036,10035,
+ 10055,10039,10061,10073,10063,10070,10071,10059,10067,10847,
+ 10847,10075,10062,10847,10077,10082,10847,10065,10847,10078,
+ 10081,10093,10095,10847,10106,10107,10111,10112,10087,10847,
+ 10108,10115,10847,10116,10110,10109,10103,10847,10114,10124,
+ 10126,10125,10132,10136,10142,10130,10128,10847,10146,10160,
+ 10847,10847,10144,10163,10138,10167,10152,10847,10172,10182,
+ 10169,10173,10165,10180,10185,10847,10197,10177,10847,10847,
+
+ 10202,10193,10847,10213,10847,10189,10199,10847,10847,10847,
+ 10847,10847,10847,10847,10847,10212,10218,10847,10847,10209,
+ 10223,10227,10231,10847,10232,10847,10211,10228,10239,10233,
+ 10847,10238,10847,10224,10245,10257,10261,10254,10266,10255,
+ 10258,10260,10259,10246,10276,10283,10285,10294,10279,10289,
+ 10302,10290,10308,10293,10306,10847,10847,10847,10847,10316,
+ 10295,10314,10322,10323,10324,10332,10337,10320,10326,10341,
+ 10340,10343,10329,10347,10360,10349,10353,10356,10369,10357,
+ 10378,10379,10382,10847,10385,10371,10372,10393,10847,10380,
+ 10847,10376,10847,10847,10397,10399,10402,10389,10406,10407,
+
+ 10401,10398,10404,10409,10417,10847,10419,10847,10847,10847,
+ 10847,10418,10420,10847,10416,10428,10847,10429,10443,10433,
+ 10438,10441,10434,10457,10458,10464,10847,10847,10466,10455,
+ 10450,10471,10467,10479,10482,10487,10490,10496,10478,10493,
+ 10847,10502,10498,10504,10847,10507,10489,10505,10499,10514,
+ 10520,10517,10524,10847,10526,10847,10521,10531,10541,10523,
+ 10530,10539,10554,10551,10548,10847,10545,10558,10565,10573,
+ 10576,10575,10582,10568,10590,10586,10592,10593,10598,10599,
+ 10596,10603,10609,10847,10597,10610,10847,10607,10617,10619,
+ 10621,10626,10847,10631,10624,10633,10644,10641,10650,10847,
+
+ 10647,10659,10654,10847,10658,10847,10847,10664,10656,10668,
+ 10662,10666,10847,10847,10847,10727,10734,10741,10748,10755,
+ 10762,10769, 100,10776,10783,10790,10797,10804,10811,10818,
+ 10825,10832,10839
+ } ;
+
+static const flex_int16_t yy_def[3834] =
+ { 0,
+ 3815, 1, 3816, 3816, 3817, 3817, 3818, 3818, 3819, 3819,
+ 3820, 3820, 3821, 3821, 3822, 3822, 3815, 3823, 3815, 3815,
+ 3815, 3815, 3824, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3825, 3815, 3815, 3815,
+ 3825, 3826, 3815, 3815, 3815, 3826, 3827, 3815, 3815, 3815,
+ 3815, 3827, 3828, 3815, 3815, 3815, 3828, 3829, 3815, 3830,
+ 3815, 3829, 3829, 3831, 3815, 3815, 3815, 3815, 3831, 3832,
+ 3815, 3815, 3815, 3832, 3823, 3823, 3815, 3833, 3824, 3833,
+ 3824, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3825, 3825, 3826, 3826, 3827, 3827, 3815, 3828, 3828, 3829,
+ 3829, 3830, 3830, 3829, 3831, 3831, 3815, 3832, 3832, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3829, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3823, 3823,
+
+ 3815, 3815, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3829, 3829, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3829, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3815, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+
+ 3823, 3823, 3815, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3829, 3823, 3815, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3829, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3815, 3823,
+ 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3829, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3829, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+
+ 3815, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815,
+
+ 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3815, 3823, 3815, 3815, 3815, 3823, 3823, 3823,
+
+ 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3815, 3815, 3815, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3815, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3815, 3823,
+
+ 3823, 3815, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3815, 3823, 3823, 3823, 3815, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3815,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3815, 3823, 3823, 3815, 3823, 3823, 3815, 3815, 3823,
+
+ 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3815, 3823, 3823, 3823, 3815, 3815, 3815, 3823, 3823,
+ 3823, 3815, 3815, 3815, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3815, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3815, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3815,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3815,
+
+ 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3823, 3823, 3815, 3815, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3815, 3815, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823,
+ 3815, 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823,
+
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3815,
+ 3815, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3815, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+ 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3815,
+
+ 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3823, 3823, 3823,
+ 3823, 3823, 3815, 3815, 0, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815
+ } ;
+
+static const flex_int16_t yy_nxt[10914] =
+ { 0,
+ 18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
+ 18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 18, 18, 18, 45, 46,
+ 24, 25, 26, 27, 28, 29, 18, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 18, 18, 18, 45, 48, 49, 50, 48,
+ 49, 50, 53, 54, 53, 54, 55, 120, 55, 58,
+ 59, 60, 61, 121, 22, 58, 59, 60, 61, 86,
+ 22, 64, 65, 66, 64, 65, 66, 87, 161, 161,
+
+ 85, 88, 351, 51, 120, 86, 51, 168, 168, 56,
+ 121, 56, 171, 75, 76, 77, 78, 62, 22, 75,
+ 76, 77, 78, 62, 22, 81, 82, 83, 67, 98,
+ 86, 67, 19, 20, 21, 69, 70, 71, 19, 20,
+ 21, 69, 70, 71, 81, 82, 83, 122, 109, 178,
+ 178, 79, 72, 160, 171, 86, 98, 79, 72, 86,
+ 138, 90, 84, 90, 90, 86, 90, 179, 110, 799,
+ 73, 86, 90, 86, 122, 109, 73, 426, 87, 72,
+ 160, 84, 88, 161, 161, 72, 113, 138, 111, 177,
+ 163, 176, 131, 163, 114, 110, 99, 86, 86, 91,
+
+ 92, 93, 112, 100, 94, 115, 86, 101, 189, 95,
+ 102, 96, 86, 113, 86, 111, 180, 86, 97, 131,
+ 174, 114, 86, 99, 86, 168, 168, 92, 93, 112,
+ 100, 94, 115, 171, 101, 189, 95, 102, 96, 165,
+ 86, 165, 165, 180, 165, 97, 103, 174, 116, 171,
+ 104, 117, 182, 105, 183, 106, 107, 301, 118, 85,
+ 119, 85, 85, 339, 85, 343, 108, 169, 86, 86,
+ 85, 86, 86, 103, 167, 116, 123, 104, 117, 182,
+ 105, 183, 106, 107, 124, 118, 181, 119, 127, 86,
+ 125, 185, 128, 108, 126, 86, 157, 86, 86, 149,
+
+ 158, 150, 86, 123, 159, 186, 129, 166, 130, 86,
+ 151, 124, 164, 181, 86, 127, 152, 125, 185, 128,
+ 162, 126, 86, 157, 153, 86, 149, 158, 150, 86,
+ 491, 159, 186, 129, 154, 130, 132, 151, 155, 156,
+ 133, 184, 163, 152, 134, 163, 86, 86, 179, 86,
+ 135, 153, 90, 136, 90, 90, 190, 90, 246, 86,
+ 137, 154, 86, 132, 198, 155, 156, 133, 184, 86,
+ 170, 134, 170, 170, 86, 170, 175, 135, 175, 175,
+ 136, 175, 177, 190, 86, 246, 187, 137, 139, 199,
+ 173, 198, 140, 85, 202, 85, 85, 86, 85, 188,
+
+ 231, 266, 141, 142, 85, 143, 90, 86, 90, 90,
+ 86, 90, 86, 187, 86, 139, 199, 90, 176, 140,
+ 86, 202, 191, 192, 200, 345, 188, 231, 266, 141,
+ 142, 193, 143, 144, 205, 86, 145, 194, 214, 195,
+ 171, 86, 201, 146, 91, 196, 197, 147, 148, 191,
+ 192, 86, 86, 209, 86, 86, 86, 86, 193, 203,
+ 144, 205, 86, 145, 194, 214, 195, 211, 204, 201,
+ 146, 213, 196, 197, 147, 148, 206, 207, 210, 230,
+ 209, 86, 212, 219, 208, 1254, 203, 86, 169, 86,
+ 86, 167, 86, 86, 211, 204, 215, 222, 213, 216,
+
+ 221, 229, 86, 206, 207, 210, 230, 220, 86, 212,
+ 166, 208, 217, 218, 86, 86, 86, 223, 224, 86,
+ 86, 234, 225, 215, 222, 227, 216, 221, 229, 232,
+ 228, 238, 235, 86, 220, 164, 233, 236, 226, 217,
+ 218, 86, 86, 86, 223, 224, 237, 240, 234, 225,
+ 86, 86, 227, 86, 86, 162, 232, 228, 238, 235,
+ 239, 1415, 241, 233, 236, 226, 86, 251, 242, 86,
+ 86, 86, 243, 237, 240, 245, 247, 248, 244, 86,
+ 252, 86, 86, 86, 257, 253, 249, 239, 258, 241,
+ 86, 86, 250, 86, 251, 242, 259, 269, 86, 243,
+
+ 86, 260, 245, 247, 248, 244, 254, 252, 86, 261,
+ 267, 257, 253, 249, 264, 3815, 86, 255, 86, 250,
+ 86, 256, 270, 259, 269, 265, 262, 273, 260, 263,
+ 86, 271, 268, 254, 86, 86, 261, 267, 86, 274,
+ 275, 264, 86, 272, 255, 3815, 277, 86, 256, 270,
+ 278, 276, 265, 262, 273, 86, 263, 3815, 271, 268,
+ 86, 86, 3815, 86, 3815, 279, 274, 275, 86, 165,
+ 272, 165, 165, 277, 165, 178, 178, 278, 276, 170,
+ 280, 170, 170, 90, 170, 90, 90, 281, 90, 171,
+ 283, 175, 279, 175, 175, 3815, 175, 284, 288, 86,
+
+ 285, 282, 86, 286, 86, 290, 291, 280, 293, 86,
+ 287, 3815, 289, 86, 86, 86, 292, 283, 86, 86,
+ 294, 173, 86, 295, 284, 288, 299, 285, 282, 300,
+ 286, 86, 290, 291, 296, 293, 86, 287, 86, 289,
+ 297, 86, 298, 292, 86, 310, 311, 294, 86, 323,
+ 295, 314, 312, 299, 302, 86, 300, 313, 303, 86,
+ 86, 86, 317, 318, 315, 316, 86, 297, 319, 298,
+ 86, 86, 310, 311, 321, 304, 323, 86, 314, 3815,
+ 324, 3815, 86, 322, 86, 303, 86, 86, 3815, 317,
+ 318, 315, 316, 86, 325, 328, 320, 86, 3815, 349,
+
+ 86, 321, 304, 305, 86, 86, 86, 324, 306, 326,
+ 322, 329, 327, 307, 3815, 330, 3815, 338, 337, 308,
+ 309, 325, 328, 320, 86, 86, 86, 336, 86, 340,
+ 305, 86, 341, 86, 344, 306, 326, 86, 329, 327,
+ 307, 86, 330, 342, 338, 337, 308, 309, 331, 86,
+ 350, 332, 346, 333, 336, 86, 340, 3815, 352, 353,
+ 3815, 344, 348, 354, 86, 334, 347, 335, 86, 357,
+ 342, 355, 86, 358, 86, 331, 356, 350, 332, 3815,
+ 333, 359, 86, 3815, 86, 361, 353, 86, 364, 348,
+ 86, 86, 334, 347, 335, 86, 86, 360, 355, 365,
+
+ 358, 86, 86, 356, 86, 362, 86, 366, 359, 367,
+ 368, 369, 361, 371, 363, 364, 370, 372, 86, 86,
+ 86, 86, 373, 86, 360, 374, 365, 86, 86, 378,
+ 375, 86, 362, 376, 366, 382, 367, 368, 369, 86,
+ 371, 363, 381, 370, 383, 377, 384, 86, 3815, 86,
+ 86, 86, 374, 379, 380, 386, 86, 375, 86, 385,
+ 376, 86, 86, 86, 388, 387, 389, 86, 86, 381,
+ 390, 383, 377, 384, 391, 392, 393, 395, 86, 3815,
+ 379, 380, 386, 394, 86, 86, 385, 398, 396, 86,
+ 86, 399, 387, 3815, 3815, 401, 86, 390, 86, 86,
+
+ 403, 402, 392, 393, 86, 404, 86, 405, 400, 86,
+ 394, 397, 3815, 86, 406, 171, 86, 407, 399, 86,
+ 86, 86, 401, 86, 409, 408, 86, 403, 402, 86,
+ 410, 411, 404, 412, 405, 400, 414, 413, 397, 86,
+ 416, 406, 415, 418, 407, 419, 86, 417, 421, 422,
+ 86, 409, 408, 86, 86, 86, 86, 420, 86, 86,
+ 412, 86, 86, 86, 413, 423, 424, 416, 86, 415,
+ 418, 425, 419, 427, 417, 421, 86, 428, 3815, 429,
+ 437, 86, 86, 430, 420, 431, 434, 3815, 86, 86,
+ 433, 86, 423, 424, 86, 438, 3815, 86, 425, 432,
+
+ 427, 435, 436, 86, 428, 86, 429, 437, 439, 86,
+ 430, 86, 431, 434, 86, 440, 441, 433, 442, 86,
+ 86, 86, 443, 447, 448, 445, 432, 86, 435, 436,
+ 450, 446, 452, 451, 3815, 439, 454, 86, 86, 444,
+ 453, 86, 86, 441, 455, 86, 457, 86, 449, 443,
+ 86, 86, 445, 86, 86, 86, 86, 450, 446, 452,
+ 451, 456, 86, 454, 458, 459, 444, 453, 86, 86,
+ 86, 455, 86, 457, 86, 449, 460, 461, 465, 464,
+ 467, 462, 3815, 3815, 3815, 466, 86, 476, 456, 484,
+ 513, 458, 459, 475, 86, 86, 86, 477, 463, 3815,
+
+ 493, 485, 86, 460, 461, 86, 464, 467, 462, 86,
+ 86, 86, 466, 86, 476, 86, 484, 486, 489, 86,
+ 475, 492, 86, 490, 477, 463, 468, 86, 485, 487,
+ 488, 469, 86, 494, 470, 496, 495, 3815, 502, 471,
+ 472, 473, 474, 86, 486, 86, 3815, 86, 492, 86,
+ 86, 3815, 497, 468, 86, 503, 487, 488, 469, 3815,
+ 494, 470, 496, 495, 86, 86, 471, 472, 473, 474,
+ 478, 500, 479, 498, 499, 501, 3815, 86, 504, 497,
+ 505, 509, 503, 86, 480, 481, 482, 508, 483, 86,
+ 506, 507, 86, 86, 86, 3815, 86, 478, 500, 479,
+
+ 498, 499, 501, 86, 86, 504, 86, 505, 509, 86,
+ 512, 480, 481, 482, 508, 483, 510, 506, 507, 511,
+ 520, 514, 86, 515, 86, 3815, 86, 518, 3815, 519,
+ 3815, 521, 516, 3815, 86, 522, 524, 512, 525, 517,
+ 527, 523, 526, 510, 533, 3815, 511, 86, 514, 532,
+ 515, 86, 86, 86, 518, 86, 519, 86, 521, 516,
+ 86, 528, 522, 524, 534, 525, 517, 86, 523, 526,
+ 86, 533, 86, 535, 529, 536, 532, 530, 3815, 531,
+ 3815, 550, 568, 549, 3815, 86, 552, 569, 528, 577,
+ 86, 553, 3815, 579, 86, 3815, 86, 86, 86, 551,
+
+ 86, 529, 536, 86, 530, 86, 531, 537, 550, 538,
+ 549, 566, 554, 552, 86, 539, 555, 557, 553, 540,
+ 579, 86, 572, 86, 541, 86, 551, 542, 171, 567,
+ 86, 592, 556, 86, 537, 3815, 538, 3815, 566, 554,
+ 86, 3815, 539, 555, 557, 570, 540, 86, 3815, 572,
+ 3815, 541, 571, 573, 542, 543, 567, 544, 575, 556,
+ 576, 86, 574, 86, 580, 3815, 86, 593, 86, 578,
+ 545, 86, 570, 546, 86, 547, 86, 548, 86, 571,
+ 573, 86, 543, 586, 544, 575, 581, 576, 3815, 574,
+ 86, 580, 582, 86, 593, 3815, 578, 545, 3815, 86,
+
+ 546, 583, 547, 3815, 548, 558, 559, 584, 588, 589,
+ 586, 591, 595, 581, 587, 560, 561, 562, 563, 564,
+ 86, 86, 565, 86, 86, 585, 590, 86, 583, 86,
+ 86, 86, 558, 559, 584, 588, 589, 596, 591, 595,
+ 594, 587, 560, 561, 562, 563, 564, 86, 86, 565,
+ 86, 597, 585, 590, 598, 599, 86, 600, 601, 602,
+ 3815, 603, 604, 605, 596, 606, 86, 594, 86, 86,
+ 608, 609, 607, 3815, 86, 3815, 86, 3815, 616, 86,
+ 613, 598, 599, 86, 600, 86, 3815, 86, 603, 604,
+ 605, 1013, 606, 86, 614, 86, 618, 608, 609, 607,
+
+ 610, 611, 617, 86, 86, 616, 620, 613, 86, 615,
+ 86, 619, 635, 621, 632, 86, 633, 86, 612, 637,
+ 86, 614, 86, 618, 650, 86, 86, 610, 611, 617,
+ 622, 623, 634, 620, 86, 86, 615, 636, 619, 635,
+ 621, 638, 624, 633, 625, 612, 86, 86, 642, 86,
+ 641, 86, 639, 3815, 86, 86, 86, 622, 623, 634,
+ 640, 3815, 3815, 3815, 636, 644, 646, 3815, 638, 624,
+ 86, 625, 626, 86, 86, 642, 645, 641, 647, 639,
+ 627, 628, 643, 86, 629, 630, 653, 640, 631, 86,
+ 86, 86, 644, 86, 86, 649, 648, 651, 86, 626,
+
+ 86, 3815, 652, 645, 655, 647, 656, 627, 628, 643,
+ 86, 629, 630, 653, 654, 631, 3815, 659, 663, 86,
+ 86, 86, 649, 648, 651, 86, 86, 657, 86, 652,
+ 660, 655, 86, 656, 661, 658, 662, 86, 665, 779,
+ 664, 654, 86, 86, 659, 663, 86, 666, 667, 668,
+ 670, 86, 669, 86, 657, 672, 674, 660, 675, 3815,
+ 86, 661, 658, 662, 86, 665, 86, 664, 673, 86,
+ 3815, 86, 86, 86, 666, 667, 668, 670, 86, 669,
+ 671, 86, 672, 676, 86, 675, 86, 677, 86, 86,
+ 678, 679, 680, 681, 682, 673, 86, 683, 86, 686,
+
+ 688, 86, 684, 711, 685, 690, 86, 671, 86, 86,
+ 676, 86, 86, 86, 677, 86, 687, 678, 679, 680,
+ 681, 682, 689, 86, 683, 692, 686, 691, 693, 684,
+ 711, 685, 86, 694, 698, 86, 699, 86, 697, 695,
+ 701, 700, 696, 687, 702, 86, 86, 86, 86, 689,
+ 86, 86, 703, 3815, 691, 693, 707, 86, 86, 86,
+ 694, 698, 86, 699, 704, 697, 695, 706, 700, 696,
+ 708, 702, 86, 3815, 713, 86, 86, 710, 86, 703,
+ 86, 712, 709, 707, 714, 716, 86, 705, 86, 727,
+ 3815, 715, 729, 86, 706, 86, 86, 708, 726, 717,
+
+ 86, 713, 86, 86, 710, 86, 86, 3815, 712, 709,
+ 728, 714, 716, 86, 705, 86, 727, 731, 715, 729,
+ 730, 3815, 86, 748, 732, 726, 717, 718, 86, 3815,
+ 86, 3815, 719, 733, 720, 86, 736, 728, 739, 86,
+ 721, 740, 722, 3815, 731, 723, 724, 730, 86, 86,
+ 748, 732, 725, 86, 718, 737, 86, 3815, 734, 719,
+ 733, 720, 735, 736, 742, 739, 741, 721, 740, 722,
+ 745, 744, 723, 724, 743, 738, 746, 86, 749, 725,
+ 86, 86, 737, 86, 86, 734, 747, 3815, 751, 735,
+ 86, 753, 750, 741, 86, 752, 86, 745, 744, 754,
+
+ 86, 743, 738, 746, 86, 749, 86, 86, 755, 756,
+ 758, 86, 759, 747, 86, 751, 757, 86, 753, 750,
+ 760, 86, 752, 762, 763, 764, 754, 766, 86, 761,
+ 86, 765, 86, 768, 86, 755, 756, 758, 767, 759,
+ 771, 86, 86, 757, 86, 86, 3815, 760, 86, 769,
+ 762, 763, 764, 86, 171, 770, 761, 86, 765, 86,
+ 768, 772, 773, 774, 775, 767, 777, 776, 86, 86,
+ 780, 86, 86, 86, 782, 3815, 769, 778, 86, 783,
+ 781, 785, 770, 784, 3815, 787, 86, 786, 772, 773,
+ 774, 775, 86, 777, 776, 86, 86, 86, 86, 788,
+
+ 86, 789, 86, 796, 778, 86, 86, 781, 785, 790,
+ 784, 86, 787, 793, 786, 794, 791, 86, 797, 792,
+ 795, 86, 798, 800, 86, 86, 788, 86, 789, 801,
+ 796, 802, 803, 804, 812, 806, 790, 3815, 805, 808,
+ 793, 810, 807, 791, 86, 86, 792, 86, 86, 86,
+ 809, 811, 813, 86, 86, 86, 86, 818, 86, 86,
+ 814, 812, 806, 86, 86, 86, 808, 815, 810, 807,
+ 817, 86, 816, 820, 86, 821, 86, 809, 811, 813,
+ 86, 819, 86, 822, 86, 823, 826, 814, 86, 86,
+ 824, 825, 86, 86, 815, 831, 86, 817, 86, 816,
+
+ 820, 827, 821, 86, 829, 86, 828, 832, 819, 833,
+ 822, 3815, 823, 826, 86, 86, 86, 824, 825, 830,
+ 3815, 839, 86, 86, 3815, 845, 86, 86, 827, 86,
+ 834, 829, 838, 828, 832, 835, 833, 86, 836, 837,
+ 840, 86, 841, 844, 846, 3815, 830, 86, 839, 86,
+ 842, 843, 845, 86, 86, 3815, 86, 834, 848, 838,
+ 3815, 847, 835, 851, 849, 836, 837, 840, 853, 841,
+ 844, 86, 86, 86, 852, 854, 86, 842, 843, 86,
+ 856, 859, 86, 855, 857, 848, 850, 86, 847, 86,
+ 851, 849, 86, 860, 86, 853, 86, 86, 858, 861,
+
+ 86, 852, 854, 86, 86, 862, 863, 856, 859, 864,
+ 855, 857, 86, 850, 86, 865, 866, 867, 870, 868,
+ 860, 86, 3815, 86, 869, 858, 86, 871, 86, 86,
+ 877, 86, 862, 863, 872, 876, 864, 86, 875, 86,
+ 873, 874, 865, 866, 867, 881, 868, 878, 86, 86,
+ 86, 869, 86, 879, 871, 880, 86, 877, 86, 86,
+ 883, 872, 876, 882, 884, 875, 86, 86, 86, 86,
+ 885, 86, 881, 886, 878, 898, 887, 888, 86, 890,
+ 879, 892, 880, 889, 891, 908, 86, 893, 899, 3815,
+ 882, 884, 86, 3815, 86, 86, 86, 86, 894, 86,
+
+ 886, 86, 86, 887, 888, 895, 900, 86, 892, 901,
+ 889, 86, 896, 897, 893, 899, 902, 86, 903, 909,
+ 86, 904, 905, 86, 86, 894, 914, 915, 3815, 86,
+ 3815, 86, 895, 900, 86, 906, 901, 3815, 916, 896,
+ 897, 86, 86, 902, 86, 903, 909, 910, 904, 905,
+ 907, 912, 86, 914, 915, 918, 913, 911, 917, 86,
+ 923, 919, 906, 86, 920, 916, 86, 86, 86, 86,
+ 921, 924, 922, 86, 910, 925, 927, 907, 86, 86,
+ 86, 86, 918, 86, 911, 917, 926, 923, 919, 928,
+ 929, 920, 931, 935, 86, 930, 932, 921, 924, 922,
+
+ 86, 86, 86, 927, 86, 933, 934, 86, 936, 86,
+ 3815, 937, 938, 926, 942, 86, 928, 929, 86, 931,
+ 86, 939, 930, 932, 86, 86, 3815, 86, 940, 86,
+ 3815, 943, 933, 934, 86, 936, 941, 86, 937, 938,
+ 86, 942, 944, 945, 86, 946, 947, 3815, 939, 948,
+ 3815, 949, 86, 86, 86, 940, 953, 86, 943, 86,
+ 950, 951, 954, 941, 952, 956, 3815, 957, 3815, 944,
+ 945, 958, 946, 947, 86, 86, 948, 955, 949, 86,
+ 86, 86, 86, 953, 959, 86, 961, 950, 951, 954,
+ 86, 952, 956, 86, 957, 86, 962, 960, 958, 963,
+
+ 86, 970, 964, 965, 955, 86, 86, 969, 968, 966,
+ 967, 959, 971, 961, 974, 972, 86, 86, 975, 86,
+ 976, 86, 86, 962, 960, 86, 963, 86, 970, 964,
+ 965, 86, 86, 86, 969, 968, 966, 967, 973, 971,
+ 171, 977, 972, 978, 86, 975, 86, 976, 979, 980,
+ 981, 983, 984, 86, 982, 987, 86, 86, 989, 3815,
+ 988, 86, 992, 985, 86, 973, 86, 86, 977, 3815,
+ 978, 986, 995, 990, 86, 979, 980, 981, 983, 86,
+ 86, 982, 996, 3815, 991, 989, 994, 86, 993, 86,
+ 985, 86, 86, 86, 86, 86, 86, 86, 986, 995,
+
+ 990, 997, 999, 86, 1000, 998, 1001, 3815, 1002, 996,
+ 1003, 991, 86, 994, 86, 993, 1020, 86, 1004, 3815,
+ 1014, 1015, 1028, 86, 1012, 86, 86, 86, 997, 3815,
+ 86, 1000, 998, 1001, 86, 1002, 86, 1003, 1016, 86,
+ 1018, 1024, 1019, 1020, 3815, 1004, 1005, 1014, 1015, 1006,
+ 1017, 1012, 1021, 1007, 86, 86, 1008, 86, 1022, 86,
+ 86, 86, 1023, 1009, 1010, 1016, 1011, 1018, 1024, 1019,
+ 1038, 86, 1025, 1005, 1026, 86, 1006, 1017, 3815, 1021,
+ 1007, 86, 1077, 1008, 86, 1022, 1041, 86, 86, 1023,
+ 1009, 1010, 86, 1011, 1039, 1027, 3815, 1038, 1037, 1025,
+
+ 86, 1026, 86, 1040, 1042, 86, 1045, 86, 3815, 86,
+ 1046, 3815, 86, 1041, 86, 3815, 3815, 1047, 86, 1043,
+ 1048, 1039, 1027, 1029, 1030, 1037, 1031, 3815, 86, 1032,
+ 1040, 1042, 86, 1045, 1033, 1044, 1049, 1046, 86, 86,
+ 1034, 1035, 86, 1036, 1047, 1050, 1043, 1048, 1055, 86,
+ 1029, 1030, 1051, 1031, 1053, 1056, 1032, 1052, 3815, 1054,
+ 86, 1033, 1044, 1049, 1057, 1058, 1060, 1034, 1035, 86,
+ 1036, 1059, 1050, 1061, 86, 1055, 1062, 86, 3815, 1063,
+ 3815, 1053, 1056, 1083, 86, 86, 1054, 86, 86, 1064,
+ 86, 1057, 1058, 1060, 86, 86, 1065, 86, 1059, 1067,
+
+ 86, 86, 1066, 1062, 1069, 1068, 1063, 86, 1070, 86,
+ 1071, 1079, 1072, 3815, 1073, 86, 1064, 86, 1074, 86,
+ 86, 1075, 1078, 1065, 86, 86, 1067, 86, 1076, 1066,
+ 86, 1069, 1068, 86, 1082, 1070, 86, 1071, 86, 1072,
+ 86, 1073, 1080, 1084, 86, 1074, 1085, 1081, 1075, 1078,
+ 1086, 1087, 86, 1088, 86, 1076, 86, 86, 1089, 1092,
+ 1090, 1082, 1093, 3815, 1091, 1094, 3815, 1095, 3815, 1096,
+ 1084, 1098, 1097, 1085, 86, 86, 86, 1086, 86, 1099,
+ 1088, 86, 1108, 86, 86, 86, 1092, 1090, 86, 86,
+ 86, 1091, 86, 86, 1095, 1100, 1096, 1102, 1098, 1097,
+
+ 1101, 1104, 86, 1103, 1107, 1105, 1099, 1106, 86, 86,
+ 1109, 86, 1110, 1113, 86, 86, 86, 1111, 1112, 86,
+ 86, 1114, 1100, 86, 1102, 1115, 86, 1101, 86, 3815,
+ 1103, 86, 1105, 86, 1106, 86, 86, 1109, 1116, 1110,
+ 1113, 1118, 1117, 1121, 1111, 1112, 1119, 86, 1114, 1120,
+ 1122, 86, 1115, 1123, 1125, 3815, 86, 1126, 1124, 86,
+ 1127, 86, 1129, 86, 86, 1116, 86, 86, 1118, 1117,
+ 1121, 1128, 86, 1119, 1134, 1130, 1120, 1122, 86, 86,
+ 86, 1125, 1131, 86, 1126, 86, 1132, 1127, 1135, 1129,
+ 1136, 86, 1137, 3815, 1133, 3815, 86, 1138, 1128, 86,
+
+ 1139, 1134, 1130, 86, 1140, 1141, 3815, 1144, 1149, 1131,
+ 86, 86, 86, 1132, 86, 86, 1145, 1136, 1142, 1137,
+ 86, 1133, 86, 86, 1138, 86, 1143, 1139, 1146, 1147,
+ 1150, 1140, 1141, 86, 1144, 1151, 1148, 1155, 86, 1153,
+ 86, 1152, 1156, 1145, 86, 1142, 1154, 86, 86, 1158,
+ 86, 86, 86, 1143, 1157, 1146, 1147, 1150, 86, 86,
+ 1159, 86, 1151, 1148, 1155, 1161, 1153, 86, 1152, 1156,
+ 1160, 86, 86, 1154, 3815, 1162, 1158, 1163, 86, 1164,
+ 1166, 1157, 1165, 1167, 86, 86, 1170, 86, 1168, 86,
+ 1171, 86, 1161, 86, 1169, 86, 1173, 1160, 86, 1172,
+
+ 1174, 86, 1162, 1176, 1163, 1177, 1164, 1166, 3815, 1165,
+ 1167, 1178, 86, 86, 1182, 1168, 1175, 1179, 86, 3815,
+ 1185, 1169, 86, 86, 1180, 86, 1172, 1174, 86, 1184,
+ 1186, 1190, 1181, 1187, 86, 86, 86, 86, 1178, 86,
+ 1183, 1182, 1191, 1175, 1179, 1188, 86, 1189, 1192, 86,
+ 3815, 1180, 86, 3815, 86, 86, 1184, 86, 1194, 1181,
+ 1187, 86, 86, 86, 1193, 1198, 1195, 1183, 1202, 1191,
+ 1199, 1200, 1188, 86, 1189, 86, 1201, 1203, 1207, 1196,
+ 86, 1197, 86, 86, 3815, 1194, 86, 1206, 1205, 1204,
+ 86, 1193, 3815, 1195, 86, 1202, 86, 171, 1200, 86,
+
+ 86, 1251, 1221, 1201, 1203, 1207, 1196, 1208, 1197, 86,
+ 86, 1209, 1210, 1211, 1206, 1205, 1204, 1213, 1222, 1212,
+ 3815, 1220, 3815, 86, 86, 86, 86, 86, 86, 1221,
+ 1223, 1224, 3815, 86, 1208, 1225, 3815, 86, 1209, 1210,
+ 1211, 86, 86, 86, 1213, 1222, 1212, 1214, 1220, 1215,
+ 1226, 1227, 1228, 1216, 1229, 1217, 3815, 1223, 86, 1231,
+ 1218, 1230, 1225, 1232, 86, 1219, 1234, 86, 1233, 3815,
+ 3815, 86, 86, 86, 1214, 3815, 1215, 1226, 1227, 1228,
+ 1216, 1229, 1217, 86, 86, 1235, 1231, 1218, 1230, 1238,
+ 1236, 3815, 1219, 1234, 1241, 86, 1239, 1242, 86, 1244,
+
+ 3815, 86, 1237, 1248, 1245, 3815, 1240, 1243, 1253, 86,
+ 86, 1249, 1235, 86, 1246, 1250, 1238, 1236, 86, 86,
+ 86, 1241, 1247, 1239, 1242, 86, 86, 86, 1252, 1237,
+ 1248, 1245, 86, 1240, 1243, 86, 1255, 86, 1249, 1256,
+ 86, 1246, 1250, 1257, 86, 1258, 3815, 1266, 1268, 1247,
+ 3815, 86, 1269, 3815, 86, 1267, 3815, 1270, 3815, 3815,
+ 86, 86, 86, 1271, 3815, 1279, 1256, 86, 86, 1272,
+ 1257, 3815, 1258, 1259, 1266, 1268, 1273, 86, 1260, 1269,
+ 1261, 1275, 1267, 86, 1270, 86, 1262, 1276, 86, 86,
+ 1271, 1263, 1264, 1274, 86, 86, 1272, 86, 1265, 86,
+
+ 1259, 1277, 1280, 1273, 86, 1260, 1278, 1261, 1275, 86,
+ 1286, 1281, 1282, 1262, 1276, 1289, 1283, 86, 1263, 1264,
+ 1274, 86, 1284, 1285, 86, 1265, 86, 86, 1277, 1280,
+ 1287, 86, 86, 1278, 1288, 1290, 1291, 86, 1281, 1282,
+ 1293, 86, 1292, 1283, 86, 1294, 1295, 86, 1296, 1284,
+ 1285, 1300, 1297, 86, 86, 1299, 86, 1287, 1298, 86,
+ 1301, 1288, 1290, 1291, 86, 1306, 86, 1293, 86, 1292,
+ 86, 1303, 1302, 1295, 1304, 1296, 86, 86, 86, 1297,
+ 86, 86, 1299, 86, 1305, 1298, 1311, 1301, 1307, 1308,
+ 1309, 86, 1306, 86, 1310, 86, 1312, 86, 1303, 1302,
+
+ 1313, 1304, 1319, 1314, 86, 3815, 86, 86, 86, 1315,
+ 3815, 1305, 86, 1311, 86, 1307, 1308, 1309, 1316, 1318,
+ 1320, 1310, 86, 1312, 1317, 86, 86, 1321, 86, 1322,
+ 1314, 1323, 86, 1324, 86, 1325, 1315, 1326, 86, 1327,
+ 86, 86, 1329, 86, 3815, 1316, 1318, 1320, 1330, 1328,
+ 1331, 1317, 1332, 3815, 1321, 86, 1322, 86, 1323, 86,
+ 1324, 86, 1325, 1333, 1326, 1341, 1327, 86, 86, 1329,
+ 86, 1334, 1335, 1336, 1338, 86, 1328, 1339, 1337, 1332,
+ 86, 1340, 86, 86, 1342, 86, 1345, 1343, 1349, 86,
+ 1333, 1344, 1341, 86, 86, 1347, 1351, 86, 1334, 1335,
+
+ 86, 1338, 86, 1346, 1339, 86, 86, 1348, 1340, 86,
+ 1350, 1342, 86, 1345, 1343, 1352, 1353, 86, 1344, 86,
+ 86, 1355, 1347, 1354, 1358, 1356, 1357, 86, 86, 1360,
+ 1346, 3815, 86, 1359, 1348, 3815, 86, 1350, 86, 1361,
+ 86, 1362, 1352, 1353, 1364, 1363, 86, 86, 1355, 86,
+ 1354, 1358, 1356, 1357, 1365, 86, 1360, 86, 1366, 86,
+ 1359, 1367, 1369, 86, 1368, 1370, 1361, 86, 1362, 86,
+ 86, 1364, 1363, 1373, 1372, 86, 1374, 1371, 1375, 1377,
+ 1380, 1365, 86, 86, 1378, 1366, 86, 86, 1367, 1381,
+ 1376, 1368, 86, 1379, 86, 86, 1382, 86, 86, 1393,
+
+ 1373, 1372, 86, 1374, 1371, 1375, 1377, 86, 86, 1383,
+ 1384, 1378, 86, 1385, 1387, 1389, 1386, 1376, 3815, 1391,
+ 1379, 86, 1388, 1390, 86, 1392, 86, 1406, 86, 3815,
+ 86, 86, 86, 1396, 1399, 1394, 1383, 1384, 86, 1395,
+ 1398, 1400, 1389, 1386, 86, 86, 86, 86, 86, 1388,
+ 1390, 86, 1392, 86, 1397, 86, 1401, 86, 86, 86,
+ 1396, 1399, 1394, 86, 1402, 86, 1395, 1398, 1400, 1403,
+ 1404, 1405, 86, 1407, 1410, 1408, 1411, 1409, 86, 86,
+ 1412, 1397, 3815, 1401, 86, 86, 86, 86, 3815, 1421,
+ 3815, 1402, 1417, 86, 1413, 3815, 1403, 1404, 1405, 86,
+
+ 1434, 86, 1408, 1411, 1409, 86, 1414, 1412, 1416, 86,
+ 86, 1419, 1418, 86, 1420, 86, 86, 86, 1422, 1417,
+ 86, 1413, 86, 1425, 1423, 1424, 1429, 1426, 1432, 1428,
+ 171, 1427, 86, 1414, 1435, 1416, 3815, 86, 1419, 1418,
+ 86, 1420, 1430, 86, 86, 1422, 86, 86, 86, 1431,
+ 1425, 1423, 1424, 1429, 1426, 86, 1428, 1433, 1427, 1436,
+ 86, 86, 1437, 1438, 86, 3815, 86, 1439, 1441, 1430,
+ 1442, 86, 3815, 86, 1440, 1444, 1431, 1443, 1447, 1446,
+ 1445, 86, 1450, 86, 1433, 86, 1436, 86, 86, 1437,
+ 1438, 1452, 86, 3815, 1439, 1441, 86, 1442, 86, 86,
+
+ 1448, 1440, 1444, 86, 1443, 1447, 1446, 1445, 1449, 86,
+ 1451, 1453, 86, 1454, 86, 1455, 86, 1456, 1452, 1457,
+ 86, 1462, 1461, 86, 86, 86, 1464, 1448, 1458, 1463,
+ 1459, 3815, 1465, 1460, 1467, 1449, 86, 1451, 1453, 1474,
+ 1454, 86, 1455, 3815, 1456, 86, 1457, 86, 1462, 1461,
+ 1466, 86, 86, 86, 1468, 1458, 1463, 1459, 86, 1465,
+ 1460, 1467, 86, 86, 1469, 1470, 1471, 1472, 1475, 1473,
+ 1477, 86, 1476, 86, 1478, 86, 1479, 1466, 1480, 3815,
+ 1481, 1468, 86, 86, 86, 86, 86, 1483, 86, 1484,
+ 86, 1469, 1470, 1471, 1472, 1475, 1473, 1477, 1486, 1476,
+
+ 86, 1478, 86, 86, 1482, 1480, 1485, 1481, 1487, 86,
+ 86, 86, 86, 1488, 1483, 1491, 1484, 1489, 1492, 1493,
+ 86, 86, 1494, 1495, 86, 1486, 1490, 86, 1496, 86,
+ 86, 1482, 1499, 1485, 86, 1487, 1497, 86, 86, 1498,
+ 1488, 86, 1491, 1500, 1489, 1492, 1493, 1501, 86, 1494,
+ 1495, 86, 1503, 1490, 86, 1496, 1504, 86, 1502, 1499,
+ 1510, 1505, 1506, 1497, 1507, 86, 1498, 1512, 86, 86,
+ 86, 1508, 86, 86, 1501, 86, 3815, 86, 1509, 1503,
+ 1511, 1513, 1514, 1504, 1515, 1502, 1517, 86, 1505, 1506,
+ 86, 1507, 86, 86, 1516, 86, 1518, 86, 1508, 86,
+
+ 1519, 86, 1522, 86, 1525, 1509, 1523, 1511, 1513, 1514,
+ 86, 1515, 1520, 1517, 1524, 86, 1535, 1521, 86, 86,
+ 1533, 1516, 1540, 1518, 1534, 3815, 3815, 1519, 86, 1522,
+ 86, 1525, 1536, 1523, 86, 3815, 3815, 1539, 1537, 1538,
+ 3815, 1524, 86, 1543, 86, 1526, 1541, 1533, 86, 1527,
+ 1550, 1534, 1528, 1529, 86, 86, 1542, 1530, 86, 1536,
+ 86, 1545, 86, 1531, 1539, 1537, 1538, 1532, 86, 86,
+ 1543, 86, 1526, 1541, 1551, 1544, 1527, 1549, 86, 1528,
+ 1529, 86, 86, 1542, 1530, 1548, 86, 86, 1545, 1546,
+ 1531, 1547, 86, 1552, 1532, 1556, 1553, 1555, 1554, 1558,
+
+ 1557, 1560, 1544, 1562, 1549, 86, 86, 1559, 86, 86,
+ 1561, 3815, 1548, 86, 86, 1563, 1546, 86, 1547, 86,
+ 1552, 1591, 1556, 1553, 1555, 1554, 86, 1557, 86, 86,
+ 1562, 86, 86, 86, 1559, 1569, 1570, 1561, 1571, 1572,
+ 1573, 3815, 1563, 1564, 1574, 3815, 1575, 1576, 1565, 86,
+ 1566, 1577, 1567, 86, 1568, 3815, 3815, 86, 86, 86,
+ 86, 86, 1569, 1570, 86, 1571, 1579, 1578, 86, 86,
+ 1564, 1574, 1582, 1575, 1576, 1565, 86, 1566, 1577, 1567,
+ 1580, 1568, 1583, 1584, 86, 1581, 1585, 1587, 86, 1586,
+ 86, 1592, 1593, 1579, 1578, 1588, 1589, 3815, 1590, 1582,
+
+ 86, 1594, 86, 86, 86, 86, 1598, 86, 86, 1583,
+ 1584, 86, 86, 1585, 1587, 1596, 1586, 86, 1592, 1593,
+ 86, 1595, 1588, 1589, 86, 1590, 1597, 1599, 1594, 1600,
+ 1601, 3815, 86, 1598, 86, 1603, 1602, 86, 86, 86,
+ 1604, 1605, 1596, 1606, 1607, 3815, 3815, 86, 1595, 1608,
+ 1609, 1610, 86, 1597, 1599, 1612, 1600, 1601, 86, 86,
+ 1614, 1611, 86, 1602, 1615, 86, 1620, 1604, 86, 86,
+ 1606, 1607, 86, 86, 1613, 1616, 1608, 1609, 1610, 86,
+ 1617, 86, 86, 1618, 1622, 1623, 86, 86, 1611, 86,
+ 86, 1615, 1619, 86, 86, 1625, 1621, 86, 86, 1624,
+
+ 3815, 1613, 1616, 86, 1627, 1629, 86, 1617, 1626, 86,
+ 1618, 1622, 1623, 1628, 86, 1630, 1631, 3815, 1636, 1619,
+ 1632, 3815, 86, 1621, 1633, 3815, 1624, 86, 86, 1638,
+ 86, 1627, 1629, 1635, 86, 1626, 1634, 86, 86, 86,
+ 1628, 1640, 1630, 1631, 1637, 1636, 86, 1632, 1639, 86,
+ 1641, 1633, 1642, 86, 1644, 86, 1638, 1643, 1646, 1645,
+ 1635, 86, 1647, 1634, 3815, 1648, 86, 86, 1640, 1649,
+ 86, 1637, 86, 86, 86, 1639, 1650, 1641, 86, 1642,
+ 1651, 1644, 1654, 1653, 1643, 1652, 1645, 86, 1655, 1656,
+ 86, 86, 1648, 86, 86, 86, 1649, 1657, 86, 86,
+
+ 1658, 1659, 1662, 1663, 1664, 1666, 86, 1651, 86, 86,
+ 1653, 86, 1652, 171, 1660, 1655, 1656, 86, 1661, 1670,
+ 1665, 86, 86, 1669, 1657, 86, 1667, 1658, 1659, 1672,
+ 86, 1664, 1668, 1671, 86, 86, 86, 86, 1675, 86,
+ 86, 1660, 1673, 1674, 86, 1661, 1677, 1665, 86, 1678,
+ 1669, 86, 86, 1667, 1676, 86, 1672, 1679, 86, 1668,
+ 1671, 86, 1680, 1681, 86, 1675, 1683, 1684, 1682, 1673,
+ 1674, 86, 86, 1677, 1685, 86, 1678, 1686, 1689, 86,
+ 1690, 1676, 1687, 1688, 1679, 1691, 1697, 86, 86, 1680,
+ 86, 1692, 86, 1683, 1684, 1682, 86, 1695, 86, 86,
+
+ 1696, 1685, 1699, 86, 86, 1689, 1698, 1690, 1693, 86,
+ 1688, 1694, 1691, 1697, 1700, 86, 1701, 1703, 1692, 86,
+ 86, 1702, 1704, 1707, 1695, 1708, 1705, 1696, 1722, 1699,
+ 1742, 86, 86, 1698, 86, 1693, 1709, 86, 1694, 86,
+ 1706, 86, 1710, 1701, 1712, 1711, 86, 86, 1702, 86,
+ 1707, 86, 1708, 1705, 86, 1713, 1716, 1715, 86, 1714,
+ 86, 1718, 86, 1709, 86, 86, 86, 1706, 1719, 1710,
+ 86, 1712, 1711, 1721, 3815, 1723, 1717, 86, 3815, 1726,
+ 1720, 86, 1713, 1716, 1715, 86, 1714, 86, 1718, 86,
+ 86, 86, 86, 1724, 1730, 1719, 1727, 1725, 1728, 1731,
+
+ 1721, 1729, 1723, 1717, 86, 86, 1726, 1720, 86, 86,
+ 86, 1732, 1735, 1733, 1734, 1743, 86, 1736, 86, 86,
+ 1724, 1730, 86, 1727, 1725, 1728, 1731, 86, 1729, 1737,
+ 1738, 1739, 1744, 86, 1741, 86, 1740, 1746, 1732, 1735,
+ 1733, 1734, 86, 86, 1736, 86, 1745, 86, 1747, 86,
+ 1751, 1748, 1750, 1752, 1753, 86, 1737, 1738, 1739, 1744,
+ 86, 1741, 86, 1740, 86, 1749, 3815, 1754, 1758, 86,
+ 1755, 86, 86, 1745, 86, 1747, 1759, 3815, 1748, 1750,
+ 1760, 1761, 86, 1766, 1765, 86, 86, 1762, 1763, 1756,
+ 86, 1757, 1749, 86, 1754, 86, 86, 1755, 86, 86,
+
+ 1764, 86, 86, 1759, 86, 1768, 1767, 1760, 1761, 86,
+ 1766, 1765, 86, 86, 1762, 1763, 1756, 1769, 1757, 1776,
+ 1771, 1770, 1777, 1781, 86, 1772, 1774, 1764, 86, 86,
+ 1773, 1775, 1768, 1767, 86, 1778, 1786, 1779, 1782, 86,
+ 3815, 86, 86, 1780, 1769, 86, 1776, 1771, 1770, 1777,
+ 1781, 86, 1784, 1792, 1787, 1783, 3815, 86, 86, 86,
+ 86, 86, 1778, 86, 1779, 1782, 1785, 1789, 86, 1788,
+ 1780, 1790, 1791, 86, 86, 86, 86, 1795, 86, 1784,
+ 1793, 1787, 1783, 86, 1794, 86, 1797, 1796, 86, 1798,
+ 1802, 3815, 1799, 1785, 1789, 86, 1788, 86, 1790, 1791,
+
+ 86, 1805, 1800, 86, 86, 86, 1804, 1793, 1806, 86,
+ 86, 1794, 1801, 1797, 1796, 1803, 1798, 1802, 86, 1799,
+ 86, 86, 1807, 1808, 1810, 1809, 1811, 86, 1805, 1800,
+ 86, 86, 86, 1804, 1812, 1806, 1813, 3815, 3815, 1801,
+ 86, 1814, 1803, 3815, 1816, 1815, 1817, 1827, 1823, 1807,
+ 1808, 86, 1809, 86, 1822, 86, 86, 86, 1821, 86,
+ 86, 1812, 86, 1813, 1824, 1818, 1828, 86, 1814, 1819,
+ 86, 1816, 1815, 1817, 86, 1823, 86, 1825, 86, 1829,
+ 1832, 1822, 1820, 1826, 86, 1821, 1830, 1831, 86, 3815,
+ 86, 1824, 1818, 1828, 86, 1833, 1819, 1834, 86, 1836,
+
+ 1835, 86, 1841, 1838, 1825, 1840, 86, 1837, 1839, 1820,
+ 1826, 86, 86, 1830, 1831, 86, 86, 86, 1843, 1842,
+ 86, 86, 1833, 86, 1834, 1844, 1836, 1835, 86, 86,
+ 1838, 86, 1845, 1847, 1837, 1839, 1846, 86, 3815, 1849,
+ 1848, 3815, 1851, 3815, 1850, 1852, 1842, 86, 3815, 1853,
+ 86, 1855, 1844, 1854, 86, 1856, 86, 1860, 1866, 1845,
+ 86, 86, 86, 1846, 86, 86, 86, 1848, 86, 86,
+ 1857, 1850, 1852, 1858, 1859, 86, 1853, 86, 1855, 1862,
+ 1854, 86, 1856, 86, 1860, 86, 1861, 1863, 1864, 1865,
+ 86, 86, 1867, 1868, 1869, 86, 1870, 1857, 86, 1873,
+
+ 1858, 1859, 86, 86, 1878, 1871, 1862, 86, 86, 1874,
+ 86, 86, 1876, 1861, 1863, 1864, 1865, 1872, 86, 1867,
+ 1868, 1869, 86, 1870, 86, 86, 1873, 1879, 1875, 1877,
+ 1884, 86, 1871, 1880, 86, 1881, 1874, 86, 1882, 1876,
+ 86, 86, 1887, 86, 1872, 1883, 86, 1885, 1888, 1889,
+ 86, 1886, 1890, 86, 1879, 1875, 1877, 1884, 1891, 86,
+ 1880, 86, 1881, 3815, 86, 1882, 86, 3815, 1893, 1887,
+ 86, 1892, 1883, 86, 1885, 86, 1889, 86, 1886, 1890,
+ 86, 1894, 171, 1895, 1896, 1891, 1897, 1898, 1899, 86,
+ 1900, 86, 1905, 1902, 86, 1893, 1901, 1903, 1892, 86,
+
+ 86, 1904, 1911, 1906, 86, 1907, 86, 3815, 1894, 86,
+ 1895, 1896, 1909, 1897, 1898, 1899, 86, 1900, 86, 86,
+ 1902, 86, 1908, 1901, 1903, 1910, 1912, 86, 1904, 86,
+ 1906, 1913, 1907, 86, 86, 1914, 3815, 86, 1915, 1909,
+ 1916, 3815, 1917, 1919, 1920, 1921, 1918, 86, 86, 1908,
+ 86, 86, 1910, 1912, 86, 1922, 1927, 86, 1923, 1925,
+ 1935, 1924, 1914, 86, 86, 1915, 86, 86, 86, 1917,
+ 1919, 1920, 1921, 1918, 86, 1926, 3815, 1928, 1930, 3815,
+ 86, 86, 1922, 1927, 86, 1923, 1925, 86, 1924, 1929,
+ 1931, 1932, 86, 86, 1933, 3815, 1937, 86, 86, 1943,
+
+ 1936, 1939, 1926, 86, 1928, 1930, 1934, 1940, 1941, 1945,
+ 86, 1944, 1938, 1942, 86, 86, 1929, 1931, 1932, 86,
+ 86, 1933, 86, 1937, 1946, 1947, 86, 1936, 1939, 86,
+ 3815, 1948, 1950, 1934, 1940, 1941, 1949, 86, 1944, 1938,
+ 1942, 86, 1953, 1951, 1956, 1952, 1954, 86, 1955, 1957,
+ 1958, 86, 1947, 1959, 86, 86, 86, 86, 1948, 86,
+ 1961, 1960, 86, 1949, 86, 86, 1964, 1963, 86, 1953,
+ 1951, 1956, 1952, 1954, 1962, 1955, 1965, 1966, 86, 1968,
+ 1967, 86, 86, 86, 3815, 86, 86, 86, 1960, 86,
+ 3815, 86, 86, 86, 1963, 1970, 1971, 1969, 86, 1972,
+
+ 1973, 1962, 86, 1965, 1966, 86, 1968, 1967, 1974, 86,
+ 1976, 1977, 86, 86, 1975, 1980, 86, 86, 1982, 1979,
+ 1978, 1983, 1970, 1971, 1969, 1981, 1972, 1973, 86, 3815,
+ 86, 1990, 86, 86, 3815, 1974, 86, 1976, 1977, 86,
+ 86, 1975, 1980, 1984, 1985, 1982, 1979, 1978, 1987, 1986,
+ 86, 3815, 1981, 86, 1988, 86, 86, 86, 1990, 1991,
+ 1992, 86, 1993, 1994, 1995, 3815, 1996, 3815, 1997, 86,
+ 1984, 1985, 1989, 2000, 3815, 1987, 1986, 86, 86, 86,
+ 86, 1988, 86, 1998, 2001, 86, 1991, 86, 2003, 1993,
+ 1994, 1995, 86, 1996, 1999, 1997, 86, 86, 2006, 1989,
+
+ 2000, 2002, 86, 2011, 2004, 2009, 2012, 2005, 86, 86,
+ 1998, 2001, 2007, 86, 86, 2003, 2010, 2008, 86, 2013,
+ 2014, 1999, 86, 3815, 86, 2006, 2016, 86, 2002, 2015,
+ 2011, 2004, 2009, 86, 2005, 86, 2017, 2018, 86, 2007,
+ 2019, 2022, 3815, 2010, 2008, 2034, 86, 2014, 86, 2020,
+ 86, 86, 2021, 2016, 2023, 2024, 2015, 2027, 2025, 2026,
+ 86, 2028, 2033, 86, 2018, 86, 86, 2019, 2022, 86,
+ 86, 86, 86, 2032, 86, 86, 2020, 86, 3815, 2021,
+ 2029, 2023, 2024, 2030, 2027, 2025, 2026, 2031, 2028, 2035,
+ 86, 86, 2036, 2038, 86, 2039, 2046, 2037, 86, 86,
+
+ 2032, 2040, 86, 2043, 3815, 86, 2044, 2029, 86, 86,
+ 2030, 86, 86, 2041, 2031, 2045, 2035, 86, 2042, 2036,
+ 2038, 86, 2039, 2046, 2037, 86, 2047, 2048, 2040, 2049,
+ 2043, 2050, 3815, 2044, 2051, 3815, 2053, 2060, 2052, 2059,
+ 86, 2055, 2045, 86, 2056, 86, 2058, 2057, 86, 86,
+ 2054, 86, 86, 2047, 2048, 2069, 2049, 2072, 2050, 86,
+ 86, 2051, 86, 2053, 2060, 2052, 2059, 2061, 2055, 86,
+ 2062, 2056, 86, 2058, 2057, 2063, 86, 2054, 2064, 2066,
+ 2065, 2067, 2068, 2071, 86, 3815, 2074, 86, 2070, 86,
+ 2073, 86, 86, 2075, 2061, 86, 3815, 86, 2080, 86,
+
+ 2076, 2079, 86, 86, 2077, 2064, 2066, 2065, 2067, 2068,
+ 86, 86, 86, 2074, 86, 2070, 2078, 2073, 2081, 2084,
+ 2082, 86, 2085, 86, 3815, 86, 2083, 2076, 2079, 2086,
+ 86, 2077, 86, 2089, 2087, 2090, 2091, 86, 2088, 2099,
+ 2093, 86, 86, 2078, 86, 2081, 86, 2082, 2100, 2085,
+ 2092, 86, 86, 2083, 86, 2094, 2086, 86, 86, 2095,
+ 2089, 2087, 2090, 2091, 86, 2088, 2096, 2093, 2097, 86,
+ 2101, 86, 86, 2102, 2103, 2105, 2104, 2092, 2107, 86,
+ 86, 2109, 2094, 86, 86, 2108, 2095, 86, 2106, 2098,
+ 3815, 2113, 3815, 2096, 86, 86, 86, 2101, 2112, 86,
+
+ 2102, 86, 2105, 2104, 2110, 86, 2111, 86, 2116, 86,
+ 2118, 2115, 2108, 86, 2114, 2106, 2098, 86, 86, 2117,
+ 2119, 86, 2120, 2121, 2124, 2112, 86, 86, 2122, 2127,
+ 86, 2110, 86, 2111, 86, 2116, 2123, 2118, 2115, 2131,
+ 86, 2114, 86, 2125, 86, 2126, 2117, 2119, 86, 2120,
+ 2121, 2124, 2128, 2129, 86, 2122, 86, 86, 171, 2130,
+ 86, 2132, 2133, 2123, 2134, 2140, 86, 86, 86, 2137,
+ 2125, 2144, 2126, 2138, 3815, 86, 86, 2135, 2136, 2128,
+ 2129, 86, 2143, 86, 86, 2147, 2130, 2139, 2132, 2133,
+ 2142, 2134, 86, 86, 86, 2141, 2137, 86, 86, 86,
+
+ 2138, 2145, 2148, 86, 2135, 2136, 2146, 2149, 2150, 2143,
+ 86, 2151, 86, 86, 2139, 2152, 3815, 2142, 3815, 2153,
+ 2154, 2174, 2141, 2156, 86, 86, 86, 2155, 2145, 2148,
+ 86, 2157, 2158, 2146, 86, 2150, 86, 2162, 2160, 86,
+ 2159, 86, 86, 86, 2161, 86, 2153, 2154, 2163, 86,
+ 2156, 86, 2165, 86, 2155, 86, 2164, 3815, 2157, 2158,
+ 86, 3815, 2171, 86, 2162, 2160, 86, 2159, 86, 2166,
+ 2168, 2161, 2173, 2169, 86, 2163, 2172, 86, 2177, 2165,
+ 2170, 2176, 2167, 2164, 86, 2175, 86, 86, 86, 2171,
+ 2178, 86, 86, 2179, 2180, 86, 2166, 2168, 86, 86,
+
+ 2169, 86, 2181, 2172, 86, 2177, 2184, 2170, 2176, 2167,
+ 2185, 2182, 2175, 2183, 2186, 2187, 2188, 2178, 2189, 2190,
+ 2179, 2180, 86, 2193, 86, 86, 2194, 86, 2191, 2181,
+ 2192, 2195, 86, 2184, 86, 2196, 86, 86, 2182, 2197,
+ 2183, 86, 2187, 86, 86, 2189, 2190, 2198, 2199, 86,
+ 86, 2201, 2203, 2194, 2200, 2191, 86, 2192, 86, 86,
+ 2204, 2205, 2196, 86, 2202, 2207, 86, 2206, 86, 2209,
+ 2208, 86, 3815, 86, 2198, 86, 86, 2210, 2201, 2203,
+ 86, 2200, 86, 2211, 2214, 2212, 2213, 86, 2205, 86,
+ 2222, 2202, 86, 2227, 2206, 3815, 2209, 2208, 2228, 86,
+
+ 2215, 2216, 2217, 3815, 2210, 86, 2238, 2218, 86, 2220,
+ 2211, 86, 2212, 2213, 2219, 86, 86, 2221, 86, 2223,
+ 2225, 86, 86, 2224, 86, 86, 86, 2215, 2216, 2217,
+ 86, 2226, 2229, 86, 2218, 2231, 2220, 2230, 2232, 2233,
+ 86, 2219, 2234, 2235, 2221, 86, 2223, 2225, 2236, 86,
+ 2224, 86, 2240, 86, 86, 86, 2243, 2237, 2226, 2229,
+ 86, 86, 2231, 86, 2230, 2232, 2233, 2239, 86, 2241,
+ 2235, 2244, 2242, 2245, 86, 2236, 86, 86, 86, 2240,
+ 2246, 2247, 86, 2243, 2237, 2249, 2248, 86, 86, 2251,
+ 2252, 2250, 2255, 2253, 2239, 86, 2241, 2256, 86, 2242,
+
+ 86, 86, 2258, 86, 2254, 86, 2259, 2246, 86, 86,
+ 2260, 2257, 2249, 2248, 86, 86, 2251, 86, 2250, 2255,
+ 2253, 2262, 86, 2263, 86, 2265, 86, 2266, 86, 2258,
+ 2268, 2254, 3815, 2259, 2261, 86, 86, 2260, 2257, 2264,
+ 86, 2267, 2269, 2271, 2270, 2272, 2273, 86, 2262, 86,
+ 86, 2274, 2265, 2275, 86, 2276, 3815, 2280, 2277, 86,
+ 2287, 2261, 86, 86, 86, 86, 2264, 2278, 2267, 2269,
+ 86, 2270, 2272, 2273, 2279, 86, 86, 86, 2281, 86,
+ 86, 86, 2276, 86, 2280, 2277, 2283, 2284, 2282, 2285,
+ 86, 2286, 86, 2288, 2278, 2289, 86, 2290, 2297, 2291,
+
+ 3815, 2279, 86, 86, 86, 2281, 2292, 3815, 86, 2296,
+ 86, 86, 2294, 2283, 2284, 2282, 2285, 86, 2286, 86,
+ 2288, 2302, 2293, 2295, 2290, 86, 2291, 86, 86, 86,
+ 2299, 86, 2298, 2292, 2300, 86, 2296, 2301, 86, 2294,
+ 2303, 2304, 2305, 2306, 86, 86, 86, 2307, 2302, 2293,
+ 2295, 2311, 2308, 3815, 3815, 2314, 3815, 2299, 2319, 2298,
+ 86, 2300, 86, 86, 2301, 86, 86, 2303, 2304, 2305,
+ 86, 2309, 2313, 2315, 2307, 86, 2310, 2312, 86, 2308,
+ 2320, 2316, 2314, 86, 2317, 86, 2318, 86, 86, 86,
+ 86, 86, 2322, 86, 2321, 86, 2323, 2324, 2309, 2313,
+
+ 2315, 2325, 2326, 2310, 2312, 2332, 86, 2320, 2316, 2330,
+ 86, 2317, 2327, 2318, 86, 2328, 86, 2333, 2331, 2322,
+ 2329, 2321, 2336, 2323, 86, 86, 2337, 86, 2325, 2326,
+ 86, 86, 86, 2334, 2338, 86, 2330, 2339, 2335, 2327,
+ 86, 2340, 2328, 2341, 86, 2331, 2343, 2329, 3815, 2347,
+ 2345, 2342, 2344, 2346, 86, 86, 86, 2348, 86, 86,
+ 2349, 2338, 86, 2350, 2339, 86, 86, 86, 2340, 86,
+ 2354, 2365, 2353, 2343, 2351, 86, 86, 2345, 2342, 2344,
+ 2346, 86, 86, 2355, 2348, 86, 2352, 2356, 2358, 2357,
+ 86, 2360, 86, 86, 171, 86, 2359, 2354, 86, 2353,
+
+ 2361, 2351, 2362, 86, 2366, 2364, 2367, 2363, 2369, 2368,
+ 2355, 86, 86, 2352, 2356, 86, 2357, 86, 2360, 86,
+ 86, 2370, 2371, 2359, 2373, 86, 86, 86, 86, 86,
+ 86, 2366, 2364, 2367, 2363, 2369, 2368, 2372, 2374, 3815,
+ 2375, 2376, 2377, 86, 2379, 3815, 2384, 86, 2370, 86,
+ 2378, 2373, 2380, 86, 2381, 2385, 86, 86, 2382, 2383,
+ 2386, 86, 86, 2391, 2372, 2374, 86, 2375, 2376, 2377,
+ 86, 86, 86, 86, 2389, 2387, 86, 2378, 86, 2380,
+ 86, 2381, 2385, 86, 86, 2382, 2383, 2386, 2388, 2390,
+ 2392, 2393, 2395, 2401, 2394, 86, 86, 86, 2398, 86,
+
+ 86, 2389, 2387, 86, 2399, 86, 2400, 86, 2402, 86,
+ 2403, 86, 2396, 2408, 2404, 2388, 2390, 2392, 2393, 2395,
+ 2401, 2394, 86, 2397, 86, 2398, 2405, 2406, 86, 86,
+ 2407, 2399, 86, 2400, 86, 2402, 2409, 2403, 86, 2396,
+ 86, 2404, 2417, 2413, 86, 2410, 2421, 2411, 2412, 86,
+ 2397, 2414, 2415, 2405, 2406, 86, 86, 2407, 86, 86,
+ 86, 2416, 2418, 2409, 86, 2423, 2419, 2420, 86, 2417,
+ 2413, 86, 2410, 86, 2411, 2412, 86, 2422, 2414, 86,
+ 2424, 2425, 2426, 2427, 86, 86, 2428, 86, 2416, 2418,
+ 2429, 2431, 86, 2419, 2420, 2430, 86, 2432, 86, 86,
+
+ 86, 2436, 2471, 86, 2422, 3815, 86, 2424, 2425, 2426,
+ 86, 2433, 2437, 2428, 2435, 86, 86, 2429, 2431, 2434,
+ 86, 2438, 2430, 86, 2432, 2439, 2441, 86, 2436, 2440,
+ 86, 2442, 2445, 86, 86, 3815, 86, 86, 2433, 2437,
+ 86, 2435, 2443, 86, 86, 2451, 2434, 2444, 2438, 86,
+ 2446, 2447, 2439, 2441, 2448, 2450, 2440, 2453, 2442, 2445,
+ 2454, 2452, 86, 2455, 2457, 2456, 2458, 2449, 3815, 86,
+ 86, 2460, 2451, 86, 86, 86, 86, 2446, 2447, 2459,
+ 2462, 2448, 2450, 2463, 86, 3815, 86, 2454, 2452, 86,
+ 2455, 2457, 2456, 2458, 2449, 2461, 86, 2464, 2460, 2465,
+
+ 2466, 86, 86, 86, 86, 2467, 2459, 2462, 86, 2468,
+ 2463, 2469, 2473, 2475, 2470, 86, 2472, 2474, 86, 86,
+ 86, 86, 2461, 86, 2464, 2477, 2465, 2466, 2476, 86,
+ 86, 2478, 2467, 2484, 86, 2479, 2468, 86, 2469, 2473,
+ 86, 2470, 2480, 2472, 2474, 2481, 2483, 86, 2485, 2486,
+ 2482, 2487, 2477, 86, 86, 2476, 86, 86, 2478, 86,
+ 2491, 2490, 2479, 86, 86, 86, 86, 2493, 86, 2480,
+ 86, 2492, 2481, 2483, 2488, 2485, 2486, 2482, 2487, 2489,
+ 86, 2494, 86, 2495, 86, 2496, 2498, 2491, 2490, 2499,
+ 2497, 2501, 2500, 86, 2493, 2502, 2503, 2506, 2492, 2564,
+
+ 3815, 86, 86, 2508, 86, 2507, 86, 2504, 86, 86,
+ 2495, 2509, 2496, 2498, 86, 2505, 86, 2497, 2501, 2500,
+ 86, 86, 2502, 2510, 86, 2511, 86, 2512, 86, 86,
+ 2508, 86, 2507, 2513, 2504, 2521, 86, 86, 2509, 2516,
+ 2514, 86, 2505, 2515, 2518, 2517, 2520, 86, 2522, 2519,
+ 2510, 86, 2511, 86, 2512, 2523, 86, 2525, 86, 2524,
+ 2513, 86, 2521, 86, 86, 2526, 2516, 2514, 2531, 86,
+ 2515, 2527, 2517, 2520, 86, 2522, 86, 2528, 2536, 86,
+ 86, 2530, 2523, 2535, 2525, 86, 2524, 86, 2532, 2529,
+ 2537, 2533, 2526, 2534, 86, 86, 86, 86, 2527, 86,
+
+ 86, 2538, 86, 86, 2528, 2536, 2540, 2539, 2530, 2541,
+ 2535, 3815, 2542, 86, 2545, 2532, 2529, 2537, 2533, 86,
+ 2534, 86, 2543, 2544, 86, 2547, 2546, 2549, 2538, 86,
+ 2551, 2552, 86, 2540, 2539, 86, 2541, 2554, 2548, 2542,
+ 86, 2545, 86, 2550, 86, 86, 86, 86, 86, 2543,
+ 2544, 2555, 2547, 2546, 2549, 86, 2556, 2551, 2552, 2553,
+ 2557, 86, 2558, 2561, 2554, 2548, 2562, 2559, 2560, 2563,
+ 2550, 86, 2568, 2569, 86, 86, 2565, 86, 86, 2566,
+ 86, 171, 2570, 2556, 2567, 86, 2553, 86, 2571, 2558,
+ 2561, 86, 2572, 2562, 2559, 2560, 2563, 2574, 2583, 86,
+
+ 2575, 2573, 2578, 2565, 86, 86, 86, 86, 2579, 2570,
+ 86, 86, 2580, 2582, 2576, 2571, 2581, 2587, 3815, 2572,
+ 86, 2584, 86, 2585, 86, 2577, 86, 2575, 2573, 2578,
+ 86, 86, 2586, 86, 2588, 86, 2589, 2590, 86, 2580,
+ 2582, 2576, 2591, 2581, 86, 86, 2593, 2592, 2584, 86,
+ 2585, 2597, 2577, 86, 2595, 2594, 86, 86, 86, 2586,
+ 86, 2588, 2596, 86, 2590, 2598, 86, 2604, 86, 2591,
+ 86, 2599, 2600, 2593, 2592, 2602, 86, 2601, 2597, 2606,
+ 86, 2595, 2594, 86, 86, 2603, 2605, 86, 2607, 2596,
+ 86, 86, 2598, 2611, 86, 2612, 2608, 86, 2599, 2600,
+
+ 2609, 86, 2602, 86, 2601, 86, 2606, 2610, 86, 86,
+ 86, 2613, 2603, 2605, 2614, 2607, 86, 2615, 2616, 3815,
+ 2611, 2617, 2612, 2608, 2618, 3815, 86, 2609, 86, 2619,
+ 2624, 2620, 86, 86, 2610, 2623, 86, 86, 2613, 86,
+ 86, 2614, 2621, 86, 2615, 86, 86, 2622, 2617, 2625,
+ 86, 2618, 2627, 2626, 2628, 2629, 2619, 2624, 2620, 86,
+ 2631, 2630, 2623, 3815, 86, 2633, 2635, 86, 2632, 2621,
+ 2634, 2638, 2636, 86, 2622, 86, 2625, 86, 2637, 2643,
+ 2626, 2642, 2629, 2640, 86, 86, 86, 2631, 2630, 86,
+ 86, 2644, 2633, 86, 86, 2632, 86, 2634, 2638, 2636,
+
+ 2639, 2641, 86, 86, 2645, 2637, 86, 86, 2642, 2646,
+ 2640, 2647, 2648, 3815, 2649, 86, 86, 2650, 2644, 2651,
+ 2653, 86, 2652, 86, 2654, 3815, 86, 2639, 2641, 2657,
+ 2658, 86, 86, 2659, 2655, 2661, 2646, 2656, 2647, 2648,
+ 86, 2649, 86, 2660, 2650, 2664, 86, 2653, 86, 2652,
+ 86, 2654, 86, 2663, 2665, 86, 86, 86, 2667, 2662,
+ 2659, 2655, 2661, 2666, 2656, 86, 86, 2668, 86, 2669,
+ 2660, 86, 86, 2671, 2672, 2670, 86, 2673, 2674, 2675,
+ 2663, 86, 2676, 2677, 2678, 86, 2662, 86, 3815, 2682,
+ 2666, 86, 2681, 86, 2668, 86, 86, 86, 2684, 2679,
+
+ 2671, 86, 2670, 2687, 86, 2674, 2675, 2680, 86, 2676,
+ 2677, 86, 86, 2683, 86, 86, 86, 2686, 2685, 2681,
+ 2691, 86, 2688, 2692, 86, 86, 2679, 86, 2689, 2693,
+ 2687, 86, 2694, 2698, 2680, 2697, 2695, 3815, 3815, 86,
+ 2683, 86, 3815, 2690, 2686, 2685, 86, 86, 86, 2688,
+ 2692, 2699, 2696, 2703, 86, 2689, 2693, 86, 86, 2694,
+ 86, 2700, 86, 2695, 2701, 86, 2704, 2705, 86, 2702,
+ 2690, 2708, 3815, 86, 2707, 86, 86, 2706, 2699, 2696,
+ 2703, 86, 2711, 86, 2718, 86, 2709, 2713, 2700, 3815,
+ 2714, 2701, 2725, 86, 2705, 2712, 2702, 86, 2708, 86,
+
+ 2710, 2707, 86, 86, 2706, 2719, 2715, 86, 2717, 86,
+ 2716, 2718, 86, 2709, 2713, 86, 2720, 2714, 3815, 86,
+ 86, 2721, 2712, 2722, 86, 3815, 2726, 2710, 3815, 2727,
+ 2728, 86, 2719, 2715, 86, 2717, 2729, 2716, 2723, 2734,
+ 2724, 86, 2730, 2720, 86, 2731, 86, 86, 2721, 2732,
+ 2722, 86, 86, 2726, 3815, 86, 2727, 2728, 86, 86,
+ 2733, 86, 2736, 2729, 2737, 2723, 2734, 2724, 2738, 2730,
+ 2735, 86, 2731, 2739, 2740, 2741, 2732, 2742, 86, 2744,
+ 3815, 2743, 3815, 86, 86, 86, 86, 2733, 2745, 2736,
+ 86, 2737, 2746, 86, 2747, 2738, 86, 2735, 2748, 2749,
+
+ 2739, 2758, 2750, 3815, 2742, 2756, 86, 86, 2743, 86,
+ 86, 86, 86, 2751, 86, 2745, 2752, 2753, 2754, 2746,
+ 2755, 2747, 2757, 86, 86, 2748, 2749, 3815, 2758, 2750,
+ 2763, 86, 2759, 86, 86, 86, 86, 86, 2761, 86,
+ 2751, 2760, 2766, 2752, 2753, 2754, 2762, 2755, 86, 2764,
+ 3815, 2767, 2768, 2773, 86, 2774, 86, 2765, 3815, 2759,
+ 86, 3815, 86, 3815, 2769, 2761, 2770, 86, 2760, 2766,
+ 2771, 86, 86, 2762, 171, 86, 2764, 86, 2767, 2768,
+ 86, 86, 2774, 2772, 2765, 2775, 2776, 2777, 2778, 2779,
+ 2780, 2769, 3815, 2770, 86, 2781, 2782, 2771, 2785, 86,
+
+ 2783, 86, 86, 86, 2786, 86, 2784, 86, 86, 2787,
+ 2772, 2788, 2775, 2776, 2777, 2778, 2779, 2780, 86, 86,
+ 2789, 86, 2781, 2782, 2790, 86, 2791, 2783, 2792, 2794,
+ 2793, 86, 2795, 2784, 2797, 86, 2787, 2796, 86, 2798,
+ 2801, 2800, 2799, 2803, 86, 86, 86, 2789, 86, 86,
+ 86, 2790, 86, 2804, 2805, 2806, 86, 2793, 86, 2795,
+ 86, 2797, 2802, 86, 2796, 86, 2798, 86, 2800, 2799,
+ 2803, 2807, 86, 2808, 2809, 86, 86, 2811, 86, 2810,
+ 2804, 2805, 86, 2813, 86, 2812, 3815, 2815, 2814, 2802,
+ 3550, 3551, 86, 86, 2819, 86, 2816, 86, 2807, 2820,
+
+ 2808, 2809, 86, 86, 2811, 2822, 2810, 86, 86, 86,
+ 86, 2817, 2812, 2818, 2815, 2814, 2823, 2821, 86, 86,
+ 86, 2819, 86, 2816, 86, 2824, 2820, 86, 2825, 3815,
+ 2826, 2828, 2822, 2827, 2832, 2829, 2833, 2830, 2817, 86,
+ 2818, 2831, 86, 86, 2821, 2835, 86, 86, 86, 2836,
+ 2837, 86, 2824, 2839, 86, 2825, 86, 2826, 2828, 86,
+ 2827, 86, 2829, 2833, 2830, 2834, 2838, 86, 2831, 2840,
+ 2841, 2842, 2835, 2843, 3815, 2852, 86, 2844, 86, 2845,
+ 2839, 86, 86, 86, 86, 86, 2846, 86, 2848, 2854,
+ 2847, 2851, 2834, 2838, 2849, 86, 2840, 2841, 2842, 86,
+
+ 2843, 86, 86, 2850, 2844, 86, 2845, 86, 2853, 2855,
+ 86, 2856, 86, 2846, 86, 2848, 86, 2847, 2851, 2857,
+ 2858, 2849, 2860, 86, 2861, 86, 2859, 86, 86, 86,
+ 2850, 2862, 2864, 86, 2865, 2853, 2855, 86, 86, 2863,
+ 86, 2866, 2867, 2868, 86, 86, 2857, 2858, 3815, 2860,
+ 2869, 2861, 2870, 2859, 86, 2878, 86, 86, 2862, 2864,
+ 2871, 2865, 2872, 2873, 2874, 2876, 2863, 86, 86, 86,
+ 2875, 86, 86, 2877, 2882, 86, 2885, 2869, 86, 2870,
+ 86, 2880, 86, 2881, 2879, 86, 2884, 2871, 86, 2872,
+ 2873, 2874, 2876, 2883, 86, 86, 2887, 2875, 86, 86,
+
+ 2877, 2886, 86, 86, 86, 2891, 86, 2888, 2880, 2892,
+ 2881, 2879, 2893, 2884, 86, 86, 2889, 2890, 2894, 2896,
+ 2883, 86, 2895, 2887, 86, 86, 2898, 2897, 2886, 2900,
+ 2899, 86, 2891, 3815, 2888, 86, 2892, 86, 2901, 86,
+ 86, 86, 86, 2889, 2890, 2894, 2896, 2902, 86, 2895,
+ 2903, 86, 2904, 2898, 2897, 86, 2900, 2899, 2906, 86,
+ 2905, 2907, 86, 2908, 2909, 2901, 2910, 86, 2911, 2912,
+ 3815, 3815, 86, 2913, 2902, 86, 3815, 2903, 2916, 2904,
+ 86, 2915, 2919, 2914, 86, 2906, 2917, 2905, 86, 2918,
+ 2908, 86, 86, 86, 2920, 86, 2912, 86, 86, 2921,
+
+ 2913, 86, 2925, 86, 86, 2916, 2927, 2928, 2915, 2919,
+ 2914, 2922, 86, 2917, 86, 86, 2918, 2923, 86, 2924,
+ 2926, 2920, 2930, 86, 2929, 2932, 2921, 2931, 86, 86,
+ 86, 2935, 2934, 86, 86, 2933, 2936, 2938, 2922, 86,
+ 86, 2937, 86, 86, 2923, 86, 2924, 2926, 86, 86,
+ 86, 2929, 2932, 86, 2931, 2939, 2940, 2943, 2935, 2934,
+ 2941, 86, 2933, 2936, 86, 2942, 2944, 2945, 2937, 86,
+ 2946, 86, 86, 86, 2947, 86, 2948, 3815, 2949, 3815,
+ 86, 2955, 2939, 86, 2943, 3815, 2951, 2941, 2950, 2961,
+ 2952, 171, 2942, 2944, 2945, 2957, 2959, 2946, 86, 86,
+
+ 2953, 2947, 86, 2948, 86, 2949, 86, 2954, 86, 86,
+ 2956, 2958, 86, 2951, 86, 2950, 86, 2952, 86, 86,
+ 2960, 2962, 2957, 2959, 86, 2963, 2966, 2953, 2964, 3815,
+ 2965, 2968, 2969, 2967, 2954, 86, 2970, 2956, 2958, 86,
+ 2972, 2971, 86, 86, 86, 86, 2974, 2960, 86, 86,
+ 86, 86, 2963, 2966, 86, 2964, 86, 2965, 2968, 2969,
+ 2967, 2976, 2973, 2970, 86, 2975, 2978, 2972, 2971, 86,
+ 2977, 2979, 86, 2974, 2980, 86, 2981, 86, 2982, 2984,
+ 86, 2983, 3815, 2986, 86, 2988, 86, 2989, 2976, 2973,
+ 3815, 2985, 2975, 2978, 86, 2987, 86, 2977, 2979, 86,
+
+ 86, 2980, 2990, 2981, 2992, 86, 2984, 2991, 2983, 86,
+ 86, 86, 86, 86, 2989, 2993, 86, 2994, 2985, 2995,
+ 2998, 2996, 2987, 3007, 86, 2997, 86, 86, 86, 2990,
+ 2999, 2992, 86, 86, 2991, 3000, 3001, 3004, 3002, 3005,
+ 3003, 3006, 2993, 86, 2994, 86, 2995, 2998, 2996, 86,
+ 86, 3008, 2997, 3013, 3014, 86, 3815, 2999, 86, 3010,
+ 86, 3009, 86, 86, 3004, 3002, 86, 3003, 86, 3011,
+ 86, 86, 3012, 3022, 3018, 86, 3015, 86, 3008, 3019,
+ 3013, 86, 3016, 86, 3017, 86, 3010, 3020, 3009, 86,
+ 86, 86, 3023, 3021, 86, 86, 3011, 3024, 86, 3012,
+
+ 3022, 3018, 3025, 3015, 3026, 3027, 3019, 3815, 3028, 3016,
+ 3029, 3017, 86, 3815, 3020, 86, 86, 3031, 3033, 86,
+ 3021, 3030, 86, 86, 3024, 86, 3032, 3034, 86, 86,
+ 3035, 3026, 3027, 86, 86, 3028, 3036, 3029, 86, 86,
+ 86, 3037, 3038, 86, 3031, 3033, 3039, 3040, 3030, 3041,
+ 86, 3042, 3044, 3032, 3034, 3043, 3815, 3035, 86, 86,
+ 3045, 3815, 3049, 3036, 86, 3046, 86, 3048, 3037, 3038,
+ 3050, 86, 3047, 86, 3040, 3053, 3041, 86, 86, 3044,
+ 3058, 3051, 3043, 86, 86, 86, 3052, 3045, 86, 3049,
+ 3056, 3059, 3046, 3054, 3048, 86, 3055, 86, 86, 3047,
+
+ 86, 3060, 86, 3057, 86, 3062, 86, 86, 3051, 86,
+ 86, 3061, 3063, 3052, 3064, 3065, 3815, 3056, 3059, 86,
+ 3054, 3066, 86, 3055, 3068, 3069, 3067, 3071, 3060, 3070,
+ 3057, 86, 3062, 3073, 86, 86, 86, 3076, 3061, 86,
+ 86, 3064, 86, 86, 86, 3074, 3083, 3077, 3066, 3072,
+ 3080, 3068, 3069, 3067, 86, 86, 3070, 3075, 3108, 86,
+ 3073, 86, 86, 86, 86, 3078, 3079, 3081, 86, 3082,
+ 3085, 3084, 3074, 86, 3077, 3086, 3072, 3080, 86, 86,
+ 86, 3087, 86, 3088, 3075, 86, 3089, 86, 3091, 3090,
+ 86, 3815, 3078, 3079, 3081, 3094, 3082, 3085, 3084, 86,
+
+ 3093, 3092, 86, 86, 3096, 86, 3099, 86, 3087, 86,
+ 3088, 86, 3095, 3089, 86, 3091, 3090, 3098, 86, 3097,
+ 3100, 3101, 3094, 3103, 86, 3104, 86, 3093, 3092, 86,
+ 3102, 3096, 3105, 86, 3109, 3815, 3110, 3113, 86, 3095,
+ 3106, 86, 3107, 86, 3098, 86, 3097, 86, 3101, 86,
+ 171, 86, 3104, 3111, 86, 3112, 86, 3102, 3114, 3105,
+ 3115, 3109, 86, 3110, 86, 86, 3116, 3106, 3117, 3107,
+ 3118, 3815, 3120, 3122, 86, 3119, 3121, 86, 3123, 3125,
+ 3111, 3124, 3112, 3130, 3127, 86, 86, 3115, 3131, 3126,
+ 3128, 3129, 86, 86, 86, 3117, 86, 86, 86, 3120,
+
+ 3122, 86, 86, 3121, 86, 3132, 3125, 86, 3124, 86,
+ 86, 3127, 3134, 3133, 3135, 86, 3126, 3128, 3129, 3815,
+ 86, 3136, 3137, 3138, 3815, 3139, 3815, 86, 86, 3140,
+ 3143, 3141, 3132, 3142, 86, 3146, 3144, 3145, 86, 86,
+ 3133, 3135, 86, 86, 86, 3148, 86, 86, 3136, 3137,
+ 3138, 86, 3139, 86, 86, 86, 3140, 3143, 3141, 3147,
+ 3142, 86, 3146, 3144, 3145, 3149, 3150, 3151, 86, 3152,
+ 3153, 3156, 3148, 3154, 3155, 86, 3157, 86, 86, 86,
+ 86, 86, 3158, 3159, 3815, 3162, 3147, 86, 3160, 3161,
+ 86, 86, 3149, 3150, 3166, 3164, 3152, 3153, 3156, 86,
+
+ 3154, 3155, 86, 86, 3173, 3163, 86, 86, 3165, 3158,
+ 3159, 86, 3162, 86, 3170, 3160, 3161, 86, 3167, 3168,
+ 86, 86, 3164, 3169, 3171, 3172, 86, 86, 3174, 3176,
+ 86, 86, 3163, 3177, 3175, 3165, 86, 86, 86, 3178,
+ 3179, 3170, 86, 3815, 3182, 3167, 3168, 3180, 3181, 86,
+ 3169, 86, 3172, 3184, 3183, 3185, 3176, 3186, 3815, 86,
+ 86, 3175, 86, 3187, 3188, 86, 86, 3179, 86, 3189,
+ 86, 3182, 86, 3191, 3180, 3181, 3190, 86, 3192, 86,
+ 86, 3183, 3185, 3193, 3186, 86, 3195, 86, 86, 3194,
+ 3187, 3188, 3196, 86, 3197, 3198, 86, 3200, 3199, 86,
+
+ 3191, 3201, 3202, 3190, 3203, 3192, 3205, 3208, 3204, 86,
+ 86, 3206, 3207, 86, 86, 86, 3194, 3211, 86, 86,
+ 86, 86, 3198, 86, 3200, 3199, 86, 86, 86, 3202,
+ 3209, 3203, 3212, 3210, 3208, 3204, 3213, 86, 86, 3207,
+ 86, 3214, 3215, 86, 3211, 3218, 3219, 3216, 3217, 3220,
+ 3221, 3815, 3222, 3223, 3225, 86, 86, 3209, 3224, 86,
+ 3210, 86, 86, 86, 3230, 3229, 86, 3231, 86, 3215,
+ 86, 3228, 86, 3219, 3216, 3217, 3220, 86, 86, 3222,
+ 86, 86, 3226, 3227, 86, 3224, 3232, 3240, 3234, 3233,
+ 86, 86, 86, 3235, 3231, 3236, 86, 86, 3228, 86,
+
+ 3237, 3238, 3239, 3241, 3243, 86, 3245, 86, 86, 3226,
+ 3227, 86, 3242, 3246, 3244, 3247, 3233, 86, 86, 86,
+ 86, 3248, 3236, 86, 3249, 86, 3815, 3237, 3238, 3239,
+ 3241, 86, 3252, 3245, 3256, 86, 86, 86, 3253, 3242,
+ 3246, 3244, 3247, 3250, 3251, 86, 3330, 86, 3248, 3254,
+ 86, 3249, 3263, 86, 86, 3255, 86, 3264, 3261, 3252,
+ 3257, 86, 3260, 3815, 3258, 3253, 86, 3262, 86, 3265,
+ 3250, 3251, 3259, 86, 3266, 86, 3254, 3268, 86, 3269,
+ 3815, 3270, 3255, 3271, 86, 3261, 86, 3257, 86, 3260,
+ 3267, 3258, 3272, 3275, 3262, 3273, 3276, 3815, 86, 3259,
+
+ 3274, 86, 3815, 86, 86, 86, 3269, 86, 3270, 86,
+ 3271, 86, 3277, 86, 3278, 86, 3279, 3267, 86, 3272,
+ 3275, 86, 3273, 3276, 3280, 3281, 3282, 3274, 3284, 86,
+ 3285, 3283, 86, 86, 3287, 86, 3288, 86, 3286, 3277,
+ 3289, 3278, 3290, 3279, 3291, 86, 86, 3292, 86, 86,
+ 3293, 3280, 3281, 3282, 86, 3284, 3295, 3285, 3283, 3296,
+ 3297, 86, 3298, 86, 86, 3286, 3294, 3289, 86, 3290,
+ 3299, 86, 86, 3300, 3292, 86, 3301, 3293, 3302, 86,
+ 3303, 3304, 3306, 86, 86, 3307, 3296, 86, 3308, 3298,
+ 3311, 86, 3305, 3294, 86, 3309, 3310, 86, 86, 86,
+
+ 3300, 86, 3312, 3301, 86, 86, 86, 3303, 3304, 86,
+ 3316, 86, 86, 86, 86, 3308, 3314, 3311, 3313, 3305,
+ 3317, 3315, 3309, 3310, 86, 86, 3318, 3319, 3320, 3312,
+ 3321, 3322, 3323, 3324, 3325, 3327, 86, 3316, 86, 86,
+ 3328, 3331, 3326, 3336, 86, 3313, 86, 3317, 86, 86,
+ 86, 86, 3329, 3318, 3319, 3320, 86, 86, 3322, 86,
+ 3324, 3325, 86, 3332, 3333, 86, 3334, 86, 3331, 3326,
+ 86, 3335, 3337, 3339, 3338, 86, 3815, 3348, 86, 3329,
+ 86, 3340, 3815, 3341, 86, 3343, 86, 86, 3342, 3345,
+ 3332, 3333, 3349, 3334, 3350, 86, 3815, 3344, 3335, 3337,
+
+ 3339, 3338, 86, 86, 86, 3351, 86, 86, 3340, 86,
+ 3341, 86, 3343, 3815, 3346, 3342, 3345, 3347, 3352, 86,
+ 3353, 86, 3355, 86, 3344, 86, 3354, 3815, 86, 3356,
+ 3357, 3358, 3351, 3359, 3360, 3364, 3365, 3361, 86, 3366,
+ 86, 3346, 86, 86, 3347, 3352, 3362, 3353, 86, 86,
+ 3363, 86, 86, 3354, 86, 3367, 3356, 3357, 86, 86,
+ 3359, 3360, 3368, 3365, 3361, 3369, 86, 86, 86, 3370,
+ 3375, 3371, 3815, 3362, 3372, 3380, 3373, 3363, 86, 86,
+ 3376, 3379, 3367, 3374, 86, 3377, 86, 86, 86, 3368,
+ 86, 3378, 3369, 86, 86, 86, 3370, 86, 3371, 86,
+
+ 3381, 3372, 3380, 3373, 86, 86, 3382, 3376, 3379, 3383,
+ 3374, 86, 3377, 3384, 86, 3385, 3386, 3389, 3378, 3387,
+ 3388, 3391, 86, 86, 3390, 86, 86, 3381, 86, 3392,
+ 3398, 3393, 3394, 3382, 3397, 86, 3383, 3395, 86, 86,
+ 3384, 3396, 3385, 3386, 3389, 86, 3387, 3388, 86, 3399,
+ 3401, 3390, 3402, 3400, 86, 86, 86, 86, 3393, 86,
+ 3403, 3397, 3404, 86, 86, 3407, 3406, 3405, 3396, 3411,
+ 3410, 86, 3409, 86, 3408, 3815, 86, 86, 86, 3402,
+ 3400, 86, 3412, 3413, 86, 3414, 3418, 3403, 86, 3404,
+ 86, 86, 86, 3406, 3405, 3415, 3411, 3416, 3417, 3409,
+
+ 3419, 3408, 86, 3421, 3422, 86, 3425, 86, 86, 86,
+ 3413, 86, 3414, 86, 3420, 3423, 3424, 86, 3426, 3429,
+ 86, 86, 3415, 3428, 3416, 3417, 86, 3427, 3431, 3432,
+ 86, 3422, 86, 86, 3434, 86, 3438, 3436, 3430, 86,
+ 3435, 3420, 3423, 3424, 86, 86, 86, 86, 86, 3439,
+ 3428, 3433, 86, 3437, 3427, 3431, 3432, 3440, 86, 3441,
+ 86, 86, 3442, 86, 3436, 3430, 86, 3435, 3444, 3445,
+ 3443, 3446, 3447, 3448, 3815, 86, 3439, 3451, 3433, 3453,
+ 3437, 86, 3449, 86, 3440, 86, 3441, 86, 86, 3442,
+ 3450, 86, 3452, 3454, 3457, 3444, 86, 3443, 86, 3447,
+
+ 3458, 86, 3462, 3466, 86, 86, 3453, 3459, 3465, 3449,
+ 3455, 3456, 86, 3467, 86, 86, 86, 3450, 3461, 3452,
+ 86, 86, 3460, 3463, 86, 86, 86, 3458, 3464, 86,
+ 86, 86, 86, 3468, 3459, 3465, 3469, 3455, 3456, 86,
+ 86, 3470, 3471, 3472, 3473, 3461, 3474, 3475, 3476, 3460,
+ 3463, 3481, 3477, 3479, 86, 3464, 3478, 86, 86, 3480,
+ 86, 3482, 3483, 3469, 86, 86, 86, 3484, 3470, 3471,
+ 86, 86, 86, 86, 3475, 86, 3485, 3486, 86, 3477,
+ 3490, 86, 86, 3478, 86, 86, 3480, 3487, 3482, 86,
+ 3488, 3489, 86, 3491, 86, 3494, 86, 3493, 86, 3492,
+
+ 86, 3496, 3495, 3485, 3486, 86, 86, 3490, 86, 86,
+ 3497, 3498, 3499, 3501, 3487, 3506, 3500, 3488, 3489, 86,
+ 86, 86, 3494, 3502, 3493, 86, 3492, 3504, 3496, 3495,
+ 86, 3505, 3503, 3507, 3508, 86, 3815, 86, 86, 3499,
+ 86, 3509, 3506, 3500, 3510, 86, 3511, 3512, 3513, 86,
+ 3502, 3815, 3514, 86, 3504, 3515, 3815, 86, 3505, 3503,
+ 86, 86, 86, 86, 3516, 3518, 3517, 86, 3509, 3519,
+ 3521, 3510, 86, 3520, 3512, 3513, 86, 86, 86, 86,
+ 3522, 3524, 3515, 3523, 3531, 86, 3535, 86, 86, 86,
+ 86, 3516, 3518, 3517, 3527, 86, 3519, 3521, 3525, 3526,
+
+ 3520, 86, 86, 86, 3528, 86, 86, 3522, 3524, 3815,
+ 3523, 3531, 3529, 3530, 3532, 86, 3533, 3534, 86, 3539,
+ 3536, 3527, 86, 3537, 86, 3525, 3526, 3538, 3540, 3541,
+ 86, 3528, 3544, 86, 3542, 3547, 86, 3543, 86, 3529,
+ 3530, 3532, 86, 3533, 3534, 3545, 3539, 3536, 3549, 86,
+ 3537, 86, 3546, 3548, 3538, 86, 86, 86, 3554, 86,
+ 86, 3542, 86, 3557, 3543, 86, 3558, 86, 3552, 3553,
+ 3555, 3556, 3545, 3559, 3560, 86, 3562, 3563, 3561, 3546,
+ 3548, 3564, 3568, 3815, 3815, 86, 86, 86, 86, 86,
+ 3557, 86, 3567, 3558, 3571, 3565, 86, 86, 3572, 86,
+
+ 3559, 86, 86, 3562, 86, 3561, 3566, 86, 3564, 86,
+ 3570, 3569, 3573, 86, 86, 3575, 3574, 86, 86, 3567,
+ 86, 3571, 3565, 3576, 3577, 3572, 3578, 86, 3580, 3579,
+ 3581, 3582, 86, 3566, 86, 86, 3583, 3570, 3569, 3573,
+ 3584, 3585, 3575, 3574, 3586, 3589, 86, 86, 86, 3591,
+ 3576, 3577, 3593, 86, 86, 3580, 3579, 86, 86, 86,
+ 3587, 86, 86, 3583, 3590, 3588, 86, 3584, 3585, 3592,
+ 3595, 3586, 3594, 3596, 86, 86, 3591, 86, 86, 3593,
+ 3597, 3598, 3599, 3600, 3602, 3815, 3601, 3603, 3604, 3605,
+ 3608, 3590, 86, 3609, 86, 3607, 3592, 3595, 86, 3594,
+
+ 86, 86, 86, 3606, 86, 3610, 86, 3611, 3598, 86,
+ 86, 3602, 86, 3601, 86, 3604, 86, 86, 3612, 3613,
+ 86, 86, 3607, 3614, 3615, 3616, 86, 3618, 3619, 3617,
+ 3606, 3620, 86, 3621, 86, 3622, 3624, 3626, 3815, 3815,
+ 3631, 3623, 86, 3630, 3815, 86, 86, 86, 86, 86,
+ 86, 86, 3616, 86, 86, 86, 3617, 3625, 3620, 3627,
+ 3621, 3628, 3622, 86, 86, 86, 3629, 86, 3623, 86,
+ 3630, 86, 3633, 3632, 3634, 86, 3636, 86, 3635, 3815,
+ 3637, 86, 3638, 86, 3625, 86, 3627, 3639, 3628, 3640,
+ 3642, 86, 3815, 3629, 3815, 3641, 3643, 3815, 3647, 86,
+
+ 3632, 3634, 86, 3636, 86, 3635, 86, 3637, 86, 3638,
+ 3644, 86, 86, 3645, 3639, 3646, 86, 3642, 3648, 86,
+ 3649, 86, 3641, 3643, 86, 3647, 3650, 3651, 86, 3653,
+ 3815, 3652, 86, 3654, 3655, 3656, 86, 3644, 86, 3657,
+ 3645, 86, 3646, 3658, 3659, 3648, 3660, 3649, 86, 3661,
+ 86, 86, 86, 3650, 3651, 3662, 3653, 86, 3652, 3665,
+ 3654, 3655, 86, 86, 3664, 3663, 86, 86, 3666, 3815,
+ 86, 86, 86, 3660, 3667, 3668, 3661, 86, 86, 3670,
+ 3671, 3669, 3662, 3675, 86, 86, 3665, 3674, 3815, 3672,
+ 3673, 3664, 3663, 86, 86, 3666, 86, 86, 86, 86,
+
+ 86, 3667, 3668, 3676, 3677, 86, 3670, 3671, 3669, 3678,
+ 3675, 3679, 3680, 3681, 3674, 86, 3672, 3673, 86, 3682,
+ 3684, 3683, 86, 3686, 86, 3685, 3689, 3688, 86, 86,
+ 3676, 3677, 86, 86, 86, 3691, 3678, 3692, 3679, 3680,
+ 3681, 86, 3687, 3690, 3693, 86, 3682, 86, 3683, 3694,
+ 3686, 3695, 3685, 86, 3688, 86, 3697, 3698, 3696, 86,
+ 3699, 86, 86, 86, 3692, 86, 3700, 3702, 86, 3687,
+ 3690, 86, 3815, 3705, 3701, 3703, 86, 3704, 3695, 86,
+ 86, 3706, 86, 3697, 3698, 3696, 86, 3699, 86, 3707,
+ 3708, 3709, 86, 3700, 3710, 86, 86, 3711, 3712, 86,
+
+ 3705, 3701, 3703, 3713, 3704, 3714, 3716, 3715, 86, 3717,
+ 86, 86, 3718, 3721, 3722, 86, 3707, 86, 86, 86,
+ 3720, 86, 3719, 3724, 86, 3712, 3726, 3723, 86, 3727,
+ 3713, 3728, 86, 3716, 3715, 3725, 86, 86, 86, 3718,
+ 86, 86, 3731, 86, 3732, 86, 86, 3720, 86, 3719,
+ 3724, 3729, 3730, 3726, 3723, 86, 86, 86, 86, 86,
+ 3734, 3733, 3725, 3736, 3735, 3738, 3737, 86, 86, 3731,
+ 3815, 3732, 86, 86, 3739, 3740, 3741, 86, 3729, 3730,
+ 86, 3744, 86, 3745, 3746, 3743, 3747, 3734, 3733, 86,
+ 3736, 3735, 3738, 3737, 86, 3748, 86, 86, 3742, 3815,
+
+ 3753, 3739, 3740, 86, 3749, 86, 86, 3750, 3744, 3752,
+ 86, 3746, 3743, 3751, 3754, 3755, 3756, 86, 86, 3815,
+ 3758, 86, 3748, 3757, 3759, 3742, 86, 3762, 86, 86,
+ 3760, 3749, 86, 3766, 3750, 86, 3752, 86, 86, 3765,
+ 3751, 86, 3755, 86, 86, 3761, 86, 3758, 3763, 3764,
+ 3757, 3759, 3767, 86, 3770, 3768, 86, 3760, 3769, 86,
+ 86, 3771, 86, 86, 3772, 86, 3765, 3773, 3774, 86,
+ 86, 3777, 3761, 3775, 3815, 3763, 3764, 3815, 86, 3767,
+ 86, 3770, 3768, 3776, 86, 3769, 3779, 86, 3771, 3780,
+ 86, 3772, 3781, 86, 3773, 3774, 3778, 86, 3777, 3783,
+
+ 3775, 3782, 3784, 3785, 86, 3787, 3786, 86, 3815, 3793,
+ 3776, 3815, 86, 3779, 86, 86, 3780, 3788, 3789, 3781,
+ 3791, 86, 3815, 3778, 3795, 86, 3783, 3790, 3782, 86,
+ 3785, 86, 86, 3786, 3796, 86, 86, 86, 86, 3799,
+ 3792, 3794, 86, 3800, 3788, 3789, 86, 3791, 86, 86,
+ 3797, 3795, 3798, 3804, 3790, 3801, 86, 3803, 86, 3806,
+ 86, 3796, 3815, 86, 3802, 86, 3799, 3792, 3794, 3805,
+ 86, 3807, 86, 3808, 3813, 3809, 3815, 3797, 3814, 3798,
+ 86, 3810, 3801, 86, 3803, 3815, 86, 3811, 3815, 86,
+ 3815, 3802, 3815, 86, 3815, 86, 3805, 86, 86, 3812,
+
+ 3808, 86, 3809, 86, 3815, 86, 3815, 86, 3810, 3815,
+ 3815, 3815, 3815, 3815, 3811, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3812, 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, 3815, 89,
+ 89, 89, 89, 161, 161, 3815, 3815, 3815, 161, 161,
+ 163, 163, 3815, 3815, 163, 3815, 163, 165, 3815, 3815,
+
+ 3815, 3815, 3815, 165, 168, 168, 3815, 3815, 3815, 168,
+ 168, 170, 3815, 3815, 3815, 3815, 3815, 170, 172, 172,
+ 3815, 172, 172, 172, 172, 175, 3815, 3815, 3815, 3815,
+ 3815, 175, 178, 178, 3815, 3815, 3815, 178, 178, 90,
+ 90, 3815, 90, 90, 90, 90, 17, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815
+ } ;
+
+static const flex_int16_t yy_chk[10914] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 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, 3, 3, 3, 4,
+ 4, 4, 5, 5, 6, 6, 5, 32, 6, 7,
+ 7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
+ 8, 9, 9, 9, 10, 10, 10, 19, 51, 51,
+
+ 3823, 19, 233, 3, 32, 33, 4, 67, 67, 5,
+ 33, 6, 3103, 13, 13, 13, 13, 7, 13, 14,
+ 14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
+ 233, 10, 11, 11, 11, 11, 11, 11, 12, 12,
+ 12, 12, 12, 12, 16, 16, 16, 34, 28, 84,
+ 84, 13, 11, 45, 1199, 25, 25, 14, 12, 34,
+ 39, 23, 15, 23, 23, 45, 23, 178, 28, 603,
+ 11, 28, 23, 39, 34, 28, 12, 302, 87, 11,
+ 45, 16, 87, 162, 162, 12, 30, 39, 29, 177,
+ 56, 175, 37, 56, 30, 28, 26, 603, 37, 23,
+
+ 24, 24, 29, 26, 24, 30, 302, 26, 100, 24,
+ 26, 24, 30, 30, 29, 29, 92, 100, 24, 37,
+ 72, 30, 26, 26, 24, 169, 169, 24, 24, 29,
+ 26, 24, 30, 72, 26, 100, 24, 26, 24, 62,
+ 92, 62, 62, 92, 62, 24, 27, 72, 31, 170,
+ 27, 31, 94, 27, 95, 27, 27, 198, 31, 46,
+ 31, 46, 46, 223, 46, 226, 27, 168, 27, 95,
+ 46, 31, 94, 27, 167, 31, 35, 27, 31, 94,
+ 27, 95, 27, 27, 35, 31, 93, 31, 36, 198,
+ 35, 97, 36, 27, 35, 223, 44, 226, 97, 42,
+
+ 44, 42, 35, 35, 44, 98, 36, 165, 36, 93,
+ 42, 35, 163, 93, 36, 36, 42, 35, 97, 36,
+ 161, 35, 44, 44, 43, 42, 42, 44, 42, 98,
+ 351, 44, 98, 36, 43, 36, 38, 42, 43, 43,
+ 38, 96, 164, 42, 38, 164, 85, 43, 80, 96,
+ 38, 43, 70, 38, 70, 70, 101, 70, 138, 351,
+ 38, 43, 38, 38, 105, 43, 43, 38, 96, 105,
+ 73, 38, 73, 73, 101, 73, 79, 38, 79, 79,
+ 38, 79, 75, 101, 138, 138, 99, 38, 40, 106,
+ 70, 105, 40, 86, 108, 86, 86, 106, 86, 99,
+
+ 126, 150, 40, 40, 86, 40, 89, 108, 89, 89,
+ 99, 89, 150, 99, 40, 40, 106, 89, 74, 40,
+ 126, 108, 102, 102, 107, 228, 99, 126, 150, 40,
+ 40, 103, 40, 41, 110, 102, 41, 103, 117, 103,
+ 68, 110, 107, 41, 89, 104, 104, 41, 41, 102,
+ 102, 117, 103, 112, 104, 41, 107, 228, 103, 109,
+ 41, 110, 112, 41, 103, 117, 103, 114, 109, 107,
+ 41, 116, 104, 104, 41, 41, 111, 111, 113, 125,
+ 112, 109, 115, 119, 111, 1023, 109, 113, 63, 115,
+ 114, 58, 111, 116, 114, 109, 118, 121, 116, 118,
+
+ 120, 124, 125, 111, 111, 113, 125, 119, 120, 115,
+ 57, 111, 118, 118, 124, 119, 1023, 121, 122, 121,
+ 118, 128, 122, 118, 121, 123, 118, 120, 124, 127,
+ 123, 132, 129, 123, 119, 52, 127, 130, 122, 118,
+ 118, 128, 122, 127, 121, 122, 131, 134, 128, 122,
+ 129, 130, 123, 131, 132, 47, 127, 123, 132, 129,
+ 133, 1187, 135, 127, 130, 122, 18, 141, 136, 133,
+ 134, 135, 136, 131, 134, 137, 139, 140, 136, 141,
+ 142, 142, 137, 139, 145, 143, 140, 133, 146, 135,
+ 136, 1187, 140, 143, 141, 136, 146, 153, 145, 136,
+
+ 140, 147, 137, 139, 140, 136, 144, 142, 153, 148,
+ 151, 145, 143, 140, 149, 17, 147, 144, 151, 140,
+ 146, 144, 154, 146, 153, 149, 148, 155, 147, 148,
+ 144, 154, 152, 144, 149, 148, 148, 151, 152, 156,
+ 157, 149, 155, 154, 144, 0, 159, 154, 144, 154,
+ 160, 158, 149, 148, 155, 157, 148, 0, 154, 152,
+ 158, 156, 0, 160, 0, 174, 156, 157, 159, 166,
+ 154, 166, 166, 159, 166, 179, 179, 160, 158, 171,
+ 180, 171, 171, 172, 171, 172, 172, 181, 172, 174,
+ 182, 176, 174, 176, 176, 0, 176, 183, 186, 182,
+
+ 184, 181, 180, 185, 184, 188, 189, 180, 191, 183,
+ 185, 0, 187, 188, 186, 191, 190, 182, 189, 181,
+ 192, 172, 185, 193, 183, 186, 196, 184, 181, 197,
+ 185, 187, 188, 189, 194, 191, 192, 185, 190, 187,
+ 194, 193, 195, 190, 195, 201, 202, 192, 196, 212,
+ 193, 204, 203, 196, 199, 197, 197, 203, 199, 204,
+ 212, 202, 207, 208, 205, 206, 194, 194, 209, 195,
+ 208, 201, 201, 202, 210, 199, 212, 207, 204, 0,
+ 213, 0, 199, 211, 203, 199, 205, 206, 0, 207,
+ 208, 205, 206, 213, 214, 216, 209, 210, 0, 231,
+
+ 209, 210, 199, 200, 216, 211, 214, 213, 200, 215,
+ 211, 217, 215, 200, 0, 218, 0, 222, 221, 200,
+ 200, 214, 216, 209, 215, 221, 200, 220, 222, 224,
+ 200, 231, 225, 217, 227, 200, 215, 218, 217, 215,
+ 200, 227, 218, 225, 222, 221, 200, 200, 219, 220,
+ 232, 219, 229, 219, 220, 224, 224, 0, 234, 235,
+ 0, 227, 230, 236, 225, 219, 229, 219, 230, 238,
+ 225, 237, 232, 239, 219, 219, 237, 232, 219, 0,
+ 219, 240, 235, 0, 229, 242, 235, 239, 244, 230,
+ 234, 244, 219, 229, 219, 236, 237, 241, 237, 245,
+
+ 239, 238, 240, 237, 241, 243, 242, 246, 240, 247,
+ 248, 249, 242, 251, 243, 244, 250, 252, 245, 243,
+ 251, 246, 252, 249, 241, 253, 245, 250, 248, 257,
+ 254, 247, 243, 255, 246, 260, 247, 248, 249, 254,
+ 251, 243, 259, 250, 261, 256, 262, 253, 0, 252,
+ 256, 261, 253, 258, 258, 264, 255, 254, 259, 263,
+ 255, 257, 258, 264, 266, 265, 267, 260, 262, 259,
+ 268, 261, 256, 262, 269, 270, 271, 273, 268, 0,
+ 258, 258, 264, 272, 263, 265, 263, 275, 274, 271,
+ 270, 276, 265, 0, 0, 277, 266, 268, 267, 277,
+
+ 279, 278, 270, 271, 273, 280, 269, 281, 276, 272,
+ 272, 274, 0, 280, 282, 279, 276, 283, 276, 275,
+ 274, 282, 277, 278, 285, 284, 281, 279, 278, 284,
+ 286, 287, 280, 288, 281, 276, 290, 289, 274, 283,
+ 292, 282, 291, 294, 283, 295, 285, 293, 297, 298,
+ 297, 285, 284, 292, 291, 288, 293, 296, 295, 289,
+ 288, 294, 286, 287, 289, 299, 300, 292, 290, 291,
+ 294, 301, 295, 303, 293, 297, 296, 304, 0, 305,
+ 312, 298, 303, 306, 296, 307, 309, 0, 312, 299,
+ 308, 300, 299, 300, 306, 314, 0, 301, 301, 307,
+
+ 303, 310, 311, 304, 304, 305, 305, 312, 315, 309,
+ 306, 307, 307, 309, 308, 316, 317, 308, 318, 310,
+ 311, 315, 319, 322, 323, 320, 307, 314, 310, 311,
+ 324, 321, 326, 325, 0, 315, 328, 324, 326, 319,
+ 327, 317, 325, 317, 329, 319, 331, 316, 323, 319,
+ 318, 320, 320, 321, 327, 322, 323, 324, 321, 326,
+ 325, 330, 328, 328, 332, 333, 319, 327, 329, 331,
+ 330, 329, 332, 331, 333, 323, 334, 335, 338, 337,
+ 340, 336, 0, 0, 0, 339, 335, 343, 330, 346,
+ 371, 332, 333, 342, 337, 340, 343, 344, 336, 0,
+
+ 353, 347, 334, 334, 335, 336, 337, 340, 336, 339,
+ 338, 342, 339, 346, 343, 347, 346, 348, 350, 344,
+ 342, 352, 371, 350, 344, 336, 341, 353, 347, 349,
+ 349, 341, 348, 354, 341, 355, 354, 0, 360, 341,
+ 341, 341, 341, 354, 348, 352, 0, 355, 352, 341,
+ 350, 0, 356, 341, 349, 361, 349, 349, 341, 0,
+ 354, 341, 355, 354, 356, 360, 341, 341, 341, 341,
+ 345, 358, 345, 357, 357, 359, 0, 361, 362, 356,
+ 363, 367, 361, 357, 345, 345, 345, 366, 345, 358,
+ 364, 365, 364, 359, 345, 0, 367, 345, 358, 345,
+
+ 357, 357, 359, 365, 362, 362, 363, 363, 367, 366,
+ 370, 345, 345, 345, 366, 345, 368, 364, 365, 369,
+ 376, 372, 370, 372, 368, 0, 369, 374, 0, 375,
+ 0, 377, 372, 0, 374, 378, 379, 370, 379, 372,
+ 381, 378, 380, 368, 384, 0, 369, 372, 372, 383,
+ 372, 375, 376, 377, 374, 380, 375, 378, 377, 372,
+ 379, 382, 378, 379, 385, 379, 372, 383, 378, 380,
+ 384, 384, 381, 386, 382, 387, 383, 382, 0, 382,
+ 0, 391, 401, 390, 0, 382, 392, 401, 382, 408,
+ 390, 393, 0, 410, 410, 0, 385, 387, 392, 391,
+
+ 386, 382, 387, 393, 382, 391, 382, 388, 391, 388,
+ 390, 399, 394, 392, 401, 388, 396, 397, 393, 388,
+ 410, 408, 403, 399, 388, 394, 391, 388, 403, 400,
+ 397, 421, 396, 388, 388, 0, 388, 0, 399, 394,
+ 396, 0, 388, 396, 397, 402, 388, 400, 0, 403,
+ 0, 388, 402, 404, 388, 389, 400, 389, 406, 396,
+ 407, 404, 405, 421, 411, 0, 402, 422, 407, 409,
+ 389, 411, 402, 389, 405, 389, 406, 389, 409, 402,
+ 404, 389, 389, 415, 389, 406, 412, 407, 0, 405,
+ 415, 411, 413, 422, 422, 0, 409, 389, 0, 412,
+
+ 389, 413, 389, 0, 389, 398, 398, 414, 417, 418,
+ 415, 420, 424, 412, 416, 398, 398, 398, 398, 398,
+ 417, 416, 398, 420, 413, 414, 419, 424, 413, 414,
+ 398, 418, 398, 398, 414, 417, 418, 425, 420, 424,
+ 423, 416, 398, 398, 398, 398, 398, 423, 419, 398,
+ 425, 426, 414, 419, 427, 428, 427, 429, 430, 430,
+ 0, 431, 432, 433, 425, 434, 428, 423, 431, 432,
+ 436, 437, 435, 0, 433, 0, 434, 0, 441, 429,
+ 439, 427, 428, 426, 429, 435, 0, 430, 431, 432,
+ 433, 799, 434, 437, 440, 436, 443, 436, 437, 435,
+
+ 438, 438, 442, 439, 441, 441, 445, 439, 443, 440,
+ 442, 444, 452, 446, 449, 445, 450, 440, 438, 454,
+ 799, 440, 444, 443, 467, 438, 446, 438, 438, 442,
+ 447, 447, 451, 445, 450, 452, 440, 453, 444, 452,
+ 446, 455, 447, 450, 447, 438, 449, 455, 459, 447,
+ 458, 454, 456, 0, 451, 453, 467, 447, 447, 451,
+ 457, 0, 0, 0, 453, 461, 463, 0, 455, 447,
+ 459, 447, 448, 456, 458, 459, 462, 458, 464, 456,
+ 448, 448, 460, 457, 448, 448, 470, 457, 448, 460,
+ 462, 461, 461, 463, 448, 466, 465, 468, 470, 448,
+
+ 464, 0, 469, 462, 472, 464, 473, 448, 448, 460,
+ 465, 448, 448, 470, 471, 448, 0, 475, 479, 468,
+ 471, 466, 466, 465, 468, 469, 472, 474, 473, 469,
+ 476, 472, 475, 473, 477, 474, 478, 476, 481, 586,
+ 480, 471, 479, 477, 475, 479, 480, 482, 483, 484,
+ 486, 478, 485, 474, 474, 488, 491, 476, 492, 0,
+ 481, 477, 474, 478, 484, 481, 586, 480, 489, 482,
+ 0, 483, 486, 489, 482, 483, 484, 486, 485, 485,
+ 487, 488, 488, 494, 492, 492, 487, 495, 491, 494,
+ 496, 497, 498, 499, 500, 489, 496, 501, 498, 504,
+
+ 506, 500, 503, 527, 503, 508, 495, 487, 504, 497,
+ 494, 503, 501, 527, 495, 499, 505, 496, 497, 498,
+ 499, 500, 507, 505, 501, 510, 504, 509, 511, 503,
+ 527, 503, 506, 512, 515, 507, 516, 508, 514, 513,
+ 518, 517, 513, 505, 519, 509, 512, 515, 516, 507,
+ 511, 519, 520, 0, 509, 511, 523, 510, 513, 517,
+ 512, 515, 514, 516, 521, 514, 513, 522, 517, 513,
+ 524, 519, 518, 0, 529, 524, 520, 526, 523, 520,
+ 522, 528, 525, 523, 530, 532, 529, 521, 525, 537,
+ 0, 531, 539, 532, 522, 537, 521, 524, 536, 533,
+
+ 526, 529, 531, 528, 526, 536, 530, 0, 528, 525,
+ 538, 530, 532, 533, 521, 539, 537, 541, 531, 539,
+ 540, 0, 538, 554, 542, 536, 533, 534, 540, 0,
+ 554, 0, 534, 543, 534, 542, 545, 538, 547, 541,
+ 534, 547, 534, 0, 541, 534, 534, 540, 545, 547,
+ 554, 542, 534, 534, 534, 546, 543, 0, 544, 534,
+ 543, 534, 544, 545, 549, 547, 548, 534, 547, 534,
+ 551, 550, 534, 534, 549, 546, 552, 546, 555, 534,
+ 544, 551, 546, 550, 548, 544, 553, 0, 557, 544,
+ 553, 559, 556, 548, 556, 558, 549, 551, 550, 560,
+
+ 552, 549, 546, 552, 555, 555, 559, 558, 561, 562,
+ 564, 560, 565, 553, 557, 557, 563, 562, 559, 556,
+ 566, 563, 558, 568, 570, 571, 560, 573, 566, 567,
+ 565, 572, 564, 575, 561, 561, 562, 564, 574, 565,
+ 578, 567, 570, 563, 568, 575, 0, 566, 571, 576,
+ 568, 570, 571, 574, 572, 577, 567, 576, 572, 573,
+ 575, 579, 580, 581, 582, 574, 584, 583, 577, 584,
+ 587, 580, 578, 579, 589, 0, 576, 585, 582, 590,
+ 588, 592, 577, 591, 0, 594, 581, 593, 579, 580,
+ 581, 582, 583, 584, 583, 588, 585, 594, 591, 595,
+
+ 593, 596, 587, 600, 585, 592, 589, 588, 592, 597,
+ 591, 590, 594, 598, 593, 599, 597, 600, 601, 597,
+ 599, 595, 602, 604, 598, 596, 595, 597, 596, 605,
+ 600, 606, 607, 608, 615, 609, 597, 0, 608, 611,
+ 598, 613, 610, 597, 609, 601, 597, 599, 610, 602,
+ 612, 614, 616, 615, 611, 604, 605, 621, 606, 614,
+ 617, 615, 609, 613, 607, 608, 611, 618, 613, 610,
+ 620, 618, 619, 623, 612, 624, 616, 612, 614, 616,
+ 619, 622, 617, 625, 624, 626, 629, 617, 622, 621,
+ 627, 628, 629, 620, 618, 634, 623, 620, 626, 619,
+
+ 623, 630, 624, 628, 632, 625, 631, 635, 622, 636,
+ 625, 0, 626, 629, 631, 632, 627, 627, 628, 633,
+ 0, 639, 636, 630, 0, 645, 633, 634, 630, 635,
+ 637, 632, 638, 631, 635, 637, 636, 645, 637, 637,
+ 640, 638, 641, 644, 647, 0, 633, 639, 639, 640,
+ 642, 643, 645, 641, 637, 0, 644, 637, 649, 638,
+ 0, 648, 637, 651, 650, 637, 637, 640, 653, 641,
+ 644, 651, 642, 643, 652, 654, 647, 642, 643, 648,
+ 656, 659, 649, 655, 657, 649, 650, 650, 648, 656,
+ 651, 650, 653, 660, 655, 653, 652, 654, 658, 661,
+
+ 660, 652, 654, 659, 657, 662, 663, 656, 659, 664,
+ 655, 657, 658, 650, 663, 665, 666, 667, 670, 668,
+ 660, 665, 0, 662, 669, 658, 661, 671, 667, 666,
+ 676, 664, 662, 663, 672, 675, 664, 668, 674, 669,
+ 673, 673, 665, 666, 667, 680, 668, 677, 671, 674,
+ 670, 669, 676, 678, 671, 679, 677, 676, 672, 675,
+ 682, 672, 675, 681, 683, 674, 678, 680, 679, 673,
+ 684, 681, 680, 685, 677, 693, 686, 687, 686, 689,
+ 678, 690, 679, 688, 689, 702, 683, 691, 694, 0,
+ 681, 683, 682, 0, 688, 690, 694, 685, 692, 687,
+
+ 685, 691, 684, 686, 687, 692, 695, 693, 690, 696,
+ 688, 689, 692, 692, 691, 694, 697, 702, 698, 703,
+ 692, 699, 700, 697, 695, 692, 706, 707, 0, 707,
+ 0, 696, 692, 695, 703, 701, 696, 0, 708, 692,
+ 692, 699, 700, 697, 698, 698, 703, 704, 699, 700,
+ 701, 705, 706, 706, 707, 710, 705, 704, 709, 701,
+ 715, 711, 701, 708, 712, 708, 709, 711, 715, 704,
+ 713, 716, 714, 712, 704, 717, 719, 701, 716, 713,
+ 710, 714, 710, 705, 704, 709, 718, 715, 711, 720,
+ 721, 712, 723, 726, 719, 722, 724, 713, 716, 714,
+
+ 723, 720, 721, 719, 722, 724, 725, 717, 727, 718,
+ 0, 728, 729, 718, 733, 727, 720, 721, 725, 723,
+ 724, 730, 722, 724, 728, 726, 0, 729, 731, 730,
+ 0, 734, 724, 725, 731, 727, 732, 733, 728, 729,
+ 734, 733, 735, 736, 732, 737, 737, 0, 730, 738,
+ 0, 739, 736, 735, 737, 731, 743, 738, 734, 739,
+ 740, 741, 744, 732, 742, 746, 0, 747, 0, 735,
+ 736, 748, 737, 737, 741, 744, 738, 745, 739, 743,
+ 747, 746, 740, 743, 749, 745, 751, 740, 741, 744,
+ 742, 742, 746, 748, 747, 749, 752, 750, 748, 753,
+
+ 751, 760, 754, 755, 745, 750, 755, 759, 758, 756,
+ 757, 749, 761, 751, 764, 762, 752, 758, 765, 760,
+ 766, 753, 754, 752, 750, 761, 753, 759, 760, 754,
+ 755, 756, 757, 762, 759, 758, 756, 757, 763, 761,
+ 765, 767, 762, 768, 766, 765, 764, 766, 769, 770,
+ 771, 773, 774, 763, 772, 776, 768, 773, 777, 0,
+ 776, 770, 781, 775, 767, 763, 769, 772, 767, 0,
+ 768, 775, 784, 778, 771, 769, 770, 771, 773, 774,
+ 777, 772, 785, 0, 780, 777, 783, 776, 782, 775,
+ 775, 778, 780, 783, 781, 784, 782, 785, 775, 784,
+
+ 778, 786, 788, 786, 789, 787, 790, 0, 791, 785,
+ 792, 780, 792, 783, 787, 782, 809, 791, 793, 0,
+ 800, 803, 817, 789, 796, 793, 790, 809, 786, 0,
+ 800, 789, 787, 790, 788, 791, 796, 792, 804, 803,
+ 807, 813, 808, 809, 0, 793, 794, 800, 803, 794,
+ 806, 796, 810, 794, 817, 806, 794, 813, 811, 804,
+ 808, 807, 812, 794, 794, 804, 794, 807, 813, 808,
+ 820, 794, 814, 794, 815, 810, 794, 806, 0, 810,
+ 794, 814, 857, 794, 811, 811, 823, 815, 812, 812,
+ 794, 794, 820, 794, 821, 816, 0, 820, 819, 814,
+
+ 821, 815, 816, 822, 824, 819, 826, 824, 0, 823,
+ 827, 0, 822, 823, 857, 0, 0, 828, 827, 825,
+ 829, 821, 816, 818, 818, 819, 818, 0, 826, 818,
+ 822, 824, 829, 826, 818, 825, 830, 827, 830, 828,
+ 818, 818, 825, 818, 828, 831, 825, 829, 835, 818,
+ 818, 818, 832, 818, 833, 836, 818, 832, 0, 834,
+ 835, 818, 825, 830, 837, 838, 840, 818, 818, 831,
+ 818, 839, 831, 841, 833, 835, 842, 836, 0, 843,
+ 0, 833, 836, 863, 832, 834, 834, 838, 840, 844,
+ 837, 837, 838, 840, 843, 839, 845, 844, 839, 847,
+
+ 841, 842, 846, 842, 849, 848, 843, 847, 850, 846,
+ 851, 859, 852, 0, 853, 863, 844, 851, 854, 845,
+ 850, 855, 858, 845, 848, 852, 847, 854, 856, 846,
+ 849, 849, 848, 856, 862, 850, 855, 851, 859, 852,
+ 853, 853, 860, 864, 858, 854, 865, 860, 855, 858,
+ 866, 867, 864, 868, 865, 856, 862, 866, 869, 872,
+ 870, 862, 873, 0, 871, 874, 0, 875, 0, 876,
+ 864, 878, 877, 865, 860, 868, 875, 866, 872, 879,
+ 868, 877, 888, 867, 870, 871, 872, 870, 876, 873,
+ 869, 871, 874, 878, 875, 880, 876, 882, 878, 877,
+
+ 881, 884, 879, 883, 887, 885, 879, 886, 882, 881,
+ 889, 883, 890, 894, 888, 880, 894, 892, 893, 889,
+ 890, 895, 880, 885, 882, 896, 886, 881, 884, 0,
+ 883, 887, 885, 895, 886, 892, 893, 889, 897, 890,
+ 894, 899, 898, 902, 892, 893, 900, 896, 895, 901,
+ 903, 901, 896, 904, 905, 0, 897, 906, 904, 900,
+ 907, 902, 909, 899, 903, 897, 898, 905, 899, 898,
+ 902, 908, 907, 900, 914, 910, 901, 903, 910, 908,
+ 909, 905, 911, 906, 906, 904, 912, 907, 915, 909,
+ 916, 911, 917, 0, 912, 0, 916, 918, 908, 914,
+
+ 919, 914, 910, 918, 920, 921, 0, 924, 929, 911,
+ 912, 920, 921, 912, 917, 915, 925, 916, 922, 917,
+ 925, 912, 919, 922, 918, 924, 923, 919, 926, 927,
+ 930, 920, 921, 923, 924, 931, 928, 935, 927, 933,
+ 929, 932, 936, 925, 928, 922, 934, 933, 930, 938,
+ 931, 926, 932, 923, 937, 926, 927, 930, 935, 934,
+ 939, 936, 931, 928, 935, 941, 933, 937, 932, 936,
+ 940, 938, 941, 934, 0, 942, 938, 943, 940, 944,
+ 946, 937, 945, 947, 943, 946, 950, 939, 948, 945,
+ 951, 947, 941, 942, 949, 948, 953, 940, 944, 952,
+
+ 954, 949, 942, 956, 943, 957, 944, 946, 0, 945,
+ 947, 958, 952, 954, 961, 948, 955, 959, 950, 0,
+ 964, 949, 951, 955, 960, 959, 952, 954, 953, 963,
+ 965, 969, 960, 966, 958, 956, 961, 957, 958, 960,
+ 962, 961, 970, 955, 959, 967, 962, 968, 971, 970,
+ 0, 960, 964, 0, 967, 963, 963, 966, 973, 960,
+ 966, 968, 965, 969, 972, 975, 974, 962, 978, 970,
+ 975, 976, 967, 972, 968, 971, 977, 979, 983, 974,
+ 973, 974, 979, 976, 0, 973, 983, 982, 981, 980,
+ 974, 972, 0, 974, 978, 978, 980, 975, 976, 977,
+
+ 981, 1020, 994, 977, 979, 983, 974, 985, 974, 982,
+ 985, 986, 987, 989, 982, 981, 980, 991, 995, 990,
+ 0, 993, 0, 991, 986, 987, 990, 989, 994, 994,
+ 996, 997, 0, 1020, 985, 998, 0, 998, 986, 987,
+ 989, 995, 996, 993, 991, 995, 990, 992, 993, 992,
+ 999, 999, 1000, 992, 1001, 992, 0, 996, 997, 1003,
+ 992, 1002, 998, 1004, 1000, 992, 1005, 1001, 1004, 0,
+ 0, 992, 1003, 999, 992, 0, 992, 999, 999, 1000,
+ 992, 1001, 992, 1002, 1005, 1006, 1003, 992, 1002, 1008,
+ 1007, 0, 992, 1005, 1010, 1004, 1009, 1011, 1006, 1013,
+
+ 0, 1008, 1007, 1017, 1014, 0, 1009, 1012, 1022, 1010,
+ 1014, 1018, 1006, 1007, 1015, 1019, 1008, 1007, 1009, 1011,
+ 1012, 1010, 1016, 1009, 1011, 1017, 1013, 1015, 1021, 1007,
+ 1017, 1014, 1018, 1009, 1012, 1022, 1024, 1019, 1018, 1025,
+ 1016, 1015, 1019, 1026, 1025, 1027, 0, 1029, 1031, 1016,
+ 0, 1026, 1032, 0, 1027, 1030, 0, 1033, 0, 0,
+ 1021, 1031, 1029, 1034, 0, 1042, 1025, 1032, 1024, 1035,
+ 1026, 0, 1027, 1028, 1029, 1031, 1036, 1030, 1028, 1032,
+ 1028, 1038, 1030, 1033, 1033, 1034, 1028, 1039, 1035, 1036,
+ 1034, 1028, 1028, 1037, 1038, 1039, 1035, 1042, 1028, 1028,
+
+ 1028, 1040, 1043, 1036, 1037, 1028, 1041, 1028, 1038, 1040,
+ 1049, 1044, 1045, 1028, 1039, 1053, 1046, 1041, 1028, 1028,
+ 1037, 1045, 1047, 1048, 1043, 1028, 1044, 1046, 1040, 1043,
+ 1050, 1047, 1048, 1041, 1051, 1054, 1055, 1049, 1044, 1045,
+ 1057, 1051, 1056, 1046, 1055, 1058, 1059, 1053, 1060, 1047,
+ 1048, 1065, 1062, 1050, 1057, 1064, 1060, 1050, 1063, 1054,
+ 1066, 1051, 1054, 1055, 1056, 1071, 1064, 1057, 1059, 1056,
+ 1062, 1068, 1067, 1059, 1069, 1060, 1063, 1058, 1066, 1062,
+ 1067, 1069, 1064, 1065, 1070, 1063, 1076, 1066, 1072, 1073,
+ 1074, 1071, 1071, 1068, 1075, 1072, 1077, 1070, 1068, 1067,
+
+ 1078, 1069, 1086, 1080, 1073, 0, 1077, 1076, 1074, 1082,
+ 0, 1070, 1075, 1076, 1080, 1072, 1073, 1074, 1083, 1085,
+ 1087, 1075, 1082, 1077, 1084, 1083, 1084, 1088, 1087, 1089,
+ 1080, 1090, 1078, 1091, 1086, 1092, 1082, 1095, 1089, 1096,
+ 1088, 1085, 1098, 1090, 0, 1083, 1085, 1087, 1099, 1097,
+ 1100, 1084, 1101, 0, 1088, 1091, 1089, 1092, 1090, 1095,
+ 1091, 1096, 1092, 1102, 1095, 1110, 1096, 1097, 1098, 1098,
+ 1101, 1103, 1105, 1106, 1108, 1102, 1097, 1108, 1106, 1101,
+ 1099, 1109, 1100, 1105, 1111, 1103, 1114, 1112, 1118, 1110,
+ 1102, 1113, 1110, 1109, 1112, 1116, 1120, 1111, 1103, 1105,
+
+ 1108, 1108, 1113, 1115, 1108, 1106, 1114, 1117, 1109, 1116,
+ 1119, 1111, 1115, 1114, 1112, 1121, 1122, 1119, 1113, 1117,
+ 1118, 1125, 1116, 1123, 1128, 1126, 1127, 1121, 1120, 1130,
+ 1115, 0, 1127, 1129, 1117, 0, 1123, 1119, 1122, 1131,
+ 1130, 1132, 1121, 1122, 1134, 1133, 1128, 1125, 1125, 1126,
+ 1123, 1128, 1126, 1127, 1136, 1129, 1130, 1131, 1137, 1134,
+ 1129, 1138, 1140, 1132, 1139, 1141, 1131, 1133, 1132, 1137,
+ 1139, 1134, 1133, 1144, 1143, 1136, 1145, 1142, 1146, 1148,
+ 1151, 1136, 1138, 1143, 1149, 1137, 1148, 1146, 1138, 1152,
+ 1147, 1139, 1141, 1150, 1140, 1142, 1153, 1144, 1147, 1165,
+
+ 1144, 1143, 1145, 1145, 1142, 1146, 1148, 1150, 1149, 1154,
+ 1155, 1149, 1151, 1156, 1158, 1161, 1157, 1147, 0, 1163,
+ 1150, 1152, 1160, 1162, 1161, 1164, 1165, 1178, 1153, 0,
+ 1162, 1154, 1155, 1168, 1171, 1166, 1154, 1155, 1157, 1167,
+ 1170, 1172, 1161, 1157, 1160, 1156, 1158, 1164, 1170, 1160,
+ 1162, 1163, 1164, 1166, 1169, 1168, 1173, 1167, 1171, 1178,
+ 1168, 1171, 1166, 1169, 1174, 1172, 1167, 1170, 1172, 1175,
+ 1176, 1177, 1173, 1179, 1182, 1180, 1183, 1181, 1175, 1177,
+ 1184, 1169, 0, 1173, 1183, 1176, 1174, 1180, 0, 1194,
+ 0, 1174, 1189, 1184, 1185, 0, 1175, 1176, 1177, 1181,
+
+ 1208, 1182, 1180, 1183, 1181, 1179, 1186, 1184, 1188, 1185,
+ 1189, 1191, 1190, 1191, 1193, 1186, 1194, 1188, 1195, 1189,
+ 1190, 1185, 1193, 1198, 1196, 1197, 1203, 1200, 1206, 1202,
+ 1198, 1201, 1208, 1186, 1209, 1188, 0, 1195, 1191, 1190,
+ 1200, 1193, 1204, 1201, 1202, 1195, 1196, 1197, 1203, 1205,
+ 1198, 1196, 1197, 1203, 1200, 1206, 1202, 1207, 1201, 1210,
+ 1204, 1205, 1211, 1212, 1207, 0, 1209, 1213, 1215, 1204,
+ 1216, 1210, 0, 1211, 1214, 1218, 1205, 1217, 1221, 1220,
+ 1219, 1215, 1225, 1216, 1207, 1212, 1210, 1218, 1219, 1211,
+ 1212, 1227, 1213, 0, 1213, 1215, 1214, 1216, 1221, 1217,
+
+ 1222, 1214, 1218, 1220, 1217, 1221, 1220, 1219, 1223, 1225,
+ 1226, 1228, 1222, 1229, 1227, 1230, 1223, 1231, 1227, 1232,
+ 1228, 1235, 1234, 1226, 1231, 1229, 1237, 1222, 1232, 1236,
+ 1232, 0, 1238, 1232, 1240, 1223, 1230, 1226, 1228, 1248,
+ 1229, 1232, 1230, 0, 1231, 1234, 1232, 1235, 1235, 1234,
+ 1239, 1236, 1238, 1237, 1241, 1232, 1236, 1232, 1240, 1238,
+ 1232, 1240, 1241, 1239, 1242, 1243, 1245, 1246, 1249, 1247,
+ 1251, 1248, 1250, 1242, 1252, 1246, 1254, 1239, 1255, 0,
+ 1256, 1241, 1252, 1243, 1247, 1250, 1251, 1258, 1245, 1259,
+ 1249, 1242, 1243, 1245, 1246, 1249, 1247, 1251, 1261, 1250,
+
+ 1255, 1252, 1256, 1254, 1257, 1255, 1260, 1256, 1262, 1258,
+ 1261, 1257, 1259, 1263, 1258, 1265, 1259, 1264, 1266, 1267,
+ 1262, 1263, 1268, 1269, 1260, 1261, 1264, 1265, 1270, 1269,
+ 1268, 1257, 1273, 1260, 1267, 1262, 1271, 1270, 1266, 1272,
+ 1263, 1264, 1265, 1274, 1264, 1266, 1267, 1275, 1273, 1268,
+ 1269, 1272, 1277, 1264, 1275, 1270, 1278, 1271, 1276, 1273,
+ 1284, 1279, 1280, 1271, 1281, 1276, 1272, 1287, 1278, 1279,
+ 1277, 1282, 1281, 1282, 1275, 1274, 0, 1280, 1283, 1277,
+ 1285, 1288, 1289, 1278, 1290, 1276, 1292, 1285, 1279, 1280,
+ 1283, 1281, 1284, 1288, 1291, 1289, 1293, 1292, 1282, 1287,
+
+ 1294, 1291, 1296, 1290, 1299, 1283, 1297, 1285, 1288, 1289,
+ 1296, 1290, 1295, 1292, 1298, 1294, 1303, 1295, 1293, 1297,
+ 1301, 1291, 1308, 1293, 1302, 0, 0, 1294, 1298, 1296,
+ 1299, 1299, 1304, 1297, 1301, 0, 0, 1307, 1305, 1306,
+ 0, 1298, 1302, 1311, 1295, 1300, 1309, 1301, 1303, 1300,
+ 1317, 1302, 1300, 1300, 1308, 1307, 1310, 1300, 1304, 1304,
+ 1305, 1313, 1306, 1300, 1307, 1305, 1306, 1300, 1309, 1311,
+ 1311, 1300, 1300, 1309, 1318, 1312, 1300, 1316, 1310, 1300,
+ 1300, 1312, 1317, 1310, 1300, 1315, 1316, 1313, 1313, 1314,
+ 1300, 1314, 1315, 1319, 1300, 1323, 1320, 1322, 1321, 1325,
+
+ 1324, 1327, 1312, 1329, 1316, 1321, 1318, 1326, 1323, 1324,
+ 1328, 0, 1315, 1314, 1320, 1330, 1314, 1319, 1314, 1322,
+ 1319, 1353, 1323, 1320, 1322, 1321, 1329, 1324, 1326, 1330,
+ 1329, 1325, 1328, 1327, 1326, 1332, 1333, 1328, 1334, 1335,
+ 1335, 0, 1330, 1331, 1336, 0, 1338, 1339, 1331, 1333,
+ 1331, 1340, 1331, 1353, 1331, 0, 0, 1332, 1340, 1339,
+ 1336, 1331, 1332, 1333, 1334, 1334, 1342, 1341, 1335, 1338,
+ 1331, 1336, 1344, 1338, 1339, 1331, 1341, 1331, 1340, 1331,
+ 1343, 1331, 1345, 1346, 1342, 1343, 1347, 1349, 1346, 1348,
+ 1344, 1354, 1355, 1342, 1341, 1350, 1351, 0, 1352, 1344,
+
+ 1345, 1356, 1348, 1350, 1351, 1349, 1360, 1355, 1347, 1345,
+ 1346, 1352, 1343, 1347, 1349, 1358, 1348, 1354, 1354, 1355,
+ 1356, 1357, 1350, 1351, 1360, 1352, 1359, 1361, 1356, 1362,
+ 1363, 0, 1363, 1360, 1357, 1365, 1364, 1358, 1362, 1359,
+ 1366, 1367, 1358, 1368, 1369, 0, 0, 1361, 1357, 1371,
+ 1372, 1373, 1366, 1359, 1361, 1375, 1362, 1363, 1364, 1373,
+ 1377, 1374, 1365, 1364, 1378, 1368, 1383, 1366, 1367, 1369,
+ 1368, 1369, 1372, 1371, 1376, 1379, 1371, 1372, 1373, 1374,
+ 1380, 1376, 1375, 1381, 1385, 1386, 1380, 1377, 1374, 1381,
+ 1378, 1378, 1382, 1383, 1385, 1388, 1384, 1379, 1382, 1387,
+
+ 0, 1376, 1379, 1384, 1390, 1392, 1387, 1380, 1389, 1386,
+ 1381, 1385, 1386, 1391, 1392, 1394, 1395, 0, 1400, 1382,
+ 1396, 0, 1390, 1384, 1397, 0, 1387, 1388, 1395, 1402,
+ 1389, 1390, 1392, 1399, 1396, 1389, 1398, 1400, 1391, 1394,
+ 1391, 1404, 1394, 1395, 1401, 1400, 1397, 1396, 1403, 1398,
+ 1405, 1397, 1406, 1402, 1408, 1399, 1402, 1407, 1411, 1409,
+ 1399, 1406, 1412, 1398, 0, 1413, 1401, 1404, 1404, 1414,
+ 1403, 1401, 1405, 1409, 1408, 1403, 1415, 1405, 1407, 1406,
+ 1416, 1408, 1419, 1418, 1407, 1417, 1409, 1413, 1420, 1422,
+ 1411, 1414, 1413, 1417, 1412, 1420, 1414, 1423, 1416, 1418,
+
+ 1424, 1425, 1428, 1429, 1430, 1433, 1423, 1416, 1415, 1419,
+ 1418, 1422, 1417, 1425, 1426, 1420, 1422, 1424, 1427, 1436,
+ 1431, 1426, 1427, 1435, 1423, 1430, 1434, 1424, 1425, 1438,
+ 1435, 1430, 1434, 1437, 1428, 1429, 1431, 1433, 1441, 1434,
+ 1437, 1426, 1439, 1440, 1438, 1427, 1443, 1431, 1443, 1444,
+ 1435, 1436, 1440, 1434, 1442, 1439, 1438, 1445, 1444, 1434,
+ 1437, 1442, 1446, 1447, 1441, 1441, 1449, 1451, 1448, 1439,
+ 1440, 1446, 1448, 1443, 1452, 1451, 1444, 1453, 1455, 1445,
+ 1456, 1442, 1453, 1454, 1445, 1457, 1461, 1452, 1449, 1446,
+ 1447, 1458, 1454, 1449, 1451, 1448, 1455, 1460, 1457, 1456,
+
+ 1460, 1452, 1463, 1458, 1461, 1455, 1462, 1456, 1459, 1453,
+ 1454, 1459, 1457, 1461, 1465, 1463, 1466, 1468, 1458, 1460,
+ 1459, 1467, 1468, 1471, 1460, 1472, 1469, 1460, 1487, 1463,
+ 1507, 1462, 1471, 1462, 1469, 1459, 1473, 1467, 1459, 1466,
+ 1470, 1470, 1474, 1466, 1476, 1475, 1465, 1472, 1467, 1468,
+ 1471, 1476, 1472, 1469, 1475, 1477, 1481, 1480, 1473, 1478,
+ 1487, 1483, 1507, 1473, 1474, 1481, 1478, 1470, 1484, 1474,
+ 1480, 1476, 1475, 1486, 0, 1488, 1482, 1477, 0, 1491,
+ 1485, 1486, 1477, 1481, 1480, 1482, 1478, 1483, 1483, 1485,
+ 1488, 1484, 1491, 1489, 1495, 1484, 1492, 1490, 1493, 1496,
+
+ 1486, 1494, 1488, 1482, 1489, 1490, 1491, 1485, 1492, 1494,
+ 1493, 1497, 1500, 1498, 1499, 1508, 1495, 1501, 1500, 1496,
+ 1489, 1495, 1498, 1492, 1490, 1493, 1496, 1499, 1494, 1502,
+ 1503, 1504, 1509, 1497, 1506, 1501, 1505, 1511, 1497, 1500,
+ 1498, 1499, 1503, 1505, 1501, 1509, 1510, 1508, 1512, 1504,
+ 1516, 1513, 1515, 1517, 1518, 1502, 1502, 1503, 1504, 1509,
+ 1506, 1506, 1513, 1505, 1511, 1514, 0, 1519, 1522, 1512,
+ 1520, 1514, 1510, 1510, 1515, 1512, 1523, 0, 1513, 1515,
+ 1524, 1525, 1516, 1530, 1529, 1517, 1518, 1526, 1527, 1520,
+ 1525, 1520, 1514, 1519, 1519, 1522, 1520, 1520, 1524, 1523,
+
+ 1528, 1527, 1526, 1523, 1529, 1532, 1531, 1524, 1525, 1530,
+ 1530, 1529, 1528, 1531, 1526, 1527, 1520, 1533, 1520, 1538,
+ 1535, 1534, 1539, 1543, 1532, 1536, 1537, 1528, 1535, 1539,
+ 1536, 1537, 1532, 1531, 1534, 1540, 1548, 1541, 1544, 1533,
+ 0, 1543, 1538, 1542, 1533, 1541, 1538, 1535, 1534, 1539,
+ 1543, 1542, 1546, 1554, 1549, 1545, 0, 1536, 1537, 1546,
+ 1544, 1540, 1540, 1545, 1541, 1544, 1547, 1551, 1548, 1550,
+ 1542, 1552, 1553, 1553, 1551, 1547, 1549, 1557, 1550, 1546,
+ 1555, 1549, 1545, 1552, 1556, 1554, 1559, 1558, 1555, 1560,
+ 1564, 0, 1561, 1547, 1551, 1558, 1550, 1560, 1552, 1553,
+
+ 1561, 1567, 1562, 1564, 1559, 1556, 1566, 1555, 1568, 1557,
+ 1562, 1556, 1563, 1559, 1558, 1565, 1560, 1564, 1566, 1561,
+ 1563, 1565, 1569, 1570, 1572, 1571, 1573, 1567, 1567, 1562,
+ 1569, 1570, 1568, 1566, 1574, 1568, 1575, 0, 0, 1563,
+ 1571, 1576, 1565, 0, 1578, 1577, 1579, 1588, 1584, 1569,
+ 1570, 1572, 1571, 1573, 1583, 1576, 1574, 1577, 1582, 1575,
+ 1579, 1574, 1578, 1575, 1585, 1580, 1589, 1582, 1576, 1580,
+ 1584, 1578, 1577, 1579, 1588, 1584, 1585, 1586, 1583, 1590,
+ 1593, 1583, 1580, 1587, 1586, 1582, 1591, 1592, 1589, 0,
+ 1580, 1585, 1580, 1589, 1587, 1594, 1580, 1595, 1591, 1597,
+
+ 1596, 1592, 1602, 1599, 1586, 1601, 1597, 1598, 1600, 1580,
+ 1587, 1590, 1593, 1591, 1592, 1600, 1598, 1594, 1606, 1604,
+ 1595, 1599, 1594, 1596, 1595, 1607, 1597, 1596, 1604, 1602,
+ 1599, 1607, 1608, 1610, 1598, 1600, 1609, 1601, 0, 1613,
+ 1611, 0, 1616, 0, 1615, 1617, 1604, 1611, 0, 1618,
+ 1606, 1621, 1607, 1619, 1608, 1622, 1617, 1626, 1632, 1608,
+ 1618, 1622, 1609, 1609, 1619, 1610, 1613, 1611, 1615, 1616,
+ 1623, 1615, 1617, 1624, 1625, 1621, 1618, 1623, 1621, 1628,
+ 1619, 1625, 1622, 1626, 1626, 1628, 1627, 1629, 1630, 1631,
+ 1632, 1624, 1633, 1634, 1635, 1629, 1636, 1623, 1627, 1639,
+
+ 1624, 1625, 1631, 1635, 1644, 1637, 1628, 1637, 1636, 1640,
+ 1630, 1634, 1642, 1627, 1629, 1630, 1631, 1638, 1633, 1633,
+ 1634, 1635, 1640, 1636, 1638, 1639, 1639, 1645, 1641, 1643,
+ 1650, 1644, 1637, 1646, 1642, 1647, 1640, 1641, 1648, 1642,
+ 1646, 1643, 1653, 1648, 1638, 1649, 1650, 1651, 1655, 1656,
+ 1645, 1652, 1657, 1649, 1645, 1641, 1643, 1650, 1658, 1652,
+ 1646, 1647, 1647, 0, 1653, 1648, 1657, 0, 1660, 1653,
+ 1651, 1659, 1649, 1656, 1651, 1655, 1656, 1660, 1652, 1657,
+ 1658, 1661, 1659, 1662, 1662, 1658, 1663, 1664, 1665, 1664,
+ 1666, 1662, 1671, 1668, 1661, 1660, 1667, 1669, 1659, 1663,
+
+ 1668, 1670, 1677, 1672, 1669, 1673, 1665, 0, 1661, 1670,
+ 1662, 1662, 1675, 1663, 1664, 1665, 1666, 1666, 1667, 1671,
+ 1668, 1672, 1674, 1667, 1669, 1676, 1678, 1673, 1670, 1674,
+ 1672, 1679, 1673, 1678, 1677, 1680, 0, 1675, 1682, 1675,
+ 1683, 0, 1684, 1686, 1688, 1689, 1685, 1676, 1689, 1674,
+ 1684, 1682, 1676, 1678, 1685, 1690, 1695, 1680, 1691, 1693,
+ 1701, 1692, 1680, 1679, 1686, 1682, 1688, 1683, 1693, 1684,
+ 1686, 1688, 1689, 1685, 1692, 1694, 0, 1696, 1698, 0,
+ 1695, 1690, 1690, 1695, 1691, 1691, 1693, 1694, 1692, 1697,
+ 1699, 1700, 1701, 1698, 1700, 0, 1703, 1699, 1697, 1709,
+
+ 1702, 1705, 1694, 1696, 1696, 1698, 1700, 1706, 1707, 1711,
+ 1707, 1710, 1703, 1708, 1710, 1700, 1697, 1699, 1700, 1705,
+ 1703, 1700, 1702, 1703, 1712, 1713, 1709, 1702, 1705, 1706,
+ 0, 1714, 1716, 1700, 1706, 1707, 1715, 1708, 1710, 1703,
+ 1708, 1711, 1719, 1717, 1722, 1718, 1720, 1713, 1721, 1723,
+ 1724, 1719, 1713, 1725, 1720, 1721, 1712, 1714, 1714, 1718,
+ 1727, 1726, 1715, 1715, 1716, 1717, 1730, 1729, 1722, 1719,
+ 1717, 1722, 1718, 1720, 1728, 1721, 1731, 1732, 1728, 1734,
+ 1733, 1723, 1724, 1726, 0, 1725, 1732, 1733, 1726, 1729,
+ 0, 1734, 1727, 1730, 1729, 1736, 1737, 1735, 1731, 1738,
+
+ 1739, 1728, 1736, 1731, 1732, 1735, 1734, 1733, 1740, 1737,
+ 1742, 1743, 1738, 1739, 1741, 1747, 1741, 1740, 1749, 1745,
+ 1744, 1750, 1736, 1737, 1735, 1748, 1738, 1739, 1744, 0,
+ 1747, 1756, 1749, 1742, 0, 1740, 1743, 1742, 1743, 1745,
+ 1748, 1741, 1747, 1751, 1752, 1749, 1745, 1744, 1754, 1753,
+ 1751, 0, 1748, 1750, 1755, 1752, 1753, 1756, 1756, 1757,
+ 1759, 1754, 1760, 1761, 1762, 0, 1763, 0, 1764, 1760,
+ 1751, 1752, 1755, 1767, 0, 1754, 1753, 1757, 1755, 1762,
+ 1764, 1755, 1767, 1765, 1768, 1761, 1757, 1759, 1770, 1760,
+ 1761, 1762, 1763, 1763, 1766, 1764, 1765, 1766, 1772, 1755,
+
+ 1767, 1769, 1768, 1778, 1771, 1776, 1779, 1771, 1770, 1772,
+ 1765, 1768, 1774, 1769, 1776, 1770, 1777, 1774, 1777, 1780,
+ 1781, 1766, 1771, 0, 1774, 1772, 1783, 1778, 1769, 1782,
+ 1778, 1771, 1776, 1779, 1771, 1781, 1784, 1785, 1782, 1774,
+ 1786, 1789, 0, 1777, 1774, 1800, 1780, 1781, 1786, 1787,
+ 1783, 1785, 1788, 1783, 1790, 1791, 1782, 1794, 1792, 1793,
+ 1790, 1795, 1799, 1784, 1785, 1789, 1792, 1786, 1789, 1795,
+ 1793, 1787, 1800, 1798, 1788, 1794, 1787, 1791, 0, 1788,
+ 1796, 1790, 1791, 1796, 1794, 1792, 1793, 1797, 1795, 1801,
+ 1797, 1798, 1802, 1804, 1799, 1805, 1813, 1803, 1796, 1802,
+
+ 1798, 1806, 1804, 1808, 0, 1813, 1809, 1796, 1805, 1801,
+ 1796, 1803, 1806, 1807, 1797, 1812, 1801, 1812, 1807, 1802,
+ 1804, 1809, 1805, 1813, 1803, 1808, 1814, 1815, 1806, 1816,
+ 1808, 1817, 0, 1809, 1818, 0, 1819, 1824, 1818, 1823,
+ 1816, 1820, 1812, 1824, 1820, 1807, 1822, 1821, 1823, 1817,
+ 1819, 1815, 1814, 1814, 1815, 1833, 1816, 1836, 1817, 1820,
+ 1818, 1818, 1819, 1819, 1824, 1818, 1823, 1825, 1820, 1821,
+ 1826, 1820, 1822, 1822, 1821, 1826, 1825, 1819, 1828, 1830,
+ 1829, 1831, 1832, 1835, 1830, 0, 1838, 1833, 1834, 1836,
+ 1837, 1828, 1829, 1839, 1825, 1832, 0, 1834, 1845, 1838,
+
+ 1840, 1844, 1826, 1831, 1842, 1828, 1830, 1829, 1831, 1832,
+ 1835, 1842, 1837, 1838, 1844, 1834, 1843, 1837, 1846, 1848,
+ 1847, 1840, 1850, 1843, 0, 1839, 1847, 1840, 1844, 1852,
+ 1845, 1842, 1846, 1855, 1853, 1856, 1857, 1852, 1854, 1864,
+ 1859, 1850, 1853, 1843, 1847, 1846, 1854, 1847, 1865, 1850,
+ 1858, 1848, 1855, 1847, 1857, 1860, 1852, 1856, 1859, 1861,
+ 1855, 1853, 1856, 1857, 1858, 1854, 1862, 1859, 1863, 1860,
+ 1866, 1864, 1861, 1867, 1868, 1870, 1869, 1858, 1872, 1862,
+ 1865, 1874, 1860, 1869, 1870, 1873, 1861, 1867, 1871, 1863,
+ 0, 1879, 0, 1862, 1866, 1863, 1871, 1866, 1877, 1873,
+
+ 1867, 1868, 1870, 1869, 1875, 1872, 1876, 1877, 1882, 1875,
+ 1884, 1881, 1873, 1874, 1880, 1871, 1863, 1876, 1879, 1883,
+ 1885, 1880, 1886, 1887, 1891, 1877, 1883, 1887, 1889, 1894,
+ 1882, 1875, 1884, 1876, 1881, 1882, 1890, 1884, 1881, 1898,
+ 1886, 1880, 1885, 1892, 1889, 1893, 1883, 1885, 1891, 1886,
+ 1887, 1891, 1895, 1896, 1890, 1889, 1894, 1893, 1892, 1897,
+ 1895, 1899, 1900, 1890, 1901, 1908, 1898, 1897, 1896, 1904,
+ 1892, 1912, 1893, 1906, 0, 1900, 1904, 1902, 1903, 1895,
+ 1896, 1906, 1911, 1899, 1901, 1915, 1897, 1907, 1899, 1900,
+ 1910, 1901, 1902, 1903, 1907, 1909, 1904, 1908, 1912, 1910,
+
+ 1906, 1913, 1917, 1911, 1902, 1903, 1914, 1918, 1919, 1911,
+ 1909, 1920, 1915, 1914, 1907, 1921, 0, 1910, 0, 1922,
+ 1923, 1941, 1909, 1925, 1917, 1913, 1919, 1924, 1913, 1917,
+ 1925, 1926, 1927, 1914, 1922, 1919, 1926, 1931, 1929, 1918,
+ 1928, 1927, 1921, 1920, 1930, 1923, 1922, 1923, 1932, 1928,
+ 1925, 1924, 1934, 1941, 1924, 1931, 1933, 0, 1926, 1927,
+ 1929, 0, 1938, 1932, 1931, 1929, 1930, 1928, 1933, 1935,
+ 1936, 1930, 1940, 1937, 1934, 1932, 1939, 1936, 1945, 1934,
+ 1937, 1944, 1935, 1933, 1938, 1942, 1945, 1935, 1939, 1938,
+ 1946, 1942, 1944, 1947, 1948, 1937, 1935, 1936, 1946, 1940,
+
+ 1937, 1948, 1949, 1939, 1947, 1945, 1951, 1937, 1944, 1935,
+ 1952, 1950, 1942, 1950, 1953, 1954, 1955, 1946, 1956, 1957,
+ 1947, 1948, 1954, 1960, 1950, 1957, 1961, 1949, 1958, 1949,
+ 1959, 1962, 1951, 1951, 1958, 1963, 1959, 1952, 1950, 1965,
+ 1950, 1953, 1954, 1955, 1956, 1956, 1957, 1966, 1967, 1961,
+ 1960, 1969, 1971, 1961, 1968, 1958, 1966, 1959, 1968, 1963,
+ 1972, 1973, 1963, 1962, 1970, 1975, 1970, 1974, 1973, 1977,
+ 1976, 1965, 0, 1969, 1966, 1977, 1971, 1978, 1969, 1971,
+ 1967, 1968, 1976, 1979, 1982, 1980, 1981, 1972, 1973, 1974,
+ 1987, 1970, 1975, 1993, 1974, 0, 1977, 1976, 1993, 1978,
+
+ 1983, 1983, 1983, 0, 1978, 1979, 2003, 1983, 1981, 1985,
+ 1979, 1980, 1980, 1981, 1984, 1983, 1982, 1986, 1985, 1988,
+ 1990, 1984, 1987, 1989, 1986, 1993, 1988, 1983, 1983, 1983,
+ 1989, 1991, 1994, 2003, 1983, 1996, 1985, 1995, 1997, 1998,
+ 1990, 1984, 1999, 2000, 1986, 1994, 1988, 1990, 2001, 1995,
+ 1989, 1998, 2005, 1991, 1997, 2001, 2008, 2002, 1991, 1994,
+ 1996, 2000, 1996, 2002, 1995, 1997, 1998, 2004, 2004, 2006,
+ 2000, 2009, 2007, 2010, 1999, 2001, 2006, 2007, 2005, 2005,
+ 2011, 2014, 2008, 2008, 2002, 2016, 2015, 2011, 2015, 2019,
+ 2020, 2018, 2023, 2021, 2004, 2019, 2006, 2024, 2009, 2007,
+
+ 2010, 2021, 2026, 2016, 2022, 2023, 2027, 2011, 2014, 2018,
+ 2028, 2025, 2016, 2015, 2026, 2022, 2019, 2025, 2018, 2023,
+ 2021, 2030, 2020, 2031, 2024, 2033, 2027, 2035, 2028, 2026,
+ 2037, 2022, 0, 2027, 2029, 2029, 2033, 2028, 2025, 2032,
+ 2032, 2036, 2038, 2040, 2039, 2041, 2043, 2030, 2030, 2038,
+ 2031, 2044, 2033, 2045, 2043, 2046, 0, 2050, 2047, 2035,
+ 2057, 2029, 2037, 2036, 2039, 2050, 2032, 2048, 2036, 2038,
+ 2041, 2039, 2041, 2043, 2049, 2040, 2047, 2046, 2051, 2048,
+ 2045, 2049, 2046, 2044, 2050, 2047, 2053, 2054, 2052, 2055,
+ 2055, 2056, 2057, 2058, 2048, 2059, 2054, 2060, 2067, 2061,
+
+ 0, 2049, 2051, 2052, 2060, 2051, 2062, 0, 2058, 2066,
+ 2053, 2061, 2064, 2053, 2054, 2052, 2055, 2056, 2056, 2064,
+ 2058, 2073, 2062, 2065, 2060, 2067, 2061, 2059, 2065, 2062,
+ 2069, 2066, 2068, 2062, 2070, 2068, 2066, 2072, 2069, 2064,
+ 2074, 2075, 2076, 2077, 2073, 2072, 2070, 2078, 2073, 2062,
+ 2065, 2081, 2079, 0, 0, 2084, 0, 2069, 2089, 2068,
+ 2076, 2070, 2075, 2084, 2072, 2078, 2074, 2074, 2075, 2076,
+ 2077, 2080, 2083, 2085, 2078, 2079, 2080, 2082, 2081, 2079,
+ 2090, 2086, 2084, 2082, 2087, 2083, 2088, 2080, 2086, 2090,
+ 2089, 2087, 2092, 2088, 2091, 2085, 2093, 2094, 2080, 2083,
+
+ 2085, 2095, 2096, 2080, 2082, 2102, 2091, 2090, 2086, 2100,
+ 2093, 2087, 2098, 2088, 2092, 2099, 2100, 2104, 2101, 2092,
+ 2099, 2091, 2106, 2093, 2094, 2096, 2108, 2095, 2095, 2096,
+ 2098, 2099, 2102, 2105, 2109, 2109, 2100, 2110, 2105, 2098,
+ 2101, 2111, 2099, 2112, 2104, 2101, 2115, 2099, 0, 2119,
+ 2117, 2114, 2116, 2118, 2106, 2118, 2111, 2120, 2108, 2110,
+ 2121, 2109, 2120, 2122, 2110, 2105, 2114, 2116, 2111, 2115,
+ 2126, 2139, 2125, 2115, 2123, 2112, 2117, 2117, 2114, 2116,
+ 2118, 2119, 2123, 2128, 2120, 2126, 2124, 2129, 2132, 2130,
+ 2122, 2134, 2121, 2124, 2125, 2129, 2133, 2126, 2128, 2125,
+
+ 2135, 2123, 2136, 2139, 2140, 2138, 2141, 2137, 2143, 2142,
+ 2128, 2130, 2138, 2124, 2129, 2132, 2130, 2134, 2134, 2137,
+ 2133, 2145, 2146, 2133, 2149, 2140, 2143, 2135, 2141, 2136,
+ 2142, 2140, 2138, 2141, 2137, 2143, 2142, 2148, 2150, 0,
+ 2151, 2153, 2154, 2145, 2156, 0, 2161, 2149, 2145, 2146,
+ 2155, 2149, 2157, 2150, 2158, 2162, 2153, 2154, 2159, 2160,
+ 2163, 2148, 2162, 2168, 2148, 2150, 2151, 2151, 2153, 2154,
+ 2157, 2156, 2155, 2161, 2166, 2164, 2158, 2155, 2163, 2157,
+ 2159, 2158, 2162, 2160, 2164, 2159, 2160, 2163, 2165, 2167,
+ 2169, 2170, 2172, 2178, 2171, 2168, 2165, 2166, 2175, 2169,
+
+ 2178, 2166, 2164, 2171, 2176, 2172, 2177, 2175, 2179, 2170,
+ 2180, 2167, 2174, 2187, 2181, 2165, 2167, 2169, 2170, 2172,
+ 2178, 2171, 2176, 2174, 2177, 2175, 2182, 2183, 2180, 2181,
+ 2184, 2176, 2182, 2177, 2179, 2179, 2189, 2180, 2174, 2174,
+ 2187, 2181, 2198, 2194, 2184, 2190, 2202, 2191, 2192, 2183,
+ 2174, 2195, 2196, 2182, 2183, 2194, 2190, 2184, 2191, 2192,
+ 2189, 2197, 2199, 2189, 2195, 2205, 2200, 2201, 2198, 2198,
+ 2194, 2197, 2190, 2202, 2191, 2192, 2201, 2203, 2195, 2200,
+ 2206, 2208, 2209, 2210, 2196, 2208, 2211, 2199, 2197, 2199,
+ 2212, 2214, 2205, 2200, 2201, 2213, 2203, 2215, 2214, 2211,
+
+ 2213, 2218, 2254, 2209, 2203, 0, 2206, 2206, 2208, 2209,
+ 2212, 2216, 2219, 2211, 2217, 2210, 2218, 2212, 2214, 2216,
+ 2217, 2220, 2213, 2215, 2215, 2221, 2223, 2219, 2218, 2222,
+ 2222, 2224, 2226, 2220, 2254, 0, 2226, 2216, 2216, 2219,
+ 2221, 2217, 2225, 2224, 2223, 2230, 2216, 2225, 2220, 2230,
+ 2227, 2227, 2221, 2223, 2227, 2229, 2222, 2232, 2224, 2226,
+ 2233, 2231, 2229, 2234, 2236, 2235, 2237, 2227, 0, 2233,
+ 2234, 2240, 2230, 2237, 2225, 2227, 2231, 2227, 2227, 2239,
+ 2242, 2227, 2229, 2243, 2232, 0, 2236, 2233, 2231, 2235,
+ 2234, 2236, 2235, 2237, 2227, 2241, 2240, 2246, 2240, 2248,
+
+ 2249, 2239, 2242, 2243, 2241, 2250, 2239, 2242, 2248, 2251,
+ 2243, 2252, 2257, 2259, 2253, 2246, 2255, 2258, 2249, 2252,
+ 2250, 2253, 2241, 2255, 2246, 2261, 2248, 2249, 2260, 2260,
+ 2258, 2262, 2250, 2269, 2251, 2264, 2251, 2257, 2252, 2257,
+ 2259, 2253, 2265, 2255, 2258, 2266, 2268, 2261, 2270, 2271,
+ 2267, 2272, 2261, 2268, 2266, 2260, 2262, 2264, 2262, 2267,
+ 2276, 2274, 2264, 2271, 2265, 2269, 2272, 2278, 2276, 2265,
+ 2270, 2277, 2266, 2268, 2273, 2270, 2271, 2267, 2272, 2273,
+ 2274, 2279, 2278, 2280, 2277, 2281, 2283, 2276, 2274, 2284,
+ 2282, 2286, 2285, 2283, 2278, 2287, 2288, 2290, 2277, 2352,
+
+ 0, 2281, 2282, 2292, 2287, 2291, 2273, 2289, 2279, 2280,
+ 2280, 2293, 2281, 2283, 2285, 2289, 2286, 2282, 2286, 2285,
+ 2291, 2284, 2287, 2294, 2290, 2295, 2289, 2296, 2288, 2292,
+ 2292, 2352, 2291, 2298, 2289, 2304, 2296, 2293, 2293, 2300,
+ 2299, 2294, 2289, 2299, 2302, 2301, 2303, 2295, 2305, 2302,
+ 2294, 2301, 2295, 2304, 2296, 2307, 2298, 2309, 2299, 2308,
+ 2298, 2303, 2304, 2305, 2300, 2310, 2300, 2299, 2315, 2307,
+ 2299, 2312, 2301, 2303, 2308, 2305, 2302, 2313, 2320, 2309,
+ 2320, 2314, 2307, 2319, 2309, 2312, 2308, 2310, 2316, 2313,
+ 2321, 2317, 2310, 2318, 2319, 2315, 2313, 2316, 2312, 2314,
+
+ 2317, 2322, 2318, 2321, 2313, 2320, 2325, 2323, 2314, 2326,
+ 2319, 0, 2327, 2322, 2330, 2316, 2313, 2321, 2317, 2327,
+ 2318, 2325, 2328, 2329, 2326, 2334, 2331, 2336, 2322, 2323,
+ 2338, 2339, 2330, 2325, 2323, 2331, 2326, 2341, 2334, 2327,
+ 2339, 2330, 2338, 2337, 2328, 2329, 2334, 2337, 2336, 2328,
+ 2329, 2342, 2334, 2331, 2336, 2341, 2343, 2338, 2339, 2340,
+ 2344, 2340, 2345, 2348, 2341, 2334, 2349, 2346, 2347, 2351,
+ 2337, 2345, 2355, 2356, 2343, 2346, 2353, 2351, 2342, 2354,
+ 2349, 2353, 2357, 2343, 2354, 2348, 2340, 2344, 2359, 2345,
+ 2348, 2347, 2360, 2349, 2346, 2347, 2351, 2364, 2372, 2360,
+
+ 2365, 2363, 2366, 2353, 2355, 2356, 2357, 2359, 2367, 2357,
+ 2363, 2354, 2368, 2370, 2365, 2359, 2369, 2376, 0, 2360,
+ 2366, 2373, 2370, 2374, 2364, 2365, 2365, 2365, 2363, 2366,
+ 2372, 2369, 2375, 2373, 2377, 2367, 2378, 2380, 2368, 2368,
+ 2370, 2365, 2381, 2369, 2376, 2374, 2383, 2382, 2373, 2381,
+ 2374, 2388, 2365, 2383, 2386, 2385, 2377, 2385, 2375, 2375,
+ 2380, 2377, 2387, 2388, 2380, 2389, 2387, 2395, 2378, 2381,
+ 2382, 2390, 2391, 2383, 2382, 2393, 2386, 2392, 2388, 2397,
+ 2390, 2386, 2385, 2391, 2392, 2394, 2396, 2389, 2398, 2387,
+ 2394, 2397, 2389, 2402, 2395, 2403, 2399, 2393, 2390, 2391,
+
+ 2400, 2400, 2393, 2403, 2392, 2399, 2397, 2401, 2402, 2396,
+ 2398, 2404, 2394, 2396, 2405, 2398, 2401, 2406, 2407, 0,
+ 2402, 2409, 2403, 2399, 2410, 0, 2406, 2400, 2405, 2411,
+ 2416, 2412, 2410, 2404, 2401, 2415, 2416, 2411, 2404, 2412,
+ 2409, 2405, 2413, 2415, 2406, 2407, 2413, 2414, 2409, 2417,
+ 2414, 2410, 2419, 2418, 2420, 2422, 2411, 2416, 2412, 2418,
+ 2425, 2424, 2415, 0, 2417, 2427, 2429, 2422, 2426, 2413,
+ 2428, 2432, 2430, 2425, 2414, 2424, 2417, 2428, 2431, 2437,
+ 2418, 2436, 2422, 2434, 2419, 2432, 2420, 2425, 2424, 2426,
+ 2427, 2438, 2427, 2429, 2430, 2426, 2434, 2428, 2432, 2430,
+
+ 2433, 2435, 2431, 2433, 2439, 2431, 2437, 2436, 2436, 2440,
+ 2434, 2441, 2442, 0, 2443, 2435, 2438, 2443, 2438, 2445,
+ 2447, 2440, 2446, 2441, 2448, 0, 2442, 2433, 2435, 2450,
+ 2451, 2439, 2447, 2452, 2449, 2455, 2440, 2449, 2441, 2442,
+ 2443, 2443, 2455, 2454, 2443, 2458, 2445, 2447, 2446, 2446,
+ 2448, 2448, 2449, 2457, 2459, 2452, 2450, 2451, 2461, 2456,
+ 2452, 2449, 2455, 2460, 2449, 2454, 2456, 2462, 2457, 2463,
+ 2454, 2460, 2458, 2465, 2466, 2464, 2462, 2467, 2468, 2469,
+ 2457, 2459, 2470, 2471, 2472, 2461, 2456, 2464, 0, 2477,
+ 2460, 2468, 2476, 2471, 2462, 2465, 2463, 2469, 2479, 2473,
+
+ 2465, 2466, 2464, 2482, 2467, 2468, 2469, 2474, 2470, 2470,
+ 2471, 2472, 2473, 2478, 2476, 2474, 2477, 2481, 2480, 2476,
+ 2485, 2478, 2483, 2486, 2482, 2479, 2473, 2480, 2484, 2487,
+ 2482, 2486, 2488, 2493, 2474, 2492, 2490, 0, 0, 2481,
+ 2478, 2487, 0, 2484, 2481, 2480, 2483, 2485, 2490, 2483,
+ 2486, 2495, 2491, 2499, 2484, 2484, 2487, 2488, 2495, 2488,
+ 2491, 2496, 2492, 2490, 2497, 2493, 2500, 2501, 2497, 2498,
+ 2484, 2504, 0, 2496, 2503, 2501, 2499, 2502, 2495, 2491,
+ 2499, 2498, 2507, 2504, 2514, 2514, 2505, 2509, 2496, 0,
+ 2510, 2497, 2520, 2500, 2501, 2508, 2498, 2503, 2504, 2502,
+
+ 2505, 2503, 2508, 2510, 2502, 2515, 2511, 2509, 2513, 2507,
+ 2512, 2514, 2505, 2505, 2509, 2511, 2516, 2510, 0, 2512,
+ 2513, 2517, 2508, 2518, 2520, 0, 2521, 2505, 0, 2522,
+ 2523, 2515, 2515, 2511, 2516, 2513, 2524, 2512, 2518, 2529,
+ 2518, 2521, 2525, 2516, 2525, 2526, 2517, 2518, 2517, 2527,
+ 2518, 2522, 2523, 2521, 0, 2527, 2522, 2523, 2524, 2526,
+ 2528, 2529, 2532, 2524, 2533, 2518, 2529, 2518, 2534, 2525,
+ 2530, 2530, 2526, 2535, 2536, 2537, 2527, 2538, 2528, 2540,
+ 0, 2539, 0, 2538, 2532, 2535, 2533, 2528, 2541, 2532,
+ 2534, 2533, 2542, 2539, 2543, 2534, 2543, 2530, 2544, 2545,
+
+ 2535, 2554, 2546, 0, 2538, 2552, 2536, 2537, 2539, 2546,
+ 2541, 2540, 2544, 2547, 2542, 2541, 2548, 2549, 2550, 2542,
+ 2551, 2543, 2553, 2545, 2554, 2544, 2545, 0, 2554, 2546,
+ 2561, 2547, 2556, 2551, 2548, 2549, 2550, 2552, 2559, 2556,
+ 2547, 2558, 2563, 2548, 2549, 2550, 2560, 2551, 2558, 2562,
+ 0, 2564, 2565, 2570, 2553, 2571, 2559, 2562, 0, 2556,
+ 2563, 0, 2561, 0, 2566, 2559, 2566, 2571, 2558, 2563,
+ 2568, 2566, 2560, 2560, 2565, 2562, 2562, 2564, 2564, 2565,
+ 2570, 2568, 2571, 2569, 2562, 2572, 2573, 2575, 2576, 2577,
+ 2578, 2566, 0, 2566, 2569, 2580, 2581, 2568, 2584, 2576,
+
+ 2582, 2577, 2575, 2572, 2585, 2578, 2583, 2582, 2573, 2586,
+ 2569, 2588, 2572, 2573, 2575, 2576, 2577, 2578, 2581, 2580,
+ 2589, 2583, 2580, 2581, 2590, 2584, 2591, 2582, 2592, 2594,
+ 2593, 2585, 2595, 2583, 2597, 2586, 2586, 2596, 2588, 2598,
+ 2601, 2600, 2599, 2603, 2589, 2595, 2590, 2589, 2593, 2597,
+ 2599, 2590, 2598, 2605, 2606, 2607, 2594, 2593, 2591, 2595,
+ 2592, 2597, 2602, 2596, 2596, 2603, 2598, 2600, 2600, 2599,
+ 2603, 2608, 2601, 2609, 2610, 2602, 2605, 2612, 2606, 2611,
+ 2605, 2606, 2607, 2614, 2612, 2613, 0, 2617, 2615, 2602,
+ 3486, 3486, 2610, 2608, 2621, 2609, 2618, 2611, 2608, 2622,
+
+ 2609, 2610, 2615, 2618, 2612, 2624, 2611, 2621, 2613, 2617,
+ 2614, 2619, 2613, 2620, 2617, 2615, 2625, 2623, 2619, 3486,
+ 2620, 2621, 2622, 2618, 2623, 2626, 2622, 2624, 2627, 0,
+ 2628, 2630, 2624, 2629, 2634, 2631, 2636, 2632, 2619, 2630,
+ 2620, 2633, 2629, 2631, 2623, 2638, 2626, 2633, 2625, 2639,
+ 2640, 2636, 2626, 2642, 2627, 2627, 2628, 2628, 2630, 2632,
+ 2629, 2634, 2631, 2636, 2632, 2637, 2641, 2638, 2633, 2644,
+ 2646, 2647, 2638, 2648, 0, 2660, 2637, 2649, 2642, 2650,
+ 2642, 2639, 2640, 2646, 2647, 2641, 2652, 2644, 2654, 2662,
+ 2653, 2659, 2637, 2641, 2655, 2655, 2644, 2646, 2647, 2648,
+
+ 2648, 2649, 2653, 2656, 2649, 2650, 2650, 2660, 2661, 2663,
+ 2652, 2666, 2654, 2652, 2659, 2654, 2662, 2653, 2659, 2668,
+ 2670, 2655, 2674, 2661, 2675, 2675, 2671, 2663, 2668, 2656,
+ 2656, 2676, 2679, 2670, 2680, 2661, 2663, 2671, 2666, 2677,
+ 2676, 2681, 2683, 2685, 2674, 2677, 2668, 2670, 0, 2674,
+ 2686, 2675, 2687, 2671, 2679, 2696, 2680, 2686, 2676, 2679,
+ 2688, 2680, 2689, 2690, 2692, 2694, 2677, 2689, 2681, 2683,
+ 2693, 2688, 2692, 2695, 2701, 2685, 2705, 2686, 2687, 2687,
+ 2694, 2699, 2696, 2700, 2698, 2690, 2703, 2688, 2695, 2689,
+ 2690, 2692, 2694, 2702, 2693, 2698, 2707, 2693, 2703, 2699,
+
+ 2695, 2706, 2702, 2705, 2700, 2710, 2701, 2708, 2699, 2712,
+ 2700, 2698, 2713, 2703, 2710, 2708, 2709, 2709, 2714, 2716,
+ 2702, 2707, 2715, 2707, 2709, 2706, 2718, 2717, 2706, 2720,
+ 2719, 2715, 2710, 0, 2708, 2712, 2712, 2716, 2721, 2713,
+ 2714, 2717, 2720, 2709, 2709, 2714, 2716, 2722, 2718, 2715,
+ 2723, 2721, 2724, 2718, 2717, 2719, 2720, 2719, 2726, 2724,
+ 2725, 2727, 2722, 2728, 2729, 2721, 2730, 2725, 2731, 2732,
+ 0, 0, 2723, 2733, 2722, 2728, 0, 2723, 2736, 2724,
+ 2726, 2735, 2739, 2734, 2732, 2726, 2737, 2725, 2727, 2738,
+ 2728, 2729, 2734, 2730, 2740, 2731, 2732, 2739, 2733, 2741,
+
+ 2733, 2740, 2745, 2735, 2736, 2736, 2747, 2748, 2735, 2739,
+ 2734, 2742, 2737, 2737, 2741, 2738, 2738, 2743, 2742, 2744,
+ 2746, 2740, 2750, 2743, 2749, 2752, 2741, 2751, 2746, 2745,
+ 2744, 2755, 2754, 2747, 2748, 2753, 2756, 2758, 2742, 2754,
+ 2749, 2757, 2751, 2756, 2743, 2752, 2744, 2746, 2757, 2750,
+ 2753, 2749, 2752, 2755, 2751, 2759, 2760, 2763, 2755, 2754,
+ 2761, 2761, 2753, 2756, 2758, 2762, 2764, 2765, 2757, 2764,
+ 2766, 2763, 2762, 2759, 2767, 2766, 2768, 0, 2769, 0,
+ 2765, 2776, 2759, 2760, 2763, 0, 2771, 2761, 2770, 2782,
+ 2772, 2768, 2762, 2764, 2765, 2778, 2780, 2766, 2771, 2767,
+
+ 2774, 2767, 2772, 2768, 2769, 2769, 2770, 2775, 2776, 2774,
+ 2777, 2779, 2775, 2771, 2777, 2770, 2782, 2772, 2780, 2778,
+ 2781, 2783, 2778, 2780, 2779, 2784, 2790, 2774, 2787, 0,
+ 2789, 2792, 2793, 2791, 2775, 2790, 2795, 2777, 2779, 2792,
+ 2797, 2796, 2781, 2795, 2793, 2797, 2799, 2781, 2783, 2791,
+ 2796, 2784, 2784, 2790, 2787, 2787, 2789, 2789, 2792, 2793,
+ 2791, 2801, 2798, 2795, 2799, 2800, 2803, 2797, 2796, 2798,
+ 2802, 2804, 2800, 2799, 2805, 2803, 2807, 2802, 2808, 2810,
+ 2804, 2809, 0, 2812, 2810, 2815, 2801, 2816, 2801, 2798,
+ 0, 2811, 2800, 2803, 2809, 2814, 2816, 2802, 2804, 2807,
+
+ 2805, 2805, 2817, 2807, 2819, 2808, 2810, 2818, 2809, 2811,
+ 2812, 2817, 2815, 2814, 2816, 2820, 2818, 2821, 2811, 2822,
+ 2825, 2823, 2814, 2835, 2819, 2824, 2821, 2820, 2822, 2817,
+ 2826, 2819, 2823, 2824, 2818, 2827, 2828, 2831, 2829, 2833,
+ 2830, 2834, 2820, 2825, 2821, 2829, 2822, 2825, 2823, 2830,
+ 2826, 2836, 2824, 2841, 2842, 2835, 0, 2826, 2831, 2838,
+ 2836, 2837, 2827, 2828, 2831, 2829, 2833, 2830, 2834, 2839,
+ 2837, 2838, 2840, 2850, 2846, 2841, 2843, 2839, 2836, 2847,
+ 2841, 2842, 2844, 2843, 2845, 2840, 2838, 2848, 2837, 2844,
+ 2846, 2845, 2851, 2849, 2848, 2847, 2839, 2852, 2850, 2840,
+
+ 2850, 2846, 2853, 2843, 2855, 2857, 2847, 0, 2858, 2844,
+ 2859, 2845, 2855, 0, 2848, 2849, 2858, 2861, 2863, 2851,
+ 2849, 2860, 2852, 2857, 2852, 2859, 2862, 2864, 2860, 2853,
+ 2865, 2855, 2857, 2862, 2864, 2858, 2868, 2859, 2865, 2861,
+ 2863, 2869, 2870, 2868, 2861, 2863, 2871, 2872, 2860, 2873,
+ 2869, 2874, 2876, 2862, 2864, 2875, 0, 2865, 2873, 2872,
+ 2877, 0, 2882, 2868, 2876, 2879, 2870, 2881, 2869, 2870,
+ 2883, 2875, 2880, 2871, 2872, 2887, 2873, 2879, 2874, 2876,
+ 2892, 2884, 2875, 2877, 2880, 2882, 2886, 2877, 2881, 2882,
+ 2890, 2894, 2879, 2888, 2881, 2884, 2889, 2883, 2886, 2880,
+
+ 2888, 2895, 2887, 2891, 2889, 2897, 2894, 2892, 2884, 2890,
+ 2891, 2896, 2898, 2886, 2899, 2900, 0, 2890, 2894, 2895,
+ 2888, 2901, 2899, 2889, 2903, 2904, 2902, 2906, 2895, 2905,
+ 2891, 2897, 2897, 2912, 2896, 2903, 2905, 2915, 2896, 2898,
+ 2904, 2899, 2900, 2901, 2902, 2913, 2922, 2916, 2901, 2908,
+ 2919, 2903, 2904, 2902, 2906, 2908, 2905, 2914, 2953, 2912,
+ 2912, 2916, 2914, 2913, 2915, 2917, 2918, 2920, 2919, 2921,
+ 2924, 2923, 2913, 2922, 2916, 2926, 2908, 2919, 2923, 2917,
+ 2918, 2929, 2924, 2931, 2914, 2920, 2932, 2921, 2934, 2933,
+ 2953, 0, 2917, 2918, 2920, 2937, 2921, 2924, 2923, 2932,
+
+ 2936, 2935, 2926, 2929, 2941, 2931, 2944, 2934, 2929, 2935,
+ 2931, 2933, 2939, 2932, 2937, 2934, 2933, 2943, 2936, 2942,
+ 2945, 2946, 2937, 2948, 2939, 2949, 2941, 2936, 2935, 2943,
+ 2947, 2941, 2950, 2944, 2954, 0, 2956, 2959, 2947, 2939,
+ 2951, 2942, 2952, 2946, 2943, 2949, 2942, 2945, 2946, 2951,
+ 2948, 2952, 2949, 2957, 2950, 2958, 2954, 2947, 2960, 2950,
+ 2963, 2954, 2956, 2956, 2959, 2957, 2964, 2951, 2965, 2952,
+ 2966, 0, 2967, 2969, 2963, 2966, 2968, 2958, 2970, 2972,
+ 2957, 2971, 2958, 2977, 2974, 2960, 2969, 2963, 2978, 2973,
+ 2975, 2976, 2965, 2964, 2967, 2965, 2974, 2976, 2968, 2967,
+
+ 2969, 2972, 2966, 2968, 2971, 2979, 2972, 2973, 2971, 2975,
+ 2970, 2974, 2981, 2980, 2983, 2977, 2973, 2975, 2976, 0,
+ 2978, 2984, 2985, 2987, 0, 2989, 0, 2979, 2980, 2990,
+ 2993, 2991, 2979, 2992, 2983, 2996, 2994, 2995, 2987, 2981,
+ 2980, 2983, 2992, 2984, 2993, 2998, 2985, 2989, 2984, 2985,
+ 2987, 2990, 2989, 2991, 2994, 2995, 2990, 2993, 2991, 2997,
+ 2992, 2996, 2996, 2994, 2995, 2999, 3002, 3003, 2998, 3004,
+ 3007, 3010, 2998, 3008, 3009, 3002, 3011, 2997, 3007, 3010,
+ 3008, 3009, 3012, 3013, 0, 3017, 2997, 2999, 3015, 3016,
+ 3004, 3013, 2999, 3002, 3021, 3019, 3004, 3007, 3010, 3003,
+
+ 3008, 3009, 3012, 3011, 3030, 3018, 3015, 3016, 3020, 3012,
+ 3013, 3017, 3017, 3019, 3027, 3015, 3016, 3018, 3022, 3024,
+ 3020, 3021, 3019, 3026, 3028, 3029, 3022, 3029, 3031, 3033,
+ 3026, 3024, 3018, 3034, 3032, 3020, 3030, 3027, 3033, 3035,
+ 3036, 3027, 3032, 0, 3040, 3022, 3024, 3037, 3038, 3037,
+ 3026, 3028, 3029, 3043, 3041, 3044, 3033, 3045, 0, 3036,
+ 3031, 3032, 3040, 3046, 3047, 3034, 3035, 3036, 3041, 3048,
+ 3038, 3040, 3046, 3051, 3037, 3038, 3049, 3047, 3052, 3044,
+ 3045, 3041, 3044, 3054, 3045, 3043, 3056, 3052, 3049, 3055,
+ 3046, 3047, 3057, 3055, 3059, 3060, 3048, 3062, 3061, 3051,
+
+ 3051, 3064, 3066, 3049, 3067, 3052, 3069, 3072, 3068, 3066,
+ 3054, 3069, 3070, 3056, 3072, 3062, 3055, 3075, 3060, 3057,
+ 3061, 3059, 3060, 3068, 3062, 3061, 3067, 3070, 3064, 3066,
+ 3073, 3067, 3077, 3074, 3072, 3068, 3078, 3073, 3069, 3070,
+ 3074, 3079, 3080, 3075, 3075, 3084, 3085, 3081, 3082, 3087,
+ 3088, 0, 3089, 3090, 3092, 3085, 3087, 3073, 3091, 3077,
+ 3074, 3081, 3082, 3078, 3097, 3096, 3080, 3098, 3079, 3080,
+ 3091, 3095, 3084, 3085, 3081, 3082, 3087, 3088, 3089, 3089,
+ 3090, 3092, 3093, 3094, 3095, 3091, 3101, 3109, 3104, 3102,
+ 3098, 3097, 3094, 3104, 3098, 3105, 3093, 3096, 3095, 3105,
+
+ 3106, 3107, 3108, 3110, 3112, 3110, 3117, 3106, 3107, 3093,
+ 3094, 3102, 3111, 3118, 3115, 3120, 3102, 3120, 3101, 3109,
+ 3104, 3121, 3105, 3108, 3122, 3117, 0, 3106, 3107, 3108,
+ 3110, 3112, 3124, 3117, 3128, 3111, 3115, 3118, 3125, 3111,
+ 3118, 3115, 3120, 3123, 3123, 3121, 3210, 3125, 3121, 3126,
+ 3122, 3122, 3135, 3123, 3124, 3127, 3126, 3135, 3132, 3124,
+ 3129, 3128, 3131, 0, 3130, 3125, 3132, 3133, 3127, 3136,
+ 3123, 3123, 3130, 3129, 3136, 3131, 3126, 3138, 3210, 3139,
+ 0, 3140, 3127, 3141, 3135, 3132, 3133, 3129, 3130, 3131,
+ 3137, 3130, 3142, 3145, 3133, 3143, 3146, 0, 3137, 3130,
+
+ 3144, 3136, 0, 3146, 3138, 3139, 3139, 3140, 3140, 3141,
+ 3141, 3144, 3147, 3147, 3148, 3145, 3149, 3137, 3142, 3142,
+ 3145, 3143, 3143, 3146, 3150, 3151, 3152, 3144, 3154, 3149,
+ 3155, 3153, 3148, 3151, 3158, 3154, 3159, 3155, 3156, 3147,
+ 3160, 3148, 3161, 3149, 3162, 3156, 3150, 3163, 3152, 3153,
+ 3164, 3150, 3151, 3152, 3161, 3154, 3167, 3155, 3153, 3168,
+ 3169, 3158, 3170, 3159, 3160, 3156, 3165, 3160, 3163, 3161,
+ 3172, 3162, 3164, 3173, 3163, 3165, 3174, 3164, 3175, 3168,
+ 3176, 3177, 3180, 3167, 3170, 3181, 3168, 3169, 3182, 3170,
+ 3185, 3173, 3179, 3165, 3174, 3183, 3184, 3172, 3176, 3177,
+
+ 3173, 3179, 3186, 3174, 3184, 3175, 3185, 3176, 3177, 3180,
+ 3190, 3182, 3181, 3183, 3186, 3182, 3188, 3185, 3187, 3179,
+ 3191, 3188, 3183, 3184, 3190, 3187, 3192, 3194, 3198, 3186,
+ 3199, 3200, 3202, 3203, 3204, 3207, 3204, 3190, 3191, 3194,
+ 3208, 3211, 3205, 3220, 3200, 3187, 3203, 3191, 3188, 3192,
+ 3198, 3205, 3209, 3192, 3194, 3198, 3211, 3199, 3200, 3202,
+ 3203, 3204, 3207, 3215, 3216, 3215, 3217, 3208, 3211, 3205,
+ 3209, 3219, 3222, 3226, 3224, 3220, 0, 3236, 3219, 3209,
+ 3224, 3227, 0, 3228, 3217, 3231, 3216, 3222, 3229, 3233,
+ 3215, 3216, 3237, 3217, 3238, 3226, 0, 3232, 3219, 3222,
+
+ 3226, 3224, 3233, 3227, 3236, 3239, 3229, 3231, 3227, 3228,
+ 3228, 3232, 3231, 0, 3234, 3229, 3233, 3234, 3240, 3237,
+ 3241, 3238, 3244, 3239, 3232, 3240, 3242, 0, 3241, 3245,
+ 3246, 3247, 3239, 3248, 3249, 3253, 3254, 3250, 3254, 3255,
+ 3234, 3234, 3248, 3250, 3234, 3240, 3251, 3241, 3242, 3249,
+ 3252, 3245, 3246, 3242, 3244, 3257, 3245, 3246, 3247, 3252,
+ 3248, 3249, 3258, 3254, 3250, 3259, 3255, 3253, 3251, 3260,
+ 3267, 3261, 0, 3251, 3262, 3273, 3263, 3252, 3257, 3261,
+ 3269, 3272, 3257, 3265, 3258, 3270, 3262, 3259, 3263, 3258,
+ 3265, 3271, 3259, 3273, 3269, 3260, 3260, 3267, 3261, 3270,
+
+ 3274, 3262, 3273, 3263, 3272, 3271, 3275, 3269, 3272, 3276,
+ 3265, 3274, 3270, 3277, 3275, 3278, 3279, 3282, 3271, 3280,
+ 3281, 3284, 3278, 3279, 3283, 3283, 3282, 3274, 3276, 3285,
+ 3293, 3286, 3289, 3275, 3292, 3277, 3276, 3289, 3281, 3286,
+ 3277, 3290, 3278, 3279, 3282, 3280, 3280, 3281, 3284, 3294,
+ 3298, 3283, 3300, 3296, 3290, 3292, 3285, 3293, 3286, 3296,
+ 3301, 3292, 3303, 3300, 3289, 3308, 3305, 3304, 3290, 3312,
+ 3311, 3301, 3310, 3312, 3309, 0, 3294, 3298, 3304, 3300,
+ 3296, 3309, 3313, 3314, 3303, 3316, 3320, 3301, 3305, 3303,
+ 3310, 3314, 3308, 3305, 3304, 3317, 3312, 3318, 3319, 3310,
+
+ 3322, 3309, 3311, 3325, 3326, 3318, 3331, 3319, 3317, 3313,
+ 3314, 3316, 3316, 3320, 3324, 3329, 3330, 3330, 3332, 3335,
+ 3329, 3324, 3317, 3334, 3318, 3319, 3326, 3333, 3336, 3337,
+ 3334, 3326, 3322, 3331, 3339, 3325, 3343, 3341, 3335, 3333,
+ 3340, 3324, 3329, 3330, 3336, 3332, 3335, 3337, 3340, 3344,
+ 3334, 3338, 3341, 3342, 3333, 3336, 3337, 3345, 3338, 3346,
+ 3342, 3344, 3347, 3343, 3341, 3335, 3339, 3340, 3352, 3353,
+ 3351, 3354, 3355, 3356, 0, 3352, 3344, 3360, 3338, 3362,
+ 3342, 3345, 3357, 3346, 3345, 3351, 3346, 3362, 3347, 3347,
+ 3359, 3357, 3361, 3363, 3365, 3352, 3355, 3351, 3354, 3355,
+
+ 3367, 3353, 3371, 3376, 3360, 3356, 3362, 3368, 3374, 3357,
+ 3364, 3364, 3359, 3377, 3361, 3367, 3368, 3359, 3370, 3361,
+ 3364, 3365, 3369, 3372, 3369, 3363, 3374, 3367, 3373, 3371,
+ 3376, 3372, 3370, 3378, 3368, 3374, 3379, 3364, 3364, 3373,
+ 3377, 3380, 3381, 3382, 3383, 3370, 3384, 3385, 3386, 3369,
+ 3372, 3393, 3387, 3389, 3380, 3373, 3388, 3388, 3379, 3390,
+ 3378, 3394, 3396, 3379, 3381, 3385, 3387, 3397, 3380, 3381,
+ 3382, 3383, 3394, 3384, 3385, 3386, 3400, 3402, 3393, 3387,
+ 3406, 3390, 3402, 3388, 3400, 3389, 3390, 3403, 3394, 3396,
+ 3404, 3405, 3403, 3408, 3397, 3411, 3405, 3410, 3404, 3409,
+
+ 3409, 3414, 3413, 3400, 3402, 3410, 3406, 3406, 3411, 3413,
+ 3415, 3416, 3417, 3420, 3403, 3427, 3419, 3404, 3405, 3414,
+ 3408, 3427, 3411, 3421, 3410, 3419, 3409, 3423, 3414, 3413,
+ 3421, 3424, 3422, 3428, 3430, 3417, 0, 3415, 3416, 3417,
+ 3422, 3431, 3427, 3419, 3432, 3420, 3433, 3434, 3435, 3423,
+ 3421, 0, 3436, 3424, 3423, 3437, 0, 3432, 3424, 3422,
+ 3428, 3430, 3434, 3431, 3439, 3441, 3440, 3435, 3431, 3442,
+ 3444, 3432, 3441, 3443, 3434, 3435, 3442, 3437, 3433, 3436,
+ 3445, 3448, 3437, 3447, 3455, 3444, 3460, 3439, 3440, 3448,
+ 3455, 3439, 3441, 3440, 3452, 3443, 3442, 3444, 3449, 3450,
+
+ 3443, 3445, 3447, 3452, 3453, 3449, 3450, 3445, 3448, 0,
+ 3447, 3455, 3454, 3454, 3456, 3453, 3458, 3459, 3460, 3465,
+ 3461, 3452, 3454, 3463, 3459, 3449, 3450, 3464, 3469, 3470,
+ 3463, 3453, 3477, 3465, 3471, 3480, 3456, 3475, 3458, 3454,
+ 3454, 3456, 3461, 3458, 3459, 3478, 3465, 3461, 3485, 3475,
+ 3463, 3464, 3479, 3482, 3464, 3469, 3470, 3471, 3488, 3477,
+ 3479, 3471, 3480, 3490, 3475, 3482, 3492, 3478, 3487, 3487,
+ 3489, 3489, 3478, 3493, 3494, 3485, 3496, 3499, 3495, 3479,
+ 3482, 3500, 3504, 0, 0, 3488, 3490, 3495, 3492, 3496,
+ 3490, 3493, 3503, 3492, 3509, 3501, 3509, 3487, 3510, 3489,
+
+ 3493, 3494, 3501, 3496, 3499, 3495, 3502, 3500, 3500, 3504,
+ 3506, 3505, 3511, 3502, 3503, 3513, 3512, 3506, 3510, 3503,
+ 3505, 3509, 3501, 3515, 3516, 3510, 3517, 3513, 3519, 3518,
+ 3520, 3521, 3515, 3502, 3512, 3511, 3522, 3506, 3505, 3511,
+ 3523, 3524, 3513, 3512, 3524, 3526, 3516, 3518, 3522, 3528,
+ 3515, 3516, 3530, 3517, 3519, 3519, 3518, 3520, 3521, 3524,
+ 3525, 3528, 3523, 3522, 3527, 3525, 3527, 3523, 3524, 3529,
+ 3532, 3524, 3531, 3533, 3530, 3529, 3528, 3526, 3532, 3530,
+ 3534, 3535, 3536, 3537, 3539, 0, 3538, 3542, 3543, 3545,
+ 3550, 3527, 3525, 3551, 3531, 3548, 3529, 3532, 3538, 3531,
+
+ 3533, 3543, 3535, 3546, 3548, 3552, 3539, 3553, 3535, 3536,
+ 3537, 3539, 3534, 3538, 3542, 3543, 3545, 3550, 3555, 3556,
+ 3551, 3546, 3548, 3557, 3558, 3559, 3559, 3562, 3564, 3561,
+ 3546, 3565, 3552, 3566, 3553, 3567, 3570, 3572, 0, 0,
+ 3577, 3569, 3567, 3576, 0, 3555, 3556, 3561, 3566, 3565,
+ 3557, 3558, 3559, 3569, 3562, 3564, 3561, 3571, 3565, 3573,
+ 3566, 3574, 3567, 3570, 3572, 3571, 3575, 3577, 3569, 3576,
+ 3576, 3573, 3580, 3579, 3583, 3574, 3585, 3585, 3584, 0,
+ 3586, 3575, 3587, 3583, 3571, 3579, 3573, 3589, 3574, 3590,
+ 3592, 3587, 0, 3575, 0, 3591, 3593, 0, 3598, 3580,
+
+ 3579, 3583, 3584, 3585, 3593, 3584, 3586, 3586, 3591, 3587,
+ 3594, 3589, 3592, 3595, 3589, 3597, 3598, 3592, 3601, 3594,
+ 3602, 3590, 3591, 3593, 3595, 3598, 3604, 3606, 3606, 3616,
+ 0, 3607, 3602, 3617, 3620, 3621, 3597, 3594, 3607, 3622,
+ 3595, 3601, 3597, 3623, 3625, 3601, 3627, 3602, 3620, 3628,
+ 3627, 3616, 3604, 3604, 3606, 3629, 3616, 3617, 3607, 3634,
+ 3617, 3620, 3621, 3634, 3632, 3630, 3622, 3628, 3635, 0,
+ 3623, 3625, 3630, 3627, 3636, 3637, 3628, 3632, 3629, 3639,
+ 3640, 3638, 3629, 3644, 3635, 3644, 3634, 3643, 0, 3641,
+ 3642, 3632, 3630, 3638, 3640, 3635, 3636, 3641, 3643, 3642,
+
+ 3637, 3636, 3637, 3645, 3646, 3639, 3639, 3640, 3638, 3647,
+ 3644, 3648, 3649, 3650, 3643, 3645, 3641, 3642, 3649, 3651,
+ 3653, 3652, 3646, 3655, 3647, 3654, 3662, 3661, 3650, 3652,
+ 3645, 3646, 3654, 3648, 3661, 3664, 3647, 3665, 3648, 3649,
+ 3650, 3651, 3660, 3663, 3666, 3655, 3651, 3653, 3652, 3667,
+ 3655, 3668, 3654, 3662, 3661, 3660, 3670, 3671, 3669, 3668,
+ 3672, 3663, 3664, 3665, 3665, 3669, 3673, 3675, 3673, 3660,
+ 3663, 3666, 0, 3678, 3674, 3676, 3667, 3677, 3668, 3671,
+ 3670, 3679, 3672, 3670, 3671, 3669, 3674, 3672, 3676, 3680,
+ 3681, 3682, 3677, 3673, 3683, 3678, 3680, 3685, 3686, 3675,
+
+ 3678, 3674, 3676, 3687, 3677, 3688, 3692, 3690, 3679, 3695,
+ 3686, 3687, 3696, 3699, 3700, 3692, 3680, 3681, 3682, 3690,
+ 3698, 3683, 3697, 3702, 3685, 3686, 3704, 3701, 3698, 3705,
+ 3687, 3707, 3688, 3692, 3690, 3703, 3695, 3702, 3696, 3696,
+ 3701, 3697, 3715, 3703, 3716, 3699, 3700, 3698, 3704, 3697,
+ 3702, 3712, 3713, 3704, 3701, 3715, 3705, 3712, 3707, 3713,
+ 3719, 3718, 3703, 3721, 3720, 3723, 3722, 3716, 3718, 3715,
+ 0, 3716, 3720, 3723, 3724, 3725, 3726, 3721, 3712, 3713,
+ 3722, 3731, 3719, 3732, 3733, 3730, 3734, 3719, 3718, 3731,
+ 3721, 3720, 3723, 3722, 3730, 3735, 3724, 3725, 3729, 0,
+
+ 3740, 3724, 3725, 3726, 3736, 3729, 3733, 3737, 3731, 3739,
+ 3732, 3733, 3730, 3738, 3742, 3743, 3744, 3739, 3734, 0,
+ 3747, 3735, 3735, 3746, 3748, 3729, 3736, 3751, 3747, 3737,
+ 3749, 3736, 3740, 3757, 3737, 3738, 3739, 3743, 3749, 3755,
+ 3738, 3742, 3743, 3744, 3748, 3750, 3746, 3747, 3752, 3753,
+ 3746, 3748, 3758, 3750, 3760, 3758, 3752, 3749, 3759, 3751,
+ 3757, 3761, 3760, 3753, 3762, 3755, 3755, 3763, 3764, 3761,
+ 3758, 3768, 3750, 3765, 0, 3752, 3753, 0, 3762, 3758,
+ 3759, 3760, 3758, 3767, 3767, 3759, 3770, 3765, 3761, 3771,
+ 3764, 3762, 3772, 3763, 3763, 3764, 3769, 3768, 3768, 3774,
+
+ 3765, 3773, 3775, 3776, 3769, 3778, 3777, 3774, 0, 3785,
+ 3767, 0, 3770, 3770, 3772, 3771, 3771, 3779, 3780, 3772,
+ 3782, 3773, 0, 3769, 3788, 3776, 3774, 3781, 3773, 3775,
+ 3776, 3777, 3778, 3777, 3789, 3781, 3785, 3779, 3780, 3792,
+ 3783, 3786, 3782, 3794, 3779, 3780, 3788, 3782, 3783, 3786,
+ 3790, 3788, 3791, 3798, 3781, 3795, 3789, 3797, 3790, 3801,
+ 3791, 3789, 0, 3795, 3796, 3792, 3792, 3783, 3786, 3799,
+ 3794, 3802, 3796, 3803, 3811, 3805, 0, 3790, 3812, 3791,
+ 3798, 3808, 3795, 3797, 3797, 0, 3801, 3809, 0, 3799,
+ 0, 3796, 0, 3803, 0, 3809, 3799, 3805, 3802, 3810,
+
+ 3803, 3811, 3805, 3808, 0, 3812, 0, 3810, 3808, 0,
+ 0, 0, 0, 0, 3809, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3810, 3816, 3816, 3816,
+ 3816, 3816, 3816, 3816, 3817, 3817, 3817, 3817, 3817, 3817,
+ 3817, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3819, 3819,
+ 3819, 3819, 3819, 3819, 3819, 3820, 3820, 3820, 3820, 3820,
+ 3820, 3820, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3822,
+ 3822, 3822, 3822, 3822, 3822, 3822, 3824, 3824, 0, 3824,
+ 3824, 3824, 3824, 3825, 3825, 0, 0, 0, 3825, 3825,
+ 3826, 3826, 0, 0, 3826, 0, 3826, 3827, 0, 0,
+
+ 0, 0, 0, 3827, 3828, 3828, 0, 0, 0, 3828,
+ 3828, 3829, 0, 0, 0, 0, 0, 3829, 3830, 3830,
+ 0, 3830, 3830, 3830, 3830, 3831, 0, 0, 0, 0,
+ 0, 3831, 3832, 3832, 0, 0, 0, 3832, 3832, 3833,
+ 3833, 0, 3833, 3833, 3833, 3833, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+
+ 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815,
+ 3815, 3815, 3815
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+static int yy_more_flag = 0;
+static int yy_more_len = 0;
+#define yymore() ((yy_more_flag) = 1)
+#define YY_MORE_ADJ (yy_more_len)
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "util/configlexer.lex"
+#line 2 "util/configlexer.lex"
+/*
+ * configlexer.lex - lexical analyzer for unbound config file
+ *
+ * Copyright (c) 2001-2006, NLnet Labs. All rights reserved
+ *
+ * See LICENSE for the license.
+ *
+ */
+
+/* because flex keeps having sign-unsigned compare problems that are unfixed*/
+#if defined(__clang__)||(defined(__GNUC__)&&((__GNUC__ >4)||(defined(__GNUC_MINOR__)&&(__GNUC__ ==4)&&(__GNUC_MINOR__ >=2))))
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#endif
+
+#include <ctype.h>
+#include <strings.h>
+#ifdef HAVE_GLOB_H
+# include <glob.h>
+#endif
+
+#include "util/config_file.h"
+#include "util/configparser.h"
+void ub_c_error(const char *message);
+
+#if 0
+#define LEXOUT(s) printf s /* used ONLY when debugging */
+#else
+#define LEXOUT(s)
+#endif
+
+/** avoid warning in about fwrite return value */
+#define ECHO ub_c_error_msg("syntax error at text: %s", yytext)
+
+/** A parser variable, this is a statement in the config file which is
+ * of the form variable: value1 value2 ... nargs is the number of values. */
+#define YDVAR(nargs, var) \
+ num_args=(nargs); \
+ LEXOUT(("v(%s%d) ", yytext, num_args)); \
+ if(num_args > 0) { BEGIN(val); } \
+ return (var);
+
+struct inc_state {
+ char* filename;
+ int line;
+ YY_BUFFER_STATE buffer;
+ struct inc_state* next;
+ int inc_toplevel;
+};
+static struct inc_state* config_include_stack = NULL;
+static int inc_depth = 0;
+static int inc_prev = 0;
+static int num_args = 0;
+static int inc_toplevel = 0;
+
+void init_cfg_parse(void)
+{
+ config_include_stack = NULL;
+ inc_depth = 0;
+ inc_prev = 0;
+ num_args = 0;
+ inc_toplevel = 0;
+}
+
+static void config_start_include(const char* filename, int toplevel)
+{
+ FILE *input;
+ struct inc_state* s;
+ char* nm;
+ if(inc_depth+1 > 100000) {
+ ub_c_error_msg("too many include files");
+ return;
+ }
+ if(*filename == '\0') {
+ ub_c_error_msg("empty include file name");
+ return;
+ }
+ s = (struct inc_state*)malloc(sizeof(*s));
+ if(!s) {
+ ub_c_error_msg("include %s: malloc failure", filename);
+ return;
+ }
+ if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot,
+ strlen(cfg_parser->chroot)) == 0) {
+ filename += strlen(cfg_parser->chroot);
+ }
+ nm = strdup(filename);
+ if(!nm) {
+ ub_c_error_msg("include %s: strdup failure", filename);
+ free(s);
+ return;
+ }
+ input = fopen(filename, "r");
+ if(!input) {
+ ub_c_error_msg("cannot open include file '%s': %s",
+ filename, strerror(errno));
+ free(s);
+ free(nm);
+ return;
+ }
+ LEXOUT(("switch_to_include_file(%s)\n", filename));
+ inc_depth++;
+ s->filename = cfg_parser->filename;
+ s->line = cfg_parser->line;
+ s->buffer = YY_CURRENT_BUFFER;
+ s->inc_toplevel = inc_toplevel;
+ s->next = config_include_stack;
+ config_include_stack = s;
+ cfg_parser->filename = nm;
+ cfg_parser->line = 1;
+ inc_toplevel = toplevel;
+ yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE));
+}
+
+static void config_start_include_glob(const char* filename, int toplevel)
+{
+
+ /* check for wildcards */
+#ifdef HAVE_GLOB
+ glob_t g;
+ int i, r, flags;
+ if(!(!strchr(filename, '*') && !strchr(filename, '?') && !strchr(filename, '[') &&
+ !strchr(filename, '{') && !strchr(filename, '~'))) {
+ flags = 0
+#ifdef GLOB_ERR
+ | GLOB_ERR
+#endif
+ /* do not set GLOB_NOSORT so the results are sorted
+ and in a predictable order. */
+#ifdef GLOB_BRACE
+ | GLOB_BRACE
+#endif
+#ifdef GLOB_TILDE
+ | GLOB_TILDE
+#endif
+ ;
+ memset(&g, 0, sizeof(g));
+ if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot,
+ strlen(cfg_parser->chroot)) == 0) {
+ filename += strlen(cfg_parser->chroot);
+ }
+ r = glob(filename, flags, NULL, &g);
+ if(r) {
+ /* some error */
+ globfree(&g);
+ if(r == GLOB_NOMATCH)
+ return; /* no matches for pattern */
+ config_start_include(filename, toplevel); /* let original deal with it */
+ return;
+ }
+ /* process files found, if any */
+ for(i=(int)g.gl_pathc-1; i>=0; i--) {
+ config_start_include(g.gl_pathv[i], toplevel);
+ }
+ globfree(&g);
+ return;
+ }
+#endif /* HAVE_GLOB */
+
+ config_start_include(filename, toplevel);
+}
+
+static void config_end_include(void)
+{
+ struct inc_state* s = config_include_stack;
+ --inc_depth;
+ if(!s) return;
+ free(cfg_parser->filename);
+ cfg_parser->filename = s->filename;
+ cfg_parser->line = s->line;
+ yy_delete_buffer(YY_CURRENT_BUFFER);
+ yy_switch_to_buffer(s->buffer);
+ config_include_stack = s->next;
+ inc_toplevel = s->inc_toplevel;
+ free(s);
+}
+
+#ifndef yy_set_bol /* compat definition, for flex 2.4.6 */
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \
+ }
+#endif
+
+#line 4296 "<stdout>"
+#define YY_NO_INPUT 1
+#line 191 "util/configlexer.lex"
+#ifndef YY_NO_UNPUT
+#define YY_NO_UNPUT 1
+#endif
+#ifndef YY_NO_INPUT
+#define YY_NO_INPUT 1
+#endif
+#line 4305 "<stdout>"
+
+#line 4307 "<stdout>"
+
+#define INITIAL 0
+#define quotedstring 1
+#define singlequotedstr 2
+#define include 3
+#define include_quoted 4
+#define val 5
+#define include_toplevel 6
+#define include_toplevel_quoted 7
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals ( void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy ( void );
+
+int yyget_debug ( void );
+
+void yyset_debug ( int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra ( void );
+
+void yyset_extra ( YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in ( void );
+
+void yyset_in ( FILE * _in_str );
+
+FILE *yyget_out ( void );
+
+void yyset_out ( FILE * _out_str );
+
+ int yyget_leng ( void );
+
+char *yyget_text ( void );
+
+int yyget_lineno ( void );
+
+void yyset_lineno ( int _line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap ( void );
+#else
+extern int yywrap ( void );
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy ( char *, const char *, int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen ( const char * );
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput ( void );
+#else
+static int input ( void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
+#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ int n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK /*LINTED*/break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ yy_state_type yy_current_state;
+ char *yy_cp, *yy_bp;
+ int yy_act;
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ {
+#line 211 "util/configlexer.lex"
+
+#line 4531 "<stdout>"
+
+ while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
+ {
+ (yy_more_len) = 0;
+ if ( (yy_more_flag) )
+ {
+ (yy_more_len) = (int) ((yy_c_buf_p) - (yytext_ptr));
+ (yy_more_flag) = 0;
+ }
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ 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 >= 3816 )
+ 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] != 10847 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 212 "util/configlexer.lex"
+{
+ LEXOUT(("SP ")); /* ignore */ }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 214 "util/configlexer.lex"
+{
+ /* note that flex makes the longest match and '.' is any but not nl */
+ LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 217 "util/configlexer.lex"
+{ YDVAR(0, VAR_SERVER) }
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 218 "util/configlexer.lex"
+{ YDVAR(1, VAR_QNAME_MINIMISATION) }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 219 "util/configlexer.lex"
+{ YDVAR(1, VAR_QNAME_MINIMISATION_STRICT) }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 220 "util/configlexer.lex"
+{ YDVAR(1, VAR_NUM_THREADS) }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 221 "util/configlexer.lex"
+{ YDVAR(1, VAR_VERBOSITY) }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 222 "util/configlexer.lex"
+{ YDVAR(1, VAR_PORT) }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 223 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_RANGE) }
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 224 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 225 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 226 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_NUM_TCP) }
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 227 "util/configlexer.lex"
+{ YDVAR(1, VAR_INCOMING_NUM_TCP) }
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 228 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_IP4) }
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 229 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_IP6) }
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 230 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NAT64) }
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 231 "util/configlexer.lex"
+{ YDVAR(1, VAR_PREFER_IP4) }
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 232 "util/configlexer.lex"
+{ YDVAR(1, VAR_PREFER_IP6) }
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 233 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_UDP) }
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 234 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_TCP) }
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 235 "util/configlexer.lex"
+{ YDVAR(1, VAR_TCP_UPSTREAM) }
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 236 "util/configlexer.lex"
+{ YDVAR(1, VAR_TCP_MSS) }
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 237 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_TCP_MSS) }
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 238 "util/configlexer.lex"
+{ YDVAR(1, VAR_TCP_IDLE_TIMEOUT) }
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 239 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_REUSE_TCP_QUERIES) }
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 240 "util/configlexer.lex"
+{ YDVAR(1, VAR_TCP_REUSE_TIMEOUT) }
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 241 "util/configlexer.lex"
+{ YDVAR(1, VAR_TCP_AUTH_QUERY_TIMEOUT) }
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 242 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) }
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 243 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) }
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 244 "util/configlexer.lex"
+{ YDVAR(1, VAR_SOCK_QUEUE_TIMEOUT) }
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 245 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_UPSTREAM) }
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 246 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_UPSTREAM) }
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 247 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_SERVICE_KEY) }
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 248 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_SERVICE_KEY) }
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 249 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_SERVICE_PEM) }
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 250 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_SERVICE_PEM) }
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 251 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_PORT) }
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 252 "util/configlexer.lex"
+{ YDVAR(1, VAR_SSL_PORT) }
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 253 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_CERT_BUNDLE) }
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 254 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_CERT_BUNDLE) }
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 255 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_WIN_CERT) }
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 256 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_WIN_CERT) }
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 257 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 258 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 259 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 260 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 261 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 262 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_CIPHERS) }
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 263 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_CIPHERSUITES) }
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 264 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_USE_SNI) }
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 265 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTPS_PORT) }
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 266 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_ENDPOINT) }
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 267 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_MAX_STREAMS) }
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 268 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) }
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 269 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) }
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 270 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_NODELAY) }
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 271 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) }
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 272 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_SYSTEMD) }
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 273 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 274 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE) }
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 275 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE) }
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 276 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 277 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 278 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC_PORTS) }
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 279 "util/configlexer.lex"
+{ YDVAR(1, VAR_SO_RCVBUF) }
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 280 "util/configlexer.lex"
+{ YDVAR(1, VAR_SO_SNDBUF) }
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 281 "util/configlexer.lex"
+{ YDVAR(1, VAR_SO_REUSEPORT) }
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 282 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_TRANSPARENT) }
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 283 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_FREEBIND) }
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 284 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_DSCP) }
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 285 "util/configlexer.lex"
+{ YDVAR(1, VAR_CHROOT) }
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 286 "util/configlexer.lex"
+{ YDVAR(1, VAR_USERNAME) }
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 287 "util/configlexer.lex"
+{ YDVAR(1, VAR_DIRECTORY) }
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 288 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOGFILE) }
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 289 "util/configlexer.lex"
+{ YDVAR(1, VAR_PIDFILE) }
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 290 "util/configlexer.lex"
+{ YDVAR(1, VAR_ROOT_HINTS) }
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 291 "util/configlexer.lex"
+{ YDVAR(1, VAR_STREAM_WAIT_SIZE) }
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 292 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 293 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 294 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 295 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 296 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 297 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 298 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 299 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 300 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 301 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 302 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 303 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 304 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 305 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 306 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 307 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_MAX_RTT) }
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 308 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_KEEP_PROBING) }
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 309 "util/configlexer.lex"
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 310 "util/configlexer.lex"
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 311 "util/configlexer.lex"
+{ YDVAR(1, VAR_DELAY_CLOSE) }
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 312 "util/configlexer.lex"
+{ YDVAR(1, VAR_UDP_CONNECT) }
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 313 "util/configlexer.lex"
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 314 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 315 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 316 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_GLUE) }
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 317 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 318 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 319 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 320 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 321 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_UNKNOWN_ADDITIONAL) }
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 322 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 323 "util/configlexer.lex"
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 324 "util/configlexer.lex"
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 325 "util/configlexer.lex"
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 326 "util/configlexer.lex"
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 327 "util/configlexer.lex"
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 328 "util/configlexer.lex"
+{ YDVAR(1, VAR_PREFETCH_KEY) }
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 329 "util/configlexer.lex"
+{ YDVAR(1, VAR_PREFETCH) }
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 330 "util/configlexer.lex"
+{ YDVAR(1, VAR_DENY_ANY) }
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 331 "util/configlexer.lex"
+{ YDVAR(0, VAR_STUB_ZONE) }
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 332 "util/configlexer.lex"
+{ YDVAR(1, VAR_NAME) }
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 333 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_ADDR) }
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 334 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_HOST) }
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 335 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_PRIME) }
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 336 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_FIRST) }
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 337 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_NO_CACHE) }
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 338 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 339 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+ YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 340 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) }
+ YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 341 "util/configlexer.lex"
+{ YDVAR(0, VAR_FORWARD_ZONE) }
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 342 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_ADDR) }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 343 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_HOST) }
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 344 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_FIRST) }
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 345 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 346 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 347 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 348 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) }
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 349 "util/configlexer.lex"
+{ YDVAR(0, VAR_AUTH_ZONE) }
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 350 "util/configlexer.lex"
+{ YDVAR(0, VAR_RPZ) }
+ YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 351 "util/configlexer.lex"
+{ YDVAR(1, VAR_TAGS) }
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 352 "util/configlexer.lex"
+{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 353 "util/configlexer.lex"
+{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 354 "util/configlexer.lex"
+{ YDVAR(1, VAR_RPZ_LOG) }
+ YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 355 "util/configlexer.lex"
+{ YDVAR(1, VAR_RPZ_LOG_NAME) }
+ YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 356 "util/configlexer.lex"
+{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) }
+ YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 357 "util/configlexer.lex"
+{ YDVAR(1, VAR_ZONEFILE) }
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 358 "util/configlexer.lex"
+{ YDVAR(1, VAR_MASTER) }
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 359 "util/configlexer.lex"
+{ YDVAR(1, VAR_MASTER) }
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 360 "util/configlexer.lex"
+{ YDVAR(1, VAR_URL) }
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 361 "util/configlexer.lex"
+{ YDVAR(1, VAR_ALLOW_NOTIFY) }
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 362 "util/configlexer.lex"
+{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 363 "util/configlexer.lex"
+{ YDVAR(1, VAR_FOR_UPSTREAM) }
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 364 "util/configlexer.lex"
+{ YDVAR(1, VAR_FALLBACK_ENABLED) }
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 365 "util/configlexer.lex"
+{ YDVAR(0, VAR_VIEW) }
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 366 "util/configlexer.lex"
+{ YDVAR(1, VAR_VIEW_FIRST) }
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 367 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 368 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 369 "util/configlexer.lex"
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 370 "util/configlexer.lex"
+{ YDVAR(2, VAR_INTERFACE_ACTION) }
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 371 "util/configlexer.lex"
+{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 372 "util/configlexer.lex"
+{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 373 "util/configlexer.lex"
+{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 374 "util/configlexer.lex"
+{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 375 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 376 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 377 "util/configlexer.lex"
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 378 "util/configlexer.lex"
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 379 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 380 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 381 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 382 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_VERSION) }
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 383 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 384 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) }
+ YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 385 "util/configlexer.lex"
+{ YDVAR(1, VAR_IDENTITY) }
+ YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 386 "util/configlexer.lex"
+{ YDVAR(1, VAR_VERSION) }
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 387 "util/configlexer.lex"
+{ YDVAR(1, VAR_HTTP_USER_AGENT) }
+ YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 388 "util/configlexer.lex"
+{ YDVAR(1, VAR_MODULE_CONF) }
+ YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 389 "util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR) }
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 390 "util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 391 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 392 "util/configlexer.lex"
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 393 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+ YY_BREAK
+case 180:
+YY_RULE_SETUP
+#line 394 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 395 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 396 "util/configlexer.lex"
+{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
+ YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 397 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+ YY_BREAK
+case 184:
+YY_RULE_SETUP
+#line 398 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+ YY_BREAK
+case 185:
+YY_RULE_SETUP
+#line 399 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+ YY_BREAK
+case 186:
+YY_RULE_SETUP
+#line 400 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_MAX_RESTART) }
+ YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 401 "util/configlexer.lex"
+{ YDVAR(1, VAR_BOGUS_TTL) }
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 402 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+ YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 403 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+ YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 404 "util/configlexer.lex"
+{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
+ YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 405 "util/configlexer.lex"
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+ YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 406 "util/configlexer.lex"
+{ YDVAR(1, VAR_DISABLE_EDNS_DO) }
+ YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 407 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
+ YY_BREAK
+case 194:
+YY_RULE_SETUP
+#line 408 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
+ YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 409 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
+ YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 410 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
+ YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 411 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
+ YY_BREAK
+case 198:
+YY_RULE_SETUP
+#line 412 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) }
+ YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 413 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) }
+ YY_BREAK
+case 200:
+YY_RULE_SETUP
+#line 414 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAKE_DSA) }
+ YY_BREAK
+case 201:
+YY_RULE_SETUP
+#line 415 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAKE_SHA1) }
+ YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 416 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+ YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 417 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+ YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 418 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+ YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 419 "util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+ YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 420 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+ YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 422 "util/configlexer.lex"
+{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) }
+ YY_BREAK
+case 208:
+YY_RULE_SETUP
+#line 423 "util/configlexer.lex"
+{ YDVAR(1, VAR_ZONEMD_CHECK) }
+ YY_BREAK
+case 209:
+YY_RULE_SETUP
+#line 424 "util/configlexer.lex"
+{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) }
+ YY_BREAK
+case 210:
+YY_RULE_SETUP
+#line 425 "util/configlexer.lex"
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+ YY_BREAK
+case 211:
+YY_RULE_SETUP
+#line 426 "util/configlexer.lex"
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+ YY_BREAK
+case 212:
+YY_RULE_SETUP
+#line 427 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEEP_MISSING) }
+ YY_BREAK
+case 213:
+YY_RULE_SETUP
+#line 428 "util/configlexer.lex"
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+ YY_BREAK
+case 214:
+YY_RULE_SETUP
+#line 429 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_SYSLOG) }
+ YY_BREAK
+case 215:
+YY_RULE_SETUP
+#line 430 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_IDENTITY) }
+ YY_BREAK
+case 216:
+YY_RULE_SETUP
+#line 431 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+ YY_BREAK
+case 217:
+YY_RULE_SETUP
+#line 432 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_QUERIES) }
+ YY_BREAK
+case 218:
+YY_RULE_SETUP
+#line 433 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_REPLIES) }
+ YY_BREAK
+case 219:
+YY_RULE_SETUP
+#line 434 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
+ YY_BREAK
+case 220:
+YY_RULE_SETUP
+#line 435 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
+ YY_BREAK
+case 221:
+YY_RULE_SETUP
+#line 436 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_SERVFAIL) }
+ YY_BREAK
+case 222:
+YY_RULE_SETUP
+#line 437 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_DESTADDR) }
+ YY_BREAK
+case 223:
+YY_RULE_SETUP
+#line 438 "util/configlexer.lex"
+{ YDVAR(2, VAR_LOCAL_ZONE) }
+ YY_BREAK
+case 224:
+YY_RULE_SETUP
+#line 439 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOCAL_DATA) }
+ YY_BREAK
+case 225:
+YY_RULE_SETUP
+#line 440 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+ YY_BREAK
+case 226:
+YY_RULE_SETUP
+#line 441 "util/configlexer.lex"
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+ YY_BREAK
+case 227:
+YY_RULE_SETUP
+#line 442 "util/configlexer.lex"
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+ YY_BREAK
+case 228:
+YY_RULE_SETUP
+#line 443 "util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+ YY_BREAK
+case 229:
+YY_RULE_SETUP
+#line 444 "util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+ YY_BREAK
+case 230:
+YY_RULE_SETUP
+#line 445 "util/configlexer.lex"
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+ YY_BREAK
+case 231:
+YY_RULE_SETUP
+#line 446 "util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_INHIBIT_ZERO) }
+ YY_BREAK
+case 232:
+YY_RULE_SETUP
+#line 447 "util/configlexer.lex"
+{ YDVAR(1, VAR_SHM_ENABLE) }
+ YY_BREAK
+case 233:
+YY_RULE_SETUP
+#line 448 "util/configlexer.lex"
+{ YDVAR(1, VAR_SHM_KEY) }
+ YY_BREAK
+case 234:
+YY_RULE_SETUP
+#line 449 "util/configlexer.lex"
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
+ YY_BREAK
+case 235:
+YY_RULE_SETUP
+#line 450 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
+ YY_BREAK
+case 236:
+YY_RULE_SETUP
+#line 451 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+ YY_BREAK
+case 237:
+YY_RULE_SETUP
+#line 452 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_PORT) }
+ YY_BREAK
+case 238:
+YY_RULE_SETUP
+#line 453 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+ YY_BREAK
+case 239:
+YY_RULE_SETUP
+#line 454 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+ YY_BREAK
+case 240:
+YY_RULE_SETUP
+#line 455 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+ YY_BREAK
+case 241:
+YY_RULE_SETUP
+#line 456 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+ YY_BREAK
+case 242:
+YY_RULE_SETUP
+#line 457 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+ YY_BREAK
+case 243:
+YY_RULE_SETUP
+#line 458 "util/configlexer.lex"
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+ YY_BREAK
+case 244:
+YY_RULE_SETUP
+#line 459 "util/configlexer.lex"
+{ YDVAR(0, VAR_PYTHON) }
+ YY_BREAK
+case 245:
+YY_RULE_SETUP
+#line 460 "util/configlexer.lex"
+{ YDVAR(1, VAR_DYNLIB_FILE) }
+ YY_BREAK
+case 246:
+YY_RULE_SETUP
+#line 461 "util/configlexer.lex"
+{ YDVAR(0, VAR_DYNLIB) }
+ YY_BREAK
+case 247:
+YY_RULE_SETUP
+#line 462 "util/configlexer.lex"
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+ YY_BREAK
+case 248:
+YY_RULE_SETUP
+#line 463 "util/configlexer.lex"
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+ YY_BREAK
+case 249:
+YY_RULE_SETUP
+#line 464 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+ YY_BREAK
+case 250:
+YY_RULE_SETUP
+#line 465 "util/configlexer.lex"
+{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
+ YY_BREAK
+case 251:
+YY_RULE_SETUP
+#line 466 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+ YY_BREAK
+case 252:
+YY_RULE_SETUP
+#line 467 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNS64_PREFIX) }
+ YY_BREAK
+case 253:
+YY_RULE_SETUP
+#line 468 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+ YY_BREAK
+case 254:
+YY_RULE_SETUP
+#line 469 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
+ YY_BREAK
+case 255:
+YY_RULE_SETUP
+#line 470 "util/configlexer.lex"
+{ YDVAR(1, VAR_NAT64_PREFIX) }
+ YY_BREAK
+case 256:
+YY_RULE_SETUP
+#line 471 "util/configlexer.lex"
+{ YDVAR(1, VAR_DEFINE_TAG) }
+ YY_BREAK
+case 257:
+YY_RULE_SETUP
+#line 472 "util/configlexer.lex"
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+ YY_BREAK
+case 258:
+YY_RULE_SETUP
+#line 473 "util/configlexer.lex"
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+ YY_BREAK
+case 259:
+YY_RULE_SETUP
+#line 474 "util/configlexer.lex"
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+ YY_BREAK
+case 260:
+YY_RULE_SETUP
+#line 475 "util/configlexer.lex"
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+ YY_BREAK
+case 261:
+YY_RULE_SETUP
+#line 476 "util/configlexer.lex"
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+ YY_BREAK
+case 262:
+YY_RULE_SETUP
+#line 477 "util/configlexer.lex"
+{ YDVAR(2, VAR_INTERFACE_TAG) }
+ YY_BREAK
+case 263:
+YY_RULE_SETUP
+#line 478 "util/configlexer.lex"
+{ YDVAR(3, VAR_INTERFACE_TAG_ACTION) }
+ YY_BREAK
+case 264:
+YY_RULE_SETUP
+#line 479 "util/configlexer.lex"
+{ YDVAR(3, VAR_INTERFACE_TAG_DATA) }
+ YY_BREAK
+case 265:
+YY_RULE_SETUP
+#line 480 "util/configlexer.lex"
+{ YDVAR(2, VAR_INTERFACE_VIEW) }
+ YY_BREAK
+case 266:
+YY_RULE_SETUP
+#line 481 "util/configlexer.lex"
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+ YY_BREAK
+case 267:
+YY_RULE_SETUP
+#line 482 "util/configlexer.lex"
+{ YDVAR(0, VAR_DNSTAP) }
+ YY_BREAK
+case 268:
+YY_RULE_SETUP
+#line 483 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+ YY_BREAK
+case 269:
+YY_RULE_SETUP
+#line 484 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
+ YY_BREAK
+case 270:
+YY_RULE_SETUP
+#line 485 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+ YY_BREAK
+case 271:
+YY_RULE_SETUP
+#line 486 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_IP) }
+ YY_BREAK
+case 272:
+YY_RULE_SETUP
+#line 487 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_TLS) }
+ YY_BREAK
+case 273:
+YY_RULE_SETUP
+#line 488 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
+ YY_BREAK
+case 274:
+YY_RULE_SETUP
+#line 489 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
+ YY_BREAK
+case 275:
+YY_RULE_SETUP
+#line 490 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
+ YY_BREAK
+case 276:
+YY_RULE_SETUP
+#line 492 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
+ YY_BREAK
+case 277:
+YY_RULE_SETUP
+#line 494 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+ YY_BREAK
+case 278:
+YY_RULE_SETUP
+#line 495 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+ YY_BREAK
+case 279:
+YY_RULE_SETUP
+#line 496 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+ YY_BREAK
+case 280:
+YY_RULE_SETUP
+#line 497 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
+ YY_BREAK
+case 281:
+YY_RULE_SETUP
+#line 498 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+ YY_BREAK
+case 282:
+YY_RULE_SETUP
+#line 500 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+ YY_BREAK
+case 283:
+YY_RULE_SETUP
+#line 502 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+ YY_BREAK
+case 284:
+YY_RULE_SETUP
+#line 504 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+ YY_BREAK
+case 285:
+YY_RULE_SETUP
+#line 506 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+ YY_BREAK
+case 286:
+YY_RULE_SETUP
+#line 508 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+ YY_BREAK
+case 287:
+YY_RULE_SETUP
+#line 510 "util/configlexer.lex"
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+ YY_BREAK
+case 288:
+YY_RULE_SETUP
+#line 511 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT) }
+ YY_BREAK
+case 289:
+YY_RULE_SETUP
+#line 512 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) }
+ YY_BREAK
+case 290:
+YY_RULE_SETUP
+#line 513 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT) }
+ YY_BREAK
+case 291:
+YY_RULE_SETUP
+#line 514 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
+ YY_BREAK
+case 292:
+YY_RULE_SETUP
+#line 515 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+ YY_BREAK
+case 293:
+YY_RULE_SETUP
+#line 516 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
+ YY_BREAK
+case 294:
+YY_RULE_SETUP
+#line 517 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+ YY_BREAK
+case 295:
+YY_RULE_SETUP
+#line 518 "util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+ YY_BREAK
+case 296:
+YY_RULE_SETUP
+#line 519 "util/configlexer.lex"
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+ YY_BREAK
+case 297:
+YY_RULE_SETUP
+#line 520 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+ YY_BREAK
+case 298:
+YY_RULE_SETUP
+#line 521 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+ YY_BREAK
+case 299:
+YY_RULE_SETUP
+#line 522 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) }
+ YY_BREAK
+case 300:
+YY_RULE_SETUP
+#line 523 "util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_BACKOFF) }
+ YY_BREAK
+case 301:
+YY_RULE_SETUP
+#line 524 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
+ YY_BREAK
+case 302:
+YY_RULE_SETUP
+#line 525 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_SENT_COUNT) }
+ YY_BREAK
+case 303:
+YY_RULE_SETUP
+#line 526 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) }
+ YY_BREAK
+case 304:
+YY_RULE_SETUP
+#line 527 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOW_RTT) }
+ YY_BREAK
+case 305:
+YY_RULE_SETUP
+#line 528 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_NUM) }
+ YY_BREAK
+case 306:
+YY_RULE_SETUP
+#line 529 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+ YY_BREAK
+case 307:
+YY_RULE_SETUP
+#line 530 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+ YY_BREAK
+case 308:
+YY_RULE_SETUP
+#line 531 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+ YY_BREAK
+case 309:
+YY_RULE_SETUP
+#line 532 "util/configlexer.lex"
+{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
+ YY_BREAK
+case 310:
+YY_RULE_SETUP
+#line 533 "util/configlexer.lex"
+{ YDVAR(2, VAR_RESPONSE_IP) }
+ YY_BREAK
+case 311:
+YY_RULE_SETUP
+#line 534 "util/configlexer.lex"
+{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
+ YY_BREAK
+case 312:
+YY_RULE_SETUP
+#line 535 "util/configlexer.lex"
+{ YDVAR(0, VAR_DNSCRYPT) }
+ YY_BREAK
+case 313:
+YY_RULE_SETUP
+#line 536 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
+ YY_BREAK
+case 314:
+YY_RULE_SETUP
+#line 537 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PORT) }
+ YY_BREAK
+case 315:
+YY_RULE_SETUP
+#line 538 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
+ YY_BREAK
+case 316:
+YY_RULE_SETUP
+#line 539 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
+ YY_BREAK
+case 317:
+YY_RULE_SETUP
+#line 540 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+ YY_BREAK
+case 318:
+YY_RULE_SETUP
+#line 541 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
+ YY_BREAK
+case 319:
+YY_RULE_SETUP
+#line 542 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
+ YY_BREAK
+case 320:
+YY_RULE_SETUP
+#line 544 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
+ YY_BREAK
+case 321:
+YY_RULE_SETUP
+#line 546 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
+ YY_BREAK
+case 322:
+YY_RULE_SETUP
+#line 547 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
+ YY_BREAK
+case 323:
+YY_RULE_SETUP
+#line 548 "util/configlexer.lex"
+{ YDVAR(1, VAR_PAD_RESPONSES) }
+ YY_BREAK
+case 324:
+YY_RULE_SETUP
+#line 549 "util/configlexer.lex"
+{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
+ YY_BREAK
+case 325:
+YY_RULE_SETUP
+#line 550 "util/configlexer.lex"
+{ YDVAR(1, VAR_PAD_QUERIES) }
+ YY_BREAK
+case 326:
+YY_RULE_SETUP
+#line 551 "util/configlexer.lex"
+{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
+ YY_BREAK
+case 327:
+YY_RULE_SETUP
+#line 552 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
+ YY_BREAK
+case 328:
+YY_RULE_SETUP
+#line 553 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
+ YY_BREAK
+case 329:
+YY_RULE_SETUP
+#line 554 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_HOOK) }
+ YY_BREAK
+case 330:
+YY_RULE_SETUP
+#line 555 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
+ YY_BREAK
+case 331:
+YY_RULE_SETUP
+#line 556 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+ YY_BREAK
+case 332:
+YY_RULE_SETUP
+#line 557 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+ YY_BREAK
+case 333:
+YY_RULE_SETUP
+#line 558 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSECMOD_STRICT) }
+ YY_BREAK
+case 334:
+YY_RULE_SETUP
+#line 559 "util/configlexer.lex"
+{ YDVAR(0, VAR_CACHEDB) }
+ YY_BREAK
+case 335:
+YY_RULE_SETUP
+#line 560 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
+ YY_BREAK
+case 336:
+YY_RULE_SETUP
+#line 561 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
+ YY_BREAK
+case 337:
+YY_RULE_SETUP
+#line 562 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_NO_STORE) }
+ YY_BREAK
+case 338:
+YY_RULE_SETUP
+#line 563 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
+ YY_BREAK
+case 339:
+YY_RULE_SETUP
+#line 564 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
+ YY_BREAK
+case 340:
+YY_RULE_SETUP
+#line 565 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISPATH) }
+ YY_BREAK
+case 341:
+YY_RULE_SETUP
+#line 566 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) }
+ YY_BREAK
+case 342:
+YY_RULE_SETUP
+#line 567 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
+ YY_BREAK
+case 343:
+YY_RULE_SETUP
+#line 568 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
+ YY_BREAK
+case 344:
+YY_RULE_SETUP
+#line 569 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) }
+ YY_BREAK
+case 345:
+YY_RULE_SETUP
+#line 570 "util/configlexer.lex"
+{ YDVAR(0, VAR_IPSET) }
+ YY_BREAK
+case 346:
+YY_RULE_SETUP
+#line 571 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSET_NAME_V4) }
+ YY_BREAK
+case 347:
+YY_RULE_SETUP
+#line 572 "util/configlexer.lex"
+{ YDVAR(1, VAR_IPSET_NAME_V6) }
+ YY_BREAK
+case 348:
+YY_RULE_SETUP
+#line 573 "util/configlexer.lex"
+{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+ YY_BREAK
+case 349:
+YY_RULE_SETUP
+#line 574 "util/configlexer.lex"
+{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
+ YY_BREAK
+case 350:
+YY_RULE_SETUP
+#line 575 "util/configlexer.lex"
+{ YDVAR(1, VAR_ANSWER_COOKIE ) }
+ YY_BREAK
+case 351:
+YY_RULE_SETUP
+#line 576 "util/configlexer.lex"
+{ YDVAR(1, VAR_COOKIE_SECRET) }
+ YY_BREAK
+case 352:
+YY_RULE_SETUP
+#line 577 "util/configlexer.lex"
+{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
+ YY_BREAK
+case 353:
+YY_RULE_SETUP
+#line 578 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
+ YY_BREAK
+case 354:
+YY_RULE_SETUP
+#line 579 "util/configlexer.lex"
+{ YDVAR(1, VAR_NSID ) }
+ YY_BREAK
+case 355:
+YY_RULE_SETUP
+#line 580 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDE ) }
+ YY_BREAK
+case 356:
+YY_RULE_SETUP
+#line 581 "util/configlexer.lex"
+{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
+ YY_BREAK
+case 357:
+/* rule 357 can match eol */
+YY_RULE_SETUP
+#line 582 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
+ YY_BREAK
+/* Quoted strings. Strip leading and ending quotes */
+case 358:
+YY_RULE_SETUP
+#line 585 "util/configlexer.lex"
+{ BEGIN(quotedstring); LEXOUT(("QS ")); }
+ YY_BREAK
+case YY_STATE_EOF(quotedstring):
+#line 586 "util/configlexer.lex"
+{
+ yyerror("EOF inside quoted string");
+ if(--num_args == 0) { BEGIN(INITIAL); }
+ else { BEGIN(val); }
+}
+ YY_BREAK
+case 359:
+YY_RULE_SETUP
+#line 591 "util/configlexer.lex"
+{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
+ YY_BREAK
+case 360:
+/* rule 360 can match eol */
+YY_RULE_SETUP
+#line 592 "util/configlexer.lex"
+{ yyerror("newline inside quoted string, no end \"");
+ cfg_parser->line++; BEGIN(INITIAL); }
+ YY_BREAK
+case 361:
+YY_RULE_SETUP
+#line 594 "util/configlexer.lex"
+{
+ LEXOUT(("QE "));
+ if(--num_args == 0) { BEGIN(INITIAL); }
+ else { BEGIN(val); }
+ yytext[yyleng - 1] = '\0';
+ yylval.str = strdup(yytext);
+ if(!yylval.str)
+ yyerror("out of memory");
+ return STRING_ARG;
+}
+ YY_BREAK
+/* Single Quoted strings. Strip leading and ending quotes */
+case 362:
+YY_RULE_SETUP
+#line 606 "util/configlexer.lex"
+{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
+ YY_BREAK
+case YY_STATE_EOF(singlequotedstr):
+#line 607 "util/configlexer.lex"
+{
+ yyerror("EOF inside quoted string");
+ if(--num_args == 0) { BEGIN(INITIAL); }
+ else { BEGIN(val); }
+}
+ YY_BREAK
+case 363:
+YY_RULE_SETUP
+#line 612 "util/configlexer.lex"
+{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
+ YY_BREAK
+case 364:
+/* rule 364 can match eol */
+YY_RULE_SETUP
+#line 613 "util/configlexer.lex"
+{ yyerror("newline inside quoted string, no end '");
+ cfg_parser->line++; BEGIN(INITIAL); }
+ YY_BREAK
+case 365:
+YY_RULE_SETUP
+#line 615 "util/configlexer.lex"
+{
+ LEXOUT(("SQE "));
+ if(--num_args == 0) { BEGIN(INITIAL); }
+ else { BEGIN(val); }
+ yytext[yyleng - 1] = '\0';
+ yylval.str = strdup(yytext);
+ if(!yylval.str)
+ yyerror("out of memory");
+ return STRING_ARG;
+}
+ YY_BREAK
+/* include: directive */
+case 366:
+YY_RULE_SETUP
+#line 627 "util/configlexer.lex"
+{
+ LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
+ YY_BREAK
+case YY_STATE_EOF(include):
+#line 629 "util/configlexer.lex"
+{
+ yyerror("EOF inside include directive");
+ BEGIN(inc_prev);
+}
+ YY_BREAK
+case 367:
+YY_RULE_SETUP
+#line 633 "util/configlexer.lex"
+{ LEXOUT(("ISP ")); /* ignore */ }
+ YY_BREAK
+case 368:
+/* rule 368 can match eol */
+YY_RULE_SETUP
+#line 634 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
+ YY_BREAK
+case 369:
+YY_RULE_SETUP
+#line 635 "util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+ YY_BREAK
+case 370:
+YY_RULE_SETUP
+#line 636 "util/configlexer.lex"
+{
+ LEXOUT(("Iunquotedstr(%s) ", yytext));
+ config_start_include_glob(yytext, 0);
+ BEGIN(inc_prev);
+}
+ YY_BREAK
+case YY_STATE_EOF(include_quoted):
+#line 641 "util/configlexer.lex"
+{
+ yyerror("EOF inside quoted string");
+ BEGIN(inc_prev);
+}
+ YY_BREAK
+case 371:
+YY_RULE_SETUP
+#line 645 "util/configlexer.lex"
+{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
+ YY_BREAK
+case 372:
+/* rule 372 can match eol */
+YY_RULE_SETUP
+#line 646 "util/configlexer.lex"
+{ yyerror("newline before \" in include name");
+ cfg_parser->line++; BEGIN(inc_prev); }
+ YY_BREAK
+case 373:
+YY_RULE_SETUP
+#line 648 "util/configlexer.lex"
+{
+ LEXOUT(("IQE "));
+ yytext[yyleng - 1] = '\0';
+ config_start_include_glob(yytext, 0);
+ BEGIN(inc_prev);
+}
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(val):
+#line 654 "util/configlexer.lex"
+{
+ LEXOUT(("LEXEOF "));
+ yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
+ if (!config_include_stack) {
+ yyterminate();
+ } else {
+ int prev_toplevel = inc_toplevel;
+ fclose(yyin);
+ config_end_include();
+ if(prev_toplevel) return (VAR_FORCE_TOPLEVEL);
+ }
+}
+ YY_BREAK
+/* include-toplevel: directive */
+case 374:
+YY_RULE_SETUP
+#line 668 "util/configlexer.lex"
+{
+ LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
+}
+ YY_BREAK
+case YY_STATE_EOF(include_toplevel):
+#line 671 "util/configlexer.lex"
+{
+ yyerror("EOF inside include_toplevel directive");
+ BEGIN(inc_prev);
+}
+ YY_BREAK
+case 375:
+YY_RULE_SETUP
+#line 675 "util/configlexer.lex"
+{ LEXOUT(("ITSP ")); /* ignore */ }
+ YY_BREAK
+case 376:
+/* rule 376 can match eol */
+YY_RULE_SETUP
+#line 676 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
+ YY_BREAK
+case 377:
+YY_RULE_SETUP
+#line 677 "util/configlexer.lex"
+{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
+ YY_BREAK
+case 378:
+YY_RULE_SETUP
+#line 678 "util/configlexer.lex"
+{
+ LEXOUT(("ITunquotedstr(%s) ", yytext));
+ config_start_include_glob(yytext, 1);
+ BEGIN(inc_prev);
+ return (VAR_FORCE_TOPLEVEL);
+}
+ YY_BREAK
+case YY_STATE_EOF(include_toplevel_quoted):
+#line 684 "util/configlexer.lex"
+{
+ yyerror("EOF inside quoted string");
+ BEGIN(inc_prev);
+}
+ YY_BREAK
+case 379:
+YY_RULE_SETUP
+#line 688 "util/configlexer.lex"
+{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
+ YY_BREAK
+case 380:
+/* rule 380 can match eol */
+YY_RULE_SETUP
+#line 689 "util/configlexer.lex"
+{
+ yyerror("newline before \" in include name");
+ cfg_parser->line++; BEGIN(inc_prev);
+}
+ YY_BREAK
+case 381:
+YY_RULE_SETUP
+#line 693 "util/configlexer.lex"
+{
+ LEXOUT(("ITQE "));
+ yytext[yyleng - 1] = '\0';
+ config_start_include_glob(yytext, 1);
+ BEGIN(inc_prev);
+ return (VAR_FORCE_TOPLEVEL);
+}
+ YY_BREAK
+case 382:
+YY_RULE_SETUP
+#line 701 "util/configlexer.lex"
+{ LEXOUT(("unquotedstr(%s) ", yytext));
+ if(--num_args == 0) { BEGIN(INITIAL); }
+ yylval.str = strdup(yytext); return STRING_ARG; }
+ YY_BREAK
+case 383:
+YY_RULE_SETUP
+#line 705 "util/configlexer.lex"
+{
+ ub_c_error_msg("unknown keyword '%s'", yytext);
+ }
+ YY_BREAK
+case 384:
+YY_RULE_SETUP
+#line 709 "util/configlexer.lex"
+{
+ ub_c_error_msg("stray '%s'", yytext);
+ }
+ YY_BREAK
+case 385:
+YY_RULE_SETUP
+#line 713 "util/configlexer.lex"
+ECHO;
+ YY_BREAK
+#line 6657 "<stdout>"
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+ } /* end of user's declarations */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ char *source = (yytext_ptr);
+ int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ int num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc( (void *) b->yy_ch_buf,
+ (yy_size_t) (b->yy_buf_size + 2) );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = NULL;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart( yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
+ (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ /* "- 2" to take care of EOB's */
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ yy_state_type yy_current_state;
+ char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ 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 >= 3816 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ int yy_is_jam;
+ char *yy_cp = (yy_c_buf_p);
+
+ YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ 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 >= 3816 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ yy_is_jam = (yy_current_state == 3815);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+#ifndef YY_NO_UNPUT
+
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return 0;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+ }
+
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer( b, file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree( (void *) b->yy_ch_buf );
+
+ yyfree( (void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ yy_size_t grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return NULL;
+
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = NULL;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer( b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
+{
+
+ return yy_scan_bytes( yystr, (int) strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = (yy_size_t) (_yybytes_len + 2);
+ buf = (char *) yyalloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer( buf, n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yynoreturn yy_fatal_error (const char* msg )
+{
+ fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+int yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param _line_number line number
+ *
+ */
+void yyset_lineno (int _line_number )
+{
+
+ yylineno = _line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param _in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * _in_str )
+{
+ yyin = _in_str ;
+}
+
+void yyset_out (FILE * _out_str )
+{
+ yyout = _out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int _bdebug )
+{
+ yy_flex_debug = _bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = NULL;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = NULL;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = NULL;
+ yyout = NULL;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer( YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
+{
+
+ int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (const char * s )
+{
+ int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return malloc(size);
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return realloc(ptr, size);
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 713 "util/configlexer.lex"
+
+
diff --git a/contrib/unbound/util/configlexer.lex b/contrib/unbound/util/configlexer.lex
index 2265d51b64ef..c114678eafb3 100644
--- a/contrib/unbound/util/configlexer.lex
+++ b/contrib/unbound/util/configlexer.lex
@@ -435,6 +435,7 @@ log-replies{COLON} { YDVAR(1, VAR_LOG_REPLIES) }
log-tag-queryreply{COLON} { YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
log-local-actions{COLON} { YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
log-servfail{COLON} { YDVAR(1, VAR_LOG_SERVFAIL) }
+log-destaddr{COLON} { YDVAR(1, VAR_LOG_DESTADDR) }
local-zone{COLON} { YDVAR(2, VAR_LOCAL_ZONE) }
local-data{COLON} { YDVAR(1, VAR_LOCAL_DATA) }
local-data-ptr{COLON} { YDVAR(1, VAR_LOCAL_DATA_PTR) }
diff --git a/contrib/unbound/util/configparser.c b/contrib/unbound/util/configparser.c
new file mode 100644
index 000000000000..71f3ae46678a
--- /dev/null
+++ b/contrib/unbound/util/configparser.c
@@ -0,0 +1,7713 @@
+/* A Bison parser, made by GNU Bison 3.7.6. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
+
+ This program 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
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output, and Bison version. */
+#define YYBISON 30706
+
+/* Bison version string. */
+#define YYBISON_VERSION "3.7.6"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* First part of user prologue. */
+#line 38 "util/configparser.y"
+
+#include "config.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "util/configyyrename.h"
+#include "util/config_file.h"
+#include "util/net_help.h"
+#include "sldns/str2wire.h"
+
+int ub_c_lex(void);
+void ub_c_error(const char *message);
+
+static void validate_respip_action(const char* action);
+static void validate_acl_action(const char* action);
+
+/* these need to be global, otherwise they cannot be used inside yacc */
+extern struct config_parser_state* cfg_parser;
+
+#if 0
+#define OUTYY(s) printf s /* used ONLY when debugging */
+#else
+#define OUTYY(s)
+#endif
+
+
+#line 102 "util/configparser.c"
+
+# ifndef YY_CAST
+# ifdef __cplusplus
+# define YY_CAST(Type, Val) static_cast<Type> (Val)
+# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+# else
+# define YY_CAST(Type, Val) ((Type) (Val))
+# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+# endif
+# endif
+# ifndef YY_NULLPTR
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
+# else
+# define YY_NULLPTR ((void*)0)
+# endif
+# endif
+
+#include "configparser.h"
+/* Symbol kind. */
+enum yysymbol_kind_t
+{
+ YYSYMBOL_YYEMPTY = -2,
+ YYSYMBOL_YYEOF = 0, /* "end of file" */
+ YYSYMBOL_YYerror = 1, /* error */
+ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
+ YYSYMBOL_SPACE = 3, /* SPACE */
+ YYSYMBOL_LETTER = 4, /* LETTER */
+ YYSYMBOL_NEWLINE = 5, /* NEWLINE */
+ YYSYMBOL_COMMENT = 6, /* COMMENT */
+ YYSYMBOL_COLON = 7, /* COLON */
+ YYSYMBOL_ANY = 8, /* ANY */
+ YYSYMBOL_ZONESTR = 9, /* ZONESTR */
+ YYSYMBOL_STRING_ARG = 10, /* STRING_ARG */
+ YYSYMBOL_VAR_FORCE_TOPLEVEL = 11, /* VAR_FORCE_TOPLEVEL */
+ YYSYMBOL_VAR_SERVER = 12, /* VAR_SERVER */
+ YYSYMBOL_VAR_VERBOSITY = 13, /* VAR_VERBOSITY */
+ YYSYMBOL_VAR_NUM_THREADS = 14, /* VAR_NUM_THREADS */
+ YYSYMBOL_VAR_PORT = 15, /* VAR_PORT */
+ YYSYMBOL_VAR_OUTGOING_RANGE = 16, /* VAR_OUTGOING_RANGE */
+ YYSYMBOL_VAR_INTERFACE = 17, /* VAR_INTERFACE */
+ YYSYMBOL_VAR_PREFER_IP4 = 18, /* VAR_PREFER_IP4 */
+ YYSYMBOL_VAR_DO_IP4 = 19, /* VAR_DO_IP4 */
+ YYSYMBOL_VAR_DO_IP6 = 20, /* VAR_DO_IP6 */
+ YYSYMBOL_VAR_DO_NAT64 = 21, /* VAR_DO_NAT64 */
+ YYSYMBOL_VAR_PREFER_IP6 = 22, /* VAR_PREFER_IP6 */
+ YYSYMBOL_VAR_DO_UDP = 23, /* VAR_DO_UDP */
+ YYSYMBOL_VAR_DO_TCP = 24, /* VAR_DO_TCP */
+ YYSYMBOL_VAR_TCP_MSS = 25, /* VAR_TCP_MSS */
+ YYSYMBOL_VAR_OUTGOING_TCP_MSS = 26, /* VAR_OUTGOING_TCP_MSS */
+ YYSYMBOL_VAR_TCP_IDLE_TIMEOUT = 27, /* VAR_TCP_IDLE_TIMEOUT */
+ YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE = 28, /* VAR_EDNS_TCP_KEEPALIVE */
+ YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 29, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */
+ YYSYMBOL_VAR_SOCK_QUEUE_TIMEOUT = 30, /* VAR_SOCK_QUEUE_TIMEOUT */
+ YYSYMBOL_VAR_CHROOT = 31, /* VAR_CHROOT */
+ YYSYMBOL_VAR_USERNAME = 32, /* VAR_USERNAME */
+ YYSYMBOL_VAR_DIRECTORY = 33, /* VAR_DIRECTORY */
+ YYSYMBOL_VAR_LOGFILE = 34, /* VAR_LOGFILE */
+ YYSYMBOL_VAR_PIDFILE = 35, /* VAR_PIDFILE */
+ YYSYMBOL_VAR_MSG_CACHE_SIZE = 36, /* VAR_MSG_CACHE_SIZE */
+ YYSYMBOL_VAR_MSG_CACHE_SLABS = 37, /* VAR_MSG_CACHE_SLABS */
+ YYSYMBOL_VAR_NUM_QUERIES_PER_THREAD = 38, /* VAR_NUM_QUERIES_PER_THREAD */
+ YYSYMBOL_VAR_RRSET_CACHE_SIZE = 39, /* VAR_RRSET_CACHE_SIZE */
+ YYSYMBOL_VAR_RRSET_CACHE_SLABS = 40, /* VAR_RRSET_CACHE_SLABS */
+ YYSYMBOL_VAR_OUTGOING_NUM_TCP = 41, /* VAR_OUTGOING_NUM_TCP */
+ YYSYMBOL_VAR_INFRA_HOST_TTL = 42, /* VAR_INFRA_HOST_TTL */
+ YYSYMBOL_VAR_INFRA_LAME_TTL = 43, /* VAR_INFRA_LAME_TTL */
+ YYSYMBOL_VAR_INFRA_CACHE_SLABS = 44, /* VAR_INFRA_CACHE_SLABS */
+ YYSYMBOL_VAR_INFRA_CACHE_NUMHOSTS = 45, /* VAR_INFRA_CACHE_NUMHOSTS */
+ YYSYMBOL_VAR_INFRA_CACHE_LAME_SIZE = 46, /* VAR_INFRA_CACHE_LAME_SIZE */
+ YYSYMBOL_VAR_NAME = 47, /* VAR_NAME */
+ YYSYMBOL_VAR_STUB_ZONE = 48, /* VAR_STUB_ZONE */
+ YYSYMBOL_VAR_STUB_HOST = 49, /* VAR_STUB_HOST */
+ YYSYMBOL_VAR_STUB_ADDR = 50, /* VAR_STUB_ADDR */
+ YYSYMBOL_VAR_TARGET_FETCH_POLICY = 51, /* VAR_TARGET_FETCH_POLICY */
+ YYSYMBOL_VAR_HARDEN_SHORT_BUFSIZE = 52, /* VAR_HARDEN_SHORT_BUFSIZE */
+ YYSYMBOL_VAR_HARDEN_LARGE_QUERIES = 53, /* VAR_HARDEN_LARGE_QUERIES */
+ YYSYMBOL_VAR_FORWARD_ZONE = 54, /* VAR_FORWARD_ZONE */
+ YYSYMBOL_VAR_FORWARD_HOST = 55, /* VAR_FORWARD_HOST */
+ YYSYMBOL_VAR_FORWARD_ADDR = 56, /* VAR_FORWARD_ADDR */
+ YYSYMBOL_VAR_DO_NOT_QUERY_ADDRESS = 57, /* VAR_DO_NOT_QUERY_ADDRESS */
+ YYSYMBOL_VAR_HIDE_IDENTITY = 58, /* VAR_HIDE_IDENTITY */
+ YYSYMBOL_VAR_HIDE_VERSION = 59, /* VAR_HIDE_VERSION */
+ YYSYMBOL_VAR_IDENTITY = 60, /* VAR_IDENTITY */
+ YYSYMBOL_VAR_VERSION = 61, /* VAR_VERSION */
+ YYSYMBOL_VAR_HARDEN_GLUE = 62, /* VAR_HARDEN_GLUE */
+ YYSYMBOL_VAR_MODULE_CONF = 63, /* VAR_MODULE_CONF */
+ YYSYMBOL_VAR_TRUST_ANCHOR_FILE = 64, /* VAR_TRUST_ANCHOR_FILE */
+ YYSYMBOL_VAR_TRUST_ANCHOR = 65, /* VAR_TRUST_ANCHOR */
+ YYSYMBOL_VAR_VAL_OVERRIDE_DATE = 66, /* VAR_VAL_OVERRIDE_DATE */
+ YYSYMBOL_VAR_BOGUS_TTL = 67, /* VAR_BOGUS_TTL */
+ YYSYMBOL_VAR_VAL_CLEAN_ADDITIONAL = 68, /* VAR_VAL_CLEAN_ADDITIONAL */
+ YYSYMBOL_VAR_VAL_PERMISSIVE_MODE = 69, /* VAR_VAL_PERMISSIVE_MODE */
+ YYSYMBOL_VAR_INCOMING_NUM_TCP = 70, /* VAR_INCOMING_NUM_TCP */
+ YYSYMBOL_VAR_MSG_BUFFER_SIZE = 71, /* VAR_MSG_BUFFER_SIZE */
+ YYSYMBOL_VAR_KEY_CACHE_SIZE = 72, /* VAR_KEY_CACHE_SIZE */
+ YYSYMBOL_VAR_KEY_CACHE_SLABS = 73, /* VAR_KEY_CACHE_SLABS */
+ YYSYMBOL_VAR_TRUSTED_KEYS_FILE = 74, /* VAR_TRUSTED_KEYS_FILE */
+ YYSYMBOL_VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 75, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */
+ YYSYMBOL_VAR_USE_SYSLOG = 76, /* VAR_USE_SYSLOG */
+ YYSYMBOL_VAR_OUTGOING_INTERFACE = 77, /* VAR_OUTGOING_INTERFACE */
+ YYSYMBOL_VAR_ROOT_HINTS = 78, /* VAR_ROOT_HINTS */
+ YYSYMBOL_VAR_DO_NOT_QUERY_LOCALHOST = 79, /* VAR_DO_NOT_QUERY_LOCALHOST */
+ YYSYMBOL_VAR_CACHE_MAX_TTL = 80, /* VAR_CACHE_MAX_TTL */
+ YYSYMBOL_VAR_HARDEN_DNSSEC_STRIPPED = 81, /* VAR_HARDEN_DNSSEC_STRIPPED */
+ YYSYMBOL_VAR_ACCESS_CONTROL = 82, /* VAR_ACCESS_CONTROL */
+ YYSYMBOL_VAR_LOCAL_ZONE = 83, /* VAR_LOCAL_ZONE */
+ YYSYMBOL_VAR_LOCAL_DATA = 84, /* VAR_LOCAL_DATA */
+ YYSYMBOL_VAR_INTERFACE_AUTOMATIC = 85, /* VAR_INTERFACE_AUTOMATIC */
+ YYSYMBOL_VAR_STATISTICS_INTERVAL = 86, /* VAR_STATISTICS_INTERVAL */
+ YYSYMBOL_VAR_DO_DAEMONIZE = 87, /* VAR_DO_DAEMONIZE */
+ YYSYMBOL_VAR_USE_CAPS_FOR_ID = 88, /* VAR_USE_CAPS_FOR_ID */
+ YYSYMBOL_VAR_STATISTICS_CUMULATIVE = 89, /* VAR_STATISTICS_CUMULATIVE */
+ YYSYMBOL_VAR_OUTGOING_PORT_PERMIT = 90, /* VAR_OUTGOING_PORT_PERMIT */
+ YYSYMBOL_VAR_OUTGOING_PORT_AVOID = 91, /* VAR_OUTGOING_PORT_AVOID */
+ YYSYMBOL_VAR_DLV_ANCHOR_FILE = 92, /* VAR_DLV_ANCHOR_FILE */
+ YYSYMBOL_VAR_DLV_ANCHOR = 93, /* VAR_DLV_ANCHOR */
+ YYSYMBOL_VAR_NEG_CACHE_SIZE = 94, /* VAR_NEG_CACHE_SIZE */
+ YYSYMBOL_VAR_HARDEN_REFERRAL_PATH = 95, /* VAR_HARDEN_REFERRAL_PATH */
+ YYSYMBOL_VAR_PRIVATE_ADDRESS = 96, /* VAR_PRIVATE_ADDRESS */
+ YYSYMBOL_VAR_PRIVATE_DOMAIN = 97, /* VAR_PRIVATE_DOMAIN */
+ YYSYMBOL_VAR_REMOTE_CONTROL = 98, /* VAR_REMOTE_CONTROL */
+ YYSYMBOL_VAR_CONTROL_ENABLE = 99, /* VAR_CONTROL_ENABLE */
+ YYSYMBOL_VAR_CONTROL_INTERFACE = 100, /* VAR_CONTROL_INTERFACE */
+ YYSYMBOL_VAR_CONTROL_PORT = 101, /* VAR_CONTROL_PORT */
+ YYSYMBOL_VAR_SERVER_KEY_FILE = 102, /* VAR_SERVER_KEY_FILE */
+ YYSYMBOL_VAR_SERVER_CERT_FILE = 103, /* VAR_SERVER_CERT_FILE */
+ YYSYMBOL_VAR_CONTROL_KEY_FILE = 104, /* VAR_CONTROL_KEY_FILE */
+ YYSYMBOL_VAR_CONTROL_CERT_FILE = 105, /* VAR_CONTROL_CERT_FILE */
+ YYSYMBOL_VAR_CONTROL_USE_CERT = 106, /* VAR_CONTROL_USE_CERT */
+ YYSYMBOL_VAR_TCP_REUSE_TIMEOUT = 107, /* VAR_TCP_REUSE_TIMEOUT */
+ YYSYMBOL_VAR_MAX_REUSE_TCP_QUERIES = 108, /* VAR_MAX_REUSE_TCP_QUERIES */
+ YYSYMBOL_VAR_EXTENDED_STATISTICS = 109, /* VAR_EXTENDED_STATISTICS */
+ YYSYMBOL_VAR_LOCAL_DATA_PTR = 110, /* VAR_LOCAL_DATA_PTR */
+ YYSYMBOL_VAR_JOSTLE_TIMEOUT = 111, /* VAR_JOSTLE_TIMEOUT */
+ YYSYMBOL_VAR_STUB_PRIME = 112, /* VAR_STUB_PRIME */
+ YYSYMBOL_VAR_UNWANTED_REPLY_THRESHOLD = 113, /* VAR_UNWANTED_REPLY_THRESHOLD */
+ YYSYMBOL_VAR_LOG_TIME_ASCII = 114, /* VAR_LOG_TIME_ASCII */
+ YYSYMBOL_VAR_DOMAIN_INSECURE = 115, /* VAR_DOMAIN_INSECURE */
+ YYSYMBOL_VAR_PYTHON = 116, /* VAR_PYTHON */
+ YYSYMBOL_VAR_PYTHON_SCRIPT = 117, /* VAR_PYTHON_SCRIPT */
+ YYSYMBOL_VAR_VAL_SIG_SKEW_MIN = 118, /* VAR_VAL_SIG_SKEW_MIN */
+ YYSYMBOL_VAR_VAL_SIG_SKEW_MAX = 119, /* VAR_VAL_SIG_SKEW_MAX */
+ YYSYMBOL_VAR_VAL_MAX_RESTART = 120, /* VAR_VAL_MAX_RESTART */
+ YYSYMBOL_VAR_CACHE_MIN_TTL = 121, /* VAR_CACHE_MIN_TTL */
+ YYSYMBOL_VAR_VAL_LOG_LEVEL = 122, /* VAR_VAL_LOG_LEVEL */
+ YYSYMBOL_VAR_AUTO_TRUST_ANCHOR_FILE = 123, /* VAR_AUTO_TRUST_ANCHOR_FILE */
+ YYSYMBOL_VAR_KEEP_MISSING = 124, /* VAR_KEEP_MISSING */
+ YYSYMBOL_VAR_ADD_HOLDDOWN = 125, /* VAR_ADD_HOLDDOWN */
+ YYSYMBOL_VAR_DEL_HOLDDOWN = 126, /* VAR_DEL_HOLDDOWN */
+ YYSYMBOL_VAR_SO_RCVBUF = 127, /* VAR_SO_RCVBUF */
+ YYSYMBOL_VAR_EDNS_BUFFER_SIZE = 128, /* VAR_EDNS_BUFFER_SIZE */
+ YYSYMBOL_VAR_PREFETCH = 129, /* VAR_PREFETCH */
+ YYSYMBOL_VAR_PREFETCH_KEY = 130, /* VAR_PREFETCH_KEY */
+ YYSYMBOL_VAR_SO_SNDBUF = 131, /* VAR_SO_SNDBUF */
+ YYSYMBOL_VAR_SO_REUSEPORT = 132, /* VAR_SO_REUSEPORT */
+ YYSYMBOL_VAR_HARDEN_BELOW_NXDOMAIN = 133, /* VAR_HARDEN_BELOW_NXDOMAIN */
+ YYSYMBOL_VAR_IGNORE_CD_FLAG = 134, /* VAR_IGNORE_CD_FLAG */
+ YYSYMBOL_VAR_LOG_QUERIES = 135, /* VAR_LOG_QUERIES */
+ YYSYMBOL_VAR_LOG_REPLIES = 136, /* VAR_LOG_REPLIES */
+ YYSYMBOL_VAR_LOG_LOCAL_ACTIONS = 137, /* VAR_LOG_LOCAL_ACTIONS */
+ YYSYMBOL_VAR_TCP_UPSTREAM = 138, /* VAR_TCP_UPSTREAM */
+ YYSYMBOL_VAR_SSL_UPSTREAM = 139, /* VAR_SSL_UPSTREAM */
+ YYSYMBOL_VAR_TCP_AUTH_QUERY_TIMEOUT = 140, /* VAR_TCP_AUTH_QUERY_TIMEOUT */
+ YYSYMBOL_VAR_SSL_SERVICE_KEY = 141, /* VAR_SSL_SERVICE_KEY */
+ YYSYMBOL_VAR_SSL_SERVICE_PEM = 142, /* VAR_SSL_SERVICE_PEM */
+ YYSYMBOL_VAR_SSL_PORT = 143, /* VAR_SSL_PORT */
+ YYSYMBOL_VAR_FORWARD_FIRST = 144, /* VAR_FORWARD_FIRST */
+ YYSYMBOL_VAR_STUB_SSL_UPSTREAM = 145, /* VAR_STUB_SSL_UPSTREAM */
+ YYSYMBOL_VAR_FORWARD_SSL_UPSTREAM = 146, /* VAR_FORWARD_SSL_UPSTREAM */
+ YYSYMBOL_VAR_TLS_CERT_BUNDLE = 147, /* VAR_TLS_CERT_BUNDLE */
+ YYSYMBOL_VAR_STUB_TCP_UPSTREAM = 148, /* VAR_STUB_TCP_UPSTREAM */
+ YYSYMBOL_VAR_FORWARD_TCP_UPSTREAM = 149, /* VAR_FORWARD_TCP_UPSTREAM */
+ YYSYMBOL_VAR_HTTPS_PORT = 150, /* VAR_HTTPS_PORT */
+ YYSYMBOL_VAR_HTTP_ENDPOINT = 151, /* VAR_HTTP_ENDPOINT */
+ YYSYMBOL_VAR_HTTP_MAX_STREAMS = 152, /* VAR_HTTP_MAX_STREAMS */
+ YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 153, /* VAR_HTTP_QUERY_BUFFER_SIZE */
+ YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 154, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
+ YYSYMBOL_VAR_HTTP_NODELAY = 155, /* VAR_HTTP_NODELAY */
+ YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 156, /* VAR_HTTP_NOTLS_DOWNSTREAM */
+ YYSYMBOL_VAR_STUB_FIRST = 157, /* VAR_STUB_FIRST */
+ YYSYMBOL_VAR_MINIMAL_RESPONSES = 158, /* VAR_MINIMAL_RESPONSES */
+ YYSYMBOL_VAR_RRSET_ROUNDROBIN = 159, /* VAR_RRSET_ROUNDROBIN */
+ YYSYMBOL_VAR_MAX_UDP_SIZE = 160, /* VAR_MAX_UDP_SIZE */
+ YYSYMBOL_VAR_DELAY_CLOSE = 161, /* VAR_DELAY_CLOSE */
+ YYSYMBOL_VAR_UDP_CONNECT = 162, /* VAR_UDP_CONNECT */
+ YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 163, /* VAR_UNBLOCK_LAN_ZONES */
+ YYSYMBOL_VAR_INSECURE_LAN_ZONES = 164, /* VAR_INSECURE_LAN_ZONES */
+ YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 165, /* VAR_INFRA_CACHE_MIN_RTT */
+ YYSYMBOL_VAR_INFRA_CACHE_MAX_RTT = 166, /* VAR_INFRA_CACHE_MAX_RTT */
+ YYSYMBOL_VAR_INFRA_KEEP_PROBING = 167, /* VAR_INFRA_KEEP_PROBING */
+ YYSYMBOL_VAR_DNS64_PREFIX = 168, /* VAR_DNS64_PREFIX */
+ YYSYMBOL_VAR_DNS64_SYNTHALL = 169, /* VAR_DNS64_SYNTHALL */
+ YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 170, /* VAR_DNS64_IGNORE_AAAA */
+ YYSYMBOL_VAR_NAT64_PREFIX = 171, /* VAR_NAT64_PREFIX */
+ YYSYMBOL_VAR_DNSTAP = 172, /* VAR_DNSTAP */
+ YYSYMBOL_VAR_DNSTAP_ENABLE = 173, /* VAR_DNSTAP_ENABLE */
+ YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 174, /* VAR_DNSTAP_SOCKET_PATH */
+ YYSYMBOL_VAR_DNSTAP_IP = 175, /* VAR_DNSTAP_IP */
+ YYSYMBOL_VAR_DNSTAP_TLS = 176, /* VAR_DNSTAP_TLS */
+ YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 177, /* VAR_DNSTAP_TLS_SERVER_NAME */
+ YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 178, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
+ YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 179, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
+ YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 180, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
+ YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 181, /* VAR_DNSTAP_SEND_IDENTITY */
+ YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 182, /* VAR_DNSTAP_SEND_VERSION */
+ YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 183, /* VAR_DNSTAP_BIDIRECTIONAL */
+ YYSYMBOL_VAR_DNSTAP_IDENTITY = 184, /* VAR_DNSTAP_IDENTITY */
+ YYSYMBOL_VAR_DNSTAP_VERSION = 185, /* VAR_DNSTAP_VERSION */
+ YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 186, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 187, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 188, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 189, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 190, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 191, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
+ YYSYMBOL_VAR_RESPONSE_IP_TAG = 192, /* VAR_RESPONSE_IP_TAG */
+ YYSYMBOL_VAR_RESPONSE_IP = 193, /* VAR_RESPONSE_IP */
+ YYSYMBOL_VAR_RESPONSE_IP_DATA = 194, /* VAR_RESPONSE_IP_DATA */
+ YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 195, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ YYSYMBOL_VAR_IP_TRANSPARENT = 196, /* VAR_IP_TRANSPARENT */
+ YYSYMBOL_VAR_IP_DSCP = 197, /* VAR_IP_DSCP */
+ YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 198, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ YYSYMBOL_VAR_IP_RATELIMIT = 199, /* VAR_IP_RATELIMIT */
+ YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 200, /* VAR_IP_RATELIMIT_SLABS */
+ YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 201, /* VAR_IP_RATELIMIT_SIZE */
+ YYSYMBOL_VAR_RATELIMIT = 202, /* VAR_RATELIMIT */
+ YYSYMBOL_VAR_RATELIMIT_SLABS = 203, /* VAR_RATELIMIT_SLABS */
+ YYSYMBOL_VAR_RATELIMIT_SIZE = 204, /* VAR_RATELIMIT_SIZE */
+ YYSYMBOL_VAR_OUTBOUND_MSG_RETRY = 205, /* VAR_OUTBOUND_MSG_RETRY */
+ YYSYMBOL_VAR_MAX_SENT_COUNT = 206, /* VAR_MAX_SENT_COUNT */
+ YYSYMBOL_VAR_MAX_QUERY_RESTARTS = 207, /* VAR_MAX_QUERY_RESTARTS */
+ YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 208, /* VAR_RATELIMIT_FOR_DOMAIN */
+ YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 209, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 210, /* VAR_IP_RATELIMIT_FACTOR */
+ YYSYMBOL_VAR_RATELIMIT_FACTOR = 211, /* VAR_RATELIMIT_FACTOR */
+ YYSYMBOL_VAR_IP_RATELIMIT_BACKOFF = 212, /* VAR_IP_RATELIMIT_BACKOFF */
+ YYSYMBOL_VAR_RATELIMIT_BACKOFF = 213, /* VAR_RATELIMIT_BACKOFF */
+ YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 214, /* VAR_SEND_CLIENT_SUBNET */
+ YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 215, /* VAR_CLIENT_SUBNET_ZONE */
+ YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 216, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 217, /* VAR_CLIENT_SUBNET_OPCODE */
+ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 218, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 219, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 220, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 221, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 222, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 223, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ YYSYMBOL_VAR_CAPS_WHITELIST = 224, /* VAR_CAPS_WHITELIST */
+ YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 225, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 226, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ YYSYMBOL_VAR_QNAME_MINIMISATION = 227, /* VAR_QNAME_MINIMISATION */
+ YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 228, /* VAR_QNAME_MINIMISATION_STRICT */
+ YYSYMBOL_VAR_IP_FREEBIND = 229, /* VAR_IP_FREEBIND */
+ YYSYMBOL_VAR_DEFINE_TAG = 230, /* VAR_DEFINE_TAG */
+ YYSYMBOL_VAR_LOCAL_ZONE_TAG = 231, /* VAR_LOCAL_ZONE_TAG */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 232, /* VAR_ACCESS_CONTROL_TAG */
+ YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 233, /* VAR_LOCAL_ZONE_OVERRIDE */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 234, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 235, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ YYSYMBOL_VAR_VIEW = 236, /* VAR_VIEW */
+ YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 237, /* VAR_ACCESS_CONTROL_VIEW */
+ YYSYMBOL_VAR_VIEW_FIRST = 238, /* VAR_VIEW_FIRST */
+ YYSYMBOL_VAR_SERVE_EXPIRED = 239, /* VAR_SERVE_EXPIRED */
+ YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 240, /* VAR_SERVE_EXPIRED_TTL */
+ YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 241, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 242, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 243, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ YYSYMBOL_VAR_EDE_SERVE_EXPIRED = 244, /* VAR_EDE_SERVE_EXPIRED */
+ YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 245, /* VAR_SERVE_ORIGINAL_TTL */
+ YYSYMBOL_VAR_FAKE_DSA = 246, /* VAR_FAKE_DSA */
+ YYSYMBOL_VAR_FAKE_SHA1 = 247, /* VAR_FAKE_SHA1 */
+ YYSYMBOL_VAR_LOG_IDENTITY = 248, /* VAR_LOG_IDENTITY */
+ YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 249, /* VAR_HIDE_TRUSTANCHOR */
+ YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 250, /* VAR_HIDE_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_HTTP_USER_AGENT = 251, /* VAR_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 252, /* VAR_TRUST_ANCHOR_SIGNALING */
+ YYSYMBOL_VAR_AGGRESSIVE_NSEC = 253, /* VAR_AGGRESSIVE_NSEC */
+ YYSYMBOL_VAR_USE_SYSTEMD = 254, /* VAR_USE_SYSTEMD */
+ YYSYMBOL_VAR_SHM_ENABLE = 255, /* VAR_SHM_ENABLE */
+ YYSYMBOL_VAR_SHM_KEY = 256, /* VAR_SHM_KEY */
+ YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 257, /* VAR_ROOT_KEY_SENTINEL */
+ YYSYMBOL_VAR_DNSCRYPT = 258, /* VAR_DNSCRYPT */
+ YYSYMBOL_VAR_DNSCRYPT_ENABLE = 259, /* VAR_DNSCRYPT_ENABLE */
+ YYSYMBOL_VAR_DNSCRYPT_PORT = 260, /* VAR_DNSCRYPT_PORT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 261, /* VAR_DNSCRYPT_PROVIDER */
+ YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 262, /* VAR_DNSCRYPT_SECRET_KEY */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 263, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 264, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 265, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 266, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 267, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 268, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ YYSYMBOL_VAR_PAD_RESPONSES = 269, /* VAR_PAD_RESPONSES */
+ YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 270, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ YYSYMBOL_VAR_PAD_QUERIES = 271, /* VAR_PAD_QUERIES */
+ YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 272, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ YYSYMBOL_VAR_IPSECMOD_ENABLED = 273, /* VAR_IPSECMOD_ENABLED */
+ YYSYMBOL_VAR_IPSECMOD_HOOK = 274, /* VAR_IPSECMOD_HOOK */
+ YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 275, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 276, /* VAR_IPSECMOD_MAX_TTL */
+ YYSYMBOL_VAR_IPSECMOD_WHITELIST = 277, /* VAR_IPSECMOD_WHITELIST */
+ YYSYMBOL_VAR_IPSECMOD_STRICT = 278, /* VAR_IPSECMOD_STRICT */
+ YYSYMBOL_VAR_CACHEDB = 279, /* VAR_CACHEDB */
+ YYSYMBOL_VAR_CACHEDB_BACKEND = 280, /* VAR_CACHEDB_BACKEND */
+ YYSYMBOL_VAR_CACHEDB_SECRETSEED = 281, /* VAR_CACHEDB_SECRETSEED */
+ YYSYMBOL_VAR_CACHEDB_REDISHOST = 282, /* VAR_CACHEDB_REDISHOST */
+ YYSYMBOL_VAR_CACHEDB_REDISPORT = 283, /* VAR_CACHEDB_REDISPORT */
+ YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 284, /* VAR_CACHEDB_REDISTIMEOUT */
+ YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 285, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ YYSYMBOL_VAR_CACHEDB_REDISPATH = 286, /* VAR_CACHEDB_REDISPATH */
+ YYSYMBOL_VAR_CACHEDB_REDISPASSWORD = 287, /* VAR_CACHEDB_REDISPASSWORD */
+ YYSYMBOL_VAR_CACHEDB_REDISLOGICALDB = 288, /* VAR_CACHEDB_REDISLOGICALDB */
+ YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 289, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ YYSYMBOL_VAR_FOR_UPSTREAM = 290, /* VAR_FOR_UPSTREAM */
+ YYSYMBOL_VAR_AUTH_ZONE = 291, /* VAR_AUTH_ZONE */
+ YYSYMBOL_VAR_ZONEFILE = 292, /* VAR_ZONEFILE */
+ YYSYMBOL_VAR_MASTER = 293, /* VAR_MASTER */
+ YYSYMBOL_VAR_URL = 294, /* VAR_URL */
+ YYSYMBOL_VAR_FOR_DOWNSTREAM = 295, /* VAR_FOR_DOWNSTREAM */
+ YYSYMBOL_VAR_FALLBACK_ENABLED = 296, /* VAR_FALLBACK_ENABLED */
+ YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 297, /* VAR_TLS_ADDITIONAL_PORT */
+ YYSYMBOL_VAR_LOW_RTT = 298, /* VAR_LOW_RTT */
+ YYSYMBOL_VAR_LOW_RTT_PERMIL = 299, /* VAR_LOW_RTT_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_PERMIL = 300, /* VAR_FAST_SERVER_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_NUM = 301, /* VAR_FAST_SERVER_NUM */
+ YYSYMBOL_VAR_ALLOW_NOTIFY = 302, /* VAR_ALLOW_NOTIFY */
+ YYSYMBOL_VAR_TLS_WIN_CERT = 303, /* VAR_TLS_WIN_CERT */
+ YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 304, /* VAR_TCP_CONNECTION_LIMIT */
+ YYSYMBOL_VAR_ANSWER_COOKIE = 305, /* VAR_ANSWER_COOKIE */
+ YYSYMBOL_VAR_COOKIE_SECRET = 306, /* VAR_COOKIE_SECRET */
+ YYSYMBOL_VAR_IP_RATELIMIT_COOKIE = 307, /* VAR_IP_RATELIMIT_COOKIE */
+ YYSYMBOL_VAR_FORWARD_NO_CACHE = 308, /* VAR_FORWARD_NO_CACHE */
+ YYSYMBOL_VAR_STUB_NO_CACHE = 309, /* VAR_STUB_NO_CACHE */
+ YYSYMBOL_VAR_LOG_SERVFAIL = 310, /* VAR_LOG_SERVFAIL */
+ YYSYMBOL_VAR_DENY_ANY = 311, /* VAR_DENY_ANY */
+ YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 312, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 313, /* VAR_LOG_TAG_QUERYREPLY */
+ YYSYMBOL_VAR_STREAM_WAIT_SIZE = 314, /* VAR_STREAM_WAIT_SIZE */
+ YYSYMBOL_VAR_TLS_CIPHERS = 315, /* VAR_TLS_CIPHERS */
+ YYSYMBOL_VAR_TLS_CIPHERSUITES = 316, /* VAR_TLS_CIPHERSUITES */
+ YYSYMBOL_VAR_TLS_USE_SNI = 317, /* VAR_TLS_USE_SNI */
+ YYSYMBOL_VAR_IPSET = 318, /* VAR_IPSET */
+ YYSYMBOL_VAR_IPSET_NAME_V4 = 319, /* VAR_IPSET_NAME_V4 */
+ YYSYMBOL_VAR_IPSET_NAME_V6 = 320, /* VAR_IPSET_NAME_V6 */
+ YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 321, /* VAR_TLS_SESSION_TICKET_KEYS */
+ YYSYMBOL_VAR_RPZ = 322, /* VAR_RPZ */
+ YYSYMBOL_VAR_TAGS = 323, /* VAR_TAGS */
+ YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 324, /* VAR_RPZ_ACTION_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 325, /* VAR_RPZ_CNAME_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_LOG = 326, /* VAR_RPZ_LOG */
+ YYSYMBOL_VAR_RPZ_LOG_NAME = 327, /* VAR_RPZ_LOG_NAME */
+ YYSYMBOL_VAR_DYNLIB = 328, /* VAR_DYNLIB */
+ YYSYMBOL_VAR_DYNLIB_FILE = 329, /* VAR_DYNLIB_FILE */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING = 330, /* VAR_EDNS_CLIENT_STRING */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 331, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ YYSYMBOL_VAR_NSID = 332, /* VAR_NSID */
+ YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 333, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ YYSYMBOL_VAR_ZONEMD_CHECK = 334, /* VAR_ZONEMD_CHECK */
+ YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 335, /* VAR_ZONEMD_REJECT_ABSENCE */
+ YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 336, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 337, /* VAR_INTERFACE_AUTOMATIC_PORTS */
+ YYSYMBOL_VAR_EDE = 338, /* VAR_EDE */
+ YYSYMBOL_VAR_INTERFACE_ACTION = 339, /* VAR_INTERFACE_ACTION */
+ YYSYMBOL_VAR_INTERFACE_VIEW = 340, /* VAR_INTERFACE_VIEW */
+ YYSYMBOL_VAR_INTERFACE_TAG = 341, /* VAR_INTERFACE_TAG */
+ YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 342, /* VAR_INTERFACE_TAG_ACTION */
+ YYSYMBOL_VAR_INTERFACE_TAG_DATA = 343, /* VAR_INTERFACE_TAG_DATA */
+ YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 344, /* VAR_PROXY_PROTOCOL_PORT */
+ YYSYMBOL_VAR_STATISTICS_INHIBIT_ZERO = 345, /* VAR_STATISTICS_INHIBIT_ZERO */
+ YYSYMBOL_VAR_HARDEN_UNKNOWN_ADDITIONAL = 346, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
+ YYSYMBOL_VAR_DISABLE_EDNS_DO = 347, /* VAR_DISABLE_EDNS_DO */
+ YYSYMBOL_VAR_CACHEDB_NO_STORE = 348, /* VAR_CACHEDB_NO_STORE */
+ YYSYMBOL_VAR_LOG_DESTADDR = 349, /* VAR_LOG_DESTADDR */
+ YYSYMBOL_YYACCEPT = 350, /* $accept */
+ YYSYMBOL_toplevelvars = 351, /* toplevelvars */
+ YYSYMBOL_toplevelvar = 352, /* toplevelvar */
+ YYSYMBOL_force_toplevel = 353, /* force_toplevel */
+ YYSYMBOL_serverstart = 354, /* serverstart */
+ YYSYMBOL_contents_server = 355, /* contents_server */
+ YYSYMBOL_content_server = 356, /* content_server */
+ YYSYMBOL_stubstart = 357, /* stubstart */
+ YYSYMBOL_contents_stub = 358, /* contents_stub */
+ YYSYMBOL_content_stub = 359, /* content_stub */
+ YYSYMBOL_forwardstart = 360, /* forwardstart */
+ YYSYMBOL_contents_forward = 361, /* contents_forward */
+ YYSYMBOL_content_forward = 362, /* content_forward */
+ YYSYMBOL_viewstart = 363, /* viewstart */
+ YYSYMBOL_contents_view = 364, /* contents_view */
+ YYSYMBOL_content_view = 365, /* content_view */
+ YYSYMBOL_authstart = 366, /* authstart */
+ YYSYMBOL_contents_auth = 367, /* contents_auth */
+ YYSYMBOL_content_auth = 368, /* content_auth */
+ YYSYMBOL_rpz_tag = 369, /* rpz_tag */
+ YYSYMBOL_rpz_action_override = 370, /* rpz_action_override */
+ YYSYMBOL_rpz_cname_override = 371, /* rpz_cname_override */
+ YYSYMBOL_rpz_log = 372, /* rpz_log */
+ YYSYMBOL_rpz_log_name = 373, /* rpz_log_name */
+ YYSYMBOL_rpz_signal_nxdomain_ra = 374, /* rpz_signal_nxdomain_ra */
+ YYSYMBOL_rpzstart = 375, /* rpzstart */
+ YYSYMBOL_contents_rpz = 376, /* contents_rpz */
+ YYSYMBOL_content_rpz = 377, /* content_rpz */
+ YYSYMBOL_server_num_threads = 378, /* server_num_threads */
+ YYSYMBOL_server_verbosity = 379, /* server_verbosity */
+ YYSYMBOL_server_statistics_interval = 380, /* server_statistics_interval */
+ YYSYMBOL_server_statistics_cumulative = 381, /* server_statistics_cumulative */
+ YYSYMBOL_server_extended_statistics = 382, /* server_extended_statistics */
+ YYSYMBOL_server_statistics_inhibit_zero = 383, /* server_statistics_inhibit_zero */
+ YYSYMBOL_server_shm_enable = 384, /* server_shm_enable */
+ YYSYMBOL_server_shm_key = 385, /* server_shm_key */
+ YYSYMBOL_server_port = 386, /* server_port */
+ YYSYMBOL_server_send_client_subnet = 387, /* server_send_client_subnet */
+ YYSYMBOL_server_client_subnet_zone = 388, /* server_client_subnet_zone */
+ YYSYMBOL_server_client_subnet_always_forward = 389, /* server_client_subnet_always_forward */
+ YYSYMBOL_server_client_subnet_opcode = 390, /* server_client_subnet_opcode */
+ YYSYMBOL_server_max_client_subnet_ipv4 = 391, /* server_max_client_subnet_ipv4 */
+ YYSYMBOL_server_max_client_subnet_ipv6 = 392, /* server_max_client_subnet_ipv6 */
+ YYSYMBOL_server_min_client_subnet_ipv4 = 393, /* server_min_client_subnet_ipv4 */
+ YYSYMBOL_server_min_client_subnet_ipv6 = 394, /* server_min_client_subnet_ipv6 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv4 = 395, /* server_max_ecs_tree_size_ipv4 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv6 = 396, /* server_max_ecs_tree_size_ipv6 */
+ YYSYMBOL_server_interface = 397, /* server_interface */
+ YYSYMBOL_server_outgoing_interface = 398, /* server_outgoing_interface */
+ YYSYMBOL_server_outgoing_range = 399, /* server_outgoing_range */
+ YYSYMBOL_server_outgoing_port_permit = 400, /* server_outgoing_port_permit */
+ YYSYMBOL_server_outgoing_port_avoid = 401, /* server_outgoing_port_avoid */
+ YYSYMBOL_server_outgoing_num_tcp = 402, /* server_outgoing_num_tcp */
+ YYSYMBOL_server_incoming_num_tcp = 403, /* server_incoming_num_tcp */
+ YYSYMBOL_server_interface_automatic = 404, /* server_interface_automatic */
+ YYSYMBOL_server_interface_automatic_ports = 405, /* server_interface_automatic_ports */
+ YYSYMBOL_server_do_ip4 = 406, /* server_do_ip4 */
+ YYSYMBOL_server_do_ip6 = 407, /* server_do_ip6 */
+ YYSYMBOL_server_do_nat64 = 408, /* server_do_nat64 */
+ YYSYMBOL_server_do_udp = 409, /* server_do_udp */
+ YYSYMBOL_server_do_tcp = 410, /* server_do_tcp */
+ YYSYMBOL_server_prefer_ip4 = 411, /* server_prefer_ip4 */
+ YYSYMBOL_server_prefer_ip6 = 412, /* server_prefer_ip6 */
+ YYSYMBOL_server_tcp_mss = 413, /* server_tcp_mss */
+ YYSYMBOL_server_outgoing_tcp_mss = 414, /* server_outgoing_tcp_mss */
+ YYSYMBOL_server_tcp_idle_timeout = 415, /* server_tcp_idle_timeout */
+ YYSYMBOL_server_max_reuse_tcp_queries = 416, /* server_max_reuse_tcp_queries */
+ YYSYMBOL_server_tcp_reuse_timeout = 417, /* server_tcp_reuse_timeout */
+ YYSYMBOL_server_tcp_auth_query_timeout = 418, /* server_tcp_auth_query_timeout */
+ YYSYMBOL_server_tcp_keepalive = 419, /* server_tcp_keepalive */
+ YYSYMBOL_server_tcp_keepalive_timeout = 420, /* server_tcp_keepalive_timeout */
+ YYSYMBOL_server_sock_queue_timeout = 421, /* server_sock_queue_timeout */
+ YYSYMBOL_server_tcp_upstream = 422, /* server_tcp_upstream */
+ YYSYMBOL_server_udp_upstream_without_downstream = 423, /* server_udp_upstream_without_downstream */
+ YYSYMBOL_server_ssl_upstream = 424, /* server_ssl_upstream */
+ YYSYMBOL_server_ssl_service_key = 425, /* server_ssl_service_key */
+ YYSYMBOL_server_ssl_service_pem = 426, /* server_ssl_service_pem */
+ YYSYMBOL_server_ssl_port = 427, /* server_ssl_port */
+ YYSYMBOL_server_tls_cert_bundle = 428, /* server_tls_cert_bundle */
+ YYSYMBOL_server_tls_win_cert = 429, /* server_tls_win_cert */
+ YYSYMBOL_server_tls_additional_port = 430, /* server_tls_additional_port */
+ YYSYMBOL_server_tls_ciphers = 431, /* server_tls_ciphers */
+ YYSYMBOL_server_tls_ciphersuites = 432, /* server_tls_ciphersuites */
+ YYSYMBOL_server_tls_session_ticket_keys = 433, /* server_tls_session_ticket_keys */
+ YYSYMBOL_server_tls_use_sni = 434, /* server_tls_use_sni */
+ YYSYMBOL_server_https_port = 435, /* server_https_port */
+ YYSYMBOL_server_http_endpoint = 436, /* server_http_endpoint */
+ YYSYMBOL_server_http_max_streams = 437, /* server_http_max_streams */
+ YYSYMBOL_server_http_query_buffer_size = 438, /* server_http_query_buffer_size */
+ YYSYMBOL_server_http_response_buffer_size = 439, /* server_http_response_buffer_size */
+ YYSYMBOL_server_http_nodelay = 440, /* server_http_nodelay */
+ YYSYMBOL_server_http_notls_downstream = 441, /* server_http_notls_downstream */
+ YYSYMBOL_server_use_systemd = 442, /* server_use_systemd */
+ YYSYMBOL_server_do_daemonize = 443, /* server_do_daemonize */
+ YYSYMBOL_server_use_syslog = 444, /* server_use_syslog */
+ YYSYMBOL_server_log_time_ascii = 445, /* server_log_time_ascii */
+ YYSYMBOL_server_log_queries = 446, /* server_log_queries */
+ YYSYMBOL_server_log_replies = 447, /* server_log_replies */
+ YYSYMBOL_server_log_tag_queryreply = 448, /* server_log_tag_queryreply */
+ YYSYMBOL_server_log_servfail = 449, /* server_log_servfail */
+ YYSYMBOL_server_log_destaddr = 450, /* server_log_destaddr */
+ YYSYMBOL_server_log_local_actions = 451, /* server_log_local_actions */
+ YYSYMBOL_server_chroot = 452, /* server_chroot */
+ YYSYMBOL_server_username = 453, /* server_username */
+ YYSYMBOL_server_directory = 454, /* server_directory */
+ YYSYMBOL_server_logfile = 455, /* server_logfile */
+ YYSYMBOL_server_pidfile = 456, /* server_pidfile */
+ YYSYMBOL_server_root_hints = 457, /* server_root_hints */
+ YYSYMBOL_server_dlv_anchor_file = 458, /* server_dlv_anchor_file */
+ YYSYMBOL_server_dlv_anchor = 459, /* server_dlv_anchor */
+ YYSYMBOL_server_auto_trust_anchor_file = 460, /* server_auto_trust_anchor_file */
+ YYSYMBOL_server_trust_anchor_file = 461, /* server_trust_anchor_file */
+ YYSYMBOL_server_trusted_keys_file = 462, /* server_trusted_keys_file */
+ YYSYMBOL_server_trust_anchor = 463, /* server_trust_anchor */
+ YYSYMBOL_server_trust_anchor_signaling = 464, /* server_trust_anchor_signaling */
+ YYSYMBOL_server_root_key_sentinel = 465, /* server_root_key_sentinel */
+ YYSYMBOL_server_domain_insecure = 466, /* server_domain_insecure */
+ YYSYMBOL_server_hide_identity = 467, /* server_hide_identity */
+ YYSYMBOL_server_hide_version = 468, /* server_hide_version */
+ YYSYMBOL_server_hide_trustanchor = 469, /* server_hide_trustanchor */
+ YYSYMBOL_server_hide_http_user_agent = 470, /* server_hide_http_user_agent */
+ YYSYMBOL_server_identity = 471, /* server_identity */
+ YYSYMBOL_server_version = 472, /* server_version */
+ YYSYMBOL_server_http_user_agent = 473, /* server_http_user_agent */
+ YYSYMBOL_server_nsid = 474, /* server_nsid */
+ YYSYMBOL_server_so_rcvbuf = 475, /* server_so_rcvbuf */
+ YYSYMBOL_server_so_sndbuf = 476, /* server_so_sndbuf */
+ YYSYMBOL_server_so_reuseport = 477, /* server_so_reuseport */
+ YYSYMBOL_server_ip_transparent = 478, /* server_ip_transparent */
+ YYSYMBOL_server_ip_freebind = 479, /* server_ip_freebind */
+ YYSYMBOL_server_ip_dscp = 480, /* server_ip_dscp */
+ YYSYMBOL_server_stream_wait_size = 481, /* server_stream_wait_size */
+ YYSYMBOL_server_edns_buffer_size = 482, /* server_edns_buffer_size */
+ YYSYMBOL_server_msg_buffer_size = 483, /* server_msg_buffer_size */
+ YYSYMBOL_server_msg_cache_size = 484, /* server_msg_cache_size */
+ YYSYMBOL_server_msg_cache_slabs = 485, /* server_msg_cache_slabs */
+ YYSYMBOL_server_num_queries_per_thread = 486, /* server_num_queries_per_thread */
+ YYSYMBOL_server_jostle_timeout = 487, /* server_jostle_timeout */
+ YYSYMBOL_server_delay_close = 488, /* server_delay_close */
+ YYSYMBOL_server_udp_connect = 489, /* server_udp_connect */
+ YYSYMBOL_server_unblock_lan_zones = 490, /* server_unblock_lan_zones */
+ YYSYMBOL_server_insecure_lan_zones = 491, /* server_insecure_lan_zones */
+ YYSYMBOL_server_rrset_cache_size = 492, /* server_rrset_cache_size */
+ YYSYMBOL_server_rrset_cache_slabs = 493, /* server_rrset_cache_slabs */
+ YYSYMBOL_server_infra_host_ttl = 494, /* server_infra_host_ttl */
+ YYSYMBOL_server_infra_lame_ttl = 495, /* server_infra_lame_ttl */
+ YYSYMBOL_server_infra_cache_numhosts = 496, /* server_infra_cache_numhosts */
+ YYSYMBOL_server_infra_cache_lame_size = 497, /* server_infra_cache_lame_size */
+ YYSYMBOL_server_infra_cache_slabs = 498, /* server_infra_cache_slabs */
+ YYSYMBOL_server_infra_cache_min_rtt = 499, /* server_infra_cache_min_rtt */
+ YYSYMBOL_server_infra_cache_max_rtt = 500, /* server_infra_cache_max_rtt */
+ YYSYMBOL_server_infra_keep_probing = 501, /* server_infra_keep_probing */
+ YYSYMBOL_server_target_fetch_policy = 502, /* server_target_fetch_policy */
+ YYSYMBOL_server_harden_short_bufsize = 503, /* server_harden_short_bufsize */
+ YYSYMBOL_server_harden_large_queries = 504, /* server_harden_large_queries */
+ YYSYMBOL_server_harden_glue = 505, /* server_harden_glue */
+ YYSYMBOL_server_harden_dnssec_stripped = 506, /* server_harden_dnssec_stripped */
+ YYSYMBOL_server_harden_below_nxdomain = 507, /* server_harden_below_nxdomain */
+ YYSYMBOL_server_harden_referral_path = 508, /* server_harden_referral_path */
+ YYSYMBOL_server_harden_algo_downgrade = 509, /* server_harden_algo_downgrade */
+ YYSYMBOL_server_harden_unknown_additional = 510, /* server_harden_unknown_additional */
+ YYSYMBOL_server_use_caps_for_id = 511, /* server_use_caps_for_id */
+ YYSYMBOL_server_caps_whitelist = 512, /* server_caps_whitelist */
+ YYSYMBOL_server_private_address = 513, /* server_private_address */
+ YYSYMBOL_server_private_domain = 514, /* server_private_domain */
+ YYSYMBOL_server_prefetch = 515, /* server_prefetch */
+ YYSYMBOL_server_prefetch_key = 516, /* server_prefetch_key */
+ YYSYMBOL_server_deny_any = 517, /* server_deny_any */
+ YYSYMBOL_server_unwanted_reply_threshold = 518, /* server_unwanted_reply_threshold */
+ YYSYMBOL_server_do_not_query_address = 519, /* server_do_not_query_address */
+ YYSYMBOL_server_do_not_query_localhost = 520, /* server_do_not_query_localhost */
+ YYSYMBOL_server_access_control = 521, /* server_access_control */
+ YYSYMBOL_server_interface_action = 522, /* server_interface_action */
+ YYSYMBOL_server_module_conf = 523, /* server_module_conf */
+ YYSYMBOL_server_val_override_date = 524, /* server_val_override_date */
+ YYSYMBOL_server_val_sig_skew_min = 525, /* server_val_sig_skew_min */
+ YYSYMBOL_server_val_sig_skew_max = 526, /* server_val_sig_skew_max */
+ YYSYMBOL_server_val_max_restart = 527, /* server_val_max_restart */
+ YYSYMBOL_server_cache_max_ttl = 528, /* server_cache_max_ttl */
+ YYSYMBOL_server_cache_max_negative_ttl = 529, /* server_cache_max_negative_ttl */
+ YYSYMBOL_server_cache_min_ttl = 530, /* server_cache_min_ttl */
+ YYSYMBOL_server_bogus_ttl = 531, /* server_bogus_ttl */
+ YYSYMBOL_server_val_clean_additional = 532, /* server_val_clean_additional */
+ YYSYMBOL_server_val_permissive_mode = 533, /* server_val_permissive_mode */
+ YYSYMBOL_server_aggressive_nsec = 534, /* server_aggressive_nsec */
+ YYSYMBOL_server_ignore_cd_flag = 535, /* server_ignore_cd_flag */
+ YYSYMBOL_server_disable_edns_do = 536, /* server_disable_edns_do */
+ YYSYMBOL_server_serve_expired = 537, /* server_serve_expired */
+ YYSYMBOL_server_serve_expired_ttl = 538, /* server_serve_expired_ttl */
+ YYSYMBOL_server_serve_expired_ttl_reset = 539, /* server_serve_expired_ttl_reset */
+ YYSYMBOL_server_serve_expired_reply_ttl = 540, /* server_serve_expired_reply_ttl */
+ YYSYMBOL_server_serve_expired_client_timeout = 541, /* server_serve_expired_client_timeout */
+ YYSYMBOL_server_ede_serve_expired = 542, /* server_ede_serve_expired */
+ YYSYMBOL_server_serve_original_ttl = 543, /* server_serve_original_ttl */
+ YYSYMBOL_server_fake_dsa = 544, /* server_fake_dsa */
+ YYSYMBOL_server_fake_sha1 = 545, /* server_fake_sha1 */
+ YYSYMBOL_server_val_log_level = 546, /* server_val_log_level */
+ YYSYMBOL_server_val_nsec3_keysize_iterations = 547, /* server_val_nsec3_keysize_iterations */
+ YYSYMBOL_server_zonemd_permissive_mode = 548, /* server_zonemd_permissive_mode */
+ YYSYMBOL_server_add_holddown = 549, /* server_add_holddown */
+ YYSYMBOL_server_del_holddown = 550, /* server_del_holddown */
+ YYSYMBOL_server_keep_missing = 551, /* server_keep_missing */
+ YYSYMBOL_server_permit_small_holddown = 552, /* server_permit_small_holddown */
+ YYSYMBOL_server_key_cache_size = 553, /* server_key_cache_size */
+ YYSYMBOL_server_key_cache_slabs = 554, /* server_key_cache_slabs */
+ YYSYMBOL_server_neg_cache_size = 555, /* server_neg_cache_size */
+ YYSYMBOL_server_local_zone = 556, /* server_local_zone */
+ YYSYMBOL_server_local_data = 557, /* server_local_data */
+ YYSYMBOL_server_local_data_ptr = 558, /* server_local_data_ptr */
+ YYSYMBOL_server_minimal_responses = 559, /* server_minimal_responses */
+ YYSYMBOL_server_rrset_roundrobin = 560, /* server_rrset_roundrobin */
+ YYSYMBOL_server_unknown_server_time_limit = 561, /* server_unknown_server_time_limit */
+ YYSYMBOL_server_max_udp_size = 562, /* server_max_udp_size */
+ YYSYMBOL_server_dns64_prefix = 563, /* server_dns64_prefix */
+ YYSYMBOL_server_dns64_synthall = 564, /* server_dns64_synthall */
+ YYSYMBOL_server_dns64_ignore_aaaa = 565, /* server_dns64_ignore_aaaa */
+ YYSYMBOL_server_nat64_prefix = 566, /* server_nat64_prefix */
+ YYSYMBOL_server_define_tag = 567, /* server_define_tag */
+ YYSYMBOL_server_local_zone_tag = 568, /* server_local_zone_tag */
+ YYSYMBOL_server_access_control_tag = 569, /* server_access_control_tag */
+ YYSYMBOL_server_access_control_tag_action = 570, /* server_access_control_tag_action */
+ YYSYMBOL_server_access_control_tag_data = 571, /* server_access_control_tag_data */
+ YYSYMBOL_server_local_zone_override = 572, /* server_local_zone_override */
+ YYSYMBOL_server_access_control_view = 573, /* server_access_control_view */
+ YYSYMBOL_server_interface_tag = 574, /* server_interface_tag */
+ YYSYMBOL_server_interface_tag_action = 575, /* server_interface_tag_action */
+ YYSYMBOL_server_interface_tag_data = 576, /* server_interface_tag_data */
+ YYSYMBOL_server_interface_view = 577, /* server_interface_view */
+ YYSYMBOL_server_response_ip_tag = 578, /* server_response_ip_tag */
+ YYSYMBOL_server_ip_ratelimit = 579, /* server_ip_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_cookie = 580, /* server_ip_ratelimit_cookie */
+ YYSYMBOL_server_ratelimit = 581, /* server_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_size = 582, /* server_ip_ratelimit_size */
+ YYSYMBOL_server_ratelimit_size = 583, /* server_ratelimit_size */
+ YYSYMBOL_server_ip_ratelimit_slabs = 584, /* server_ip_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_slabs = 585, /* server_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_for_domain = 586, /* server_ratelimit_for_domain */
+ YYSYMBOL_server_ratelimit_below_domain = 587, /* server_ratelimit_below_domain */
+ YYSYMBOL_server_ip_ratelimit_factor = 588, /* server_ip_ratelimit_factor */
+ YYSYMBOL_server_ratelimit_factor = 589, /* server_ratelimit_factor */
+ YYSYMBOL_server_ip_ratelimit_backoff = 590, /* server_ip_ratelimit_backoff */
+ YYSYMBOL_server_ratelimit_backoff = 591, /* server_ratelimit_backoff */
+ YYSYMBOL_server_outbound_msg_retry = 592, /* server_outbound_msg_retry */
+ YYSYMBOL_server_max_sent_count = 593, /* server_max_sent_count */
+ YYSYMBOL_server_max_query_restarts = 594, /* server_max_query_restarts */
+ YYSYMBOL_server_low_rtt = 595, /* server_low_rtt */
+ YYSYMBOL_server_fast_server_num = 596, /* server_fast_server_num */
+ YYSYMBOL_server_fast_server_permil = 597, /* server_fast_server_permil */
+ YYSYMBOL_server_qname_minimisation = 598, /* server_qname_minimisation */
+ YYSYMBOL_server_qname_minimisation_strict = 599, /* server_qname_minimisation_strict */
+ YYSYMBOL_server_pad_responses = 600, /* server_pad_responses */
+ YYSYMBOL_server_pad_responses_block_size = 601, /* server_pad_responses_block_size */
+ YYSYMBOL_server_pad_queries = 602, /* server_pad_queries */
+ YYSYMBOL_server_pad_queries_block_size = 603, /* server_pad_queries_block_size */
+ YYSYMBOL_server_ipsecmod_enabled = 604, /* server_ipsecmod_enabled */
+ YYSYMBOL_server_ipsecmod_ignore_bogus = 605, /* server_ipsecmod_ignore_bogus */
+ YYSYMBOL_server_ipsecmod_hook = 606, /* server_ipsecmod_hook */
+ YYSYMBOL_server_ipsecmod_max_ttl = 607, /* server_ipsecmod_max_ttl */
+ YYSYMBOL_server_ipsecmod_whitelist = 608, /* server_ipsecmod_whitelist */
+ YYSYMBOL_server_ipsecmod_strict = 609, /* server_ipsecmod_strict */
+ YYSYMBOL_server_edns_client_string = 610, /* server_edns_client_string */
+ YYSYMBOL_server_edns_client_string_opcode = 611, /* server_edns_client_string_opcode */
+ YYSYMBOL_server_ede = 612, /* server_ede */
+ YYSYMBOL_server_proxy_protocol_port = 613, /* server_proxy_protocol_port */
+ YYSYMBOL_stub_name = 614, /* stub_name */
+ YYSYMBOL_stub_host = 615, /* stub_host */
+ YYSYMBOL_stub_addr = 616, /* stub_addr */
+ YYSYMBOL_stub_first = 617, /* stub_first */
+ YYSYMBOL_stub_no_cache = 618, /* stub_no_cache */
+ YYSYMBOL_stub_ssl_upstream = 619, /* stub_ssl_upstream */
+ YYSYMBOL_stub_tcp_upstream = 620, /* stub_tcp_upstream */
+ YYSYMBOL_stub_prime = 621, /* stub_prime */
+ YYSYMBOL_forward_name = 622, /* forward_name */
+ YYSYMBOL_forward_host = 623, /* forward_host */
+ YYSYMBOL_forward_addr = 624, /* forward_addr */
+ YYSYMBOL_forward_first = 625, /* forward_first */
+ YYSYMBOL_forward_no_cache = 626, /* forward_no_cache */
+ YYSYMBOL_forward_ssl_upstream = 627, /* forward_ssl_upstream */
+ YYSYMBOL_forward_tcp_upstream = 628, /* forward_tcp_upstream */
+ YYSYMBOL_auth_name = 629, /* auth_name */
+ YYSYMBOL_auth_zonefile = 630, /* auth_zonefile */
+ YYSYMBOL_auth_master = 631, /* auth_master */
+ YYSYMBOL_auth_url = 632, /* auth_url */
+ YYSYMBOL_auth_allow_notify = 633, /* auth_allow_notify */
+ YYSYMBOL_auth_zonemd_check = 634, /* auth_zonemd_check */
+ YYSYMBOL_auth_zonemd_reject_absence = 635, /* auth_zonemd_reject_absence */
+ YYSYMBOL_auth_for_downstream = 636, /* auth_for_downstream */
+ YYSYMBOL_auth_for_upstream = 637, /* auth_for_upstream */
+ YYSYMBOL_auth_fallback_enabled = 638, /* auth_fallback_enabled */
+ YYSYMBOL_view_name = 639, /* view_name */
+ YYSYMBOL_view_local_zone = 640, /* view_local_zone */
+ YYSYMBOL_view_response_ip = 641, /* view_response_ip */
+ YYSYMBOL_view_response_ip_data = 642, /* view_response_ip_data */
+ YYSYMBOL_view_local_data = 643, /* view_local_data */
+ YYSYMBOL_view_local_data_ptr = 644, /* view_local_data_ptr */
+ YYSYMBOL_view_first = 645, /* view_first */
+ YYSYMBOL_rcstart = 646, /* rcstart */
+ YYSYMBOL_contents_rc = 647, /* contents_rc */
+ YYSYMBOL_content_rc = 648, /* content_rc */
+ YYSYMBOL_rc_control_enable = 649, /* rc_control_enable */
+ YYSYMBOL_rc_control_port = 650, /* rc_control_port */
+ YYSYMBOL_rc_control_interface = 651, /* rc_control_interface */
+ YYSYMBOL_rc_control_use_cert = 652, /* rc_control_use_cert */
+ YYSYMBOL_rc_server_key_file = 653, /* rc_server_key_file */
+ YYSYMBOL_rc_server_cert_file = 654, /* rc_server_cert_file */
+ YYSYMBOL_rc_control_key_file = 655, /* rc_control_key_file */
+ YYSYMBOL_rc_control_cert_file = 656, /* rc_control_cert_file */
+ YYSYMBOL_dtstart = 657, /* dtstart */
+ YYSYMBOL_contents_dt = 658, /* contents_dt */
+ YYSYMBOL_content_dt = 659, /* content_dt */
+ YYSYMBOL_dt_dnstap_enable = 660, /* dt_dnstap_enable */
+ YYSYMBOL_dt_dnstap_bidirectional = 661, /* dt_dnstap_bidirectional */
+ YYSYMBOL_dt_dnstap_socket_path = 662, /* dt_dnstap_socket_path */
+ YYSYMBOL_dt_dnstap_ip = 663, /* dt_dnstap_ip */
+ YYSYMBOL_dt_dnstap_tls = 664, /* dt_dnstap_tls */
+ YYSYMBOL_dt_dnstap_tls_server_name = 665, /* dt_dnstap_tls_server_name */
+ YYSYMBOL_dt_dnstap_tls_cert_bundle = 666, /* dt_dnstap_tls_cert_bundle */
+ YYSYMBOL_dt_dnstap_tls_client_key_file = 667, /* dt_dnstap_tls_client_key_file */
+ YYSYMBOL_dt_dnstap_tls_client_cert_file = 668, /* dt_dnstap_tls_client_cert_file */
+ YYSYMBOL_dt_dnstap_send_identity = 669, /* dt_dnstap_send_identity */
+ YYSYMBOL_dt_dnstap_send_version = 670, /* dt_dnstap_send_version */
+ YYSYMBOL_dt_dnstap_identity = 671, /* dt_dnstap_identity */
+ YYSYMBOL_dt_dnstap_version = 672, /* dt_dnstap_version */
+ YYSYMBOL_dt_dnstap_log_resolver_query_messages = 673, /* dt_dnstap_log_resolver_query_messages */
+ YYSYMBOL_dt_dnstap_log_resolver_response_messages = 674, /* dt_dnstap_log_resolver_response_messages */
+ YYSYMBOL_dt_dnstap_log_client_query_messages = 675, /* dt_dnstap_log_client_query_messages */
+ YYSYMBOL_dt_dnstap_log_client_response_messages = 676, /* dt_dnstap_log_client_response_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 677, /* dt_dnstap_log_forwarder_query_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 678, /* dt_dnstap_log_forwarder_response_messages */
+ YYSYMBOL_pythonstart = 679, /* pythonstart */
+ YYSYMBOL_contents_py = 680, /* contents_py */
+ YYSYMBOL_content_py = 681, /* content_py */
+ YYSYMBOL_py_script = 682, /* py_script */
+ YYSYMBOL_dynlibstart = 683, /* dynlibstart */
+ YYSYMBOL_contents_dl = 684, /* contents_dl */
+ YYSYMBOL_content_dl = 685, /* content_dl */
+ YYSYMBOL_dl_file = 686, /* dl_file */
+ YYSYMBOL_server_disable_dnssec_lame_check = 687, /* server_disable_dnssec_lame_check */
+ YYSYMBOL_server_log_identity = 688, /* server_log_identity */
+ YYSYMBOL_server_response_ip = 689, /* server_response_ip */
+ YYSYMBOL_server_response_ip_data = 690, /* server_response_ip_data */
+ YYSYMBOL_dnscstart = 691, /* dnscstart */
+ YYSYMBOL_contents_dnsc = 692, /* contents_dnsc */
+ YYSYMBOL_content_dnsc = 693, /* content_dnsc */
+ YYSYMBOL_dnsc_dnscrypt_enable = 694, /* dnsc_dnscrypt_enable */
+ YYSYMBOL_dnsc_dnscrypt_port = 695, /* dnsc_dnscrypt_port */
+ YYSYMBOL_dnsc_dnscrypt_provider = 696, /* dnsc_dnscrypt_provider */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert = 697, /* dnsc_dnscrypt_provider_cert */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 698, /* dnsc_dnscrypt_provider_cert_rotated */
+ YYSYMBOL_dnsc_dnscrypt_secret_key = 699, /* dnsc_dnscrypt_secret_key */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 700, /* dnsc_dnscrypt_shared_secret_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 701, /* dnsc_dnscrypt_shared_secret_cache_slabs */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 702, /* dnsc_dnscrypt_nonce_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 703, /* dnsc_dnscrypt_nonce_cache_slabs */
+ YYSYMBOL_cachedbstart = 704, /* cachedbstart */
+ YYSYMBOL_contents_cachedb = 705, /* contents_cachedb */
+ YYSYMBOL_content_cachedb = 706, /* content_cachedb */
+ YYSYMBOL_cachedb_backend_name = 707, /* cachedb_backend_name */
+ YYSYMBOL_cachedb_secret_seed = 708, /* cachedb_secret_seed */
+ YYSYMBOL_cachedb_no_store = 709, /* cachedb_no_store */
+ YYSYMBOL_redis_server_host = 710, /* redis_server_host */
+ YYSYMBOL_redis_server_port = 711, /* redis_server_port */
+ YYSYMBOL_redis_server_path = 712, /* redis_server_path */
+ YYSYMBOL_redis_server_password = 713, /* redis_server_password */
+ YYSYMBOL_redis_timeout = 714, /* redis_timeout */
+ YYSYMBOL_redis_expire_records = 715, /* redis_expire_records */
+ YYSYMBOL_redis_logical_db = 716, /* redis_logical_db */
+ YYSYMBOL_server_tcp_connection_limit = 717, /* server_tcp_connection_limit */
+ YYSYMBOL_server_answer_cookie = 718, /* server_answer_cookie */
+ YYSYMBOL_server_cookie_secret = 719, /* server_cookie_secret */
+ YYSYMBOL_ipsetstart = 720, /* ipsetstart */
+ YYSYMBOL_contents_ipset = 721, /* contents_ipset */
+ YYSYMBOL_content_ipset = 722, /* content_ipset */
+ YYSYMBOL_ipset_name_v4 = 723, /* ipset_name_v4 */
+ YYSYMBOL_ipset_name_v6 = 724 /* ipset_name_v6 */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
+
+
+
+#ifdef short
+# undef short
+#endif
+
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+ <limits.h> and (if available) <stdint.h> are included
+ so that the code can choose integer types of a good width. */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_STDINT_H
+# endif
+#endif
+
+/* Narrow types that promote to a signed type and that can represent a
+ signed or unsigned integer of at least N bits. In tables they can
+ save space and decrease cache pressure. Promoting to a signed type
+ helps avoid bugs in integer arithmetic. */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
+#else
+typedef signed char yytype_int8;
+#endif
+
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
+#endif
+
+/* Work around bug in HP-UX 11.23, which defines these macros
+ incorrectly for preprocessor constants. This workaround can likely
+ be removed in 2023, as HPE has promised support for HP-UX 11.23
+ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+ <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
+#else
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+# define YYPTRDIFF_T __PTRDIFF_TYPE__
+# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+# ifndef ptrdiff_t
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# endif
+# define YYPTRDIFF_T ptrdiff_t
+# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+# define YYPTRDIFF_T long
+# define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM \
+ YY_CAST (YYPTRDIFF_T, \
+ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
+ ? YYPTRDIFF_MAXIMUM \
+ : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int16 yy_state_t;
+
+/* State numbers in computations. */
+typedef int yy_state_fast_t;
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+# define YY_ATTRIBUTE_UNUSED
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YY_USE(E) ((void) (E))
+#else
+# define YY_USE(E) /* empty */
+#endif
+
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define YY_INITIAL_VALUE(Value) Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END \
+ _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* !defined yyoverflow */
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yy_state_t yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYPTRDIFF_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / YYSIZEOF (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYPTRDIFF_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 2
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 745
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 350
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 375
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 727
+/* YYNSTATES -- Number of states. */
+#define YYNSTATES 1088
+
+/* YYMAXUTOK -- Last valid token kind. */
+#define YYMAXUTOK 604
+
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
+#define YYTRANSLATE(YYX) \
+ (0 <= (YYX) && (YYX) <= YYMAXUTOK \
+ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
+ : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex. */
+static const yytype_int16 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 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, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 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, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 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, 218, 219, 220, 221, 222, 223, 224,
+ 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
+ 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
+ 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 349
+};
+
+#if YYDEBUG
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+static const yytype_int16 yyrline[] =
+{
+ 0, 206, 206, 206, 207, 207, 208, 208, 209, 209,
+ 209, 210, 210, 211, 211, 212, 212, 213, 215, 222,
+ 228, 229, 230, 230, 230, 231, 231, 232, 232, 232,
+ 233, 233, 233, 234, 234, 234, 235, 235, 236, 237,
+ 237, 237, 238, 238, 238, 239, 239, 240, 240, 241,
+ 241, 242, 242, 243, 243, 244, 244, 245, 245, 246,
+ 246, 247, 247, 247, 248, 248, 249, 249, 249, 250,
+ 250, 250, 251, 251, 252, 252, 253, 253, 254, 254,
+ 255, 255, 255, 256, 256, 257, 257, 258, 258, 258,
+ 259, 259, 260, 260, 261, 261, 262, 262, 262, 263,
+ 263, 264, 264, 265, 265, 266, 266, 267, 267, 268,
+ 268, 269, 269, 270, 270, 271, 271, 271, 272, 272,
+ 272, 273, 273, 273, 274, 274, 274, 274, 275, 276,
+ 276, 276, 277, 277, 277, 278, 278, 279, 279, 280,
+ 280, 280, 281, 281, 281, 282, 282, 283, 283, 283,
+ 284, 285, 285, 285, 286, 286, 286, 287, 287, 288,
+ 288, 289, 289, 290, 291, 291, 292, 292, 293, 293,
+ 294, 294, 295, 295, 296, 296, 297, 297, 298, 298,
+ 299, 299, 300, 300, 301, 301, 302, 302, 302, 303,
+ 303, 304, 304, 305, 305, 306, 306, 306, 307, 307,
+ 308, 309, 309, 310, 310, 311, 312, 312, 313, 313,
+ 314, 314, 314, 315, 315, 316, 316, 316, 317, 317,
+ 317, 318, 318, 319, 320, 320, 321, 321, 322, 322,
+ 323, 323, 324, 324, 324, 325, 325, 325, 326, 326,
+ 326, 327, 327, 328, 328, 329, 329, 330, 330, 330,
+ 331, 331, 332, 332, 333, 333, 334, 334, 335, 335,
+ 336, 336, 337, 337, 338, 340, 354, 355, 356, 356,
+ 356, 356, 356, 357, 357, 357, 359, 373, 374, 375,
+ 375, 375, 375, 376, 376, 376, 378, 394, 395, 396,
+ 396, 396, 396, 397, 397, 397, 399, 420, 421, 422,
+ 422, 422, 422, 423, 423, 423, 424, 424, 424, 427,
+ 446, 463, 471, 481, 488, 498, 517, 518, 519, 519,
+ 519, 519, 519, 520, 520, 520, 521, 521, 521, 521,
+ 523, 532, 541, 552, 561, 570, 579, 588, 599, 608,
+ 620, 634, 649, 660, 677, 694, 711, 728, 743, 758,
+ 771, 786, 795, 804, 813, 822, 831, 840, 847, 856,
+ 865, 874, 883, 892, 901, 910, 919, 928, 941, 952,
+ 963, 974, 983, 996, 1009, 1018, 1027, 1036, 1043, 1050,
+ 1059, 1066, 1075, 1083, 1090, 1097, 1105, 1114, 1122, 1138,
+ 1146, 1154, 1162, 1170, 1178, 1187, 1196, 1210, 1219, 1228,
+ 1237, 1246, 1255, 1264, 1273, 1280, 1287, 1313, 1321, 1328,
+ 1335, 1342, 1349, 1357, 1365, 1373, 1380, 1391, 1402, 1409,
+ 1418, 1427, 1436, 1445, 1452, 1459, 1466, 1482, 1490, 1498,
+ 1508, 1518, 1528, 1542, 1550, 1563, 1574, 1582, 1595, 1604,
+ 1613, 1622, 1631, 1641, 1651, 1659, 1672, 1681, 1689, 1698,
+ 1706, 1719, 1728, 1737, 1747, 1754, 1764, 1774, 1784, 1794,
+ 1804, 1814, 1824, 1834, 1844, 1851, 1858, 1865, 1874, 1883,
+ 1892, 1901, 1908, 1918, 1926, 1935, 1942, 1960, 1973, 1986,
+ 1999, 2008, 2017, 2026, 2035, 2045, 2055, 2066, 2075, 2084,
+ 2093, 2102, 2111, 2120, 2129, 2138, 2147, 2160, 2173, 2182,
+ 2189, 2198, 2207, 2216, 2225, 2235, 2243, 2256, 2264, 2320,
+ 2327, 2342, 2352, 2362, 2369, 2376, 2383, 2392, 2400, 2407,
+ 2421, 2442, 2463, 2475, 2487, 2499, 2508, 2529, 2541, 2553,
+ 2562, 2583, 2592, 2601, 2610, 2618, 2626, 2639, 2652, 2667,
+ 2682, 2691, 2700, 2710, 2720, 2729, 2738, 2747, 2753, 2762,
+ 2771, 2781, 2791, 2801, 2810, 2820, 2829, 2842, 2855, 2867,
+ 2881, 2893, 2907, 2916, 2927, 2936, 2943, 2953, 2960, 2967,
+ 2976, 2985, 2995, 3005, 3015, 3025, 3032, 3039, 3048, 3057,
+ 3067, 3077, 3087, 3094, 3101, 3108, 3116, 3126, 3136, 3146,
+ 3156, 3166, 3176, 3232, 3242, 3250, 3258, 3273, 3282, 3288,
+ 3289, 3290, 3290, 3290, 3291, 3291, 3291, 3292, 3292, 3294,
+ 3304, 3313, 3320, 3327, 3334, 3341, 3348, 3355, 3361, 3362,
+ 3363, 3363, 3363, 3364, 3364, 3364, 3365, 3366, 3366, 3367,
+ 3367, 3368, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3376,
+ 3385, 3395, 3402, 3409, 3418, 3425, 3432, 3439, 3446, 3455,
+ 3464, 3471, 3478, 3488, 3498, 3508, 3518, 3528, 3538, 3544,
+ 3545, 3546, 3548, 3555, 3561, 3562, 3563, 3565, 3572, 3582,
+ 3589, 3598, 3606, 3612, 3613, 3615, 3615, 3615, 3616, 3616,
+ 3617, 3618, 3619, 3620, 3621, 3623, 3632, 3641, 3648, 3657,
+ 3664, 3673, 3681, 3694, 3702, 3715, 3721, 3722, 3723, 3723,
+ 3724, 3724, 3724, 3725, 3725, 3725, 3726, 3726, 3728, 3740,
+ 3752, 3765, 3777, 3792, 3804, 3816, 3829, 3842, 3857, 3868,
+ 3877, 3893, 3899, 3900, 3901, 3901, 3903, 3918
+};
+#endif
+
+/** Accessing symbol of state STATE. */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+ YYSYMBOL. No bounds checking. */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "\"end of file\"", "error", "\"invalid token\"", "SPACE", "LETTER",
+ "NEWLINE", "COMMENT", "COLON", "ANY", "ZONESTR", "STRING_ARG",
+ "VAR_FORCE_TOPLEVEL", "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS",
+ "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4",
+ "VAR_DO_IP4", "VAR_DO_IP6", "VAR_DO_NAT64", "VAR_PREFER_IP6",
+ "VAR_DO_UDP", "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS",
+ "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE",
+ "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_SOCK_QUEUE_TIMEOUT", "VAR_CHROOT",
+ "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
+ "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS",
+ "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE",
+ "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL",
+ "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS",
+ "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME",
+ "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR",
+ "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE",
+ "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST",
+ "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY",
+ "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE",
+ "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR",
+ "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL",
+ "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
+ "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
+ "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
+ "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
+ "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL",
+ "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC",
+ "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID",
+ "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT",
+ "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR",
+ "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS",
+ "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
+ "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
+ "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
+ "VAR_CONTROL_USE_CERT", "VAR_TCP_REUSE_TIMEOUT",
+ "VAR_MAX_REUSE_TCP_QUERIES", "VAR_EXTENDED_STATISTICS",
+ "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME",
+ "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
+ "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT",
+ "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "VAR_VAL_MAX_RESTART",
+ "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE",
+ "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN",
+ "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH",
+ "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT",
+ "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES",
+ "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM",
+ "VAR_SSL_UPSTREAM", "VAR_TCP_AUTH_QUERY_TIMEOUT", "VAR_SSL_SERVICE_KEY",
+ "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
+ "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM",
+ "VAR_TLS_CERT_BUNDLE", "VAR_STUB_TCP_UPSTREAM",
+ "VAR_FORWARD_TCP_UPSTREAM", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT",
+ "VAR_HTTP_MAX_STREAMS", "VAR_HTTP_QUERY_BUFFER_SIZE",
+ "VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY",
+ "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
+ "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE",
+ "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
+ "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_CACHE_MAX_RTT",
+ "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
+ "VAR_DNS64_IGNORE_AAAA", "VAR_NAT64_PREFIX", "VAR_DNSTAP",
+ "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP",
+ "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME",
+ "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE",
+ "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY",
+ "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL",
+ "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
+ "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
+ "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
+ "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
+ "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
+ "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
+ "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG",
+ "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE",
+ "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK",
+ "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE",
+ "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
+ "VAR_OUTBOUND_MSG_RETRY", "VAR_MAX_SENT_COUNT", "VAR_MAX_QUERY_RESTARTS",
+ "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
+ "VAR_IP_RATELIMIT_FACTOR", "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", "VAR_MIN_CLIENT_SUBNET_IPV6",
+ "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
+ "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
+ "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
+ "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
+ "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
+ "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
+ "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
+ "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
+ "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
+ "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_EDE_SERVE_EXPIRED",
+ "VAR_SERVE_ORIGINAL_TTL", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
+ "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_HIDE_HTTP_USER_AGENT",
+ "VAR_HTTP_USER_AGENT", "VAR_TRUST_ANCHOR_SIGNALING",
+ "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
+ "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT",
+ "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER",
+ "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT",
+ "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED",
+ "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE",
+ "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS",
+ "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS",
+ "VAR_PAD_RESPONSES", "VAR_PAD_RESPONSES_BLOCK_SIZE", "VAR_PAD_QUERIES",
+ "VAR_PAD_QUERIES_BLOCK_SIZE", "VAR_IPSECMOD_ENABLED",
+ "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL",
+ "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB",
+ "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST",
+ "VAR_CACHEDB_REDISPORT", "VAR_CACHEDB_REDISTIMEOUT",
+ "VAR_CACHEDB_REDISEXPIRERECORDS", "VAR_CACHEDB_REDISPATH",
+ "VAR_CACHEDB_REDISPASSWORD", "VAR_CACHEDB_REDISLOGICALDB",
+ "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM",
+ "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL",
+ "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT",
+ "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL",
+ "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT",
+ "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", "VAR_COOKIE_SECRET",
+ "VAR_IP_RATELIMIT_COOKIE", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE",
+ "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT",
+ "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS",
+ "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET",
+ "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS",
+ "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE",
+ "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "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", "VAR_RPZ_SIGNAL_NXDOMAIN_RA",
+ "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_INTERFACE_ACTION",
+ "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG", "VAR_INTERFACE_TAG_ACTION",
+ "VAR_INTERFACE_TAG_DATA", "VAR_PROXY_PROTOCOL_PORT",
+ "VAR_STATISTICS_INHIBIT_ZERO", "VAR_HARDEN_UNKNOWN_ADDITIONAL",
+ "VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "VAR_LOG_DESTADDR",
+ "$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_statistics_inhibit_zero", "server_shm_enable", "server_shm_key",
+ "server_port", "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",
+ "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
+ "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6",
+ "server_interface", "server_outgoing_interface", "server_outgoing_range",
+ "server_outgoing_port_permit", "server_outgoing_port_avoid",
+ "server_outgoing_num_tcp", "server_incoming_num_tcp",
+ "server_interface_automatic", "server_interface_automatic_ports",
+ "server_do_ip4", "server_do_ip6", "server_do_nat64", "server_do_udp",
+ "server_do_tcp", "server_prefer_ip4", "server_prefer_ip6",
+ "server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_idle_timeout",
+ "server_max_reuse_tcp_queries", "server_tcp_reuse_timeout",
+ "server_tcp_auth_query_timeout", "server_tcp_keepalive",
+ "server_tcp_keepalive_timeout", "server_sock_queue_timeout",
+ "server_tcp_upstream", "server_udp_upstream_without_downstream",
+ "server_ssl_upstream", "server_ssl_service_key",
+ "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
+ "server_tls_win_cert", "server_tls_additional_port",
+ "server_tls_ciphers", "server_tls_ciphersuites",
+ "server_tls_session_ticket_keys", "server_tls_use_sni",
+ "server_https_port", "server_http_endpoint", "server_http_max_streams",
+ "server_http_query_buffer_size", "server_http_response_buffer_size",
+ "server_http_nodelay", "server_http_notls_downstream",
+ "server_use_systemd", "server_do_daemonize", "server_use_syslog",
+ "server_log_time_ascii", "server_log_queries", "server_log_replies",
+ "server_log_tag_queryreply", "server_log_servfail",
+ "server_log_destaddr", "server_log_local_actions", "server_chroot",
+ "server_username", "server_directory", "server_logfile",
+ "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
+ "server_dlv_anchor", "server_auto_trust_anchor_file",
+ "server_trust_anchor_file", "server_trusted_keys_file",
+ "server_trust_anchor", "server_trust_anchor_signaling",
+ "server_root_key_sentinel", "server_domain_insecure",
+ "server_hide_identity", "server_hide_version", "server_hide_trustanchor",
+ "server_hide_http_user_agent", "server_identity", "server_version",
+ "server_http_user_agent", "server_nsid", "server_so_rcvbuf",
+ "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
+ "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size",
+ "server_edns_buffer_size", "server_msg_buffer_size",
+ "server_msg_cache_size", "server_msg_cache_slabs",
+ "server_num_queries_per_thread", "server_jostle_timeout",
+ "server_delay_close", "server_udp_connect", "server_unblock_lan_zones",
+ "server_insecure_lan_zones", "server_rrset_cache_size",
+ "server_rrset_cache_slabs", "server_infra_host_ttl",
+ "server_infra_lame_ttl", "server_infra_cache_numhosts",
+ "server_infra_cache_lame_size", "server_infra_cache_slabs",
+ "server_infra_cache_min_rtt", "server_infra_cache_max_rtt",
+ "server_infra_keep_probing", "server_target_fetch_policy",
+ "server_harden_short_bufsize", "server_harden_large_queries",
+ "server_harden_glue", "server_harden_dnssec_stripped",
+ "server_harden_below_nxdomain", "server_harden_referral_path",
+ "server_harden_algo_downgrade", "server_harden_unknown_additional",
+ "server_use_caps_for_id", "server_caps_whitelist",
+ "server_private_address", "server_private_domain", "server_prefetch",
+ "server_prefetch_key", "server_deny_any",
+ "server_unwanted_reply_threshold", "server_do_not_query_address",
+ "server_do_not_query_localhost", "server_access_control",
+ "server_interface_action", "server_module_conf",
+ "server_val_override_date", "server_val_sig_skew_min",
+ "server_val_sig_skew_max", "server_val_max_restart",
+ "server_cache_max_ttl", "server_cache_max_negative_ttl",
+ "server_cache_min_ttl", "server_bogus_ttl",
+ "server_val_clean_additional", "server_val_permissive_mode",
+ "server_aggressive_nsec", "server_ignore_cd_flag",
+ "server_disable_edns_do", "server_serve_expired",
+ "server_serve_expired_ttl", "server_serve_expired_ttl_reset",
+ "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout",
+ "server_ede_serve_expired", "server_serve_original_ttl",
+ "server_fake_dsa", "server_fake_sha1", "server_val_log_level",
+ "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode",
+ "server_add_holddown", "server_del_holddown", "server_keep_missing",
+ "server_permit_small_holddown", "server_key_cache_size",
+ "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
+ "server_local_data", "server_local_data_ptr", "server_minimal_responses",
+ "server_rrset_roundrobin", "server_unknown_server_time_limit",
+ "server_max_udp_size", "server_dns64_prefix", "server_dns64_synthall",
+ "server_dns64_ignore_aaaa", "server_nat64_prefix", "server_define_tag",
+ "server_local_zone_tag", "server_access_control_tag",
+ "server_access_control_tag_action", "server_access_control_tag_data",
+ "server_local_zone_override", "server_access_control_view",
+ "server_interface_tag", "server_interface_tag_action",
+ "server_interface_tag_data", "server_interface_view",
+ "server_response_ip_tag", "server_ip_ratelimit",
+ "server_ip_ratelimit_cookie", "server_ratelimit",
+ "server_ip_ratelimit_size", "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_ip_ratelimit_backoff", "server_ratelimit_backoff",
+ "server_outbound_msg_retry", "server_max_sent_count",
+ "server_max_query_restarts", "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", "server_ipsecmod_enabled",
+ "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
+ "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
+ "server_ipsecmod_strict", "server_edns_client_string",
+ "server_edns_client_string_opcode", "server_ede",
+ "server_proxy_protocol_port", "stub_name", "stub_host", "stub_addr",
+ "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_tcp_upstream",
+ "stub_prime", "forward_name", "forward_host", "forward_addr",
+ "forward_first", "forward_no_cache", "forward_ssl_upstream",
+ "forward_tcp_upstream", "auth_name", "auth_zonefile", "auth_master",
+ "auth_url", "auth_allow_notify", "auth_zonemd_check",
+ "auth_zonemd_reject_absence", "auth_for_downstream", "auth_for_upstream",
+ "auth_fallback_enabled", "view_name", "view_local_zone",
+ "view_response_ip", "view_response_ip_data", "view_local_data",
+ "view_local_data_ptr", "view_first", "rcstart", "contents_rc",
+ "content_rc", "rc_control_enable", "rc_control_port",
+ "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
+ "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
+ "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
+ "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
+ "dt_dnstap_tls", "dt_dnstap_tls_server_name",
+ "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
+ "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
+ "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
+ "dt_dnstap_log_resolver_query_messages",
+ "dt_dnstap_log_resolver_response_messages",
+ "dt_dnstap_log_client_query_messages",
+ "dt_dnstap_log_client_response_messages",
+ "dt_dnstap_log_forwarder_query_messages",
+ "dt_dnstap_log_forwarder_response_messages", "pythonstart",
+ "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl",
+ "content_dl", "dl_file", "server_disable_dnssec_lame_check",
+ "server_log_identity", "server_response_ip", "server_response_ip_data",
+ "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
+ "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
+ "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
+ "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
+ "dnsc_dnscrypt_shared_secret_cache_slabs",
+ "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
+ "cachedbstart", "contents_cachedb", "content_cachedb",
+ "cachedb_backend_name", "cachedb_secret_seed", "cachedb_no_store",
+ "redis_server_host", "redis_server_port", "redis_server_path",
+ "redis_server_password", "redis_timeout", "redis_expire_records",
+ "redis_logical_db", "server_tcp_connection_limit",
+ "server_answer_cookie", "server_cookie_secret", "ipsetstart",
+ "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
+};
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+ return yytname[yysymbol];
+}
+#endif
+
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
+static const yytype_int16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+ 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
+ 365, 366, 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, 602, 603, 604
+};
+#endif
+
+#define YYPACT_NINF (-293)
+
+#define yypact_value_is_default(Yyn) \
+ ((Yyn) == YYPACT_NINF)
+
+#define YYTABLE_NINF (-1)
+
+#define yytable_value_is_error(Yyn) \
+ 0
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+static const yytype_int16 yypact[] =
+{
+ -293, 267, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -13, 262, 122, 276, 56, 45, 293, 268,
+ -81, -292, -100, -35, -285, 31, 32, 33, 75, 76,
+ 77, 78, 79, 80, 81, 83, 89, 94, 121, 123,
+ 125, 126, 134, 160, 161, 162, 163, 164, 165, 166,
+ 213, 215, 244, 245, 259, 260, 263, 264, 265, 270,
+ 271, 272, 273, 279, 285, 286, 295, 296, 297, 300,
+ 304, 306, 312, 325, 331, 332, 333, 334, 335, 343,
+ 344, 345, 346, 347, 351, 352, 353, 354, 356, 357,
+ 363, 365, 366, 367, 368, 369, 370, 372, 374, 375,
+ 377, 378, 379, 390, 391, 392, 393, 394, 395, 396,
+ 398, 399, 401, 402, 403, 404, 405, 406, 407, 408,
+ 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
+ 421, 422, 423, 424, 425, 426, 427, 428, 430, 450,
+ 451, 452, 453, 454, 455, 456, 457, 458, 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,
+ 494, 495, 496, 497, 498, 499, 500, 501, 502, 503,
+ 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
+ 516, 517, 518, 519, 520, 521, 522, 523, 524, 525,
+ 526, 527, 528, 529, 530, 531, 532, 533, 534, 535,
+ 537, 538, 539, 540, 541, 542, 543, 544, 545, 546,
+ 547, 549, 550, 551, 552, 553, 554, 555, 556, 557,
+ 558, 559, 560, 562, 563, 564, 565, 566, 567, 568,
+ 569, 570, 571, 572, 573, 574, 576, 577, 578, 580,
+ 581, 582, 583, 584, 586, 587, 588, 589, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, 590, 591, 592, 593, 594, 595, 596, 597,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, 598,
+ 599, 600, 601, 602, 603, 604, -293, -293, -293, -293,
+ -293, -293, -293, -293, 605, 606, 607, 608, 609, 610,
+ 611, -293, -293, -293, -293, -293, -293, -293, -293, 612,
+ 613, 614, 615, 616, 617, 618, 619, 620, 621, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ 622, 623, 624, 625, 626, 627, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, 628,
+ 629, 630, 631, 632, 633, 634, 635, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, 636, 637, 638, 639,
+ 640, 641, 642, 643, 644, 645, 646, 647, 648, 649,
+ 650, 651, 652, 653, 654, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, 655, -293, -293, 656, -293,
+ -293, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, 667, 668, 669, 670, 671, 672, 673, 674,
+ 675, 676, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, 677, 678, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ 679, 680, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, 681, 682, 683, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, 684, 685,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, 686, 687, 688, 689, 690, 691, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, 692, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, 693, -293, -293, -293, -293,
+ -293, 694, 695, 696, 697, 698, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, 699, -293, -293,
+ 700, 701, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, 702,
+ 703, 704, -293, -293, -293, -293, -293, -293, 705, 706,
+ -293, -293, -293, -293, -293, -293, -293, -293
+};
+
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_int16 yydefact[] =
+{
+ 2, 0, 1, 18, 19, 265, 276, 598, 658, 617,
+ 286, 672, 695, 296, 721, 315, 663, 3, 17, 21,
+ 267, 278, 288, 298, 317, 600, 619, 660, 665, 674,
+ 697, 723, 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,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 20, 22,
+ 23, 90, 93, 102, 261, 218, 219, 24, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 39, 81,
+ 25, 94, 95, 50, 74, 89, 258, 26, 27, 28,
+ 31, 32, 29, 30, 33, 34, 35, 255, 256, 257,
+ 36, 37, 38, 126, 230, 127, 129, 130, 131, 232,
+ 237, 233, 244, 245, 246, 250, 132, 133, 134, 135,
+ 136, 137, 138, 214, 91, 80, 106, 124, 125, 242,
+ 239, 264, 128, 40, 41, 42, 43, 44, 82, 96,
+ 97, 113, 68, 78, 69, 222, 223, 107, 60, 61,
+ 221, 64, 62, 63, 65, 253, 117, 121, 142, 154,
+ 186, 157, 243, 118, 75, 45, 46, 47, 104, 143,
+ 144, 145, 146, 48, 49, 51, 52, 54, 55, 53,
+ 151, 152, 158, 56, 57, 58, 66, 85, 122, 99,
+ 153, 262, 92, 182, 100, 101, 119, 120, 240, 105,
+ 59, 83, 86, 195, 67, 70, 108, 109, 110, 84,
+ 183, 111, 71, 72, 73, 231, 123, 263, 205, 206,
+ 207, 208, 209, 210, 211, 212, 220, 112, 79, 254,
+ 114, 115, 116, 184, 76, 77, 98, 87, 88, 103,
+ 139, 140, 241, 141, 147, 148, 149, 150, 187, 188,
+ 190, 192, 193, 191, 194, 197, 198, 199, 196, 215,
+ 155, 249, 156, 161, 162, 159, 160, 163, 164, 166,
+ 165, 168, 167, 169, 170, 171, 234, 236, 235, 185,
+ 200, 201, 202, 203, 204, 224, 226, 225, 227, 228,
+ 229, 251, 252, 259, 260, 189, 213, 216, 217, 238,
+ 247, 248, 0, 0, 0, 0, 0, 0, 0, 0,
+ 266, 268, 269, 270, 272, 273, 274, 275, 271, 0,
+ 0, 0, 0, 0, 0, 0, 277, 279, 280, 281,
+ 282, 283, 284, 285, 0, 0, 0, 0, 0, 0,
+ 0, 287, 289, 290, 293, 294, 291, 295, 292, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 297,
+ 299, 300, 301, 302, 306, 307, 308, 303, 304, 305,
+ 0, 0, 0, 0, 0, 0, 320, 324, 325, 326,
+ 327, 328, 316, 318, 319, 321, 322, 323, 329, 0,
+ 0, 0, 0, 0, 0, 0, 0, 599, 601, 603,
+ 602, 608, 604, 605, 606, 607, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 618, 620, 622, 621, 623,
+ 624, 625, 626, 627, 628, 629, 630, 631, 632, 633,
+ 634, 635, 636, 637, 638, 0, 659, 661, 0, 664,
+ 666, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 673, 675, 676, 677, 679, 680, 678, 681, 682,
+ 683, 684, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 696, 698, 699, 706, 700, 701, 704, 705,
+ 702, 703, 707, 0, 0, 722, 724, 725, 331, 330,
+ 338, 351, 349, 363, 358, 359, 360, 364, 361, 362,
+ 365, 366, 367, 371, 372, 373, 404, 405, 406, 407,
+ 408, 436, 437, 438, 444, 445, 354, 446, 447, 450,
+ 448, 449, 454, 455, 456, 471, 419, 420, 423, 424,
+ 457, 475, 413, 415, 476, 483, 484, 485, 355, 435,
+ 505, 506, 414, 499, 396, 350, 409, 472, 480, 458,
+ 0, 0, 509, 356, 332, 395, 463, 333, 352, 353,
+ 410, 411, 507, 460, 465, 466, 369, 368, 334, 510,
+ 439, 470, 397, 418, 477, 478, 479, 482, 498, 412,
+ 503, 501, 502, 427, 434, 467, 468, 428, 429, 459,
+ 487, 398, 399, 403, 374, 376, 370, 377, 378, 379,
+ 380, 387, 388, 389, 390, 391, 392, 393, 511, 512,
+ 514, 440, 441, 442, 443, 451, 452, 453, 515, 516,
+ 517, 518, 0, 0, 0, 461, 430, 432, 668, 531,
+ 536, 534, 533, 537, 535, 544, 545, 546, 0, 0,
+ 540, 541, 542, 543, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 464, 481, 504, 550, 551, 431,
+ 519, 0, 0, 0, 0, 0, 0, 489, 490, 491,
+ 492, 493, 494, 495, 496, 497, 669, 421, 422, 425,
+ 416, 486, 394, 336, 337, 417, 552, 553, 554, 555,
+ 556, 558, 557, 559, 560, 561, 375, 382, 547, 549,
+ 548, 381, 0, 719, 720, 532, 401, 469, 513, 400,
+ 433, 383, 384, 386, 385, 0, 563, 426, 500, 357,
+ 564, 0, 0, 0, 0, 0, 565, 335, 462, 488,
+ 402, 566, 567, 568, 573, 571, 572, 569, 570, 574,
+ 575, 576, 577, 579, 580, 578, 591, 0, 595, 596,
+ 0, 0, 597, 581, 589, 582, 583, 584, 588, 590,
+ 585, 586, 587, 309, 310, 311, 312, 313, 314, 609,
+ 611, 610, 613, 614, 615, 616, 612, 639, 641, 642,
+ 643, 644, 645, 646, 647, 648, 649, 640, 650, 651,
+ 652, 653, 654, 655, 656, 657, 662, 667, 685, 686,
+ 687, 690, 688, 689, 691, 692, 693, 694, 708, 709,
+ 711, 712, 715, 716, 713, 714, 717, 710, 726, 727,
+ 473, 508, 530, 670, 671, 538, 539, 520, 521, 0,
+ 0, 0, 525, 718, 562, 474, 529, 526, 0, 0,
+ 592, 593, 594, 524, 522, 523, 527, 528
+};
+
+ /* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, 95,
+ 235, 240, 249, 707, -293, -293, 708, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293
+};
+
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ 0, 1, 17, 18, 19, 32, 288, 20, 33, 540,
+ 21, 34, 556, 22, 35, 571, 23, 36, 589, 606,
+ 607, 608, 609, 610, 611, 24, 37, 612, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+ 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
+ 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
+ 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
+ 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
+ 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
+ 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
+ 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
+ 411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
+ 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
+ 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
+ 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
+ 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
+ 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
+ 481, 482, 483, 484, 485, 486, 487, 488, 489, 490,
+ 491, 492, 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, 541, 542, 543, 544, 545, 546,
+ 547, 548, 557, 558, 559, 560, 561, 562, 563, 590,
+ 591, 592, 593, 594, 595, 596, 597, 598, 599, 572,
+ 573, 574, 575, 576, 577, 578, 25, 38, 627, 628,
+ 629, 630, 631, 632, 633, 634, 635, 26, 39, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665,
+ 666, 667, 668, 669, 670, 671, 672, 673, 674, 27,
+ 40, 676, 677, 28, 41, 679, 680, 525, 526, 527,
+ 528, 29, 42, 691, 692, 693, 694, 695, 696, 697,
+ 698, 699, 700, 701, 30, 43, 712, 713, 714, 715,
+ 716, 717, 718, 719, 720, 721, 722, 529, 530, 531,
+ 31, 44, 725, 726, 727
+};
+
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+static const yytype_int16 yytable[] =
+{
+ 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, 77, 78, 723, 724, 675, 678, 79, 80,
+ 81, 728, 729, 730, 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, 121, 122, 731, 732, 733, 734, 735,
+ 736, 737, 579, 738, 123, 124, 125, 126, 127, 739,
+ 128, 129, 130, 579, 740, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 741, 613, 742, 157, 743, 744, 158, 159, 160,
+ 161, 162, 163, 164, 745, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 681,
+ 682, 683, 684, 685, 686, 687, 688, 689, 690, 549,
+ 746, 747, 748, 749, 750, 751, 752, 550, 551, 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, 218, 219,
+ 220, 221, 222, 753, 223, 754, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 702, 703, 704, 705, 706,
+ 707, 708, 709, 710, 755, 756, 243, 244, 245, 246,
+ 247, 248, 249, 250, 251, 252, 552, 2, 553, 757,
+ 758, 554, 614, 759, 760, 761, 253, 615, 3, 4,
+ 762, 763, 764, 765, 254, 255, 616, 256, 257, 766,
+ 258, 259, 260, 261, 262, 767, 768, 263, 264, 265,
+ 266, 267, 268, 269, 270, 769, 770, 771, 271, 532,
+ 772, 533, 534, 711, 773, 5, 774, 272, 273, 274,
+ 275, 6, 775, 564, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 776, 287, 581, 582, 583,
+ 584, 777, 778, 779, 780, 781, 580, 586, 581, 582,
+ 583, 584, 585, 782, 783, 784, 785, 786, 586, 565,
+ 566, 787, 788, 789, 790, 7, 791, 792, 600, 601,
+ 602, 603, 604, 793, 535, 794, 795, 796, 797, 798,
+ 799, 605, 800, 8, 801, 802, 567, 803, 804, 805,
+ 587, 588, 619, 620, 621, 622, 623, 624, 625, 626,
+ 806, 807, 808, 809, 810, 811, 812, 536, 813, 814,
+ 537, 815, 816, 817, 818, 819, 820, 821, 822, 538,
+ 823, 824, 825, 826, 827, 828, 829, 830, 831, 832,
+ 555, 833, 834, 835, 836, 837, 838, 839, 840, 9,
+ 841, 636, 637, 638, 639, 640, 641, 642, 643, 644,
+ 645, 646, 647, 648, 649, 650, 651, 652, 653, 654,
+ 842, 843, 844, 845, 846, 847, 848, 849, 850, 568,
+ 569, 851, 852, 853, 854, 855, 856, 857, 858, 859,
+ 860, 861, 862, 863, 864, 865, 866, 867, 868, 869,
+ 870, 871, 872, 873, 874, 875, 876, 877, 878, 879,
+ 880, 881, 882, 10, 883, 884, 885, 886, 887, 888,
+ 889, 890, 891, 892, 570, 893, 894, 895, 896, 897,
+ 898, 899, 900, 901, 902, 11, 903, 904, 905, 906,
+ 907, 908, 909, 910, 911, 912, 913, 914, 915, 916,
+ 917, 918, 919, 920, 921, 922, 12, 923, 924, 925,
+ 926, 927, 928, 929, 930, 931, 932, 933, 13, 934,
+ 935, 936, 937, 938, 939, 940, 941, 942, 943, 944,
+ 945, 539, 946, 947, 948, 949, 950, 951, 952, 953,
+ 954, 955, 956, 957, 958, 14, 959, 960, 961, 15,
+ 962, 963, 964, 965, 966, 16, 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, 993, 994, 995, 996, 997, 998, 999, 1000,
+ 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+ 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
+ 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
+ 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
+ 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060,
+ 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070,
+ 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080,
+ 1081, 1082, 1083, 1084, 1085, 1086, 1087, 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, 617, 618
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 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, 45, 46, 319, 320, 117, 329, 51, 52,
+ 53, 10, 10, 10, 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, 96, 97, 10, 10, 10, 10, 10,
+ 10, 10, 47, 10, 107, 108, 109, 110, 111, 10,
+ 113, 114, 115, 47, 10, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 10, 37, 10, 147, 10, 10, 150, 151, 152,
+ 153, 154, 155, 156, 10, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 47,
+ 10, 10, 10, 10, 10, 10, 10, 55, 56, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
+ 233, 234, 235, 10, 237, 10, 239, 240, 241, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 10, 10, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 144, 0, 146, 10,
+ 10, 149, 37, 10, 10, 10, 289, 37, 11, 12,
+ 10, 10, 10, 10, 297, 298, 37, 300, 301, 10,
+ 303, 304, 305, 306, 307, 10, 10, 310, 311, 312,
+ 313, 314, 315, 316, 317, 10, 10, 10, 321, 47,
+ 10, 49, 50, 348, 10, 48, 10, 330, 331, 332,
+ 333, 54, 10, 47, 337, 338, 339, 340, 341, 342,
+ 343, 344, 345, 346, 347, 10, 349, 292, 293, 294,
+ 295, 10, 10, 10, 10, 10, 290, 302, 292, 293,
+ 294, 295, 296, 10, 10, 10, 10, 10, 302, 83,
+ 84, 10, 10, 10, 10, 98, 10, 10, 323, 324,
+ 325, 326, 327, 10, 112, 10, 10, 10, 10, 10,
+ 10, 336, 10, 116, 10, 10, 110, 10, 10, 10,
+ 334, 335, 99, 100, 101, 102, 103, 104, 105, 106,
+ 10, 10, 10, 10, 10, 10, 10, 145, 10, 10,
+ 148, 10, 10, 10, 10, 10, 10, 10, 10, 157,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 308, 10, 10, 10, 10, 10, 10, 10, 10, 172,
+ 10, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 193,
+ 194, 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, 236, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 238, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 258, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 279, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 291, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 309, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 318, 10, 10, 10, 322,
+ 10, 10, 10, 10, 10, 328, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 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, -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
+};
+
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_int16 yystos[] =
+{
+ 0, 351, 0, 11, 12, 48, 54, 98, 116, 172,
+ 236, 258, 279, 291, 318, 322, 328, 352, 353, 354,
+ 357, 360, 363, 366, 375, 646, 657, 679, 683, 691,
+ 704, 720, 355, 358, 361, 364, 367, 376, 647, 658,
+ 680, 684, 692, 705, 721, 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, 45, 46, 51,
+ 52, 53, 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, 96, 97, 107, 108, 109, 110, 111, 113, 114,
+ 115, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 147, 150, 151,
+ 152, 153, 154, 155, 156, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
+ 233, 234, 235, 237, 239, 240, 241, 242, 243, 244,
+ 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
+ 255, 256, 257, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 289, 297, 298, 300, 301, 303, 304,
+ 305, 306, 307, 310, 311, 312, 313, 314, 315, 316,
+ 317, 321, 330, 331, 332, 333, 337, 338, 339, 340,
+ 341, 342, 343, 344, 345, 346, 347, 349, 356, 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, 602, 603, 604, 605, 606, 607, 608,
+ 609, 610, 611, 612, 613, 687, 688, 689, 690, 717,
+ 718, 719, 47, 49, 50, 112, 145, 148, 157, 309,
+ 359, 614, 615, 616, 617, 618, 619, 620, 621, 47,
+ 55, 56, 144, 146, 149, 308, 362, 622, 623, 624,
+ 625, 626, 627, 628, 47, 83, 84, 110, 193, 194,
+ 238, 365, 639, 640, 641, 642, 643, 644, 645, 47,
+ 290, 292, 293, 294, 295, 296, 302, 334, 335, 368,
+ 629, 630, 631, 632, 633, 634, 635, 636, 637, 638,
+ 323, 324, 325, 326, 327, 336, 369, 370, 371, 372,
+ 373, 374, 377, 629, 630, 631, 632, 633, 636, 99,
+ 100, 101, 102, 103, 104, 105, 106, 648, 649, 650,
+ 651, 652, 653, 654, 655, 656, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 659, 660, 661, 662, 663,
+ 664, 665, 666, 667, 668, 669, 670, 671, 672, 673,
+ 674, 675, 676, 677, 678, 117, 681, 682, 329, 685,
+ 686, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 693, 694, 695, 696, 697, 698, 699, 700, 701,
+ 702, 703, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 348, 706, 707, 708, 709, 710, 711, 712, 713,
+ 714, 715, 716, 319, 320, 722, 723, 724, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10
+};
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_int16 yyr1[] =
+{
+ 0, 350, 351, 351, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352, 353, 354,
+ 355, 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, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 357, 358, 358, 359, 359,
+ 359, 359, 359, 359, 359, 359, 360, 361, 361, 362,
+ 362, 362, 362, 362, 362, 362, 363, 364, 364, 365,
+ 365, 365, 365, 365, 365, 365, 366, 367, 367, 368,
+ 368, 368, 368, 368, 368, 368, 368, 368, 368, 369,
+ 370, 371, 372, 373, 374, 375, 376, 376, 377, 377,
+ 377, 377, 377, 377, 377, 377, 377, 377, 377, 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, 602, 603, 604, 605, 606, 607,
+ 608, 609, 610, 611, 612, 613, 614, 615, 616, 617,
+ 618, 619, 620, 621, 622, 623, 624, 625, 626, 627,
+ 628, 629, 630, 631, 632, 633, 634, 635, 636, 637,
+ 638, 639, 640, 641, 642, 643, 644, 645, 646, 647,
+ 647, 648, 648, 648, 648, 648, 648, 648, 648, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 658,
+ 659, 659, 659, 659, 659, 659, 659, 659, 659, 659,
+ 659, 659, 659, 659, 659, 659, 659, 659, 659, 660,
+ 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
+ 671, 672, 673, 674, 675, 676, 677, 678, 679, 680,
+ 680, 681, 682, 683, 684, 684, 685, 686, 687, 688,
+ 689, 690, 691, 692, 692, 693, 693, 693, 693, 693,
+ 693, 693, 693, 693, 693, 694, 695, 696, 697, 698,
+ 699, 700, 701, 702, 703, 704, 705, 705, 706, 706,
+ 706, 706, 706, 706, 706, 706, 706, 706, 707, 708,
+ 709, 710, 711, 712, 713, 714, 715, 716, 717, 718,
+ 719, 720, 721, 721, 722, 722, 723, 724
+};
+
+ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+static const yytype_int8 yyr2[] =
+{
+ 0, 2, 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
+ 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 2, 2, 2, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 4, 4, 4, 3, 3, 4, 4, 3,
+ 3, 2, 2, 2, 2, 2, 2, 2, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 3, 2, 2, 2, 1, 2,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 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, 1, 1, 1, 1, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
+ 2, 1, 2, 0, 1, 1, 2, 2
+};
+
+
+enum { YYENOMEM = -2 };
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)
+
+/* Backward compatibility with an undocumented macro.
+ Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
+
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+
+/* This macro is provided for backward compatibility. */
+# ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Kind, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/
+
+static void
+yy_symbol_value_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
+{
+ FILE *yyoutput = yyo;
+ YY_USE (yyoutput);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yykind < YYNTOKENS)
+ YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
+# endif
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/
+
+static void
+yy_symbol_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
+{
+ YYFPRINTF (yyo, "%s %s (",
+ yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
+
+ yy_symbol_value_print (yyo, yykind, yyvaluep);
+ YYFPRINTF (yyo, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+static void
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+static void
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
+ int yyrule)
+{
+ int yylno = yyrline[yyrule];
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr,
+ YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
+ &yyvsp[(yyi + 1) - (yynrhs)]);
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+static void
+yydestruct (const char *yymsg,
+ yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
+{
+ YY_USE (yyvaluep);
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+/* Lookahead token kind. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+int
+yyparse (void)
+{
+ yy_state_fast_t yystate = 0;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus = 0;
+
+ /* Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* Their size. */
+ YYPTRDIFF_T yystacksize = YYINITDEPTH;
+
+ /* The state stack: array, bottom, top. */
+ yy_state_t yyssa[YYINITDEPTH];
+ yy_state_t *yyss = yyssa;
+ yy_state_t *yyssp = yyss;
+
+ /* The semantic value stack: array, bottom, top. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp = yyvs;
+
+ int yyn;
+ /* The return value of yyparse. */
+ int yyresult;
+ /* Lookahead symbol kind. */
+ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ goto yysetstate;
+
+
+/*------------------------------------------------------------.
+| yynewstate -- push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+ YY_IGNORE_USELESS_CAST_BEGIN
+ *yyssp = YY_CAST (yy_state_t, yystate);
+ YY_IGNORE_USELESS_CAST_END
+ YY_STACK_PRINT (yyss, yyssp);
+
+ if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+#else
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYPTRDIFF_T yysize = yyssp - yyss + 1;
+
+# if defined yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ yy_state_t *yyss1 = yyss;
+ YYSTYPE *yyvs1 = yyvs;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * YYSIZEOF (*yyssp),
+ &yyvs1, yysize * YYSIZEOF (*yyvsp),
+ &yystacksize);
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+# else /* defined YYSTACK_RELOCATE */
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yy_state_t *yyss1 = yyss;
+ union yyalloc *yyptr =
+ YY_CAST (union yyalloc *,
+ YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YY_IGNORE_USELESS_CAST_BEGIN
+ YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+ YY_CAST (long, yystacksize)));
+ YY_IGNORE_USELESS_CAST_END
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token\n"));
+ yychar = yylex ();
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = YYEOF;
+ yytoken = YYSYMBOL_YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else if (yychar == YYerror)
+ {
+ /* The scanner already issued an error message, process directly
+ to error recovery. But do not keep the error token as
+ lookahead, it is too special and may lead us to an endless
+ loop in error recovery. */
+ yychar = YYUNDEF;
+ yytoken = YYSYMBOL_YYerror;
+ goto yyerrlab1;
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ '$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */
+#line 216 "util/configparser.y"
+ {
+ OUTYY(("\nP(force-toplevel)\n"));
+ cfg_parser->started_toplevel = 0;
+ }
+#line 2923 "util/configparser.c"
+ break;
+
+ case 19: /* serverstart: VAR_SERVER */
+#line 223 "util/configparser.y"
+ {
+ OUTYY(("\nP(server:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 2932 "util/configparser.c"
+ break;
+
+ case 265: /* stubstart: VAR_STUB_ZONE */
+#line 341 "util/configparser.y"
+ {
+ struct config_stub* s;
+ OUTYY(("\nP(stub_zone:)\n"));
+ cfg_parser->started_toplevel = 1;
+ s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
+ if(s) {
+ s->next = cfg_parser->cfg->stubs;
+ cfg_parser->cfg->stubs = s;
+ } else {
+ yyerror("out of memory");
+ }
+ }
+#line 2949 "util/configparser.c"
+ break;
+
+ case 276: /* forwardstart: VAR_FORWARD_ZONE */
+#line 360 "util/configparser.y"
+ {
+ struct config_stub* s;
+ OUTYY(("\nP(forward_zone:)\n"));
+ cfg_parser->started_toplevel = 1;
+ s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
+ if(s) {
+ s->next = cfg_parser->cfg->forwards;
+ cfg_parser->cfg->forwards = s;
+ } else {
+ yyerror("out of memory");
+ }
+ }
+#line 2966 "util/configparser.c"
+ break;
+
+ case 286: /* viewstart: VAR_VIEW */
+#line 379 "util/configparser.y"
+ {
+ struct config_view* s;
+ OUTYY(("\nP(view:)\n"));
+ cfg_parser->started_toplevel = 1;
+ s = (struct config_view*)calloc(1, sizeof(struct config_view));
+ if(s) {
+ s->next = cfg_parser->cfg->views;
+ if(s->next && !s->next->name)
+ yyerror("view without name");
+ cfg_parser->cfg->views = s;
+ } else {
+ yyerror("out of memory");
+ }
+ }
+#line 2985 "util/configparser.c"
+ break;
+
+ case 296: /* authstart: VAR_AUTH_ZONE */
+#line 400 "util/configparser.y"
+ {
+ struct config_auth* s;
+ OUTYY(("\nP(auth_zone:)\n"));
+ cfg_parser->started_toplevel = 1;
+ s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
+ if(s) {
+ s->next = cfg_parser->cfg->auths;
+ cfg_parser->cfg->auths = s;
+ /* defaults for auth zone */
+ s->for_downstream = 1;
+ s->for_upstream = 1;
+ s->fallback_enabled = 0;
+ s->zonemd_check = 0;
+ s->zonemd_reject_absence = 0;
+ s->isrpz = 0;
+ } else {
+ yyerror("out of memory");
+ }
+ }
+#line 3009 "util/configparser.c"
+ break;
+
+ case 309: /* rpz_tag: VAR_TAGS STRING_ARG */
+#line 428 "util/configparser.y"
+ {
+ uint8_t* bitlist;
+ size_t len = 0;
+ OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
+ bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+ &len);
+ free((yyvsp[0].str));
+ if(!bitlist) {
+ yyerror("could not parse tags, (define-tag them first)");
+ }
+ if(bitlist) {
+ cfg_parser->cfg->auths->rpz_taglist = bitlist;
+ cfg_parser->cfg->auths->rpz_taglistlen = len;
+
+ }
+ }
+#line 3030 "util/configparser.c"
+ break;
+
+ case 310: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */
+#line 447 "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 &&
+ strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 &&
+ strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) {
+ yyerror("rpz-action-override action: expected nxdomain, "
+ "nodata, passthru, drop, cname or disabled");
+ free((yyvsp[0].str));
+ cfg_parser->cfg->auths->rpz_action_override = NULL;
+ }
+ else {
+ cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
+ }
+ }
+#line 3049 "util/configparser.c"
+ break;
+
+ case 311: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */
+#line 464 "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 3059 "util/configparser.c"
+ break;
+
+ case 312: /* rpz_log: VAR_RPZ_LOG STRING_ARG */
+#line 472 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3071 "util/configparser.c"
+ break;
+
+ case 313: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */
+#line 482 "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 3081 "util/configparser.c"
+ break;
+
+ case 314: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */
+#line 489 "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 3093 "util/configparser.c"
+ break;
+
+ case 315: /* rpzstart: VAR_RPZ */
+#line 499 "util/configparser.y"
+ {
+ struct config_auth* s;
+ OUTYY(("\nP(rpz:)\n"));
+ cfg_parser->started_toplevel = 1;
+ s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
+ if(s) {
+ s->next = cfg_parser->cfg->auths;
+ cfg_parser->cfg->auths = s;
+ /* defaults for RPZ auth zone */
+ s->for_downstream = 0;
+ s->for_upstream = 0;
+ s->fallback_enabled = 0;
+ s->isrpz = 1;
+ } else {
+ yyerror("out of memory");
+ }
+ }
+#line 3115 "util/configparser.c"
+ break;
+
+ case 330: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */
+#line 524 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3127 "util/configparser.c"
+ break;
+
+ case 331: /* server_verbosity: VAR_VERBOSITY STRING_ARG */
+#line 533 "util/configparser.y"
+ {
+ OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3139 "util/configparser.c"
+ break;
+
+ case 332: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */
+#line 542 "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)
+ cfg_parser->cfg->stat_interval = 0;
+ else if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3153 "util/configparser.c"
+ break;
+
+ case 333: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */
+#line 553 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3165 "util/configparser.c"
+ break;
+
+ case 334: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */
+#line 562 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3177 "util/configparser.c"
+ break;
+
+ case 335: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */
+#line 571 "util/configparser.y"
+ {
+ OUTYY(("P(server_statistics_inhibit_zero:%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->stat_inhibit_zero = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3189 "util/configparser.c"
+ break;
+
+ case 336: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */
+#line 580 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3201 "util/configparser.c"
+ break;
+
+ case 337: /* server_shm_key: VAR_SHM_KEY STRING_ARG */
+#line 589 "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)
+ cfg_parser->cfg->shm_key = 0;
+ else if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3215 "util/configparser.c"
+ break;
+
+ case 338: /* server_port: VAR_PORT STRING_ARG */
+#line 600 "util/configparser.y"
+ {
+ OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("port number expected");
+ else cfg_parser->cfg->port = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3227 "util/configparser.c"
+ break;
+
+ case 339: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */
+#line 609 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
+ fatal_exit("out of memory adding client-subnet");
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 3242 "util/configparser.c"
+ break;
+
+ case 340: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */
+#line 621 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
+ (yyvsp[0].str)))
+ fatal_exit("out of memory adding client-subnet-zone");
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 3258 "util/configparser.c"
+ break;
+
+ case 341: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */
+#line 635 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(server_client_subnet_always_forward:%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->client_subnet_always_forward =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3276 "util/configparser.c"
+ break;
+
+ case 342: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */
+#line 650 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
+ OUTYY(("P(Deprecated option, ignoring)\n"));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3290 "util/configparser.c"
+ break;
+
+ case 343: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 661 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv4 subnet length expected");
+ else if (atoi((yyvsp[0].str)) > 32)
+ cfg_parser->cfg->max_client_subnet_ipv4 = 32;
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->max_client_subnet_ipv4 = 0;
+ else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3310 "util/configparser.c"
+ break;
+
+ case 344: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 678 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("Ipv6 subnet length expected");
+ else if (atoi((yyvsp[0].str)) > 128)
+ cfg_parser->cfg->max_client_subnet_ipv6 = 128;
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->max_client_subnet_ipv6 = 0;
+ else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3330 "util/configparser.c"
+ break;
+
+ case 345: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 695 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv4 subnet length expected");
+ else if (atoi((yyvsp[0].str)) > 32)
+ cfg_parser->cfg->min_client_subnet_ipv4 = 32;
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->min_client_subnet_ipv4 = 0;
+ else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3350 "util/configparser.c"
+ break;
+
+ case 346: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 712 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("Ipv6 subnet length expected");
+ else if (atoi((yyvsp[0].str)) > 128)
+ cfg_parser->cfg->min_client_subnet_ipv6 = 128;
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->min_client_subnet_ipv6 = 0;
+ else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3370 "util/configparser.c"
+ break;
+
+ case 347: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */
+#line 729 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv4 ECS tree size expected");
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
+ else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3388 "util/configparser.c"
+ break;
+
+ case 348: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */
+#line 744 "util/configparser.y"
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv6 ECS tree size expected");
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
+ else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 3406 "util/configparser.c"
+ break;
+
+ case 349: /* server_interface: VAR_INTERFACE STRING_ARG */
+#line 759 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->num_ifs == 0)
+ cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
+ else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
+ (cfg_parser->cfg->num_ifs+1)*sizeof(char*));
+ if(!cfg_parser->cfg->ifs)
+ yyerror("out of memory");
+ else
+ cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
+ }
+#line 3422 "util/configparser.c"
+ break;
+
+ case 350: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */
+#line 772 "util/configparser.y"
+ {
+ OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->num_out_ifs == 0)
+ cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
+ else cfg_parser->cfg->out_ifs = realloc(
+ cfg_parser->cfg->out_ifs,
+ (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
+ if(!cfg_parser->cfg->out_ifs)
+ yyerror("out of memory");
+ else
+ cfg_parser->cfg->out_ifs[
+ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
+ }
+#line 3440 "util/configparser.c"
+ break;
+
+ case 351: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */
+#line 787 "util/configparser.y"
+ {
+ OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3452 "util/configparser.c"
+ break;
+
+ case 352: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */
+#line 796 "util/configparser.y"
+ {
+ OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
+ if(!cfg_mark_ports((yyvsp[0].str), 1,
+ cfg_parser->cfg->outgoing_avail_ports, 65536))
+ yyerror("port number or range (\"low-high\") expected");
+ free((yyvsp[0].str));
+ }
+#line 3464 "util/configparser.c"
+ break;
+
+ case 353: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */
+#line 805 "util/configparser.y"
+ {
+ OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
+ if(!cfg_mark_ports((yyvsp[0].str), 0,
+ cfg_parser->cfg->outgoing_avail_ports, 65536))
+ yyerror("port number or range (\"low-high\") expected");
+ free((yyvsp[0].str));
+ }
+#line 3476 "util/configparser.c"
+ break;
+
+ case 354: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */
+#line 814 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3488 "util/configparser.c"
+ break;
+
+ case 355: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */
+#line 823 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3500 "util/configparser.c"
+ break;
+
+ case 356: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */
+#line 832 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3512 "util/configparser.c"
+ break;
+
+ case 357: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */
+#line 841 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->if_automatic_ports);
+ cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str);
+ }
+#line 3522 "util/configparser.c"
+ break;
+
+ case 358: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */
+#line 848 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3534 "util/configparser.c"
+ break;
+
+ case 359: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */
+#line 857 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3546 "util/configparser.c"
+ break;
+
+ case 360: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */
+#line 866 "util/configparser.y"
+ {
+ OUTYY(("P(server_do_nat64:%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->do_nat64 = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3558 "util/configparser.c"
+ break;
+
+ case 361: /* server_do_udp: VAR_DO_UDP STRING_ARG */
+#line 875 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3570 "util/configparser.c"
+ break;
+
+ case 362: /* server_do_tcp: VAR_DO_TCP STRING_ARG */
+#line 884 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3582 "util/configparser.c"
+ break;
+
+ case 363: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */
+#line 893 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3594 "util/configparser.c"
+ break;
+
+ case 364: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */
+#line 902 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3606 "util/configparser.c"
+ break;
+
+ case 365: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */
+#line 911 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3618 "util/configparser.c"
+ break;
+
+ case 366: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */
+#line 920 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3630 "util/configparser.c"
+ break;
+
+ case 367: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */
+#line 929 "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)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) > 120000)
+ cfg_parser->cfg->tcp_idle_timeout = 120000;
+ else if (atoi((yyvsp[0].str)) < 1)
+ cfg_parser->cfg->tcp_idle_timeout = 1;
+ else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3646 "util/configparser.c"
+ break;
+
+ case 368: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */
+#line 942 "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)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) < 1)
+ cfg_parser->cfg->max_reuse_tcp_queries = 0;
+ else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3660 "util/configparser.c"
+ break;
+
+ case 369: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */
+#line 953 "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)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) < 1)
+ cfg_parser->cfg->tcp_reuse_timeout = 0;
+ else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3674 "util/configparser.c"
+ break;
+
+ case 370: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */
+#line 964 "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)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) < 1)
+ cfg_parser->cfg->tcp_auth_query_timeout = 0;
+ else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3688 "util/configparser.c"
+ break;
+
+ case 371: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */
+#line 975 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3700 "util/configparser.c"
+ break;
+
+ case 372: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */
+#line 984 "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)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) > 6553500)
+ cfg_parser->cfg->tcp_keepalive_timeout = 6553500;
+ else if (atoi((yyvsp[0].str)) < 1)
+ cfg_parser->cfg->tcp_keepalive_timeout = 0;
+ else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3716 "util/configparser.c"
+ break;
+
+ case 373: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */
+#line 997 "util/configparser.y"
+ {
+ OUTYY(("P(server_sock_queue_timeout:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) > 6553500)
+ cfg_parser->cfg->sock_queue_timeout = 6553500;
+ else if (atoi((yyvsp[0].str)) < 1)
+ cfg_parser->cfg->sock_queue_timeout = 0;
+ else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3732 "util/configparser.c"
+ break;
+
+ case 374: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */
+#line 1010 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3744 "util/configparser.c"
+ break;
+
+ case 375: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */
+#line 1019 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3756 "util/configparser.c"
+ break;
+
+ case 376: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */
+#line 1028 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3768 "util/configparser.c"
+ break;
+
+ case 377: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */
+#line 1037 "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 3778 "util/configparser.c"
+ break;
+
+ case 378: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */
+#line 1044 "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 3788 "util/configparser.c"
+ break;
+
+ case 379: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */
+#line 1051 "util/configparser.y"
+ {
+ OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("port number expected");
+ else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3800 "util/configparser.c"
+ break;
+
+ case 380: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */
+#line 1060 "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 3810 "util/configparser.c"
+ break;
+
+ case 381: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */
+#line 1067 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3822 "util/configparser.c"
+ break;
+
+ case 382: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */
+#line 1076 "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 3833 "util/configparser.c"
+ break;
+
+ case 383: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */
+#line 1084 "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 3843 "util/configparser.c"
+ break;
+
+ case 384: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */
+#line 1091 "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 3853 "util/configparser.c"
+ break;
+
+ case 385: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */
+#line 1098 "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 3864 "util/configparser.c"
+ break;
+
+ case 386: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */
+#line 1106 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3876 "util/configparser.c"
+ break;
+
+ case 387: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */
+#line 1115 "util/configparser.y"
+ {
+ OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("port number expected");
+ else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3888 "util/configparser.c"
+ break;
+
+ case 388: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */
+#line 1123 "util/configparser.y"
+ {
+ OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->http_endpoint);
+ if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') {
+ cfg_parser->cfg->http_endpoint = malloc(strlen((yyvsp[0].str))+2);
+ if(!cfg_parser->cfg->http_endpoint)
+ yyerror("out of memory");
+ cfg_parser->cfg->http_endpoint[0] = '/';
+ memmove(cfg_parser->cfg->http_endpoint+1, (yyvsp[0].str),
+ strlen((yyvsp[0].str))+1);
+ free((yyvsp[0].str));
+ } else {
+ cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
+ }
+ }
+#line 3908 "util/configparser.c"
+ break;
+
+ case 389: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */
+#line 1139 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 3920 "util/configparser.c"
+ break;
+
+ case 390: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */
+#line 1147 "util/configparser.y"
+ {
+ OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str),
+ &cfg_parser->cfg->http_query_buffer_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
+ }
+#line 3932 "util/configparser.c"
+ break;
+
+ case 391: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */
+#line 1155 "util/configparser.y"
+ {
+ OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str),
+ &cfg_parser->cfg->http_response_buffer_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
+ }
+#line 3944 "util/configparser.c"
+ break;
+
+ case 392: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */
+#line 1163 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3956 "util/configparser.c"
+ break;
+
+ case 393: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */
+#line 1171 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3968 "util/configparser.c"
+ break;
+
+ case 394: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */
+#line 1179 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3980 "util/configparser.c"
+ break;
+
+ case 395: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */
+#line 1188 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3992 "util/configparser.c"
+ break;
+
+ case 396: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */
+#line 1197 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0);
+#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
+ if(strcmp((yyvsp[0].str), "yes") == 0)
+ yyerror("no syslog services are available. "
+ "(reconfigure and compile to add)");
+#endif
+ free((yyvsp[0].str));
+ }
+#line 4009 "util/configparser.c"
+ break;
+
+ case 397: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */
+#line 1211 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4021 "util/configparser.c"
+ break;
+
+ case 398: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */
+#line 1220 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4033 "util/configparser.c"
+ break;
+
+ case 399: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */
+#line 1229 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4045 "util/configparser.c"
+ break;
+
+ case 400: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */
+#line 1238 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4057 "util/configparser.c"
+ break;
+
+ case 401: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */
+#line 1247 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4069 "util/configparser.c"
+ break;
+
+ case 402: /* server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG */
+#line 1256 "util/configparser.y"
+ {
+ OUTYY(("P(server_log_destaddr:%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->log_destaddr = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4081 "util/configparser.c"
+ break;
+
+ case 403: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */
+#line 1265 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4093 "util/configparser.c"
+ break;
+
+ case 404: /* server_chroot: VAR_CHROOT STRING_ARG */
+#line 1274 "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 4103 "util/configparser.c"
+ break;
+
+ case 405: /* server_username: VAR_USERNAME STRING_ARG */
+#line 1281 "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 4113 "util/configparser.c"
+ break;
+
+ case 406: /* server_directory: VAR_DIRECTORY STRING_ARG */
+#line 1288 "util/configparser.y"
+ {
+ OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->directory);
+ cfg_parser->cfg->directory = (yyvsp[0].str);
+ /* change there right away for includes relative to this */
+ if((yyvsp[0].str)[0]) {
+ char* d;
+#ifdef UB_ON_WINDOWS
+ w_config_adjust_directory(cfg_parser->cfg);
+#endif
+ d = cfg_parser->cfg->directory;
+ /* adjust directory if we have already chroot,
+ * like, we reread after sighup */
+ if(cfg_parser->chroot && cfg_parser->chroot[0] &&
+ strncmp(d, cfg_parser->chroot, strlen(
+ cfg_parser->chroot)) == 0)
+ d += strlen(cfg_parser->chroot);
+ if(d[0]) {
+ if(chdir(d))
+ log_err("cannot chdir to directory: %s (%s)",
+ d, strerror(errno));
+ }
+ }
+ }
+#line 4142 "util/configparser.c"
+ break;
+
+ case 407: /* server_logfile: VAR_LOGFILE STRING_ARG */
+#line 1314 "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 4153 "util/configparser.c"
+ break;
+
+ case 408: /* server_pidfile: VAR_PIDFILE STRING_ARG */
+#line 1322 "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 4163 "util/configparser.c"
+ break;
+
+ case 409: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */
+#line 1329 "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 4173 "util/configparser.c"
+ break;
+
+ case 410: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */
+#line 1336 "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 4183 "util/configparser.c"
+ break;
+
+ case 411: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */
+#line 1343 "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 4193 "util/configparser.c"
+ break;
+
+ case 412: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1350 "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 4204 "util/configparser.c"
+ break;
+
+ case 413: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1358 "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 4215 "util/configparser.c"
+ break;
+
+ case 414: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */
+#line 1366 "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 4226 "util/configparser.c"
+ break;
+
+ case 415: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */
+#line 1374 "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 4236 "util/configparser.c"
+ break;
+
+ case 416: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */
+#line 1381 "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)
+ yyerror("expected yes or no.");
+ else
+ cfg_parser->cfg->trust_anchor_signaling =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4250 "util/configparser.c"
+ break;
+
+ case 417: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */
+#line 1392 "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)
+ yyerror("expected yes or no.");
+ else
+ cfg_parser->cfg->root_key_sentinel =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4264 "util/configparser.c"
+ break;
+
+ case 418: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */
+#line 1403 "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 4274 "util/configparser.c"
+ break;
+
+ case 419: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */
+#line 1410 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4286 "util/configparser.c"
+ break;
+
+ case 420: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */
+#line 1419 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4298 "util/configparser.c"
+ break;
+
+ case 421: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */
+#line 1428 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4310 "util/configparser.c"
+ break;
+
+ case 422: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */
+#line 1437 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4322 "util/configparser.c"
+ break;
+
+ case 423: /* server_identity: VAR_IDENTITY STRING_ARG */
+#line 1446 "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 4332 "util/configparser.c"
+ break;
+
+ case 424: /* server_version: VAR_VERSION STRING_ARG */
+#line 1453 "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 4342 "util/configparser.c"
+ break;
+
+ case 425: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */
+#line 1460 "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 4352 "util/configparser.c"
+ break;
+
+ case 426: /* server_nsid: VAR_NSID STRING_ARG */
+#line 1467 "util/configparser.y"
+ {
+ OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->nsid_cfg_str);
+ cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str);
+ free(cfg_parser->cfg->nsid);
+ cfg_parser->cfg->nsid = NULL;
+ cfg_parser->cfg->nsid_len = 0;
+ if (*(yyvsp[0].str) == 0)
+ ; /* pass; empty string is not setting nsid */
+ else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid(
+ (yyvsp[0].str), &cfg_parser->cfg->nsid_len)))
+ yyerror("the NSID must be either a hex string or an "
+ "ascii character string prepended with ascii_.");
+ }
+#line 4371 "util/configparser.c"
+ break;
+
+ case 427: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */
+#line 1483 "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 4382 "util/configparser.c"
+ break;
+
+ case 428: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */
+#line 1491 "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 4393 "util/configparser.c"
+ break;
+
+ case 429: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */
+#line 1499 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->so_reuseport =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4406 "util/configparser.c"
+ break;
+
+ case 430: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */
+#line 1509 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_transparent =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4419 "util/configparser.c"
+ break;
+
+ case 431: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */
+#line 1519 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_freebind =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4432 "util/configparser.c"
+ break;
+
+ case 432: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */
+#line 1529 "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)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) > 63)
+ yyerror("value too large (max 63)");
+ else if (atoi((yyvsp[0].str)) < 0)
+ yyerror("value too small (min 0)");
+ else
+ cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4449 "util/configparser.c"
+ break;
+
+ case 433: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */
+#line 1543 "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 4460 "util/configparser.c"
+ break;
+
+ case 434: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */
+#line 1551 "util/configparser.y"
+ {
+ OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) < 12)
+ yyerror("edns buffer size too small");
+ else if (atoi((yyvsp[0].str)) > 65535)
+ cfg_parser->cfg->edns_buffer_size = 65535;
+ else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4476 "util/configparser.c"
+ break;
+
+ case 435: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */
+#line 1564 "util/configparser.y"
+ {
+ OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else if (atoi((yyvsp[0].str)) < 4096)
+ yyerror("message buffer size too small (use 4096)");
+ else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4490 "util/configparser.c"
+ break;
+
+ case 436: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */
+#line 1575 "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 4501 "util/configparser.c"
+ break;
+
+ case 437: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */
+#line 1583 "util/configparser.y"
+ {
+ OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 4517 "util/configparser.c"
+ break;
+
+ case 438: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */
+#line 1596 "util/configparser.y"
+ {
+ OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4529 "util/configparser.c"
+ break;
+
+ case 439: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */
+#line 1605 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4541 "util/configparser.c"
+ break;
+
+ case 440: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */
+#line 1614 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4553 "util/configparser.c"
+ break;
+
+ case 441: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */
+#line 1623 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4565 "util/configparser.c"
+ break;
+
+ case 442: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */
+#line 1632 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->unblock_lan_zones =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4578 "util/configparser.c"
+ break;
+
+ case 443: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */
+#line 1642 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->insecure_lan_zones =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4591 "util/configparser.c"
+ break;
+
+ case 444: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */
+#line 1652 "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 4602 "util/configparser.c"
+ break;
+
+ case 445: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */
+#line 1660 "util/configparser.y"
+ {
+ OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 4618 "util/configparser.c"
+ break;
+
+ case 446: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */
+#line 1673 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4630 "util/configparser.c"
+ break;
+
+ case 447: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */
+#line 1682 "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 4641 "util/configparser.c"
+ break;
+
+ case 448: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */
+#line 1690 "util/configparser.y"
+ {
+ OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4653 "util/configparser.c"
+ break;
+
+ case 449: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */
+#line 1699 "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 4664 "util/configparser.c"
+ break;
+
+ case 450: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */
+#line 1707 "util/configparser.y"
+ {
+ OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 4680 "util/configparser.c"
+ break;
+
+ case 451: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */
+#line 1720 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4692 "util/configparser.c"
+ break;
+
+ case 452: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */
+#line 1729 "util/configparser.y"
+ {
+ OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4704 "util/configparser.c"
+ break;
+
+ case 453: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */
+#line 1738 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->infra_keep_probing =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4717 "util/configparser.c"
+ break;
+
+ case 454: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */
+#line 1748 "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 4727 "util/configparser.c"
+ break;
+
+ case 455: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */
+#line 1755 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_short_bufsize =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4740 "util/configparser.c"
+ break;
+
+ case 456: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */
+#line 1765 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_large_queries =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4753 "util/configparser.c"
+ break;
+
+ case 457: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */
+#line 1775 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_glue =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4766 "util/configparser.c"
+ break;
+
+ case 458: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */
+#line 1785 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_dnssec_stripped =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4779 "util/configparser.c"
+ break;
+
+ case 459: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */
+#line 1795 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_below_nxdomain =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4792 "util/configparser.c"
+ break;
+
+ case 460: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */
+#line 1805 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_referral_path =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4805 "util/configparser.c"
+ break;
+
+ case 461: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */
+#line 1815 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_algo_downgrade =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4818 "util/configparser.c"
+ break;
+
+ case 462: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */
+#line 1825 "util/configparser.y"
+ {
+ OUTYY(("P(server_harden_unknown_additional:%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->harden_unknown_additional =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4831 "util/configparser.c"
+ break;
+
+ case 463: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */
+#line 1835 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->use_caps_bits_for_id =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4844 "util/configparser.c"
+ break;
+
+ case 464: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */
+#line 1845 "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 4854 "util/configparser.c"
+ break;
+
+ case 465: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */
+#line 1852 "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 4864 "util/configparser.c"
+ break;
+
+ case 466: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */
+#line 1859 "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 4874 "util/configparser.c"
+ break;
+
+ case 467: /* server_prefetch: VAR_PREFETCH STRING_ARG */
+#line 1866 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4886 "util/configparser.c"
+ break;
+
+ case 468: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */
+#line 1875 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4898 "util/configparser.c"
+ break;
+
+ case 469: /* server_deny_any: VAR_DENY_ANY STRING_ARG */
+#line 1884 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4910 "util/configparser.c"
+ break;
+
+ case 470: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */
+#line 1893 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4922 "util/configparser.c"
+ break;
+
+ case 471: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */
+#line 1902 "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 4932 "util/configparser.c"
+ break;
+
+ case 472: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */
+#line 1909 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->donotquery_localhost =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4945 "util/configparser.c"
+ break;
+
+ case 473: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */
+#line 1919 "util/configparser.y"
+ {
+ OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ validate_acl_action((yyvsp[0].str));
+ if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding acl");
+ }
+#line 4956 "util/configparser.c"
+ break;
+
+ case 474: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */
+#line 1927 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ validate_acl_action((yyvsp[0].str));
+ if(!cfg_str2list_insert(
+ &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding acl");
+ }
+#line 4968 "util/configparser.c"
+ break;
+
+ case 475: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */
+#line 1936 "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 4978 "util/configparser.c"
+ break;
+
+ case 476: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */
+#line 1943 "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) {
+ cfg_parser->cfg->val_date_override = 0;
+ } else if(strlen((yyvsp[0].str)) == 14) {
+ cfg_parser->cfg->val_date_override =
+ cfg_convert_timeval((yyvsp[0].str));
+ if(!cfg_parser->cfg->val_date_override)
+ yyerror("bad date/time specification");
+ } else {
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str));
+ }
+ free((yyvsp[0].str));
+ }
+#line 4999 "util/configparser.c"
+ break;
+
+ case 477: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */
+#line 1961 "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) {
+ cfg_parser->cfg->val_sig_skew_min = 0;
+ } else {
+ cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str));
+ if(!cfg_parser->cfg->val_sig_skew_min)
+ yyerror("number expected");
+ }
+ free((yyvsp[0].str));
+ }
+#line 5015 "util/configparser.c"
+ break;
+
+ case 478: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */
+#line 1974 "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) {
+ cfg_parser->cfg->val_sig_skew_max = 0;
+ } else {
+ cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str));
+ if(!cfg_parser->cfg->val_sig_skew_max)
+ yyerror("number expected");
+ }
+ free((yyvsp[0].str));
+ }
+#line 5031 "util/configparser.c"
+ break;
+
+ case 479: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */
+#line 1987 "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) {
+ cfg_parser->cfg->val_max_restart = 0;
+ } else {
+ cfg_parser->cfg->val_max_restart = atoi((yyvsp[0].str));
+ if(!cfg_parser->cfg->val_max_restart)
+ yyerror("number expected");
+ }
+ free((yyvsp[0].str));
+ }
+#line 5047 "util/configparser.c"
+ break;
+
+ case 480: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */
+#line 2000 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5059 "util/configparser.c"
+ break;
+
+ case 481: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */
+#line 2009 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5071 "util/configparser.c"
+ break;
+
+ case 482: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */
+#line 2018 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5083 "util/configparser.c"
+ break;
+
+ case 483: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */
+#line 2027 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5095 "util/configparser.c"
+ break;
+
+ case 484: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */
+#line 2036 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->val_clean_additional =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5108 "util/configparser.c"
+ break;
+
+ case 485: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */
+#line 2046 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->val_permissive_mode =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5121 "util/configparser.c"
+ break;
+
+ case 486: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */
+#line 2056 "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)
+ yyerror("expected yes or no.");
+ else
+ cfg_parser->cfg->aggressive_nsec =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5135 "util/configparser.c"
+ break;
+
+ case 487: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */
+#line 2067 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5147 "util/configparser.c"
+ break;
+
+ case 488: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG */
+#line 2076 "util/configparser.y"
+ {
+ OUTYY(("P(server_disable_edns_do:%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->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5159 "util/configparser.c"
+ break;
+
+ case 489: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */
+#line 2085 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5171 "util/configparser.c"
+ break;
+
+ case 490: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */
+#line 2094 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5183 "util/configparser.c"
+ break;
+
+ case 491: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */
+#line 2103 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5195 "util/configparser.c"
+ break;
+
+ case 492: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */
+#line 2112 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5207 "util/configparser.c"
+ break;
+
+ case 493: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */
+#line 2121 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5219 "util/configparser.c"
+ break;
+
+ case 494: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */
+#line 2130 "util/configparser.y"
+ {
+ OUTYY(("P(server_ede_serve_expired:%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->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5231 "util/configparser.c"
+ break;
+
+ case 495: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */
+#line 2139 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5243 "util/configparser.c"
+ break;
+
+ case 496: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */
+#line 2148 "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)
+ yyerror("expected yes or no.");
+#if defined(HAVE_SSL) || defined(HAVE_NETTLE)
+ else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0);
+ if(fake_dsa)
+ log_warn("test option fake_dsa is enabled");
+#endif
+ free((yyvsp[0].str));
+ }
+#line 5259 "util/configparser.c"
+ break;
+
+ case 497: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */
+#line 2161 "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)
+ yyerror("expected yes or no.");
+#if defined(HAVE_SSL) || defined(HAVE_NETTLE)
+ else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0);
+ if(fake_sha1)
+ log_warn("test option fake_sha1 is enabled");
+#endif
+ free((yyvsp[0].str));
+ }
+#line 5275 "util/configparser.c"
+ break;
+
+ case 498: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */
+#line 2174 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5287 "util/configparser.c"
+ break;
+
+ case 499: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */
+#line 2183 "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 5297 "util/configparser.c"
+ break;
+
+ case 500: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */
+#line 2190 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5309 "util/configparser.c"
+ break;
+
+ case 501: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */
+#line 2199 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5321 "util/configparser.c"
+ break;
+
+ case 502: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */
+#line 2208 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5333 "util/configparser.c"
+ break;
+
+ case 503: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */
+#line 2217 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5345 "util/configparser.c"
+ break;
+
+ case 504: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */
+#line 2226 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->permit_small_holddown =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5358 "util/configparser.c"
+ break;
+
+ case 505: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */
+#line 2236 "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 5369 "util/configparser.c"
+ break;
+
+ case 506: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */
+#line 2244 "util/configparser.y"
+ {
+ OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 5385 "util/configparser.c"
+ break;
+
+ case 507: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */
+#line 2257 "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 5396 "util/configparser.c"
+ break;
+
+ case 508: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 2265 "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 &&
+ strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
+ strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
+ && strcmp((yyvsp[0].str), "typetransparent")!=0
+ && strcmp((yyvsp[0].str), "always_transparent")!=0
+ && strcmp((yyvsp[0].str), "block_a")!=0
+ && strcmp((yyvsp[0].str), "always_refuse")!=0
+ && strcmp((yyvsp[0].str), "always_nxdomain")!=0
+ && strcmp((yyvsp[0].str), "always_nodata")!=0
+ && strcmp((yyvsp[0].str), "always_deny")!=0
+ && strcmp((yyvsp[0].str), "always_null")!=0
+ && strcmp((yyvsp[0].str), "noview")!=0
+ && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
+ && strcmp((yyvsp[0].str), "inform_redirect") != 0
+ && strcmp((yyvsp[0].str), "ipset") != 0) {
+ yyerror("local-zone type: expected static, deny, "
+ "refuse, redirect, transparent, "
+ "typetransparent, inform, inform_deny, "
+ "inform_redirect, always_transparent, block_a,"
+ "always_refuse, always_nxdomain, "
+ "always_nodata, always_deny, always_null, "
+ "noview, nodefault or ipset");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
+ if(!cfg_strlist_insert(&cfg_parser->cfg->
+ local_zones_nodefault, (yyvsp[-1].str)))
+ fatal_exit("out of memory adding local-zone");
+ free((yyvsp[0].str));
+#ifdef USE_IPSET
+ } else if(strcmp((yyvsp[0].str), "ipset")==0) {
+ size_t len = strlen((yyvsp[-1].str));
+ /* Make sure to add the trailing dot.
+ * These are str compared to domain names. */
+ if((yyvsp[-1].str)[len-1] != '.') {
+ if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
+ fatal_exit("out of memory adding local-zone");
+ }
+ (yyvsp[-1].str)[len] = '.';
+ (yyvsp[-1].str)[len+1] = 0;
+ }
+ if(!cfg_strlist_insert(&cfg_parser->cfg->
+ local_zones_ipset, (yyvsp[-1].str)))
+ fatal_exit("out of memory adding local-zone");
+ free((yyvsp[0].str));
+#endif
+ } else {
+ if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
+ (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding local-zone");
+ }
+ }
+#line 5455 "util/configparser.c"
+ break;
+
+ case 509: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 2321 "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 5465 "util/configparser.c"
+ break;
+
+ case 510: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 2328 "util/configparser.y"
+ {
+ char* ptr;
+ OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
+ ptr = cfg_ptr_reverse((yyvsp[0].str));
+ free((yyvsp[0].str));
+ if(ptr) {
+ if(!cfg_strlist_insert(&cfg_parser->cfg->
+ local_data, ptr))
+ fatal_exit("out of memory adding local-data");
+ } else {
+ yyerror("local-data-ptr could not be reversed");
+ }
+ }
+#line 5483 "util/configparser.c"
+ break;
+
+ case 511: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */
+#line 2343 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->minimal_responses =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5496 "util/configparser.c"
+ break;
+
+ case 512: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */
+#line 2353 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->rrset_roundrobin =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5509 "util/configparser.c"
+ break;
+
+ case 513: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */
+#line 2363 "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 5519 "util/configparser.c"
+ break;
+
+ case 514: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */
+#line 2370 "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 5529 "util/configparser.c"
+ break;
+
+ case 515: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */
+#line 2377 "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 5539 "util/configparser.c"
+ break;
+
+ case 516: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */
+#line 2384 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5551 "util/configparser.c"
+ break;
+
+ case 517: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */
+#line 2393 "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 5562 "util/configparser.c"
+ break;
+
+ case 518: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */
+#line 2401 "util/configparser.y"
+ {
+ OUTYY(("P(nat64_prefix:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->nat64_prefix);
+ cfg_parser->cfg->nat64_prefix = (yyvsp[0].str);
+ }
+#line 5572 "util/configparser.c"
+ break;
+
+ case 519: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */
+#line 2408 "util/configparser.y"
+ {
+ char* p, *s = (yyvsp[0].str);
+ OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
+ while((p=strsep(&s, " \t\n")) != NULL) {
+ if(*p) {
+ if(!config_add_tag(cfg_parser->cfg, p))
+ yyerror("could not define-tag, "
+ "out of memory");
+ }
+ }
+ free((yyvsp[0].str));
+ }
+#line 5589 "util/configparser.c"
+ break;
+
+ case 520: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */
+#line 2422 "util/configparser.y"
+ {
+ size_t len = 0;
+ uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+ &len);
+ free((yyvsp[0].str));
+ OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
+ if(!bitlist) {
+ yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
+ if(bitlist) {
+ if(!cfg_strbytelist_insert(
+ &cfg_parser->cfg->local_zone_tags,
+ (yyvsp[-1].str), bitlist, len)) {
+ yyerror("out of memory");
+ free((yyvsp[-1].str));
+ }
+ }
+ }
+#line 5613 "util/configparser.c"
+ break;
+
+ case 521: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */
+#line 2443 "util/configparser.y"
+ {
+ size_t len = 0;
+ uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+ &len);
+ free((yyvsp[0].str));
+ OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
+ if(!bitlist) {
+ yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
+ if(bitlist) {
+ if(!cfg_strbytelist_insert(
+ &cfg_parser->cfg->acl_tags,
+ (yyvsp[-1].str), bitlist, len)) {
+ yyerror("out of memory");
+ free((yyvsp[-1].str));
+ }
+ }
+ }
+#line 5637 "util/configparser.c"
+ break;
+
+ case 522: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2464 "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,
+ (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ free((yyvsp[-2].str));
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ }
+ }
+#line 5652 "util/configparser.c"
+ break;
+
+ case 523: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2476 "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,
+ (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ free((yyvsp[-2].str));
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ }
+ }
+#line 5667 "util/configparser.c"
+ break;
+
+ case 524: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */
+#line 2488 "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,
+ (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ free((yyvsp[-2].str));
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ }
+ }
+#line 5682 "util/configparser.c"
+ break;
+
+ case 525: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */
+#line 2500 "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,
+ (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ }
+ }
+#line 5694 "util/configparser.c"
+ break;
+
+ case 526: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */
+#line 2509 "util/configparser.y"
+ {
+ size_t len = 0;
+ uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+ &len);
+ free((yyvsp[0].str));
+ OUTYY(("P(server_interface_tag:%s)\n", (yyvsp[-1].str)));
+ if(!bitlist) {
+ yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
+ if(bitlist) {
+ if(!cfg_strbytelist_insert(
+ &cfg_parser->cfg->interface_tags,
+ (yyvsp[-1].str), bitlist, len)) {
+ yyerror("out of memory");
+ free((yyvsp[-1].str));
+ }
+ }
+ }
+#line 5718 "util/configparser.c"
+ break;
+
+ case 527: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2530 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
+ if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions,
+ (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ free((yyvsp[-2].str));
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ }
+ }
+#line 5733 "util/configparser.c"
+ break;
+
+ case 528: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2542 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
+ if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas,
+ (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ free((yyvsp[-2].str));
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ }
+ }
+#line 5748 "util/configparser.c"
+ break;
+
+ case 529: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */
+#line 2554 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view,
+ (yyvsp[-1].str), (yyvsp[0].str))) {
+ yyerror("out of memory");
+ }
+ }
+#line 5760 "util/configparser.c"
+ break;
+
+ case 530: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */
+#line 2563 "util/configparser.y"
+ {
+ size_t len = 0;
+ uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+ &len);
+ free((yyvsp[0].str));
+ OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str)));
+ if(!bitlist) {
+ yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
+ if(bitlist) {
+ if(!cfg_strbytelist_insert(
+ &cfg_parser->cfg->respip_tags,
+ (yyvsp[-1].str), bitlist, len)) {
+ yyerror("out of memory");
+ free((yyvsp[-1].str));
+ }
+ }
+ }
+#line 5784 "util/configparser.c"
+ break;
+
+ case 531: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */
+#line 2584 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5796 "util/configparser.c"
+ break;
+
+ case 532: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */
+#line 2593 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_ratelimit_cookie:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5808 "util/configparser.c"
+ break;
+
+ case 533: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */
+#line 2602 "util/configparser.y"
+ {
+ OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5820 "util/configparser.c"
+ break;
+
+ case 534: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */
+#line 2611 "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 5831 "util/configparser.c"
+ break;
+
+ case 535: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */
+#line 2619 "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 5842 "util/configparser.c"
+ break;
+
+ case 536: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */
+#line 2627 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 5858 "util/configparser.c"
+ break;
+
+ case 537: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */
+#line 2640 "util/configparser.y"
+ {
+ OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 5874 "util/configparser.c"
+ break;
+
+ case 538: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */
+#line 2653 "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) {
+ yyerror("number expected");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ } else {
+ if(!cfg_str2list_insert(&cfg_parser->cfg->
+ ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding "
+ "ratelimit-for-domain");
+ }
+ }
+#line 5892 "util/configparser.c"
+ break;
+
+ case 539: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */
+#line 2668 "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) {
+ yyerror("number expected");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ } else {
+ if(!cfg_str2list_insert(&cfg_parser->cfg->
+ ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding "
+ "ratelimit-below-domain");
+ }
+ }
+#line 5910 "util/configparser.c"
+ break;
+
+ case 540: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */
+#line 2683 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5922 "util/configparser.c"
+ break;
+
+ case 541: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */
+#line 2692 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5934 "util/configparser.c"
+ break;
+
+ case 542: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */
+#line 2701 "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 5947 "util/configparser.c"
+ break;
+
+ case 543: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */
+#line 2711 "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 5960 "util/configparser.c"
+ break;
+
+ case 544: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */
+#line 2721 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5972 "util/configparser.c"
+ break;
+
+ case 545: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */
+#line 2730 "util/configparser.y"
+ {
+ OUTYY(("P(server_max_sent_count:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5984 "util/configparser.c"
+ break;
+
+ case 546: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */
+#line 2739 "util/configparser.y"
+ {
+ OUTYY(("P(server_max_query_restarts:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 5996 "util/configparser.c"
+ break;
+
+ case 547: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */
+#line 2748 "util/configparser.y"
+ {
+ OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
+ free((yyvsp[0].str));
+ }
+#line 6005 "util/configparser.c"
+ break;
+
+ case 548: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */
+#line 2754 "util/configparser.y"
+ {
+ OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) <= 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6017 "util/configparser.c"
+ break;
+
+ case 549: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */
+#line 2763 "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)
+ yyerror("number expected");
+ else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6029 "util/configparser.c"
+ break;
+
+ case 550: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */
+#line 2772 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->qname_minimisation =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6042 "util/configparser.c"
+ break;
+
+ case 551: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */
+#line 2782 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->qname_minimisation_strict =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6055 "util/configparser.c"
+ break;
+
+ case 552: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */
+#line 2792 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->pad_responses =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6068 "util/configparser.c"
+ break;
+
+ case 553: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */
+#line 2802 "util/configparser.y"
+ {
+ OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6080 "util/configparser.c"
+ break;
+
+ case 554: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */
+#line 2811 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->pad_queries =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6093 "util/configparser.c"
+ break;
+
+ case 555: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */
+#line 2821 "util/configparser.y"
+ {
+ OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6105 "util/configparser.c"
+ break;
+
+ case 556: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */
+#line 2830 "util/configparser.y"
+ {
+ #ifdef USE_IPSECMOD
+ OUTYY(("P(server_ipsecmod_enabled:%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->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0);
+ #else
+ OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 6121 "util/configparser.c"
+ break;
+
+ case 557: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */
+#line 2843 "util/configparser.y"
+ {
+ #ifdef USE_IPSECMOD
+ OUTYY(("P(server_ipsecmod_ignore_bogus:%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->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0);
+ #else
+ OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 6137 "util/configparser.c"
+ break;
+
+ case 558: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */
+#line 2856 "util/configparser.y"
+ {
+ #ifdef USE_IPSECMOD
+ OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->ipsecmod_hook);
+ cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 6152 "util/configparser.c"
+ break;
+
+ case 559: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */
+#line 2868 "util/configparser.y"
+ {
+ #ifdef USE_IPSECMOD
+ OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 6169 "util/configparser.c"
+ break;
+
+ case 560: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */
+#line 2882 "util/configparser.y"
+ {
+ #ifdef USE_IPSECMOD
+ OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str)))
+ yyerror("out of memory");
+ #else
+ OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 6184 "util/configparser.c"
+ break;
+
+ case 561: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */
+#line 2894 "util/configparser.y"
+ {
+ #ifdef USE_IPSECMOD
+ OUTYY(("P(server_ipsecmod_strict:%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->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 6201 "util/configparser.c"
+ break;
+
+ case 562: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */
+#line 2908 "util/configparser.y"
+ {
+ OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ if(!cfg_str2list_insert(
+ &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding "
+ "edns-client-string");
+ }
+#line 6213 "util/configparser.c"
+ break;
+
+ case 563: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */
+#line 2917 "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)
+ yyerror("option code expected");
+ else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
+ yyerror("option code must be in interval [0, 65535]");
+ else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6227 "util/configparser.c"
+ break;
+
+ case 564: /* server_ede: VAR_EDE STRING_ARG */
+#line 2928 "util/configparser.y"
+ {
+ OUTYY(("P(server_ede:%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->ede = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6239 "util/configparser.c"
+ break;
+
+ case 565: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */
+#line 2937 "util/configparser.y"
+ {
+ OUTYY(("P(server_proxy_protocol_port:%s)\n", (yyvsp[0].str)));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, (yyvsp[0].str)))
+ yyerror("out of memory");
+ }
+#line 6249 "util/configparser.c"
+ break;
+
+ case 566: /* stub_name: VAR_NAME STRING_ARG */
+#line 2944 "util/configparser.y"
+ {
+ OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->stubs->name)
+ yyerror("stub name override, there must be one name "
+ "for one stub-zone");
+ free(cfg_parser->cfg->stubs->name);
+ cfg_parser->cfg->stubs->name = (yyvsp[0].str);
+ }
+#line 6262 "util/configparser.c"
+ break;
+
+ case 567: /* stub_host: VAR_STUB_HOST STRING_ARG */
+#line 2954 "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 6272 "util/configparser.c"
+ break;
+
+ case 568: /* stub_addr: VAR_STUB_ADDR STRING_ARG */
+#line 2961 "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 6282 "util/configparser.c"
+ break;
+
+ case 569: /* stub_first: VAR_STUB_FIRST STRING_ARG */
+#line 2968 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6294 "util/configparser.c"
+ break;
+
+ case 570: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */
+#line 2977 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6306 "util/configparser.c"
+ break;
+
+ case 571: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */
+#line 2986 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->ssl_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6319 "util/configparser.c"
+ break;
+
+ case 572: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */
+#line 2996 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->tcp_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6332 "util/configparser.c"
+ break;
+
+ case 573: /* stub_prime: VAR_STUB_PRIME STRING_ARG */
+#line 3006 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->isprime =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6345 "util/configparser.c"
+ break;
+
+ case 574: /* forward_name: VAR_NAME STRING_ARG */
+#line 3016 "util/configparser.y"
+ {
+ OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->forwards->name)
+ yyerror("forward name override, there must be one "
+ "name for one forward-zone");
+ free(cfg_parser->cfg->forwards->name);
+ cfg_parser->cfg->forwards->name = (yyvsp[0].str);
+ }
+#line 6358 "util/configparser.c"
+ break;
+
+ case 575: /* forward_host: VAR_FORWARD_HOST STRING_ARG */
+#line 3026 "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 6368 "util/configparser.c"
+ break;
+
+ case 576: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */
+#line 3033 "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 6378 "util/configparser.c"
+ break;
+
+ case 577: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */
+#line 3040 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6390 "util/configparser.c"
+ break;
+
+ case 578: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */
+#line 3049 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6402 "util/configparser.c"
+ break;
+
+ case 579: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */
+#line 3058 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->ssl_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6415 "util/configparser.c"
+ break;
+
+ case 580: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */
+#line 3068 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->tcp_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6428 "util/configparser.c"
+ break;
+
+ case 581: /* auth_name: VAR_NAME STRING_ARG */
+#line 3078 "util/configparser.y"
+ {
+ OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->auths->name)
+ yyerror("auth name override, there must be one name "
+ "for one auth-zone");
+ free(cfg_parser->cfg->auths->name);
+ cfg_parser->cfg->auths->name = (yyvsp[0].str);
+ }
+#line 6441 "util/configparser.c"
+ break;
+
+ case 582: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */
+#line 3088 "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 6451 "util/configparser.c"
+ break;
+
+ case 583: /* auth_master: VAR_MASTER STRING_ARG */
+#line 3095 "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 6461 "util/configparser.c"
+ break;
+
+ case 584: /* auth_url: VAR_URL STRING_ARG */
+#line 3102 "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 6471 "util/configparser.c"
+ break;
+
+ case 585: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */
+#line 3109 "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 6482 "util/configparser.c"
+ break;
+
+ case 586: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */
+#line 3117 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->auths->zonemd_check =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6495 "util/configparser.c"
+ break;
+
+ case 587: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */
+#line 3127 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->auths->zonemd_reject_absence =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6508 "util/configparser.c"
+ break;
+
+ case 588: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */
+#line 3137 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->auths->for_downstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6521 "util/configparser.c"
+ break;
+
+ case 589: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */
+#line 3147 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->auths->for_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6534 "util/configparser.c"
+ break;
+
+ case 590: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */
+#line 3157 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->auths->fallback_enabled =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6547 "util/configparser.c"
+ break;
+
+ case 591: /* view_name: VAR_NAME STRING_ARG */
+#line 3167 "util/configparser.y"
+ {
+ OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->views->name)
+ yyerror("view name override, there must be one "
+ "name for one view");
+ free(cfg_parser->cfg->views->name);
+ cfg_parser->cfg->views->name = (yyvsp[0].str);
+ }
+#line 6560 "util/configparser.c"
+ break;
+
+ case 592: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 3177 "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 &&
+ strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
+ strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
+ && strcmp((yyvsp[0].str), "typetransparent")!=0
+ && strcmp((yyvsp[0].str), "always_transparent")!=0
+ && strcmp((yyvsp[0].str), "always_refuse")!=0
+ && strcmp((yyvsp[0].str), "always_nxdomain")!=0
+ && strcmp((yyvsp[0].str), "always_nodata")!=0
+ && strcmp((yyvsp[0].str), "always_deny")!=0
+ && strcmp((yyvsp[0].str), "always_null")!=0
+ && strcmp((yyvsp[0].str), "noview")!=0
+ && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
+ && strcmp((yyvsp[0].str), "inform_redirect") != 0
+ && strcmp((yyvsp[0].str), "ipset") != 0) {
+ yyerror("local-zone type: expected static, deny, "
+ "refuse, redirect, transparent, "
+ "typetransparent, inform, inform_deny, "
+ "inform_redirect, always_transparent, "
+ "always_refuse, always_nxdomain, "
+ "always_nodata, always_deny, always_null, "
+ "noview, nodefault or ipset");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
+ if(!cfg_strlist_insert(&cfg_parser->cfg->views->
+ local_zones_nodefault, (yyvsp[-1].str)))
+ fatal_exit("out of memory adding local-zone");
+ free((yyvsp[0].str));
+#ifdef USE_IPSET
+ } else if(strcmp((yyvsp[0].str), "ipset")==0) {
+ size_t len = strlen((yyvsp[-1].str));
+ /* Make sure to add the trailing dot.
+ * These are str compared to domain names. */
+ if((yyvsp[-1].str)[len-1] != '.') {
+ if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
+ fatal_exit("out of memory adding local-zone");
+ }
+ (yyvsp[-1].str)[len] = '.';
+ (yyvsp[-1].str)[len+1] = 0;
+ }
+ if(!cfg_strlist_insert(&cfg_parser->cfg->views->
+ local_zones_ipset, (yyvsp[-1].str)))
+ fatal_exit("out of memory adding local-zone");
+ free((yyvsp[0].str));
+#endif
+ } else {
+ if(!cfg_str2list_insert(
+ &cfg_parser->cfg->views->local_zones,
+ (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding local-zone");
+ }
+ }
+#line 6619 "util/configparser.c"
+ break;
+
+ case 593: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3233 "util/configparser.y"
+ {
+ OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ validate_respip_action((yyvsp[0].str));
+ if(!cfg_str2list_insert(
+ &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding per-view "
+ "response-ip action");
+ }
+#line 6632 "util/configparser.c"
+ break;
+
+ case 594: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3243 "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 6643 "util/configparser.c"
+ break;
+
+ case 595: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 3251 "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 6654 "util/configparser.c"
+ break;
+
+ case 596: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 3259 "util/configparser.y"
+ {
+ char* ptr;
+ OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
+ ptr = cfg_ptr_reverse((yyvsp[0].str));
+ free((yyvsp[0].str));
+ if(ptr) {
+ if(!cfg_strlist_insert(&cfg_parser->cfg->views->
+ local_data, ptr))
+ fatal_exit("out of memory adding local-data");
+ } else {
+ yyerror("local-data-ptr could not be reversed");
+ }
+ }
+#line 6672 "util/configparser.c"
+ break;
+
+ case 597: /* view_first: VAR_VIEW_FIRST STRING_ARG */
+#line 3274 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6684 "util/configparser.c"
+ break;
+
+ case 598: /* rcstart: VAR_REMOTE_CONTROL */
+#line 3283 "util/configparser.y"
+ {
+ OUTYY(("\nP(remote-control:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 6693 "util/configparser.c"
+ break;
+
+ case 609: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */
+#line 3295 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->remote_control_enable =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6706 "util/configparser.c"
+ break;
+
+ case 610: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */
+#line 3305 "util/configparser.y"
+ {
+ OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("control port number expected");
+ else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6718 "util/configparser.c"
+ break;
+
+ case 611: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */
+#line 3314 "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 6728 "util/configparser.c"
+ break;
+
+ case 612: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */
+#line 3321 "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 6738 "util/configparser.c"
+ break;
+
+ case 613: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */
+#line 3328 "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 6748 "util/configparser.c"
+ break;
+
+ case 614: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */
+#line 3335 "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 6758 "util/configparser.c"
+ break;
+
+ case 615: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */
+#line 3342 "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 6768 "util/configparser.c"
+ break;
+
+ case 616: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */
+#line 3349 "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 6778 "util/configparser.c"
+ break;
+
+ case 617: /* dtstart: VAR_DNSTAP */
+#line 3356 "util/configparser.y"
+ {
+ OUTYY(("\nP(dnstap:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 6787 "util/configparser.c"
+ break;
+
+ case 639: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */
+#line 3377 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6799 "util/configparser.c"
+ break;
+
+ case 640: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */
+#line 3386 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_bidirectional =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6812 "util/configparser.c"
+ break;
+
+ case 641: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */
+#line 3396 "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 6822 "util/configparser.c"
+ break;
+
+ case 642: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */
+#line 3403 "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 6832 "util/configparser.c"
+ break;
+
+ case 643: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */
+#line 3410 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6844 "util/configparser.c"
+ break;
+
+ case 644: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */
+#line 3419 "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 6854 "util/configparser.c"
+ break;
+
+ case 645: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */
+#line 3426 "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 6864 "util/configparser.c"
+ break;
+
+ case 646: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */
+#line 3433 "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 6874 "util/configparser.c"
+ break;
+
+ case 647: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */
+#line 3440 "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 6884 "util/configparser.c"
+ break;
+
+ case 648: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */
+#line 3447 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6896 "util/configparser.c"
+ break;
+
+ case 649: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */
+#line 3456 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6908 "util/configparser.c"
+ break;
+
+ case 650: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */
+#line 3465 "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 6918 "util/configparser.c"
+ break;
+
+ case 651: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */
+#line 3472 "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 6928 "util/configparser.c"
+ break;
+
+ case 652: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */
+#line 3479 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_log_resolver_query_messages =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6941 "util/configparser.c"
+ break;
+
+ case 653: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */
+#line 3489 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_log_resolver_response_messages =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6954 "util/configparser.c"
+ break;
+
+ case 654: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */
+#line 3499 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_log_client_query_messages =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6967 "util/configparser.c"
+ break;
+
+ case 655: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */
+#line 3509 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_log_client_response_messages =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6980 "util/configparser.c"
+ break;
+
+ case 656: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */
+#line 3519 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6993 "util/configparser.c"
+ break;
+
+ case 657: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */
+#line 3529 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 7006 "util/configparser.c"
+ break;
+
+ case 658: /* pythonstart: VAR_PYTHON */
+#line 3539 "util/configparser.y"
+ {
+ OUTYY(("\nP(python:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 7015 "util/configparser.c"
+ break;
+
+ case 662: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */
+#line 3549 "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 7025 "util/configparser.c"
+ break;
+
+ case 663: /* dynlibstart: VAR_DYNLIB */
+#line 3556 "util/configparser.y"
+ {
+ OUTYY(("\nP(dynlib:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 7034 "util/configparser.c"
+ break;
+
+ case 667: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */
+#line 3566 "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 7044 "util/configparser.c"
+ break;
+
+ case 668: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */
+#line 3573 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->disable_dnssec_lame_check =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 7057 "util/configparser.c"
+ break;
+
+ case 669: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */
+#line 3583 "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 7067 "util/configparser.c"
+ break;
+
+ case 670: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3590 "util/configparser.y"
+ {
+ OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ validate_respip_action((yyvsp[0].str));
+ if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
+ (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding response-ip");
+ }
+#line 7079 "util/configparser.c"
+ break;
+
+ case 671: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3599 "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 7090 "util/configparser.c"
+ break;
+
+ case 672: /* dnscstart: VAR_DNSCRYPT */
+#line 3607 "util/configparser.y"
+ {
+ OUTYY(("\nP(dnscrypt:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 7099 "util/configparser.c"
+ break;
+
+ case 685: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */
+#line 3624 "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)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 7111 "util/configparser.c"
+ break;
+
+ case 686: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */
+#line 3633 "util/configparser.y"
+ {
+ OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("port number expected");
+ else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 7123 "util/configparser.c"
+ break;
+
+ case 687: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */
+#line 3642 "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 7133 "util/configparser.c"
+ break;
+
+ case 688: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */
+#line 3649 "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)))
+ log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
+ fatal_exit("out of memory adding dnscrypt-provider-cert");
+ }
+#line 7145 "util/configparser.c"
+ break;
+
+ case 689: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */
+#line 3658 "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 7155 "util/configparser.c"
+ break;
+
+ case 690: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */
+#line 3665 "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)))
+ log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
+ fatal_exit("out of memory adding dnscrypt-secret-key");
+ }
+#line 7167 "util/configparser.c"
+ break;
+
+ case 691: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */
+#line 3674 "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 7178 "util/configparser.c"
+ break;
+
+ case 692: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */
+#line 3682 "util/configparser.y"
+ {
+ OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 7194 "util/configparser.c"
+ break;
+
+ case 693: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */
+#line 3695 "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 7205 "util/configparser.c"
+ break;
+
+ case 694: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */
+#line 3703 "util/configparser.y"
+ {
+ OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 7221 "util/configparser.c"
+ break;
+
+ case 695: /* cachedbstart: VAR_CACHEDB */
+#line 3716 "util/configparser.y"
+ {
+ OUTYY(("\nP(cachedb:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 7230 "util/configparser.c"
+ break;
+
+ case 708: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */
+#line 3729 "util/configparser.y"
+ {
+ #ifdef USE_CACHEDB
+ OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->cachedb_backend);
+ cfg_parser->cfg->cachedb_backend = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without cachedb, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7245 "util/configparser.c"
+ break;
+
+ case 709: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */
+#line 3741 "util/configparser.y"
+ {
+ #ifdef USE_CACHEDB
+ OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->cachedb_secret);
+ cfg_parser->cfg->cachedb_secret = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without cachedb, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7260 "util/configparser.c"
+ break;
+
+ case 710: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG */
+#line 3753 "util/configparser.y"
+ {
+ #ifdef USE_CACHEDB
+ OUTYY(("P(cachedb_no_store:%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->cachedb_no_store = (strcmp((yyvsp[0].str), "yes")==0);
+ #else
+ OUTYY(("P(Compiled without cachedb, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 7276 "util/configparser.c"
+ break;
+
+ case 711: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */
+#line 3766 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->redis_server_host);
+ cfg_parser->cfg->redis_server_host = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7291 "util/configparser.c"
+ break;
+
+ case 712: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */
+#line 3778 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ int port;
+ OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
+ port = atoi((yyvsp[0].str));
+ if(port == 0 || port < 0 || port > 65535)
+ yyerror("valid redis server port number expected");
+ else cfg_parser->cfg->redis_server_port = port;
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 7309 "util/configparser.c"
+ break;
+
+ case 713: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */
+#line 3793 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->redis_server_path);
+ cfg_parser->cfg->redis_server_path = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7324 "util/configparser.c"
+ break;
+
+ case 714: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */
+#line 3805 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->redis_server_password);
+ cfg_parser->cfg->redis_server_password = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7339 "util/configparser.c"
+ break;
+
+ case 715: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */
+#line 3817 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0)
+ yyerror("redis timeout value expected");
+ else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 7355 "util/configparser.c"
+ break;
+
+ case 716: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */
+#line 3830 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_expire_records:%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->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0);
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 7371 "util/configparser.c"
+ break;
+
+ case 717: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG */
+#line 3843 "util/configparser.y"
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ int db;
+ OUTYY(("P(redis_logical_db:%s)\n", (yyvsp[0].str)));
+ db = atoi((yyvsp[0].str));
+ if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0)
+ yyerror("valid redis logical database index expected");
+ else cfg_parser->cfg->redis_logical_db = db;
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 7389 "util/configparser.c"
+ break;
+
+ case 718: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */
+#line 3858 "util/configparser.y"
+ {
+ OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+ if (atoi((yyvsp[0].str)) < 0)
+ yyerror("positive number expected");
+ else {
+ if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str)))
+ fatal_exit("out of memory adding tcp connection limit");
+ }
+ }
+#line 7403 "util/configparser.c"
+ break;
+
+ case 719: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */
+#line 3869 "util/configparser.y"
+ {
+ OUTYY(("P(server_answer_cookie:%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->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 7415 "util/configparser.c"
+ break;
+
+ case 720: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */
+#line 3878 "util/configparser.y"
+ {
+ uint8_t secret[32];
+ size_t secret_len = sizeof(secret);
+
+ OUTYY(("P(server_cookie_secret:%s)\n", (yyvsp[0].str)));
+ if(sldns_str2wire_hex_buf((yyvsp[0].str), secret, &secret_len)
+ || (secret_len != 16))
+ yyerror("expected 128 bit hex string");
+ else {
+ cfg_parser->cfg->cookie_secret_len = secret_len;
+ memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret));
+ }
+ free((yyvsp[0].str));
+ }
+#line 7434 "util/configparser.c"
+ break;
+
+ case 721: /* ipsetstart: VAR_IPSET */
+#line 3894 "util/configparser.y"
+ {
+ OUTYY(("\nP(ipset:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 7443 "util/configparser.c"
+ break;
+
+ case 726: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */
+#line 3904 "util/configparser.y"
+ {
+ #ifdef USE_IPSET
+ OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->ipset_name_v4)
+ yyerror("ipset name v4 override, there must be one "
+ "name for ip v4");
+ free(cfg_parser->cfg->ipset_name_v4);
+ cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without ipset, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7461 "util/configparser.c"
+ break;
+
+ case 727: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */
+#line 3919 "util/configparser.y"
+ {
+ #ifdef USE_IPSET
+ OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->ipset_name_v6)
+ yyerror("ipset name v6 override, there must be one "
+ "name for ip v6");
+ free(cfg_parser->cfg->ipset_name_v6);
+ cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without ipset, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7479 "util/configparser.c"
+ break;
+
+
+#line 7483 "util/configparser.c"
+
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+
+ *++yyvsp = yyval;
+
+ /* Now 'shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }
+
+ goto yynewstate;
+
+
+/*--------------------------------------.
+| yyerrlab -- here on detecting error. |
+`--------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+ yyerror (YY_("syntax error"));
+ }
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
+
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ /* Pop stack until we find a state that shifts the error token. */
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYSYMBOL_YYerror;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ YY_ACCESSING_SYMBOL (yystate), yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+
+#if !defined yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ goto yyreturn;
+#endif
+
+
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return. |
+`-------------------------------------------------------*/
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+
+ return yyresult;
+}
+
+#line 3933 "util/configparser.y"
+
+
+/* parse helper routines could be here */
+static void
+validate_respip_action(const char* action)
+{
+ if(strcmp(action, "deny")!=0 &&
+ strcmp(action, "redirect")!=0 &&
+ strcmp(action, "inform")!=0 &&
+ strcmp(action, "inform_deny")!=0 &&
+ strcmp(action, "always_transparent")!=0 &&
+ strcmp(action, "always_refuse")!=0 &&
+ strcmp(action, "always_nxdomain")!=0)
+ {
+ yyerror("response-ip action: expected deny, redirect, "
+ "inform, inform_deny, always_transparent, "
+ "always_refuse or always_nxdomain");
+ }
+}
+
+static void
+validate_acl_action(const char* action)
+{
+ if(strcmp(action, "deny")!=0 &&
+ strcmp(action, "refuse")!=0 &&
+ strcmp(action, "deny_non_local")!=0 &&
+ strcmp(action, "refuse_non_local")!=0 &&
+ strcmp(action, "allow_setrd")!=0 &&
+ strcmp(action, "allow")!=0 &&
+ strcmp(action, "allow_snoop")!=0 &&
+ strcmp(action, "allow_cookie")!=0)
+ {
+ yyerror("expected deny, refuse, deny_non_local, "
+ "refuse_non_local, allow, allow_setrd, "
+ "allow_snoop or allow_cookie as access control action");
+ }
+}
diff --git a/contrib/unbound/util/configparser.h b/contrib/unbound/util/configparser.h
new file mode 100644
index 000000000000..a285af866c52
--- /dev/null
+++ b/contrib/unbound/util/configparser.h
@@ -0,0 +1,781 @@
+/* A Bison parser, made by GNU Bison 3.7.6. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
+
+ This program 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
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
+#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
+# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token kinds. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ enum yytokentype
+ {
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ SPACE = 258, /* SPACE */
+ LETTER = 259, /* LETTER */
+ NEWLINE = 260, /* NEWLINE */
+ COMMENT = 261, /* COMMENT */
+ COLON = 262, /* COLON */
+ ANY = 263, /* ANY */
+ ZONESTR = 264, /* ZONESTR */
+ STRING_ARG = 265, /* STRING_ARG */
+ VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */
+ VAR_SERVER = 267, /* VAR_SERVER */
+ VAR_VERBOSITY = 268, /* VAR_VERBOSITY */
+ VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */
+ VAR_PORT = 270, /* VAR_PORT */
+ VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */
+ VAR_INTERFACE = 272, /* VAR_INTERFACE */
+ VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */
+ VAR_DO_IP4 = 274, /* VAR_DO_IP4 */
+ VAR_DO_IP6 = 275, /* VAR_DO_IP6 */
+ VAR_DO_NAT64 = 276, /* VAR_DO_NAT64 */
+ VAR_PREFER_IP6 = 277, /* VAR_PREFER_IP6 */
+ VAR_DO_UDP = 278, /* VAR_DO_UDP */
+ VAR_DO_TCP = 279, /* VAR_DO_TCP */
+ VAR_TCP_MSS = 280, /* VAR_TCP_MSS */
+ VAR_OUTGOING_TCP_MSS = 281, /* VAR_OUTGOING_TCP_MSS */
+ VAR_TCP_IDLE_TIMEOUT = 282, /* VAR_TCP_IDLE_TIMEOUT */
+ VAR_EDNS_TCP_KEEPALIVE = 283, /* VAR_EDNS_TCP_KEEPALIVE */
+ VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 284, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */
+ VAR_SOCK_QUEUE_TIMEOUT = 285, /* VAR_SOCK_QUEUE_TIMEOUT */
+ VAR_CHROOT = 286, /* VAR_CHROOT */
+ VAR_USERNAME = 287, /* VAR_USERNAME */
+ VAR_DIRECTORY = 288, /* VAR_DIRECTORY */
+ VAR_LOGFILE = 289, /* VAR_LOGFILE */
+ VAR_PIDFILE = 290, /* VAR_PIDFILE */
+ VAR_MSG_CACHE_SIZE = 291, /* VAR_MSG_CACHE_SIZE */
+ VAR_MSG_CACHE_SLABS = 292, /* VAR_MSG_CACHE_SLABS */
+ VAR_NUM_QUERIES_PER_THREAD = 293, /* VAR_NUM_QUERIES_PER_THREAD */
+ VAR_RRSET_CACHE_SIZE = 294, /* VAR_RRSET_CACHE_SIZE */
+ VAR_RRSET_CACHE_SLABS = 295, /* VAR_RRSET_CACHE_SLABS */
+ VAR_OUTGOING_NUM_TCP = 296, /* VAR_OUTGOING_NUM_TCP */
+ VAR_INFRA_HOST_TTL = 297, /* VAR_INFRA_HOST_TTL */
+ VAR_INFRA_LAME_TTL = 298, /* VAR_INFRA_LAME_TTL */
+ VAR_INFRA_CACHE_SLABS = 299, /* VAR_INFRA_CACHE_SLABS */
+ VAR_INFRA_CACHE_NUMHOSTS = 300, /* VAR_INFRA_CACHE_NUMHOSTS */
+ VAR_INFRA_CACHE_LAME_SIZE = 301, /* VAR_INFRA_CACHE_LAME_SIZE */
+ VAR_NAME = 302, /* VAR_NAME */
+ VAR_STUB_ZONE = 303, /* VAR_STUB_ZONE */
+ VAR_STUB_HOST = 304, /* VAR_STUB_HOST */
+ VAR_STUB_ADDR = 305, /* VAR_STUB_ADDR */
+ VAR_TARGET_FETCH_POLICY = 306, /* VAR_TARGET_FETCH_POLICY */
+ VAR_HARDEN_SHORT_BUFSIZE = 307, /* VAR_HARDEN_SHORT_BUFSIZE */
+ VAR_HARDEN_LARGE_QUERIES = 308, /* VAR_HARDEN_LARGE_QUERIES */
+ VAR_FORWARD_ZONE = 309, /* VAR_FORWARD_ZONE */
+ VAR_FORWARD_HOST = 310, /* VAR_FORWARD_HOST */
+ VAR_FORWARD_ADDR = 311, /* VAR_FORWARD_ADDR */
+ VAR_DO_NOT_QUERY_ADDRESS = 312, /* VAR_DO_NOT_QUERY_ADDRESS */
+ VAR_HIDE_IDENTITY = 313, /* VAR_HIDE_IDENTITY */
+ VAR_HIDE_VERSION = 314, /* VAR_HIDE_VERSION */
+ VAR_IDENTITY = 315, /* VAR_IDENTITY */
+ VAR_VERSION = 316, /* VAR_VERSION */
+ VAR_HARDEN_GLUE = 317, /* VAR_HARDEN_GLUE */
+ VAR_MODULE_CONF = 318, /* VAR_MODULE_CONF */
+ VAR_TRUST_ANCHOR_FILE = 319, /* VAR_TRUST_ANCHOR_FILE */
+ VAR_TRUST_ANCHOR = 320, /* VAR_TRUST_ANCHOR */
+ VAR_VAL_OVERRIDE_DATE = 321, /* VAR_VAL_OVERRIDE_DATE */
+ VAR_BOGUS_TTL = 322, /* VAR_BOGUS_TTL */
+ VAR_VAL_CLEAN_ADDITIONAL = 323, /* VAR_VAL_CLEAN_ADDITIONAL */
+ VAR_VAL_PERMISSIVE_MODE = 324, /* VAR_VAL_PERMISSIVE_MODE */
+ VAR_INCOMING_NUM_TCP = 325, /* VAR_INCOMING_NUM_TCP */
+ VAR_MSG_BUFFER_SIZE = 326, /* VAR_MSG_BUFFER_SIZE */
+ VAR_KEY_CACHE_SIZE = 327, /* VAR_KEY_CACHE_SIZE */
+ VAR_KEY_CACHE_SLABS = 328, /* VAR_KEY_CACHE_SLABS */
+ VAR_TRUSTED_KEYS_FILE = 329, /* VAR_TRUSTED_KEYS_FILE */
+ VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 330, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */
+ VAR_USE_SYSLOG = 331, /* VAR_USE_SYSLOG */
+ VAR_OUTGOING_INTERFACE = 332, /* VAR_OUTGOING_INTERFACE */
+ VAR_ROOT_HINTS = 333, /* VAR_ROOT_HINTS */
+ VAR_DO_NOT_QUERY_LOCALHOST = 334, /* VAR_DO_NOT_QUERY_LOCALHOST */
+ VAR_CACHE_MAX_TTL = 335, /* VAR_CACHE_MAX_TTL */
+ VAR_HARDEN_DNSSEC_STRIPPED = 336, /* VAR_HARDEN_DNSSEC_STRIPPED */
+ VAR_ACCESS_CONTROL = 337, /* VAR_ACCESS_CONTROL */
+ VAR_LOCAL_ZONE = 338, /* VAR_LOCAL_ZONE */
+ VAR_LOCAL_DATA = 339, /* VAR_LOCAL_DATA */
+ VAR_INTERFACE_AUTOMATIC = 340, /* VAR_INTERFACE_AUTOMATIC */
+ VAR_STATISTICS_INTERVAL = 341, /* VAR_STATISTICS_INTERVAL */
+ VAR_DO_DAEMONIZE = 342, /* VAR_DO_DAEMONIZE */
+ VAR_USE_CAPS_FOR_ID = 343, /* VAR_USE_CAPS_FOR_ID */
+ VAR_STATISTICS_CUMULATIVE = 344, /* VAR_STATISTICS_CUMULATIVE */
+ VAR_OUTGOING_PORT_PERMIT = 345, /* VAR_OUTGOING_PORT_PERMIT */
+ VAR_OUTGOING_PORT_AVOID = 346, /* VAR_OUTGOING_PORT_AVOID */
+ VAR_DLV_ANCHOR_FILE = 347, /* VAR_DLV_ANCHOR_FILE */
+ VAR_DLV_ANCHOR = 348, /* VAR_DLV_ANCHOR */
+ VAR_NEG_CACHE_SIZE = 349, /* VAR_NEG_CACHE_SIZE */
+ VAR_HARDEN_REFERRAL_PATH = 350, /* VAR_HARDEN_REFERRAL_PATH */
+ VAR_PRIVATE_ADDRESS = 351, /* VAR_PRIVATE_ADDRESS */
+ VAR_PRIVATE_DOMAIN = 352, /* VAR_PRIVATE_DOMAIN */
+ VAR_REMOTE_CONTROL = 353, /* VAR_REMOTE_CONTROL */
+ VAR_CONTROL_ENABLE = 354, /* VAR_CONTROL_ENABLE */
+ VAR_CONTROL_INTERFACE = 355, /* VAR_CONTROL_INTERFACE */
+ VAR_CONTROL_PORT = 356, /* VAR_CONTROL_PORT */
+ VAR_SERVER_KEY_FILE = 357, /* VAR_SERVER_KEY_FILE */
+ VAR_SERVER_CERT_FILE = 358, /* VAR_SERVER_CERT_FILE */
+ VAR_CONTROL_KEY_FILE = 359, /* VAR_CONTROL_KEY_FILE */
+ VAR_CONTROL_CERT_FILE = 360, /* VAR_CONTROL_CERT_FILE */
+ VAR_CONTROL_USE_CERT = 361, /* VAR_CONTROL_USE_CERT */
+ VAR_TCP_REUSE_TIMEOUT = 362, /* VAR_TCP_REUSE_TIMEOUT */
+ VAR_MAX_REUSE_TCP_QUERIES = 363, /* VAR_MAX_REUSE_TCP_QUERIES */
+ VAR_EXTENDED_STATISTICS = 364, /* VAR_EXTENDED_STATISTICS */
+ VAR_LOCAL_DATA_PTR = 365, /* VAR_LOCAL_DATA_PTR */
+ VAR_JOSTLE_TIMEOUT = 366, /* VAR_JOSTLE_TIMEOUT */
+ VAR_STUB_PRIME = 367, /* VAR_STUB_PRIME */
+ VAR_UNWANTED_REPLY_THRESHOLD = 368, /* VAR_UNWANTED_REPLY_THRESHOLD */
+ VAR_LOG_TIME_ASCII = 369, /* VAR_LOG_TIME_ASCII */
+ VAR_DOMAIN_INSECURE = 370, /* VAR_DOMAIN_INSECURE */
+ VAR_PYTHON = 371, /* VAR_PYTHON */
+ VAR_PYTHON_SCRIPT = 372, /* VAR_PYTHON_SCRIPT */
+ VAR_VAL_SIG_SKEW_MIN = 373, /* VAR_VAL_SIG_SKEW_MIN */
+ VAR_VAL_SIG_SKEW_MAX = 374, /* VAR_VAL_SIG_SKEW_MAX */
+ VAR_VAL_MAX_RESTART = 375, /* VAR_VAL_MAX_RESTART */
+ VAR_CACHE_MIN_TTL = 376, /* VAR_CACHE_MIN_TTL */
+ VAR_VAL_LOG_LEVEL = 377, /* VAR_VAL_LOG_LEVEL */
+ VAR_AUTO_TRUST_ANCHOR_FILE = 378, /* VAR_AUTO_TRUST_ANCHOR_FILE */
+ VAR_KEEP_MISSING = 379, /* VAR_KEEP_MISSING */
+ VAR_ADD_HOLDDOWN = 380, /* VAR_ADD_HOLDDOWN */
+ VAR_DEL_HOLDDOWN = 381, /* VAR_DEL_HOLDDOWN */
+ VAR_SO_RCVBUF = 382, /* VAR_SO_RCVBUF */
+ VAR_EDNS_BUFFER_SIZE = 383, /* VAR_EDNS_BUFFER_SIZE */
+ VAR_PREFETCH = 384, /* VAR_PREFETCH */
+ VAR_PREFETCH_KEY = 385, /* VAR_PREFETCH_KEY */
+ VAR_SO_SNDBUF = 386, /* VAR_SO_SNDBUF */
+ VAR_SO_REUSEPORT = 387, /* VAR_SO_REUSEPORT */
+ VAR_HARDEN_BELOW_NXDOMAIN = 388, /* VAR_HARDEN_BELOW_NXDOMAIN */
+ VAR_IGNORE_CD_FLAG = 389, /* VAR_IGNORE_CD_FLAG */
+ VAR_LOG_QUERIES = 390, /* VAR_LOG_QUERIES */
+ VAR_LOG_REPLIES = 391, /* VAR_LOG_REPLIES */
+ VAR_LOG_LOCAL_ACTIONS = 392, /* VAR_LOG_LOCAL_ACTIONS */
+ VAR_TCP_UPSTREAM = 393, /* VAR_TCP_UPSTREAM */
+ VAR_SSL_UPSTREAM = 394, /* VAR_SSL_UPSTREAM */
+ VAR_TCP_AUTH_QUERY_TIMEOUT = 395, /* VAR_TCP_AUTH_QUERY_TIMEOUT */
+ VAR_SSL_SERVICE_KEY = 396, /* VAR_SSL_SERVICE_KEY */
+ VAR_SSL_SERVICE_PEM = 397, /* VAR_SSL_SERVICE_PEM */
+ VAR_SSL_PORT = 398, /* VAR_SSL_PORT */
+ VAR_FORWARD_FIRST = 399, /* VAR_FORWARD_FIRST */
+ VAR_STUB_SSL_UPSTREAM = 400, /* VAR_STUB_SSL_UPSTREAM */
+ VAR_FORWARD_SSL_UPSTREAM = 401, /* VAR_FORWARD_SSL_UPSTREAM */
+ VAR_TLS_CERT_BUNDLE = 402, /* VAR_TLS_CERT_BUNDLE */
+ VAR_STUB_TCP_UPSTREAM = 403, /* VAR_STUB_TCP_UPSTREAM */
+ VAR_FORWARD_TCP_UPSTREAM = 404, /* VAR_FORWARD_TCP_UPSTREAM */
+ VAR_HTTPS_PORT = 405, /* VAR_HTTPS_PORT */
+ VAR_HTTP_ENDPOINT = 406, /* VAR_HTTP_ENDPOINT */
+ VAR_HTTP_MAX_STREAMS = 407, /* VAR_HTTP_MAX_STREAMS */
+ VAR_HTTP_QUERY_BUFFER_SIZE = 408, /* VAR_HTTP_QUERY_BUFFER_SIZE */
+ VAR_HTTP_RESPONSE_BUFFER_SIZE = 409, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
+ VAR_HTTP_NODELAY = 410, /* VAR_HTTP_NODELAY */
+ VAR_HTTP_NOTLS_DOWNSTREAM = 411, /* VAR_HTTP_NOTLS_DOWNSTREAM */
+ VAR_STUB_FIRST = 412, /* VAR_STUB_FIRST */
+ VAR_MINIMAL_RESPONSES = 413, /* VAR_MINIMAL_RESPONSES */
+ VAR_RRSET_ROUNDROBIN = 414, /* VAR_RRSET_ROUNDROBIN */
+ VAR_MAX_UDP_SIZE = 415, /* VAR_MAX_UDP_SIZE */
+ VAR_DELAY_CLOSE = 416, /* VAR_DELAY_CLOSE */
+ VAR_UDP_CONNECT = 417, /* VAR_UDP_CONNECT */
+ VAR_UNBLOCK_LAN_ZONES = 418, /* VAR_UNBLOCK_LAN_ZONES */
+ VAR_INSECURE_LAN_ZONES = 419, /* VAR_INSECURE_LAN_ZONES */
+ VAR_INFRA_CACHE_MIN_RTT = 420, /* VAR_INFRA_CACHE_MIN_RTT */
+ VAR_INFRA_CACHE_MAX_RTT = 421, /* VAR_INFRA_CACHE_MAX_RTT */
+ VAR_INFRA_KEEP_PROBING = 422, /* VAR_INFRA_KEEP_PROBING */
+ VAR_DNS64_PREFIX = 423, /* VAR_DNS64_PREFIX */
+ VAR_DNS64_SYNTHALL = 424, /* VAR_DNS64_SYNTHALL */
+ VAR_DNS64_IGNORE_AAAA = 425, /* VAR_DNS64_IGNORE_AAAA */
+ VAR_NAT64_PREFIX = 426, /* VAR_NAT64_PREFIX */
+ VAR_DNSTAP = 427, /* VAR_DNSTAP */
+ VAR_DNSTAP_ENABLE = 428, /* VAR_DNSTAP_ENABLE */
+ VAR_DNSTAP_SOCKET_PATH = 429, /* VAR_DNSTAP_SOCKET_PATH */
+ VAR_DNSTAP_IP = 430, /* VAR_DNSTAP_IP */
+ VAR_DNSTAP_TLS = 431, /* VAR_DNSTAP_TLS */
+ VAR_DNSTAP_TLS_SERVER_NAME = 432, /* VAR_DNSTAP_TLS_SERVER_NAME */
+ VAR_DNSTAP_TLS_CERT_BUNDLE = 433, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
+ VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 434, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
+ VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 435, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
+ VAR_DNSTAP_SEND_IDENTITY = 436, /* VAR_DNSTAP_SEND_IDENTITY */
+ VAR_DNSTAP_SEND_VERSION = 437, /* VAR_DNSTAP_SEND_VERSION */
+ VAR_DNSTAP_BIDIRECTIONAL = 438, /* VAR_DNSTAP_BIDIRECTIONAL */
+ VAR_DNSTAP_IDENTITY = 439, /* VAR_DNSTAP_IDENTITY */
+ VAR_DNSTAP_VERSION = 440, /* VAR_DNSTAP_VERSION */
+ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 441, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 442, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
+ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 443, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 444, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
+ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 445, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 446, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
+ VAR_RESPONSE_IP_TAG = 447, /* VAR_RESPONSE_IP_TAG */
+ VAR_RESPONSE_IP = 448, /* VAR_RESPONSE_IP */
+ VAR_RESPONSE_IP_DATA = 449, /* VAR_RESPONSE_IP_DATA */
+ VAR_HARDEN_ALGO_DOWNGRADE = 450, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ VAR_IP_TRANSPARENT = 451, /* VAR_IP_TRANSPARENT */
+ VAR_IP_DSCP = 452, /* VAR_IP_DSCP */
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 453, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ VAR_IP_RATELIMIT = 454, /* VAR_IP_RATELIMIT */
+ VAR_IP_RATELIMIT_SLABS = 455, /* VAR_IP_RATELIMIT_SLABS */
+ VAR_IP_RATELIMIT_SIZE = 456, /* VAR_IP_RATELIMIT_SIZE */
+ VAR_RATELIMIT = 457, /* VAR_RATELIMIT */
+ VAR_RATELIMIT_SLABS = 458, /* VAR_RATELIMIT_SLABS */
+ VAR_RATELIMIT_SIZE = 459, /* VAR_RATELIMIT_SIZE */
+ VAR_OUTBOUND_MSG_RETRY = 460, /* VAR_OUTBOUND_MSG_RETRY */
+ VAR_MAX_SENT_COUNT = 461, /* VAR_MAX_SENT_COUNT */
+ VAR_MAX_QUERY_RESTARTS = 462, /* VAR_MAX_QUERY_RESTARTS */
+ VAR_RATELIMIT_FOR_DOMAIN = 463, /* VAR_RATELIMIT_FOR_DOMAIN */
+ VAR_RATELIMIT_BELOW_DOMAIN = 464, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ VAR_IP_RATELIMIT_FACTOR = 465, /* VAR_IP_RATELIMIT_FACTOR */
+ VAR_RATELIMIT_FACTOR = 466, /* VAR_RATELIMIT_FACTOR */
+ VAR_IP_RATELIMIT_BACKOFF = 467, /* VAR_IP_RATELIMIT_BACKOFF */
+ VAR_RATELIMIT_BACKOFF = 468, /* VAR_RATELIMIT_BACKOFF */
+ VAR_SEND_CLIENT_SUBNET = 469, /* VAR_SEND_CLIENT_SUBNET */
+ VAR_CLIENT_SUBNET_ZONE = 470, /* VAR_CLIENT_SUBNET_ZONE */
+ VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 471, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ VAR_CLIENT_SUBNET_OPCODE = 472, /* VAR_CLIENT_SUBNET_OPCODE */
+ VAR_MAX_CLIENT_SUBNET_IPV4 = 473, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ VAR_MAX_CLIENT_SUBNET_IPV6 = 474, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ VAR_MIN_CLIENT_SUBNET_IPV4 = 475, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ VAR_MIN_CLIENT_SUBNET_IPV6 = 476, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ VAR_MAX_ECS_TREE_SIZE_IPV4 = 477, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ VAR_MAX_ECS_TREE_SIZE_IPV6 = 478, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ VAR_CAPS_WHITELIST = 479, /* VAR_CAPS_WHITELIST */
+ VAR_CACHE_MAX_NEGATIVE_TTL = 480, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ VAR_PERMIT_SMALL_HOLDDOWN = 481, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ VAR_QNAME_MINIMISATION = 482, /* VAR_QNAME_MINIMISATION */
+ VAR_QNAME_MINIMISATION_STRICT = 483, /* VAR_QNAME_MINIMISATION_STRICT */
+ VAR_IP_FREEBIND = 484, /* VAR_IP_FREEBIND */
+ VAR_DEFINE_TAG = 485, /* VAR_DEFINE_TAG */
+ VAR_LOCAL_ZONE_TAG = 486, /* VAR_LOCAL_ZONE_TAG */
+ VAR_ACCESS_CONTROL_TAG = 487, /* VAR_ACCESS_CONTROL_TAG */
+ VAR_LOCAL_ZONE_OVERRIDE = 488, /* VAR_LOCAL_ZONE_OVERRIDE */
+ VAR_ACCESS_CONTROL_TAG_ACTION = 489, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ VAR_ACCESS_CONTROL_TAG_DATA = 490, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ VAR_VIEW = 491, /* VAR_VIEW */
+ VAR_ACCESS_CONTROL_VIEW = 492, /* VAR_ACCESS_CONTROL_VIEW */
+ VAR_VIEW_FIRST = 493, /* VAR_VIEW_FIRST */
+ VAR_SERVE_EXPIRED = 494, /* VAR_SERVE_EXPIRED */
+ VAR_SERVE_EXPIRED_TTL = 495, /* VAR_SERVE_EXPIRED_TTL */
+ VAR_SERVE_EXPIRED_TTL_RESET = 496, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ VAR_SERVE_EXPIRED_REPLY_TTL = 497, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 498, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ VAR_EDE_SERVE_EXPIRED = 499, /* VAR_EDE_SERVE_EXPIRED */
+ VAR_SERVE_ORIGINAL_TTL = 500, /* VAR_SERVE_ORIGINAL_TTL */
+ VAR_FAKE_DSA = 501, /* VAR_FAKE_DSA */
+ VAR_FAKE_SHA1 = 502, /* VAR_FAKE_SHA1 */
+ VAR_LOG_IDENTITY = 503, /* VAR_LOG_IDENTITY */
+ VAR_HIDE_TRUSTANCHOR = 504, /* VAR_HIDE_TRUSTANCHOR */
+ VAR_HIDE_HTTP_USER_AGENT = 505, /* VAR_HIDE_HTTP_USER_AGENT */
+ VAR_HTTP_USER_AGENT = 506, /* VAR_HTTP_USER_AGENT */
+ VAR_TRUST_ANCHOR_SIGNALING = 507, /* VAR_TRUST_ANCHOR_SIGNALING */
+ VAR_AGGRESSIVE_NSEC = 508, /* VAR_AGGRESSIVE_NSEC */
+ VAR_USE_SYSTEMD = 509, /* VAR_USE_SYSTEMD */
+ VAR_SHM_ENABLE = 510, /* VAR_SHM_ENABLE */
+ VAR_SHM_KEY = 511, /* VAR_SHM_KEY */
+ VAR_ROOT_KEY_SENTINEL = 512, /* VAR_ROOT_KEY_SENTINEL */
+ VAR_DNSCRYPT = 513, /* VAR_DNSCRYPT */
+ VAR_DNSCRYPT_ENABLE = 514, /* VAR_DNSCRYPT_ENABLE */
+ VAR_DNSCRYPT_PORT = 515, /* VAR_DNSCRYPT_PORT */
+ VAR_DNSCRYPT_PROVIDER = 516, /* VAR_DNSCRYPT_PROVIDER */
+ VAR_DNSCRYPT_SECRET_KEY = 517, /* VAR_DNSCRYPT_SECRET_KEY */
+ VAR_DNSCRYPT_PROVIDER_CERT = 518, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 519, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 520, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 521, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 522, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 523, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ VAR_PAD_RESPONSES = 524, /* VAR_PAD_RESPONSES */
+ VAR_PAD_RESPONSES_BLOCK_SIZE = 525, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ VAR_PAD_QUERIES = 526, /* VAR_PAD_QUERIES */
+ VAR_PAD_QUERIES_BLOCK_SIZE = 527, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ VAR_IPSECMOD_ENABLED = 528, /* VAR_IPSECMOD_ENABLED */
+ VAR_IPSECMOD_HOOK = 529, /* VAR_IPSECMOD_HOOK */
+ VAR_IPSECMOD_IGNORE_BOGUS = 530, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ VAR_IPSECMOD_MAX_TTL = 531, /* VAR_IPSECMOD_MAX_TTL */
+ VAR_IPSECMOD_WHITELIST = 532, /* VAR_IPSECMOD_WHITELIST */
+ VAR_IPSECMOD_STRICT = 533, /* VAR_IPSECMOD_STRICT */
+ VAR_CACHEDB = 534, /* VAR_CACHEDB */
+ VAR_CACHEDB_BACKEND = 535, /* VAR_CACHEDB_BACKEND */
+ VAR_CACHEDB_SECRETSEED = 536, /* VAR_CACHEDB_SECRETSEED */
+ VAR_CACHEDB_REDISHOST = 537, /* VAR_CACHEDB_REDISHOST */
+ VAR_CACHEDB_REDISPORT = 538, /* VAR_CACHEDB_REDISPORT */
+ VAR_CACHEDB_REDISTIMEOUT = 539, /* VAR_CACHEDB_REDISTIMEOUT */
+ VAR_CACHEDB_REDISEXPIRERECORDS = 540, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ VAR_CACHEDB_REDISPATH = 541, /* VAR_CACHEDB_REDISPATH */
+ VAR_CACHEDB_REDISPASSWORD = 542, /* VAR_CACHEDB_REDISPASSWORD */
+ VAR_CACHEDB_REDISLOGICALDB = 543, /* VAR_CACHEDB_REDISLOGICALDB */
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 544, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ VAR_FOR_UPSTREAM = 545, /* VAR_FOR_UPSTREAM */
+ VAR_AUTH_ZONE = 546, /* VAR_AUTH_ZONE */
+ VAR_ZONEFILE = 547, /* VAR_ZONEFILE */
+ VAR_MASTER = 548, /* VAR_MASTER */
+ VAR_URL = 549, /* VAR_URL */
+ VAR_FOR_DOWNSTREAM = 550, /* VAR_FOR_DOWNSTREAM */
+ VAR_FALLBACK_ENABLED = 551, /* VAR_FALLBACK_ENABLED */
+ VAR_TLS_ADDITIONAL_PORT = 552, /* VAR_TLS_ADDITIONAL_PORT */
+ VAR_LOW_RTT = 553, /* VAR_LOW_RTT */
+ VAR_LOW_RTT_PERMIL = 554, /* VAR_LOW_RTT_PERMIL */
+ VAR_FAST_SERVER_PERMIL = 555, /* VAR_FAST_SERVER_PERMIL */
+ VAR_FAST_SERVER_NUM = 556, /* VAR_FAST_SERVER_NUM */
+ VAR_ALLOW_NOTIFY = 557, /* VAR_ALLOW_NOTIFY */
+ VAR_TLS_WIN_CERT = 558, /* VAR_TLS_WIN_CERT */
+ VAR_TCP_CONNECTION_LIMIT = 559, /* VAR_TCP_CONNECTION_LIMIT */
+ VAR_ANSWER_COOKIE = 560, /* VAR_ANSWER_COOKIE */
+ VAR_COOKIE_SECRET = 561, /* VAR_COOKIE_SECRET */
+ VAR_IP_RATELIMIT_COOKIE = 562, /* VAR_IP_RATELIMIT_COOKIE */
+ VAR_FORWARD_NO_CACHE = 563, /* VAR_FORWARD_NO_CACHE */
+ VAR_STUB_NO_CACHE = 564, /* VAR_STUB_NO_CACHE */
+ VAR_LOG_SERVFAIL = 565, /* VAR_LOG_SERVFAIL */
+ VAR_DENY_ANY = 566, /* VAR_DENY_ANY */
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 567, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ VAR_LOG_TAG_QUERYREPLY = 568, /* VAR_LOG_TAG_QUERYREPLY */
+ VAR_STREAM_WAIT_SIZE = 569, /* VAR_STREAM_WAIT_SIZE */
+ VAR_TLS_CIPHERS = 570, /* VAR_TLS_CIPHERS */
+ VAR_TLS_CIPHERSUITES = 571, /* VAR_TLS_CIPHERSUITES */
+ VAR_TLS_USE_SNI = 572, /* VAR_TLS_USE_SNI */
+ VAR_IPSET = 573, /* VAR_IPSET */
+ VAR_IPSET_NAME_V4 = 574, /* VAR_IPSET_NAME_V4 */
+ VAR_IPSET_NAME_V6 = 575, /* VAR_IPSET_NAME_V6 */
+ VAR_TLS_SESSION_TICKET_KEYS = 576, /* VAR_TLS_SESSION_TICKET_KEYS */
+ VAR_RPZ = 577, /* VAR_RPZ */
+ VAR_TAGS = 578, /* VAR_TAGS */
+ VAR_RPZ_ACTION_OVERRIDE = 579, /* VAR_RPZ_ACTION_OVERRIDE */
+ VAR_RPZ_CNAME_OVERRIDE = 580, /* VAR_RPZ_CNAME_OVERRIDE */
+ VAR_RPZ_LOG = 581, /* VAR_RPZ_LOG */
+ VAR_RPZ_LOG_NAME = 582, /* VAR_RPZ_LOG_NAME */
+ VAR_DYNLIB = 583, /* VAR_DYNLIB */
+ VAR_DYNLIB_FILE = 584, /* VAR_DYNLIB_FILE */
+ VAR_EDNS_CLIENT_STRING = 585, /* VAR_EDNS_CLIENT_STRING */
+ VAR_EDNS_CLIENT_STRING_OPCODE = 586, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ VAR_NSID = 587, /* VAR_NSID */
+ VAR_ZONEMD_PERMISSIVE_MODE = 588, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ VAR_ZONEMD_CHECK = 589, /* VAR_ZONEMD_CHECK */
+ VAR_ZONEMD_REJECT_ABSENCE = 590, /* VAR_ZONEMD_REJECT_ABSENCE */
+ VAR_RPZ_SIGNAL_NXDOMAIN_RA = 591, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ VAR_INTERFACE_AUTOMATIC_PORTS = 592, /* VAR_INTERFACE_AUTOMATIC_PORTS */
+ VAR_EDE = 593, /* VAR_EDE */
+ VAR_INTERFACE_ACTION = 594, /* VAR_INTERFACE_ACTION */
+ VAR_INTERFACE_VIEW = 595, /* VAR_INTERFACE_VIEW */
+ VAR_INTERFACE_TAG = 596, /* VAR_INTERFACE_TAG */
+ VAR_INTERFACE_TAG_ACTION = 597, /* VAR_INTERFACE_TAG_ACTION */
+ VAR_INTERFACE_TAG_DATA = 598, /* VAR_INTERFACE_TAG_DATA */
+ VAR_PROXY_PROTOCOL_PORT = 599, /* VAR_PROXY_PROTOCOL_PORT */
+ VAR_STATISTICS_INHIBIT_ZERO = 600, /* VAR_STATISTICS_INHIBIT_ZERO */
+ VAR_HARDEN_UNKNOWN_ADDITIONAL = 601, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
+ VAR_DISABLE_EDNS_DO = 602, /* VAR_DISABLE_EDNS_DO */
+ VAR_CACHEDB_NO_STORE = 603, /* VAR_CACHEDB_NO_STORE */
+ VAR_LOG_DESTADDR = 604 /* VAR_LOG_DESTADDR */
+ };
+ typedef enum yytokentype yytoken_kind_t;
+#endif
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
+#define SPACE 258
+#define LETTER 259
+#define NEWLINE 260
+#define COMMENT 261
+#define COLON 262
+#define ANY 263
+#define ZONESTR 264
+#define STRING_ARG 265
+#define VAR_FORCE_TOPLEVEL 266
+#define VAR_SERVER 267
+#define VAR_VERBOSITY 268
+#define VAR_NUM_THREADS 269
+#define VAR_PORT 270
+#define VAR_OUTGOING_RANGE 271
+#define VAR_INTERFACE 272
+#define VAR_PREFER_IP4 273
+#define VAR_DO_IP4 274
+#define VAR_DO_IP6 275
+#define VAR_DO_NAT64 276
+#define VAR_PREFER_IP6 277
+#define VAR_DO_UDP 278
+#define VAR_DO_TCP 279
+#define VAR_TCP_MSS 280
+#define VAR_OUTGOING_TCP_MSS 281
+#define VAR_TCP_IDLE_TIMEOUT 282
+#define VAR_EDNS_TCP_KEEPALIVE 283
+#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 284
+#define VAR_SOCK_QUEUE_TIMEOUT 285
+#define VAR_CHROOT 286
+#define VAR_USERNAME 287
+#define VAR_DIRECTORY 288
+#define VAR_LOGFILE 289
+#define VAR_PIDFILE 290
+#define VAR_MSG_CACHE_SIZE 291
+#define VAR_MSG_CACHE_SLABS 292
+#define VAR_NUM_QUERIES_PER_THREAD 293
+#define VAR_RRSET_CACHE_SIZE 294
+#define VAR_RRSET_CACHE_SLABS 295
+#define VAR_OUTGOING_NUM_TCP 296
+#define VAR_INFRA_HOST_TTL 297
+#define VAR_INFRA_LAME_TTL 298
+#define VAR_INFRA_CACHE_SLABS 299
+#define VAR_INFRA_CACHE_NUMHOSTS 300
+#define VAR_INFRA_CACHE_LAME_SIZE 301
+#define VAR_NAME 302
+#define VAR_STUB_ZONE 303
+#define VAR_STUB_HOST 304
+#define VAR_STUB_ADDR 305
+#define VAR_TARGET_FETCH_POLICY 306
+#define VAR_HARDEN_SHORT_BUFSIZE 307
+#define VAR_HARDEN_LARGE_QUERIES 308
+#define VAR_FORWARD_ZONE 309
+#define VAR_FORWARD_HOST 310
+#define VAR_FORWARD_ADDR 311
+#define VAR_DO_NOT_QUERY_ADDRESS 312
+#define VAR_HIDE_IDENTITY 313
+#define VAR_HIDE_VERSION 314
+#define VAR_IDENTITY 315
+#define VAR_VERSION 316
+#define VAR_HARDEN_GLUE 317
+#define VAR_MODULE_CONF 318
+#define VAR_TRUST_ANCHOR_FILE 319
+#define VAR_TRUST_ANCHOR 320
+#define VAR_VAL_OVERRIDE_DATE 321
+#define VAR_BOGUS_TTL 322
+#define VAR_VAL_CLEAN_ADDITIONAL 323
+#define VAR_VAL_PERMISSIVE_MODE 324
+#define VAR_INCOMING_NUM_TCP 325
+#define VAR_MSG_BUFFER_SIZE 326
+#define VAR_KEY_CACHE_SIZE 327
+#define VAR_KEY_CACHE_SLABS 328
+#define VAR_TRUSTED_KEYS_FILE 329
+#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 330
+#define VAR_USE_SYSLOG 331
+#define VAR_OUTGOING_INTERFACE 332
+#define VAR_ROOT_HINTS 333
+#define VAR_DO_NOT_QUERY_LOCALHOST 334
+#define VAR_CACHE_MAX_TTL 335
+#define VAR_HARDEN_DNSSEC_STRIPPED 336
+#define VAR_ACCESS_CONTROL 337
+#define VAR_LOCAL_ZONE 338
+#define VAR_LOCAL_DATA 339
+#define VAR_INTERFACE_AUTOMATIC 340
+#define VAR_STATISTICS_INTERVAL 341
+#define VAR_DO_DAEMONIZE 342
+#define VAR_USE_CAPS_FOR_ID 343
+#define VAR_STATISTICS_CUMULATIVE 344
+#define VAR_OUTGOING_PORT_PERMIT 345
+#define VAR_OUTGOING_PORT_AVOID 346
+#define VAR_DLV_ANCHOR_FILE 347
+#define VAR_DLV_ANCHOR 348
+#define VAR_NEG_CACHE_SIZE 349
+#define VAR_HARDEN_REFERRAL_PATH 350
+#define VAR_PRIVATE_ADDRESS 351
+#define VAR_PRIVATE_DOMAIN 352
+#define VAR_REMOTE_CONTROL 353
+#define VAR_CONTROL_ENABLE 354
+#define VAR_CONTROL_INTERFACE 355
+#define VAR_CONTROL_PORT 356
+#define VAR_SERVER_KEY_FILE 357
+#define VAR_SERVER_CERT_FILE 358
+#define VAR_CONTROL_KEY_FILE 359
+#define VAR_CONTROL_CERT_FILE 360
+#define VAR_CONTROL_USE_CERT 361
+#define VAR_TCP_REUSE_TIMEOUT 362
+#define VAR_MAX_REUSE_TCP_QUERIES 363
+#define VAR_EXTENDED_STATISTICS 364
+#define VAR_LOCAL_DATA_PTR 365
+#define VAR_JOSTLE_TIMEOUT 366
+#define VAR_STUB_PRIME 367
+#define VAR_UNWANTED_REPLY_THRESHOLD 368
+#define VAR_LOG_TIME_ASCII 369
+#define VAR_DOMAIN_INSECURE 370
+#define VAR_PYTHON 371
+#define VAR_PYTHON_SCRIPT 372
+#define VAR_VAL_SIG_SKEW_MIN 373
+#define VAR_VAL_SIG_SKEW_MAX 374
+#define VAR_VAL_MAX_RESTART 375
+#define VAR_CACHE_MIN_TTL 376
+#define VAR_VAL_LOG_LEVEL 377
+#define VAR_AUTO_TRUST_ANCHOR_FILE 378
+#define VAR_KEEP_MISSING 379
+#define VAR_ADD_HOLDDOWN 380
+#define VAR_DEL_HOLDDOWN 381
+#define VAR_SO_RCVBUF 382
+#define VAR_EDNS_BUFFER_SIZE 383
+#define VAR_PREFETCH 384
+#define VAR_PREFETCH_KEY 385
+#define VAR_SO_SNDBUF 386
+#define VAR_SO_REUSEPORT 387
+#define VAR_HARDEN_BELOW_NXDOMAIN 388
+#define VAR_IGNORE_CD_FLAG 389
+#define VAR_LOG_QUERIES 390
+#define VAR_LOG_REPLIES 391
+#define VAR_LOG_LOCAL_ACTIONS 392
+#define VAR_TCP_UPSTREAM 393
+#define VAR_SSL_UPSTREAM 394
+#define VAR_TCP_AUTH_QUERY_TIMEOUT 395
+#define VAR_SSL_SERVICE_KEY 396
+#define VAR_SSL_SERVICE_PEM 397
+#define VAR_SSL_PORT 398
+#define VAR_FORWARD_FIRST 399
+#define VAR_STUB_SSL_UPSTREAM 400
+#define VAR_FORWARD_SSL_UPSTREAM 401
+#define VAR_TLS_CERT_BUNDLE 402
+#define VAR_STUB_TCP_UPSTREAM 403
+#define VAR_FORWARD_TCP_UPSTREAM 404
+#define VAR_HTTPS_PORT 405
+#define VAR_HTTP_ENDPOINT 406
+#define VAR_HTTP_MAX_STREAMS 407
+#define VAR_HTTP_QUERY_BUFFER_SIZE 408
+#define VAR_HTTP_RESPONSE_BUFFER_SIZE 409
+#define VAR_HTTP_NODELAY 410
+#define VAR_HTTP_NOTLS_DOWNSTREAM 411
+#define VAR_STUB_FIRST 412
+#define VAR_MINIMAL_RESPONSES 413
+#define VAR_RRSET_ROUNDROBIN 414
+#define VAR_MAX_UDP_SIZE 415
+#define VAR_DELAY_CLOSE 416
+#define VAR_UDP_CONNECT 417
+#define VAR_UNBLOCK_LAN_ZONES 418
+#define VAR_INSECURE_LAN_ZONES 419
+#define VAR_INFRA_CACHE_MIN_RTT 420
+#define VAR_INFRA_CACHE_MAX_RTT 421
+#define VAR_INFRA_KEEP_PROBING 422
+#define VAR_DNS64_PREFIX 423
+#define VAR_DNS64_SYNTHALL 424
+#define VAR_DNS64_IGNORE_AAAA 425
+#define VAR_NAT64_PREFIX 426
+#define VAR_DNSTAP 427
+#define VAR_DNSTAP_ENABLE 428
+#define VAR_DNSTAP_SOCKET_PATH 429
+#define VAR_DNSTAP_IP 430
+#define VAR_DNSTAP_TLS 431
+#define VAR_DNSTAP_TLS_SERVER_NAME 432
+#define VAR_DNSTAP_TLS_CERT_BUNDLE 433
+#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 434
+#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 435
+#define VAR_DNSTAP_SEND_IDENTITY 436
+#define VAR_DNSTAP_SEND_VERSION 437
+#define VAR_DNSTAP_BIDIRECTIONAL 438
+#define VAR_DNSTAP_IDENTITY 439
+#define VAR_DNSTAP_VERSION 440
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 441
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 442
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 443
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 444
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 445
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 446
+#define VAR_RESPONSE_IP_TAG 447
+#define VAR_RESPONSE_IP 448
+#define VAR_RESPONSE_IP_DATA 449
+#define VAR_HARDEN_ALGO_DOWNGRADE 450
+#define VAR_IP_TRANSPARENT 451
+#define VAR_IP_DSCP 452
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 453
+#define VAR_IP_RATELIMIT 454
+#define VAR_IP_RATELIMIT_SLABS 455
+#define VAR_IP_RATELIMIT_SIZE 456
+#define VAR_RATELIMIT 457
+#define VAR_RATELIMIT_SLABS 458
+#define VAR_RATELIMIT_SIZE 459
+#define VAR_OUTBOUND_MSG_RETRY 460
+#define VAR_MAX_SENT_COUNT 461
+#define VAR_MAX_QUERY_RESTARTS 462
+#define VAR_RATELIMIT_FOR_DOMAIN 463
+#define VAR_RATELIMIT_BELOW_DOMAIN 464
+#define VAR_IP_RATELIMIT_FACTOR 465
+#define VAR_RATELIMIT_FACTOR 466
+#define VAR_IP_RATELIMIT_BACKOFF 467
+#define VAR_RATELIMIT_BACKOFF 468
+#define VAR_SEND_CLIENT_SUBNET 469
+#define VAR_CLIENT_SUBNET_ZONE 470
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 471
+#define VAR_CLIENT_SUBNET_OPCODE 472
+#define VAR_MAX_CLIENT_SUBNET_IPV4 473
+#define VAR_MAX_CLIENT_SUBNET_IPV6 474
+#define VAR_MIN_CLIENT_SUBNET_IPV4 475
+#define VAR_MIN_CLIENT_SUBNET_IPV6 476
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 477
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 478
+#define VAR_CAPS_WHITELIST 479
+#define VAR_CACHE_MAX_NEGATIVE_TTL 480
+#define VAR_PERMIT_SMALL_HOLDDOWN 481
+#define VAR_QNAME_MINIMISATION 482
+#define VAR_QNAME_MINIMISATION_STRICT 483
+#define VAR_IP_FREEBIND 484
+#define VAR_DEFINE_TAG 485
+#define VAR_LOCAL_ZONE_TAG 486
+#define VAR_ACCESS_CONTROL_TAG 487
+#define VAR_LOCAL_ZONE_OVERRIDE 488
+#define VAR_ACCESS_CONTROL_TAG_ACTION 489
+#define VAR_ACCESS_CONTROL_TAG_DATA 490
+#define VAR_VIEW 491
+#define VAR_ACCESS_CONTROL_VIEW 492
+#define VAR_VIEW_FIRST 493
+#define VAR_SERVE_EXPIRED 494
+#define VAR_SERVE_EXPIRED_TTL 495
+#define VAR_SERVE_EXPIRED_TTL_RESET 496
+#define VAR_SERVE_EXPIRED_REPLY_TTL 497
+#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 498
+#define VAR_EDE_SERVE_EXPIRED 499
+#define VAR_SERVE_ORIGINAL_TTL 500
+#define VAR_FAKE_DSA 501
+#define VAR_FAKE_SHA1 502
+#define VAR_LOG_IDENTITY 503
+#define VAR_HIDE_TRUSTANCHOR 504
+#define VAR_HIDE_HTTP_USER_AGENT 505
+#define VAR_HTTP_USER_AGENT 506
+#define VAR_TRUST_ANCHOR_SIGNALING 507
+#define VAR_AGGRESSIVE_NSEC 508
+#define VAR_USE_SYSTEMD 509
+#define VAR_SHM_ENABLE 510
+#define VAR_SHM_KEY 511
+#define VAR_ROOT_KEY_SENTINEL 512
+#define VAR_DNSCRYPT 513
+#define VAR_DNSCRYPT_ENABLE 514
+#define VAR_DNSCRYPT_PORT 515
+#define VAR_DNSCRYPT_PROVIDER 516
+#define VAR_DNSCRYPT_SECRET_KEY 517
+#define VAR_DNSCRYPT_PROVIDER_CERT 518
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 519
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 520
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 521
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 522
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 523
+#define VAR_PAD_RESPONSES 524
+#define VAR_PAD_RESPONSES_BLOCK_SIZE 525
+#define VAR_PAD_QUERIES 526
+#define VAR_PAD_QUERIES_BLOCK_SIZE 527
+#define VAR_IPSECMOD_ENABLED 528
+#define VAR_IPSECMOD_HOOK 529
+#define VAR_IPSECMOD_IGNORE_BOGUS 530
+#define VAR_IPSECMOD_MAX_TTL 531
+#define VAR_IPSECMOD_WHITELIST 532
+#define VAR_IPSECMOD_STRICT 533
+#define VAR_CACHEDB 534
+#define VAR_CACHEDB_BACKEND 535
+#define VAR_CACHEDB_SECRETSEED 536
+#define VAR_CACHEDB_REDISHOST 537
+#define VAR_CACHEDB_REDISPORT 538
+#define VAR_CACHEDB_REDISTIMEOUT 539
+#define VAR_CACHEDB_REDISEXPIRERECORDS 540
+#define VAR_CACHEDB_REDISPATH 541
+#define VAR_CACHEDB_REDISPASSWORD 542
+#define VAR_CACHEDB_REDISLOGICALDB 543
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 544
+#define VAR_FOR_UPSTREAM 545
+#define VAR_AUTH_ZONE 546
+#define VAR_ZONEFILE 547
+#define VAR_MASTER 548
+#define VAR_URL 549
+#define VAR_FOR_DOWNSTREAM 550
+#define VAR_FALLBACK_ENABLED 551
+#define VAR_TLS_ADDITIONAL_PORT 552
+#define VAR_LOW_RTT 553
+#define VAR_LOW_RTT_PERMIL 554
+#define VAR_FAST_SERVER_PERMIL 555
+#define VAR_FAST_SERVER_NUM 556
+#define VAR_ALLOW_NOTIFY 557
+#define VAR_TLS_WIN_CERT 558
+#define VAR_TCP_CONNECTION_LIMIT 559
+#define VAR_ANSWER_COOKIE 560
+#define VAR_COOKIE_SECRET 561
+#define VAR_IP_RATELIMIT_COOKIE 562
+#define VAR_FORWARD_NO_CACHE 563
+#define VAR_STUB_NO_CACHE 564
+#define VAR_LOG_SERVFAIL 565
+#define VAR_DENY_ANY 566
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 567
+#define VAR_LOG_TAG_QUERYREPLY 568
+#define VAR_STREAM_WAIT_SIZE 569
+#define VAR_TLS_CIPHERS 570
+#define VAR_TLS_CIPHERSUITES 571
+#define VAR_TLS_USE_SNI 572
+#define VAR_IPSET 573
+#define VAR_IPSET_NAME_V4 574
+#define VAR_IPSET_NAME_V6 575
+#define VAR_TLS_SESSION_TICKET_KEYS 576
+#define VAR_RPZ 577
+#define VAR_TAGS 578
+#define VAR_RPZ_ACTION_OVERRIDE 579
+#define VAR_RPZ_CNAME_OVERRIDE 580
+#define VAR_RPZ_LOG 581
+#define VAR_RPZ_LOG_NAME 582
+#define VAR_DYNLIB 583
+#define VAR_DYNLIB_FILE 584
+#define VAR_EDNS_CLIENT_STRING 585
+#define VAR_EDNS_CLIENT_STRING_OPCODE 586
+#define VAR_NSID 587
+#define VAR_ZONEMD_PERMISSIVE_MODE 588
+#define VAR_ZONEMD_CHECK 589
+#define VAR_ZONEMD_REJECT_ABSENCE 590
+#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 591
+#define VAR_INTERFACE_AUTOMATIC_PORTS 592
+#define VAR_EDE 593
+#define VAR_INTERFACE_ACTION 594
+#define VAR_INTERFACE_VIEW 595
+#define VAR_INTERFACE_TAG 596
+#define VAR_INTERFACE_TAG_ACTION 597
+#define VAR_INTERFACE_TAG_DATA 598
+#define VAR_PROXY_PROTOCOL_PORT 599
+#define VAR_STATISTICS_INHIBIT_ZERO 600
+#define VAR_HARDEN_UNKNOWN_ADDITIONAL 601
+#define VAR_DISABLE_EDNS_DO 602
+#define VAR_CACHEDB_NO_STORE 603
+#define VAR_LOG_DESTADDR 604
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+union YYSTYPE
+{
+#line 68 "util/configparser.y"
+
+ char* str;
+
+#line 769 "util/configparser.h"
+
+};
+typedef union YYSTYPE YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */
diff --git a/contrib/unbound/util/configparser.y b/contrib/unbound/util/configparser.y
index da5d6608f1d5..0e4cd5960a29 100644
--- a/contrib/unbound/util/configparser.y
+++ b/contrib/unbound/util/configparser.y
@@ -200,6 +200,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA
%token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO
%token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE
+%token VAR_LOG_DESTADDR
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -333,7 +334,8 @@ content_server: server_num_threads | server_verbosity | server_port |
server_tcp_reuse_timeout | server_tcp_auth_query_timeout |
server_interface_automatic_ports | server_ede |
server_proxy_protocol_port | server_statistics_inhibit_zero |
- server_harden_unknown_additional | server_disable_edns_do
+ server_harden_unknown_additional | server_disable_edns_do |
+ server_log_destaddr
;
stubstart: VAR_STUB_ZONE
{
@@ -1250,6 +1252,15 @@ server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG
free($2);
}
;
+server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG
+ {
+ OUTYY(("P(server_log_destaddr:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_destaddr = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG
{
OUTYY(("P(server_log_local_actions:%s)\n", $2));
diff --git a/contrib/unbound/util/data/msgencode.c b/contrib/unbound/util/data/msgencode.c
index 80ae33a38661..898ff8412a4e 100644
--- a/contrib/unbound/util/data/msgencode.c
+++ b/contrib/unbound/util/data/msgencode.c
@@ -886,6 +886,9 @@ ede_trim_text(struct edns_option** list)
curr->opt_len = 2;
prev = curr;
curr = curr->next;
+ } else {
+ prev = curr;
+ curr = curr->next;
}
} else {
/* continue */
diff --git a/contrib/unbound/util/data/msgreply.c b/contrib/unbound/util/data/msgreply.c
index 920a0a939d06..2286d46bc3ff 100644
--- a/contrib/unbound/util/data/msgreply.c
+++ b/contrib/unbound/util/data/msgreply.c
@@ -918,13 +918,15 @@ log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
void
log_reply_info(enum verbosity_value v, struct query_info *qinf,
struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur,
- int cached, struct sldns_buffer *rmsg)
+ int cached, struct sldns_buffer *rmsg, struct sockaddr_storage* daddr,
+ enum comm_point_type tp)
{
char qname_buf[LDNS_MAX_DOMAINLEN+1];
char clientip_buf[128];
char rcode_buf[16];
char type_buf[16];
char class_buf[16];
+ char dest_buf[160];
size_t pktlen;
uint16_t rcode = FLAGS_GET_RCODE(sldns_buffer_read_u16_at(rmsg, 2));
@@ -933,11 +935,46 @@ log_reply_info(enum verbosity_value v, struct query_info *qinf,
sldns_wire2str_rcode_buf((int)rcode, rcode_buf, sizeof(rcode_buf));
addr_to_str(addr, addrlen, clientip_buf, sizeof(clientip_buf));
+ if(daddr) {
+ char da[128];
+ int port = 0;
+ char* comm;
+ if(daddr->ss_family == AF_INET6) {
+ struct sockaddr_in6 *d = (struct sockaddr_in6 *)daddr;
+ if(inet_ntop(d->sin6_family, &d->sin6_addr, da,
+ sizeof(*d)) == 0)
+ snprintf(dest_buf, sizeof(dest_buf),
+ "(inet_ntop_error)");
+ port = ntohs(d->sin6_port);
+ } else if(daddr->ss_family == AF_INET) {
+ struct sockaddr_in *d = (struct sockaddr_in *)daddr;
+ if(inet_ntop(d->sin_family, &d->sin_addr, da,
+ sizeof(*d)) == 0)
+ snprintf(dest_buf, sizeof(dest_buf),
+ "(inet_ntop_error)");
+ port = ntohs(d->sin_port);
+ } else {
+ snprintf(da, sizeof(da), "socket%d",
+ (int)daddr->ss_family);
+ }
+ comm = "udp";
+ if(tp == comm_tcp) comm = "tcp";
+ else if(tp == comm_tcp_accept) comm = "tcp";
+ else if(tp == comm_http) comm = "dot";
+ else if(tp == comm_local) comm = "unix";
+ else if(tp == comm_raw) comm = "raw";
+ snprintf(dest_buf, sizeof(dest_buf), " on %s %s %d",
+ comm, da, port);
+ } else {
+ dest_buf[0]=0;
+ }
if(rcode == LDNS_RCODE_FORMERR)
{
if(LOG_TAG_QUERYREPLY)
- log_reply("%s - - - %s - - - ", clientip_buf, rcode_buf);
- else log_info("%s - - - %s - - - ", clientip_buf, rcode_buf);
+ log_reply("%s - - - %s - - -%s", clientip_buf,
+ rcode_buf, dest_buf);
+ else log_info("%s - - - %s - - -%s", clientip_buf,
+ rcode_buf, dest_buf);
} else {
if(qinf->qname)
dname_str(qinf->qname, qname_buf);
@@ -946,12 +983,14 @@ log_reply_info(enum verbosity_value v, struct query_info *qinf,
sldns_wire2str_type_buf(qinf->qtype, type_buf, sizeof(type_buf));
sldns_wire2str_class_buf(qinf->qclass, class_buf, sizeof(class_buf));
if(LOG_TAG_QUERYREPLY)
- log_reply("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d",
+ log_reply("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d%s",
clientip_buf, qname_buf, type_buf, class_buf,
- rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen);
- else log_info("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d",
+ rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec,
+ cached, (int)pktlen, dest_buf);
+ else log_info("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d%s",
clientip_buf, qname_buf, type_buf, class_buf,
- rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen);
+ rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec,
+ cached, (int)pktlen, dest_buf);
}
}
diff --git a/contrib/unbound/util/data/msgreply.h b/contrib/unbound/util/data/msgreply.h
index a9af3d7e657d..4b93b12c8f33 100644
--- a/contrib/unbound/util/data/msgreply.h
+++ b/contrib/unbound/util/data/msgreply.h
@@ -58,6 +58,7 @@ struct msg_parse;
struct rrset_parse;
struct local_rrset;
struct dns_msg;
+enum comm_point_type;
/** calculate the prefetch TTL as 90% of original. Calculation
* without numerical overflow (uin32_t) */
@@ -520,10 +521,13 @@ void log_dns_msg(const char* str, struct query_info* qinfo,
* @param cached: whether or not the reply is coming from
* the cache, or an outside network.
* @param rmsg: sldns buffer packet.
+ * @param daddr: if not NULL, the destination address and port are logged.
+ * @param tp: type of the comm point for logging destination connection type.
*/
void log_reply_info(enum verbosity_value v, struct query_info *qinf,
struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur,
- int cached, struct sldns_buffer *rmsg);
+ int cached, struct sldns_buffer *rmsg, struct sockaddr_storage* daddr,
+ enum comm_point_type tp);
/**
* Print string with neat domain name, type, class from query info.
diff --git a/contrib/unbound/util/data/packed_rrset.c b/contrib/unbound/util/data/packed_rrset.c
index e1a0833a2098..d18486cc5b36 100644
--- a/contrib/unbound/util/data/packed_rrset.c
+++ b/contrib/unbound/util/data/packed_rrset.c
@@ -275,6 +275,7 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->
entry.data;
uint8_t rr[65535];
+ size_t wlen;
size_t rlen = rrset->rk.dname_len + 2 + 2 + 4 + d->rr_len[i];
time_t adjust = 0;
log_assert(dest_len > 0 && dest);
@@ -292,7 +293,9 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
sldns_write_uint32(rr+rrset->rk.dname_len+4,
(uint32_t)(d->rr_ttl[i]-adjust));
memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]);
- if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) {
+ wlen = (size_t)sldns_wire2str_rr_buf(rr, rlen, dest, dest_len);
+ if(wlen >= dest_len) {
+ /* the output string was truncated */
log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest);
dest[0] = 0;
return 0;
diff --git a/contrib/unbound/util/iana_ports.inc b/contrib/unbound/util/iana_ports.inc
index 5cb127ed897b..c3903563654d 100644
--- a/contrib/unbound/util/iana_ports.inc
+++ b/contrib/unbound/util/iana_ports.inc
@@ -258,7 +258,6 @@
356,
357,
358,
-359,
360,
361,
362,
diff --git a/contrib/unbound/util/netevent.c b/contrib/unbound/util/netevent.c
index 141e48d48b3f..1fc8c6b8658e 100644
--- a/contrib/unbound/util/netevent.c
+++ b/contrib/unbound/util/netevent.c
@@ -1672,8 +1672,13 @@ ssl_handshake(struct comm_point* c)
} else {
unsigned long err = ERR_get_error();
if(!squelch_err_ssl_handshake(err)) {
+ long vr;
log_crypto_err_io_code("ssl handshake failed",
want, err);
+ if((vr=SSL_get_verify_result(c->ssl)) != 0)
+ log_err("ssl handshake cert error: %s",
+ X509_verify_cert_error_string(
+ vr));
log_addr(VERB_OPS, "ssl handshake failed",
&c->repinfo.remote_addr,
c->repinfo.remote_addrlen);
@@ -1748,6 +1753,9 @@ ssl_handshake(struct comm_point* c)
/* connection upgraded to HTTP2 */
c->tcp_do_toggle_rw = 0;
c->use_h2 = 1;
+ } else {
+ verbose(VERB_ALGO, "client doesn't support HTTP/2");
+ return 0;
}
}
#endif
@@ -4766,7 +4774,7 @@ comm_point_send_reply(struct comm_reply *repinfo)
if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) {
log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
log_addr(VERB_ALGO, "response to client", &repinfo->client_addr, repinfo->client_addrlen);
- dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->buffer);
+ dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->ssl, repinfo->c->buffer);
}
#endif
} else {
@@ -4777,7 +4785,7 @@ comm_point_send_reply(struct comm_reply *repinfo)
if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) {
log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
log_addr(VERB_ALGO, "response to client", &repinfo->client_addr, repinfo->client_addrlen);
- dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type,
+ dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->ssl,
( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer ));
}
#endif
diff --git a/contrib/unbound/validator/autotrust.c b/contrib/unbound/validator/autotrust.c
index 3011a0ace7a2..3eb13b35c229 100644
--- a/contrib/unbound/validator/autotrust.c
+++ b/contrib/unbound/validator/autotrust.c
@@ -353,17 +353,21 @@ autr_tp_create(struct val_anchors* anchors, uint8_t* own, size_t own_len,
lock_basic_lock(&anchors->lock);
if(!rbtree_insert(anchors->tree, &tp->node)) {
+ char buf[LDNS_MAX_DOMAINLEN+1];
lock_basic_unlock(&anchors->lock);
- log_err("trust anchor presented twice");
+ dname_str(tp->name, buf);
+ log_err("trust anchor for '%s' presented twice", buf);
free(tp->name);
free(tp->autr);
free(tp);
return NULL;
}
if(!rbtree_insert(&anchors->autr->probe, &tp->autr->pnode)) {
+ char buf[LDNS_MAX_DOMAINLEN+1];
(void)rbtree_delete(anchors->tree, tp);
lock_basic_unlock(&anchors->lock);
- log_err("trust anchor in probetree twice");
+ dname_str(tp->name, buf);
+ log_err("trust anchor for '%s' in probetree twice", buf);
free(tp->name);
free(tp->autr);
free(tp);
diff --git a/contrib/unbound/validator/val_sigcrypt.c b/contrib/unbound/validator/val_sigcrypt.c
index f4b866366f3c..7c2b9d7e6608 100644
--- a/contrib/unbound/validator/val_sigcrypt.c
+++ b/contrib/unbound/validator/val_sigcrypt.c
@@ -748,7 +748,6 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
return sec_status_bogus;
}
}
- verbose(VERB_ALGO, "rrset failed to verify: all signatures are bogus");
if(!numchecked) {
*reason = "signature for expected key and algorithm missing";
if(reason_bogus)
@@ -761,6 +760,7 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
*reason = "algorithm refused by cryptolib";
return sec_status_indeterminate;
}
+ verbose(VERB_ALGO, "rrset failed to verify: all signatures are bogus");
return sec_status_bogus;
}
diff --git a/contrib/unbound/validator/val_utils.c b/contrib/unbound/validator/val_utils.c
index 67a958ae2ade..c316183a9d9e 100644
--- a/contrib/unbound/validator/val_utils.c
+++ b/contrib/unbound/validator/val_utils.c
@@ -424,11 +424,13 @@ static enum sec_status
verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* dnskey_rrset,
struct ub_packed_rrset_key* ds_rrset, size_t ds_idx, char** reason,
- sldns_ede_code *reason_bogus, struct module_qstate* qstate)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ int *nonechecked)
{
enum sec_status sec = sec_status_bogus;
size_t i, num, numchecked = 0, numhashok = 0, numsizesupp = 0;
num = rrset_get_count(dnskey_rrset);
+ *nonechecked = 0;
for(i=0; i<num; i++) {
/* Skip DNSKEYs that don't match the basic criteria. */
if(ds_get_key_algo(ds_rrset, ds_idx)
@@ -476,13 +478,15 @@ verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
/* there is a working DS, but that DNSKEY is not supported */
return sec_status_insecure;
}
- if(numchecked == 0)
+ if(numchecked == 0) {
algo_needs_reason(env, ds_get_key_algo(ds_rrset, ds_idx),
reason, "no keys have a DS");
- else if(numhashok == 0)
+ *nonechecked = 1;
+ } else if(numhashok == 0) {
*reason = "DS hash mismatches key";
- else if(!*reason)
+ } else if(!*reason) {
*reason = "keyset not secured by DNSKEY that matches DS";
+ }
return sec_status_bogus;
}
@@ -511,7 +515,8 @@ val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
{
/* as long as this is false, we can consider this DS rrset to be
* equivalent to no DS rrset. */
- int has_useful_ds = 0, digest_algo, alg;
+ int has_useful_ds = 0, digest_algo, alg, has_algo_refusal = 0,
+ nonechecked, has_checked_ds = 0;
struct algo_needs needs;
size_t i, num;
enum sec_status sec;
@@ -544,9 +549,16 @@ val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
}
sec = verify_dnskeys_with_ds_rr(env, ve, dnskey_rrset,
- ds_rrset, i, reason, reason_bogus, qstate);
- if(sec == sec_status_insecure)
+ ds_rrset, i, reason, reason_bogus, qstate,
+ &nonechecked);
+ if(sec == sec_status_insecure) {
+ /* DNSKEY too large unsupported or algo refused by
+ * crypto lib. */
+ has_algo_refusal = 1;
continue;
+ }
+ if(!nonechecked)
+ has_checked_ds = 1;
/* Once we see a single DS with a known digestID and
* algorithm, we cannot return INSECURE (with a
@@ -571,6 +583,15 @@ val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
/* None of the DS's worked out. */
+ /* If none of the DSes have been checked, eg. that means no matches
+ * for keytags, and the other dses are all algo_refusal, it is an
+ * insecure delegation point, since the only matched DS records
+ * have an algo refusal, or are unsupported. */
+ if(has_algo_refusal && !has_checked_ds) {
+ verbose(VERB_ALGO, "No supported DS records were found -- "
+ "treating as insecure.");
+ return sec_status_insecure;
+ }
/* If no DSs were understandable, then this is OK. */
if(!has_useful_ds) {
verbose(VERB_ALGO, "No usable DS records were found -- "
@@ -624,7 +645,8 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
{
/* as long as this is false, we can consider this anchor to be
* equivalent to no anchor. */
- int has_useful_ta = 0, digest_algo = 0, alg;
+ int has_useful_ta = 0, digest_algo = 0, alg, has_algo_refusal = 0,
+ nonechecked, has_checked_ds = 0;
struct algo_needs needs;
size_t i, num;
enum sec_status sec;
@@ -670,9 +692,13 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
continue;
sec = verify_dnskeys_with_ds_rr(env, ve, dnskey_rrset,
- ta_ds, i, reason, reason_bogus, qstate);
- if(sec == sec_status_insecure)
+ ta_ds, i, reason, reason_bogus, qstate, &nonechecked);
+ if(sec == sec_status_insecure) {
+ has_algo_refusal = 1;
continue;
+ }
+ if(!nonechecked)
+ has_checked_ds = 1;
/* Once we see a single DS with a known digestID and
* algorithm, we cannot return INSECURE (with a
@@ -728,6 +754,15 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
}
}
+ /* If none of the DSes have been checked, eg. that means no matches
+ * for keytags, and the other dses are all algo_refusal, it is an
+ * insecure delegation point, since the only matched DS records
+ * have an algo refusal, or are unsupported. */
+ if(has_algo_refusal && !has_checked_ds) {
+ verbose(VERB_ALGO, "No supported trust anchors were found -- "
+ "treating as insecure.");
+ return sec_status_insecure;
+ }
/* If no DSs were understandable, then this is OK. */
if(!has_useful_ta) {
verbose(VERB_ALGO, "No usable trust anchors were found -- "
diff --git a/contrib/unbound/validator/validator.c b/contrib/unbound/validator/validator.c
index 26d33a37ff31..aa71df9cbf58 100644
--- a/contrib/unbound/validator/validator.c
+++ b/contrib/unbound/validator/validator.c
@@ -3010,6 +3010,8 @@ return_bogus:
* @param msg: result message (if rcode is OK).
* @param qinfo: from the sub query state, query info.
* @param origin: the origin of msg.
+ * @param suspend: returned true if the task takes too long and needs to
+ * suspend to continue the effort later.
*/
static void
process_ds_response(struct module_qstate* qstate, struct val_qstate* vq,
diff --git a/lib/libunbound/config.h b/lib/libunbound/config.h
index 0fe309a98bf3..071c0aeb6006 100644
--- a/lib/libunbound/config.h
+++ b/lib/libunbound/config.h
@@ -793,7 +793,7 @@
#define PACKAGE_NAME "unbound"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "unbound 1.19.1"
+#define PACKAGE_STRING "unbound 1.19.3"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "unbound"
@@ -802,7 +802,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.19.1"
+#define PACKAGE_VERSION "1.19.3"
/* default pidfile location */
#define PIDFILE "/var/unbound/unbound.pid"
@@ -825,7 +825,7 @@
#define ROOT_CERT_FILE "/var/unbound/icannbundle.pem"
/* version number for resource files */
-#define RSRC_PACKAGE_VERSION 1,19,0,0
+#define RSRC_PACKAGE_VERSION 1,19,3,0
/* Directory to chdir to */
#define RUN_DIR "/var/unbound"