From 1762437121c91c6972d3fb8c22266d0c8d837f0c Mon Sep 17 00:00:00 2001 From: PMunch Date: Thu, 17 Oct 2019 15:10:33 +0200 Subject: [PATCH 001/235] Add dynamic library support --- Makefile.in | 26 +++- config.h.in | 3 + configure | 35 +++++ configure.ac | 22 +++ dynlibmod/dynlibmod.c | 236 ++++++++++++++++++++++++++++++++ dynlibmod/dynlibmod.h | 71 ++++++++++ dynlibmod/examples/helloworld.c | 45 ++++++ services/modstack.c | 9 ++ util/config_file.c | 4 + util/config_file.h | 3 + util/configlexer.lex | 2 + util/configparser.y | 18 ++- util/fptr_wlist.c | 21 +++ 13 files changed, 490 insertions(+), 5 deletions(-) create mode 100644 dynlibmod/dynlibmod.c create mode 100644 dynlibmod/dynlibmod.h create mode 100644 dynlibmod/examples/helloworld.c diff --git a/Makefile.in b/Makefile.in index d9d4fe7ad..21367eec3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -25,6 +25,7 @@ DNSTAP_SRC=@DNSTAP_SRC@ DNSTAP_OBJ=@DNSTAP_OBJ@ DNSCRYPT_SRC=@DNSCRYPT_SRC@ DNSCRYPT_OBJ=@DNSCRYPT_OBJ@ +WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@ WITH_PYTHONMODULE=@WITH_PYTHONMODULE@ WITH_PYUNBOUND=@WITH_PYUNBOUND@ PY_MAJOR_VERSION=@PY_MAJOR_VERSION@ @@ -87,6 +88,12 @@ LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=i INSTALL=$(SHELL) $(srcdir)/install-sh +DYNLIBMOD_SRC=dynlibmod/dynlibmod.c +DYNLIBMOD_OBJ=@DYNLIBMOD_OBJ@ +DYNLIBMOD_HEADER=@DYNLIBMOD_HEADER@ +DYNLIBMOD_EXTRALIBS=@DYNLIBMOD_EXTRALIBS@ + + #pythonmod.c is not here, it is mentioned by itself in its own rules, #makedepend fails on missing interface.h otherwise. PYTHONMOD_SRC=pythonmod/pythonmod_utils.c @@ -139,7 +146,7 @@ autotrust.lo val_anchor.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ -$(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo +$(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo @@ -326,7 +333,7 @@ libunbound.la: $(LIBUNBOUND_OBJ_LINK) $(LINK_LIB) $(UBSYMS) -o $@ $(LIBUNBOUND_OBJ_LINK) -rpath $(libdir) $(SSLLIB) $(LIBS) unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) @@ -453,6 +460,7 @@ clean: rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h rm -f $(ALL_SRC:.c=.lint) rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py + rm -f libunbound.a rm -rf autom4te.cache .libs build doc/html doc/xml realclean: clean @@ -622,6 +630,7 @@ depend: -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ -e 's?$$(srcdir)/ipsecmod/ipsecmod.h $$(srcdir)/ipsecmod/ipsecmod-whitelist.h?$$(IPSECMOD_HEADER)?g' \ + -e 's?$$(srcdir)/dynlibmod/dynlibmod.h?$$(DYNLIBMOD_HEADER)?g' \ -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \ > $(DEPEND_TMP) cp $(DEPEND_TARGET) $(DEPEND_TMP2) @@ -783,7 +792,7 @@ modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/service $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ - $(srcdir)/ipset/ipset.h + $(srcdir)/ipset/ipset.h $(srcdir)/dynlibmod/dynlibmod.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ @@ -865,7 +874,8 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h $(PYTHONMOD_HEADER) \ $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \ - $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h + $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h \ + $(srcdir)/dynlibmod/dynlibmod.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h @@ -1072,6 +1082,14 @@ dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer. dnstap/dnstap.pb-c.h dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ +dynlibmod.lo dynlibmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h\ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ diff --git a/config.h.in b/config.h.in index d8ec50a6d..a07b970bc 100644 --- a/config.h.in +++ b/config.h.in @@ -836,6 +836,9 @@ /* Define if you want Python module. */ #undef WITH_PYTHONMODULE +/* Define if you want dynamic library module. */ +#undef WITH_DYNLIBMODULE + /* Define if you want PyUnbound. */ #undef WITH_PYUNBOUND diff --git a/configure b/configure index 4e222879e..41984f652 100755 --- a/configure +++ b/configure @@ -697,6 +697,10 @@ PYTHON_LDFLAGS PYTHON_CPPFLAGS PYTHON PYTHON_VERSION +DYNLIBMOD_EXTRALIBS +DYNLIBMOD_HEADER +DYNLIBMOD_OBJ +WITH_DYNLIBMODULE PTHREAD_CFLAGS_ONLY PTHREAD_CFLAGS PTHREAD_LIBS @@ -851,6 +855,7 @@ enable_alloc_nonregional with_pthreads with_solaris_threads with_syslog_facility +with_dynlibmodule with_pyunbound with_pythonmodule enable_swig_version_check @@ -1607,6 +1612,8 @@ Optional Packages: --with-solaris-threads use solaris native thread library. --with-syslog-facility=LOCAL0 - LOCAL7 set SYSLOG_FACILITY, default DAEMON + --with-dynlibmodule build dynamic library module, or + --without-dynlibmodule to disable it. (default=no) --with-pyunbound build PyUnbound, or --without-pyunbound to skip it. (default=no) --with-pythonmodule build Python module, or --without-pythonmodule to @@ -17123,6 +17130,34 @@ cat >>confdefs.h <<_ACEOF _ACEOF +# Check for dynamic library module + +# Check whether --with-dynlibmodule was given. +if test "${with_dynlibmodule+set}" = set; then : + withval=$with_dynlibmodule; +else + withval="no" +fi + + +if test x_$withval != x_no; then + +$as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h + + WITH_DYNLIBMODULE=yes + + DYNLIBMOD_OBJ="dynlibmod.lo" + + DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' + + if test $on_mingw = "no"; then + DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + fi + +fi + # Check for PyUnbound # Check whether --with-pyunbound was given. diff --git a/configure.ac b/configure.ac index 216a78c65..7d108d002 100644 --- a/configure.ac +++ b/configure.ac @@ -616,6 +616,28 @@ case "${UNBOUND_SYSLOG_FACILITY}" in esac AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON]) +# Check for dynamic library module +AC_ARG_WITH(dynlibmodule, + AC_HELP_STRING([--with-dynlibmodule], + [build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), + [], [ withval="no" ]) + +if test x_$withval != x_no; then + AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.]) + WITH_DYNLIBMODULE=yes + AC_SUBST(WITH_DYNLIBMODULE) + DYNLIBMOD_OBJ="dynlibmod.lo" + AC_SUBST(DYNLIBMOD_OBJ) + DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' + AC_SUBST(DYNLIBMOD_HEADER) + if test $on_mingw = "no"; then + DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + fi + AC_SUBST(DYNLIBMOD_EXTRALIBS) +fi + # Check for PyUnbound AC_ARG_WITH(pyunbound, AC_HELP_STRING([--with-pyunbound], diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c new file mode 100644 index 000000000..47d315306 --- /dev/null +++ b/dynlibmod/dynlibmod.c @@ -0,0 +1,236 @@ +#include "config.h" +#include "util/module.h" +#include "util/config_file.h" +#include "dynlibmod/dynlibmod.h" + +#if HAVE_WINDOWS_H +#include +#define __DYNSYM FARPROC +#define __LOADSYM GetProcAddress +void log_dlerror() { + DWORD dwLastError = GetLastError(); + LPSTR MessageBuffer; + DWORD dwBufferLength; + DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM ; + if(dwBufferLength = FormatMessageA( + dwFormatFlags, + NULL, // module to get message from (NULL == system) + dwLastError, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language + (LPSTR) &MessageBuffer, + 0, + NULL + )) + { + DWORD dwBytesWritten; + + // + // Output message string on stderr. + // + log_info("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); + //WriteFile( + // GetStdHandle(STD_ERROR_HANDLE), + // MessageBuffer, + // dwBufferLength, + // &dwBytesWritten, + // NULL + // ); + + // + // Free the buffer allocated by the system. + // + LocalFree(MessageBuffer); + } + +} +#else +#include +#define __DYNSYM void* +#define __LOADSYM dlsym +void log_dlerror() { + log_err("dynlibmod: %s", dlerror()); +} +#endif + +/** + * Global state for the module. + */ + +typedef int (*func_init_t)(int, struct config_file*); +typedef int (*func_deinit_t)(int); +typedef int (*func_operate_t)(int, enum module_ev event, struct module_qstate* qstate, void*); +typedef int (*func_inform_t)(int, struct module_qstate* qstate, struct module_qstate* super, void*); +struct dynlibmod_env { + + /** Dynamic library filename. */ + const char* fname; + + /** Module init function */ + func_init_t func_init; + /** Module deinit function */ + func_deinit_t func_deinit; + /** Module operate function */ + func_operate_t func_operate; + /** Module super_inform function */ + func_inform_t func_inform; + + /** Module qstate. */ + struct module_qstate* qstate; +}; + +struct dynlibmod_qstate { + + /** Module per query data. */ + void* data; +}; + +/** dynlib module init */ +int dynlibmod_init(struct module_env* env, int id) { + struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); + if (!de) + { + log_err("dynlibmod: malloc failure"); + return 0; + } + + env->modinfo[id] = (void*) de; + + de->fname = env->cfg->dynlib_file; + if (de->fname == NULL || de->fname[0] == 0) { + log_err("dynlibmod: no dynamic library given."); + return 0; + } + log_info("Trying to load library %s", de->fname); +#ifndef HAVE_WINDOWS_H + void* dynamic_library = dlopen(de->fname, RTLD_LAZY | RTLD_GLOBAL); +#else + HMODULE dynamic_library = LoadLibrary(de->fname); +#endif + if (dynamic_library == NULL) { + log_dlerror(); + log_err("dynlibmod: unable to load dynamic library."); + return 0; + } else { + __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); + if (initializer == NULL) { + log_err("dynlibmod: unable to load init procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_init = (func_init_t) initializer; + } + __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); + if (deinitializer == NULL) { + log_err("dynlibmod: unable to load deinit procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_deinit = (func_deinit_t) deinitializer; + } + __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); + if (operate == NULL) { + log_err("dynlibmod: unable to load operate procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_operate = (func_operate_t) operate; + } + __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); + if (inform == NULL) { + log_err("dynlibmod: unable to load inform_super procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_inform = (func_inform_t) inform; + } + } + de->func_init(id, env->cfg); + return 1; +} + +/** dynlib module deinit */ +void dynlibmod_deinit(struct module_env* env, int id) { + struct dynlibmod_env* de = env->modinfo[id]; + if(de == NULL) + return; + de->func_deinit(id); + de->fname = NULL; + free(de); +} + +/** dynlib module operate on a query */ +void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; + + void * data = dq == NULL ? NULL : dq->data; + int ret = de->func_operate(id, event, qstate, data); + if (ret != 1) { + log_err("dynlibmod: dynamic library returned bad code from operate %d.", ret); + qstate->ext_state[id] = module_error; + } +} + +/** dynlib module */ +void dynlibmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; + + void * data = dq == NULL ? NULL : dq->data; + int ret = de->func_inform(id, qstate, super, data); + if (ret != 1) { + log_err("dynlibmod: dynamic library returned bad code from inform_super %d.", ret); + qstate->ext_state[id] = module_error; + } +} + +/** dynlib module cleanup query state */ +void dynlibmod_clear(struct module_qstate* qstate, int id) { + struct dynlibmod_qstate* dq; + if (qstate == NULL) + return; + + dq = (struct dynlibmod_qstate*)qstate->minfo[id]; + verbose(VERB_ALGO, "dynlibmod: clear, id: %d, dq:%p", id, dq); + if(dq != NULL) { + /* Free qstate */ + free(dq); + } + + qstate->minfo[id] = NULL; +} + +/** dynlib module alloc size routine */ +size_t dynlibmod_get_mem(struct module_env* env, int id) { + struct dynlibmod_env* de = (struct dynlibmod_env*)env->modinfo[id]; + verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); + if(!de) + return 0; + return sizeof(*de); +} + +/** + * The module function block + */ +static struct module_func_block dynlibmod_block = { + "dynlib", + &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate, &dynlibmod_inform_super, + &dynlibmod_clear, &dynlibmod_get_mem +}; + +struct module_func_block* dynlibmod_get_funcblock(void) +{ + return &dynlibmod_block; +} diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h new file mode 100644 index 000000000..ac5d737b4 --- /dev/null +++ b/dynlibmod/dynlibmod.h @@ -0,0 +1,71 @@ +/* + * dynlibmod.h: module header file + * + * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) + * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the organization nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \file + * Dynamic loading module for unbound. Loads dynamic library. + */ +#ifndef DYNLIBMOD_H +#define DYNLIBMOD_H +#include "util/module.h" +#include "services/outbound_list.h" + +/** + * Get the module function block. + * @return: function block with function pointers to module methods. + */ +struct module_func_block* dynlibmod_get_funcblock(void); + +/** dynlib module init */ +int dynlibmod_init(struct module_env* env, int id); + +/** dynlib module deinit */ +void dynlibmod_deinit(struct module_env* env, int id); + +/** dynlib module operate on a query */ +void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound); + +/** dynlib module */ +void dynlibmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super); + +/** dynlib module cleanup query state */ +void dynlibmod_clear(struct module_qstate* qstate, int id); + +/** dynlib module alloc size routine */ +size_t dynlibmod_get_mem(struct module_env* env, int id); + +#endif /* DYNLIBMOD_H */ diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c new file mode 100644 index 000000000..76c1df215 --- /dev/null +++ b/dynlibmod/examples/helloworld.c @@ -0,0 +1,45 @@ +/* + * This is an example to show how dynamic libraries can be made to work with + * unbound. To build a .so file simply run: + * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c + * And to build for windows, first make unbound with the --with-dynlibmod + * switch, then use this command: + * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic -o helloworld.dll helloworld.c -L../.. -l:libunbound.a + * to cross-compile a 64-bit Windows DLL. + */ + +#include "../../config.h" +#include "../../util/module.h" + +#ifdef HAVE_WINDOWS_H +#define EXPORT __declspec(dllexport) +#else +#define EXPORT +#endif + +EXPORT int init(int id, struct config_file* cfg) { + log_info("Hello world from init"); + return 1; +} + +EXPORT int deinit(int id) { + log_info("Hello world from deinit"); + return 1; +} + +EXPORT int operate(int id, enum module_ev event, struct module_qstate* qstate, void* data) { + log_info("Hello world from operate"); + if (event == module_event_new || event == module_event_pass) { + qstate->ext_state[id] = module_wait_module; + } else if (event == module_event_moddone) { + qstate->ext_state[id] = module_finished; + } else { + qstate->ext_state[id] = module_error; + } + return 1; +} + +EXPORT int inform_super(int id, struct module_qstate* qstate, struct module_qstate* super, void* data) { + log_info("Hello world from inform_super"); + return 1; +} diff --git a/services/modstack.c b/services/modstack.c index 68e592814..a600549b1 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -51,6 +51,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef WITH_DYNLIBMODULE +#include "dynlibmod/dynlibmod.h" +#endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif @@ -140,6 +143,9 @@ module_list_avail(void) #ifdef WITH_PYTHONMODULE "python", #endif +#ifdef WITH_DYNLIBMODULE + "dynlib", +#endif #ifdef USE_CACHEDB "cachedb", #endif @@ -171,6 +177,9 @@ module_funcs_avail(void) #ifdef WITH_PYTHONMODULE &pythonmod_get_funcblock, #endif +#ifdef WITH_DYNLIBMODULE + &dynlibmod_get_funcblock, +#endif #ifdef USE_CACHEDB &cachedb_get_funcblock, #endif diff --git a/util/config_file.c b/util/config_file.c index 119b22238..7a8fb0bbc 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -264,6 +264,7 @@ config_create(void) cfg->unblock_lan_zones = 0; cfg->insecure_lan_zones = 0; cfg->python_script = NULL; + cfg->dynlib_file = NULL; cfg->remote_control_enable = 0; cfg->control_ifs.first = NULL; cfg->control_ifs.last = NULL; @@ -610,6 +611,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("control-cert-file:", control_cert_file) else S_STR("module-config:", module_conf) else S_STRLIST("python-script:", python_script) + else S_STR("dynlib-file:", dynlib_file) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) #ifdef CLIENT_SUBNET /* Can't set max subnet prefix here, since that value is used when @@ -1062,6 +1064,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) else O_LST(opt, "python-script", python_script) + else O_STR(opt, "dynlib-file", dynlib_file) else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check) else O_DEC(opt, "ip-ratelimit", ip_ratelimit) else O_DEC(opt, "ratelimit", ratelimit) @@ -1398,6 +1401,7 @@ config_delete(struct config_file* cfg) free(cfg->version); free(cfg->module_conf); free(cfg->outgoing_avail_ports); + free(cfg->dynlib_file); config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); diff --git a/util/config_file.h b/util/config_file.h index b3ef930a0..6706ab08b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -439,6 +439,9 @@ struct config_file { /** Python script file */ struct config_strlist* python_script; + /** Dynamic library file */ + char* dynlib_file; + /** Use systemd socket activation. */ int use_systemd; diff --git a/util/configlexer.lex b/util/configlexer.lex index a86ddf55d..1010dcda9 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -404,6 +404,8 @@ control-key-file{COLON} { YDVAR(1, VAR_CONTROL_KEY_FILE) } control-cert-file{COLON} { YDVAR(1, VAR_CONTROL_CERT_FILE) } python-script{COLON} { YDVAR(1, VAR_PYTHON_SCRIPT) } python{COLON} { YDVAR(0, VAR_PYTHON) } +dynlib-file{COLON} { YDVAR(1, VAR_DYNLIB_FILE) } +dynlib{COLON} { YDVAR(0, VAR_DYNLIB) } domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) } minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) } rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) } diff --git a/util/configparser.y b/util/configparser.y index 10227a2ff..5f58d75b3 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -168,6 +168,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES %token VAR_TLS_SESSION_TICKET_KEYS %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 +%token VAR_DYNLIB VAR_DYNLIB_FILE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -175,7 +176,7 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | - ipsetstart contents_ipset | authstart contents_auth + ipsetstart contents_ipset | authstart contents_auth | dynlibstart contents_dl ; /* server: declaration */ @@ -2741,6 +2742,21 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2)) yyerror("out of memory"); } +dynlibstart: VAR_DYNLIB + { + OUTYY(("\nP(dynlib:)\n")); + } + ; +contents_dl: contents_dl content_dl + | ; +content_dl: dl_file + ; +dl_file: VAR_DYNLIB_FILE STRING_ARG + { + OUTYY(("P(dynlib-file:%s)\n", $2)); + free(cfg_parser->cfg->dynlib_file); + cfg_parser->cfg->dynlib_file = $2; + } server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG { OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2)); diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index f5da501de..20eaeb137 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -81,6 +81,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef WITH_DYNLIBMODULE +#include "dynlibmod/dynlibmod.h" +#endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif @@ -379,6 +382,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_init) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_init) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_init) return 1; #endif @@ -404,6 +410,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_deinit) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_deinit) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_deinit) return 1; #endif @@ -430,6 +439,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_operate) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_operate) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_operate) return 1; #endif @@ -456,6 +468,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)( #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_inform_super) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_inform_super) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_inform_super) return 1; #endif @@ -482,6 +497,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_clear) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_clear) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_clear) return 1; #endif @@ -507,6 +525,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_get_mem) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_get_mem) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_get_mem) return 1; #endif From 8eeb910e3d07f1a1b1f540ffc0fc34c5c2097f8f Mon Sep 17 00:00:00 2001 From: PMunch Date: Mon, 21 Oct 2019 14:20:33 +0200 Subject: [PATCH 002/235] Improve dynlib module and add documentation Dynamic library module is now only a thin wrapper that loads dynamic libraries and forwards all function calls directly to the loaded module. This meant adding get_mem and clear, and get_mem calls have been added in the expected places. Documentation has also been added to the example.conf and the unbound.conf manpage. --- daemon/remote.c | 10 +++ doc/example.conf.in | 10 +++ doc/unbound.conf.5.in | 20 ++++- dynlibmod/dynlibmod.c | 135 ++++++++++++++------------------ dynlibmod/dynlibmod.h | 3 +- dynlibmod/examples/helloworld.c | 21 +++-- libunbound/unbound.h | 1 + smallapp/unbound-control.c | 3 + util/shm_side/shm_main.c | 4 + 9 files changed, 119 insertions(+), 88 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 1689154f5..21ab2f3bc 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -803,6 +803,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, size_t dnscrypt_shared_secret = 0; size_t dnscrypt_nonce = 0; #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + size_t dynlib = 0; +#endif /* WITH_DYNLIBMODULE */ msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); val = mod_get_mem(&worker->env, "validator"); @@ -821,6 +824,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, dnscrypt_nonce = slabhash_get_mem(daemon->dnscenv->nonces_cache); } #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + dynlib = mod_get_mem(&worker->env, "dynlib"); +#endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset)) return 0; @@ -848,6 +854,10 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, dnscrypt_nonce)) return 0; #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + if(!print_longnum(ssl, "mem.mod.dynlibmod"SQ, dynlib)) + return 0; +#endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.streamwait"SQ, (size_t)s->svr.mem_stream_wait)) return 0; diff --git a/doc/example.conf.in b/doc/example.conf.in index 9d8edbf9e..ab6b43baa 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -837,6 +837,16 @@ python: # Script file to load # python-script: "@UNBOUND_SHARE_DIR@/ubmodule-tst.py" +# Dynamic library config section. To enable: +# o use --with-dynlibmodule to configure before compiling. +# o list dynlib in the module-config string (above) to enable. +# It can be placed anywhere, the dynlib module is only a very thin wrapper +# to load modules dynamically. +# o and give a dynlib-file to run. +dynlib: + # Script file to load + # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so" + # Remote control config section. remote-control: # Enable remote control with unbound-control(8) here. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index b7ff72326..434467995 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -940,7 +940,9 @@ EDNS client subnet support the default is "subnetcache validator iterator". Most modules that need to be listed here have to be listed at the beginning of the line. The cachedb module has to be listed just before the iterator. The python module can be listed in different places, it then processes the -output of the module it is just before. +output of the module it is just before. The dynlib module can be listed pretty +much anywhere, it is only a very thin wrapper that allows dynamic libraries to +run in its place. .TP .B trust\-anchor\-file: \fI File with trusted keys for validation. Both DS and DNSKEY entries can appear @@ -1782,6 +1784,22 @@ directory. .B python\-script: \fI\fR The script file to load. Repeat this option for every python module instance added to the \fBmodule\-config:\fR option. +.SS "Dynamic Library Module Options" +.LP +The +.B dynlib: +clause gives the settings for the \fIdynlib\fR(1) module. This module is only +a very small wrapper that allows dynamic modules to be loaded on runtime +instead of being compiled into the application. To enable the dynlib module it +has to be compiled into the daemon, and the word "dynlib" has to be put in the +\fBmodule\-config:\fR option. +.LP +The \fBdynlib\-file:\fR path should be specified as an absolute path relative +to the new path set by \fBchroot:\fR option, or as a relative path to the +working directory. +.TP +.B dynlib\-file: \fI\fR +The dynamic library file to load. .SS "DNS64 Module Options" .LP The dns64 module must be configured in the \fBmodule\-config:\fR "dns64 diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 47d315306..3592f7de7 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -5,6 +5,7 @@ #if HAVE_WINDOWS_H #include +#define __DYNMOD HMODULE #define __DYNSYM FARPROC #define __LOADSYM GetProcAddress void log_dlerror() { @@ -25,43 +26,39 @@ void log_dlerror() { )) { DWORD dwBytesWritten; - - // - // Output message string on stderr. - // - log_info("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); - //WriteFile( - // GetStdHandle(STD_ERROR_HANDLE), - // MessageBuffer, - // dwBufferLength, - // &dwBytesWritten, - // NULL - // ); - - // - // Free the buffer allocated by the system. - // + log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); LocalFree(MessageBuffer); } } +HMODULE open_library(const char* fname) { + return LoadLibrary(fname); +} #else #include +#define __DYNMOD void* #define __DYNSYM void* #define __LOADSYM dlsym void log_dlerror() { log_err("dynlibmod: %s", dlerror()); } +void* open_library(const char* fname) { + return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); +} #endif + /** * Global state for the module. */ -typedef int (*func_init_t)(int, struct config_file*); -typedef int (*func_deinit_t)(int); -typedef int (*func_operate_t)(int, enum module_ev event, struct module_qstate* qstate, void*); -typedef int (*func_inform_t)(int, struct module_qstate* qstate, struct module_qstate* super, void*); +typedef void (*func_init_t)(struct module_env*, int); +typedef void (*func_deinit_t)(struct module_env*, int); +typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); +typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); +typedef void (*func_clear_t)(struct module_qstate*, int); +typedef size_t (*func_get_mem_t)(struct module_env*, int); + struct dynlibmod_env { /** Dynamic library filename. */ @@ -75,20 +72,19 @@ struct dynlibmod_env { func_operate_t func_operate; /** Module super_inform function */ func_inform_t func_inform; + /** Module clear function */ + func_clear_t func_clear; + /** Module get_mem function */ + func_get_mem_t func_get_mem; /** Module qstate. */ struct module_qstate* qstate; }; -struct dynlibmod_qstate { - - /** Module per query data. */ - void* data; -}; - /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); + __DYNMOD dynamic_library; if (!de) { log_err("dynlibmod: malloc failure"); @@ -102,59 +98,63 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod: no dynamic library given."); return 0; } - log_info("Trying to load library %s", de->fname); -#ifndef HAVE_WINDOWS_H - void* dynamic_library = dlopen(de->fname, RTLD_LAZY | RTLD_GLOBAL); -#else - HMODULE dynamic_library = LoadLibrary(de->fname); -#endif + verbose(VERB_ALGO, "dynlibmod: Trying to load library %s", de->fname); + dynamic_library = open_library(de->fname); if (dynamic_library == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load dynamic library."); + log_err("dynlibmod: unable to load dynamic library \"%s\".", de->fname); return 0; } else { __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); if (initializer == NULL) { - log_err("dynlibmod: unable to load init procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load init procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_init = (func_init_t) initializer; } __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { - log_err("dynlibmod: unable to load deinit procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load deinit procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_deinit = (func_deinit_t) deinitializer; } __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { - log_err("dynlibmod: unable to load operate procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load operate procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_operate = (func_operate_t) operate; } __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { - log_err("dynlibmod: unable to load inform_super procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load inform_super procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_inform = (func_inform_t) inform; } + __DYNSYM clear = __LOADSYM(dynamic_library,"clear"); + if (clear == NULL) { + log_dlerror(); + log_err("dynlibmod: unable to load clear procedure from dynamic library \"%s\".", de->fname); + return 0; + } else { + de->func_clear = (func_clear_t) clear; + } + __DYNSYM get_mem = __LOADSYM(dynamic_library,"get_mem"); + if (get_mem == NULL) { + log_dlerror(); + log_err("dynlibmod: unable to load get_mem procedure from dynamic library \"%s\".", de->fname); + return 0; + } else { + de->func_get_mem = (func_get_mem_t) get_mem; + } } - de->func_init(id, env->cfg); + de->func_init(env, id); return 1; } @@ -163,7 +163,7 @@ void dynlibmod_deinit(struct module_env* env, int id) { struct dynlibmod_env* de = env->modinfo[id]; if(de == NULL) return; - de->func_deinit(id); + de->func_deinit(env, id); de->fname = NULL; free(de); } @@ -172,44 +172,23 @@ void dynlibmod_deinit(struct module_env* env, int id) { void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct dynlibmod_env* de = qstate->env->modinfo[id]; - struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; - void * data = dq == NULL ? NULL : dq->data; - int ret = de->func_operate(id, event, qstate, data); - if (ret != 1) { - log_err("dynlibmod: dynamic library returned bad code from operate %d.", ret); - qstate->ext_state[id] = module_error; - } + de->func_operate(qstate, event, id, outbound); } /** dynlib module */ void dynlibmod_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct dynlibmod_env* de = qstate->env->modinfo[id]; - struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; - void * data = dq == NULL ? NULL : dq->data; - int ret = de->func_inform(id, qstate, super, data); - if (ret != 1) { - log_err("dynlibmod: dynamic library returned bad code from inform_super %d.", ret); - qstate->ext_state[id] = module_error; - } + de->func_inform(qstate, id, super); } /** dynlib module cleanup query state */ void dynlibmod_clear(struct module_qstate* qstate, int id) { - struct dynlibmod_qstate* dq; - if (qstate == NULL) - return; + struct dynlibmod_env* de = qstate->env->modinfo[id]; - dq = (struct dynlibmod_qstate*)qstate->minfo[id]; - verbose(VERB_ALGO, "dynlibmod: clear, id: %d, dq:%p", id, dq); - if(dq != NULL) { - /* Free qstate */ - free(dq); - } - - qstate->minfo[id] = NULL; + de->func_clear(qstate, id); } /** dynlib module alloc size routine */ @@ -218,7 +197,9 @@ size_t dynlibmod_get_mem(struct module_env* env, int id) { verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); if(!de) return 0; - return sizeof(*de); + + size_t size = de->func_get_mem(env, id); + return size + sizeof(*de); } /** diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index ac5d737b4..1d826a1c8 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -1,8 +1,7 @@ /* * dynlibmod.h: module header file * - * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) - * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + * Copyright (c) 2019, Peter Munch-Ellingsen (peterme AT peterme.net) * * This software is open source. * diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 76c1df215..6479d8460 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -17,17 +17,15 @@ #define EXPORT #endif -EXPORT int init(int id, struct config_file* cfg) { +EXPORT void init(struct module_env* env, int id) { log_info("Hello world from init"); - return 1; } -EXPORT int deinit(int id) { +EXPORT void deinit(struct module_env* env, int id) { log_info("Hello world from deinit"); - return 1; } -EXPORT int operate(int id, enum module_ev event, struct module_qstate* qstate, void* data) { +EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) { log_info("Hello world from operate"); if (event == module_event_new || event == module_event_pass) { qstate->ext_state[id] = module_wait_module; @@ -36,10 +34,17 @@ EXPORT int operate(int id, enum module_ev event, struct module_qstate* qstate, v } else { qstate->ext_state[id] = module_error; } - return 1; } -EXPORT int inform_super(int id, struct module_qstate* qstate, struct module_qstate* super, void* data) { +EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { log_info("Hello world from inform_super"); - return 1; +} + +EXPORT void clear(struct module_qstate* qstate, int id) { + log_info("Hello world from clear"); +} + +EXPORT size_t get_mem(struct module_env* env, int id) { + log_info("Hello world from get_mem"); + return 0; } diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 682ba5530..0527d7b7d 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -641,6 +641,7 @@ struct ub_shm_stat_info { long long respip; long long dnscrypt_shared_secret; long long dnscrypt_nonce; + long long dynlib; } mem; }; diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 01e2385fa..c074b782f 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -261,6 +261,9 @@ static void print_mem(struct ub_shm_stat_info* shm_stat, #ifdef USE_IPSECMOD PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod); #endif +#ifdef WITH_DYNLIBMODULE + PR_LL("mem.mod.dynlib", shm_stat->mem.dynlib); +#endif #ifdef USE_DNSCRYPT PR_LL("mem.cache.dnscrypt_shared_secret", shm_stat->mem.dnscrypt_shared_secret); diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c index a783c099b..0842b9b3b 100644 --- a/util/shm_side/shm_main.c +++ b/util/shm_side/shm_main.c @@ -280,6 +280,10 @@ void shm_main_run(struct worker *worker) #ifdef USE_IPSECMOD shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env, "ipsecmod"); +#endif +#ifdef WITH_DYNLIBMODULE + shm_stat->mem.dynlib = (long long)mod_get_mem(&worker->env, + "dynlib"); #endif } From f177dc974c8797f02ed5c37d2b0aa3103a64a708 Mon Sep 17 00:00:00 2001 From: PMunch Date: Mon, 21 Oct 2019 15:02:03 +0200 Subject: [PATCH 003/235] Add support for multiple dynamic modules Allows the use of multiple dynamic modules. Simply add more "dynlib" entries to the "modules-config" and the same amount of "dynlib-file" entries in the dynlib configuration block. --- doc/example.conf.in | 3 ++- doc/unbound.conf.5.in | 6 ++++-- dynlibmod/dynlibmod.c | 38 ++++++++++++++++++++++++++------------ util/config_file.c | 6 +++--- util/config_file.h | 2 +- util/configparser.y | 4 ++-- 6 files changed, 38 insertions(+), 21 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index ab6b43baa..5820e5e0a 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -842,7 +842,8 @@ python: # o list dynlib in the module-config string (above) to enable. # It can be placed anywhere, the dynlib module is only a very thin wrapper # to load modules dynamically. -# o and give a dynlib-file to run. +# o and give a dynlib-file to run. If more than one dynlib entry is listed in +# the module-config then you need one dynlib-file per instance. dynlib: # Script file to load # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so" diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 434467995..d0583d500 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1792,14 +1792,16 @@ clause gives the settings for the \fIdynlib\fR(1) module. This module is only a very small wrapper that allows dynamic modules to be loaded on runtime instead of being compiled into the application. To enable the dynlib module it has to be compiled into the daemon, and the word "dynlib" has to be put in the -\fBmodule\-config:\fR option. +\fBmodule\-config:\fR option. Multiple instances of dynamic libraries are +supported by adding the word "dynlib" more than once. .LP The \fBdynlib\-file:\fR path should be specified as an absolute path relative to the new path set by \fBchroot:\fR option, or as a relative path to the working directory. .TP .B dynlib\-file: \fI\fR -The dynamic library file to load. +The dynamic library file to load. Repeat this option for every dynlib module +instance added to the \fBmodule\-config:\fR option. .SS "DNS64 Module Options" .LP The dns64 module must be configured in the \fBmodule\-config:\fR "dns64 diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 3592f7de7..54b2a5816 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -81,34 +81,48 @@ struct dynlibmod_env { struct module_qstate* qstate; }; +/** + * counter for dynamic library module instances + * incremeted by dynlibmod_init + */ +int dynlib_mod_count = 0; + /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { + int dynlib_mod_idx = dynlib_mod_count++; + struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); __DYNMOD dynamic_library; if (!de) { - log_err("dynlibmod: malloc failure"); + log_err("dynlibmod[%d]: malloc failure", dynlib_mod_idx); return 0; } env->modinfo[id] = (void*) de; - de->fname = env->cfg->dynlib_file; - if (de->fname == NULL || de->fname[0] == 0) { - log_err("dynlibmod: no dynamic library given."); + de->fname = NULL; + for(int i = dynlib_mod_idx; + i != 0 && cfg_item != NULL; + i--, cfg_item = cfg_item->next) {} + + if (cfg_item == NULL || cfg_item->str == NULL || cfg_item->str[0] == 0) { + log_err("dynlibmod[%d]: no dynamic library given.", dynlib_mod_idx); return 0; + } else { + de->fname = cfg_item->str; } - verbose(VERB_ALGO, "dynlibmod: Trying to load library %s", de->fname); + verbose(VERB_ALGO, "dynlibmod[%d]: Trying to load library %s", dynlib_mod_idx, de->fname); dynamic_library = open_library(de->fname); if (dynamic_library == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); if (initializer == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load init procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_init = (func_init_t) initializer; @@ -116,7 +130,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load deinit procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_deinit = (func_deinit_t) deinitializer; @@ -124,7 +138,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load operate procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_operate = (func_operate_t) operate; @@ -132,7 +146,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load inform_super procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_inform = (func_inform_t) inform; @@ -140,7 +154,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM clear = __LOADSYM(dynamic_library,"clear"); if (clear == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load clear procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_clear = (func_clear_t) clear; @@ -148,7 +162,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM get_mem = __LOADSYM(dynamic_library,"get_mem"); if (get_mem == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load get_mem procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_get_mem = (func_get_mem_t) get_mem; diff --git a/util/config_file.c b/util/config_file.c index 7a8fb0bbc..1afeb46bf 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -611,7 +611,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("control-cert-file:", control_cert_file) else S_STR("module-config:", module_conf) else S_STRLIST("python-script:", python_script) - else S_STR("dynlib-file:", dynlib_file) + else S_STRLIST("dynlib-file:", dynlib_file) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) #ifdef CLIENT_SUBNET /* Can't set max subnet prefix here, since that value is used when @@ -1064,7 +1064,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) else O_LST(opt, "python-script", python_script) - else O_STR(opt, "dynlib-file", dynlib_file) + else O_LST(opt, "dynlib-file", dynlib_file) else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check) else O_DEC(opt, "ip-ratelimit", ip_ratelimit) else O_DEC(opt, "ratelimit", ratelimit) @@ -1401,7 +1401,6 @@ config_delete(struct config_file* cfg) free(cfg->version); free(cfg->module_conf); free(cfg->outgoing_avail_ports); - free(cfg->dynlib_file); config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); @@ -1441,6 +1440,7 @@ config_delete(struct config_file* cfg) config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); + config_delstrlist(cfg->dynlib_file); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); diff --git a/util/config_file.h b/util/config_file.h index 6706ab08b..972c70fb8 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -440,7 +440,7 @@ struct config_file { struct config_strlist* python_script; /** Dynamic library file */ - char* dynlib_file; + struct config_strlist* dynlib_file; /** Use systemd socket activation. */ int use_systemd; diff --git a/util/configparser.y b/util/configparser.y index 5f58d75b3..f180f188f 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -2754,8 +2754,8 @@ content_dl: dl_file dl_file: VAR_DYNLIB_FILE STRING_ARG { OUTYY(("P(dynlib-file:%s)\n", $2)); - free(cfg_parser->cfg->dynlib_file); - cfg_parser->cfg->dynlib_file = $2; + if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2)) + yyerror("out of memory"); } server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG { From f79811435ba13cab2e397be4918fdd89530dbc86 Mon Sep 17 00:00:00 2001 From: PMunch Date: Tue, 22 Oct 2019 08:42:00 +0200 Subject: [PATCH 004/235] Cleanup some minor things in dynlibmod --- dynlibmod/dynlibmod.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 54b2a5816..977f45047 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -25,12 +25,12 @@ void log_dlerror() { NULL )) { - DWORD dwBytesWritten; log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); LocalFree(MessageBuffer); } } + HMODULE open_library(const char* fname) { return LoadLibrary(fname); } @@ -42,6 +42,7 @@ HMODULE open_library(const char* fname) { void log_dlerror() { log_err("dynlibmod: %s", dlerror()); } + void* open_library(const char* fname) { return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); } @@ -60,10 +61,8 @@ typedef void (*func_clear_t)(struct module_qstate*, int); typedef size_t (*func_get_mem_t)(struct module_env*, int); struct dynlibmod_env { - /** Dynamic library filename. */ const char* fname; - /** Module init function */ func_init_t func_init; /** Module deinit function */ @@ -76,19 +75,11 @@ struct dynlibmod_env { func_clear_t func_clear; /** Module get_mem function */ func_get_mem_t func_get_mem; - - /** Module qstate. */ - struct module_qstate* qstate; }; -/** - * counter for dynamic library module instances - * incremeted by dynlibmod_init - */ -int dynlib_mod_count = 0; - /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { + static int dynlib_mod_count; int dynlib_mod_idx = dynlib_mod_count++; struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); From d104d3be2243dbf0d678ee5e939acb78637f58e4 Mon Sep 17 00:00:00 2001 From: PMunch Date: Fri, 1 Nov 2019 10:44:26 +0100 Subject: [PATCH 005/235] Add inplace callback to dynlibmod, improve example This adds the possibility to properly register inplace callbacks in the dynamic library module. It works by creating a wrapper procedure that is available to the dynamic library and will call the given callback through a whitelisted callback function. The dynamic library example has already been improved to include comments and some simple examples on allocating and deallocating memory and registering callbacks. --- dynlibmod/dynlibmod.c | 108 +++++++++++++++++++++++--------- dynlibmod/dynlibmod.h | 67 ++++++++++++++++++++ dynlibmod/examples/helloworld.c | 76 +++++++++++++++++++++- util/fptr_wlist.c | 24 +++++++ 4 files changed, 243 insertions(+), 32 deletions(-) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 977f45047..7c77009d7 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -48,35 +48,6 @@ void* open_library(const char* fname) { } #endif - -/** - * Global state for the module. - */ - -typedef void (*func_init_t)(struct module_env*, int); -typedef void (*func_deinit_t)(struct module_env*, int); -typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); -typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); -typedef void (*func_clear_t)(struct module_qstate*, int); -typedef size_t (*func_get_mem_t)(struct module_env*, int); - -struct dynlibmod_env { - /** Dynamic library filename. */ - const char* fname; - /** Module init function */ - func_init_t func_init; - /** Module deinit function */ - func_deinit_t func_deinit; - /** Module operate function */ - func_operate_t func_operate; - /** Module super_inform function */ - func_inform_t func_inform; - /** Module clear function */ - func_clear_t func_clear; - /** Module get_mem function */ - func_get_mem_t func_get_mem; -}; - /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { static int dynlib_mod_count; @@ -159,6 +130,8 @@ int dynlibmod_init(struct module_env* env, int id) { de->func_get_mem = (func_get_mem_t) get_mem; } } + de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; + de->inplace_cb_register_wrapped = &inplace_cb_register_wrapped; de->func_init(env, id); return 1; } @@ -207,6 +180,83 @@ size_t dynlibmod_get_mem(struct module_env* env, int id) { return size + sizeof(*de); } +int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback) { + struct cb_pair* cb_pair = (struct cb_pair*) callback; + ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, + int id, void* callback) { + struct cb_pair* cb_pair = (struct cb_pair*) callback; + ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, + int id, void* cb_args) { + struct cb_pair* cb_pair = (struct cb_pair*) cb_args; + ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_query_response(struct module_qstate* qstate, + struct dns_msg* response, int id, void* cb_args) { + struct cb_pair* cb_pair = (struct cb_pair*) cb_args; + ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); +} + +int +inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, + struct module_env* env, int id) { + struct cb_pair* cb_pair = malloc(sizeof(struct cb_pair)); + cb_pair->cb = cb; + cb_pair->cb_arg = cbarg; + if(type >= inplace_cb_reply && type <= inplace_cb_reply_servfail) { + return inplace_cb_register(&dynlib_inplace_cb_reply_generic, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_query) { + return inplace_cb_register(&dynlib_inplace_cb_query_generic, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_query_response) { + return inplace_cb_register(&dynlib_inplace_cb_query_response, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_edns_back_parsed) { + return inplace_cb_register(&dynlib_inplace_cb_edns_back_parsed, type, (void*) cb_pair, env, id); + } else { + return 0; + } +} + +void +inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type, + int id) { + struct inplace_cb* temp = env->inplace_cb_lists[type]; + struct inplace_cb* prev = NULL; + + while(temp) { + if(temp->id == id) { + if(!prev) { + env->inplace_cb_lists[type] = temp->next; + free(temp->cb_arg); + free(temp); + temp = env->inplace_cb_lists[type]; + } + else { + prev->next = temp->next; + free(temp->cb_arg); + free(temp); + temp = prev->next; + } + } + else { + prev = temp; + temp = temp->next; + } + } +} + + /** * The module function block */ diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index 1d826a1c8..a8ba23cc9 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -67,4 +67,71 @@ void dynlibmod_clear(struct module_qstate* qstate, int id); /** dynlib module alloc size routine */ size_t dynlibmod_get_mem(struct module_env* env, int id); +int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback); + +int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, + int id, void* callback); + +int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, + int id, void* cb_args); + +int dynlib_inplace_cb_query_response(struct module_qstate* qstate, + struct dns_msg* response, int id, void* cb_args); + +int +inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, + struct module_env* env, int id); + +void +inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type, + int id); + +struct cb_pair { + void *cb; + void *cb_arg; +}; + +/** + * Global state for the module. + */ + +typedef void (*func_init_t)(struct module_env*, int); +typedef void (*func_deinit_t)(struct module_env*, int); +typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); +typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); +typedef void (*func_clear_t)(struct module_qstate*, int); +typedef size_t (*func_get_mem_t)(struct module_env*, int); +typedef void (*inplace_cb_delete_wrapped_t)(struct module_env*, enum inplace_cb_list_type, int); +typedef int (*inplace_cb_register_wrapped_t)(void*, enum inplace_cb_list_type, void*, struct module_env*, int); + + +struct dynlibmod_env { + /** Dynamic library filename. */ + const char* fname; + /** Module init function */ + func_init_t func_init; + /** Module deinit function */ + func_deinit_t func_deinit; + /** Module operate function */ + func_operate_t func_operate; + /** Module super_inform function */ + func_inform_t func_inform; + /** Module clear function */ + func_clear_t func_clear; + /** Module get_mem function */ + func_get_mem_t func_get_mem; + /** Wrapped inplace callback functions to circumvent callback whitelisting */ + inplace_cb_delete_wrapped_t inplace_cb_delete_wrapped; + inplace_cb_register_wrapped_t inplace_cb_register_wrapped; + /** Pointer to any data the dynamic library might want to keep */ + void *dyn_env; +}; + + #endif /* DYNLIBMOD_H */ diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 6479d8460..3d7708af0 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -4,31 +4,70 @@ * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c * And to build for windows, first make unbound with the --with-dynlibmod * switch, then use this command: - * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic -o helloworld.dll helloworld.c -L../.. -l:libunbound.a + * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic + * -o helloworld.dll helloworld.c -L../.. -l:libunbound.a * to cross-compile a 64-bit Windows DLL. */ #include "../../config.h" #include "../../util/module.h" +#include "../dynlibmod.h" +/* Declare the EXPORT macro that expands to exporting the symbol for DLLs when + * compiling for Windows. All procedures marked with EXPORT in this example are + * called directly by the dynlib module and must be present for the module to + * load correctly. */ #ifdef HAVE_WINDOWS_H #define EXPORT __declspec(dllexport) #else #define EXPORT #endif +/* Forward declare a callback, implemented at the bottom of this file */ +int reply_callback(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback); + +/* Init is called when the module is first loaded. It should be used to set up + * the environment for this module and do any other initialisation required. */ EXPORT void init(struct module_env* env, int id) { log_info("Hello world from init"); + struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; + de->inplace_cb_register_wrapped(&reply_callback, + inplace_cb_reply, + NULL, env, id); + struct dynlibmod_env* local_env = env->modinfo[id]; + local_env->dyn_env = NULL; } +/* Deinit is run as the program is shutting down. It should be used to clean up + * the environment and any left over data. */ EXPORT void deinit(struct module_env* env, int id) { log_info("Hello world from deinit"); + struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; + de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id); + if (de->dyn_env != NULL) free(de->dyn_env); } -EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) { +/* Operate is called every time a query passes by this module. The event can be + * used to determine which direction in the module chain it came from. */ +EXPORT void operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* entry) { log_info("Hello world from operate"); if (event == module_event_new || event == module_event_pass) { qstate->ext_state[id] = module_wait_module; + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env == NULL) { + env->dyn_env = calloc(3, sizeof(int)); + ((int *)env->dyn_env)[0] = 42; + ((int *)env->dyn_env)[1] = 102; + ((int *)env->dyn_env)[2] = 192; + } else { + log_err("Already has data!"); + qstate->ext_state[id] = module_error; + } } else if (event == module_event_moddone) { qstate->ext_state[id] = module_finished; } else { @@ -36,15 +75,46 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, } } -EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { +/* Inform super is called when a query is completed or errors out, but only if + * a sub-query has been registered to it by this module. Look at + * mesh_attach_sub in services/mesh.h to see how this is done. */ +EXPORT void inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) { log_info("Hello world from inform_super"); } +/* Clear is called once a query is complete and the response has been sent + * back. It is used to clear up any per-query allocations. */ EXPORT void clear(struct module_qstate* qstate, int id) { log_info("Hello world from clear"); + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env != NULL) { + free(env->dyn_env); + env->dyn_env = NULL; + } } +/* Get mem is called when Unbound is printing performance information. This + * only happens explicitly and is only used to show memory usage to the user. */ EXPORT size_t get_mem(struct module_env* env, int id) { log_info("Hello world from get_mem"); return 0; } + +/* The callback that was forward declared earlier. It is registered in the init + * procedure to run when a query is being replied to. */ +int reply_callback(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback) { + log_info("Hello world from callback"); + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env != NULL) { + log_info("Numbers gotten from query: %d, %d, and %d", + ((int *)env->dyn_env)[0], + ((int *)env->dyn_env)[1], + ((int *)env->dyn_env)[2]); + } + return 0; +} diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 20eaeb137..dfd05957f 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -585,18 +585,30 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, if(type == inplace_cb_reply) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_cache) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_local) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_servfail) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } return 0; @@ -611,6 +623,10 @@ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr) #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_query_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_query_generic) + return 1; #endif (void)fptr; return 0; @@ -624,6 +640,10 @@ int fptr_whitelist_inplace_cb_edns_back_parsed( return 1; #else (void)fptr; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_edns_back_parsed) + return 1; #endif return 0; } @@ -636,6 +656,10 @@ int fptr_whitelist_inplace_cb_query_response( return 1; #else (void)fptr; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_query_response) + return 1; #endif return 0; } From 5eabc429bce05e40f1101e6a0b164e30de4bc9be Mon Sep 17 00:00:00 2001 From: PMunch Date: Mon, 4 Nov 2019 16:03:04 +0100 Subject: [PATCH 006/235] Add "dynlib" prefix to example output, log queries This adds the "dynlib: " prefix to all messages created by the `helloworld.c` dynamic library example. It also adds logging of queries that pass through `operate`. --- dynlibmod/examples/helloworld.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 3d7708af0..d001b3ee8 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -11,6 +11,7 @@ #include "../../config.h" #include "../../util/module.h" +#include "../../sldns/parseutil.h" #include "../dynlibmod.h" /* Declare the EXPORT macro that expands to exporting the symbol for DLLs when @@ -33,7 +34,7 @@ int reply_callback(struct query_info* qinfo, /* Init is called when the module is first loaded. It should be used to set up * the environment for this module and do any other initialisation required. */ EXPORT void init(struct module_env* env, int id) { - log_info("Hello world from init"); + log_info("dynlib: hello world from init"); struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; de->inplace_cb_register_wrapped(&reply_callback, inplace_cb_reply, @@ -45,7 +46,7 @@ EXPORT void init(struct module_env* env, int id) { /* Deinit is run as the program is shutting down. It should be used to clean up * the environment and any left over data. */ EXPORT void deinit(struct module_env* env, int id) { - log_info("Hello world from deinit"); + log_info("dynlib: hello world from deinit"); struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id); if (de->dyn_env != NULL) free(de->dyn_env); @@ -55,7 +56,13 @@ EXPORT void deinit(struct module_env* env, int id) { * used to determine which direction in the module chain it came from. */ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) { - log_info("Hello world from operate"); + log_info("dynlib: hello world from operate"); + log_info("dynlib: incoming query: %s %s(%d) %s(%d)", + qstate->qinfo.qname, + sldns_lookup_by_id(sldns_rr_classes, qstate->qinfo.qclass)->name, + qstate->qinfo.qclass, + sldns_rr_descript(qstate->qinfo.qtype)->_name, + qstate->qinfo.qtype); if (event == module_event_new || event == module_event_pass) { qstate->ext_state[id] = module_wait_module; struct dynlibmod_env* env = qstate->env->modinfo[id]; @@ -65,7 +72,7 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, ((int *)env->dyn_env)[1] = 102; ((int *)env->dyn_env)[2] = 192; } else { - log_err("Already has data!"); + log_err("dynlib: already has data!"); qstate->ext_state[id] = module_error; } } else if (event == module_event_moddone) { @@ -80,13 +87,13 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, * mesh_attach_sub in services/mesh.h to see how this is done. */ EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { - log_info("Hello world from inform_super"); + log_info("dynlib: hello world from inform_super"); } /* Clear is called once a query is complete and the response has been sent * back. It is used to clear up any per-query allocations. */ EXPORT void clear(struct module_qstate* qstate, int id) { - log_info("Hello world from clear"); + log_info("dynlib: hello world from clear"); struct dynlibmod_env* env = qstate->env->modinfo[id]; if (env->dyn_env != NULL) { free(env->dyn_env); @@ -97,7 +104,7 @@ EXPORT void clear(struct module_qstate* qstate, int id) { /* Get mem is called when Unbound is printing performance information. This * only happens explicitly and is only used to show memory usage to the user. */ EXPORT size_t get_mem(struct module_env* env, int id) { - log_info("Hello world from get_mem"); + log_info("dynlib: hello world from get_mem"); return 0; } @@ -108,10 +115,10 @@ int reply_callback(struct query_info* qinfo, struct edns_data* edns, struct edns_option** opt_list_out, struct comm_reply* repinfo, struct regional* region, int id, void* callback) { - log_info("Hello world from callback"); + log_info("dynlib: hello world from callback"); struct dynlibmod_env* env = qstate->env->modinfo[id]; if (env->dyn_env != NULL) { - log_info("Numbers gotten from query: %d, %d, and %d", + log_info("dynlib: numbers gotten from query: %d, %d, and %d", ((int *)env->dyn_env)[0], ((int *)env->dyn_env)[1], ((int *)env->dyn_env)[2]); From 8802509a61bd6eb026811fecf474b207b3f42716 Mon Sep 17 00:00:00 2001 From: PMunch Date: Wed, 20 Nov 2019 15:11:51 +0100 Subject: [PATCH 007/235] Fix return code of init to mirror native modules The return code of the init procedure was just set to be 1 in the dynamic library loading module. This ha been rectified and it will now return whatever is returned from the loaded module. --- dynlibmod/dynlibmod.c | 3 +-- dynlibmod/dynlibmod.h | 2 +- dynlibmod/examples/helloworld.c | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 7c77009d7..5a93a7ce5 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -132,8 +132,7 @@ int dynlibmod_init(struct module_env* env, int id) { } de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; de->inplace_cb_register_wrapped = &inplace_cb_register_wrapped; - de->func_init(env, id); - return 1; + return de->func_init(env, id); } /** dynlib module deinit */ diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index a8ba23cc9..1097db1e7 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -101,7 +101,7 @@ struct cb_pair { * Global state for the module. */ -typedef void (*func_init_t)(struct module_env*, int); +typedef int (*func_init_t)(struct module_env*, int); typedef void (*func_deinit_t)(struct module_env*, int); typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index d001b3ee8..2ec50223e 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -33,7 +33,7 @@ int reply_callback(struct query_info* qinfo, /* Init is called when the module is first loaded. It should be used to set up * the environment for this module and do any other initialisation required. */ -EXPORT void init(struct module_env* env, int id) { +EXPORT int init(struct module_env* env, int id) { log_info("dynlib: hello world from init"); struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; de->inplace_cb_register_wrapped(&reply_callback, @@ -41,6 +41,7 @@ EXPORT void init(struct module_env* env, int id) { NULL, env, id); struct dynlibmod_env* local_env = env->modinfo[id]; local_env->dyn_env = NULL; + return 1; } /* Deinit is run as the program is shutting down. It should be used to clean up From b7e08045b18d065e6fbb5055359f1c8b88f22d01 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Jan 2020 11:04:06 +0100 Subject: [PATCH 008/235] git branch to track feature for framestreams. The aim is to make reconnecting work, TLS support and not depend on the libfstrm library, but keep compatibility with the Frame Streams protocol spec for existing DNSTAP tools. --- Makefile.in | 1 + configure | 4 +- configure.ac | 4 +- dnstap/dtstream.c | 46 +++++++++++++++ dnstap/dtstream.h | 139 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 190 insertions(+), 4 deletions(-) create mode 100644 dnstap/dtstream.c create mode 100644 dnstap/dtstream.h diff --git a/Makefile.in b/Makefile.in index 1a2e2c548..b7961b2b9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1059,6 +1059,7 @@ respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localz $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h +dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ diff --git a/configure b/configure index eb855554d..12d042492 100755 --- a/configure +++ b/configure @@ -20936,9 +20936,9 @@ cat >>confdefs.h <<_ACEOF _ACEOF - DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c" + DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dtstream.c" - DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo" + DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo dtstream.lo" else diff --git a/configure.ac b/configure.ac index 4ed9bb872..e1cddc35d 100644 --- a/configure.ac +++ b/configure.ac @@ -1637,8 +1637,8 @@ dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, ["$hdr_dnstap_socket_path"], [default dnstap socket path]) - AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c"]) - AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo"]) + AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dtstream.c"]) + AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dtstream.lo"]) ], [ AC_SUBST([ENABLE_DNSTAP], [0]) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c new file mode 100644 index 000000000..cad4d1f48 --- /dev/null +++ b/dnstap/dtstream.c @@ -0,0 +1,46 @@ +/* + * dnstap/dtstream.c - Frame Streams implementation for unbound DNSTAP + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * \file + * + * An implementation of the Frame Streams data transport protocol for + * the Unbound DNSTAP message logging facility. + */ + +#include "config.h" +#include "dnstap/dtstream.h" + diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h new file mode 100644 index 000000000..1b7af2371 --- /dev/null +++ b/dnstap/dtstream.h @@ -0,0 +1,139 @@ +/* + * dnstap/dtstream.h - Frame Streams implementation for unbound DNSTAP + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * \file + * + * An implementation of the Frame Streams data transport protocol for + * the Unbound DNSTAP message logging facility. + */ + +#ifndef DTSTREAM_H +#define DTSTREAM_H + +#include "util/locks.h" +struct dt_msg_entry; +struct dt_io_list_item; + +/** + * A message buffer with dnstap messages queued up. It is per-worker. + * It has locks to synchronize. If the buffer is full, a new message + * cannot be added and is discarded. A thread reads the messages and sends + * them. + */ +struct dt_msg_queue { + /** lock of the buffer structure. Hold this lock to add or remove + * entries to the buffer. Release it so that other threads can also + * put messages to log, or a message can be taken out to send away + * by the writer thread. + */ + lock_basic_type lock; + /** the maximum size of the buffer, in bytes */ + size_t maxsize; + /** current size of the buffer, in bytes. data bytes of messages. + * If a new message make it more than maxsize, the buffer is full */ + size_t cursize; + /** list of messages. The messages are added to the back and taken + * out from the front. */ + struct dt_msg_entry* first, *last; +}; + +/** + * An entry in the dt_msg_queue. contains one DNSTAP message. + * It is malloced. + */ +struct dt_msg_entry { + /** next in the list. */ + struct dt_msg_entry* next; + /** the buffer with the data to send, an encoded DNSTAP message */ + void* buf; + /** the length to send. */ + size_t len; +}; + +/** + * IO thread that reads from the queues and writes them. + */ +struct dt_io_thread { + /** event base, for event handling */ + void* event_base; + /** list of queues that is registered to get written */ + struct dt_io_list_item* io_list; + /** file descriptor that the thread writes to */ + int fd; + /** event structure that the thread uses */ + void* event; + + /** command pipe that stops the pipe if closed. Used to quit + * the program. [0] is read, [1] is written to. */ + int commandpipe[2]; + /** the event to listen to the commandpipe */ + void* command_event; + + /** If the log server is connected to over unix domain sockets, + * eg. a file is named that is created to log onto. */ + int upstream_is_unix; + /** if the log server is connected to over TCP. The ip address and + * port are used */ + int upstream_is_tcp; + /** if the log server is connected to over TLS. ip address, port, + * and client certificates can be used for authentication. */ + int upstream_is_tls; + + /** the file path for unix socket (or NULL) */ + char* socket_path; + /** the ip address and port number (or NULL) */ + char* ip_str; + /** is the TLS upstream authenticated by name, if nonNULL, + * we use the same cert bundle as used by other TLS streams. */ + char* tls_server_name; + /** are client certificates in use */ + int use_client_certs; + /** client cert files: the .key file */ + char* client_key_file; + /** client cert files: the .pem file */ + char* client_cert_file; +}; + +/* Frame Streams data transfer protocol encode for DNSTAP messages. + * The protocol looks to be specified in the libfstrm library. + */ +/* routine to send START message. */ +/* routine to send a frame. */ +/* routine to send STOP message. */ + + +#endif /* DTSTREAM_H */ From c6534ac6b3f235bbca89a29ed6b620a6c40c3d6f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Jan 2020 11:44:45 +0100 Subject: [PATCH 009/235] Writeup of FrameStreams protocol. --- dnstap/dtstream.h | 58 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 1b7af2371..0edd219ea 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -71,7 +71,7 @@ struct dt_msg_queue { struct dt_msg_entry* first, *last; }; -/** +/** * An entry in the dt_msg_queue. contains one DNSTAP message. * It is malloced. */ @@ -130,8 +130,62 @@ struct dt_io_thread { /* Frame Streams data transfer protocol encode for DNSTAP messages. * The protocol looks to be specified in the libfstrm library. + * + * Quick writeup for DNSTAP usage, from reading fstrm/control.h eloquent + * comments and fstrm/control.c for some bytesize details (the content type + * length). + * + * The Frame Streams can be unidirectional or bi-directional. + * bi-directional streams use control frame types READY, ACCEPT and FINISH. + * uni-directional streams use control frame types START and STOP. + * unknown control frame types should be ignored by the receiver, they + * do not change the data frame encoding. + * + * bi-directional control frames implement a simple handshake protocol + * between sender and receiver. + * + * The uni-directional control frames have one start and one stop frame, + * before and after the data. The start frame can have a content type. + * The start and stop frames are not optional. + * + * data frames are preceded by 4byte length, bigendian. + * zero length data frames are not possible, they are an escape that + * signals the presence of a control frame. + * + * a control frame consists of 0 value in 4byte bigendian, this is really + * the data frame length, with 0 the escape sequence that indicates one + * control frame follows. + * Then, 4byte bigendian, length of the control frame message. + * Then, the control frame payload (of that length). with in it: + * 4byte bigendian, control type (eg. START, STOP, READY, ACCEPT, FINISH). + * perhaps nothing more (STOP, FINISH), but for other types maybe + * content type fields + * 4byte bigendian, the control-field-type, currently only content-type. + * 4byte bigendian, length of the string for this option. + * .. bytes of that string. + * + * The START type can have only one field. Field max len 256. + * control frame max frame length 512 (excludes the 0-escape and control + * frame length bytes). */ -/* routine to send START message. */ + +/** max length of Frame Streams content type field string */ +#define FSTRM_CONTENT_TYPE_LENGTH_MAX 256 +/** control frame value to denote the control frame ACCEPT */ +#define FSTRM_CONTROL_FRAME_ACCEPT 0x01 +/** control frame value to denote the control frame START */ +#define FSTRM_CONTROL_FRAME_START 0x02 +/** control frame value to denote the control frame STOP */ +#define FSTRM_CONTROL_FRAME_STOP 0x03 +/** control frame value to denote the control frame READY */ +#define FSTRM_CONTROL_FRAME_READY 0x04 +/** control frame value to denote the control frame FINISH */ +#define FSTRM_CONTROL_FRAME_FINISH 0x05 +/** the constant that denotes the control field type that is the + * string for the content type of the stream. */ +#define FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE 0x01 + +/* routine to send START message, with content type. */ /* routine to send a frame. */ /* routine to send STOP message. */ From 9285e10fef0a3327e11385b8f3fed7f5f7e27e30 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Jan 2020 12:12:27 +0100 Subject: [PATCH 010/235] iolist item added. --- dnstap/dtstream.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 0edd219ea..41114c836 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -128,6 +128,17 @@ struct dt_io_thread { char* client_cert_file; }; +/** + * IO thread list of queues list item + * lists a worker queue that should be looked at and sent to the log server. + */ +struct dt_io_list_item { + /** next in the list of buffers to inspect */ + struct dt_io_list_item* next; + /** buffer of this worker */ + struct dt_msg_queue* queue; +}; + /* Frame Streams data transfer protocol encode for DNSTAP messages. * The protocol looks to be specified in the libfstrm library. * @@ -159,7 +170,7 @@ struct dt_io_thread { * Then, the control frame payload (of that length). with in it: * 4byte bigendian, control type (eg. START, STOP, READY, ACCEPT, FINISH). * perhaps nothing more (STOP, FINISH), but for other types maybe - * content type fields + * control fields * 4byte bigendian, the control-field-type, currently only content-type. * 4byte bigendian, length of the string for this option. * .. bytes of that string. From 90a9de9d527f33abc919b36bd0609073f6a83794 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Jan 2020 15:45:31 +0100 Subject: [PATCH 011/235] unbound-dnstap-socket debug test program. --- .gitignore | 1 + Makefile.in | 16 +- dnstap/dtstream.h | 9 + dnstap/unbound-dnstap-socket.c | 387 +++++++++++++++++++++++++++++++++ 4 files changed, 409 insertions(+), 4 deletions(-) create mode 100644 dnstap/unbound-dnstap-socket.c diff --git a/.gitignore b/.gitignore index 22fedf0d7..6f26d217c 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ /petal /pktview /streamtcp +/unbound-dnstap-socket /testbound /unittest /contrib/libunbound.pc diff --git a/Makefile.in b/Makefile.in index b7961b2b9..65dc20663 100644 --- a/Makefile.in +++ b/Makefile.in @@ -232,6 +232,10 @@ DELAYER_OBJ_LINK=$(DELAYER_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) IPSET_SRC=@IPSET_SRC@ IPSET_OBJ=@IPSET_OBJ@ +DNSTAP_SOCKET_SRC=dnstap/unbound-dnstap-socket.c +DNSTAP_SOCKET_OBJ=unbound-dnstap-socket.lo +DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) worker_cb.lo $(COMMON_OBJ) \ +$(COMPAT_OBJ) $(SLDNS_OBJ) LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo @@ -258,7 +262,7 @@ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ $(TESTBOUND_SRC) $(LOCKVERIFY_SRC) $(PKTVIEW_SRC) \ $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \ $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \ - $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) \ + $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) $(DNSTAP_SOCKET_SRC)\ $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC) \ $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC) @@ -266,7 +270,7 @@ ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \ $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \ $(ASYNCLOOK_OBJ) $(STREAMTCP_OBJ) $(PERF_OBJ) $(DELAYER_OBJ) \ - $(CONTROL_OBJ) $(UBANCHOR_OBJ) $(PETAL_OBJ) \ + $(CONTROL_OBJ) $(UBANCHOR_OBJ) $(PETAL_OBJ) $(DNSTAP_SOCKET_OBJ)\ $(COMPAT_OBJ) $(PYUNBOUND_OBJ) \ $(SVCINST_OBJ) $(SVCUNINST_OBJ) $(ANCHORUPD_OBJ) $(SLDNS_OBJ) @@ -305,7 +309,7 @@ rsrc_unbound_checkconf.o: $(srcdir)/winrc/rsrc_unbound_checkconf.rc config.h TEST_BIN=asynclook$(EXEEXT) delayer$(EXEEXT) \ lock-verify$(EXEEXT) memstats$(EXEEXT) perf$(EXEEXT) \ petal$(EXEEXT) pktview$(EXEEXT) streamtcp$(EXEEXT) \ - testbound$(EXEEXT) unittest$(EXEEXT) + testbound$(EXEEXT) unittest$(EXEEXT) unbound-dnstap-socket$(EXEEXT) tests: all $(TEST_BIN) check: test @@ -400,7 +404,12 @@ dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto @-if test ! -d dnstap; then $(INSTALL) -d dnstap; fi $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto +unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) + $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) + dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h +dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h +unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h $(srcdir)/dnstap/dtstream.h # dnscrypt dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \ @@ -1059,7 +1068,6 @@ respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localz $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h -dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 41114c836..e76264f50 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -178,6 +178,15 @@ struct dt_io_list_item { * The START type can have only one field. Field max len 256. * control frame max frame length 512 (excludes the 0-escape and control * frame length bytes). + * + * the bidirectional type of transmission is like this: + * client sends READY (with content type included), + * client waits for ACCEPT (with content type included), + * client sends START (with matched content type from ACCEPT) + * .. data frames + * client sends STOP. + * client waits for FINISH frame. + * */ /** max length of Frame Streams content type field string */ diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c new file mode 100644 index 000000000..30412fb3b --- /dev/null +++ b/dnstap/unbound-dnstap-socket.c @@ -0,0 +1,387 @@ +/* + * dnstap/unbound-dnstap-socket.c - debug program that listens for DNSTAP logs. + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This program listens on a DNSTAP socket for logged messages. + */ +#include "config.h" +#ifdef HAVE_GETOPT_H +#include +#endif +#include +#include +#include +#ifdef HAVE_SYS_UN_H +#include +#endif +#include +#include +#include +#include "dnstap/dtstream.h" +#include "util/log.h" +#include "util/ub_event.h" +#include "util/net_help.h" +#include "services/listen_dnsport.h" + +/** usage information for streamtcp */ +static void usage(char* argv[]) +{ + printf("usage: %s [options]\n", argv[0]); + printf(" Listen to dnstap messages\n"); + printf("-u use unix socket with this file name\n"); + printf("-l long format for DNS printout\n"); + printf("-v more verbose log output\n"); + printf("-h this help text\n"); + exit(1); +} + +/** tap callback variables */ +struct tap_data { + /** the fd */ + int fd; + /** the ub event */ + struct ub_event* ev; + /** have we read the length, and how many bytes of it */ + int len_done; + /** have we read the data, and how many bytes of it */ + size_t data_done; + /** are we bi-directional (if false, uni-directional) */ + int is_bidirectional; + /** are we reading a control frame */ + int control_frame; + /** data of the frame */ + uint8_t* frame; + /** length of this frame */ + size_t len; +}; + +/** receive bytes from fd, prints errors if bad, + * returns 0: closed/error, -1: continue, >0 number of bytes */ +static ssize_t receive_bytes(int fd, void* buf, size_t len) +{ + ssize_t ret = recv(fd, buf, len, 0); + if(ret == 0) { + /* closed */ + if(verbosity) log_info("dnstap client stream closed"); + return 0; + } else if(ret == -1) { + /* error */ +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return -1; + log_err("could not recv: %s", strerror(errno)); +#else /* USE_WINSOCK */ + if(WSAGetLastError() == WSAEINPROGRESS) + return -1; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(data->ev, + UB_EV_READ); + return -1; + } + log_err("could not recv: %s", + wsa_strerror(WSAGetLastError())); +#endif + if(verbosity) log_info("dnstap client stream closed"); + return 0; + } + return ret; +} + +/** delete the tap structure */ +void tap_data_free(struct tap_data* data) +{ + ub_event_del(data->ev); + ub_event_free(data->ev); + close(data->fd); + free(data->frame); + free(data); +} + +/** callback for dnstap listener */ +static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) +{ + struct tap_data* data = (struct tap_data*)arg; + if(verbosity) log_info("tap callback"); + while(data->len_done < 4) { + uint32_t l = (uint32_t)data->len; + ssize_t ret = receive_bytes(fd, + ((uint8_t*)&l)+data->len_done, 4-data->len_done); + log_info("s recv %d got %d %d", (int)ret, (int)l, (int)ntohl(l)); + if(ret == 0) { + /* closed or error */ + tap_data_free(data); + return; + } else if(ret == -1) { + /* continue later */ + return; + } + data->len_done += ret; + data->len = (size_t)l; + if(data->len_done < 4) + return; /* continue later */ + data->len = (size_t)(ntohl(l)); + if(verbosity) log_info("length is %d", (int)data->len); + if(data->len == 0) { + /* it is a control frame */ + data->control_frame = 1; + /* read controlframelen */ + data->len_done = 0; + } else { + /* allocate frame size */ + data->frame = calloc(1, data->len); + if(!data->frame) { + log_err("out of memory"); + tap_data_free(data); + return; + } + } + } + /* we want to read the full length now */ + if(data->data_done < data->len) { + ssize_t r = receive_bytes(fd, data->frame + data->data_done, + data->len - data->data_done); + if(r == 0) { + /* closed or error */ + tap_data_free(data); + return; + } else if(r == -1) { + /* continue later */ + return; + } + data->data_done += r; + if(data->data_done < data->len) + return; /* continue later */ + } + /* we are done with a frame */ + if(verbosity) log_info("received %sframe len %d", + (data->control_frame?"control ":""), (int)data->len); + if(data->len >= 4 && ntohl(*(uint32_t*)data->frame) == + FSTRM_CONTROL_FRAME_READY) { + data->is_bidirectional = 1; + if(verbosity) log_info("bidirectional stream"); + } + + /* prepare for next frame */ + free(data->frame); + data->frame = NULL; + data->control_frame = 0; + data->len = 0; + data->len_done = 0; + data->data_done = 0; +} + +/** callback for main listening file descriptor */ +void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) +{ + struct tap_data* data; + struct sockaddr_storage addr; + socklen_t addrlen = (socklen_t)sizeof(addr); + struct ub_event_base* base = (struct ub_event_base*)arg; + int s = accept(fd, (struct sockaddr*)&addr, &addrlen); + if(s == -1) { +#ifndef USE_WINSOCK + /* EINTR is signal interrupt. others are closed connection. */ + if( errno == EINTR || errno == EAGAIN +#ifdef EWOULDBLOCK + || errno == EWOULDBLOCK +#endif +#ifdef ECONNABORTED + || errno == ECONNABORTED +#endif +#ifdef EPROTO + || errno == EPROTO +#endif /* EPROTO */ + ) + return; + log_err_addr("accept failed", strerror(errno), &addr, addrlen); +#else /* USE_WINSOCK */ + if(WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAECONNRESET) + return; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); + return; + } + log_err_addr("accept failed", wsa_strerror(WSAGetLastError()), + addr, *addrlen); +#endif + return; + } + fd_set_nonblock(s); + if(verbosity) { + if(addr.ss_family == AF_LOCAL) { + struct sockaddr_un* usock = calloc(1, sizeof(struct sockaddr_un) + 1); + if(usock) { + socklen_t ulen = sizeof(struct sockaddr_un); + if(getsockname(fd, (struct sockaddr*)usock, &ulen) != -1) { + log_info("accepted new dnstap client from %s", usock->sun_path); + } else { + log_info("accepted new dnstap client"); + } + free(usock); + } else { + log_info("accepted new dnstap client"); + } + } else { + log_info("accepted new dnstap client"); + } + } + + data = calloc(1, sizeof(*data)); + if(!data) fatal_exit("out of memory"); + data->fd = s; + data->ev = ub_event_new(base, s, UB_EV_READ | UB_EV_PERSIST, + &tap_callback, data); + if(!data->ev) fatal_exit("could not ub_event_new"); + if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add"); +} + +/** create file descriptor to listen on */ +static int +setup_fd(char* socketpath) +{ + return create_local_accept_sock(socketpath, NULL, 0); +} + +/** setup and run the server to listen to DNSTAP messages */ +static void +setup_and_run(char* socketpath, int longformat) +{ + int fd; + time_t secs = 0; + struct timeval now; + struct ub_event_base* base; + const char *evnm="event", *evsys="", *evmethod=""; + struct ub_event *ev; + + memset(&now, 0, sizeof(now)); + base = ub_default_event_base(1, &secs, &now); + if(!base) fatal_exit("could not create ub_event base"); + fd = setup_fd(socketpath); + ub_get_event_sys(base, &evnm, &evsys, &evmethod); + if(verbosity) log_info("%s %s uses %s method", evnm, evsys, evmethod); + ev = ub_event_new(base, fd, UB_EV_READ | UB_EV_PERSIST, + &mainfdcallback, base); + if(!ev) fatal_exit("could not ub_event_new"); + if(ub_event_add(ev, NULL) != 0) fatal_exit("could not ub_event_add"); + + ub_event_base_dispatch(base); + + ub_event_del(ev); + ub_event_free(ev); + ub_event_base_free(base); + close(fd); +} + +/** getopt global, in case header files fail to declare it. */ +extern int optind; +/** getopt global, in case header files fail to declare it. */ +extern char* optarg; + +/** main program for streamtcp */ +int main(int argc, char** argv) +{ + int c; + int usessl = 0, longformat = 0; + char* socketpath = NULL; +#ifdef USE_WINSOCK + WSADATA wsa_data; + if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) { + printf("WSAStartup failed\n"); + return 1; + } +#endif + + /* lock debug start (if any) */ + log_ident_set("unbound-dnstap-socket"); + log_init(0, 0, 0); + checklock_start(); + +#ifdef SIGPIPE + if(signal(SIGPIPE, SIG_IGN) == SIG_ERR) { + perror("could not install signal handler for SIGPIPE"); + return 1; + } +#endif + + /* command line options */ + while( (c=getopt(argc, argv, "hlu:v")) != -1) { + switch(c) { + case 'u': + socketpath = optarg; + break; + case 'l': + longformat = 1; + break; + case 'v': + verbosity++; + break; + case 'h': + case '?': + default: + usage(argv); + } + } + argc -= optind; + argv += optind; + + if(usessl) { +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) + ERR_load_SSL_strings(); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) +# ifndef S_SPLINT_S + OpenSSL_add_all_algorithms(); +# endif +#else + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS + | OPENSSL_INIT_ADD_ALL_DIGESTS + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) + (void)SSL_library_init(); +#else + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); +#endif + } + setup_and_run(socketpath, longformat); + checklock_stop(); +#ifdef USE_WINSOCK + WSACleanup(); +#endif + return 0; +} From ac362625c3886d31799ae1854ee98155e0c33e34 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Jan 2020 17:23:01 +0100 Subject: [PATCH 012/235] dnstap test progam can log on one line type,ip,qname,qtype,qclass --- dnstap/unbound-dnstap-socket.c | 290 +++++++++++++++++++++++++++++++-- 1 file changed, 280 insertions(+), 10 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 30412fb3b..4b8ef1dad 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -56,12 +56,19 @@ #include "util/ub_event.h" #include "util/net_help.h" #include "services/listen_dnsport.h" +#include "sldns/sbuffer.h" +#include "sldns/wire2str.h" +#include +#include "dnstap/dnstap.pb-c.h" + +#define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" /** usage information for streamtcp */ static void usage(char* argv[]) { printf("usage: %s [options]\n", argv[0]); printf(" Listen to dnstap messages\n"); + printf("stdout has dnstap log, stderr has verbose server log\n"); printf("-u use unix socket with this file name\n"); printf("-l long format for DNS printout\n"); printf("-v more verbose log output\n"); @@ -69,6 +76,9 @@ static void usage(char* argv[]) exit(1); } +/** long format option, for multiline printout per message */ +static int longformat = 0; + /** tap callback variables */ struct tap_data { /** the fd */ @@ -79,16 +89,180 @@ struct tap_data { int len_done; /** have we read the data, and how many bytes of it */ size_t data_done; - /** are we bi-directional (if false, uni-directional) */ - int is_bidirectional; /** are we reading a control frame */ int control_frame; + /** are we bi-directional (if false, uni-directional) */ + int is_bidirectional; /** data of the frame */ uint8_t* frame; /** length of this frame */ size_t len; }; +/** log control frame contents */ +static void log_control_frame(uint8_t* pkt, size_t len) +{ + uint32_t frametype = 0; + char buf[256]; + size_t at = 0, remain; + uint8_t* pos; + if(verbosity == 0) return; + if(len < 4) { + log_err("malformed control frame, too short, len=%d", (int)len); + return; + } + buf[0]=0; + frametype = sldns_read_uint32(pkt); + if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) { + at+=snprintf(buf+at, sizeof(buf)-at, "accept"); + } else if(frametype == FSTRM_CONTROL_FRAME_START) { + at+=snprintf(buf+at, sizeof(buf)-at, "start"); + } else if(frametype == FSTRM_CONTROL_FRAME_STOP) { + at+=snprintf(buf+at, sizeof(buf)-at, "stop"); + } else if(frametype == FSTRM_CONTROL_FRAME_READY) { + at+=snprintf(buf+at, sizeof(buf)-at, "ready"); + } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) { + at+=snprintf(buf+at, sizeof(buf)-at, "finish"); + } else { + at+=snprintf(buf+at, sizeof(buf)-at, "type%d", + (int)frametype); + } + + /* show the content type options */ + pos = pkt + 4; + remain = len - 4; + while(remain >= 8) { + uint32_t field_type = sldns_read_uint32(pos); + uint32_t field_len = sldns_read_uint32(pos+4); + if(remain < field_len) { + at+=snprintf(buf+at, sizeof(buf)-at, "malformed_field"); + break; + } + if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { + at+=snprintf(buf+at, sizeof(buf)-at, " content-type("); + if(at+field_len < sizeof(buf)) { + memmove(buf+at, pos+8, field_len); + at += field_len; + } + at+=snprintf(buf+at, sizeof(buf)-at, ")"); + } + pos += 8 + field_len; + remain -= (8 + field_len); + } + log_info("control frame %s", buf); +} + +/** convert mtype to string */ +static const char* mtype_to_str(enum _Dnstap__Message__Type mtype) +{ + switch(mtype) { + case DNSTAP__MESSAGE__TYPE__AUTH_QUERY: + return "AUTH_QUERY"; + case DNSTAP__MESSAGE__TYPE__AUTH_RESPONSE: + return "AUTH_RESPONSE"; + case DNSTAP__MESSAGE__TYPE__RESOLVER_QUERY: + return "RESOLVER_QUERY"; + case DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE: + return "RESOLVER_RESPONSE"; + case DNSTAP__MESSAGE__TYPE__CLIENT_QUERY: + return "CLIENT_QUERY"; + case DNSTAP__MESSAGE__TYPE__CLIENT_RESPONSE: + return "CLIENT_RESPONSE"; + case DNSTAP__MESSAGE__TYPE__FORWARDER_QUERY: + return "FORWARDER_QUERY"; + case DNSTAP__MESSAGE__TYPE__FORWARDER_RESPONSE: + return "FORWARDER_RESPONSE"; + case DNSTAP__MESSAGE__TYPE__STUB_QUERY: + return "STUB_QUERY"; + case DNSTAP__MESSAGE__TYPE__STUB_RESPONSE: + return "STUB_RESPONSE"; + default: break; + } + return "unknown_message_type"; +} + +/** convert type address to a string ip4 or ip6, malloced or NULL on fail */ +static char* str_of_addr(ProtobufCBinaryData address) +{ + char buf[64]; + socklen_t len = sizeof(buf); + if(address.len == 4) { + if(inet_ntop(AF_INET, address.data, buf, len)!=0) + return strdup(buf); + } else if(address.len == 16) { + if(inet_ntop(AF_INET6, address.data, buf, len)!=0) + return strdup(buf); + } + return NULL; +} + +/** convert message buffer (of dns bytes) to the first qname, type, class, + * malloced or NULL on fail */ +static char* q_of_msg(ProtobufCBinaryData message) +{ + char buf[300]; + /* header, name, type, class minimum to get the query tuple */ + if(message.len < 12 + 1 + 4 + 4) return NULL; + if(sldns_wire2str_rrquestion_buf(message.data+12, message.len-12, + buf, sizeof(buf)) != 0) { + /* remove trailing newline, tabs to spaces */ + if(buf[0] != 0) buf[strlen(buf)-1]=0; + if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' '; + if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' '; + return strdup(buf); + } + return NULL; +} + +/** log data frame contents */ +static void log_data_frame(uint8_t* pkt, size_t len) +{ + Dnstap__Dnstap* d = dnstap__dnstap__unpack(NULL, len, pkt); + const char* mtype = NULL; + char* maddr=NULL, *qinf=NULL; + if(!d) { + log_err("could not unpack"); + return; + } + if(d->base.descriptor != &dnstap__dnstap__descriptor) { + log_err("wrong base descriptor"); + dnstap__dnstap__free_unpacked(d, NULL); + return; + } + if(d->type != DNSTAP__DNSTAP__TYPE__MESSAGE) { + log_err("dnstap type not type_message"); + dnstap__dnstap__free_unpacked(d, NULL); + return; + } + if(d->message) { + mtype = mtype_to_str(d->message->type); + if(d->message->has_query_address) + maddr = str_of_addr(d->message->query_address); + else if(d->message->has_response_address) + maddr = str_of_addr(d->message->response_address); + if(d->message->has_query_message) + qinf = q_of_msg(d->message->query_message); + else if(d->message->has_response_message) + qinf = q_of_msg(d->message->response_message); + + } else { + mtype = "nomessage"; + } + + printf("%s%s%s%s%s\n", mtype, (maddr?" ":""), (maddr?maddr:""), + (qinf?" ":""), (qinf?qinf:"")); + free(maddr); + free(qinf); + + if(longformat) { + if(d->has_identity) { + } + if(d->has_version) { + } + } + dnstap__dnstap__free_unpacked(d, NULL); +} + /** receive bytes from fd, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ static ssize_t receive_bytes(int fd, void* buf, size_t len) @@ -131,16 +305,95 @@ void tap_data_free(struct tap_data* data) free(data); } +/** reply with ACCEPT control frame to bidirectional client, + * returns 0 on error */ +static int reply_with_accept(int fd) +{ + /* control frame on reply: + * 4 bytes 0 escape + * 4 bytes bigendian length of frame + * 4 bytes bigendian type ACCEPT + * 4 bytes bigendian frame option content type + * 4 bytes bigendian length of string + * string of content type. + */ + uint32_t* acceptframe; + /* len includes the escape and framelength */ + size_t len = 4+4+4+4+4+strlen(DNSTAP_CONTENT_TYPE); + acceptframe = calloc(1, len); + if(!acceptframe) { + log_err("out of memory"); + return 0; + } + acceptframe[0] = 0; + acceptframe[1] = htonl(4+4+4+strlen(DNSTAP_CONTENT_TYPE)); + acceptframe[2] = htonl(FSTRM_CONTROL_FRAME_ACCEPT); + acceptframe[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); + acceptframe[4] = htonl(strlen(DNSTAP_CONTENT_TYPE)); + memmove(&acceptframe[5], DNSTAP_CONTENT_TYPE, + strlen(DNSTAP_CONTENT_TYPE)); + + fd_set_block(fd); + if(send(fd, acceptframe, len, 0) == -1) { +#ifndef USE_WINSOCK + log_err("send failed: %s", strerror(errno)); +#else + log_err("send failed: %s", wsa_strerror(WSAGetLastError())); +#endif + fd_set_nonblock(fd); + free(acceptframe); + return 0; + } + if(verbosity) log_info("sent control frame(accept) content-type:(%s)", + DNSTAP_CONTENT_TYPE); + + fd_set_nonblock(fd); + free(acceptframe); + return 1; +} + +/** reply with FINISH control frame to bidirectional client, + * returns 0 on error */ +static int reply_with_finish(int fd) +{ + /* control frame on reply: + * 4 bytes 0 escape + * 4 bytes bigendian length of frame + * 4 bytes bigendian type FINISH + */ + uint32_t finishframe[3]; + /* len includes the escape and framelength */ + size_t len = 4+4+4; + finishframe[0] = 0; + finishframe[1] = htonl(4); + finishframe[2] = htonl(FSTRM_CONTROL_FRAME_FINISH); + + fd_set_block(fd); + if(send(fd, finishframe, len, 0) == -1) { +#ifndef USE_WINSOCK + log_err("send failed: %s", strerror(errno)); +#else + log_err("send failed: %s", wsa_strerror(WSAGetLastError())); +#endif + fd_set_nonblock(fd); + return 0; + } + if(verbosity) log_info("sent control frame(finish)"); + + fd_set_nonblock(fd); + return 1; +} + /** callback for dnstap listener */ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_data* data = (struct tap_data*)arg; - if(verbosity) log_info("tap callback"); + if(verbosity>=3) log_info("tap callback"); while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; ssize_t ret = receive_bytes(fd, ((uint8_t*)&l)+data->len_done, 4-data->len_done); - log_info("s recv %d got %d %d", (int)ret, (int)l, (int)ntohl(l)); + if(verbosity>=4) log_info("s recv %d", (int)ret); if(ret == 0) { /* closed or error */ tap_data_free(data); @@ -154,7 +407,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) if(data->len_done < 4) return; /* continue later */ data->len = (size_t)(ntohl(l)); - if(verbosity) log_info("length is %d", (int)data->len); + if(verbosity>=3) log_info("length is %d", (int)data->len); if(data->len == 0) { /* it is a control frame */ data->control_frame = 1; @@ -170,10 +423,12 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) } } } + /* we want to read the full length now */ if(data->data_done < data->len) { ssize_t r = receive_bytes(fd, data->frame + data->data_done, data->len - data->data_done); + if(verbosity>=4) log_info("f recv %d", (int)r); if(r == 0) { /* closed or error */ tap_data_free(data); @@ -186,13 +441,27 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) if(data->data_done < data->len) return; /* continue later */ } + /* we are done with a frame */ - if(verbosity) log_info("received %sframe len %d", + if(verbosity>=3) log_info("received %sframe len %d", (data->control_frame?"control ":""), (int)data->len); - if(data->len >= 4 && ntohl(*(uint32_t*)data->frame) == + if(data->control_frame) + log_control_frame(data->frame, data->len); + else log_data_frame(data->frame, data->len); + + if(data->len >= 4 && sldns_read_uint32(data->frame) == FSTRM_CONTROL_FRAME_READY) { data->is_bidirectional = 1; if(verbosity) log_info("bidirectional stream"); + if(!reply_with_accept(fd)) { + tap_data_free(data); + } + } else if(data->len >= 4 && sldns_read_uint32(data->frame) == + FSTRM_CONTROL_FRAME_STOP && data->is_bidirectional) { + if(!reply_with_finish(fd)) { + tap_data_free(data); + return; + } } /* prepare for next frame */ @@ -202,6 +471,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) data->len = 0; data->len_done = 0; data->data_done = 0; + } /** callback for main listening file descriptor */ @@ -279,7 +549,7 @@ setup_fd(char* socketpath) /** setup and run the server to listen to DNSTAP messages */ static void -setup_and_run(char* socketpath, int longformat) +setup_and_run(char* socketpath) { int fd; time_t secs = 0; @@ -316,7 +586,7 @@ extern char* optarg; int main(int argc, char** argv) { int c; - int usessl = 0, longformat = 0; + int usessl = 0; char* socketpath = NULL; #ifdef USE_WINSOCK WSADATA wsa_data; @@ -378,7 +648,7 @@ int main(int argc, char** argv) (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif } - setup_and_run(socketpath, longformat); + setup_and_run(socketpath); checklock_stop(); #ifdef USE_WINSOCK WSACleanup(); From 7bddf97450fe4695fb310e7ff1ff53ba624f83da Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 09:56:28 +0100 Subject: [PATCH 013/235] dnstap test program prints identity and version. --- dnstap/unbound-dnstap-socket.c | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 4b8ef1dad..3b01506c3 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -45,6 +45,7 @@ #include #include #include +#include #ifdef HAVE_SYS_UN_H #include #endif @@ -214,6 +215,37 @@ static char* q_of_msg(ProtobufCBinaryData message) return NULL; } +/** convert possible string or hex data to string. malloced or NULL */ +static char* possible_str(ProtobufCBinaryData str) +{ + int is_str = 1; + size_t i; + for(i=0; i>4]; + res[i*2+1] = hex[str.data[i]&0x0f]; + } + res[str.len*2] = 0; + return res; + } + } + return NULL; +} + /** log data frame contents */ static void log_data_frame(uint8_t* pkt, size_t len) { @@ -255,10 +287,18 @@ static void log_data_frame(uint8_t* pkt, size_t len) free(qinf); if(longformat) { + char* id=NULL, *vs=NULL; if(d->has_identity) { + id=possible_str(d->identity); } if(d->has_version) { + vs=possible_str(d->version); } + if(id || vs) + printf("identity: %s%s%s\n", (id?id:""), + (id&&vs?" ":""), (vs?vs:"")); + free(id); + free(vs); } dnstap__dnstap__free_unpacked(d, NULL); } From ade0ba63ff9dcc8296928828f4be4e9bee570c4c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 10:14:30 +0100 Subject: [PATCH 014/235] dnstap test program prints messages and timestamps in long format. --- dnstap/unbound-dnstap-socket.c | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 3b01506c3..4d58d4db9 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -246,6 +246,23 @@ static char* possible_str(ProtobufCBinaryData str) return NULL; } +/** convert timeval to string, malloced or NULL */ +static char* tv_to_str(protobuf_c_boolean has_time_sec, uint64_t time_sec, + protobuf_c_boolean has_time_nsec, uint32_t time_nsec) +{ + char buf[64], buf2[256]; + struct timeval tv; + memset(&tv, 0, sizeof(tv)); + if(has_time_sec) tv.tv_sec = time_sec; + if(has_time_nsec) tv.tv_usec = time_nsec; + + buf[0]=0; + (void)ctime_r(&tv.tv_sec, buf); + snprintf(buf2, sizeof(buf2), "%u.%9.9u %s", + (unsigned)time_sec, (unsigned)time_nsec, buf); + return strdup(buf2); +} + /** log data frame contents */ static void log_data_frame(uint8_t* pkt, size_t len) { @@ -299,6 +316,47 @@ static void log_data_frame(uint8_t* pkt, size_t len) (id&&vs?" ":""), (vs?vs:"")); free(id); free(vs); + + if(d->message && d->message->has_query_message && + d->message->query_message.data) { + char* qmsg = sldns_wire2str_pkt( + d->message->query_message.data, + d->message->query_message.len); + if(qmsg) { + printf("query_message:\n%s", qmsg); + free(qmsg); + } + } + if(d->message && d->message->has_query_time_sec) { + char* qtv = tv_to_str(d->message->has_query_time_sec, + d->message->query_time_sec, + d->message->has_query_time_nsec, + d->message->query_time_nsec); + if(qtv) { + printf("query_time: %s\n", qtv); + free(qtv); + } + } + if(d->message && d->message->has_response_message && + d->message->response_message.data) { + char* rmsg = sldns_wire2str_pkt( + d->message->response_message.data, + d->message->response_message.len); + if(rmsg) { + printf("response_message:\n%s", rmsg); + free(rmsg); + } + } + if(d->message && d->message->has_response_time_sec) { + char* rtv = tv_to_str(d->message->has_response_time_sec, + d->message->response_time_sec, + d->message->has_response_time_nsec, + d->message->response_time_nsec); + if(rtv) { + printf("response_time: %s\n", rtv); + free(rtv); + } + } } dnstap__dnstap__free_unpacked(d, NULL); } From bb55cc16859013988e9fccb64dc6430fc1d2c065 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 14:02:45 +0100 Subject: [PATCH 015/235] dnstap unit test. --- dnstap/unbound-dnstap-socket.c | 1 + testdata/dnstap.tdir/dnstap.conf | 38 ++++++++++++++++ testdata/dnstap.tdir/dnstap.dsc | 16 +++++++ testdata/dnstap.tdir/dnstap.post | 15 +++++++ testdata/dnstap.tdir/dnstap.pre | 55 ++++++++++++++++++++++++ testdata/dnstap.tdir/dnstap.test | 53 +++++++++++++++++++++++ testdata/dnstap.tdir/dnstap.testns | 22 ++++++++++ testdata/dnstap.tdir/unbound_control.key | 15 +++++++ testdata/dnstap.tdir/unbound_control.pem | 11 +++++ testdata/dnstap.tdir/unbound_server.key | 15 +++++++ testdata/dnstap.tdir/unbound_server.pem | 11 +++++ 11 files changed, 252 insertions(+) create mode 100644 testdata/dnstap.tdir/dnstap.conf create mode 100644 testdata/dnstap.tdir/dnstap.dsc create mode 100644 testdata/dnstap.tdir/dnstap.post create mode 100644 testdata/dnstap.tdir/dnstap.pre create mode 100644 testdata/dnstap.tdir/dnstap.test create mode 100644 testdata/dnstap.tdir/dnstap.testns create mode 100644 testdata/dnstap.tdir/unbound_control.key create mode 100644 testdata/dnstap.tdir/unbound_control.pem create mode 100644 testdata/dnstap.tdir/unbound_server.key create mode 100644 testdata/dnstap.tdir/unbound_server.pem diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 4d58d4db9..96e798282 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -358,6 +358,7 @@ static void log_data_frame(uint8_t* pkt, size_t len) } } } + fflush(stdout); dnstap__dnstap__free_unpacked(d, NULL); } diff --git a/testdata/dnstap.tdir/dnstap.conf b/testdata/dnstap.tdir/dnstap.conf new file mode 100644 index 000000000..82250ec2d --- /dev/null +++ b/testdata/dnstap.tdir/dnstap.conf @@ -0,0 +1,38 @@ +server: + verbosity: 2 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap.tdir/dnstap.dsc b/testdata/dnstap.tdir/dnstap.dsc new file mode 100644 index 000000000..92a67ef2e --- /dev/null +++ b/testdata/dnstap.tdir/dnstap.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap +Version: 1.0 +Description: test dnstap socket communication +CreationDate: Tue Jan 21 13:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap.pre +Post: dnstap.post +Test: dnstap.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap.tdir/dnstap.post b/testdata/dnstap.tdir/dnstap.post new file mode 100644 index 000000000..ec79e0427 --- /dev/null +++ b/testdata/dnstap.tdir/dnstap.post @@ -0,0 +1,15 @@ +# #-- dnstap.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +exit 0 diff --git a/testdata/dnstap.tdir/dnstap.pre b/testdata/dnstap.tdir/dnstap.pre new file mode 100644 index 000000000..95216949c --- /dev/null +++ b/testdata/dnstap.tdir/dnstap.pre @@ -0,0 +1,55 @@ +# #-- dnstap.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up and make the dnstap.socket file +wait_server_up "tap.errlog" "creating unix socket" +if test ! -S dnstap.socket; then + echo "the dnstap.socket file does not exist!" +fi + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap.tdir/dnstap.test b/testdata/dnstap.tdir/dnstap.test new file mode 100644 index 000000000..49f1d42a6 --- /dev/null +++ b/testdata/dnstap.tdir/dnstap.test @@ -0,0 +1,53 @@ +# #-- dnstap.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + + +echo "> cat logfiles" +cat tap.log +cat tap.errlog +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/dnstap.tdir/dnstap.testns b/testdata/dnstap.tdir/dnstap.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap.tdir/dnstap.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap.tdir/unbound_control.key b/testdata/dnstap.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap.tdir/unbound_control.pem b/testdata/dnstap.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap.tdir/unbound_server.key b/testdata/dnstap.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap.tdir/unbound_server.pem b/testdata/dnstap.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From 57ad1696051874348cbd85bbd8b8a768c0abadb8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 14:50:37 +0100 Subject: [PATCH 016/235] the framestream queue. --- daemon/worker.c | 3 ++ dnstap/dnstap.c | 20 +++++++---- dnstap/dnstap.h | 9 +++++ dnstap/dtstream.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++ dnstap/dtstream.h | 26 ++++++++++++++ 5 files changed, 142 insertions(+), 7 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index aa16650ec..382bbd384 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1924,6 +1924,9 @@ worker_delete(struct worker* worker) #endif /* UB_ON_WINDOWS */ } comm_base_delete(worker->base); +#ifdef USE_DNSTAP + dt_deinit(&worker->dtenv); +#endif ub_randfree(worker->rndstate); alloc_clear(&worker->alloc); regional_destroy(worker->env.scratch); diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index aabf8eec9..fccf4a721 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -53,6 +53,7 @@ #include #include "dnstap/dnstap.h" +#include "dnstap/dtstream.h" #include "dnstap/dnstap.pb-c.h" #define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" @@ -90,13 +91,7 @@ dt_pack(const Dnstap__Dnstap *d, void **buf, size_t *sz) static void dt_send(const struct dt_env *env, void *buf, size_t len_buf) { - fstrm_res res; - if (!buf) - return; - res = fstrm_iothr_submit(env->iothr, env->ioq, buf, len_buf, - fstrm_free_wrapper, NULL); - if (res != fstrm_res_success) - free(buf); + dt_msg_queue_submit(env->msgqueue, buf, len_buf); } static void @@ -275,9 +270,20 @@ dt_init(struct dt_env *env) env->ioq = fstrm_iothr_get_input_queue(env->iothr); if (env->ioq == NULL) return 0; + env->msgqueue = dt_msg_queue_create(); + if(!env->msgqueue) { + log_err("malloc failure"); + return 0; + } return 1; } +void +dt_deinit(struct dt_env* env) +{ + dt_msg_queue_delete(env->msgqueue); +} + void dt_delete(struct dt_env *env) { diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h index 0103c1c0e..6183300b6 100644 --- a/dnstap/dnstap.h +++ b/dnstap/dnstap.h @@ -43,6 +43,7 @@ struct config_file; struct fstrm_io; struct fstrm_queue; struct sldns_buffer; +struct dt_msg_queue; struct dt_env { /** dnstap I/O thread */ @@ -50,6 +51,9 @@ struct dt_env { /** dnstap I/O thread input queue */ struct fstrm_iothr_queue *ioq; + /** valid in worker struct, not in daemon struct, the per-worker + * message list */ + struct dt_msg_queue* msgqueue; /** dnstap "identity" field, NULL if disabled */ char *identity; @@ -107,6 +111,11 @@ dt_apply_cfg(struct dt_env *env, struct config_file *cfg); int dt_init(struct dt_env *env); +/** + * Deletes the per-worker state created by dt_init + */ +void dt_deinit(struct dt_env *env); + /** * Delete dnstap environment object. Closes dnstap I/O socket and deletes all * per-worker I/O queues. diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index cad4d1f48..6d28f4c67 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -44,3 +44,94 @@ #include "config.h" #include "dnstap/dtstream.h" +struct dt_msg_queue* +dt_msg_queue_create(void) +{ + struct dt_msg_queue* mq = calloc(1, sizeof(*mq)); + if(!mq) return NULL; + mq->maxsize = 1*1024*1024; /* set max size of buffer, per worker, + about 1 M should contain 64K messages with some overhead, + or a whole bunch smaller ones */ + lock_basic_init(&mq->lock); + lock_protect(&mq->lock, mq, sizeof(*mq)); + return mq; +} + +/** clear the message list, caller must hold the lock */ +static void +dt_msg_queue_clear(struct dt_msg_queue* mq) +{ + struct dt_msg_entry* e = mq->first, *next=NULL; + while(e) { + next = e->next; + free(e->buf); + free(e); + e = next; + } + mq->first = NULL; + mq->last = NULL; + mq->cursize = 0; +} + +void +dt_msg_queue_delete(struct dt_msg_queue* mq) +{ + if(!mq) return; + lock_basic_destroy(&mq->lock); + dt_msg_queue_clear(mq); + free(mq); +} + +void +dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) +{ + struct dt_msg_entry* entry; + + /* check conditions */ + if(!buf) return; + if(len == 0) { + /* it is not possible to log entries with zero length, + * because the framestream protocol does not carry it. + * However the protobuf serialization does not create zero + * length datagrams for dnstap, so this should not happen. */ + free(buf); + return; + } + if(!mq) { + free(buf); + return; + } + + /* allocate memory for queue entry */ + entry = malloc(sizeof(*entry)); + if(!entry) { + log_err("out of memory logging dnstap"); + free(buf); + return; + } + entry->next = NULL; + entry->buf = buf; + entry->len = len; + + /* aqcuire lock */ + lock_basic_lock(&mq->lock); + /* see if it is going to fit */ + if(mq->cursize + len > mq->maxsize) { + /* buffer full, or congested. */ + /* drop */ + lock_basic_unlock(&mq->lock); + free(buf); + return; + } + mq->cursize += len; + /* append to list */ + if(mq->last) { + mq->last->next = entry; + } else { + mq->first = entry; + } + mq->last = entry; + /* release lock */ + lock_basic_unlock(&mq->lock); +} + diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index e76264f50..6030b86d6 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -209,5 +209,31 @@ struct dt_io_list_item { /* routine to send a frame. */ /* routine to send STOP message. */ +/** + * Create new (empty) worker message queue. Limit set to default on max. + * @return NULL on malloc failure or a new queue (not locked). + */ +struct dt_msg_queue* dt_msg_queue_create(void); + +/** + * Delete a worker message queue. It has to be unlinked from access, + * so it can be deleted without lock worries. The queue is emptied (deleted). + * @param mq: message queue. + */ +void dt_msg_queue_delete(struct dt_msg_queue* mq); + +/** + * Submit a message to the queue. The queue is locked by the routine, + * the message is inserted, and then the queue is unlocked so the + * message can be picked up by the writer thread. + * @param mq: message queue. + * @param buf: buffer with message (dnstap contents). + * The buffer must have been malloced by caller. It is linked in + * the queue, and is free()d after use. If the routine fails + * the buffer is freed as well (and nothing happens, the item + * could not be logged). + * @param len: length of buffer. + */ +void dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len); #endif /* DTSTREAM_H */ From efc79beb2d8bae70c62fa4ca703587bd810590ff Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 17:01:25 +0100 Subject: [PATCH 017/235] iothread work. --- daemon/daemon.c | 3 +- daemon/worker.c | 23 +++- dnstap/.dtstream.h.swp | Bin 0 -> 28672 bytes dnstap/dnstap.c | 18 ++- dnstap/dnstap.h | 5 +- dnstap/dtstream.c | 288 +++++++++++++++++++++++++++++++++++++++++ dnstap/dtstream.h | 66 ++++++++++ 7 files changed, 398 insertions(+), 5 deletions(-) create mode 100644 dnstap/.dtstream.h.swp diff --git a/daemon/daemon.c b/daemon/daemon.c index 0b1200a2e..65d51e182 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -452,10 +452,9 @@ daemon_create_workers(struct daemon* daemon) if(daemon->cfg->dnstap) { #ifdef USE_DNSTAP daemon->dtenv = dt_create(daemon->cfg->dnstap_socket_path, - (unsigned int)daemon->num); + (unsigned int)daemon->num, daemon->cfg); if (!daemon->dtenv) fatal_exit("dt_create failed"); - dt_apply_cfg(daemon->dtenv, daemon->cfg); #else fatal_exit("dnstap enabled in config but not built with dnstap support"); #endif diff --git a/daemon/worker.c b/daemon/worker.c index 382bbd384..d14409570 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -78,6 +78,7 @@ #include "sldns/wire2str.h" #include "util/shm_side/shm_main.h" #include "dnscrypt/dnscrypt.h" +#include "dnstap/dtstream.h" #ifdef HAVE_SYS_TYPES_H # include @@ -1876,6 +1877,19 @@ worker_init(struct worker* worker, struct config_file *cfg, ) { auth_xfer_pickup_initial(worker->env.auth_zones, &worker->env); } +#ifdef USE_DNSTAP + if(worker->daemon->cfg->dnstap +#ifndef THREADS_DISABLED + && worker->thread_num == 0 +#endif + ) { + if(!dt_io_thread_start(dtenv->dtio)) { + log_err("could not start dnstap io thread"); + worker_delete(worker); + return 0; + } + } +#endif /* USE_DNSTAP */ if(!worker->env.mesh || !worker->env.scratch_buffer) { worker_delete(worker); return 0; @@ -1925,8 +1939,15 @@ worker_delete(struct worker* worker) } comm_base_delete(worker->base); #ifdef USE_DNSTAP - dt_deinit(&worker->dtenv); + if(worker->daemon->cfg->dnstap +#ifndef THREADS_DISABLED + && worker->thread_num == 0 #endif + ) { + dt_io_thread_stop(worker->dtenv.dtio); + } + dt_deinit(&worker->dtenv); +#endif /* USE_DNSTAP */ ub_randfree(worker->rndstate); alloc_clear(&worker->alloc); regional_destroy(worker->env.scratch); diff --git a/dnstap/.dtstream.h.swp b/dnstap/.dtstream.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..22f3859addf6106a6718d567664f7a22a1b7e0ba GIT binary patch literal 28672 zcmeI5du(LaUB@SnHeH&8s#QhPKj383fbGuOn@vKiU7(q@$Lndmwlg!{2WdLFGjqqj z*_nGMbMLIzDSaeG4KzxVKnZD+mPj;}+KT*99u>4oLR$z>Qc*xWk|Nqvk*E+6grM=Izt_a{Rn5m;3!6|Ec$U z`;zN&mD_T;ji{gaJ$Z5FAFoZaW)x0`?a)u!UOncw9kRUN7C0048Z-T{9`(a!t>eXH zo@s`0;&o@5Nu2b2uQR>AL-y=Z#z4lvxiZjCT6^ApN$%=>SM8M|uGoFKdBf{h&$YBH zU&cVjK*m7EK*m7EK*m7EK*m7E!2d%AlJ2W=AHeSOo$YDheV+TA{`+e8dDm&uUFe>_ z%KaO-f7ATw^BdgraLfA(+~=FzzfWv=?>=V#WDH~sWDH~sWDH~sWDH~sWDH~sWDH~s zWDH~soC5=1Gne}b@;xnqI_Ljs{Qu&Q=5oIWejB_OoB~Hd1zZB2xHOmh68IwMfNQ{B z@ZC#tx%#fzp1vrTyBmBM+z#4c0z8Ab@hR|& z-~(VCybb&$cn0C(L2xIS2X6%zfeXO};AMo5KLn3}&w-DDTfuw4o57{vdBlxp!871H z;2*%J!9(C9paE9EkAW8uV!jE!3_b#G1642&-U==Q(pQf=VP%(@G80{|mjqsW(scYd z_SSr}(F>B?u9>MRldSuu-fy-19>02tY4m$NKTO)2X3bBMAY9Y5i67=o)H6$~i;E^` znJ~)j3c|$rCrMlLnoYlXU|60$H9>6jg_)Yk?K&9+%_*DQCA5jS&e3lq{hn`Y7i*Gr zZg@0JKlWqID)qF|;#)!6H%&io^nz}JL2C0zE@>F~l1Q`m>or?iE!pf+a*!6|>Ij;& zszo8b38J)OG1r=9nn^8)YV9EA-^A}skxDUXAdH~^yv3*z8bzm}M`A3Ae{5(YkU51Z2?*5fcE>74s)1d^D1O)v4% zTzTV##t$129%AN}D%HZuzzN5R?!;>~oT;}tWkUZ{;>wp_O%Q6iLbqBmWMYuX44KeA z=y>gR)bN|rLQX+Upyae5x>YhNE7PVCg^3r0v57)|i;1HQsiTTV4Csq^zGc{p zhf^=xJO{;4JBSlqP=Cm?K32W z&sh3|0UnVcH6Yfay>`rWC@hN2)isEnYw|_|}jOsY6_b5k2Z}I=<4<)0IT00()gIeHGhTl6k!=CF>yV`n^3HQSXG` za|6u{Y(``&SgXlge_(`^(W!X!`CvdE$XyYHjds83o8A2+XwL}E@$~v`t}`|LRv_cM zTB(+cg~PQ4(zZgLjy|F>GtwYw^{TyqxMfBV?^=@yx#cy2c93kQ6HL(Qw*3x%<^TN0r^%B$VMM>0%+A`l$t5p1MX|tV{tts-bvOHfsS|}Iu zrg)^dWJ>dDbAVYc~e~|nw8~BrF5{gSgIbEN0rst1v6JTTsTxz>z0a#7E6bU zOS46@TsF((C?6&Jq$!k3mD187Q(7{GrQ_ykf$Xc*wA9rK>7{~FMXXpX6>JrGb9A97 zg-E{H<)v!5Fk8(VcrDFVN0U)mb-7$M6Q!lu#nm}#l5$qc%k!mb<$&07aFzOtl?o+Q zi{Q8kr? z0^2k3h}q?pnmwN@z_dPdXENeFH;)kx_!Wt6e9jKaA}H@E<8fB=gh(5G5s$p8`1aZtTRQG41WG|_EF{Zt!$8=6&245#ieEGM@4wS*^ z_kxoobDJh+yEtkk8?q?NbjHFiRWAAbuJgZdLK)j`pf4>h6>)>Y!3uk0Ssv_bHWe)v z57r5G0==N#XU`h5AaABkU^bp1y9JUKGLS9Pa8t$RM+-=sW!Dk61Eu(8 zAQKOJZrLwTeJf%Iv>{WKtPE{0=wPcd4FOK@XhSbHp?ktfF+u4{Q zz1Q)R{bEulYKpVy{LCW88+8<1ra9z$5Kj#08*;myDPKg zBPppW8-an3@q5(8d2J~|g`}As@H^3%H2e1M+nYB_i(H~Ni*k$J6xhNk{}Oe?eh&vu zvu?XFZ}yn+CEE zPk~3ko!}0z0*#QvfQ+zq}+|RJZgNTfUt$eG9fx{$Dr$G}N03E5D>& zF*(|vZH<+fJ*|2)p*Yq~KEz7d>xUsb8%-_SF}5SR(5twaZh<1)ftR5wa5lnj>UvG| zi)gbUuVg1<9a&b}vJ>tM(m}lDXvI27H6&J}*NuRcmz`yoU6$Qj#y*K!Hg-!{9|>g5 zRHL=Fqu+SlZhN!F+p~8V67QESB~daO6pE)o}o`Pq$WqCNEUw6 z4#HjH%TBOmAhmiv-irdX;p5K}vUerZx;<4W& zjIf;W(oQVOlgMWMP=qMTR1MLWW>nMzWTJ5=GH&!aORSASR@Jo0F$$$6~;+MqOo35g{nFynY+OSQU6T7qHh#M+HelhebGB9-N8j@x~5m zJVq*N!|7ggtb)$wT*(ETZU7iL`O7mF30Se5trNSF0XhDe5ESC;edd zp4xkrcq){u-U&(K_M^q7;s;6OZ?a`mBfB}5jD?0xolf&jA4=`1lNQhu(KGNx4cBuy zw-k`^bVim7hl`lHRH`h9W!Gv&Vv81~D(gwF-Dfoy;-$9KjFA*BKW3(K@D?hx7Ubc% z<5I~r=TwQ!{t9(ypHs!v=TwE}e#IKZC8%QGIaVRrsYBxbcM#u4K;nNwSN-{CK7Sc} z2HXzh{SDv>a50ec|1W?C!7*?dxB#3F{*t)=QE(S{KR5_P3-}&!zvuy<2e*TpK>8V+G26(P<5epxNywuyY{EG9?tqk_9NqB)7ZRW$G)3csD^oF2FP^NXa_9YX2TQJ zR3s@kXzlzrl0wh0bn?^%YkJxquV^~mY`BurbmGqwcB|kejdhl&ag*e%+%|l2q?Vx_ zjuczOSXOuD)SOiHbF5lB8N6a1nKA1@Gw8A9M8x&lc3u>1Sx$?bnk`$2cEIVbh^r!L zik;ftlyyCswQJV++$cRWmh#%G_OX_o(!(-)K)81gw<&J0hk!)%xqY<1=Pk3)6~}*a?4a+7c~iX;Q8_Pu@A@pc*xj zPJyA3Cc573dYkQt%QF+o8UdEQ!!bE+MQBv&z>49vfNd7JD<6*Y)IRGuZhN8ikH4{6 zd8}{5COzjIbvL&q*{c>iH;a9CTOqo>4Fu_Qq@telB;z(gycS?AVdENQGN7QYn{Fm~+^}Ta#@K_)O~XQn_TMXK;28T}lR`=x&yQ zp#|3Uy|$WL_whJ8Xl(?Rc7WTM+oEh|492c)x6HHRdRmTD+Yf_1qm$5BFURSyA2mrm4(yR8)2 ztuG-SV$&F1%53arPGLaC^iHjRr4q(w0p-%Jh=X36AG>4VLN@Fi?MWu3andEXbVWKp z$nTA)BZq=kKWkxEXT~*Yx}o!09C6^Ov$)(6YWkeQF{mblDM^_6lazIRpD5a1HY1Rh zNzq;Y>dXB@uDHo^%NT8HY%x~Xy7AkQ%ndS7@i+TMoT+Wa_FaR~`q&+AC_KhPvsFSk}sRK%#|7|{;Yq1Kk(UDNVp8xnJaM?@i2-sB1)W3ZQQ-)ar?5O;q^ zFGjgdkvvwxGPc6*bl2}#0aJJyE8&E{c{T-*Y*>IO+6=^+txb)HUGK>3Jz|7C2xjQx zI5KpH)hF$^W*Ml-`M%yjLmksp;^?s)`fEGtd_5V`E3yS8=#*jC{pwh{bSrx2(l;dmMLrf+I>Er@GyWO)(y z*@@M35)xiy?2oimHf=*z?A~tZb;1)+5b1O6nn5R=Wp%SFZt)yeDI;ZjeZrZoP&RLfG@`}R1nEe*g<%zLD@kc{q@~Q1 z(U1Zsm8KMElQs}eYDrY{PX*~cSnc#wmnS-sX&QPYg|cZCW0}D*w5FGbM|#>`CMLa% zTNY-1lLB4xZosZzI1)NXp53tT#seDv$3*-;l(>`lKmGgsmx=Ko1s?_y`%i&4f|rT! z<=+1VN_;9~Ia#PweT z4}&|v&0r0*z;5te;(WOq@ay1R;2q#+z)QsWayK9X6W}G{`yYbe0UrbRf(4KR-z3ie z2DlGg53U5e!QT<*-vdqpx&QwI;{4A7A6yUQzW>*V^M4bhvHzR+JqKRA0G$Ec3yy&| zgV%uPiS7RaJPH03{0X=dc;E`4yi>&g!A~YJuz!^;oZGl%5(7&`CNZP|+gSXaNer39 zkVy<|DN=bblNg)|kx2}yrKPHLCNT`PkW6A2{lmpfVz3w1GKnFR7_34hlE(kM#DJi( zqspQJP&4YtpH^5Mh+8)r|9_O&{To2ye?n*dd74=N>)>H<4>$%6f&w@nNctxwPxg~B zkTH-kkTH-kkTH-kkTH-kkTH-kkTH-k@W0K#F8RJ7Ir-+^&l=aJrp*m|Z_9Z@-K!{mTwLq<3G{m6pZ@E_cxH?kwsBB!u`K YvbswG)((4bVdt-glRE<3mXrGa6Lv6hg8%>k literal 0 HcmV?d00001 diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index fccf4a721..e942c4194 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -130,7 +130,7 @@ check_socket_file(const char* socket_path) } struct dt_env * -dt_create(const char *socket_path, unsigned num_workers) +dt_create(const char *socket_path, unsigned num_workers, struct config_file* cfg) { #ifdef UNBOUND_DEBUG fstrm_res res; @@ -180,6 +180,16 @@ dt_create(const char *socket_path, unsigned num_workers) fstrm_unix_writer_options_destroy(&fuwopt); fstrm_writer_options_destroy(&fwopt); + env->dtio = dt_io_thread_create(); + if(!env->dtio) { + log_err("malloc failure"); + fstrm_writer_destroy(&fw); + fstrm_iothr_destroy(&env->iothr); + free(env); + return NULL; + } + dt_io_thread_apply_cfg(env->dtio, cfg); + dt_apply_cfg(env, cfg); return env; } @@ -275,12 +285,17 @@ dt_init(struct dt_env *env) log_err("malloc failure"); return 0; } + if(!dt_io_thread_register_queue(env->dtio, env->msgqueue)) { + log_err("malloc failure"); + return 0; + } return 1; } void dt_deinit(struct dt_env* env) { + dt_io_thread_unregister_queue(env->dtio, env->msgqueue); dt_msg_queue_delete(env->msgqueue); } @@ -291,6 +306,7 @@ dt_delete(struct dt_env *env) return; verbose(VERB_OPS, "closing dnstap socket"); fstrm_iothr_destroy(&env->iothr); + dt_io_thread_delete(env->dtio); free(env->identity); free(env->version); free(env); diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h index 6183300b6..428691ed9 100644 --- a/dnstap/dnstap.h +++ b/dnstap/dnstap.h @@ -48,6 +48,8 @@ struct dt_msg_queue; struct dt_env { /** dnstap I/O thread */ struct fstrm_iothr *iothr; + /** the io thread (made by the struct daemon) */ + struct dt_io_thread* dtio; /** dnstap I/O thread input queue */ struct fstrm_iothr_queue *ioq; @@ -90,10 +92,11 @@ struct dt_env { * share access to the dnstap I/O socket. * @param socket_path: path to dnstap logging socket, must be non-NULL. * @param num_workers: number of worker threads, must be > 0. + * @param cfg: with config settings. * @return dt_env object, NULL on failure. */ struct dt_env * -dt_create(const char *socket_path, unsigned num_workers); +dt_create(const char *socket_path, unsigned num_workers, struct config_file* cfg); /** * Apply config settings. diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 6d28f4c67..318e04bfc 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -43,6 +43,12 @@ #include "config.h" #include "dnstap/dtstream.h" +#include "util/config_file.h" +#include "util/ub_event.h" +#include "util/net_help.h" +#ifdef HAVE_SYS_UN_H +#include +#endif struct dt_msg_queue* dt_msg_queue_create(void) @@ -135,3 +141,285 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) lock_basic_unlock(&mq->lock); } +struct dt_io_thread* dt_io_thread_create(void) +{ + struct dt_io_thread* dtio = calloc(1, sizeof(*dtio)); + return dtio; +} + +void dt_io_thread_delete(struct dt_io_thread* dtio) +{ + struct dt_io_list_item* item, *nextitem; + if(!dtio) return; + item=dtio->io_list; + while(item) { + nextitem = item->next; + free(item); + item = nextitem; + } + free(dtio->socket_path); + free(dtio); +} + +void dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) +{ + dtio->upstream_is_unix = 1; + dtio->socket_path = strdup(cfg->dnstap_socket_path); +} + +int dt_io_thread_register_queue(struct dt_io_thread* dtio, + struct dt_msg_queue* mq) +{ + struct dt_io_list_item* item = malloc(sizeof(*item)); + if(!item) return 0; + item->queue = mq; + item->next = dtio->io_list; + dtio->io_list = item; + return 1; +} + +void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, + struct dt_msg_queue* mq) +{ + struct dt_io_list_item* item=dtio->io_list, *prev=NULL; + while(item) { + if(item->queue == mq) { + /* found it */ + if(prev) prev->next = item->next; + else dtio->io_list = item->next; + /* the queue itself only registered, not deleted */ + free(item); + return; + } + prev = item; + item = item->next; + } +} + +/** find a new message to write, search message queues, false if none */ +static int dtio_find_msg(struct dt_io_thread* dtio) +{ +} + +/** write more of the current messsage. false if incomplete, true if + * the message is done */ +static int dtio_write_more(struct dt_io_thread* dtio) +{ +} + +/** callback for the dnstap events, to write to the output */ +static void dtio_output_cb(int fd, short ATTR_UNUSED(bits), void* arg) +{ + struct dt_io_thread* dtio = (struct dt_io_thread*)arg; + + /* see if there are messages that need writing */ + if(!dtio->cur_msg) { + if(!dtio_find_msg(dtio)) + return; /* nothing to do */ + } + + /* write it */ + if(dtio->cur_msg_done < dtio->cur_msg_len) { + if(!dtio_write_more(dtio)) + return; + } + + /* done with the current message */ + free(dtio->cur_msg); + dtio->cur_msg = NULL; + dtio->cur_msg_len = 0; + dtio->cur_msg_done = 0; +} + +/** callback for the dnstap commandpipe, to stop the dnstap IO */ +static void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) +{ + struct dt_io_thread* dtio = (struct dt_io_thread*)arg; + uint8_t cmd; + ssize_t r; + if(dtio->want_to_exit) + return; + r = read(fd, &cmd, sizeof(cmd)); + if(r == -1) { + if(errno == EINTR || errno == EAGAIN) + return; /* ignore this */ + log_err("dnstap io: failed to read: %s", strerror(errno)); + /* and then fall through to quit the thread */ + } + if(r == 0) { + verbose(VERB_ALGO, "dnstap io: cmd channel closed"); + } else if(r == 1 && cmd == 0) { + verbose(VERB_ALGO, "dnstap io: cmd channel cmd quit"); + } + dtio->want_to_exit = 1; + if(ub_event_base_loopexit((struct ub_event_base*)dtio->event_base) + != 0) { + log_err("dnstap io: could not loopexit"); + } +} + +/** setup the event base for the dnstap io thread */ +static void dtio_setup_base(struct dt_io_thread* dtio, time_t* secs, + struct timeval* now) +{ + memset(now, 0, sizeof(*now)); + dtio->event_base = ub_default_event_base(0, secs, now); + if(!dtio->event_base) { + fatal_exit("dnstap io: could not create event_base"); + } +} + +/** setup the cmd event for dnstap io */ +static void dtio_setup_cmd(struct dt_io_thread* dtio) +{ + struct ub_event* cmdev; + fd_set_nonblock(dtio->commandpipe[0]); + cmdev = ub_event_new(dtio->event_base, dtio->commandpipe[0], + UB_EV_READ | UB_EV_PERSIST, &dtio_cmd_cb, dtio); + if(!cmdev) { + fatal_exit("dnstap io: out of memory"); + } + dtio->command_event = cmdev; + if(ub_event_add(cmdev, NULL) != 0) { + fatal_exit("dnstap io: out of memory (adding event)"); + } +} + +/** del the output file descriptor event for listening */ +static void dtio_del_output_event(struct dt_io_thread* dtio) +{ + if(!dtio->event_added) + return; + ub_event_del(dtio->event); + dtio->event_added = 0; +} + +/** close and stop the output file descriptor event */ +static void dtio_close_output(struct dt_io_thread* dtio) +{ + if(!dtio->event) + return; + ub_event_free(dtio->event); + dtio->event = NULL; + close(dtio->fd); + dtio->fd = -1; +} + +/** perform desetup and free stuff when the dnstap io thread exits */ +static void dtio_desetup(struct dt_io_thread* dtio) +{ + dtio_del_output_event(dtio); + dtio_close_output(dtio); + ub_event_del(dtio->command_event); + ub_event_free(dtio->command_event); + close(dtio->commandpipe[0]); + dtio->commandpipe[0] = -1; + ub_event_base_free(dtio->event_base); +} + +/** open the output file descriptor */ +static void dtio_open_output(struct dt_io_thread* dtio) +{ + struct ub_event* ev; + struct sockaddr_un s; + dtio->fd = socket(AF_LOCAL, SOCK_STREAM, SOCK_CLOEXEC); + if(dtio->fd == -1) { + log_err("dnstap io: failed to create socket: %s", + strerror(errno)); + return; + } + memset(&s, 0, sizeof(s)); +#ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN + /* this member exists on BSDs, not Linux */ + s.sun_len = (unsigned)sizeof(usock); +#endif + s.sun_family = AF_LOCAL; + /* length is 92-108, 104 on FreeBSD */ + (void)strlcpy(s.sun_path, dtio->socket_path, sizeof(s.sun_path)); + if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s)) + == -1) { + log_err("dnstap io: failed to connect: %s", strerror(errno)); + return; + } + fd_set_nonblock(dtio->fd); + + /* the EV_READ is to catch channel close, write to write packets */ + ev = ub_event_new(dtio->event_base, dtio->fd, + UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_output_cb, + dtio); + if(!ev) { + fatal_exit("dnstap io: out of memory"); + } + dtio->event = ev; + +} + +/** add the output file descriptor event for listening */ +static void dtio_add_output_event(struct dt_io_thread* dtio) +{ + if(ub_event_add(dtio->event, NULL) != 0) { + fatal_exit("dnstap io: out of memory (adding event)"); + } + dtio->event_added = 1; +} + +/** the IO thread function for the DNSTAP IO */ +static void* dnstap_io(void* arg) +{ + struct dt_io_thread* dtio = (struct dt_io_thread*)arg; + time_t secs = 0; + struct timeval now; + + /* setup */ + dtio_setup_base(dtio, &secs, &now); + dtio_setup_cmd(dtio); + dtio_open_output(dtio); + dtio_add_output_event(dtio); + verbose(VERB_ALGO, "start dnstap io thread"); + + /* run */ + if(ub_event_base_dispatch(dtio->event_base) < 0) { + log_err("dnstap io: dispatch failed, errno is %s", + strerror(errno)); + } + + /* cleanup */ + verbose(VERB_ALGO, "stop dnstap io thread"); + dtio_desetup(dtio); + return NULL; +} + +int dt_io_thread_start(struct dt_io_thread* dtio) +{ + /* set up the thread, can fail */ + if(pipe(dtio->commandpipe) == -1) { + log_err("failed to create pipe: %s", strerror(errno)); + return 0; + } + + /* start the thread */ + ub_thread_create(&dtio->tid, dnstap_io, dtio); + return 1; +} + +void dt_io_thread_stop(struct dt_io_thread* dtio) +{ + uint8_t cmd = 0; + if(!dtio) return; + if(!dtio->event_base) return; /* not started */ + + while(1) { + ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); + if(r == -1) { + if(errno == EINTR || errno == EAGAIN) + continue; + log_err("dnstap io stop: write: %s", strerror(errno)); + break; + } + break; + } + + close(dtio->commandpipe[1]); + dtio->commandpipe[1] = -1; + ub_thread_join(dtio->tid); +} diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 6030b86d6..5d4e57646 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -47,6 +47,7 @@ #include "util/locks.h" struct dt_msg_entry; struct dt_io_list_item; +struct config_file; /** * A message buffer with dnstap messages queued up. It is per-worker. @@ -92,16 +93,29 @@ struct dt_io_thread { void* event_base; /** list of queues that is registered to get written */ struct dt_io_list_item* io_list; + /** thread id, of the io thread */ + ub_thread_type tid; /** file descriptor that the thread writes to */ int fd; /** event structure that the thread uses */ void* event; + /** the event is added */ + int event_added; + /** the buffer that currently getting written, or NULL if no + * (partial) message written now */ + void* cur_msg; + /** length of the current message */ + size_t cur_msg_len; + /** number of bytes written for the current message */ + size_t cur_msg_done; /** command pipe that stops the pipe if closed. Used to quit * the program. [0] is read, [1] is written to. */ int commandpipe[2]; /** the event to listen to the commandpipe */ void* command_event; + /** the io thread wants to exit */ + int want_to_exit; /** If the log server is connected to over unix domain sockets, * eg. a file is named that is created to log onto. */ @@ -236,4 +250,56 @@ void dt_msg_queue_delete(struct dt_msg_queue* mq); */ void dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len); +/** + * Create IO thread. + * @return new io thread object. not yet started. or NULL malloc failure. + */ +struct dt_io_thread* dt_io_thread_create(void); + +/** + * Delete the IO thread structure. + * @param dtio: the io thread that is deleted. It must not be running. + */ +void dt_io_thread_delete(struct dt_io_thread* dtio); + +/** + * Apply config to the dtio thread + * @param dtio: io thread, not yet started. + * @param cfg: config file struct. + */ +void dt_io_thread_apply_cfg(struct dt_io_thread* dtio, + struct config_file *cfg); + +/** + * Register a msg queue to the io thread. It will be polled to see if + * there are messages and those then get removed and sent, when the thread + * is running. + * @param dtio: the io thread. + * @param mq: message queue to register. + * @return false on failure (malloc failure). + */ +int dt_io_thread_register_queue(struct dt_io_thread* dtio, + struct dt_msg_queue* mq); + +/** + * Unregister queue from io thread. + * @param dtio: the io thread. + * @param mq: message queue. + */ +void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, + struct dt_msg_queue* mq); + +/** + * Start the io thread + * @param dtio: the io thread. + * @return false on failure. + */ +int dt_io_thread_start(struct dt_io_thread* dtio); + +/** + * Stop the io thread + * @param dtio: the io thread. + */ +void dt_io_thread_stop(struct dt_io_thread* dtio); + #endif /* DTSTREAM_H */ From 351e0e69862e9f0fcbd44244dfdbfe8da4af12a3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 17:14:47 +0100 Subject: [PATCH 018/235] iothread find msg. --- dnstap/dtstream.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 318e04bfc..db3cac475 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -196,15 +196,59 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, } } +/** pick a message from the queue, lock and unlock, true if a message */ +static int pick_msg_from_queue(struct dt_msg_queue* mq, void** buf, + size_t* len) +{ + lock_basic_lock(&mq->lock); + if(mq->first) { + struct dt_msg_entry* entry = mq->first; + mq->first = entry->next; + if(!entry->next) mq->last = NULL; + mq->cursize -= entry->len; + lock_basic_unlock(&mq->lock); + + *buf = entry->buf; + *len = entry->len; + free(entry); + return 1; + } + lock_basic_unlock(&mq->lock); + return 0; +} + +/** find message in queue, false if no message, true if message to send */ +static int dtio_find_in_queue(struct dt_io_thread* dtio, + struct dt_msg_queue* mq) +{ + void* buf=NULL; + size_t len=0; + if(pick_msg_from_queue(mq, &buf, &len)) { + dtio->cur_msg = buf; + dtio->cur_msg_len = len; + dtio->cur_msg_done = 0; + return 1; + } + return 0; +} + /** find a new message to write, search message queues, false if none */ static int dtio_find_msg(struct dt_io_thread* dtio) { + struct dt_io_list_item* item = dtio->io_list; + while(item) { + if(dtio_find_in_queue(dtio, item->queue)) + return 1; + item = item->next; + } + return 0; } /** write more of the current messsage. false if incomplete, true if * the message is done */ -static int dtio_write_more(struct dt_io_thread* dtio) +static int dtio_write_more(int fd, struct dt_io_thread* dtio) { + return 0; } /** callback for the dnstap events, to write to the output */ @@ -220,7 +264,7 @@ static void dtio_output_cb(int fd, short ATTR_UNUSED(bits), void* arg) /* write it */ if(dtio->cur_msg_done < dtio->cur_msg_len) { - if(!dtio_write_more(dtio)) + if(!dtio_write_more(fd, dtio)) return; } From 3e7758ee5881aec9c3e9fd5ef00b061e30707d84 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Jan 2020 17:15:37 +0100 Subject: [PATCH 019/235] Remove editor file that was added by mistake. --- dnstap/.dtstream.h.swp | Bin 28672 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dnstap/.dtstream.h.swp diff --git a/dnstap/.dtstream.h.swp b/dnstap/.dtstream.h.swp deleted file mode 100644 index 22f3859addf6106a6718d567664f7a22a1b7e0ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 zcmeI5du(LaUB@SnHeH&8s#QhPKj383fbGuOn@vKiU7(q@$Lndmwlg!{2WdLFGjqqj z*_nGMbMLIzDSaeG4KzxVKnZD+mPj;}+KT*99u>4oLR$z>Qc*xWk|Nqvk*E+6grM=Izt_a{Rn5m;3!6|Ec$U z`;zN&mD_T;ji{gaJ$Z5FAFoZaW)x0`?a)u!UOncw9kRUN7C0048Z-T{9`(a!t>eXH zo@s`0;&o@5Nu2b2uQR>AL-y=Z#z4lvxiZjCT6^ApN$%=>SM8M|uGoFKdBf{h&$YBH zU&cVjK*m7EK*m7EK*m7EK*m7E!2d%AlJ2W=AHeSOo$YDheV+TA{`+e8dDm&uUFe>_ z%KaO-f7ATw^BdgraLfA(+~=FzzfWv=?>=V#WDH~sWDH~sWDH~sWDH~sWDH~sWDH~s zWDH~soC5=1Gne}b@;xnqI_Ljs{Qu&Q=5oIWejB_OoB~Hd1zZB2xHOmh68IwMfNQ{B z@ZC#tx%#fzp1vrTyBmBM+z#4c0z8Ab@hR|& z-~(VCybb&$cn0C(L2xIS2X6%zfeXO};AMo5KLn3}&w-DDTfuw4o57{vdBlxp!871H z;2*%J!9(C9paE9EkAW8uV!jE!3_b#G1642&-U==Q(pQf=VP%(@G80{|mjqsW(scYd z_SSr}(F>B?u9>MRldSuu-fy-19>02tY4m$NKTO)2X3bBMAY9Y5i67=o)H6$~i;E^` znJ~)j3c|$rCrMlLnoYlXU|60$H9>6jg_)Yk?K&9+%_*DQCA5jS&e3lq{hn`Y7i*Gr zZg@0JKlWqID)qF|;#)!6H%&io^nz}JL2C0zE@>F~l1Q`m>or?iE!pf+a*!6|>Ij;& zszo8b38J)OG1r=9nn^8)YV9EA-^A}skxDUXAdH~^yv3*z8bzm}M`A3Ae{5(YkU51Z2?*5fcE>74s)1d^D1O)v4% zTzTV##t$129%AN}D%HZuzzN5R?!;>~oT;}tWkUZ{;>wp_O%Q6iLbqBmWMYuX44KeA z=y>gR)bN|rLQX+Upyae5x>YhNE7PVCg^3r0v57)|i;1HQsiTTV4Csq^zGc{p zhf^=xJO{;4JBSlqP=Cm?K32W z&sh3|0UnVcH6Yfay>`rWC@hN2)isEnYw|_|}jOsY6_b5k2Z}I=<4<)0IT00()gIeHGhTl6k!=CF>yV`n^3HQSXG` za|6u{Y(``&SgXlge_(`^(W!X!`CvdE$XyYHjds83o8A2+XwL}E@$~v`t}`|LRv_cM zTB(+cg~PQ4(zZgLjy|F>GtwYw^{TyqxMfBV?^=@yx#cy2c93kQ6HL(Qw*3x%<^TN0r^%B$VMM>0%+A`l$t5p1MX|tV{tts-bvOHfsS|}Iu zrg)^dWJ>dDbAVYc~e~|nw8~BrF5{gSgIbEN0rst1v6JTTsTxz>z0a#7E6bU zOS46@TsF((C?6&Jq$!k3mD187Q(7{GrQ_ykf$Xc*wA9rK>7{~FMXXpX6>JrGb9A97 zg-E{H<)v!5Fk8(VcrDFVN0U)mb-7$M6Q!lu#nm}#l5$qc%k!mb<$&07aFzOtl?o+Q zi{Q8kr? z0^2k3h}q?pnmwN@z_dPdXENeFH;)kx_!Wt6e9jKaA}H@E<8fB=gh(5G5s$p8`1aZtTRQG41WG|_EF{Zt!$8=6&245#ieEGM@4wS*^ z_kxoobDJh+yEtkk8?q?NbjHFiRWAAbuJgZdLK)j`pf4>h6>)>Y!3uk0Ssv_bHWe)v z57r5G0==N#XU`h5AaABkU^bp1y9JUKGLS9Pa8t$RM+-=sW!Dk61Eu(8 zAQKOJZrLwTeJf%Iv>{WKtPE{0=wPcd4FOK@XhSbHp?ktfF+u4{Q zz1Q)R{bEulYKpVy{LCW88+8<1ra9z$5Kj#08*;myDPKg zBPppW8-an3@q5(8d2J~|g`}As@H^3%H2e1M+nYB_i(H~Ni*k$J6xhNk{}Oe?eh&vu zvu?XFZ}yn+CEE zPk~3ko!}0z0*#QvfQ+zq}+|RJZgNTfUt$eG9fx{$Dr$G}N03E5D>& zF*(|vZH<+fJ*|2)p*Yq~KEz7d>xUsb8%-_SF}5SR(5twaZh<1)ftR5wa5lnj>UvG| zi)gbUuVg1<9a&b}vJ>tM(m}lDXvI27H6&J}*NuRcmz`yoU6$Qj#y*K!Hg-!{9|>g5 zRHL=Fqu+SlZhN!F+p~8V67QESB~daO6pE)o}o`Pq$WqCNEUw6 z4#HjH%TBOmAhmiv-irdX;p5K}vUerZx;<4W& zjIf;W(oQVOlgMWMP=qMTR1MLWW>nMzWTJ5=GH&!aORSASR@Jo0F$$$6~;+MqOo35g{nFynY+OSQU6T7qHh#M+HelhebGB9-N8j@x~5m zJVq*N!|7ggtb)$wT*(ETZU7iL`O7mF30Se5trNSF0XhDe5ESC;edd zp4xkrcq){u-U&(K_M^q7;s;6OZ?a`mBfB}5jD?0xolf&jA4=`1lNQhu(KGNx4cBuy zw-k`^bVim7hl`lHRH`h9W!Gv&Vv81~D(gwF-Dfoy;-$9KjFA*BKW3(K@D?hx7Ubc% z<5I~r=TwQ!{t9(ypHs!v=TwE}e#IKZC8%QGIaVRrsYBxbcM#u4K;nNwSN-{CK7Sc} z2HXzh{SDv>a50ec|1W?C!7*?dxB#3F{*t)=QE(S{KR5_P3-}&!zvuy<2e*TpK>8V+G26(P<5epxNywuyY{EG9?tqk_9NqB)7ZRW$G)3csD^oF2FP^NXa_9YX2TQJ zR3s@kXzlzrl0wh0bn?^%YkJxquV^~mY`BurbmGqwcB|kejdhl&ag*e%+%|l2q?Vx_ zjuczOSXOuD)SOiHbF5lB8N6a1nKA1@Gw8A9M8x&lc3u>1Sx$?bnk`$2cEIVbh^r!L zik;ftlyyCswQJV++$cRWmh#%G_OX_o(!(-)K)81gw<&J0hk!)%xqY<1=Pk3)6~}*a?4a+7c~iX;Q8_Pu@A@pc*xj zPJyA3Cc573dYkQt%QF+o8UdEQ!!bE+MQBv&z>49vfNd7JD<6*Y)IRGuZhN8ikH4{6 zd8}{5COzjIbvL&q*{c>iH;a9CTOqo>4Fu_Qq@telB;z(gycS?AVdENQGN7QYn{Fm~+^}Ta#@K_)O~XQn_TMXK;28T}lR`=x&yQ zp#|3Uy|$WL_whJ8Xl(?Rc7WTM+oEh|492c)x6HHRdRmTD+Yf_1qm$5BFURSyA2mrm4(yR8)2 ztuG-SV$&F1%53arPGLaC^iHjRr4q(w0p-%Jh=X36AG>4VLN@Fi?MWu3andEXbVWKp z$nTA)BZq=kKWkxEXT~*Yx}o!09C6^Ov$)(6YWkeQF{mblDM^_6lazIRpD5a1HY1Rh zNzq;Y>dXB@uDHo^%NT8HY%x~Xy7AkQ%ndS7@i+TMoT+Wa_FaR~`q&+AC_KhPvsFSk}sRK%#|7|{;Yq1Kk(UDNVp8xnJaM?@i2-sB1)W3ZQQ-)ar?5O;q^ zFGjgdkvvwxGPc6*bl2}#0aJJyE8&E{c{T-*Y*>IO+6=^+txb)HUGK>3Jz|7C2xjQx zI5KpH)hF$^W*Ml-`M%yjLmksp;^?s)`fEGtd_5V`E3yS8=#*jC{pwh{bSrx2(l;dmMLrf+I>Er@GyWO)(y z*@@M35)xiy?2oimHf=*z?A~tZb;1)+5b1O6nn5R=Wp%SFZt)yeDI;ZjeZrZoP&RLfG@`}R1nEe*g<%zLD@kc{q@~Q1 z(U1Zsm8KMElQs}eYDrY{PX*~cSnc#wmnS-sX&QPYg|cZCW0}D*w5FGbM|#>`CMLa% zTNY-1lLB4xZosZzI1)NXp53tT#seDv$3*-;l(>`lKmGgsmx=Ko1s?_y`%i&4f|rT! z<=+1VN_;9~Ia#PweT z4}&|v&0r0*z;5te;(WOq@ay1R;2q#+z)QsWayK9X6W}G{`yYbe0UrbRf(4KR-z3ie z2DlGg53U5e!QT<*-vdqpx&QwI;{4A7A6yUQzW>*V^M4bhvHzR+JqKRA0G$Ec3yy&| zgV%uPiS7RaJPH03{0X=dc;E`4yi>&g!A~YJuz!^;oZGl%5(7&`CNZP|+gSXaNer39 zkVy<|DN=bblNg)|kx2}yrKPHLCNT`PkW6A2{lmpfVz3w1GKnFR7_34hlE(kM#DJi( zqspQJP&4YtpH^5Mh+8)r|9_O&{To2ye?n*dd74=N>)>H<4>$%6f&w@nNctxwPxg~B zkTH-kkTH-kkTH-kkTH-kkTH-kkTH-k@W0K#F8RJ7Ir-+^&l=aJrp*m|Z_9Z@-K!{mTwLq<3G{m6pZ@E_cxH?kwsBB!u`K YvbswG)((4bVdt-glRE<3mXrGa6Lv6hg8%>k From 9f2ac374f4bdf3c25199f32518b26e76cb498bf6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 22 Jan 2020 11:44:11 +0100 Subject: [PATCH 020/235] fstrm routines for start and stop, fstrm_create_control_frame_start and fstrm_create_control_frame_stop, suitable for reuse, together with fstrm protocol defines. --- dnstap/dnstap.c | 1 - dnstap/dtstream.c | 77 +++++++++++++++++++++++++++++++++++++++++++++-- dnstap/dtstream.h | 34 +++++++++++++++++++-- 3 files changed, 105 insertions(+), 7 deletions(-) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index e942c4194..d8bc155aa 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -56,7 +56,6 @@ #include "dnstap/dtstream.h" #include "dnstap/dnstap.pb-c.h" -#define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" #define DNSTAP_INITIAL_BUF_SIZE 256 struct dt_msg { diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index db3cac475..ae77851bb 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -50,6 +50,52 @@ #include #endif +void* fstrm_create_control_frame_start(char* contenttype, size_t* len) +{ + uint32_t* control; + size_t n; + /* start framestream message: + * 4byte 0: control indicator. + * 4byte bigendian: length of control frame + * 4byte bigendian: type START + * 4byte bigendian: frame option: content-type + * 4byte bigendian: length of string + * string of content type (dnstap) + */ + n = 4+4+4+4+4+strlen(contenttype); + control = malloc(n); + if(!control) + return NULL; + control[0] = 0; + control[1] = htonl(4+4+4+strlen(contenttype)); + control[2] = htonl(FSTRM_CONTROL_FRAME_START); + control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); + control[4] = htonl(strlen(contenttype)); + memmove(&control[5], contenttype, strlen(contenttype)); + *len = n; + return control; +} + +void* fstrm_create_control_frame_stop(size_t* len) +{ + uint32_t* control; + size_t n; + /* stop framestream message: + * 4byte 0: control indicator. + * 4byte bigendian: length of control frame + * 4byte bigendian: type STOP + */ + n = 4+4+4; + control = malloc(n); + if(!control) + return NULL; + control[0] = 0; + control[1] = htonl(4); + control[2] = htonl(FSTRM_CONTROL_FRAME_STOP); + *len = n; + return control; +} + struct dt_msg_queue* dt_msg_queue_create(void) { @@ -196,8 +242,9 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, } } -/** pick a message from the queue, lock and unlock, true if a message */ -static int pick_msg_from_queue(struct dt_msg_queue* mq, void** buf, +/** pick a message from the queue, the routine locks and unlocks, + * returns true if there is a message */ +static int dt_msg_queue_pop(struct dt_msg_queue* mq, void** buf, size_t* len) { lock_basic_lock(&mq->lock); @@ -223,10 +270,11 @@ static int dtio_find_in_queue(struct dt_io_thread* dtio, { void* buf=NULL; size_t len=0; - if(pick_msg_from_queue(mq, &buf, &len)) { + if(dt_msg_queue_pop(mq, &buf, &len)) { dtio->cur_msg = buf; dtio->cur_msg_len = len; dtio->cur_msg_done = 0; + dtio->cur_msg_len_done = 0; return 1; } return 0; @@ -273,6 +321,7 @@ static void dtio_output_cb(int fd, short ATTR_UNUSED(bits), void* arg) dtio->cur_msg = NULL; dtio->cur_msg_len = 0; dtio->cur_msg_done = 0; + dtio->cur_msg_len_done = 0; } /** callback for the dnstap commandpipe, to stop the dnstap IO */ @@ -361,6 +410,24 @@ static void dtio_desetup(struct dt_io_thread* dtio) ub_event_base_free(dtio->event_base); } +/** setup a start control message */ +static int dtio_control_start_send(struct dt_io_thread* dtio) +{ + log_assert(dtio->cur_msg == NULL && dtio->cur_msg_len == 0); + dtio->cur_msg = fstrm_create_control_frame_start(DNSTAP_CONTENT_TYPE, + &dtio->cur_msg_len); + if(!dtio->cur_msg) { + return 0; + } + /* setup to send the control message */ + /* set that the buffer needs to be sent, but the length + * of that buffer is already written, that way the buffer can + * start with 0 length and then the length of the control frame in it*/ + dtio->cur_msg_done = 0; + dtio->cur_msg_len_done = 4; + return 1; +} + /** open the output file descriptor */ static void dtio_open_output(struct dt_io_thread* dtio) { @@ -396,6 +463,10 @@ static void dtio_open_output(struct dt_io_thread* dtio) } dtio->event = ev; + /* setup protocol control message to start */ + if(!dtio_control_start_send(dtio)) { + fatal_exit("dnstap io: out of memory"); + } } /** add the output file descriptor event for listening */ diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 5d4e57646..19d1667ff 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -108,6 +108,9 @@ struct dt_io_thread { size_t cur_msg_len; /** number of bytes written for the current message */ size_t cur_msg_done; + /** number of bytes of the length that have been written, + * for the current message length that precedes the frame */ + size_t cur_msg_len_done; /** command pipe that stops the pipe if closed. Used to quit * the program. [0] is read, [1] is written to. */ @@ -218,10 +221,35 @@ struct dt_io_list_item { /** the constant that denotes the control field type that is the * string for the content type of the stream. */ #define FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE 0x01 +/** the content type for DNSTAP frame streams */ +#define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" -/* routine to send START message, with content type. */ -/* routine to send a frame. */ -/* routine to send STOP message. */ +/** + * routine for START message, with content type. + * This creates an FSTRM control frame of type START. + * @param contenttype: a zero delimited string with the content type. + * eg. DNSTAP_CONTENT_TYPE, "protobuf:dnstap.Dnstap" + * @param len: if a buffer is returned this is the length of that buffer. + * @return NULL on malloc failure. Returns a malloced buffer with the + * protocol message. The buffer starts with the 4byte 0 that indicates + * a control frame. The buffer should be sent without preceding it with + * the 'len' variable, but straight the 0 start zeroes, and then the + * length of the control frame itself is embedded next in the buffer, + * with the control frame after that in the buffer. + */ +void* fstrm_create_control_frame_start(char* contenttype, size_t* len); +/** + * routine for STOP message. + * This creates an FSTRM control frame of type STOP. + * @param len: if a buffer is returned this is the length of that buffer. + * @return NULL on malloc failure. Returns a malloced buffer with the + * protocol message. The buffer starts with the 4byte 0 that indicates + * a control frame. The buffer should be sent without preceding it with + * the 'len' variable, but straight the 0 start zeroes, and then the + * length of the control frame itself is embedded next in the buffer, + * with the control frame after that in the buffer. + */ +void* fstrm_create_control_frame_stop(size_t* len); /** * Create new (empty) worker message queue. Limit set to default on max. From 6fb602d57bba9fe1a0976f3d6553305be13ac55a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 22 Jan 2020 11:57:15 +0100 Subject: [PATCH 021/235] improve fstrm routine documentation. --- dnstap/dtstream.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 19d1667ff..94c6b698d 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -225,29 +225,28 @@ struct dt_io_list_item { #define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" /** - * routine for START message, with content type. * This creates an FSTRM control frame of type START. * @param contenttype: a zero delimited string with the content type. - * eg. DNSTAP_CONTENT_TYPE, "protobuf:dnstap.Dnstap" + * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as + * "protobuf:dnstap.Dnstap", for a dnstap frame stream. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the - * protocol message. The buffer starts with the 4byte 0 that indicates + * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with - * the 'len' variable, but straight the 0 start zeroes, and then the - * length of the control frame itself is embedded next in the buffer, - * with the control frame after that in the buffer. + * the 'len' variable (like data frames are), but straight the content of the + * buffer, because the lengths are included in the buffer. This is so that + * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_start(char* contenttype, size_t* len); /** - * routine for STOP message. * This creates an FSTRM control frame of type STOP. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the - * protocol message. The buffer starts with the 4byte 0 that indicates + * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with - * the 'len' variable, but straight the 0 start zeroes, and then the - * length of the control frame itself is embedded next in the buffer, - * with the control frame after that in the buffer. + * the 'len' variable (like data frames are), but straight the content of the + * buffer, because the lengths are included in the buffer. This is so that + * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_stop(size_t* len); From 3cc1f4a74e34a140067509a8ee886b6dcfbbedd3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 22 Jan 2020 12:05:52 +0100 Subject: [PATCH 022/235] remove fatal_exit from runtime reopen routines. --- dnstap/dtstream.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index ae77851bb..1f833f1f9 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -422,7 +422,8 @@ static int dtio_control_start_send(struct dt_io_thread* dtio) /* setup to send the control message */ /* set that the buffer needs to be sent, but the length * of that buffer is already written, that way the buffer can - * start with 0 length and then the length of the control frame in it*/ + * start with 0 length and then the length of the control frame + * in it */ dtio->cur_msg_done = 0; dtio->cur_msg_len_done = 4; return 1; @@ -450,6 +451,8 @@ static void dtio_open_output(struct dt_io_thread* dtio) if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s)) == -1) { log_err("dnstap io: failed to connect: %s", strerror(errno)); + close(dtio->fd); + dtio->fd = -1; return; } fd_set_nonblock(dtio->fd); @@ -459,21 +462,32 @@ static void dtio_open_output(struct dt_io_thread* dtio) UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_output_cb, dtio); if(!ev) { - fatal_exit("dnstap io: out of memory"); + close(dtio->fd); + dtio->fd = -1; + log_err("dnstap io: out of memory"); + return; } dtio->event = ev; /* setup protocol control message to start */ if(!dtio_control_start_send(dtio)) { - fatal_exit("dnstap io: out of memory"); + ub_event_free(dtio->event); + dtio->event = NULL; + close(dtio->fd); + dtio->fd = -1; + log_err("dnstap io: out of memory"); + return; } } /** add the output file descriptor event for listening */ static void dtio_add_output_event(struct dt_io_thread* dtio) { + if(!dtio->event) + return; if(ub_event_add(dtio->event, NULL) != 0) { - fatal_exit("dnstap io: out of memory (adding event)"); + log_err("dnstap io: out of memory (adding event)"); + return; } dtio->event_added = 1; } From a21ac9838deef24581d51c1a62b4194182712a38 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 22 Jan 2020 15:20:48 +0100 Subject: [PATCH 023/235] write data and stop flush for dnstap io. --- dnstap/dtstream.c | 413 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 400 insertions(+), 13 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 1f833f1f9..9d7a465cd 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -292,15 +292,170 @@ static int dtio_find_msg(struct dt_io_thread* dtio) return 0; } +/** close and stop the output file descriptor event */ +static void dtio_close_output(struct dt_io_thread* dtio) +{ + if(!dtio->event) + return; + ub_event_free(dtio->event); + dtio->event = NULL; +#ifndef USE_WINSOCK + close(dtio->fd); +#else + closesocket(dtio->fd); +#endif + dtio->fd = -1; +} + +/** write buffer to output. + * returns number of bytes written, 0 if nothing happened, + * try again later, or -1 if the channel is to be closed. */ +static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, + size_t len) +{ + ssize_t ret; + if(dtio->fd == -1) + return -1; + ret = send(dtio->fd, buf, len, 0); + if(ret == -1) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return 0; + log_err("dnstap io: failed send: %s", strerror(errno)); +#else + if(WSAGetLastError() == WSAEINPROGRESS) + return 0; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(dtio->event, UB_EV_WRITE); + return 0; + } + log_err("dnstap io: failed send: %s", + wsa_strerror(WSAGetLastError())); +#endif + return -1; + } + return ret; +} + +#ifdef HAVE_WRITEV +/** write with writev, len and message, in one write, if possible. + * return true if message is done, false if incomplete */ +static int dtio_write_with_writev(struct dt_io_thread* dtio) +{ + uint32_t sendlen = htonl(dtio->cur_msg_len); + struct iovec iov[2]; + ssize_t r; + iov[0].iov_base = ((uint8_t*)&sendlen)+dtio->cur_msg_len_done; + iov[0].iov_len = sizeof(sendlen)-dtio->cur_msg_len_done; + iov[1].iov_base = dtio->cur_msg; + iov[1].iov_len = dtio->cur_msg_len; + log_assert(iov[0].iov_len > 0); + r = writev(dtio->fd, iov, 2); + if(r == -1) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return 0; + log_err("dnstap io: failed writev: %s", strerror(errno)); +#else + if(WSAGetLastError() == WSAEINPROGRESS) + return 0; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(dtio->event, UB_EV_WRITE); + return 0; + } + log_err("dnstap io: failed writev: %s", + wsa_strerror(WSAGetLastError())); +#endif + return -1; + } + /* written r bytes */ + dtio->cur_msg_len_done += r; + if(dtio->cur_msg_len_done < 4) + return 0; + if(dtio->cur_msg_len_done > 4) { + dtio->cur_msg_done = dtio->cur_msg_len_done-4; + dtio->cur_msg_len_done = 4; + } + if(dtio->cur_msg_done < dtio->cur_msg_len) + return 0; + return 1; +} +#endif /* HAVE_WRITEV */ + +/** write more of the length, preceding the data frame. + * return true if message is done, false if incomplete. */ +static int dtio_write_more_of_len(struct dt_io_thread* dtio) +{ +#ifndef HAVE_WRITEV + uint32_t sendlen = htonl(dtio->cur_msg_len); + int r; +#endif + if(dtio->cur_msg_len_done >= 4) + return 1; +#ifdef HAVE_WRITEV + /* we try writev for everything.*/ + return dtio_write_with_writev(dtio); +#else + r = dtio_write_buf(dtio, + ((uint8_t*)&sendlen)+dtio->cur_msg_len_done, + sizeof(sendlen)-dtio->cur_msg_len_done); + if(r == -1) { + /* close the channel */ + dtio_close_output(dtio); + return 0; + } else if(r == 0) { + /* try again later */ + return 0; + } + dtio->cur_msg_len_done += r; + if(dtio->cur_msg_len_done < 4) + return 0; + return 1; +#endif /* HAVE_WRITEV */ +} + +/** write more of the data frame. + * return true if message is done, false if incomplete. */ +static int dtio_write_more_of_data(struct dt_io_thread* dtio) +{ + int r; + if(dtio->cur_msg_done >= dtio->cur_msg_len) + return 1; + r = dtio_write_buf(dtio, + ((uint8_t*)dtio->cur_msg)+dtio->cur_msg_done, + dtio->cur_msg_len - dtio->cur_msg_done); + if(r == -1) { + /* close the channel */ + dtio_close_output(dtio); + return 0; + } else if(r == 0) { + /* try again later */ + return 0; + } + dtio->cur_msg_done += r; + if(dtio->cur_msg_done < dtio->cur_msg_len) + return 0; + return 1; +} + /** write more of the current messsage. false if incomplete, true if * the message is done */ -static int dtio_write_more(int fd, struct dt_io_thread* dtio) +static int dtio_write_more(struct dt_io_thread* dtio) { - return 0; + if(dtio->cur_msg_len_done < 4) { + if(!dtio_write_more_of_len(dtio)) + return 0; + } + if(dtio->cur_msg_done < dtio->cur_msg_len) { + if(!dtio_write_more_of_data(dtio)) + return 0; + } + return 1; } /** callback for the dnstap events, to write to the output */ -static void dtio_output_cb(int fd, short ATTR_UNUSED(bits), void* arg) +static void dtio_output_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), + void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; @@ -312,7 +467,7 @@ static void dtio_output_cb(int fd, short ATTR_UNUSED(bits), void* arg) /* write it */ if(dtio->cur_msg_done < dtio->cur_msg_len) { - if(!dtio_write_more(fd, dtio)) + if(!dtio_write_more(dtio)) return; } @@ -334,15 +489,25 @@ static void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) return; r = read(fd, &cmd, sizeof(cmd)); if(r == -1) { +#ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return; /* ignore this */ log_err("dnstap io: failed to read: %s", strerror(errno)); +#else + if(WSAGetLastError() == WSAEINPROGRESS) + return; + if(WSAGetLastError() == WSAEWOULDBLOCK) + return; + log_err("dnstap io: failed to read: %s", + wsa_strerror(WSAGetLastError())); +#endif /* and then fall through to quit the thread */ - } - if(r == 0) { + } else if(r == 0) { verbose(VERB_ALGO, "dnstap io: cmd channel closed"); } else if(r == 1 && cmd == 0) { verbose(VERB_ALGO, "dnstap io: cmd channel cmd quit"); + } else if(r == 1) { + verbose(VERB_ALGO, "dnstap io: cmd channel unknown command"); } dtio->want_to_exit = 1; if(ub_event_base_loopexit((struct ub_event_base*)dtio->event_base) @@ -387,26 +552,205 @@ static void dtio_del_output_event(struct dt_io_thread* dtio) dtio->event_added = 0; } -/** close and stop the output file descriptor event */ -static void dtio_close_output(struct dt_io_thread* dtio) +/** + * structure to keep track of information during stop flush + */ +struct stop_flush_info { + /** the event base during stop flush */ + struct ub_event_base* base; + /** did we already want to exit this stop-flush event base */ + int want_to_exit_flush; + /** has the timer fired */ + int timer_done; + /** the dtio */ + struct dt_io_thread* dtio; + /** the stop control frame */ + void* stop_frame; + /** length of the stop frame */ + size_t stop_frame_len; + /** how much we have done of the stop frame */ + size_t stop_frame_done; +}; + +/** exit the stop flush base */ +static void dtio_stop_flush_exit(struct stop_flush_info* info) { - if(!dtio->event) + if(info->want_to_exit_flush) return; - ub_event_free(dtio->event); - dtio->event = NULL; - close(dtio->fd); - dtio->fd = -1; + info->want_to_exit_flush = 1; + if(ub_event_base_loopexit(info->base) != 0) { + log_err("dnstap io: could not loopexit"); + } +} + +/** send the stop control, + * return true if completed the frame. */ +static int dtio_control_stop_send(struct stop_flush_info* info) +{ + struct dt_io_thread* dtio = info->dtio; + int r; + if(info->stop_frame_done >= info->stop_frame_len) + return 1; + r = dtio_write_buf(dtio, ((uint8_t*)info->stop_frame) + + info->stop_frame_done, info->stop_frame_len - + info->stop_frame_done); + if(r == -1) { + verbose(VERB_ALGO, "dnstap io: stop flush: output closed"); + dtio_stop_flush_exit(info); + return 0; + } + if(r == 0) { + /* try again later, or timeout */ + return 0; + } + info->stop_frame_done += r; + if(info->stop_frame_done < info->stop_frame_len) + return 0; /* not done yet */ + return 1; +} + +static void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), + void* arg) +{ + struct stop_flush_info* info = (struct stop_flush_info*)arg; + if(info->want_to_exit_flush) + return; + verbose(VERB_ALGO, "dnstap io: stop flush timer expired, stop flush"); + info->timer_done = 1; + dtio_stop_flush_exit(info); +} + +static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), + void* arg) +{ + struct stop_flush_info* info = (struct stop_flush_info*)arg; + struct dt_io_thread* dtio = info->dtio; + if(info->want_to_exit_flush) + return; + /* write remainder of last frame */ + if(dtio->cur_msg) { + if(dtio->cur_msg_done < dtio->cur_msg_len) { + if(!dtio_write_more(dtio)) { + if(dtio->fd == -1) { + verbose(VERB_ALGO, "dnstap io: " + "stop flush: output closed"); + dtio_stop_flush_exit(info); + } + return; + } + } + verbose(VERB_ALGO, "dnstap io: stop flush completed " + "last frame"); + free(dtio->cur_msg); + dtio->cur_msg = NULL; + dtio->cur_msg_len = 0; + dtio->cur_msg_done = 0; + dtio->cur_msg_len_done = 0; + } + /* write stop frame */ + if(info->stop_frame_done < info->stop_frame_len) { + if(!dtio_control_stop_send(info)) + return; + verbose(VERB_ALGO, "dnstap io: stop flush completed " + "stop control frame"); + } + /* when last frame and stop frame are sent, exit */ + dtio_stop_flush_exit(info); +} + +/** flush at end, last packet and stop control */ +static void dtio_control_stop_flush(struct dt_io_thread* dtio) +{ + /* briefly attempt to flush the previous packet to the output, + * this could be a partial packet, or even the start control frame */ + time_t secs = 0; + struct timeval now; + struct stop_flush_info info; + struct timeval tv; + struct ub_event* timer, *stopev; + memset(&info, 0, sizeof(info)); + memset(&now, 0, sizeof(now)); + info.base = ub_default_event_base(0, &secs, &now); + if(!info.base) { + log_err("dnstap io: malloc failure"); + return; + } + timer = ub_event_new(info.base, -1, UB_EV_TIMEOUT, + &dtio_stop_timer_cb, &info); + if(!timer) { + log_err("dnstap io: malloc failure"); + ub_event_base_free(info.base); + return; + } + memset(&tv, 0, sizeof(tv)); + tv.tv_sec = 2; + if(ub_timer_add(timer, info.base, &dtio_stop_timer_cb, &info, + &tv) != 0) { + log_err("dnstap io: cannot event_timer_add"); + ub_event_free(timer); + ub_event_base_free(info.base); + return; + } + stopev = ub_event_new(info.base, dtio->fd, UB_EV_READ | + UB_EV_WRITE | UB_EV_PERSIST, &dtio_stop_ev_cb, &info); + if(!stopev) { + log_err("dnstap io: malloc failure"); + ub_event_del(timer); + ub_event_free(timer); + ub_event_base_free(info.base); + return; + } + if(ub_event_add(stopev, NULL) != 0) { + log_err("dnstap io: cannot event_add"); + ub_event_free(stopev); + ub_event_del(timer); + ub_event_free(timer); + ub_event_base_free(info.base); + return; + } + info.stop_frame = fstrm_create_control_frame_stop( + &info.stop_frame_len); + if(!info.stop_frame) { + log_err("dnstap io: malloc failure"); + ub_event_del(stopev); + ub_event_free(stopev); + ub_event_del(timer); + ub_event_free(timer); + ub_event_base_free(info.base); + return; + } + + /* wait briefly, or until finished */ + verbose(VERB_ALGO, "dnstap io: stop flush started"); + if(ub_event_base_dispatch(info.base) < 0) { + log_err("dnstap io: dispatch flush failed, errno is %s", + strerror(errno)); + } + verbose(VERB_ALGO, "dnstap io: stop flush ended"); + free(info.stop_frame); + ub_event_del(stopev); + ub_event_free(stopev); + ub_event_del(timer); + ub_event_free(timer); + ub_event_base_free(info.base); } /** perform desetup and free stuff when the dnstap io thread exits */ static void dtio_desetup(struct dt_io_thread* dtio) { + dtio_control_stop_flush(dtio); dtio_del_output_event(dtio); dtio_close_output(dtio); ub_event_del(dtio->command_event); ub_event_free(dtio->command_event); +#ifndef USE_WINSOCK close(dtio->commandpipe[0]); +#else + _close(dtio->commandpipe[0]); +#endif dtio->commandpipe[0] = -1; + free(dtio->cur_msg); + dtio->cur_msg = NULL; ub_event_base_free(dtio->event_base); } @@ -436,8 +780,13 @@ static void dtio_open_output(struct dt_io_thread* dtio) struct sockaddr_un s; dtio->fd = socket(AF_LOCAL, SOCK_STREAM, SOCK_CLOEXEC); if(dtio->fd == -1) { +#ifndef USE_WINSOCK log_err("dnstap io: failed to create socket: %s", strerror(errno)); +#else + log_err("dnstap io: failed to create socket: %s", + wsa_strerror(WSAGetLastError())); +#endif return; } memset(&s, 0, sizeof(s)); @@ -450,8 +799,17 @@ static void dtio_open_output(struct dt_io_thread* dtio) (void)strlcpy(s.sun_path, dtio->socket_path, sizeof(s.sun_path)); if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s)) == -1) { +#ifndef USE_WINSOCK log_err("dnstap io: failed to connect: %s", strerror(errno)); +#else + log_err("dnstap io: failed to connect: %s", + wsa_strerror(WSAGetLastError())); +#endif +#ifndef USE_WINSOCK close(dtio->fd); +#else + closesocket(dtio->fd); +#endif dtio->fd = -1; return; } @@ -462,7 +820,11 @@ static void dtio_open_output(struct dt_io_thread* dtio) UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_output_cb, dtio); if(!ev) { +#ifndef USE_WINSOCK close(dtio->fd); +#else + closesocket(dtio->fd); +#endif dtio->fd = -1; log_err("dnstap io: out of memory"); return; @@ -473,7 +835,11 @@ static void dtio_open_output(struct dt_io_thread* dtio) if(!dtio_control_start_send(dtio)) { ub_event_free(dtio->event); dtio->event = NULL; +#ifndef USE_WINSOCK close(dtio->fd); +#else + closesocket(dtio->fd); +#endif dtio->fd = -1; log_err("dnstap io: out of memory"); return; @@ -521,10 +887,18 @@ static void* dnstap_io(void* arg) int dt_io_thread_start(struct dt_io_thread* dtio) { /* set up the thread, can fail */ +#ifndef USE_WINSOCK if(pipe(dtio->commandpipe) == -1) { log_err("failed to create pipe: %s", strerror(errno)); return 0; } +#else + if(_pipe(dtio->commandpipe, 4096, _O_BINARY) == -1) { + log_err("failed to create _pipe: %s", + wsa_strerror(WSAGetLastError())); + return 0; + } +#endif /* start the thread */ ub_thread_create(&dtio->tid, dnstap_io, dtio); @@ -540,15 +914,28 @@ void dt_io_thread_stop(struct dt_io_thread* dtio) while(1) { ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); if(r == -1) { +#ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) continue; log_err("dnstap io stop: write: %s", strerror(errno)); +#else + if(WSAGetLastError() == WSAEINPROGRESS) + continue; + if(WSAGetLastError() == WSAEWOULDBLOCK) + continue; + log_err("dnstap io stop: write: %s", + wsa_strerror(WSAGetLastError())); +#endif break; } break; } +#ifndef USE_WINSOCK close(dtio->commandpipe[1]); +#else + _close(dtio->commandpipe[1]); +#endif dtio->commandpipe[1] = -1; ub_thread_join(dtio->tid); } From 814a8863544ffc47098efff83adb1ee4dbd40ae3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 22 Jan 2020 15:26:04 +0100 Subject: [PATCH 024/235] output event del before free. --- dnstap/dtstream.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 9d7a465cd..2e2de641a 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -292,6 +292,15 @@ static int dtio_find_msg(struct dt_io_thread* dtio) return 0; } +/** del the output file descriptor event for listening */ +static void dtio_del_output_event(struct dt_io_thread* dtio) +{ + if(!dtio->event_added) + return; + ub_event_del(dtio->event); + dtio->event_added = 0; +} + /** close and stop the output file descriptor event */ static void dtio_close_output(struct dt_io_thread* dtio) { @@ -366,7 +375,10 @@ static int dtio_write_with_writev(struct dt_io_thread* dtio) log_err("dnstap io: failed writev: %s", wsa_strerror(WSAGetLastError())); #endif - return -1; + /* close the channel */ + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; } /* written r bytes */ dtio->cur_msg_len_done += r; @@ -401,6 +413,7 @@ static int dtio_write_more_of_len(struct dt_io_thread* dtio) sizeof(sendlen)-dtio->cur_msg_len_done); if(r == -1) { /* close the channel */ + dtio_del_output_event(dtio); dtio_close_output(dtio); return 0; } else if(r == 0) { @@ -426,6 +439,7 @@ static int dtio_write_more_of_data(struct dt_io_thread* dtio) dtio->cur_msg_len - dtio->cur_msg_done); if(r == -1) { /* close the channel */ + dtio_del_output_event(dtio); dtio_close_output(dtio); return 0; } else if(r == 0) { @@ -543,15 +557,6 @@ static void dtio_setup_cmd(struct dt_io_thread* dtio) } } -/** del the output file descriptor event for listening */ -static void dtio_del_output_event(struct dt_io_thread* dtio) -{ - if(!dtio->event_added) - return; - ub_event_del(dtio->event); - dtio->event_added = 0; -} - /** * structure to keep track of information during stop flush */ From 569cccea24798bbae5e3034c9c63d119b9cc4807 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 22 Jan 2020 17:41:34 +0100 Subject: [PATCH 025/235] dnstap io output performs nonblocking connect. --- dnstap/dtstream.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++- dnstap/dtstream.h | 2 ++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 2e2de641a..4ebf9f21e 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -316,6 +316,49 @@ static void dtio_close_output(struct dt_io_thread* dtio) dtio->fd = -1; } +/** check for pending nonblocking connect errors, + * returns 1 if it is okay. -1 on error (close it), 0 to try later */ +static int dtio_check_nb_connect(struct dt_io_thread* dtio) +{ + int error = 0; + socklen_t len = (socklen_t)sizeof(error); + if(!dtio->check_nb_connect) + return 1; /* everything okay */ + if(getsockopt(dtio->fd, SOL_SOCKET, SO_ERROR, (void*)&error, + &len) < 0) { +#ifndef USE_WINSOCK + error = errno; /* on solaris errno is error */ +#else + error = WSAGetLastError(); +#endif + } +#ifndef USE_WINSOCK +#if defined(EINPROGRESS) && defined(EWOULDBLOCK) + if(error == EINPROGRESS || error == EWOULDBLOCK) + return 0; /* try again later */ +#endif +#else + if(error == WSAEINPROGRESS) { + return 0; /* try again later */ + } else if(error == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(dtio->event, UB_EV_WRITE); + return 0; /* try again later */ + } +#endif + if(error != 0) { +#ifndef USE_WINSOCK + log_err("dnstap io: failed to connect: %s", strerror(error)); +#else + log_err("dnstap io: failed to connect: %s", + wsa_strerror(error)); +#endif + return -1; /* error, close it */ + } + + dtio->check_nb_connect = 0; + return 1; /* everything okay */ +} + /** write buffer to output. * returns number of bytes written, 0 if nothing happened, * try again later, or -1 if the channel is to be closed. */ @@ -325,6 +368,14 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, ssize_t ret; if(dtio->fd == -1) return -1; + if(dtio->check_nb_connect) { + int connect_err = dtio_check_nb_connect(dtio); + if(connect_err == -1) { + return -1; + } else if(connect_err == 0) { + return 0; + } + } ret = send(dtio->fd, buf, len, 0); if(ret == -1) { #ifndef USE_WINSOCK @@ -354,6 +405,17 @@ static int dtio_write_with_writev(struct dt_io_thread* dtio) uint32_t sendlen = htonl(dtio->cur_msg_len); struct iovec iov[2]; ssize_t r; + if(dtio->check_nb_connect) { + int connect_err = dtio_check_nb_connect(dtio); + if(connect_err == -1) { + /* close the channel */ + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; + } else if(connect_err == 0) { + return 0; + } + } iov[0].iov_base = ((uint8_t*)&sendlen)+dtio->cur_msg_len_done; iov[0].iov_len = sizeof(sendlen)-dtio->cur_msg_len_done; iov[1].iov_base = dtio->cur_msg; @@ -802,6 +864,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) s.sun_family = AF_LOCAL; /* length is 92-108, 104 on FreeBSD */ (void)strlcpy(s.sun_path, dtio->socket_path, sizeof(s.sun_path)); + fd_set_nonblock(dtio->fd); if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s)) == -1) { #ifndef USE_WINSOCK @@ -818,7 +881,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio->fd = -1; return; } - fd_set_nonblock(dtio->fd); + dtio->check_nb_connect = 1; /* the EV_READ is to catch channel close, write to write packets */ ev = ub_event_new(dtio->event_base, dtio->fd, diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 94c6b698d..7641ffbd6 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -101,6 +101,8 @@ struct dt_io_thread { void* event; /** the event is added */ int event_added; + /** check for nonblocking connect errors on fd */ + int check_nb_connect; /** the buffer that currently getting written, or NULL if no * (partial) message written now */ void* cur_msg; From e9772b609e83eba2d7c2efc695f250d99e08f3c4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 09:55:15 +0100 Subject: [PATCH 026/235] dnstap io fixup socket creation, stop flush dtio pointer, connect reports. --- dnstap/dtstream.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 4ebf9f21e..e414d5d02 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -346,15 +346,18 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) } #endif if(error != 0) { + char* to = dtio->socket_path; #ifndef USE_WINSOCK - log_err("dnstap io: failed to connect: %s", strerror(error)); + log_err("dnstap io: failed to connect to \"%s\": %s", + to, strerror(error)); #else - log_err("dnstap io: failed to connect: %s", - wsa_strerror(error)); + log_err("dnstap io: failed to connect to \"%s\": %s", + to, wsa_strerror(error)); #endif return -1; /* error, close it */ } + verbose(VERB_ALGO, "dnstap io: connected to \"%s\"", dtio->socket_path); dtio->check_nb_connect = 0; return 1; /* everything okay */ } @@ -735,8 +738,16 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) struct stop_flush_info info; struct timeval tv; struct ub_event* timer, *stopev; + + if(dtio->fd == -1 || dtio->check_nb_connect) { + /* no connection or we have just connected, so nothing is + * sent yet, so nothing to stop or flush */ + return; + } + memset(&info, 0, sizeof(info)); memset(&now, 0, sizeof(now)); + info.dtio = dtio; info.base = ub_default_event_base(0, &secs, &now); if(!info.base) { log_err("dnstap io: malloc failure"); @@ -845,7 +856,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) { struct ub_event* ev; struct sockaddr_un s; - dtio->fd = socket(AF_LOCAL, SOCK_STREAM, SOCK_CLOEXEC); + dtio->fd = socket(AF_LOCAL, SOCK_STREAM, 0); if(dtio->fd == -1) { #ifndef USE_WINSOCK log_err("dnstap io: failed to create socket: %s", @@ -867,11 +878,13 @@ static void dtio_open_output(struct dt_io_thread* dtio) fd_set_nonblock(dtio->fd); if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s)) == -1) { + char* to = dtio->socket_path; #ifndef USE_WINSOCK - log_err("dnstap io: failed to connect: %s", strerror(errno)); + log_err("dnstap io: failed to connect to \"%s\": %s", + to, strerror(errno)); #else - log_err("dnstap io: failed to connect: %s", - wsa_strerror(WSAGetLastError())); + log_err("dnstap io: failed to connect to \"%s\": %s", + to, wsa_strerror(WSAGetLastError())); #endif #ifndef USE_WINSOCK close(dtio->fd); From 14d76588973715f63753cd884b5f5791f52a42ca Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 10:34:38 +0100 Subject: [PATCH 027/235] dtio_find_msg loop roundrobin instead of first queue only, with state in the dtio struct for loop iterator. --- dnstap/dtstream.c | 13 ++++++++++++- dnstap/dtstream.h | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index e414d5d02..c3270a008 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -221,6 +221,7 @@ int dt_io_thread_register_queue(struct dt_io_thread* dtio, item->queue = mq; item->next = dtio->io_list; dtio->io_list = item; + dtio->io_list_iter = NULL; return 1; } @@ -235,6 +236,7 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, else dtio->io_list = item->next; /* the queue itself only registered, not deleted */ free(item); + dtio->io_list_iter = NULL; return; } prev = item; @@ -283,7 +285,16 @@ static int dtio_find_in_queue(struct dt_io_thread* dtio, /** find a new message to write, search message queues, false if none */ static int dtio_find_msg(struct dt_io_thread* dtio) { - struct dt_io_list_item* item = dtio->io_list; + struct dt_io_list_item* item; + + if(dtio->io_list_iter) + item = dtio->io_list_iter; + else item = dtio->io_list; + /* use the next queue for the next message lookup, + * if we hit the end(NULL) the NULL restarts the iter at start. */ + if(item) + dtio->io_list_iter = item->next; + while(item) { if(dtio_find_in_queue(dtio, item->queue)) return 1; diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 7641ffbd6..3c5bd9a4e 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -93,6 +93,10 @@ struct dt_io_thread { void* event_base; /** list of queues that is registered to get written */ struct dt_io_list_item* io_list; + /** iterator point in the io_list, to pick from them in a + * round-robin fashion, instead of only from the first when busy. + * if NULL it means start at the start of the list. */ + struct dt_io_list_item* io_list_iter; /** thread id, of the io thread */ ub_thread_type tid; /** file descriptor that the thread writes to */ From 24536473d8871bdcc22b54049ada8380c1f54850 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 11:07:30 +0100 Subject: [PATCH 028/235] dnstap io: check for close of channel by the other side. --- dnstap/dtstream.c | 61 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index c3270a008..2642528ff 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -543,11 +543,56 @@ static int dtio_write_more(struct dt_io_thread* dtio) return 1; } +/** check if the output fd has been closed */ +static void dtio_check_close(struct dt_io_thread* dtio) +{ + /* we don't want to read any packets, but if there are we can + * discard the input (ignore it), which is okay for a framestream, + * and also, the read call can return that the stream has been + * closed by the other side. */ + ssize_t r; + uint8_t buf[1024]; + if(dtio->fd == -1) return; + while(1) { + r = recv(dtio->fd, buf, sizeof(buf), 0); + if(r == -1) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return; /* try later */ +#else + if(WSAGetLastError() == WSAEINPROGRESS) { + return; /* try later */ + } else if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(dtio->event, UB_EV_READ); + return; /* try later */ + } +#endif + log_err("dnstap io: output recv: %s", strerror(errno)); + /* and close below */ + break; + } + if(r == 0) { + verbose(VERB_ALGO, "dnstap io: output closed by the other side"); + /* and close below */ + break; + } + /* something was received, ignore it */ + } + /* the other end has been closed */ + /* close the channel */ + dtio_del_output_event(dtio); + dtio_close_output(dtio); +} + /** callback for the dnstap events, to write to the output */ -static void dtio_output_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), - void* arg) +static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; + + if((bits&UB_EV_READ)) { + dtio_check_close(dtio); + return; + } /* see if there are messages that need writing */ if(!dtio->cur_msg) { @@ -701,13 +746,21 @@ static void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), dtio_stop_flush_exit(info); } -static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), - void* arg) +static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct stop_flush_info* info = (struct stop_flush_info*)arg; struct dt_io_thread* dtio = info->dtio; if(info->want_to_exit_flush) return; + if((bits&UB_EV_READ)) { + dtio_check_close(dtio); + if(dtio->fd == -1) { + verbose(VERB_ALGO, "dnstap io: " + "stop flush: output closed"); + dtio_stop_flush_exit(info); + } + return; + } /* write remainder of last frame */ if(dtio->cur_msg) { if(dtio->cur_msg_done < dtio->cur_msg_len) { From e7d5a89ae297494050f39725348d9b5fb36145ef Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 11:16:41 +0100 Subject: [PATCH 029/235] check close neater also with a write at the same time. --- dnstap/dtstream.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 2642528ff..963d4769f 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -543,28 +543,30 @@ static int dtio_write_more(struct dt_io_thread* dtio) return 1; } -/** check if the output fd has been closed */ -static void dtio_check_close(struct dt_io_thread* dtio) +/** check if the output fd has been closed, + * it returns false if the stream is closed. */ +static int dtio_check_close(struct dt_io_thread* dtio) { /* we don't want to read any packets, but if there are we can - * discard the input (ignore it), which is okay for a framestream, - * and also, the read call can return that the stream has been - * closed by the other side. */ + * discard the input (ignore it). Ignore of unknown (control) + * packets is okay for the framestream protocol. And also, the + * read call can return that the stream has been closed by the + * other side. */ ssize_t r; uint8_t buf[1024]; - if(dtio->fd == -1) return; + if(dtio->fd == -1) return 0; while(1) { r = recv(dtio->fd, buf, sizeof(buf), 0); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) - return; /* try later */ + return 1; /* try later */ #else if(WSAGetLastError() == WSAEINPROGRESS) { - return; /* try later */ + return 1; /* try later */ } else if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(dtio->event, UB_EV_READ); - return; /* try later */ + return 1; /* try later */ } #endif log_err("dnstap io: output recv: %s", strerror(errno)); @@ -582,6 +584,7 @@ static void dtio_check_close(struct dt_io_thread* dtio) /* close the channel */ dtio_del_output_event(dtio); dtio_close_output(dtio); + return 0; } /** callback for the dnstap events, to write to the output */ @@ -590,10 +593,10 @@ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) struct dt_io_thread* dtio = (struct dt_io_thread*)arg; if((bits&UB_EV_READ)) { - dtio_check_close(dtio); - return; + if(!dtio_check_close(dtio)) + return; } - + /* see if there are messages that need writing */ if(!dtio->cur_msg) { if(!dtio_find_msg(dtio)) @@ -753,13 +756,14 @@ static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) if(info->want_to_exit_flush) return; if((bits&UB_EV_READ)) { - dtio_check_close(dtio); - if(dtio->fd == -1) { - verbose(VERB_ALGO, "dnstap io: " - "stop flush: output closed"); - dtio_stop_flush_exit(info); + if(!dtio_check_close(dtio)) { + if(dtio->fd == -1) { + verbose(VERB_ALGO, "dnstap io: " + "stop flush: output closed"); + dtio_stop_flush_exit(info); + } + return; } - return; } /* write remainder of last frame */ if(dtio->cur_msg) { From 29fdcf0c714b52f22ce3f84d5b3b7da90e06f36f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 11:44:32 +0100 Subject: [PATCH 030/235] loop in output callback for performance. --- dnstap/dtstream.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 963d4769f..164b56927 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -50,6 +50,9 @@ #include #endif +/** number of messages to process in one output callback */ +#define DTIO_MESSAGES_PER_CALLBACK 100 + void* fstrm_create_control_frame_start(char* contenttype, size_t* len) { uint32_t* control; @@ -591,30 +594,40 @@ static int dtio_check_close(struct dt_io_thread* dtio) static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; + int i; if((bits&UB_EV_READ)) { if(!dtio_check_close(dtio)) return; } - /* see if there are messages that need writing */ - if(!dtio->cur_msg) { - if(!dtio_find_msg(dtio)) - return; /* nothing to do */ - } + /* loop to process a number of messages. This improves throughput, + * because selecting on write-event if not needed for busy messages + * (dnstap log) generation and if they need to all be written back. + * The write event is usually not blocked up. But not forever, + * because the event loop needs to stay responsive for other events. + * If there are no (more) messages, or if the output buffers get + * full, it returns out of the loop. */ + for(i=0; icur_msg) { + if(!dtio_find_msg(dtio)) + return; /* nothing to do */ + } - /* write it */ - if(dtio->cur_msg_done < dtio->cur_msg_len) { - if(!dtio_write_more(dtio)) - return; - } + /* write it */ + if(dtio->cur_msg_done < dtio->cur_msg_len) { + if(!dtio_write_more(dtio)) + return; + } - /* done with the current message */ - free(dtio->cur_msg); - dtio->cur_msg = NULL; - dtio->cur_msg_len = 0; - dtio->cur_msg_done = 0; - dtio->cur_msg_len_done = 0; + /* done with the current message */ + free(dtio->cur_msg); + dtio->cur_msg = NULL; + dtio->cur_msg_len = 0; + dtio->cur_msg_done = 0; + dtio->cur_msg_len_done = 0; + } } /** callback for the dnstap commandpipe, to stop the dnstap IO */ From c0f410f72105ec4a70b2fa050cf6995b78a4430b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 11:51:10 +0100 Subject: [PATCH 031/235] dnstap io, make sure to free current message when stream closes. --- dnstap/dtstream.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 164b56927..c0fbb3999 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -306,6 +306,16 @@ static int dtio_find_msg(struct dt_io_thread* dtio) return 0; } +/** delete the current message in the dtio, and reset counters */ +static void dtio_cur_msg_free(struct dt_io_thread* dtio) +{ + free(dtio->cur_msg); + dtio->cur_msg = NULL; + dtio->cur_msg_len = 0; + dtio->cur_msg_done = 0; + dtio->cur_msg_len_done = 0; +} + /** del the output file descriptor event for listening */ static void dtio_del_output_event(struct dt_io_thread* dtio) { @@ -328,6 +338,13 @@ static void dtio_close_output(struct dt_io_thread* dtio) closesocket(dtio->fd); #endif dtio->fd = -1; + + /* if there is a (partial) message, discard it + * we cannot send (the remainder of) it, and a new + * connection needs to start with a control frame. */ + if(dtio->cur_msg) { + dtio_cur_msg_free(dtio); + } } /** check for pending nonblocking connect errors, @@ -622,11 +639,7 @@ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) } /* done with the current message */ - free(dtio->cur_msg); - dtio->cur_msg = NULL; - dtio->cur_msg_len = 0; - dtio->cur_msg_done = 0; - dtio->cur_msg_len_done = 0; + dtio_cur_msg_free(dtio); } } @@ -792,11 +805,7 @@ static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) } verbose(VERB_ALGO, "dnstap io: stop flush completed " "last frame"); - free(dtio->cur_msg); - dtio->cur_msg = NULL; - dtio->cur_msg_len = 0; - dtio->cur_msg_done = 0; - dtio->cur_msg_len_done = 0; + dtio_cur_msg_free(dtio); } /* write stop frame */ if(info->stop_frame_done < info->stop_frame_len) { @@ -908,8 +917,7 @@ static void dtio_desetup(struct dt_io_thread* dtio) _close(dtio->commandpipe[0]); #endif dtio->commandpipe[0] = -1; - free(dtio->cur_msg); - dtio->cur_msg = NULL; + dtio_cur_msg_free(dtio); ub_event_base_free(dtio->event_base); } From 8c47d16e292177688cd92e294f233493f482b53a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 13:27:21 +0100 Subject: [PATCH 032/235] dnstap io, sleeps thread when there is no traffic. --- dnstap/dtstream.c | 143 +++++++++++++++++++++++++++++++++++++++------- dnstap/dtstream.h | 5 ++ 2 files changed, 126 insertions(+), 22 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index c0fbb3999..a81a7abd5 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -52,6 +52,13 @@ /** number of messages to process in one output callback */ #define DTIO_MESSAGES_PER_CALLBACK 100 +/** DTIO command channel commands */ +enum { + /** DTIO command channel stop */ + DTIO_COMMAND_STOP = 0, + /** DTIO command channel wakeup */ + DTIO_COMMAND_WAKEUP = 1 +} dtio_channel_command; void* fstrm_create_control_frame_start(char* contenttype, size_t* len) { @@ -137,9 +144,38 @@ dt_msg_queue_delete(struct dt_msg_queue* mq) free(mq); } +/** make the dtio wake up by sending a wakeup command */ +static void dtio_wakeup(struct dt_io_thread* dtio) +{ + uint8_t cmd = DTIO_COMMAND_WAKEUP; + if(!dtio) return; + if(!dtio->event_base) return; /* not started */ + + while(1) { + ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); + if(r == -1) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + continue; + log_err("dnstap io wakeup: write: %s", strerror(errno)); +#else + if(WSAGetLastError() == WSAEINPROGRESS) + continue; + if(WSAGetLastError() == WSAEWOULDBLOCK) + continue; + log_err("dnstap io stop: write: %s", + wsa_strerror(WSAGetLastError())); +#endif + break; + } + break; + } +} + void dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) { + int wakeup = 0; struct dt_msg_entry* entry; /* check conditions */ @@ -170,6 +206,9 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) /* aqcuire lock */ lock_basic_lock(&mq->lock); + /* list was empty, wakeup dtio */ + if(mq->first == NULL) + wakeup = 1; /* see if it is going to fit */ if(mq->cursize + len > mq->maxsize) { /* buffer full, or congested. */ @@ -188,6 +227,9 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) mq->last = entry; /* release lock */ lock_basic_unlock(&mq->lock); + + if(wakeup) + dtio_wakeup(mq->dtio); } struct dt_io_thread* dt_io_thread_create(void) @@ -221,6 +263,7 @@ int dt_io_thread_register_queue(struct dt_io_thread* dtio, { struct dt_io_list_item* item = malloc(sizeof(*item)); if(!item) return 0; + mq->dtio = dtio; item->queue = mq; item->next = dtio->io_list; dtio->io_list = item; @@ -238,6 +281,7 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, if(prev) prev->next = item->next; else dtio->io_list = item->next; /* the queue itself only registered, not deleted */ + item->queue->dtio = NULL; free(item); dtio->io_list_iter = NULL; return; @@ -288,16 +332,25 @@ static int dtio_find_in_queue(struct dt_io_thread* dtio, /** find a new message to write, search message queues, false if none */ static int dtio_find_msg(struct dt_io_thread* dtio) { - struct dt_io_list_item* item; + struct dt_io_list_item *spot, *item; - if(dtio->io_list_iter) - item = dtio->io_list_iter; - else item = dtio->io_list; + spot = dtio->io_list_iter; /* use the next queue for the next message lookup, * if we hit the end(NULL) the NULL restarts the iter at start. */ - if(item) - dtio->io_list_iter = item->next; + if(spot) + dtio->io_list_iter = spot->next; + else if(dtio->io_list) + dtio->io_list_iter = dtio->io_list->next; + /* scan from spot to end-of-io_list */ + item = spot; + while(item) { + if(dtio_find_in_queue(dtio, item->queue)) + return 1; + item = item->next; + } + /* scan starting at the start-of-list (to wrap around the end) */ + item = dtio->io_list; while(item) { if(dtio_find_in_queue(dtio, item->queue)) return 1; @@ -323,6 +376,7 @@ static void dtio_del_output_event(struct dt_io_thread* dtio) return; ub_event_del(dtio->event); dtio->event_added = 0; + dtio->event_added_is_write = 0; } /** close and stop the output file descriptor event */ @@ -607,6 +661,52 @@ static int dtio_check_close(struct dt_io_thread* dtio) return 0; } +/** add the output file descriptor event for listening, read only */ +static void dtio_add_output_event_read(struct dt_io_thread* dtio) +{ + if(!dtio->event) + return; + if(dtio->event_added && !dtio->event_added_is_write) + return; + /* we have to (re-)register the event */ + if(dtio->event_added) + ub_event_del(dtio->event); + ub_event_del_bits(dtio->event, UB_EV_WRITE); + if(ub_event_add(dtio->event, NULL) != 0) { + log_err("dnstap io: out of memory (adding event)"); + return; + } + dtio->event_added = 1; + dtio->event_added_is_write = 0; +} + +/** add the output file descriptor event for listening, read and write */ +static void dtio_add_output_event_write(struct dt_io_thread* dtio) +{ + if(!dtio->event) + return; + if(dtio->event_added && dtio->event_added_is_write) + return; + /* we have to (re-)register the event */ + if(dtio->event_added) + ub_event_del(dtio->event); + ub_event_add_bits(dtio->event, UB_EV_WRITE); + if(ub_event_add(dtio->event, NULL) != 0) { + log_err("dnstap io: out of memory (adding event)"); + return; + } + dtio->event_added = 1; + dtio->event_added_is_write = 1; +} + +/** put the dtio thread to sleep */ +static void dtio_sleep(struct dt_io_thread* dtio) +{ + /* unregister the event polling for write, because there is + * nothing to be written */ + dtio_add_output_event_read(dtio); +} + /** callback for the dnstap events, to write to the output */ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) { @@ -628,8 +728,14 @@ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) for(i=0; icur_msg) { - if(!dtio_find_msg(dtio)) + if(!dtio_find_msg(dtio)) { + if(i == 0) { + /* no messages on the first iteration, + * the queues are all empty */ + dtio_sleep(dtio); + } return; /* nothing to do */ + } } /* write it */ @@ -668,8 +774,13 @@ static void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) /* and then fall through to quit the thread */ } else if(r == 0) { verbose(VERB_ALGO, "dnstap io: cmd channel closed"); - } else if(r == 1 && cmd == 0) { + } else if(r == 1 && cmd == DTIO_COMMAND_STOP) { verbose(VERB_ALGO, "dnstap io: cmd channel cmd quit"); + } else if(r == 1 && cmd == DTIO_COMMAND_WAKEUP) { + verbose(VERB_ALGO, "dnstap io: cmd channel cmd wakeup"); + /* reregister event */ + dtio_add_output_event_write(dtio); + return; } else if(r == 1) { verbose(VERB_ALGO, "dnstap io: cmd channel unknown command"); } @@ -1016,18 +1127,6 @@ static void dtio_open_output(struct dt_io_thread* dtio) } } -/** add the output file descriptor event for listening */ -static void dtio_add_output_event(struct dt_io_thread* dtio) -{ - if(!dtio->event) - return; - if(ub_event_add(dtio->event, NULL) != 0) { - log_err("dnstap io: out of memory (adding event)"); - return; - } - dtio->event_added = 1; -} - /** the IO thread function for the DNSTAP IO */ static void* dnstap_io(void* arg) { @@ -1039,7 +1138,7 @@ static void* dnstap_io(void* arg) dtio_setup_base(dtio, &secs, &now); dtio_setup_cmd(dtio); dtio_open_output(dtio); - dtio_add_output_event(dtio); + dtio_add_output_event_write(dtio); verbose(VERB_ALGO, "start dnstap io thread"); /* run */ @@ -1077,7 +1176,7 @@ int dt_io_thread_start(struct dt_io_thread* dtio) void dt_io_thread_stop(struct dt_io_thread* dtio) { - uint8_t cmd = 0; + uint8_t cmd = DTIO_COMMAND_STOP; if(!dtio) return; if(!dtio->event_base) return; /* not started */ diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 3c5bd9a4e..77bda6ae0 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -47,6 +47,7 @@ #include "util/locks.h" struct dt_msg_entry; struct dt_io_list_item; +struct dt_io_thread; struct config_file; /** @@ -70,6 +71,8 @@ struct dt_msg_queue { /** list of messages. The messages are added to the back and taken * out from the front. */ struct dt_msg_entry* first, *last; + /** reference to the io thread to wakeup */ + struct dt_io_thread* dtio; }; /** @@ -105,6 +108,8 @@ struct dt_io_thread { void* event; /** the event is added */ int event_added; + /** event added is a write event */ + int event_added_is_write; /** check for nonblocking connect errors on fd */ int check_nb_connect; /** the buffer that currently getting written, or NULL if no From 86e1948afed289b555834c9094fafaaf15df3a40 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 13:38:10 +0100 Subject: [PATCH 033/235] dnstap io, fixup error exit of event add routines. --- dnstap/dtstream.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index a81a7abd5..bbf202c57 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -674,6 +674,8 @@ static void dtio_add_output_event_read(struct dt_io_thread* dtio) ub_event_del_bits(dtio->event, UB_EV_WRITE); if(ub_event_add(dtio->event, NULL) != 0) { log_err("dnstap io: out of memory (adding event)"); + dtio->event_added = 0; + dtio->event_added_is_write = 0; return; } dtio->event_added = 1; @@ -693,6 +695,8 @@ static void dtio_add_output_event_write(struct dt_io_thread* dtio) ub_event_add_bits(dtio->event, UB_EV_WRITE); if(ub_event_add(dtio->event, NULL) != 0) { log_err("dnstap io: out of memory (adding event)"); + dtio->event_added = 0; + dtio->event_added_is_write = 0; return; } dtio->event_added = 1; From 299086d44737749f37bca5ee88c5aebc2c935eb1 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 15:11:08 +0100 Subject: [PATCH 034/235] dnstap io, reconnect attempts with exponential backoff to once per second. --- dnstap/dtstream.c | 104 ++++++++++++++++++++++++++++++++++++++++++++-- dnstap/dtstream.h | 10 +++++ 2 files changed, 111 insertions(+), 3 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index bbf202c57..f3d50a027 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -52,6 +52,11 @@ /** number of messages to process in one output callback */ #define DTIO_MESSAGES_PER_CALLBACK 100 +/** the msec to wait for reconnect (if not immediate, the first attempt) */ +#define DTIO_RECONNECT_TIMEOUT_MIN 10 +/** the msec to wait for reconnect max after backoff */ +#define DTIO_RECONNECT_TIMEOUT_MAX 1000 + /** DTIO command channel commands */ enum { /** DTIO command channel stop */ @@ -60,6 +65,13 @@ enum { DTIO_COMMAND_WAKEUP = 1 } dtio_channel_command; +/** open the output channel */ +static void dtio_open_output(struct dt_io_thread* dtio); +/** add output event for read and write */ +static void dtio_add_output_event_write(struct dt_io_thread* dtio); +/** start reconnection attempts */ +static void dtio_reconnect_enable(struct dt_io_thread* dtio); + void* fstrm_create_control_frame_start(char* contenttype, size_t* len) { uint32_t* control; @@ -359,6 +371,73 @@ static int dtio_find_msg(struct dt_io_thread* dtio) return 0; } +/** callback for the dnstap reconnect, to start reconnecting to output */ +static void dtio_reconnect_timeout_cb(int ATTR_UNUSED(fd), + short ATTR_UNUSED(bits), void* arg) +{ + struct dt_io_thread* dtio = (struct dt_io_thread*)arg; + dtio->reconnect_is_added = 0; + verbose(VERB_ALGO, "dnstap io: reconnect timer"); + + dtio_open_output(dtio); + if(dtio->event) { + dtio_add_output_event_write(dtio); + /* nothing wrong so far, wait on the output event */ + return; + } + /* exponential backoff and retry on timer */ + dtio_reconnect_enable(dtio); +} + +/** attempt to reconnect to the output, after a timeout */ +static void dtio_reconnect_enable(struct dt_io_thread* dtio) +{ + struct timeval tv; + int msec; + if(dtio->reconnect_is_added) + return; /* already done */ + + /* exponential backoff, store the value for next timeout */ + msec = dtio->reconnect_timeout; + if(msec == 0) { + dtio->reconnect_timeout = DTIO_RECONNECT_TIMEOUT_MIN; + } else { + dtio->reconnect_timeout = msec*2; + if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MAX) + dtio->reconnect_timeout = DTIO_RECONNECT_TIMEOUT_MAX; + } + verbose(VERB_ALGO, "dnstap io: set reconnect attempt after %d msec", + msec); + + /* setup wait timer */ + memset(&tv, 0, sizeof(tv)); + tv.tv_sec = msec/1000; + tv.tv_usec = (msec%1000)*1000; + if(ub_timer_add(dtio->reconnect_timer, dtio->event_base, + &dtio_reconnect_timeout_cb, dtio, &tv) != 0) { + log_err("dnstap io: could not reconnect ev timer add"); + return; + } + dtio->reconnect_is_added = 1; +} + +/** remove dtio reconnect timer */ +static void dtio_reconnect_del(struct dt_io_thread* dtio) +{ + if(!dtio->reconnect_is_added) + return; + ub_timer_del(dtio->reconnect_timer); + dtio->reconnect_is_added = 0; +} + +/** clear the reconnect exponential backoff timer. + * We have successfully connected so we can try again with short timeouts. */ +static void dtio_reconnect_clear(struct dt_io_thread* dtio) +{ + dtio->reconnect_timeout = 0; + dtio_reconnect_del(dtio); +} + /** delete the current message in the dtio, and reset counters */ static void dtio_cur_msg_free(struct dt_io_thread* dtio) { @@ -399,6 +478,7 @@ static void dtio_close_output(struct dt_io_thread* dtio) if(dtio->cur_msg) { dtio_cur_msg_free(dtio); } + dtio_reconnect_enable(dtio); } /** check for pending nonblocking connect errors, @@ -443,6 +523,7 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) } verbose(VERB_ALGO, "dnstap io: connected to \"%s\"", dtio->socket_path); + dtio_reconnect_clear(dtio); dtio->check_nb_connect = 0; return 1; /* everything okay */ } @@ -822,6 +903,17 @@ static void dtio_setup_cmd(struct dt_io_thread* dtio) } } +/** setup the reconnect event for dnstap io */ +static void dtio_setup_reconnect(struct dt_io_thread* dtio) +{ + dtio_reconnect_clear(dtio); + dtio->reconnect_timer = ub_event_new(dtio->event_base, -1, + UB_EV_TIMEOUT, &dtio_reconnect_timeout_cb, dtio); + if(!dtio->reconnect_timer) { + fatal_exit("dnstap io: out of memory"); + } +} + /** * structure to keep track of information during stop flush */ @@ -1032,6 +1124,8 @@ static void dtio_desetup(struct dt_io_thread* dtio) _close(dtio->commandpipe[0]); #endif dtio->commandpipe[0] = -1; + dtio_reconnect_del(dtio); + ub_event_free(dtio->reconnect_timer); dtio_cur_msg_free(dtio); ub_event_base_free(dtio->event_base); } @@ -1096,6 +1190,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) closesocket(dtio->fd); #endif dtio->fd = -1; + dtio_reconnect_enable(dtio); return; } dtio->check_nb_connect = 1; @@ -1105,19 +1200,21 @@ static void dtio_open_output(struct dt_io_thread* dtio) UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_output_cb, dtio); if(!ev) { + log_err("dnstap io: out of memory"); #ifndef USE_WINSOCK close(dtio->fd); #else closesocket(dtio->fd); #endif dtio->fd = -1; - log_err("dnstap io: out of memory"); + dtio_reconnect_enable(dtio); return; } dtio->event = ev; /* setup protocol control message to start */ if(!dtio_control_start_send(dtio)) { + log_err("dnstap io: out of memory"); ub_event_free(dtio->event); dtio->event = NULL; #ifndef USE_WINSOCK @@ -1126,7 +1223,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) closesocket(dtio->fd); #endif dtio->fd = -1; - log_err("dnstap io: out of memory"); + dtio_reconnect_enable(dtio); return; } } @@ -1139,11 +1236,12 @@ static void* dnstap_io(void* arg) struct timeval now; /* setup */ + verbose(VERB_ALGO, "start dnstap io thread"); dtio_setup_base(dtio, &secs, &now); dtio_setup_cmd(dtio); + dtio_setup_reconnect(dtio); dtio_open_output(dtio); dtio_add_output_event_write(dtio); - verbose(VERB_ALGO, "start dnstap io thread"); /* run */ if(ub_event_base_dispatch(dtio->event_base) < 0) { diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 77bda6ae0..2f1546527 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -102,6 +102,7 @@ struct dt_io_thread { struct dt_io_list_item* io_list_iter; /** thread id, of the io thread */ ub_thread_type tid; + /** file descriptor that the thread writes to */ int fd; /** event structure that the thread uses */ @@ -112,6 +113,7 @@ struct dt_io_thread { int event_added_is_write; /** check for nonblocking connect errors on fd */ int check_nb_connect; + /** the buffer that currently getting written, or NULL if no * (partial) message written now */ void* cur_msg; @@ -131,6 +133,14 @@ struct dt_io_thread { /** the io thread wants to exit */ int want_to_exit; + /** the timer event for connection retries */ + void* reconnect_timer; + /** if the reconnect timer is added to the event base */ + int reconnect_is_added; + /** the current reconnection timeout, it is increased with + * exponential backoff, in msec */ + int reconnect_timeout; + /** If the log server is connected to over unix domain sockets, * eg. a file is named that is created to log onto. */ int upstream_is_unix; From b33df3cc637643f71cbc9b08ead08277069021ee Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 15:17:43 +0100 Subject: [PATCH 035/235] in stop flush use timer_del to remove timer. --- dnstap/dtstream.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index f3d50a027..60cb04567 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1070,7 +1070,7 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) UB_EV_WRITE | UB_EV_PERSIST, &dtio_stop_ev_cb, &info); if(!stopev) { log_err("dnstap io: malloc failure"); - ub_event_del(timer); + ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); return; @@ -1078,7 +1078,7 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) if(ub_event_add(stopev, NULL) != 0) { log_err("dnstap io: cannot event_add"); ub_event_free(stopev); - ub_event_del(timer); + ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); return; @@ -1089,7 +1089,7 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) log_err("dnstap io: malloc failure"); ub_event_del(stopev); ub_event_free(stopev); - ub_event_del(timer); + ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); return; @@ -1105,7 +1105,7 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) free(info.stop_frame); ub_event_del(stopev); ub_event_free(stopev); - ub_event_del(timer); + ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); } From 1042134eec0a1ddaca364c7794b467223934f197 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 15:39:27 +0100 Subject: [PATCH 036/235] dnstap io, failure to add event closes and attempts to reopen the output. --- dnstap/dtstream.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 60cb04567..aa590ee8f 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -757,6 +757,8 @@ static void dtio_add_output_event_read(struct dt_io_thread* dtio) log_err("dnstap io: out of memory (adding event)"); dtio->event_added = 0; dtio->event_added_is_write = 0; + /* close output and start reattempts to open it */ + dtio_close_output(dtio); return; } dtio->event_added = 1; @@ -778,6 +780,8 @@ static void dtio_add_output_event_write(struct dt_io_thread* dtio) log_err("dnstap io: out of memory (adding event)"); dtio->event_added = 0; dtio->event_added_is_write = 0; + /* close output and start reattempts to open it */ + dtio_close_output(dtio); return; } dtio->event_added = 1; From 4c64c4b78e15d19ec5a2b169e12ab9ec0f8e8165 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 15:49:36 +0100 Subject: [PATCH 037/235] dnstap io, remove libfstrm calls from dnstap.c. --- dnstap/dnstap.c | 45 ++------------------------------------------- dnstap/dnstap.h | 6 ------ 2 files changed, 2 insertions(+), 49 deletions(-) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index d8bc155aa..0cf3ff7b5 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -129,16 +129,10 @@ check_socket_file(const char* socket_path) } struct dt_env * -dt_create(const char *socket_path, unsigned num_workers, struct config_file* cfg) +dt_create(const char *socket_path, unsigned num_workers, + struct config_file* cfg) { -#ifdef UNBOUND_DEBUG - fstrm_res res; -#endif struct dt_env *env; - struct fstrm_iothr_options *fopt; - struct fstrm_unix_writer_options *fuwopt; - struct fstrm_writer *fw; - struct fstrm_writer_options *fwopt; verbose(VERB_OPS, "attempting to connect to dnstap socket %s", socket_path); @@ -150,40 +144,9 @@ dt_create(const char *socket_path, unsigned num_workers, struct config_file* cfg if (!env) return NULL; - fwopt = fstrm_writer_options_init(); -#ifdef UNBOUND_DEBUG - res = -#else - (void) -#endif - fstrm_writer_options_add_content_type(fwopt, - DNSTAP_CONTENT_TYPE, sizeof(DNSTAP_CONTENT_TYPE) - 1); - log_assert(res == fstrm_res_success); - - fuwopt = fstrm_unix_writer_options_init(); - fstrm_unix_writer_options_set_socket_path(fuwopt, socket_path); - - fw = fstrm_unix_writer_init(fuwopt, fwopt); - log_assert(fw != NULL); - - fopt = fstrm_iothr_options_init(); - fstrm_iothr_options_set_num_input_queues(fopt, num_workers); - env->iothr = fstrm_iothr_init(fopt, &fw); - if (env->iothr == NULL) { - verbose(VERB_DETAIL, "dt_create: fstrm_iothr_init() failed"); - fstrm_writer_destroy(&fw); - free(env); - env = NULL; - } - fstrm_iothr_options_destroy(&fopt); - fstrm_unix_writer_options_destroy(&fuwopt); - fstrm_writer_options_destroy(&fwopt); - env->dtio = dt_io_thread_create(); if(!env->dtio) { log_err("malloc failure"); - fstrm_writer_destroy(&fw); - fstrm_iothr_destroy(&env->iothr); free(env); return NULL; } @@ -276,9 +239,6 @@ dt_apply_cfg(struct dt_env *env, struct config_file *cfg) int dt_init(struct dt_env *env) { - env->ioq = fstrm_iothr_get_input_queue(env->iothr); - if (env->ioq == NULL) - return 0; env->msgqueue = dt_msg_queue_create(); if(!env->msgqueue) { log_err("malloc failure"); @@ -304,7 +264,6 @@ dt_delete(struct dt_env *env) if (!env) return; verbose(VERB_OPS, "closing dnstap socket"); - fstrm_iothr_destroy(&env->iothr); dt_io_thread_delete(env->dtio); free(env->identity); free(env->version); diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h index 428691ed9..c87a549aa 100644 --- a/dnstap/dnstap.h +++ b/dnstap/dnstap.h @@ -40,19 +40,13 @@ #ifdef USE_DNSTAP struct config_file; -struct fstrm_io; -struct fstrm_queue; struct sldns_buffer; struct dt_msg_queue; struct dt_env { - /** dnstap I/O thread */ - struct fstrm_iothr *iothr; /** the io thread (made by the struct daemon) */ struct dt_io_thread* dtio; - /** dnstap I/O thread input queue */ - struct fstrm_iothr_queue *ioq; /** valid in worker struct, not in daemon struct, the per-worker * message list */ struct dt_msg_queue* msgqueue; From 874c349b44618f9e3839be935eec2e36d7bcb428 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 15:56:12 +0100 Subject: [PATCH 038/235] dnstap io, remove --with-libfstrm, it is not required to build dnstap support. protobuf-c is still used for handling the dnstap encoding. --- Makefile.in | 2 +- configure | 71 +----------------------------------------------- dnstap/dnstap.c | 1 - dnstap/dnstap.m4 | 9 +----- 4 files changed, 3 insertions(+), 80 deletions(-) diff --git a/Makefile.in b/Makefile.in index 65dc20663..f2444dc65 100644 --- a/Makefile.in +++ b/Makefile.in @@ -77,7 +77,7 @@ LINT=splint LINTFLAGS=+quiet -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_int=unsigned -Du_char=uint8_t -preproc -Drlimit=rlimit64 -D__gnuc_va_list=va_list -formatcode #-Dglob64=glob -Dglobfree64=globfree # compat with openssl linux edition. -LINTFLAGS+="-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"ECDSA_SIG=DSA_SIG" -Dfstrm_res=int +LINTFLAGS+="-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"ECDSA_SIG=DSA_SIG" # compat with NetBSD LINTFLAGS+=@NETBSD_LINTFLAGS@ # compat with OpenBSD diff --git a/configure b/configure index 12d042492..0f49db296 100755 --- a/configure +++ b/configure @@ -880,7 +880,6 @@ enable_allsymbols enable_dnstap with_dnstap_socket_path with_protobuf_c -with_libfstrm enable_dnscrypt with_libsodium enable_cachedb @@ -1569,7 +1568,7 @@ Optional Features: --enable-allsymbols export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols - --enable-dnstap Enable dnstap support (requires fstrm, protobuf-c) + --enable-dnstap Enable dnstap support (requires protobuf-c) --enable-dnscrypt Enable dnscrypt support (requires libsodium) --enable-cachedb enable cachedb module that can use external cache storage @@ -1630,7 +1629,6 @@ Optional Packages: --with-dnstap-socket-path=pathname set default dnstap socket path --with-protobuf-c=path Path where protobuf-c is installed, for dnstap - --with-libfstrm=path Path where libfstrm is installed, for dnstap --with-libsodium=path Path where libsodium is installed, for dnscrypt --with-libmnl=path specify explicit path for libmnl. --with-libunbound-only do not build daemon and tool programs @@ -20795,73 +20793,6 @@ else fi - -# Check whether --with-libfstrm was given. -if test "${with_libfstrm+set}" = set; then : - withval=$with_libfstrm; - CFLAGS="$CFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib" - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fstrm_iothr_init" >&5 -$as_echo_n "checking for library containing fstrm_iothr_init... " >&6; } -if ${ac_cv_search_fstrm_iothr_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char fstrm_iothr_init (); -int -main () -{ -return fstrm_iothr_init (); - ; - return 0; -} -_ACEOF -for ac_lib in '' fstrm; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_fstrm_iothr_init=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_fstrm_iothr_init+:} false; then : - break -fi -done -if ${ac_cv_search_fstrm_iothr_init+:} false; then : - -else - ac_cv_search_fstrm_iothr_init=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fstrm_iothr_init" >&5 -$as_echo "$ac_cv_search_fstrm_iothr_init" >&6; } -ac_res=$ac_cv_search_fstrm_iothr_init -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -else - as_fn_error $? "The fstrm library was not found. Please install fstrm!" "$LINENO" 5 -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 : diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index 0cf3ff7b5..c06644eae 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -49,7 +49,6 @@ #include "util/netevent.h" #include "util/log.h" -#include #include #include "dnstap/dnstap.h" diff --git a/dnstap/dnstap.m4 b/dnstap/dnstap.m4 index 5b78b3e26..ba723e0be 100644 --- a/dnstap/dnstap.m4 +++ b/dnstap/dnstap.m4 @@ -7,7 +7,7 @@ AC_DEFUN([dt_DNSTAP], [ AC_ARG_ENABLE([dnstap], AS_HELP_STRING([--enable-dnstap], - [Enable dnstap support (requires fstrm, protobuf-c)]), + [Enable dnstap support (requires protobuf-c)]), [opt_dnstap=$enableval], [opt_dnstap=no]) AC_ARG_WITH([dnstap-socket-path], @@ -40,13 +40,6 @@ AC_DEFUN([dt_DNSTAP], fi fi ]) - AC_ARG_WITH([libfstrm], AC_HELP_STRING([--with-libfstrm=path], - [Path where libfstrm is installed, for dnstap]), [ - CFLAGS="$CFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib" - ]) - AC_SEARCH_LIBS([fstrm_iothr_init], [fstrm], [], - AC_MSG_ERROR([The fstrm library was not found. Please install fstrm!])) AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [], AC_MSG_ERROR([The protobuf-c library was not found. Please install protobuf-c!])) $2 From 8f2f004778301c75cc4231f104d3096dc35ac941 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 16:49:44 +0100 Subject: [PATCH 039/235] dnstap io, fix event reference in winevent wouldblock call. --- dnstap/dtstream.c | 10 ++++++---- dnstap/dtstream.h | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index aa590ee8f..8a4eefbf2 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -506,7 +506,7 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) if(error == WSAEINPROGRESS) { return 0; /* try again later */ } else if(error == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(dtio->event, UB_EV_WRITE); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; /* try again later */ } #endif @@ -555,7 +555,7 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, if(WSAGetLastError() == WSAEINPROGRESS) return 0; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(dtio->event, UB_EV_WRITE); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; } log_err("dnstap io: failed send: %s", @@ -600,7 +600,7 @@ static int dtio_write_with_writev(struct dt_io_thread* dtio) if(WSAGetLastError() == WSAEINPROGRESS) return 0; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(dtio->event, UB_EV_WRITE); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; } log_err("dnstap io: failed writev: %s", @@ -720,7 +720,7 @@ static int dtio_check_close(struct dt_io_thread* dtio) if(WSAGetLastError() == WSAEINPROGRESS) { return 1; /* try later */ } else if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(dtio->event, UB_EV_READ); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_READ); return 1; /* try later */ } #endif @@ -1098,6 +1098,7 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) ub_event_base_free(info.base); return; } + dtio->stop_flush_event = stopev; /* wait briefly, or until finished */ verbose(VERB_ALGO, "dnstap io: stop flush started"); @@ -1107,6 +1108,7 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) } verbose(VERB_ALGO, "dnstap io: stop flush ended"); free(info.stop_frame); + dtio->stop_flush_event = NULL; ub_event_del(stopev); ub_event_free(stopev); ub_timer_del(timer); diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 2f1546527..3386a1897 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -133,6 +133,9 @@ struct dt_io_thread { /** the io thread wants to exit */ int want_to_exit; + /** in stop flush, this is nonNULL and references the stop_ev */ + void* stop_flush_event; + /** the timer event for connection retries */ void* reconnect_timer; /** if the reconnect timer is added to the event base */ From cf5aa85f2932d2a4c6a197fa564b32fb1f079bbb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 23 Jan 2020 16:51:57 +0100 Subject: [PATCH 040/235] dnstap io, nicer layout for wouldblock calls. --- dnstap/dtstream.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 8a4eefbf2..a62de0a63 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -506,7 +506,8 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) if(error == WSAEINPROGRESS) { return 0; /* try again later */ } else if(error == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_WRITE); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event? + dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; /* try again later */ } #endif @@ -555,7 +556,9 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, if(WSAGetLastError() == WSAEINPROGRESS) return 0; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_WRITE); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event? + dtio->stop_flush_event:dtio->event), + UB_EV_WRITE); return 0; } log_err("dnstap io: failed send: %s", @@ -600,7 +603,9 @@ static int dtio_write_with_writev(struct dt_io_thread* dtio) if(WSAGetLastError() == WSAEINPROGRESS) return 0; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_WRITE); + ub_winsock_tcp_wouldblock((dtio->stop_flush_event? + dtio->stop_flush_event:dtio->event), + UB_EV_WRITE); return 0; } log_err("dnstap io: failed writev: %s", @@ -720,7 +725,10 @@ static int dtio_check_close(struct dt_io_thread* dtio) if(WSAGetLastError() == WSAEINPROGRESS) { return 1; /* try later */ } else if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock((dtio->stop_flush_event?dtio->stop_flush_event:dtio->event), UB_EV_READ); + ub_winsock_tcp_wouldblock( + (dtio->stop_flush_event? + dtio->stop_flush_event:dtio->event), + UB_EV_READ); return 1; /* try later */ } #endif From c3712a288fe7c02f8897d66deb0302053e6f03be Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 28 Jan 2020 12:21:05 +0100 Subject: [PATCH 041/235] merge master into framestreams, autoconf again. --- configure | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/configure b/configure index 221924a6c..d9ca1bcc0 100755 --- a/configure +++ b/configure @@ -803,7 +803,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -950,7 +949,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1203,15 +1201,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1349,7 +1338,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1502,7 +1491,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -15658,7 +15646,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15704,7 +15692,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15728,7 +15716,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15773,7 +15761,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15797,7 +15785,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; From b3bf4168886c964cfd9526a93e2b6648720843ae Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 28 Jan 2020 12:46:08 +0100 Subject: [PATCH 042/235] dnstap io, fix for msg queue cleanup and make test. --- dnstap/dtstream.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index a62de0a63..d03828123 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -286,7 +286,9 @@ int dt_io_thread_register_queue(struct dt_io_thread* dtio, void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, struct dt_msg_queue* mq) { - struct dt_io_list_item* item=dtio->io_list, *prev=NULL; + struct dt_io_list_item* item, *prev=NULL; + if(!dtio) return; + item = dtio->io_list; while(item) { if(item->queue == mq) { /* found it */ From bb81684206d730cfc46922e7257c120d81d6dbc5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 28 Jan 2020 12:48:36 +0100 Subject: [PATCH 043/235] dnstap io, fix memory leak if dnstap queue full. --- dnstap/dtstream.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index d03828123..25148f227 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -227,6 +227,7 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) /* drop */ lock_basic_unlock(&mq->lock); free(buf); + free(entry); return; } mq->cursize += len; From e13675d6cbb1c2b72f9a0b1b938f9df373636179 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 28 Jan 2020 14:24:14 +0100 Subject: [PATCH 044/235] dnstap io, windows portability improvements. --- dnstap/dtstream.c | 7 ++++-- dnstap/unbound-dnstap-socket.c | 45 ++++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 25148f227..47f4473be 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -49,6 +49,7 @@ #ifdef HAVE_SYS_UN_H #include #endif +#include /** number of messages to process in one output callback */ #define DTIO_MESSAGES_PER_CALLBACK 100 @@ -549,7 +550,7 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, return 0; } } - ret = send(dtio->fd, buf, len, 0); + ret = send(dtio->fd, (void*)buf, len, 0); if(ret == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) @@ -719,7 +720,7 @@ static int dtio_check_close(struct dt_io_thread* dtio) uint8_t buf[1024]; if(dtio->fd == -1) return 0; while(1) { - r = recv(dtio->fd, buf, sizeof(buf), 0); + r = recv(dtio->fd, (void*)buf, sizeof(buf), 0); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) @@ -1169,6 +1170,7 @@ static int dtio_control_start_send(struct dt_io_thread* dtio) /** open the output file descriptor */ static void dtio_open_output(struct dt_io_thread* dtio) { +#ifdef HAVE_SYS_UN_H struct ub_event* ev; struct sockaddr_un s; dtio->fd = socket(AF_LOCAL, SOCK_STREAM, 0); @@ -1243,6 +1245,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio_reconnect_enable(dtio); return; } +#endif /* HAVE_SYS_UN_H */ } /** the IO thread function for the DNSTAP IO */ diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 96e798282..5a7a0cfa0 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -80,6 +80,14 @@ static void usage(char* argv[]) /** long format option, for multiline printout per message */ static int longformat = 0; +/** main tap callback data */ +struct main_tap_data { + /** the event base (to loopexit) */ + struct ub_event_base* base; + /** the event (that is accept()ed) */ + struct ub_event* ev; +}; + /** tap callback variables */ struct tap_data { /** the fd */ @@ -252,12 +260,14 @@ static char* tv_to_str(protobuf_c_boolean has_time_sec, uint64_t time_sec, { char buf[64], buf2[256]; struct timeval tv; + time_t time_t_sec; memset(&tv, 0, sizeof(tv)); if(has_time_sec) tv.tv_sec = time_sec; if(has_time_nsec) tv.tv_usec = time_nsec; buf[0]=0; - (void)ctime_r(&tv.tv_sec, buf); + time_t_sec = tv.tv_sec; + (void)ctime_r(&time_t_sec, buf); snprintf(buf2, sizeof(buf2), "%u.%9.9u %s", (unsigned)time_sec, (unsigned)time_nsec, buf); return strdup(buf2); @@ -364,7 +374,7 @@ static void log_data_frame(uint8_t* pkt, size_t len) /** receive bytes from fd, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ -static ssize_t receive_bytes(int fd, void* buf, size_t len) +static ssize_t receive_bytes(int fd, void* buf, size_t len, struct ub_event* ev) { ssize_t ret = recv(fd, buf, len, 0); if(ret == 0) { @@ -374,6 +384,7 @@ static ssize_t receive_bytes(int fd, void* buf, size_t len) } else if(ret == -1) { /* error */ #ifndef USE_WINSOCK + (void)ev; if(errno == EINTR || errno == EAGAIN) return -1; log_err("could not recv: %s", strerror(errno)); @@ -381,8 +392,7 @@ static ssize_t receive_bytes(int fd, void* buf, size_t len) if(WSAGetLastError() == WSAEINPROGRESS) return -1; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(data->ev, - UB_EV_READ); + ub_winsock_tcp_wouldblock(ev, UB_EV_READ); return -1; } log_err("could not recv: %s", @@ -433,7 +443,7 @@ static int reply_with_accept(int fd) strlen(DNSTAP_CONTENT_TYPE)); fd_set_block(fd); - if(send(fd, acceptframe, len, 0) == -1) { + if(send(fd, (void*)acceptframe, len, 0) == -1) { #ifndef USE_WINSOCK log_err("send failed: %s", strerror(errno)); #else @@ -468,7 +478,7 @@ static int reply_with_finish(int fd) finishframe[2] = htonl(FSTRM_CONTROL_FRAME_FINISH); fd_set_block(fd); - if(send(fd, finishframe, len, 0) == -1) { + if(send(fd, (void*)finishframe, len, 0) == -1) { #ifndef USE_WINSOCK log_err("send failed: %s", strerror(errno)); #else @@ -491,7 +501,8 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; ssize_t ret = receive_bytes(fd, - ((uint8_t*)&l)+data->len_done, 4-data->len_done); + ((uint8_t*)&l)+data->len_done, 4-data->len_done, + data->ev); if(verbosity>=4) log_info("s recv %d", (int)ret); if(ret == 0) { /* closed or error */ @@ -526,7 +537,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) /* we want to read the full length now */ if(data->data_done < data->len) { ssize_t r = receive_bytes(fd, data->frame + data->data_done, - data->len - data->data_done); + data->len - data->data_done, data->ev); if(verbosity>=4) log_info("f recv %d", (int)r); if(r == 0) { /* closed or error */ @@ -576,10 +587,10 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) /** callback for main listening file descriptor */ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) { + struct main_tap_data* maindata = (struct main_tap_data*)arg; struct tap_data* data; struct sockaddr_storage addr; socklen_t addrlen = (socklen_t)sizeof(addr); - struct ub_event_base* base = (struct ub_event_base*)arg; int s = accept(fd, (struct sockaddr*)&addr, &addrlen); if(s == -1) { #ifndef USE_WINSOCK @@ -602,17 +613,18 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) WSAGetLastError() == WSAECONNRESET) return; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); + ub_winsock_tcp_wouldblock(maindata->ev, UB_EV_READ); return; } log_err_addr("accept failed", wsa_strerror(WSAGetLastError()), - addr, *addrlen); + &addr, addrlen); #endif return; } fd_set_nonblock(s); if(verbosity) { if(addr.ss_family == AF_LOCAL) { +#ifdef HAVE_SYS_UN_H struct sockaddr_un* usock = calloc(1, sizeof(struct sockaddr_un) + 1); if(usock) { socklen_t ulen = sizeof(struct sockaddr_un); @@ -625,6 +637,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) } else { log_info("accepted new dnstap client"); } +#endif /* HAVE_SYS_UN_H */ } else { log_info("accepted new dnstap client"); } @@ -633,7 +646,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) data = calloc(1, sizeof(*data)); if(!data) fatal_exit("out of memory"); data->fd = s; - data->ev = ub_event_new(base, s, UB_EV_READ | UB_EV_PERSIST, + data->ev = ub_event_new(maindata->base, s, UB_EV_READ | UB_EV_PERSIST, &tap_callback, data); if(!data->ev) fatal_exit("could not ub_event_new"); if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add"); @@ -653,20 +666,25 @@ setup_and_run(char* socketpath) int fd; time_t secs = 0; struct timeval now; + struct main_tap_data* maindata; struct ub_event_base* base; const char *evnm="event", *evsys="", *evmethod=""; struct ub_event *ev; + maindata = calloc(1, sizeof(*maindata)); + if(!maindata) fatal_exit("out of memory"); memset(&now, 0, sizeof(now)); base = ub_default_event_base(1, &secs, &now); if(!base) fatal_exit("could not create ub_event base"); + maindata->base = base; fd = setup_fd(socketpath); ub_get_event_sys(base, &evnm, &evsys, &evmethod); if(verbosity) log_info("%s %s uses %s method", evnm, evsys, evmethod); ev = ub_event_new(base, fd, UB_EV_READ | UB_EV_PERSIST, - &mainfdcallback, base); + &mainfdcallback, maindata); if(!ev) fatal_exit("could not ub_event_new"); if(ub_event_add(ev, NULL) != 0) fatal_exit("could not ub_event_add"); + maindata->ev = ev; ub_event_base_dispatch(base); @@ -674,6 +692,7 @@ setup_and_run(char* socketpath) ub_event_free(ev); ub_event_base_free(base); close(fd); + free(maindata); } /** getopt global, in case header files fail to declare it. */ From 989922631ae7f6d31a93ba454b6f4364bac64694 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 28 Jan 2020 15:09:21 +0100 Subject: [PATCH 045/235] dnstap io, fix exit when compiled without threads. --- dnstap/dnstap.c | 1 - dnstap/dtstream.c | 7 +++++-- dnstap/dtstream.h | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index c06644eae..810f3200a 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -262,7 +262,6 @@ dt_delete(struct dt_env *env) { if (!env) return; - verbose(VERB_OPS, "closing dnstap socket"); dt_io_thread_delete(env->dtio); free(env->identity); free(env->version); diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 47f4473be..f21641049 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -162,7 +162,7 @@ static void dtio_wakeup(struct dt_io_thread* dtio) { uint8_t cmd = DTIO_COMMAND_WAKEUP; if(!dtio) return; - if(!dtio->event_base) return; /* not started */ + if(!dtio->started) return; while(1) { ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); @@ -1292,6 +1292,7 @@ int dt_io_thread_start(struct dt_io_thread* dtio) #endif /* start the thread */ + dtio->started = 1; ub_thread_create(&dtio->tid, dnstap_io, dtio); return 1; } @@ -1300,7 +1301,8 @@ void dt_io_thread_stop(struct dt_io_thread* dtio) { uint8_t cmd = DTIO_COMMAND_STOP; if(!dtio) return; - if(!dtio->event_base) return; /* not started */ + if(!dtio->started) return; + verbose(VERB_ALGO, "dnstap io: send stop cmd"); while(1) { ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); @@ -1321,6 +1323,7 @@ void dt_io_thread_stop(struct dt_io_thread* dtio) } break; } + dtio->started = 0; #ifndef USE_WINSOCK close(dtio->commandpipe[1]); diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 3386a1897..473479d8f 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -102,6 +102,8 @@ struct dt_io_thread { struct dt_io_list_item* io_list_iter; /** thread id, of the io thread */ ub_thread_type tid; + /** if the io processing has started */ + int started; /** file descriptor that the thread writes to */ int fd; From 1e4165d25be668118aa8421719af06ce8877fcd4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 28 Jan 2020 15:51:39 +0100 Subject: [PATCH 046/235] dnstap io, without threads, logs from the main event loop. --- daemon/worker.c | 5 +++-- dnstap/dtstream.c | 26 +++++++++++++++++++++++++- dnstap/dtstream.h | 5 ++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index d14409570..759fd0457 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1883,7 +1883,8 @@ worker_init(struct worker* worker, struct config_file *cfg, && worker->thread_num == 0 #endif ) { - if(!dt_io_thread_start(dtenv->dtio)) { + if(!dt_io_thread_start(dtenv->dtio, comm_base_internal( + worker->base))) { log_err("could not start dnstap io thread"); worker_delete(worker); return 0; @@ -1937,7 +1938,6 @@ worker_delete(struct worker* worker) wsvc_desetup_worker(worker); #endif /* UB_ON_WINDOWS */ } - comm_base_delete(worker->base); #ifdef USE_DNSTAP if(worker->daemon->cfg->dnstap #ifndef THREADS_DISABLED @@ -1948,6 +1948,7 @@ worker_delete(struct worker* worker) } dt_deinit(&worker->dtenv); #endif /* USE_DNSTAP */ + comm_base_delete(worker->base); ub_randfree(worker->rndstate); alloc_clear(&worker->alloc); regional_destroy(worker->env.scratch); diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index f21641049..9f7345b3a 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -398,6 +398,7 @@ static void dtio_reconnect_enable(struct dt_io_thread* dtio) { struct timeval tv; int msec; + if(dtio->want_to_exit) return; if(dtio->reconnect_is_added) return; /* already done */ @@ -892,6 +893,7 @@ static void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) } } +#ifndef THREADS_DISABLED /** setup the event base for the dnstap io thread */ static void dtio_setup_base(struct dt_io_thread* dtio, time_t* secs, struct timeval* now) @@ -902,6 +904,7 @@ static void dtio_setup_base(struct dt_io_thread* dtio, time_t* secs, fatal_exit("dnstap io: could not create event_base"); } } +#endif /* THREADS_DISABLED */ /** setup the cmd event for dnstap io */ static void dtio_setup_cmd(struct dt_io_thread* dtio) @@ -1145,7 +1148,9 @@ static void dtio_desetup(struct dt_io_thread* dtio) dtio_reconnect_del(dtio); ub_event_free(dtio->reconnect_timer); dtio_cur_msg_free(dtio); +#ifndef THREADS_DISABLED ub_event_base_free(dtio->event_base); +#endif } /** setup a start control message */ @@ -1248,6 +1253,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) #endif /* HAVE_SYS_UN_H */ } +#ifndef THREADS_DISABLED /** the IO thread function for the DNSTAP IO */ static void* dnstap_io(void* arg) { @@ -1274,8 +1280,9 @@ static void* dnstap_io(void* arg) dtio_desetup(dtio); return NULL; } +#endif /* THREADS_DISABLED */ -int dt_io_thread_start(struct dt_io_thread* dtio) +int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr) { /* set up the thread, can fail */ #ifndef USE_WINSOCK @@ -1293,17 +1300,28 @@ int dt_io_thread_start(struct dt_io_thread* dtio) /* start the thread */ dtio->started = 1; +#ifndef THREADS_DISABLED ub_thread_create(&dtio->tid, dnstap_io, dtio); +#else + dtio->event_base = event_base_nothr; + dtio_setup_cmd(dtio); + dtio_setup_reconnect(dtio); + dtio_open_output(dtio); + dtio_add_output_event_write(dtio); +#endif return 1; } void dt_io_thread_stop(struct dt_io_thread* dtio) { +#ifndef THREADS_DISABLED uint8_t cmd = DTIO_COMMAND_STOP; +#endif if(!dtio) return; if(!dtio->started) return; verbose(VERB_ALGO, "dnstap io: send stop cmd"); +#ifndef THREADS_DISABLED while(1) { ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); if(r == -1) { @@ -1324,6 +1342,7 @@ void dt_io_thread_stop(struct dt_io_thread* dtio) break; } dtio->started = 0; +#endif /* THREADS_DISABLED */ #ifndef USE_WINSOCK close(dtio->commandpipe[1]); @@ -1331,5 +1350,10 @@ void dt_io_thread_stop(struct dt_io_thread* dtio) _close(dtio->commandpipe[1]); #endif dtio->commandpipe[1] = -1; +#ifndef THREADS_DISABLED ub_thread_join(dtio->tid); +#else + dtio->want_to_exit = 1; + dtio_desetup(dtio); +#endif } diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 473479d8f..c2b898b86 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -345,9 +345,12 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, /** * Start the io thread * @param dtio: the io thread. + * @param event_base_nothr: the event base to attach the events to, in case + * we are running without threads. With threads, this is ignored + * and a thread is started to process the dnstap log messages. * @return false on failure. */ -int dt_io_thread_start(struct dt_io_thread* dtio); +int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr); /** * Stop the io thread From 565b3ef8cb91f665f6fb8f260b836f2069bb4bf4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 29 Jan 2020 16:22:32 +0100 Subject: [PATCH 047/235] dnstap io, fix compile warning when compiled with threading enabled. --- dnstap/dtstream.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 9f7345b3a..2fd99a05c 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1302,6 +1302,7 @@ int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr) dtio->started = 1; #ifndef THREADS_DISABLED ub_thread_create(&dtio->tid, dnstap_io, dtio); + (void)event_base_nothr; #else dtio->event_base = event_base_nothr; dtio_setup_cmd(dtio); From 0248872938e47e58c9c02ea7151b19986e90ada7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 29 Jan 2020 16:31:33 +0100 Subject: [PATCH 048/235] dnstap io, move setup with nothreads into its own routine. --- dnstap/dtstream.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 2fd99a05c..8d98c559d 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1253,6 +1253,15 @@ static void dtio_open_output(struct dt_io_thread* dtio) #endif /* HAVE_SYS_UN_H */ } +/** perform the setup of the writer thread on the established event_base */ +static void dtio_setup_on_base(struct dt_io_thread* dtio) +{ + dtio_setup_cmd(dtio); + dtio_setup_reconnect(dtio); + dtio_open_output(dtio); + dtio_add_output_event_write(dtio); +} + #ifndef THREADS_DISABLED /** the IO thread function for the DNSTAP IO */ static void* dnstap_io(void* arg) @@ -1264,10 +1273,7 @@ static void* dnstap_io(void* arg) /* setup */ verbose(VERB_ALGO, "start dnstap io thread"); dtio_setup_base(dtio, &secs, &now); - dtio_setup_cmd(dtio); - dtio_setup_reconnect(dtio); - dtio_open_output(dtio); - dtio_add_output_event_write(dtio); + dtio_setup_on_base(dtio); /* run */ if(ub_event_base_dispatch(dtio->event_base) < 0) { @@ -1305,10 +1311,7 @@ int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr) (void)event_base_nothr; #else dtio->event_base = event_base_nothr; - dtio_setup_cmd(dtio); - dtio_setup_reconnect(dtio); - dtio_open_output(dtio); - dtio_add_output_event_write(dtio); + dtio_setup_on_base(dtio); #endif return 1; } From ba4952470803e0da72f86bb745ca1b9c45f685e1 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 13:10:29 +0100 Subject: [PATCH 049/235] dnstap socket tool better help text. --- dnstap/unbound-dnstap-socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 5a7a0cfa0..a1705e1d7 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -70,7 +70,7 @@ static void usage(char* argv[]) printf("usage: %s [options]\n", argv[0]); printf(" Listen to dnstap messages\n"); printf("stdout has dnstap log, stderr has verbose server log\n"); - printf("-u use unix socket with this file name\n"); + printf("-u listen to unix socket with this file name\n"); printf("-l long format for DNS printout\n"); printf("-v more verbose log output\n"); printf("-h this help text\n"); From 9dbb5662b7be89debec51f0e977986802ef78cef Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 13:39:13 +0100 Subject: [PATCH 050/235] fix ascync test compile with lock checks. --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index f2444dc65..f461f3a25 100644 --- a/Makefile.in +++ b/Makefile.in @@ -218,7 +218,7 @@ MEMSTATS_OBJ_LINK=$(MEMSTATS_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) ASYNCLOOK_SRC=testcode/asynclook.c ASYNCLOOK_OBJ=asynclook.lo -ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@ +ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(CHECKLOCK_OBJ) $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@ STREAMTCP_SRC=testcode/streamtcp.c STREAMTCP_OBJ=streamtcp.lo STREAMTCP_OBJ_LINK=$(STREAMTCP_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ From fa49fc77e30183bd3b9ddf1441fb72e640a091f3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 13:39:31 +0100 Subject: [PATCH 051/235] fix dnstap io for lock checks, log identity (numworkers+1), and add locks around protected area modification in the message queue. --- daemon/worker.c | 2 +- dnstap/dtstream.c | 9 ++++++++- dnstap/dtstream.h | 8 +++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 759fd0457..85d5b7de0 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1884,7 +1884,7 @@ worker_init(struct worker* worker, struct config_file *cfg, #endif ) { if(!dt_io_thread_start(dtenv->dtio, comm_base_internal( - worker->base))) { + worker->base), worker->daemon->num)) { log_err("could not start dnstap io thread"); worker_delete(worker); return 0; diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 8d98c559d..bd4d39acb 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -277,7 +277,9 @@ int dt_io_thread_register_queue(struct dt_io_thread* dtio, { struct dt_io_list_item* item = malloc(sizeof(*item)); if(!item) return 0; + lock_basic_lock(&mq->lock); mq->dtio = dtio; + lock_basic_unlock(&mq->lock); item->queue = mq; item->next = dtio->io_list; dtio->io_list = item; @@ -297,7 +299,9 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, if(prev) prev->next = item->next; else dtio->io_list = item->next; /* the queue itself only registered, not deleted */ + lock_basic_lock(&item->queue->lock); item->queue->dtio = NULL; + lock_basic_unlock(&item->queue->lock); free(item); dtio->io_list_iter = NULL; return; @@ -1269,6 +1273,7 @@ static void* dnstap_io(void* arg) struct dt_io_thread* dtio = (struct dt_io_thread*)arg; time_t secs = 0; struct timeval now; + log_thread_set(&dtio->threadnum); /* setup */ verbose(VERB_ALGO, "start dnstap io thread"); @@ -1288,7 +1293,8 @@ static void* dnstap_io(void* arg) } #endif /* THREADS_DISABLED */ -int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr) +int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr, + int numworkers) { /* set up the thread, can fail */ #ifndef USE_WINSOCK @@ -1305,6 +1311,7 @@ int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr) #endif /* start the thread */ + dtio->threadnum = numworkers+1; dtio->started = 1; #ifndef THREADS_DISABLED ub_thread_create(&dtio->tid, dnstap_io, dtio); diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index c2b898b86..9309f5c0b 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -92,6 +92,9 @@ struct dt_msg_entry { * IO thread that reads from the queues and writes them. */ struct dt_io_thread { + /** the thread number for the dtio thread, + * must be first to cast thread arg to int* in checklock code. */ + int threadnum; /** event base, for event handling */ void* event_base; /** list of queues that is registered to get written */ @@ -348,9 +351,12 @@ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, * @param event_base_nothr: the event base to attach the events to, in case * we are running without threads. With threads, this is ignored * and a thread is started to process the dnstap log messages. + * @param numworkers: number of worker threads. The dnstap io thread is + * that number +1 as the threadnumber (in logs). * @return false on failure. */ -int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr); +int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr, + int numworkers); /** * Stop the io thread From 8aa338ba2d3dabc73dfa11d508dd05ae7a735ad6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 14:57:03 +0100 Subject: [PATCH 052/235] dnstap io, test threads in unit test. --- testdata/dnstap.tdir/dnstap.conf | 4 +++- testdata/dnstap.tdir/dnstap.post | 1 + testdata/dnstap.tdir/dnstap.test | 30 +++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/testdata/dnstap.tdir/dnstap.conf b/testdata/dnstap.tdir/dnstap.conf index 82250ec2d..5e8dfaefb 100644 --- a/testdata/dnstap.tdir/dnstap.conf +++ b/testdata/dnstap.tdir/dnstap.conf @@ -1,6 +1,6 @@ server: verbosity: 2 - num-threads: 1 + num-threads: 3 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ @@ -10,6 +10,8 @@ server: chroot: "" username: "" do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 diff --git a/testdata/dnstap.tdir/dnstap.post b/testdata/dnstap.tdir/dnstap.post index ec79e0427..6744b4b61 100644 --- a/testdata/dnstap.tdir/dnstap.post +++ b/testdata/dnstap.tdir/dnstap.post @@ -12,4 +12,5 @@ kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log exit 0 diff --git a/testdata/dnstap.tdir/dnstap.test b/testdata/dnstap.tdir/dnstap.test index 49f1d42a6..115b099d1 100644 --- a/testdata/dnstap.tdir/dnstap.test +++ b/testdata/dnstap.tdir/dnstap.test @@ -43,11 +43,39 @@ else exit 1 fi +echo "> make 10 queries to spread them over threads" +dig @127.0.0.1 -p $UNBOUND_PORT q1.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q2.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q3.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q4.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q5.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q6.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q7.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q8.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q9.example.net. +dig @127.0.0.1 -p $UNBOUND_PORT q10.example.net. +for x in q1 q2 q3 q4 5 q6 q7 q8 q9 q10; do + if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 10; fi + if grep "$x.example.net" tap.log; then echo "yes it is in tap.log"; + else + echo "$x.example.net. information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 + fi +done echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log -cat unbound.log echo "> OK" exit 0 From dd1b35412f0200343cabf57739922fcbf6b22f93 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 15:13:25 +0100 Subject: [PATCH 053/235] dnstap io, add reconnect test. --- testdata/dnstap.tdir/dnstap.test | 1 + .../dnstap_reconnect.conf | 40 ++++++++ .../dnstap_reconnect.dsc | 16 +++ .../dnstap_reconnect.post | 16 +++ .../dnstap_reconnect.pre | 55 +++++++++++ .../dnstap_reconnect.test | 98 +++++++++++++++++++ .../dnstap_reconnect.testns | 22 +++++ .../dnstap_reconnect.tdir/unbound_control.key | 15 +++ .../dnstap_reconnect.tdir/unbound_control.pem | 11 +++ .../dnstap_reconnect.tdir/unbound_server.key | 15 +++ .../dnstap_reconnect.tdir/unbound_server.pem | 11 +++ 11 files changed, 300 insertions(+) create mode 100644 testdata/dnstap_reconnect.tdir/dnstap_reconnect.conf create mode 100644 testdata/dnstap_reconnect.tdir/dnstap_reconnect.dsc create mode 100644 testdata/dnstap_reconnect.tdir/dnstap_reconnect.post create mode 100644 testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre create mode 100644 testdata/dnstap_reconnect.tdir/dnstap_reconnect.test create mode 100644 testdata/dnstap_reconnect.tdir/dnstap_reconnect.testns create mode 100644 testdata/dnstap_reconnect.tdir/unbound_control.key create mode 100644 testdata/dnstap_reconnect.tdir/unbound_control.pem create mode 100644 testdata/dnstap_reconnect.tdir/unbound_server.key create mode 100644 testdata/dnstap_reconnect.tdir/unbound_server.pem diff --git a/testdata/dnstap.tdir/dnstap.test b/testdata/dnstap.tdir/dnstap.test index 115b099d1..4ee4daf4c 100644 --- a/testdata/dnstap.tdir/dnstap.test +++ b/testdata/dnstap.tdir/dnstap.test @@ -4,6 +4,7 @@ # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test +. ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.conf b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.conf new file mode 100644 index 000000000..07febae5a --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.conf @@ -0,0 +1,40 @@ +server: + verbosity: 2 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.dsc b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.dsc new file mode 100644 index 000000000..c6b128006 --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_reconnect +Version: 1.0 +Description: test dnstap reconnect +CreationDate: Tue Jan 21 13:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_reconnect.pre +Post: dnstap_reconnect.post +Test: dnstap_reconnect.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post new file mode 100644 index 000000000..8474b3a02 --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post @@ -0,0 +1,16 @@ +# #-- dnstap_reconnect.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +exit 0 diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre new file mode 100644 index 000000000..a1aba4f35 --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre @@ -0,0 +1,55 @@ +# #-- dnstap_reconnect.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_reconnect.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up and make the dnstap.socket file +wait_server_up "tap.errlog" "creating unix socket" +if test ! -S dnstap.socket; then + echo "the dnstap.socket file does not exist!" +fi + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap_reconnect.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test new file mode 100644 index 000000000..94679bc66 --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test @@ -0,0 +1,98 @@ +# #-- dnstap_reconnect.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "" +echo "> test disconnect from the upstream server" + +kill_pid $DNSTAP_SOCKET_PID +dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. + +# bring log socket back up +$PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap2.errlog >tap2.log & +if test $? -ne 0; then + echo "could not start (again) unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up and make the dnstap.socket file +wait_server_up "tap2.errlog" "creating unix socket" + +dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. +sleep 2 +dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. + +for x in down up up2; do + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi + if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; + else + echo "$x.example.net. information not in tap2.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + echo "> tap2 logfiles" + cat tap2.log + cat tap2.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 + fi +done + +echo "> cat logfiles" +cat tap.log +cat tap.errlog +echo "> tap2 logfiles" +cat tap2.log +cat tap2.errlog +cat fwd.log +echo "> OK" +exit 0 diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.testns b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_reconnect.tdir/unbound_control.key b/testdata/dnstap_reconnect.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_control.pem b/testdata/dnstap_reconnect.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_server.key b/testdata/dnstap_reconnect.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_server.pem b/testdata/dnstap_reconnect.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_reconnect.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From a8264065f66efd9622b36d03ccaedd3ac2602adc Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 17:11:07 +0100 Subject: [PATCH 054/235] - put fstrm protocol contents in separate files, dnstap_fstrm.c and dnstap_fstrm.h --- Makefile.in | 1 + configure | 4 +- configure.ac | 4 +- dnstap/dnstap_fstrm.c | 91 +++++++++++++++++++++ dnstap/dnstap_fstrm.h | 142 +++++++++++++++++++++++++++++++++ dnstap/dtstream.c | 47 +---------- dnstap/dtstream.h | 94 ---------------------- dnstap/unbound-dnstap-socket.c | 1 + 8 files changed, 240 insertions(+), 144 deletions(-) create mode 100644 dnstap/dnstap_fstrm.c create mode 100644 dnstap/dnstap_fstrm.h diff --git a/Makefile.in b/Makefile.in index 792ea6185..24f6f5059 100644 --- a/Makefile.in +++ b/Makefile.in @@ -410,6 +410,7 @@ unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h +dnstap_fstrm.lo dnstap_fstrm.o: $(srcdir)/dnstap/dnstap_fstrm.c config.h $(srcdir)/dnstap/dnstap_fstrm.h unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h $(srcdir)/dnstap/dtstream.h # dnscrypt diff --git a/configure b/configure index 7832d0997..36f42644e 100755 --- a/configure +++ b/configure @@ -21039,9 +21039,9 @@ cat >>confdefs.h <<_ACEOF _ACEOF - DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dtstream.c" + DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c" - DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo dtstream.lo" + DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo" else diff --git a/configure.ac b/configure.ac index a9734f6f5..913703092 100644 --- a/configure.ac +++ b/configure.ac @@ -1688,8 +1688,8 @@ dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, ["$hdr_dnstap_socket_path"], [default dnstap socket path]) - AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dtstream.c"]) - AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dtstream.lo"]) + AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"]) + AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"]) ], [ AC_SUBST([ENABLE_DNSTAP], [0]) diff --git a/dnstap/dnstap_fstrm.c b/dnstap/dnstap_fstrm.c new file mode 100644 index 000000000..51ff71a6e --- /dev/null +++ b/dnstap/dnstap_fstrm.c @@ -0,0 +1,91 @@ +/* + * dnstap/dnstap_fstrm.c - Frame Streams protocol for dnstap + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * \file + * + * Definitions for the Frame Streams data transport protocol for + * dnstap message logs. + */ + +#include "config.h" +#include "dnstap/dnstap_fstrm.h" + +void* fstrm_create_control_frame_start(char* contenttype, size_t* len) +{ + uint32_t* control; + size_t n; + /* start framestream message: + * 4byte 0: control indicator. + * 4byte bigendian: length of control frame + * 4byte bigendian: type START + * 4byte bigendian: frame option: content-type + * 4byte bigendian: length of string + * string of content type (dnstap) + */ + n = 4+4+4+4+4+strlen(contenttype); + control = malloc(n); + if(!control) + return NULL; + control[0] = 0; + control[1] = htonl(4+4+4+strlen(contenttype)); + control[2] = htonl(FSTRM_CONTROL_FRAME_START); + control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); + control[4] = htonl(strlen(contenttype)); + memmove(&control[5], contenttype, strlen(contenttype)); + *len = n; + return control; +} + +void* fstrm_create_control_frame_stop(size_t* len) +{ + uint32_t* control; + size_t n; + /* stop framestream message: + * 4byte 0: control indicator. + * 4byte bigendian: length of control frame + * 4byte bigendian: type STOP + */ + n = 4+4+4; + control = malloc(n); + if(!control) + return NULL; + control[0] = 0; + control[1] = htonl(4); + control[2] = htonl(FSTRM_CONTROL_FRAME_STOP); + *len = n; + return control; +} diff --git a/dnstap/dnstap_fstrm.h b/dnstap/dnstap_fstrm.h new file mode 100644 index 000000000..3b70547f1 --- /dev/null +++ b/dnstap/dnstap_fstrm.h @@ -0,0 +1,142 @@ +/* + * dnstap/dnstap_fstrm.h - Frame Streams protocol for dnstap + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + * \file + * + * Definitions for the Frame Streams data transport protocol for + * dnstap message logs. + */ + +#ifndef DNSTAP_FSTRM_H +#define DNSTAP_FSTRM_H + +/* Frame Streams data transfer protocol encode for DNSTAP messages. + * The protocol looks to be specified in the libfstrm library. + * + * Quick writeup for DNSTAP usage, from reading fstrm/control.h eloquent + * comments and fstrm/control.c for some bytesize details (the content type + * length). + * + * The Frame Streams can be unidirectional or bi-directional. + * bi-directional streams use control frame types READY, ACCEPT and FINISH. + * uni-directional streams use control frame types START and STOP. + * unknown control frame types should be ignored by the receiver, they + * do not change the data frame encoding. + * + * bi-directional control frames implement a simple handshake protocol + * between sender and receiver. + * + * The uni-directional control frames have one start and one stop frame, + * before and after the data. The start frame can have a content type. + * The start and stop frames are not optional. + * + * data frames are preceded by 4byte length, bigendian. + * zero length data frames are not possible, they are an escape that + * signals the presence of a control frame. + * + * a control frame consists of 0 value in 4byte bigendian, this is really + * the data frame length, with 0 the escape sequence that indicates one + * control frame follows. + * Then, 4byte bigendian, length of the control frame message. + * Then, the control frame payload (of that length). with in it: + * 4byte bigendian, control type (eg. START, STOP, READY, ACCEPT, FINISH). + * perhaps nothing more (STOP, FINISH), but for other types maybe + * control fields + * 4byte bigendian, the control-field-type, currently only content-type. + * 4byte bigendian, length of the string for this option. + * .. bytes of that string. + * + * The START type can have only one field. Field max len 256. + * control frame max frame length 512 (excludes the 0-escape and control + * frame length bytes). + * + * the bidirectional type of transmission is like this: + * client sends READY (with content type included), + * client waits for ACCEPT (with content type included), + * client sends START (with matched content type from ACCEPT) + * .. data frames + * client sends STOP. + * client waits for FINISH frame. + * + */ + +/** max length of Frame Streams content type field string */ +#define FSTRM_CONTENT_TYPE_LENGTH_MAX 256 +/** control frame value to denote the control frame ACCEPT */ +#define FSTRM_CONTROL_FRAME_ACCEPT 0x01 +/** control frame value to denote the control frame START */ +#define FSTRM_CONTROL_FRAME_START 0x02 +/** control frame value to denote the control frame STOP */ +#define FSTRM_CONTROL_FRAME_STOP 0x03 +/** control frame value to denote the control frame READY */ +#define FSTRM_CONTROL_FRAME_READY 0x04 +/** control frame value to denote the control frame FINISH */ +#define FSTRM_CONTROL_FRAME_FINISH 0x05 +/** the constant that denotes the control field type that is the + * string for the content type of the stream. */ +#define FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE 0x01 +/** the content type for DNSTAP frame streams */ +#define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" + +/** + * This creates an FSTRM control frame of type START. + * @param contenttype: a zero delimited string with the content type. + * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as + * "protobuf:dnstap.Dnstap", for a dnstap frame stream. + * @param len: if a buffer is returned this is the length of that buffer. + * @return NULL on malloc failure. Returns a malloced buffer with the + * protocol message. The buffer starts with the 4 bytes of 0 that indicate + * a control frame. The buffer should be sent without preceding it with + * the 'len' variable (like data frames are), but straight the content of the + * buffer, because the lengths are included in the buffer. This is so that + * the zero control indicator can be included before the control frame length. + */ +void* fstrm_create_control_frame_start(char* contenttype, size_t* len); + +/** + * This creates an FSTRM control frame of type STOP. + * @param len: if a buffer is returned this is the length of that buffer. + * @return NULL on malloc failure. Returns a malloced buffer with the + * protocol message. The buffer starts with the 4 bytes of 0 that indicate + * a control frame. The buffer should be sent without preceding it with + * the 'len' variable (like data frames are), but straight the content of the + * buffer, because the lengths are included in the buffer. This is so that + * the zero control indicator can be included before the control frame length. + */ +void* fstrm_create_control_frame_stop(size_t* len); + +#endif /* DNSTAP_FSTRM_H */ diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index bd4d39acb..b734fc9c1 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -43,6 +43,7 @@ #include "config.h" #include "dnstap/dtstream.h" +#include "dnstap/dnstap_fstrm.h" #include "util/config_file.h" #include "util/ub_event.h" #include "util/net_help.h" @@ -73,52 +74,6 @@ static void dtio_add_output_event_write(struct dt_io_thread* dtio); /** start reconnection attempts */ static void dtio_reconnect_enable(struct dt_io_thread* dtio); -void* fstrm_create_control_frame_start(char* contenttype, size_t* len) -{ - uint32_t* control; - size_t n; - /* start framestream message: - * 4byte 0: control indicator. - * 4byte bigendian: length of control frame - * 4byte bigendian: type START - * 4byte bigendian: frame option: content-type - * 4byte bigendian: length of string - * string of content type (dnstap) - */ - n = 4+4+4+4+4+strlen(contenttype); - control = malloc(n); - if(!control) - return NULL; - control[0] = 0; - control[1] = htonl(4+4+4+strlen(contenttype)); - control[2] = htonl(FSTRM_CONTROL_FRAME_START); - control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); - control[4] = htonl(strlen(contenttype)); - memmove(&control[5], contenttype, strlen(contenttype)); - *len = n; - return control; -} - -void* fstrm_create_control_frame_stop(size_t* len) -{ - uint32_t* control; - size_t n; - /* stop framestream message: - * 4byte 0: control indicator. - * 4byte bigendian: length of control frame - * 4byte bigendian: type STOP - */ - n = 4+4+4; - control = malloc(n); - if(!control) - return NULL; - control[0] = 0; - control[1] = htonl(4); - control[2] = htonl(FSTRM_CONTROL_FRAME_STOP); - *len = n; - return control; -} - struct dt_msg_queue* dt_msg_queue_create(void) { diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 9309f5c0b..f2c13fde4 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -185,100 +185,6 @@ struct dt_io_list_item { struct dt_msg_queue* queue; }; -/* Frame Streams data transfer protocol encode for DNSTAP messages. - * The protocol looks to be specified in the libfstrm library. - * - * Quick writeup for DNSTAP usage, from reading fstrm/control.h eloquent - * comments and fstrm/control.c for some bytesize details (the content type - * length). - * - * The Frame Streams can be unidirectional or bi-directional. - * bi-directional streams use control frame types READY, ACCEPT and FINISH. - * uni-directional streams use control frame types START and STOP. - * unknown control frame types should be ignored by the receiver, they - * do not change the data frame encoding. - * - * bi-directional control frames implement a simple handshake protocol - * between sender and receiver. - * - * The uni-directional control frames have one start and one stop frame, - * before and after the data. The start frame can have a content type. - * The start and stop frames are not optional. - * - * data frames are preceded by 4byte length, bigendian. - * zero length data frames are not possible, they are an escape that - * signals the presence of a control frame. - * - * a control frame consists of 0 value in 4byte bigendian, this is really - * the data frame length, with 0 the escape sequence that indicates one - * control frame follows. - * Then, 4byte bigendian, length of the control frame message. - * Then, the control frame payload (of that length). with in it: - * 4byte bigendian, control type (eg. START, STOP, READY, ACCEPT, FINISH). - * perhaps nothing more (STOP, FINISH), but for other types maybe - * control fields - * 4byte bigendian, the control-field-type, currently only content-type. - * 4byte bigendian, length of the string for this option. - * .. bytes of that string. - * - * The START type can have only one field. Field max len 256. - * control frame max frame length 512 (excludes the 0-escape and control - * frame length bytes). - * - * the bidirectional type of transmission is like this: - * client sends READY (with content type included), - * client waits for ACCEPT (with content type included), - * client sends START (with matched content type from ACCEPT) - * .. data frames - * client sends STOP. - * client waits for FINISH frame. - * - */ - -/** max length of Frame Streams content type field string */ -#define FSTRM_CONTENT_TYPE_LENGTH_MAX 256 -/** control frame value to denote the control frame ACCEPT */ -#define FSTRM_CONTROL_FRAME_ACCEPT 0x01 -/** control frame value to denote the control frame START */ -#define FSTRM_CONTROL_FRAME_START 0x02 -/** control frame value to denote the control frame STOP */ -#define FSTRM_CONTROL_FRAME_STOP 0x03 -/** control frame value to denote the control frame READY */ -#define FSTRM_CONTROL_FRAME_READY 0x04 -/** control frame value to denote the control frame FINISH */ -#define FSTRM_CONTROL_FRAME_FINISH 0x05 -/** the constant that denotes the control field type that is the - * string for the content type of the stream. */ -#define FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE 0x01 -/** the content type for DNSTAP frame streams */ -#define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" - -/** - * This creates an FSTRM control frame of type START. - * @param contenttype: a zero delimited string with the content type. - * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as - * "protobuf:dnstap.Dnstap", for a dnstap frame stream. - * @param len: if a buffer is returned this is the length of that buffer. - * @return NULL on malloc failure. Returns a malloced buffer with the - * protocol message. The buffer starts with the 4 bytes of 0 that indicate - * a control frame. The buffer should be sent without preceding it with - * the 'len' variable (like data frames are), but straight the content of the - * buffer, because the lengths are included in the buffer. This is so that - * the zero control indicator can be included before the control frame length. - */ -void* fstrm_create_control_frame_start(char* contenttype, size_t* len); -/** - * This creates an FSTRM control frame of type STOP. - * @param len: if a buffer is returned this is the length of that buffer. - * @return NULL on malloc failure. Returns a malloced buffer with the - * protocol message. The buffer starts with the 4 bytes of 0 that indicate - * a control frame. The buffer should be sent without preceding it with - * the 'len' variable (like data frames are), but straight the content of the - * buffer, because the lengths are included in the buffer. This is so that - * the zero control indicator can be included before the control frame length. - */ -void* fstrm_create_control_frame_stop(size_t* len); - /** * Create new (empty) worker message queue. Limit set to default on max. * @return NULL on malloc failure or a new queue (not locked). diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index a1705e1d7..8afb1c1fc 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -53,6 +53,7 @@ #include #include #include "dnstap/dtstream.h" +#include "dnstap/dnstap_fstrm.h" #include "util/log.h" #include "util/ub_event.h" #include "util/net_help.h" From 11e80ce3abdf4f1f55150173a1ce5c0c00d6b66b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 09:53:49 +0100 Subject: [PATCH 055/235] dnstap unbound-dnstap-sock, can listen to multiple sockets, can listen to TCP sockets, cleans up on exit after signal. --- dnstap/unbound-dnstap-socket.c | 376 +++++++++++++++++++++++++++++++-- 1 file changed, 353 insertions(+), 23 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 8afb1c1fc..218d46d3c 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #ifdef HAVE_SYS_UN_H #include @@ -62,8 +63,10 @@ #include "sldns/wire2str.h" #include #include "dnstap/dnstap.pb-c.h" +#include "util/config_file.h" #define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" +#define LISTEN_BACKLOG 16 /** usage information for streamtcp */ static void usage(char* argv[]) @@ -72,6 +75,7 @@ static void usage(char* argv[]) printf(" Listen to dnstap messages\n"); printf("stdout has dnstap log, stderr has verbose server log\n"); printf("-u listen to unix socket with this file name\n"); + printf("-s listen on the IP and port\n"); printf("-l long format for DNS printout\n"); printf("-v more verbose log output\n"); printf("-h this help text\n"); @@ -81,12 +85,14 @@ static void usage(char* argv[]) /** long format option, for multiline printout per message */ static int longformat = 0; +struct tap_socket_list; +struct tap_socket; /** main tap callback data */ struct main_tap_data { /** the event base (to loopexit) */ struct ub_event_base* base; - /** the event (that is accept()ed) */ - struct ub_event* ev; + /** the list of accept sockets */ + struct tap_socket_list* acceptlist; }; /** tap callback variables */ @@ -109,6 +115,265 @@ struct tap_data { size_t len; }; +/** list of sockets */ +struct tap_socket_list { + /** next in list */ + struct tap_socket_list* next; + /** the socket */ + struct tap_socket* s; +}; + +/** tap socket */ +struct tap_socket { + /** fd of socket */ + int fd; + /** the event for it */ + struct ub_event *ev; + /** has the event been added */ + int ev_added; + /** the callback, for the event, ev_cb(fd, bits, arg) */ + void (*ev_cb)(int, short, void*); + /** data element, (arg for the tap_socket struct) */ + void* data; + /** socketpath, if this is an AF_LOCAL socket */ + char* socketpath; + /** IP, if this is a TCP socket */ + char* ip; +}; + +/** del the tap event */ +static void tap_socket_delev(struct tap_socket* s) +{ + if(!s) return; + if(!s->ev) return; + if(!s->ev_added) return; + ub_event_del(s->ev); + s->ev_added = 0; +} + +/** close the tap socket */ +static void tap_socket_close(struct tap_socket* s) +{ + if(!s) return; + if(s->fd == -1) return; + close(s->fd); + s->fd = -1; +} + +/** delete tap socket */ +static void tap_socket_delete(struct tap_socket* s) +{ + if(!s) return; + ub_event_free(s->ev); + free(s->socketpath); + free(s->ip); + free(s); +} + +/** create new socket (unconnected, not base-added), or NULL malloc fail */ +static struct tap_socket* tap_socket_new_local(char* socketpath, + void (*ev_cb)(int, short, void*), void* data) +{ + struct tap_socket* s = calloc(1, sizeof(*s)); + if(!s) { + log_err("malloc failure"); + return NULL; + } + s->socketpath = strdup(socketpath); + if(!s->socketpath) { + free(s); + log_err("malloc failure"); + return NULL; + } + s->fd = -1; + s->ev_cb = ev_cb; + s->data = data; + return s; +} + +/** create new socket (unconnected, not base-added), or NULL malloc fail */ +static struct tap_socket* tap_socket_new_tcpaccept(char* ip, + void (*ev_cb)(int, short, void*), void* data) +{ + struct tap_socket* s = calloc(1, sizeof(*s)); + if(!s) { + log_err("malloc failure"); + return NULL; + } + s->ip = strdup(ip); + if(!s->ip) { + free(s); + log_err("malloc failure"); + return NULL; + } + s->fd = -1; + s->ev_cb = ev_cb; + s->data = data; + return s; +} + +/** setup tcp accept socket on IP string */ +static int make_tcp_accept(char* ip) +{ +#ifdef SO_REUSEADDR + int on = 1; +#endif + struct sockaddr_storage addr; + socklen_t len; + int s; + + memset(&addr, 0, sizeof(addr)); + len = (socklen_t)sizeof(addr); + if(!extstrtoaddr(ip, &addr, &len)) { + log_err("could not parse IP '%s'", ip); + return -1; + } + + if((s = socket(addr.ss_family, SOCK_STREAM, 0)) == -1) { +#ifndef USE_WINSOCK + log_err("can't create socket: %s", strerror(errno)); +#else + log_err("can't create socket: %s", + wsa_strerror(WSAGetLastError())); +#endif + return -1; + } +#ifdef SO_REUSEADDR + if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, + (socklen_t)sizeof(on)) < 0) { +#ifndef USE_WINSOCK + log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s", + strerror(errno)); + close(s); +#else + log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s", + wsa_strerror(WSAGetLastError())); + closesocket(s); +#endif + return -1; + } +#endif /* SO_REUSEADDR */ + if(bind(s, (struct sockaddr*)&addr, len) != 0) { +#ifndef USE_WINSOCK + log_err_addr("can't bind socket", strerror(errno), + &addr, len); + close(s); +#else + log_err_addr("can't bind socket", + wsa_strerror(WSAGetLastError()), &addr, len); + closesocket(s); +#endif + return -1; + } + if(!fd_set_nonblock(s)) { +#ifndef USE_WINSOCK + close(s); +#else + closesocket(s); +#endif + return -1; + } + if(listen(s, LISTEN_BACKLOG) == -1) { +#ifndef USE_WINSOCK + log_err("can't listen: %s", strerror(errno)); + close(s); +#else + log_err("can't listen: %s", wsa_strerror(WSAGetLastError())); + closesocket(s); +#endif + return -1; + } + return s; +} + +/** setup socket on event base */ +static int tap_socket_setup(struct tap_socket* s, struct ub_event_base* base) +{ + if(s->socketpath) { + /* AF_LOCAL accept socket */ + s->fd = create_local_accept_sock(s->socketpath, NULL, 0); + if(s->fd == -1) { + log_err("could not create local socket"); + return 0; + } + s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST, + s->ev_cb, s); + if(!s->ev) { + log_err("could not ub_event_new"); + return 0; + } + if(ub_event_add(s->ev, NULL) != 0) { + log_err("could not ub_event_add"); + return 0; + } + s->ev_added = 1; + return 1; + } + if(s->ip) { + /* TCP accept socket */ + s->fd = make_tcp_accept(s->ip); + if(s->fd == -1) { + log_err("could not create tcp socket"); + return 0; + } + s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST, + s->ev_cb, s); + if(!s->ev) { + log_err("could not ub_event_new"); + return 0; + } + if(ub_event_add(s->ev, NULL) != 0) { + log_err("could not ub_event_add"); + return 0; + } + s->ev_added = 1; + return 1; + } + return 0; +} + +/** add tap socket to list */ +static int tap_socket_list_insert(struct tap_socket_list** liststart, + struct tap_socket* s) +{ + struct tap_socket_list* entry = (struct tap_socket_list*) + malloc(sizeof(*entry)); + if(!entry) + return 0; + entry->next = *liststart; + entry->s = s; + *liststart = entry; + return 1; +} + +/** delete the list */ +static void tap_socket_list_delete(struct tap_socket_list* list) +{ + struct tap_socket_list* e = list, *next; + while(e) { + next = e->next; + tap_socket_delev(e->s); + tap_socket_close(e->s); + tap_socket_delete(e->s); + free(e); + e = next; + } +} + +/** setup accept events */ +static int tap_socket_list_addevs(struct tap_socket_list* list, + struct ub_event_base* base) +{ + struct tap_socket_list* entry; + for(entry = list; entry; entry = entry->next) { + if(!tap_socket_setup(entry->s, base)) { + log_err("could not setup socket"); + return 0; + } + } + return 1; +} + /** log control frame contents */ static void log_control_frame(uint8_t* pkt, size_t len) { @@ -588,7 +853,9 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) /** callback for main listening file descriptor */ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) { - struct main_tap_data* maindata = (struct main_tap_data*)arg; + struct tap_socket* tap_sock = (struct tap_socket*)arg; + struct main_tap_data* maindata = (struct main_tap_data*) + tap_sock->data; struct tap_data* data; struct sockaddr_storage addr; socklen_t addrlen = (socklen_t)sizeof(addr); @@ -653,24 +920,59 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add"); } -/** create file descriptor to listen on */ -static int -setup_fd(char* socketpath) +/** setup local accept sockets */ +static void setup_local_list(struct main_tap_data* maindata, + struct config_strlist_head* local_list) { - return create_local_accept_sock(socketpath, NULL, 0); + struct config_strlist* item; + for(item = local_list->first; item; item = item->next) { + struct tap_socket* s; + s = tap_socket_new_local(item->str, &mainfdcallback, + maindata); + if(!s) fatal_exit("out of memory"); + if(!tap_socket_list_insert(&maindata->acceptlist, s)) + fatal_exit("out of memory"); + } +} + +/** setup tcp accept sockets */ +static void setup_tcp_list(struct main_tap_data* maindata, + struct config_strlist_head* tcp_list) +{ + struct config_strlist* item; + for(item = tcp_list->first; item; item = item->next) { + struct tap_socket* s; + s = tap_socket_new_tcpaccept(item->str, &mainfdcallback, + maindata); + if(!s) fatal_exit("out of memory"); + if(!tap_socket_list_insert(&maindata->acceptlist, s)) + fatal_exit("out of memory"); + } +} + +/** signal variable */ +static struct ub_event_base* sig_base = NULL; +/** do we have to quit */ +int sig_quit = 0; +/** signal handler for user quit */ +static RETSIGTYPE main_sigh(int sig) +{ + if(!sig_base) return; + verbose(VERB_ALGO, "exit on signal %d\n", sig); + ub_event_base_loopexit(sig_base); + sig_quit = 1; } /** setup and run the server to listen to DNSTAP messages */ static void -setup_and_run(char* socketpath) +setup_and_run(struct config_strlist_head* local_list, + struct config_strlist_head* tcp_list) { - int fd; time_t secs = 0; struct timeval now; struct main_tap_data* maindata; struct ub_event_base* base; const char *evnm="event", *evsys="", *evmethod=""; - struct ub_event *ev; maindata = calloc(1, sizeof(*maindata)); if(!maindata) fatal_exit("out of memory"); @@ -678,21 +980,24 @@ setup_and_run(char* socketpath) base = ub_default_event_base(1, &secs, &now); if(!base) fatal_exit("could not create ub_event base"); maindata->base = base; - fd = setup_fd(socketpath); + sig_base = base; + if(sig_quit) { + ub_event_base_free(base); + free(maindata); + return; + } ub_get_event_sys(base, &evnm, &evsys, &evmethod); if(verbosity) log_info("%s %s uses %s method", evnm, evsys, evmethod); - ev = ub_event_new(base, fd, UB_EV_READ | UB_EV_PERSIST, - &mainfdcallback, maindata); - if(!ev) fatal_exit("could not ub_event_new"); - if(ub_event_add(ev, NULL) != 0) fatal_exit("could not ub_event_add"); - maindata->ev = ev; + + setup_local_list(maindata, local_list); + setup_tcp_list(maindata, tcp_list); + if(!tap_socket_list_addevs(maindata->acceptlist, base)) + fatal_exit("could not setup accept events"); ub_event_base_dispatch(base); - ub_event_del(ev); - ub_event_free(ev); + tap_socket_list_delete(maindata->acceptlist); ub_event_base_free(base); - close(fd); free(maindata); } @@ -706,7 +1011,8 @@ int main(int argc, char** argv) { int c; int usessl = 0; - char* socketpath = NULL; + struct config_strlist_head local_list; + struct config_strlist_head tcp_list; #ifdef USE_WINSOCK WSADATA wsa_data; if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) { @@ -714,6 +1020,20 @@ int main(int argc, char** argv) return 1; } #endif + if(signal(SIGINT, main_sigh) == SIG_ERR || +#ifdef SIGQUIT + signal(SIGQUIT, main_sigh) == SIG_ERR || +#endif +#ifdef SIGHUP + signal(SIGHUP, main_sigh) == SIG_ERR || +#endif +#ifdef SIGBREAK + signal(SIGBREAK, main_sigh) == SIG_ERR || +#endif + signal(SIGTERM, main_sigh) == SIG_ERR) + fatal_exit("could not bind to signal"); + memset(&local_list, 0, sizeof(local_list)); + memset(&tcp_list, 0, sizeof(tcp_list)); /* lock debug start (if any) */ log_ident_set("unbound-dnstap-socket"); @@ -728,10 +1048,17 @@ int main(int argc, char** argv) #endif /* command line options */ - while( (c=getopt(argc, argv, "hlu:v")) != -1) { + while( (c=getopt(argc, argv, "hls:u:v")) != -1) { switch(c) { case 'u': - socketpath = optarg; + if(!cfg_strlist_append(&local_list, + strdup(optarg))) + fatal_exit("out of memory"); + break; + case 's': + if(!cfg_strlist_append(&tcp_list, + strdup(optarg))) + fatal_exit("out of memory"); break; case 'l': longformat = 1; @@ -767,7 +1094,10 @@ int main(int argc, char** argv) (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif } - setup_and_run(socketpath); + setup_and_run(&local_list, &tcp_list); + config_delstrlist(local_list.first); + config_delstrlist(tcp_list.first); + checklock_stop(); #ifdef USE_WINSOCK WSACleanup(); From 70b2c24a4e884a2c72b0a13d5805c2e40a23bf2f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 10:02:51 +0100 Subject: [PATCH 056/235] dnstap unbound-dnstap-sock, fixup signal handler exit. --- dnstap/unbound-dnstap-socket.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 218d46d3c..d854ef435 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -233,13 +233,13 @@ static int make_tcp_accept(char* ip) #ifndef USE_WINSOCK log_err("can't create socket: %s", strerror(errno)); #else - log_err("can't create socket: %s", + log_err("can't create socket: %s", wsa_strerror(WSAGetLastError())); #endif return -1; } #ifdef SO_REUSEADDR - if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, + if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) { #ifndef USE_WINSOCK log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s", @@ -259,7 +259,7 @@ static int make_tcp_accept(char* ip) &addr, len); close(s); #else - log_err_addr("can't bind socket", + log_err_addr("can't bind socket", wsa_strerror(WSAGetLastError()), &addr, len); closesocket(s); #endif @@ -957,9 +957,9 @@ int sig_quit = 0; /** signal handler for user quit */ static RETSIGTYPE main_sigh(int sig) { - if(!sig_base) return; verbose(VERB_ALGO, "exit on signal %d\n", sig); - ub_event_base_loopexit(sig_base); + if(sig_base) + ub_event_base_loopexit(sig_base); sig_quit = 1; } @@ -996,6 +996,7 @@ setup_and_run(struct config_strlist_head* local_list, ub_event_base_dispatch(base); + sig_base = NULL; tap_socket_list_delete(maindata->acceptlist); ub_event_base_free(base); free(maindata); From 59136055b9c508043d7d4273c462f66add7af475 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 10:05:00 +0100 Subject: [PATCH 057/235] dnstap unbound-dnstap-sock, fixup constant defines. --- dnstap/unbound-dnstap-socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index d854ef435..217df1c87 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -65,7 +65,7 @@ #include "dnstap/dnstap.pb-c.h" #include "util/config_file.h" -#define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" +/** listen backlog on TCP connections for dnstap logs */ #define LISTEN_BACKLOG 16 /** usage information for streamtcp */ From 473783e4327b664ab9098ac82f97318bf593f3b8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 11:10:04 +0100 Subject: [PATCH 058/235] dnstap unbound-dnstap-sock, tls options and context created. --- dnstap/unbound-dnstap-socket.c | 137 +++++++++++++++++++++++++-------- 1 file changed, 106 insertions(+), 31 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 217df1c87..3c5bcbcda 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -75,7 +75,11 @@ static void usage(char* argv[]) printf(" Listen to dnstap messages\n"); printf("stdout has dnstap log, stderr has verbose server log\n"); printf("-u listen to unix socket with this file name\n"); - printf("-s listen on the IP and port\n"); + printf("-s listen for TCP on the IP and port\n"); + printf("-t listen for TLS on IP and port\n"); + printf("-x server key file for TLS service\n"); + printf("-y server cert file for TLS service\n"); + printf("-z cert file to verify client connections\n"); printf("-l long format for DNS printout\n"); printf("-v more verbose log output\n"); printf("-h this help text\n"); @@ -101,6 +105,8 @@ struct tap_data { int fd; /** the ub event */ struct ub_event* ev; + /** the SSL for TLS streams */ + SSL* ssl; /** have we read the length, and how many bytes of it */ int len_done; /** have we read the data, and how many bytes of it */ @@ -139,6 +145,8 @@ struct tap_socket { char* socketpath; /** IP, if this is a TCP socket */ char* ip; + /** for a TLS socket, the tls context */ + SSL_CTX* sslctx; }; /** del the tap event */ @@ -164,6 +172,7 @@ static void tap_socket_close(struct tap_socket* s) static void tap_socket_delete(struct tap_socket* s) { if(!s) return; + SSL_CTX_free(s->sslctx); ub_event_free(s->ev); free(s->socketpath); free(s->ip); @@ -212,6 +221,29 @@ static struct tap_socket* tap_socket_new_tcpaccept(char* ip, return s; } +/** create new socket (unconnected, not base-added), or NULL malloc fail */ +static struct tap_socket* tap_socket_new_tlsaccept(char* ip, + void (*ev_cb)(int, short, void*), void* data, char* server_key, + char* server_cert, char* verifypem) +{ + struct tap_socket* s = calloc(1, sizeof(*s)); + if(!s) { + log_err("malloc failure"); + return NULL; + } + s->ip = strdup(ip); + if(!s->ip) { + free(s); + log_err("malloc failure"); + return NULL; + } + s->fd = -1; + s->ev_cb = ev_cb; + s->data = data; + s->sslctx = listen_sslctx_create(server_key, server_cert, verifypem); + return s; +} + /** setup tcp accept socket on IP string */ static int make_tcp_accept(char* ip) { @@ -296,40 +328,26 @@ static int tap_socket_setup(struct tap_socket* s, struct ub_event_base* base) log_err("could not create local socket"); return 0; } - s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST, - s->ev_cb, s); - if(!s->ev) { - log_err("could not ub_event_new"); - return 0; - } - if(ub_event_add(s->ev, NULL) != 0) { - log_err("could not ub_event_add"); - return 0; - } - s->ev_added = 1; - return 1; - } - if(s->ip) { + } else if(s->ip || s->sslctx) { /* TCP accept socket */ s->fd = make_tcp_accept(s->ip); if(s->fd == -1) { log_err("could not create tcp socket"); return 0; } - s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST, - s->ev_cb, s); - if(!s->ev) { - log_err("could not ub_event_new"); - return 0; - } - if(ub_event_add(s->ev, NULL) != 0) { - log_err("could not ub_event_add"); - return 0; - } - s->ev_added = 1; - return 1; } - return 0; + s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST, + s->ev_cb, s); + if(!s->ev) { + log_err("could not ub_event_new"); + return 0; + } + if(ub_event_add(s->ev, NULL) != 0) { + log_err("could not ub_event_add"); + return 0; + } + s->ev_added = 1; + return 1; } /** add tap socket to list */ @@ -675,6 +693,7 @@ void tap_data_free(struct tap_data* data) { ub_event_del(data->ev); ub_event_free(data->ev); + SSL_free(data->ssl); close(data->fd); free(data->frame); free(data); @@ -850,6 +869,21 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) } +/** setup SSL connection to the client */ +static SSL* +setup_ssl(int s, SSL_CTX* ctx) +{ + SSL* ssl = SSL_new(ctx); + if(!ssl) return NULL; + SSL_set_accept_state(ssl); + (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); + if(!SSL_set_fd(ssl, s)) { + SSL_free(ssl); + return NULL; + } + return ssl; +} + /** callback for main listening file descriptor */ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) { @@ -914,6 +948,10 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) data = calloc(1, sizeof(*data)); if(!data) fatal_exit("out of memory"); data->fd = s; + if(tap_sock->sslctx) { + data->ssl = setup_ssl(data->fd, tap_sock->sslctx); + if(!data->ssl) fatal_exit("could not SSL_new"); + } data->ev = ub_event_new(maindata->base, s, UB_EV_READ | UB_EV_PERSIST, &tap_callback, data); if(!data->ev) fatal_exit("could not ub_event_new"); @@ -950,6 +988,22 @@ static void setup_tcp_list(struct main_tap_data* maindata, } } +/** setup tls accept sockets */ +static void setup_tls_list(struct main_tap_data* maindata, + struct config_strlist_head* tls_list, char* server_key, + char* server_cert, char* verifypem) +{ + struct config_strlist* item; + for(item = tls_list->first; item; item = item->next) { + struct tap_socket* s; + s = tap_socket_new_tlsaccept(item->str, &mainfdcallback, + maindata, server_key, server_cert, verifypem); + if(!s) fatal_exit("out of memory"); + if(!tap_socket_list_insert(&maindata->acceptlist, s)) + fatal_exit("out of memory"); + } +} + /** signal variable */ static struct ub_event_base* sig_base = NULL; /** do we have to quit */ @@ -966,7 +1020,9 @@ static RETSIGTYPE main_sigh(int sig) /** setup and run the server to listen to DNSTAP messages */ static void setup_and_run(struct config_strlist_head* local_list, - struct config_strlist_head* tcp_list) + struct config_strlist_head* tcp_list, + struct config_strlist_head* tls_list, char* server_key, + char* server_cert, char* verifypem) { time_t secs = 0; struct timeval now; @@ -991,6 +1047,8 @@ setup_and_run(struct config_strlist_head* local_list, setup_local_list(maindata, local_list); setup_tcp_list(maindata, tcp_list); + setup_tls_list(maindata, tls_list, server_key, server_cert, + verifypem); if(!tap_socket_list_addevs(maindata->acceptlist, base)) fatal_exit("could not setup accept events"); @@ -1014,6 +1072,8 @@ int main(int argc, char** argv) int usessl = 0; struct config_strlist_head local_list; struct config_strlist_head tcp_list; + struct config_strlist_head tls_list; + char* server_key = NULL, *server_cert = NULL, *verifypem = NULL; #ifdef USE_WINSOCK WSADATA wsa_data; if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) { @@ -1035,6 +1095,7 @@ int main(int argc, char** argv) fatal_exit("could not bind to signal"); memset(&local_list, 0, sizeof(local_list)); memset(&tcp_list, 0, sizeof(tcp_list)); + memset(&tls_list, 0, sizeof(tls_list)); /* lock debug start (if any) */ log_ident_set("unbound-dnstap-socket"); @@ -1049,7 +1110,7 @@ int main(int argc, char** argv) #endif /* command line options */ - while( (c=getopt(argc, argv, "hls:u:v")) != -1) { + while( (c=getopt(argc, argv, "hls:u:vx:y:z:")) != -1) { switch(c) { case 'u': if(!cfg_strlist_append(&local_list, @@ -1061,6 +1122,18 @@ int main(int argc, char** argv) strdup(optarg))) fatal_exit("out of memory"); break; + case 'x': + server_key = optarg; + usessl = 1; + break; + case 'y': + server_cert = optarg; + usessl = 1; + break; + case 'z': + verifypem = optarg; + usessl = 1; + break; case 'l': longformat = 1; break; @@ -1095,9 +1168,11 @@ int main(int argc, char** argv) (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif } - setup_and_run(&local_list, &tcp_list); + setup_and_run(&local_list, &tcp_list, &tls_list, server_key, + server_cert, verifypem); config_delstrlist(local_list.first); config_delstrlist(tcp_list.first); + config_delstrlist(tls_list.first); checklock_stop(); #ifdef USE_WINSOCK From b912169f1524d04e2f6de3baf530f7d8e69d6716 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 11:11:43 +0100 Subject: [PATCH 059/235] dnstap unbound-dnstap-sock, fixup check for ssl context create error. --- dnstap/unbound-dnstap-socket.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 3c5bcbcda..cbb04a1c2 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -241,6 +241,12 @@ static struct tap_socket* tap_socket_new_tlsaccept(char* ip, s->ev_cb = ev_cb; s->data = data; s->sslctx = listen_sslctx_create(server_key, server_cert, verifypem); + if(!s->sslctx) { + log_err("could not create ssl context"); + free(s->ip); + free(s); + return NULL; + } return s; } From 8d2ff8a6bf6634deb323876fa5fe251507fb37a9 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 11:18:14 +0100 Subject: [PATCH 060/235] dnstap unbound-dnstap-sock, add -t option. --- dnstap/unbound-dnstap-socket.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index cbb04a1c2..c5ac4be3f 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -1116,7 +1116,7 @@ int main(int argc, char** argv) #endif /* command line options */ - while( (c=getopt(argc, argv, "hls:u:vx:y:z:")) != -1) { + while( (c=getopt(argc, argv, "hls:t:u:vx:y:z:")) != -1) { switch(c) { case 'u': if(!cfg_strlist_append(&local_list, @@ -1128,6 +1128,12 @@ int main(int argc, char** argv) strdup(optarg))) fatal_exit("out of memory"); break; + case 't': + if(!cfg_strlist_append(&tls_list, + strdup(optarg))) + fatal_exit("out of memory"); + usessl = 1; + break; case 'x': server_key = optarg; usessl = 1; From 03db238a51bf8997cb69df5bf9643d42d47e12cb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 13:05:06 +0100 Subject: [PATCH 061/235] dnstap unbound-dnstap-sock, verbose accepted stream IP addresses --- dnstap/unbound-dnstap-socket.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index c5ac4be3f..e634773a8 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -107,6 +107,8 @@ struct tap_data { struct ub_event* ev; /** the SSL for TLS streams */ SSL* ssl; + /** string that identifies the socket (or NULL), like IP address */ + char* id; /** have we read the length, and how many bytes of it */ int len_done; /** have we read the data, and how many bytes of it */ @@ -664,12 +666,13 @@ static void log_data_frame(uint8_t* pkt, size_t len) /** receive bytes from fd, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ -static ssize_t receive_bytes(int fd, void* buf, size_t len, struct ub_event* ev) +static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t len, struct ub_event* ev) { ssize_t ret = recv(fd, buf, len, 0); if(ret == 0) { /* closed */ - if(verbosity) log_info("dnstap client stream closed"); + if(verbosity) log_info("dnstap client stream closed from %s", + (data->id?data->id:"")); return 0; } else if(ret == -1) { /* error */ @@ -688,7 +691,8 @@ static ssize_t receive_bytes(int fd, void* buf, size_t len, struct ub_event* ev) log_err("could not recv: %s", wsa_strerror(WSAGetLastError())); #endif - if(verbosity) log_info("dnstap client stream closed"); + if(verbosity) log_info("dnstap client stream closed from %s", + (data->id?data->id:"")); return 0; } return ret; @@ -701,6 +705,7 @@ void tap_data_free(struct tap_data* data) ub_event_free(data->ev); SSL_free(data->ssl); close(data->fd); + free(data->id); free(data->frame); free(data); } @@ -791,7 +796,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) if(verbosity>=3) log_info("tap callback"); while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; - ssize_t ret = receive_bytes(fd, + ssize_t ret = receive_bytes(data, fd, ((uint8_t*)&l)+data->len_done, 4-data->len_done, data->ev); if(verbosity>=4) log_info("s recv %d", (int)ret); @@ -827,7 +832,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) /* we want to read the full length now */ if(data->data_done < data->len) { - ssize_t r = receive_bytes(fd, data->frame + data->data_done, + ssize_t r = receive_bytes(data, fd, data->frame + data->data_done, data->len - data->data_done, data->ev); if(verbosity>=4) log_info("f recv %d", (int)r); if(r == 0) { @@ -897,6 +902,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) struct main_tap_data* maindata = (struct main_tap_data*) tap_sock->data; struct tap_data* data; + char* id = NULL; struct sockaddr_storage addr; socklen_t addrlen = (socklen_t)sizeof(addr); int s = accept(fd, (struct sockaddr*)&addr, &addrlen); @@ -938,6 +944,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) socklen_t ulen = sizeof(struct sockaddr_un); if(getsockname(fd, (struct sockaddr*)usock, &ulen) != -1) { log_info("accepted new dnstap client from %s", usock->sun_path); + id = strdup(usock->sun_path); } else { log_info("accepted new dnstap client"); } @@ -946,6 +953,12 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) log_info("accepted new dnstap client"); } #endif /* HAVE_SYS_UN_H */ + } else if(addr.ss_family == AF_INET || + addr.ss_family == AF_INET6) { + char ip[256]; + addr_to_str(&addr, addrlen, ip, sizeof(ip)); + log_info("accepted new dnstap client from %s", ip); + id = strdup(ip); } else { log_info("accepted new dnstap client"); } @@ -954,6 +967,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) data = calloc(1, sizeof(*data)); if(!data) fatal_exit("out of memory"); data->fd = s; + data->id = id; if(tap_sock->sslctx) { data->ssl = setup_ssl(data->fd, tap_sock->sslctx); if(!data->ssl) fatal_exit("could not SSL_new"); From dc31cf36523be5d5758ea7b2dc8f5d3f34724356 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 14:03:28 +0100 Subject: [PATCH 062/235] dnstap unbound-dnstap-sock, read from TLS. --- dnstap/unbound-dnstap-socket.c | 197 ++++++++++++++++++++++++++------- util/netevent.c | 2 +- util/netevent.h | 5 + 3 files changed, 162 insertions(+), 42 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index e634773a8..9e28b85d7 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -107,6 +107,10 @@ struct tap_data { struct ub_event* ev; /** the SSL for TLS streams */ SSL* ssl; + /** is the ssl handshake done */ + int ssl_handshake_done; + /** we are briefly waiting to write (in the struct event) */ + int ssl_brief_write; /** string that identifies the socket (or NULL), like IP address */ char* id; /** have we read the length, and how many bytes of it */ @@ -666,7 +670,8 @@ static void log_data_frame(uint8_t* pkt, size_t len) /** receive bytes from fd, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ -static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t len, struct ub_event* ev) +static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, + size_t len) { ssize_t ret = recv(fd, buf, len, 0); if(ret == 0) { @@ -677,7 +682,6 @@ static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t le } else if(ret == -1) { /* error */ #ifndef USE_WINSOCK - (void)ev; if(errno == EINTR || errno == EAGAIN) return -1; log_err("could not recv: %s", strerror(errno)); @@ -685,7 +689,7 @@ static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t le if(WSAGetLastError() == WSAEINPROGRESS) return -1; if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(ev, UB_EV_READ); + ub_winsock_tcp_wouldblock(data->ev, UB_EV_READ); return -1; } log_err("could not recv: %s", @@ -698,6 +702,74 @@ static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t le return ret; } +/** set to wait briefly for a write event, for one event call */ +static void tap_enable_brief_write(struct tap_data* data) +{ + ub_event_del(data->ev); + ub_event_del_bits(data->ev, UB_EV_READ); + ub_event_add_bits(data->ev, UB_EV_WRITE); + if(ub_event_add(data->ev, NULL) != 0) + log_err("could not ub_event_add in tap_enable_brief_write"); + data->ssl_brief_write = 1; +} + +/** stop the brief wait for a write event. back to reading. */ +static void tap_disable_brief_write(struct tap_data* data) +{ + ub_event_del(data->ev); + ub_event_del_bits(data->ev, UB_EV_WRITE); + ub_event_add_bits(data->ev, UB_EV_READ); + if(ub_event_add(data->ev, NULL) != 0) + log_err("could not ub_event_add in tap_disable_brief_write"); + data->ssl_brief_write = 0; +} + +/** receive bytes over ssl stream, prints errors if bad, + * returns 0: closed/error, -1: continue, >0 number of bytes */ +static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len) +{ + int r; + ERR_clear_error(); + r = SSL_read(data->ssl, buf, len); + if(r <= 0) { + int want = SSL_get_error(data->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + /* closed */ + if(verbosity) log_info("dnstap client stream closed from %s", + (data->id?data->id:"")); + return 0; + } else if(want == SSL_ERROR_WANT_READ) { + /* continue later */ + return -1; + } else if(want == SSL_ERROR_WANT_WRITE) { + /* set to briefly write */ + tap_enable_brief_write(data); + return -1; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return 0; /* silence reset by peer */ +#endif + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); + return 0; + } + return r; +} + +/** receive bytes on the tap connection, prints errors if bad, + * returns 0: closed/error, -1: continue, >0 number of bytes */ +static ssize_t tap_receive(struct tap_data* data, void* buf, size_t len) +{ + if(data->ssl) + return ssl_read_bytes(data, buf, len); + return receive_bytes(data, data->fd, buf, len); +} + /** delete the tap structure */ void tap_data_free(struct tap_data* data) { @@ -789,16 +861,74 @@ static int reply_with_finish(int fd) return 1; } +/** perform SSL handshake, return 0 to wait for events, 1 to continue */ +static int tap_handshake(struct tap_data* data) +{ + int r; + if(data->ssl_brief_write) { + /* write condition has been satisfied, back to reading */ + tap_disable_brief_write(data); + } + if(data->ssl_handshake_done) + return 1; + + ERR_clear_error(); + r = SSL_do_handshake(data->ssl); + if(r != 1) { + int want = SSL_get_error(data->ssl, r); + if(want == SSL_ERROR_WANT_READ) { + return 0; + } else if(want == SSL_ERROR_WANT_WRITE) { + tap_enable_brief_write(data); + return 0; + } else if(r == 0) { + /* closed */ + tap_data_free(data); + return 0; + } else if(want == SSL_ERROR_SYSCALL) { + /* SYSCALL and errno==0 means closed uncleanly */ +#ifdef EPIPE + if(errno == EPIPE && verbosity < 2) + return 0; /* silence 'broken pipe' */ +#endif +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return 0; /* silence reset by peer */ +#endif + if(errno != 0) + log_err("SSL_handshake syscall: %s", + strerror(errno)); + tap_data_free(data); + return 0; + } else { + unsigned long err = ERR_get_error(); + if(!squelch_err_ssl_handshake(err)) { + log_crypto_err_code("ssl handshake failed", + err); + verbose(VERB_OPS, "ssl handshake failed " + "from %s", data->id); + } + } + } + /* check peer verification */ + data->ssl_handshake_done = 1; + return 1; +} + /** callback for dnstap listener */ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_data* data = (struct tap_data*)arg; if(verbosity>=3) log_info("tap callback"); + if(data->ssl && (!data->ssl_handshake_done || + data->ssl_brief_write)) { + if(!tap_handshake(data)) + return; + } while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; - ssize_t ret = receive_bytes(data, fd, - ((uint8_t*)&l)+data->len_done, 4-data->len_done, - data->ev); + ssize_t ret = tap_receive(data, + ((uint8_t*)&l)+data->len_done, 4-data->len_done); if(verbosity>=4) log_info("s recv %d", (int)ret); if(ret == 0) { /* closed or error */ @@ -832,8 +962,8 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) /* we want to read the full length now */ if(data->data_done < data->len) { - ssize_t r = receive_bytes(data, fd, data->frame + data->data_done, - data->len - data->data_done, data->ev); + ssize_t r = tap_receive(data, data->frame + data->data_done, + data->len - data->data_done); if(verbosity>=4) log_info("f recv %d", (int)r); if(r == 0) { /* closed or error */ @@ -880,21 +1010,6 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) } -/** setup SSL connection to the client */ -static SSL* -setup_ssl(int s, SSL_CTX* ctx) -{ - SSL* ssl = SSL_new(ctx); - if(!ssl) return NULL; - SSL_set_accept_state(ssl); - (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); - if(!SSL_set_fd(ssl, s)) { - SSL_free(ssl); - return NULL; - } - return ssl; -} - /** callback for main listening file descriptor */ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) { @@ -908,32 +1023,32 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) int s = accept(fd, (struct sockaddr*)&addr, &addrlen); if(s == -1) { #ifndef USE_WINSOCK - /* EINTR is signal interrupt. others are closed connection. */ - if( errno == EINTR || errno == EAGAIN + /* EINTR is signal interrupt. others are closed connection. */ + if( errno == EINTR || errno == EAGAIN #ifdef EWOULDBLOCK - || errno == EWOULDBLOCK + || errno == EWOULDBLOCK #endif #ifdef ECONNABORTED - || errno == ECONNABORTED + || errno == ECONNABORTED #endif #ifdef EPROTO - || errno == EPROTO + || errno == EPROTO #endif /* EPROTO */ - ) - return; + ) + return; log_err_addr("accept failed", strerror(errno), &addr, addrlen); #else /* USE_WINSOCK */ - if(WSAGetLastError() == WSAEINPROGRESS || - WSAGetLastError() == WSAECONNRESET) - return; - if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(maindata->ev, UB_EV_READ); - return; - } - log_err_addr("accept failed", wsa_strerror(WSAGetLastError()), - &addr, addrlen); + if(WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAECONNRESET) + return; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(maindata->ev, UB_EV_READ); + return; + } + log_err_addr("accept failed", wsa_strerror(WSAGetLastError()), + &addr, addrlen); #endif - return; + return; } fd_set_nonblock(s); if(verbosity) { @@ -969,7 +1084,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) data->fd = s; data->id = id; if(tap_sock->sslctx) { - data->ssl = setup_ssl(data->fd, tap_sock->sslctx); + data->ssl = incoming_ssl_fd(tap_sock->sslctx, data->fd); if(!data->ssl) fatal_exit("could not SSL_new"); } data->ev = ub_event_new(maindata->base, s, UB_EV_READ | UB_EV_PERSIST, diff --git a/util/netevent.c b/util/netevent.c index 9fe5da2d4..e334e5008 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1054,7 +1054,7 @@ log_cert(unsigned level, const char* str, X509* cert) #ifdef HAVE_SSL /** true if the ssl handshake error has to be squelched from the logs */ -static int +int squelch_err_ssl_handshake(unsigned long err) { if(verbosity >= VERB_QUERY) diff --git a/util/netevent.h b/util/netevent.h index d80c72b33..60824fc42 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -786,4 +786,9 @@ void comm_point_tcp_win_bio_cb(struct comm_point* c, void* ssl); /** see if errno for tcp connect has to be logged or not. This uses errno */ int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen); +#ifdef HAVE_SSL +/** true if the ssl handshake error has to be squelched from the logs */ +int squelch_err_ssl_handshake(unsigned long err); +#endif + #endif /* NET_EVENT_H */ From 27a5239ccf58568455501d5e1e0a6f047ae644da Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 14:13:41 +0100 Subject: [PATCH 063/235] dnstap unbound-dnstap-sock, comments and log output on tls error close. --- dnstap/unbound-dnstap-socket.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 9e28b85d7..011d015dc 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -753,9 +753,13 @@ static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len) if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); + if(verbosity) log_info("dnstap client stream closed from %s", + (data->id?data->id:"")); return 0; } log_crypto_err("could not SSL_read"); + if(verbosity) log_info("dnstap client stream closed from %s", + (data->id?data->id:"")); return 0; } return r; @@ -861,7 +865,7 @@ static int reply_with_finish(int fd) return 1; } -/** perform SSL handshake, return 0 to wait for events, 1 to continue */ +/** perform SSL handshake, return 0 to wait for events, 1 if done */ static int tap_handshake(struct tap_data* data) { int r; @@ -927,7 +931,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) } while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; - ssize_t ret = tap_receive(data, + ssize_t ret = tap_receive(data, ((uint8_t*)&l)+data->len_done, 4-data->len_done); if(verbosity>=4) log_info("s recv %d", (int)ret); if(ret == 0) { From 1420d59949b3bfd63b3f860a48d73030f2ea41a9 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 31 Jan 2020 17:07:40 +0100 Subject: [PATCH 064/235] dnstap io, connect and write over TCP. --- dnstap/dnstap.c | 5 +- dnstap/dtstream.c | 127 ++++++++++++++++++++++++++++++++++++++----- dnstap/dtstream.h | 3 +- testcode/testbound.c | 5 ++ 4 files changed, 125 insertions(+), 15 deletions(-) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index 810f3200a..2787c73ec 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -149,7 +149,10 @@ dt_create(const char *socket_path, unsigned num_workers, free(env); return NULL; } - dt_io_thread_apply_cfg(env->dtio, cfg); + if(!dt_io_thread_apply_cfg(env->dtio, cfg)) { + free(env); + return NULL; + } dt_apply_cfg(env, cfg); return env; } diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index b734fc9c1..445de18b8 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -47,6 +47,7 @@ #include "util/config_file.h" #include "util/ub_event.h" #include "util/net_help.h" +#include "services/outside_network.h" #ifdef HAVE_SYS_UN_H #include #endif @@ -218,13 +219,25 @@ void dt_io_thread_delete(struct dt_io_thread* dtio) item = nextitem; } free(dtio->socket_path); + free(dtio->ip_str); free(dtio); } -void dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) +int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) { - dtio->upstream_is_unix = 1; - dtio->socket_path = strdup(cfg->dnstap_socket_path); + /* + dtio->upstream_is_tcp = 1; + dtio->ip_str = strdup("127.0.0.1@1234"); + */ + if(cfg->dnstap_socket_path && cfg->dnstap_socket_path[0]) { + dtio->socket_path = strdup(cfg->dnstap_socket_path); + if(!dtio->socket_path) { + log_err("malloc failure"); + return 0; + } + dtio->upstream_is_unix = 1; + } + return 1; } int dt_io_thread_register_queue(struct dt_io_thread* dtio, @@ -477,6 +490,8 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) #endif if(error != 0) { char* to = dtio->socket_path; + if(!to) to = dtio->ip_str; + if(!to) to = ""; #ifndef USE_WINSOCK log_err("dnstap io: failed to connect to \"%s\": %s", to, strerror(error)); @@ -487,7 +502,12 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) return -1; /* error, close it */ } - verbose(VERB_ALGO, "dnstap io: connected to \"%s\"", dtio->socket_path); + if(dtio->ip_str) + verbose(VERB_DETAIL, "dnstap io: connected to %s", + dtio->ip_str); + else if(dtio->socket_path) + verbose(VERB_DETAIL, "dnstap io: connected to \"%s\"", + dtio->socket_path); dtio_reconnect_clear(dtio); dtio->check_nb_connect = 0; return 1; /* everything okay */ @@ -682,6 +702,9 @@ static int dtio_check_close(struct dt_io_thread* dtio) while(1) { r = recv(dtio->fd, (void*)buf, sizeof(buf), 0); if(r == -1) { + char* to = dtio->socket_path; + if(!to) to = dtio->ip_str; + if(!to) to = ""; #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; /* try later */ @@ -696,12 +719,17 @@ static int dtio_check_close(struct dt_io_thread* dtio) return 1; /* try later */ } #endif - log_err("dnstap io: output recv: %s", strerror(errno)); + if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) + break; /* no log retries on low verbosity */ + log_err("dnstap io: output closed, recv %s: %s", to, + strerror(errno)); /* and close below */ break; } if(r == 0) { - verbose(VERB_ALGO, "dnstap io: output closed by the other side"); + if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) + break; /* no log retries on low verbosity */ + verbose(VERB_DETAIL, "dnstap io: output closed by the other side"); /* and close below */ break; } @@ -1131,11 +1159,10 @@ static int dtio_control_start_send(struct dt_io_thread* dtio) return 1; } -/** open the output file descriptor */ -static void dtio_open_output(struct dt_io_thread* dtio) +/** open the output file descriptor for af_local */ +static int dtio_open_output_local(struct dt_io_thread* dtio) { #ifdef HAVE_SYS_UN_H - struct ub_event* ev; struct sockaddr_un s; dtio->fd = socket(AF_LOCAL, SOCK_STREAM, 0); if(dtio->fd == -1) { @@ -1146,7 +1173,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) log_err("dnstap io: failed to create socket: %s", wsa_strerror(WSAGetLastError())); #endif - return; + return 0; } memset(&s, 0, sizeof(s)); #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN @@ -1173,8 +1200,83 @@ static void dtio_open_output(struct dt_io_thread* dtio) closesocket(dtio->fd); #endif dtio->fd = -1; - dtio_reconnect_enable(dtio); - return; + return 0; + } + return 1; +#else + log_err("cannot create af_local socket"); + return 0; +#endif /* HAVE_SYS_UN_H */ +} + +/** open the output file descriptor for af_inet and af_inet6 */ +static int dtio_open_output_tcp(struct dt_io_thread* dtio) +{ + struct sockaddr_storage addr; + socklen_t addrlen; + memset(&addr, 0, sizeof(addr)); + addrlen = (socklen_t)sizeof(addr); + + if(!extstrtoaddr(dtio->ip_str, &addr, &addrlen)) { + log_err("could not parse IP '%s'", dtio->ip_str); + return 0; + } + dtio->fd = socket(addr.ss_family, SOCK_STREAM, 0); + if(dtio->fd == -1) { +#ifndef USE_WINSOCK + log_err("can't create socket: %s", strerror(errno)); +#else + log_err("can't create socket: %s", + wsa_strerror(WSAGetLastError())); +#endif + return 0; + } + fd_set_nonblock(dtio->fd); + if(connect(dtio->fd, (struct sockaddr*)&addr, addrlen) == -1) { + if(errno == EINPROGRESS) + return 1; /* wait until connect done*/ +#ifndef USE_WINSOCK + if(tcp_connect_errno_needs_log( + (struct sockaddr *)&addr, addrlen)) { + log_err("dnstap io: failed to connect to %s: %s", + dtio->ip_str, strerror(errno)); + } +#else + if(WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAEWOULDBLOCK) + return 1; /* wait until connect done*/ + if(tcp_connect_errno_needs_log( + (struct sockaddr *)&addr, addrlen)) { + log_err("dnstap io: failed to connect to %s: %s", + dtio->ip_str, wsa_strerror(WSAGetLastError())); + } +#endif + +#ifndef USE_WINSOCK + close(dtio->fd); +#else + closesocket(dtio->fd); +#endif + dtio->fd = -1; + return 0; + } + return 1; +} + +/** open the output file descriptor */ +static void dtio_open_output(struct dt_io_thread* dtio) +{ + struct ub_event* ev; + if(dtio->upstream_is_unix) { + if(!dtio_open_output_local(dtio)) { + dtio_reconnect_enable(dtio); + return; + } + } else if(dtio->upstream_is_tcp || dtio->upstream_is_tls) { + if(!dtio_open_output_tcp(dtio)) { + dtio_reconnect_enable(dtio); + return; + } } dtio->check_nb_connect = 1; @@ -1209,7 +1311,6 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio_reconnect_enable(dtio); return; } -#endif /* HAVE_SYS_UN_H */ } /** perform the setup of the writer thread on the established event_base */ diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index f2c13fde4..8fa2352f4 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -228,8 +228,9 @@ void dt_io_thread_delete(struct dt_io_thread* dtio); * Apply config to the dtio thread * @param dtio: io thread, not yet started. * @param cfg: config file struct. + * @return false on malloc failure. */ -void dt_io_thread_apply_cfg(struct dt_io_thread* dtio, +int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg); /** diff --git a/testcode/testbound.c b/testcode/testbound.c index 4405231c0..fdbc0b92d 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -577,3 +577,8 @@ void wsvc_cron_cb(void* ATTR_UNUSED(arg)) } #endif /* UB_ON_WINDOWS */ +int tcp_connect_errno_needs_log(struct sockaddr* ATTR_UNUSED(addr), + socklen_t ATTR_UNUSED(addrlen)) +{ + return 1; +} From f24d0e4054f6bae93f75a61641a61b6edb61e6c8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 4 Feb 2020 09:45:44 +0100 Subject: [PATCH 065/235] dnstap create debug tool with other debug tools in list. --- Makefile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 24f6f5059..2636ed4d2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -310,7 +310,8 @@ rsrc_unbound_checkconf.o: $(srcdir)/winrc/rsrc_unbound_checkconf.rc config.h TEST_BIN=asynclook$(EXEEXT) delayer$(EXEEXT) \ lock-verify$(EXEEXT) memstats$(EXEEXT) perf$(EXEEXT) \ petal$(EXEEXT) pktview$(EXEEXT) streamtcp$(EXEEXT) \ - testbound$(EXEEXT) unittest$(EXEEXT) unbound-dnstap-socket$(EXEEXT) + unbound-dnstap-socket$(EXEEXT) \ + testbound$(EXEEXT) unittest$(EXEEXT) tests: all $(TEST_BIN) check: test From 9f7a16c7ab6ba1076ab231a7bb3d0433143d3839 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 4 Feb 2020 17:23:19 +0100 Subject: [PATCH 066/235] dnstap io, ssl and ssl ctx creation. --- dnstap/dtstream.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++ dnstap/dtstream.h | 4 +++ 2 files changed, 81 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 445de18b8..50dcbc083 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -52,6 +52,12 @@ #include #endif #include +#ifdef HAVE_OPENSSL_SSL_H +#include +#endif +#ifdef HAVE_OPENSSL_ERR_H +#include +#endif /** number of messages to process in one output callback */ #define DTIO_MESSAGES_PER_CALLBACK 100 @@ -220,6 +226,14 @@ void dt_io_thread_delete(struct dt_io_thread* dtio) } free(dtio->socket_path); free(dtio->ip_str); + free(dtio->tls_server_name); + free(dtio->client_key_file); + free(dtio->client_cert_file); + if(dtio->ssl_ctx) { +#ifdef HAVE_SSL + SSL_CTX_free(dtio->ssl_ctx); +#endif + } free(dtio); } @@ -229,6 +243,30 @@ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) dtio->upstream_is_tcp = 1; dtio->ip_str = strdup("127.0.0.1@1234"); */ +#ifdef HAVE_SSL + dtio->upstream_is_tls = 1; + dtio->ip_str = strdup("127.0.0.1@1234"); + //dtio->tls_server_name; + dtio->use_client_certs = 0; + if(dtio->use_client_certs) { + //dtio->client_key_file = NULL; + //dtio->client_cert_file = NULL; + } else { + free(dtio->client_key_file); + dtio->client_key_file = NULL; + free(dtio->client_cert_file); + dtio->client_cert_file = NULL; + } + dtio->ssl_ctx = connect_sslctx_create(dtio->client_key_file, + dtio->client_cert_file, cfg->tls_cert_bundle, + cfg->tls_win_cert); + if(!dtio->ssl_ctx) { + log_err("could not setup SSL CTX"); + return 0; + } + /* DEBUG */ + return 1; +#endif if(cfg->dnstap_socket_path && cfg->dnstap_socket_path[0]) { dtio->socket_path = strdup(cfg->dnstap_socket_path); if(!dtio->socket_path) { @@ -442,6 +480,13 @@ static void dtio_close_output(struct dt_io_thread* dtio) return; ub_event_free(dtio->event); dtio->event = NULL; + if(dtio->ssl) { +#ifdef HAVE_SSL + SSL_shutdown(dtio->ssl); + SSL_free(dtio->ssl); + dtio->ssl = NULL; +#endif + } #ifndef USE_WINSOCK close(dtio->fd); #else @@ -1263,6 +1308,14 @@ static int dtio_open_output_tcp(struct dt_io_thread* dtio) return 1; } +/** setup the SSL structure for new connection */ +static int dtio_setup_ssl(struct dt_io_thread* dtio) +{ + dtio->ssl = outgoing_ssl_fd(dtio->ssl_ctx, dtio->fd); + if(!dtio->ssl) return 0; + return 1; +} + /** open the output file descriptor */ static void dtio_open_output(struct dt_io_thread* dtio) { @@ -1278,6 +1331,18 @@ static void dtio_open_output(struct dt_io_thread* dtio) return; } } + if(dtio->upstream_is_tls) { + if(!dtio_setup_ssl(dtio)) { +#ifndef USE_WINSOCK + close(dtio->fd); +#else + closesocket(dtio->fd); +#endif + dtio->fd = -1; + dtio_reconnect_enable(dtio); + return; + } + } dtio->check_nb_connect = 1; /* the EV_READ is to catch channel close, write to write packets */ @@ -1286,6 +1351,12 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio); if(!ev) { log_err("dnstap io: out of memory"); + if(dtio->ssl) { +#ifdef HAVE_SSL + SSL_free(dtio->ssl); + dtio->ssl = NULL; +#endif + } #ifndef USE_WINSOCK close(dtio->fd); #else @@ -1302,6 +1373,12 @@ static void dtio_open_output(struct dt_io_thread* dtio) log_err("dnstap io: out of memory"); ub_event_free(dtio->event); dtio->event = NULL; + if(dtio->ssl) { +#ifdef HAVE_SSL + SSL_free(dtio->ssl); + dtio->ssl = NULL; +#endif + } #ifndef USE_WINSOCK close(dtio->fd); #else diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 8fa2352f4..b388752d5 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -107,6 +107,8 @@ struct dt_io_thread { ub_thread_type tid; /** if the io processing has started */ int started; + /** ssl context for the io thread, for tls connections. type SSL_CTX* */ + void* ssl_ctx; /** file descriptor that the thread writes to */ int fd; @@ -118,6 +120,8 @@ struct dt_io_thread { int event_added_is_write; /** check for nonblocking connect errors on fd */ int check_nb_connect; + /** ssl for current connection, type SSL* */ + void* ssl; /** the buffer that currently getting written, or NULL if no * (partial) message written now */ From e5d43a6f4e133ba5fd650c95537e37a8643b11f8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 5 Feb 2020 13:03:58 +0100 Subject: [PATCH 067/235] dnstap io, close fd routine. --- dnstap/dtstream.c | 54 +++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 37 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 50dcbc083..6e3ade352 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -473,6 +473,17 @@ static void dtio_del_output_event(struct dt_io_thread* dtio) dtio->event_added_is_write = 0; } +/** close dtio socket and set it to -1 */ +static void dtio_close_fd(struct dt_io_thread* dtio) +{ +#ifndef USE_WINSOCK + close(dtio->fd); +#else + closesocket(dtio->fd); +#endif + dtio->fd = -1; +} + /** close and stop the output file descriptor event */ static void dtio_close_output(struct dt_io_thread* dtio) { @@ -487,12 +498,7 @@ static void dtio_close_output(struct dt_io_thread* dtio) dtio->ssl = NULL; #endif } -#ifndef USE_WINSOCK - close(dtio->fd); -#else - closesocket(dtio->fd); -#endif - dtio->fd = -1; + dtio_close_fd(dtio); /* if there is a (partial) message, discard it * we cannot send (the remainder of) it, and a new @@ -1239,12 +1245,7 @@ static int dtio_open_output_local(struct dt_io_thread* dtio) log_err("dnstap io: failed to connect to \"%s\": %s", to, wsa_strerror(WSAGetLastError())); #endif -#ifndef USE_WINSOCK - close(dtio->fd); -#else - closesocket(dtio->fd); -#endif - dtio->fd = -1; + dtio_close_fd(dtio); return 0; } return 1; @@ -1296,13 +1297,7 @@ static int dtio_open_output_tcp(struct dt_io_thread* dtio) dtio->ip_str, wsa_strerror(WSAGetLastError())); } #endif - -#ifndef USE_WINSOCK - close(dtio->fd); -#else - closesocket(dtio->fd); -#endif - dtio->fd = -1; + dtio_close_fd(dtio); return 0; } return 1; @@ -1333,12 +1328,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) } if(dtio->upstream_is_tls) { if(!dtio_setup_ssl(dtio)) { -#ifndef USE_WINSOCK - close(dtio->fd); -#else - closesocket(dtio->fd); -#endif - dtio->fd = -1; + dtio_close_fd(dtio); dtio_reconnect_enable(dtio); return; } @@ -1357,12 +1347,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio->ssl = NULL; #endif } -#ifndef USE_WINSOCK - close(dtio->fd); -#else - closesocket(dtio->fd); -#endif - dtio->fd = -1; + dtio_close_fd(dtio); dtio_reconnect_enable(dtio); return; } @@ -1379,12 +1364,7 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio->ssl = NULL; #endif } -#ifndef USE_WINSOCK - close(dtio->fd); -#else - closesocket(dtio->fd); -#endif - dtio->fd = -1; + dtio_close_fd(dtio); dtio_reconnect_enable(dtio); return; } From 5b117c851ae4087156db3c001c02a0bc9546e284 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 5 Feb 2020 13:59:56 +0100 Subject: [PATCH 068/235] dnstap io, ssl handshake. --- dnstap/dtstream.c | 211 ++++++++++++++++++++++++++++----- dnstap/dtstream.h | 6 + dnstap/unbound-dnstap-socket.c | 11 +- testcode/testbound.c | 5 + 4 files changed, 198 insertions(+), 35 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 6e3ade352..5db9d602a 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -66,6 +66,7 @@ /** the msec to wait for reconnect max after backoff */ #define DTIO_RECONNECT_TIMEOUT_MAX 1000 +struct stop_flush_info; /** DTIO command channel commands */ enum { /** DTIO command channel stop */ @@ -77,9 +78,11 @@ enum { /** open the output channel */ static void dtio_open_output(struct dt_io_thread* dtio); /** add output event for read and write */ -static void dtio_add_output_event_write(struct dt_io_thread* dtio); +static int dtio_add_output_event_write(struct dt_io_thread* dtio); /** start reconnection attempts */ static void dtio_reconnect_enable(struct dt_io_thread* dtio); +/** stop from stop_flush event loop */ +static void dtio_stop_flush_exit(struct stop_flush_info* info); struct dt_msg_queue* dt_msg_queue_create(void) @@ -395,7 +398,8 @@ static void dtio_reconnect_timeout_cb(int ATTR_UNUSED(fd), dtio_open_output(dtio); if(dtio->event) { - dtio_add_output_event_write(dtio); + if(!dtio_add_output_event_write(dtio)) + return; /* nothing wrong so far, wait on the output event */ return; } @@ -573,14 +577,6 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, ssize_t ret; if(dtio->fd == -1) return -1; - if(dtio->check_nb_connect) { - int connect_err = dtio_check_nb_connect(dtio); - if(connect_err == -1) { - return -1; - } else if(connect_err == 0) { - return 0; - } - } ret = send(dtio->fd, (void*)buf, len, 0); if(ret == -1) { #ifndef USE_WINSOCK @@ -612,17 +608,6 @@ static int dtio_write_with_writev(struct dt_io_thread* dtio) uint32_t sendlen = htonl(dtio->cur_msg_len); struct iovec iov[2]; ssize_t r; - if(dtio->check_nb_connect) { - int connect_err = dtio_check_nb_connect(dtio); - if(connect_err == -1) { - /* close the channel */ - dtio_del_output_event(dtio); - dtio_close_output(dtio); - return 0; - } else if(connect_err == 0) { - return 0; - } - } iov[0].iov_base = ((uint8_t*)&sendlen)+dtio->cur_msg_len_done; iov[0].iov_len = sizeof(sendlen)-dtio->cur_msg_len_done; iov[1].iov_base = dtio->cur_msg; @@ -794,12 +779,12 @@ static int dtio_check_close(struct dt_io_thread* dtio) } /** add the output file descriptor event for listening, read only */ -static void dtio_add_output_event_read(struct dt_io_thread* dtio) +static int dtio_add_output_event_read(struct dt_io_thread* dtio) { if(!dtio->event) - return; + return 0; if(dtio->event_added && !dtio->event_added_is_write) - return; + return 1; /* we have to (re-)register the event */ if(dtio->event_added) ub_event_del(dtio->event); @@ -810,19 +795,20 @@ static void dtio_add_output_event_read(struct dt_io_thread* dtio) dtio->event_added_is_write = 0; /* close output and start reattempts to open it */ dtio_close_output(dtio); - return; + return 0; } dtio->event_added = 1; dtio->event_added_is_write = 0; + return 1; } /** add the output file descriptor event for listening, read and write */ -static void dtio_add_output_event_write(struct dt_io_thread* dtio) +static int dtio_add_output_event_write(struct dt_io_thread* dtio) { if(!dtio->event) - return; + return 0; if(dtio->event_added && dtio->event_added_is_write) - return; + return 1; /* we have to (re-)register the event */ if(dtio->event_added) ub_event_del(dtio->event); @@ -833,10 +819,11 @@ static void dtio_add_output_event_write(struct dt_io_thread* dtio) dtio->event_added_is_write = 0; /* close output and start reattempts to open it */ dtio_close_output(dtio); - return; + return 0; } dtio->event_added = 1; dtio->event_added_is_write = 1; + return 1; } /** put the dtio thread to sleep */ @@ -844,7 +831,117 @@ static void dtio_sleep(struct dt_io_thread* dtio) { /* unregister the event polling for write, because there is * nothing to be written */ - dtio_add_output_event_read(dtio); + (void)dtio_add_output_event_read(dtio); +} + +/** enable the brief read condition */ +static int dtio_enable_brief_read(struct dt_io_thread* dtio) +{ + dtio->ssl_brief_read = 1; + if(dtio->stop_flush_event) { + ub_event_del(dtio->stop_flush_event); + ub_event_del_bits(dtio->stop_flush_event, UB_EV_WRITE); + if(ub_event_add(dtio->stop_flush_event, NULL) != 0) { + log_err("dnstap io, stop flush, could not ub_event_add"); + return 0; + } + return 1; + } + return dtio_add_output_event_read(dtio); +} + +/** disable the brief read condition */ +static int dtio_disable_brief_read(struct dt_io_thread* dtio) +{ + dtio->ssl_brief_read = 0; + if(dtio->stop_flush_event) { + ub_event_del(dtio->stop_flush_event); + ub_event_add_bits(dtio->stop_flush_event, UB_EV_WRITE); + if(ub_event_add(dtio->stop_flush_event, NULL) != 0) { + log_err("dnstap io, stop flush, could not ub_event_add"); + return 0; + } + return 1; + } + return dtio_add_output_event_write(dtio); +} + +/** perform ssl handshake, returns 1 if okay, 0 to stop */ +static int dtio_ssl_handshake(struct dt_io_thread* dtio, + struct stop_flush_info* info) +{ + int r; + if(dtio->ssl_brief_read) { + /* assume the brief read condition is satisfied, + * if we need more or again, we can set it again */ + if(!dtio_disable_brief_read(dtio)) { + if(info) dtio_stop_flush_exit(info); + return 0; + } + } + if(dtio->ssl_handshake_done) + return 1; + + ERR_clear_error(); + r = SSL_do_handshake(dtio->ssl); + if(r != 1) { + int want = SSL_get_error(dtio->ssl, r); + if(want == SSL_ERROR_WANT_READ) { + /* we want to read on the connection */ + if(!dtio_enable_brief_read(dtio)) { + if(info) dtio_stop_flush_exit(info); + return 0; + } + return 0; + } else if(want == SSL_ERROR_WANT_WRITE) { + /* we want to write on the connection */ + return 0; + } else if(r == 0) { + /* closed */ + if(info) dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; + } else if(want == SSL_ERROR_SYSCALL) { + /* SYSCALL and errno==0 means closed uncleanly */ + int silent = 0; +#ifdef EPIPE + if(errno == EPIPE && verbosity < 2) + silent = 1; /* silence 'broken pipe' */ +#endif +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + silent = 1; /* silence reset by peer */ +#endif + if(errno == 0) + silent = 1; + if(!silent) + log_err("dnstap io, SSL_handshake syscall: %s", + strerror(errno)); + /* closed */ + if(info) dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; + } else { + unsigned long err = ERR_get_error(); + if(!squelch_err_ssl_handshake(err)) { + log_crypto_err_code("dnstap io, ssl handshake failed", + err); + verbose(VERB_OPS, "dnstap io, ssl handshake failed " + "from %s", dtio->ip_str); + } + /* closed */ + if(info) dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; + } + + } + /* check peer verification */ + dtio->ssl_handshake_done = 1; + return 1; } /** callback for the dnstap events, to write to the output */ @@ -853,6 +950,26 @@ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) struct dt_io_thread* dtio = (struct dt_io_thread*)arg; int i; + if(dtio->check_nb_connect) { + int connect_err = dtio_check_nb_connect(dtio); + if(connect_err == -1) { + /* close the channel */ + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return; + } else if(connect_err == 0) { + /* try again later */ + return; + } + /* nonblocking connect check passed, continue */ + } + + if(dtio->ssl && + (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) { + if(!dtio_ssl_handshake(dtio, NULL)) + return; + } + if((bits&UB_EV_READ)) { if(!dtio_check_close(dtio)) return; @@ -919,7 +1036,8 @@ static void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) } else if(r == 1 && cmd == DTIO_COMMAND_WAKEUP) { verbose(VERB_ALGO, "dnstap io: cmd channel cmd wakeup"); /* reregister event */ - dtio_add_output_event_write(dtio); + if(!dtio_add_output_event_write(dtio)) + return; return; } else if(r == 1) { verbose(VERB_ALGO, "dnstap io: cmd channel unknown command"); @@ -1045,6 +1163,28 @@ static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) struct dt_io_thread* dtio = info->dtio; if(info->want_to_exit_flush) return; + if(dtio->check_nb_connect) { + /* we don't start the stop_flush if connect still + * in progress, but the check code is here, just in case */ + int connect_err = dtio_check_nb_connect(dtio); + if(connect_err == -1) { + /* close the channel, exit the stop flush */ + dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return; + } else if(connect_err == 0) { + /* try again later */ + return; + } + /* nonblocking connect check passed, continue */ + } + if(dtio->ssl && + (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) { + if(!dtio_ssl_handshake(dtio, info)) + return; + } + if((bits&UB_EV_READ)) { if(!dtio_check_close(dtio)) { if(dtio->fd == -1) { @@ -1098,6 +1238,10 @@ static void dtio_control_stop_flush(struct dt_io_thread* dtio) * sent yet, so nothing to stop or flush */ return; } + if(dtio->ssl && !dtio->ssl_handshake_done) { + /* no SSL connection has been established yet */ + return; + } memset(&info, 0, sizeof(info)); memset(&now, 0, sizeof(now)); @@ -1308,6 +1452,8 @@ static int dtio_setup_ssl(struct dt_io_thread* dtio) { dtio->ssl = outgoing_ssl_fd(dtio->ssl_ctx, dtio->fd); if(!dtio->ssl) return 0; + dtio->ssl_handshake_done = 0; + dtio->ssl_brief_read = 0; return 1; } @@ -1376,7 +1522,8 @@ static void dtio_setup_on_base(struct dt_io_thread* dtio) dtio_setup_cmd(dtio); dtio_setup_reconnect(dtio); dtio_open_output(dtio); - dtio_add_output_event_write(dtio); + if(!dtio_add_output_event_write(dtio)) + return; } #ifndef THREADS_DISABLED diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index b388752d5..bb6cebbe6 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -122,6 +122,12 @@ struct dt_io_thread { int check_nb_connect; /** ssl for current connection, type SSL* */ void* ssl; + /** true if the handshake for SSL is done, 0 if not */ + int ssl_handshake_done; + /** true if briefly the SSL wants a read event, 0 if not. + * This happens during negotiation, we then do not want to write, + * but wait for a read event. */ + int ssl_brief_read; /** the buffer that currently getting written, or NULL if no * (partial) message written now */ diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 011d015dc..e5a52967a 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -891,15 +891,18 @@ static int tap_handshake(struct tap_data* data) return 0; } else if(want == SSL_ERROR_SYSCALL) { /* SYSCALL and errno==0 means closed uncleanly */ + int silent = 0; #ifdef EPIPE if(errno == EPIPE && verbosity < 2) - return 0; /* silence 'broken pipe' */ + silent = 1; /* silence 'broken pipe' */ #endif #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) - return 0; /* silence reset by peer */ + silent = 1; /* silence reset by peer */ #endif - if(errno != 0) + if(errno == 0) + silent = 1; + if(!silent) log_err("SSL_handshake syscall: %s", strerror(errno)); tap_data_free(data); @@ -912,6 +915,8 @@ static int tap_handshake(struct tap_data* data) verbose(VERB_OPS, "ssl handshake failed " "from %s", data->id); } + tap_data_free(data); + return 0; } } /* check peer verification */ diff --git a/testcode/testbound.c b/testcode/testbound.c index fdbc0b92d..602dffaff 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -582,3 +582,8 @@ int tcp_connect_errno_needs_log(struct sockaddr* ATTR_UNUSED(addr), { return 1; } + +int squelch_err_ssl_handshake(unsigned long ATTR_UNUSED(err)) +{ + return 0; +} From 812d8f71e8f9f369d8895a459099cc14c815d9ce Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 5 Feb 2020 15:04:04 +0100 Subject: [PATCH 069/235] dnstap io, ssl write. --- dnstap/dtstream.c | 60 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 5db9d602a..a33103ec1 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -83,6 +83,8 @@ static int dtio_add_output_event_write(struct dt_io_thread* dtio); static void dtio_reconnect_enable(struct dt_io_thread* dtio); /** stop from stop_flush event loop */ static void dtio_stop_flush_exit(struct stop_flush_info* info); +/** enable briefly waiting for a read event, for SSL negotiation */ +static int dtio_enable_brief_read(struct dt_io_thread* dtio); struct dt_msg_queue* dt_msg_queue_create(void) @@ -568,6 +570,48 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) return 1; /* everything okay */ } +/** write to ssl output + * returns number of bytes written, 0 if nothing happened, + * try again later, or -1 if the channel is to be closed. */ +static int dtio_write_ssl(struct dt_io_thread* dtio, uint8_t* buf, + size_t len) +{ + int r; + ERR_clear_error(); + r = SSL_write(dtio->ssl, buf, len); + if(r <= 0) { + int want = SSL_get_error(dtio->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + /* closed */ + return -1; + } else if(want == SSL_ERROR_WANT_READ) { + /* we want a brief read event */ + dtio_enable_brief_read(dtio); + return 0; + } else if(want == SSL_ERROR_WANT_WRITE) { + /* write again later */ + return 0; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef EPIPE + if(errno == EPIPE && verbosity < 2) + return -1; /* silence 'broken pipe' */ +#endif +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return -1; /* silence reset by peer */ +#endif + if(errno != 0) { + log_err("dnstap io, SSL_write syscall: %s", + strerror(errno)); + } + return -1; + } + log_crypto_err("dnstap io, could not SSL_write"); + return -1; + } + return r; +} + /** write buffer to output. * returns number of bytes written, 0 if nothing happened, * try again later, or -1 if the channel is to be closed. */ @@ -577,6 +621,8 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, ssize_t ret; if(dtio->fd == -1) return -1; + if(dtio->ssl) + return dtio_write_ssl(dtio, buf, len); ret = send(dtio->fd, (void*)buf, len, 0); if(ret == -1) { #ifndef USE_WINSOCK @@ -654,16 +700,17 @@ static int dtio_write_with_writev(struct dt_io_thread* dtio) * return true if message is done, false if incomplete. */ static int dtio_write_more_of_len(struct dt_io_thread* dtio) { -#ifndef HAVE_WRITEV - uint32_t sendlen = htonl(dtio->cur_msg_len); + uint32_t sendlen; int r; -#endif if(dtio->cur_msg_len_done >= 4) return 1; #ifdef HAVE_WRITEV - /* we try writev for everything.*/ - return dtio_write_with_writev(dtio); -#else + if(!dtio->ssl) { + /* we try writev for everything.*/ + return dtio_write_with_writev(dtio); + } +#endif /* HAVE_WRITEV */ + sendlen = htonl(dtio->cur_msg_len); r = dtio_write_buf(dtio, ((uint8_t*)&sendlen)+dtio->cur_msg_len_done, sizeof(sendlen)-dtio->cur_msg_len_done); @@ -680,7 +727,6 @@ static int dtio_write_more_of_len(struct dt_io_thread* dtio) if(dtio->cur_msg_len_done < 4) return 0; return 1; -#endif /* HAVE_WRITEV */ } /** write more of the data frame. From ad180402ea781e1209015255b3245f217f293058 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 5 Feb 2020 16:17:21 +0100 Subject: [PATCH 070/235] dnstap io, set tls auth name in outgoing ssl --- dnstap/dtstream.c | 4 ++++ services/outside_network.c | 44 ++++++-------------------------------- util/net_help.c | 34 +++++++++++++++++++++++++++++ util/net_help.h | 8 +++++++ 4 files changed, 52 insertions(+), 38 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index a33103ec1..0ea933dc9 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1500,6 +1500,10 @@ static int dtio_setup_ssl(struct dt_io_thread* dtio) if(!dtio->ssl) return 0; dtio->ssl_handshake_done = 0; dtio->ssl_brief_read = 0; + + if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name)) { + return 0; + } return 1; } diff --git a/services/outside_network.c b/services/outside_network.c index 9876c2150..612767056 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -373,45 +373,13 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl); #endif pend->c->ssl_shake_state = comm_ssl_shake_write; - if(w->tls_auth_name) { -#ifdef HAVE_SSL - (void)SSL_set_tlsext_host_name(pend->c->ssl, w->tls_auth_name); -#endif + if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name)) { + pend->c->fd = s; + SSL_free(pend->c->ssl); + pend->c->ssl = NULL; + comm_point_close(pend->c); + return 0; } -#ifdef HAVE_SSL_SET1_HOST - if(w->tls_auth_name) { - SSL_set_verify(pend->c->ssl, SSL_VERIFY_PEER, NULL); - /* setting the hostname makes openssl verify the - * host name in the x509 certificate in the - * SSL connection*/ - if(!SSL_set1_host(pend->c->ssl, w->tls_auth_name)) { - log_err("SSL_set1_host failed"); - pend->c->fd = s; - SSL_free(pend->c->ssl); - pend->c->ssl = NULL; - comm_point_close(pend->c); - return 0; - } - } -#elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) - /* openssl 1.0.2 has this function that can be used for - * set1_host like verification */ - if(w->tls_auth_name) { - X509_VERIFY_PARAM* param = SSL_get0_param(pend->c->ssl); - X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); - if(!X509_VERIFY_PARAM_set1_host(param, w->tls_auth_name, strlen(w->tls_auth_name))) { - log_err("X509_VERIFY_PARAM_set1_host failed"); - pend->c->fd = s; - SSL_free(pend->c->ssl); - pend->c->ssl = NULL; - comm_point_close(pend->c); - return 0; - } - SSL_set_verify(pend->c->ssl, SSL_VERIFY_PEER, NULL); - } -#else - verbose(VERB_ALGO, "the query has an auth_name, but libssl has no call to perform TLS authentication"); -#endif /* HAVE_SSL_SET1_HOST */ } w->pkt = NULL; w->next_waiting = (void*)pend; diff --git a/util/net_help.c b/util/net_help.c index 0869f91f9..7e0a7ac08 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1191,6 +1191,40 @@ void* outgoing_ssl_fd(void* sslctx, int fd) #endif } +/** set the authname on an SSL structure, SSL* ssl */ +int set_auth_name_on_ssl(void* ssl, char* auth_name) +{ + if(!auth_name) return 1; +#ifdef HAVE_SSL + (void)SSL_set_tlsext_host_name(ssl, auth_name); +#endif +#ifdef HAVE_SSL_SET1_HOST + SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL); + /* setting the hostname makes openssl verify the + * host name in the x509 certificate in the + * SSL connection*/ + if(!SSL_set1_host(ssl, auth_name)) { + log_err("SSL_set1_host failed"); + return 0; + } +#elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) + /* openssl 1.0.2 has this function that can be used for + * set1_host like verification */ + if(auth_name) { + X509_VERIFY_PARAM* param = SSL_get0_param(ssl); + X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); + if(!X509_VERIFY_PARAM_set1_host(param, auth_name, strlen(auth_name))) { + log_err("X509_VERIFY_PARAM_set1_host failed"); + return 0; + } + SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL); + } +#else + verbose(VERB_ALGO, "the query has an auth_name, but libssl has no call to perform TLS authentication"); +#endif /* HAVE_SSL_SET1_HOST */ + return 1; +} + #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK) && OPENSSL_VERSION_NUMBER < 0x10100000L /** global lock list for openssl locks */ static lock_basic_type *ub_openssl_locks = NULL; diff --git a/util/net_help.h b/util/net_help.h index 7a33a7203..b621639c0 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -434,6 +434,14 @@ void* incoming_ssl_fd(void* sslctx, int fd); */ void* outgoing_ssl_fd(void* sslctx, int fd); +/** + * set auth name on SSL for verification + * @param ssl: SSL* to set + * @param auth_name: if NULL nothing happens, otherwise the name to check. + * @return 1 on success or NULL auth_name, 0 on failure. + */ +int set_auth_name_on_ssl(void* ssl, char* auth_name); + /** * Initialize openssl locking for thread safety * @return false on failure (alloc failure). From 25a88d6d54ba94f9024a0b6efa053d9ec1f6df58 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 12 Feb 2020 15:23:58 +0100 Subject: [PATCH 071/235] dnstap io, check peer verification in dtstream dtio_ssl_handshake. --- dnstap/dtstream.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++ util/net_help.c | 26 +++++++++++++++++++++++ util/net_help.h | 8 +++++++ util/netevent.c | 26 ----------------------- 4 files changed, 88 insertions(+), 26 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 0ea933dc9..067f4a2db 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -987,6 +987,60 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, } /* check peer verification */ dtio->ssl_handshake_done = 1; + + if((SSL_get_verify_mode(dtio->ssl)&SSL_VERIFY_PEER)) { + /* verification */ + if(SSL_get_verify_result(dtio->ssl) == X509_V_OK) { + X509* x = SSL_get_peer_certificate(dtio->ssl); + if(!x) { + verbose(VERB_ALGO, "dnstap io, %s, SSL " + "connection failed no certificate", + dtio->ip_str); + /* closed */ + if(info) dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; + } + log_cert(VERB_ALGO, "dnstap io, peer certificate", + x); +#ifdef HAVE_SSL_GET0_PEERNAME + if(SSL_get0_peername(dtio->ssl)) { + verbose(VERB_ALGO, "dnstap io, %s, SSL " + "connection to %s authenticated", + dtio->ip_str, + SSL_get0_peername(dtio->ssl)); + } else { +#endif + verbose(VERB_ALGO, "dnstap io, %s, SSL " + "connection authenticated", + dtio->ip_str); +#ifdef HAVE_SSL_GET0_PEERNAME + } +#endif + X509_free(x); + } else { + X509* x = SSL_get_peer_certificate(dtio->ssl); + if(x) { + log_cert(VERB_ALGO, "dnstap io, peer " + "certificate", x); + X509_free(x); + } + verbose(VERB_ALGO, "dnstap io, %s, SSL connection " + "failed: failed to authenticate", + dtio->ip_str); + /* closed */ + if(info) dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; + } + } else { + /* unauthenticated, the verify peer flag was not set + * in ssl when the ssl object was created from ssl_ctx */ + verbose(VERB_ALGO, "dnstap io, %s, SSL connection", + dtio->ip_str); + } return 1; } diff --git a/util/net_help.c b/util/net_help.c index 7e0a7ac08..007eaff0b 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -829,6 +829,32 @@ void log_crypto_err_code(const char* str, unsigned long err) #endif /* HAVE_SSL */ } +#ifdef HAVE_SSL +/** log certificate details */ +void +log_cert(unsigned level, const char* str, void* cert) +{ + BIO* bio; + char nul = 0; + char* pp = NULL; + long len; + if(verbosity < level) return; + bio = BIO_new(BIO_s_mem()); + if(!bio) return; + X509_print_ex(bio, (X509*)cert, 0, (unsigned long)-1 + ^(X509_FLAG_NO_SUBJECT + |X509_FLAG_NO_ISSUER|X509_FLAG_NO_VALIDITY + |X509_FLAG_NO_EXTENSIONS|X509_FLAG_NO_AUX + |X509_FLAG_NO_ATTRIBUTES)); + BIO_write(bio, &nul, (int)sizeof(nul)); + len = BIO_get_mem_data(bio, &pp); + if(len != 0 && pp) { + verbose(level, "%s: \n%s", str, pp); + } + BIO_free(bio); +} +#endif /* HAVE_SSL */ + int listen_sslctx_setup(void* ctxt) { diff --git a/util/net_help.h b/util/net_help.h index b621639c0..6df9f9b39 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -385,6 +385,14 @@ void log_crypto_err(const char* str); */ void log_crypto_err_code(const char* str, unsigned long err); +/** + * Log certificate details verbosity, string, of X509 cert + * @param level: verbosity level + * @param str: string to prefix on output + * @param cert: X509* structure. + */ +void log_cert(unsigned level, const char* str, void* cert); + /** * Set SSL_OP_NOxxx options on SSL context to disable bad crypto * @param ctxt: SSL_CTX* diff --git a/util/netevent.c b/util/netevent.c index e334e5008..090238384 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1026,32 +1026,6 @@ tcp_callback_reader(struct comm_point* c) } } -#ifdef HAVE_SSL -/** log certificate details */ -static void -log_cert(unsigned level, const char* str, X509* cert) -{ - BIO* bio; - char nul = 0; - char* pp = NULL; - long len; - if(verbosity < level) return; - bio = BIO_new(BIO_s_mem()); - if(!bio) return; - X509_print_ex(bio, cert, 0, (unsigned long)-1 - ^(X509_FLAG_NO_SUBJECT - |X509_FLAG_NO_ISSUER|X509_FLAG_NO_VALIDITY - |X509_FLAG_NO_EXTENSIONS|X509_FLAG_NO_AUX - |X509_FLAG_NO_ATTRIBUTES)); - BIO_write(bio, &nul, (int)sizeof(nul)); - len = BIO_get_mem_data(bio, &pp); - if(len != 0 && pp) { - verbose(level, "%s: \n%s", str, pp); - } - BIO_free(bio); -} -#endif /* HAVE_SSL */ - #ifdef HAVE_SSL /** true if the ssl handshake error has to be squelched from the logs */ int From 571426095375080d08716ba7ffbc727cc9358bf4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 12 Feb 2020 15:34:56 +0100 Subject: [PATCH 072/235] dnstap io, move peer check into routine. --- dnstap/dtstream.c | 109 ++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 52 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 067f4a2db..3492c4380 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -912,6 +912,57 @@ static int dtio_disable_brief_read(struct dt_io_thread* dtio) return dtio_add_output_event_write(dtio); } +/** check peer verification after ssl handshake connection, false if closed*/ +static int dtio_ssl_check_peer(struct dt_io_thread* dtio) +{ + if((SSL_get_verify_mode(dtio->ssl)&SSL_VERIFY_PEER)) { + /* verification */ + if(SSL_get_verify_result(dtio->ssl) == X509_V_OK) { + X509* x = SSL_get_peer_certificate(dtio->ssl); + if(!x) { + verbose(VERB_ALGO, "dnstap io, %s, SSL " + "connection failed no certificate", + dtio->ip_str); + return 0; + } + log_cert(VERB_ALGO, "dnstap io, peer certificate", + x); +#ifdef HAVE_SSL_GET0_PEERNAME + if(SSL_get0_peername(dtio->ssl)) { + verbose(VERB_ALGO, "dnstap io, %s, SSL " + "connection to %s authenticated", + dtio->ip_str, + SSL_get0_peername(dtio->ssl)); + } else { +#endif + verbose(VERB_ALGO, "dnstap io, %s, SSL " + "connection authenticated", + dtio->ip_str); +#ifdef HAVE_SSL_GET0_PEERNAME + } +#endif + X509_free(x); + } else { + X509* x = SSL_get_peer_certificate(dtio->ssl); + if(x) { + log_cert(VERB_ALGO, "dnstap io, peer " + "certificate", x); + X509_free(x); + } + verbose(VERB_ALGO, "dnstap io, %s, SSL connection " + "failed: failed to authenticate", + dtio->ip_str); + return 0; + } + } else { + /* unauthenticated, the verify peer flag was not set + * in ssl when the ssl object was created from ssl_ctx */ + verbose(VERB_ALGO, "dnstap io, %s, SSL connection", + dtio->ip_str); + } + return 1; +} + /** perform ssl handshake, returns 1 if okay, 0 to stop */ static int dtio_ssl_handshake(struct dt_io_thread* dtio, struct stop_flush_info* info) @@ -988,58 +1039,12 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, /* check peer verification */ dtio->ssl_handshake_done = 1; - if((SSL_get_verify_mode(dtio->ssl)&SSL_VERIFY_PEER)) { - /* verification */ - if(SSL_get_verify_result(dtio->ssl) == X509_V_OK) { - X509* x = SSL_get_peer_certificate(dtio->ssl); - if(!x) { - verbose(VERB_ALGO, "dnstap io, %s, SSL " - "connection failed no certificate", - dtio->ip_str); - /* closed */ - if(info) dtio_stop_flush_exit(info); - dtio_del_output_event(dtio); - dtio_close_output(dtio); - return 0; - } - log_cert(VERB_ALGO, "dnstap io, peer certificate", - x); -#ifdef HAVE_SSL_GET0_PEERNAME - if(SSL_get0_peername(dtio->ssl)) { - verbose(VERB_ALGO, "dnstap io, %s, SSL " - "connection to %s authenticated", - dtio->ip_str, - SSL_get0_peername(dtio->ssl)); - } else { -#endif - verbose(VERB_ALGO, "dnstap io, %s, SSL " - "connection authenticated", - dtio->ip_str); -#ifdef HAVE_SSL_GET0_PEERNAME - } -#endif - X509_free(x); - } else { - X509* x = SSL_get_peer_certificate(dtio->ssl); - if(x) { - log_cert(VERB_ALGO, "dnstap io, peer " - "certificate", x); - X509_free(x); - } - verbose(VERB_ALGO, "dnstap io, %s, SSL connection " - "failed: failed to authenticate", - dtio->ip_str); - /* closed */ - if(info) dtio_stop_flush_exit(info); - dtio_del_output_event(dtio); - dtio_close_output(dtio); - return 0; - } - } else { - /* unauthenticated, the verify peer flag was not set - * in ssl when the ssl object was created from ssl_ctx */ - verbose(VERB_ALGO, "dnstap io, %s, SSL connection", - dtio->ip_str); + if(!dtio_ssl_check_peer(dtio)) { + /* closed */ + if(info) dtio_stop_flush_exit(info); + dtio_del_output_event(dtio); + dtio_close_output(dtio); + return 0; } return 1; } From 76772fe786c8ef954b2f9510b079dca04895cf03 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 12 Feb 2020 16:49:18 +0100 Subject: [PATCH 073/235] dnstap io, check peer verification in unbound-dnstap-socket tap_handshake. --- dnstap/unbound-dnstap-socket.c | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index e5a52967a..eda75e0c0 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -865,6 +865,52 @@ static int reply_with_finish(int fd) return 1; } +/** check SSL peer certificate, return 0 on fail */ +static int tap_check_peer(struct tap_data* data) +{ + if((SSL_get_verify_mode(data->ssl)&SSL_VERIFY_PEER)) { + /* verification */ + if(SSL_get_verify_result(data->ssl) == X509_V_OK) { + X509* x = SSL_get_peer_certificate(data->ssl); + if(!x) { + if(verbosity) log_info("SSL connection %s" + " failed no certificate", data->id); + return 0; + } + if(verbosity) + log_cert(VERB_ALGO, "peer certificate", x); +#ifdef HAVE_SSL_GET0_PEERNAME + if(SSL_get0_peername(data->ssl)) { + if(verbosity) log_info("SSL connection %s " + "to %s authenticated", data->id, + SSL_get0_peername(data->ssl)); + } else { +#endif + if(verbosity) log_info("SSL connection %s " + "authenticated", data->id); +#ifdef HAVE_SSL_GET0_PEERNAME + } +#endif + X509_free(x); + } else { + X509* x = SSL_get_peer_certificate(data->ssl); + if(x) { + if(verbosity) + log_cert(VERB_ALGO, "peer certificate", x); + X509_free(x); + } + if(verbosity) log_info("SSL connection %s failed: " + "failed to authenticate", data->id); + return 0; + } + } else { + /* unauthenticated, the verify peer flag was not set + * in ssl when the ssl object was created from ssl_ctx */ + if(verbosity) log_info("SSL connection %s", data->id); + } + return 1; +} + /** perform SSL handshake, return 0 to wait for events, 1 if done */ static int tap_handshake(struct tap_data* data) { @@ -921,6 +967,11 @@ static int tap_handshake(struct tap_data* data) } /* check peer verification */ data->ssl_handshake_done = 1; + if(!tap_check_peer(data)) { + /* closed */ + tap_data_free(data); + return 0; + } return 1; } From 77bdbc6e98ff9315f57fe13ecd7c0628183be85a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 07:54:49 +0100 Subject: [PATCH 074/235] - Fix spelling in unbound.conf.5.in. --- doc/Changelog | 6 ++++++ doc/unbound.conf.5.in | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 25ad03100..1e1c7c11b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +14 February 2020: Wouter + - Fix spelling in unbound.conf.5.in. + +13 February 2020: Wouter + - tag for 1.10.0rc1 release. + 12 February 2020: Wouter - Fix with libnettle make test with dsa disabled. - Fix contrib/fastrpz.patch to apply cleanly. Fix for serve-stale diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 38c2d2984..aef2e977f 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -65,7 +65,7 @@ server: .SH "FILE FORMAT" There must be whitespace between keywords. Attribute keywords end with a colon ':'. An attribute is followed by a value, or its containing attributes -in which case it is refered to as a clause. Clauses can be repeated throughout +in which case it is referred to as a clause. Clauses can be repeated throughout the file (or included files) to group attributes under the same clause. .P Files can be included using the @@ -2174,7 +2174,7 @@ Specify a string to be part of the log line, for easy referencing. .TP .B tags: \fI Limit the policies from this RPZ clause to clients with a matching tag. Tags -need to be defined in \fBdefine\-tag\fR and can be assiged to client addresses +need to be defined in \fBdefine\-tag\fR and can be assigned to client addresses using \fBaccess\-control\-tag\fR. Enclose list of tags in quotes ("") and put spaces between tags. If no tags are specified the policies from this clause will be applied for all clients. From 2665ae0414341dd6f2aed5d90588d55bd2a87be8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 07:57:57 +0100 Subject: [PATCH 075/235] - Stop unbound-checkconf from insisting that auth-zone and rpz zonefiles have to exist. They can not exist, and download later. --- doc/Changelog | 2 ++ smallapp/unbound-checkconf.c | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 1e1c7c11b..6bbb4dba5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 14 February 2020: Wouter - Fix spelling in unbound.conf.5.in. + - Stop unbound-checkconf from insisting that auth-zone and rpz + zonefiles have to exist. They can not exist, and download later. 13 February 2020: Wouter - tag for 1.10.0rc1 release. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 07b8f4522..27c6d4c3a 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -469,7 +469,6 @@ check_modules_exist(const char* module_conf) static void morechecks(struct config_file* cfg) { - struct config_auth* auth; warn_hosts("stub-host", cfg->stubs); warn_hosts("forward-host", cfg->forwards); interfacechecks(cfg); @@ -535,12 +534,6 @@ morechecks(struct config_file* cfg) cfg->trusted_keys_file_list, cfg->chrootdir, cfg); check_chroot_string("dlv-anchor-file", &cfg->dlv_anchor_file, cfg->chrootdir, cfg); - for(auth = cfg->auths; auth; auth = auth->next) { - char* az = (auth->isrpz) ? "rpz zonefile" : - "auth-zone zonefile"; - check_chroot_string(az, &auth->zonefile, - cfg->chrootdir, cfg); - } #ifdef USE_IPSECMOD if(cfg->ipsecmod_enabled && strstr(cfg->module_conf, "ipsecmod")) { /* only check hook if enabled */ From 78e6060858fb189cf77e3a618d8cd0de880c2c6e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 09:03:09 +0100 Subject: [PATCH 076/235] dnstap io, example.conf example, config_file entries for tcp and tls. --- configure | 3 ++ configure.ac | 1 + dnstap/dtstream.c | 126 +++++++++++++++++++++++++++++++++----------- doc/example.conf.in | 32 +++++++++++ util/config_file.c | 20 +++++++ util/config_file.h | 12 +++++ 6 files changed, 163 insertions(+), 31 deletions(-) diff --git a/configure b/configure index e013dc5de..d66138c22 100755 --- a/configure +++ b/configure @@ -649,6 +649,7 @@ ENABLE_DNSCRYPT ENABLE_DNSCRYPT_XCHACHA20 DNSTAP_OBJ DNSTAP_SRC +DNSTAP_SOCKET_PATH opt_dnstap_socket_path ENABLE_DNSTAP PROTOC_C @@ -21038,6 +21039,8 @@ cat >>confdefs.h <<_ACEOF #define DNSTAP_SOCKET_PATH "$hdr_dnstap_socket_path" _ACEOF + DNSTAP_SOCKET_PATH="$hdr_dnstap_socket_path" + DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c" diff --git a/configure.ac b/configure.ac index 91f4cfbae..50daab3c2 100644 --- a/configure.ac +++ b/configure.ac @@ -1687,6 +1687,7 @@ dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path) AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, ["$hdr_dnstap_socket_path"], [default dnstap socket path]) + AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"]) AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"]) AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"]) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 3492c4380..4af83cd41 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -244,41 +244,105 @@ void dt_io_thread_delete(struct dt_io_thread* dtio) int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) { - /* - dtio->upstream_is_tcp = 1; - dtio->ip_str = strdup("127.0.0.1@1234"); - */ -#ifdef HAVE_SSL - dtio->upstream_is_tls = 1; - dtio->ip_str = strdup("127.0.0.1@1234"); - //dtio->tls_server_name; - dtio->use_client_certs = 0; - if(dtio->use_client_certs) { - //dtio->client_key_file = NULL; - //dtio->client_cert_file = NULL; - } else { - free(dtio->client_key_file); - dtio->client_key_file = NULL; - free(dtio->client_cert_file); - dtio->client_cert_file = NULL; - } - dtio->ssl_ctx = connect_sslctx_create(dtio->client_key_file, - dtio->client_cert_file, cfg->tls_cert_bundle, - cfg->tls_win_cert); - if(!dtio->ssl_ctx) { - log_err("could not setup SSL CTX"); + if(!cfg->dnstap) { + log_warn("cannot setup dnstap because dnstap-enable is no"); return 0; } - /* DEBUG */ - return 1; -#endif - if(cfg->dnstap_socket_path && cfg->dnstap_socket_path[0]) { - dtio->socket_path = strdup(cfg->dnstap_socket_path); - if(!dtio->socket_path) { - log_err("malloc failure"); + + /* what type of connectivity do we have */ + if(cfg->dnstap_ip && cfg->dnstap_ip[0]) { + if(cfg->dnstap_tls) + dtio->upstream_is_tls = 1; + else dtio->upstream_is_tcp = 1; + } else { + dtio->upstream_is_unix = 1; + } + + if(dtio->upstream_is_unix) { + if(!cfg->dnstap_socket_path || + cfg->dnstap_socket_path[0]==0) { + log_err("dnstap setup failed, because dnstap is " + "enabled, but no dnstap-ip and no " + "dnstap-socket-path are given"); return 0; } - dtio->upstream_is_unix = 1; + free(dtio->socket_path); + dtio->socket_path = strdup(cfg->dnstap_socket_path); + if(!dtio->socket_path) { + log_err("dnstap setup: malloc failure"); + return 0; + } + } + + if(dtio->upstream_is_tcp || dtio->upstream_is_tls) { + free(dtio->ip_str); + dtio->ip_str = strdup(cfg->dnstap_ip); + if(!dtio->ip_str) { + log_err("dnstap setup: malloc failure"); + return 0; + } + } + + if(dtio->upstream_is_tls) { +#ifdef HAVE_SSL + if(cfg->dnstap_tls_server_name && + cfg->dnstap_tls_server_name[0]) { + free(dtio->tls_server_name); + dtio->tls_server_name = strdup( + cfg->dnstap_tls_server_name); + if(!dtio->tls_server_name) { + log_err("dnstap setup: malloc failure"); + return 0; + } + } + if(cfg->dnstap_tls_client_key_file && + cfg->dnstap_tls_client_key_file[0]) { + dtio->use_client_certs = 1; + free(dtio->client_key_file); + dtio->client_key_file = strdup( + cfg->dnstap_tls_client_key_file); + if(!dtio->client_key_file) { + log_err("dnstap setup: malloc failure"); + return 0; + } + if(!cfg->dnstap_tls_client_cert_file || + cfg->dnstap_tls_client_cert_file[0]==0) { + log_err("dnstap setup: client key " + "authentication enabled with " + "dnstap-tls-client-key-file, but " + "no dnstap-tls-client-cert-file " + "is given"); + return 0; + } + free(dtio->client_cert_file); + dtio->client_cert_file = strdup( + cfg->dnstap_tls_client_cert_file); + if(!dtio->client_cert_file) { + log_err("dnstap setup: malloc failure"); + return 0; + } + } else { + dtio->use_client_certs = 0; + dtio->client_key_file = NULL; + dtio->client_cert_file = NULL; + } + + if(cfg->dnstap_tls_cert_bundle) { + dtio->ssl_ctx = connect_sslctx_create( + dtio->client_key_file, + dtio->client_cert_file, + cfg->dnstap_tls_cert_bundle, 0); + } else { + dtio->ssl_ctx = connect_sslctx_create( + dtio->client_key_file, + dtio->client_cert_file, + cfg->tls_cert_bundle, cfg->tls_win_cert); + } + if(!dtio->ssl_ctx) { + log_err("could not setup SSL CTX"); + return 0; + } +#endif /* HAVE_SSL */ } return 1; } diff --git a/doc/example.conf.in b/doc/example.conf.in index 4ce9348c2..ec1b1ac70 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1016,6 +1016,38 @@ remote-control: # name-v6: "list-v6" # +# Dnstap logging support, if compiled in. To enable, set the dnstap-enable +# to yes and also some of dnstap-log-..-messages to yes. And select an +# upstream log destination, by socket path, TCP or TLS destination. +# dnstap: +# dnstap-enable: no +# dnstap-socket-path: "@DNSTAP_SOCKET_PATH@" +# # if "" use the unix socket in dnstap-socket-path, otherwise, +# # set it to "IPaddress[@port]" of the destination. +# dnstap-ip: "" +# # if set to yes if you want to use TLS to dnstap-ip, no for TCP. +# dnstap-tls: no +# # name for authenticating the upstream server. or "" disabled. +# dnstap-tls-server-name: "" +# # if "", it uses the cert bundle from the main unbound config. +# dnstap-tls-cert-bundle: "" +# # key file for client authentication, or "" disabled. +# dnstap-tls-client-key-file: "" +# # cert file for client authentication, or "" disabled. +# dnstap-tls-client-cert-file: "" +# dnstap-send-identity: no +# dnstap-send-version: no +# # if "" it uses the hostname. +# dnstap-identity: "" +# # if "" it uses the package version. +# dnstap-version: "" +# dnstap-log-resolver-query-messages: no +# dnstap-log-resolver-response-messages: no +# dnstap-log-client-query-messages: no +# dnstap-log-client-response-messages: no +# dnstap-log-forwarder-query-messages: no +# dnstap-log-forwarder-response-messages: no + # Response Policy Zones # RPZ policies. Applied in order of configuration. QNAME and Response IP # Address trigger are the only supported triggers. Supported actions are: diff --git a/util/config_file.c b/util/config_file.c index 52ca5a184..19a5a0bcd 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -632,6 +632,13 @@ int config_set_option(struct config_file* cfg, const char* opt, #ifdef USE_DNSTAP else S_YNO("dnstap-enable:", dnstap) else S_STR("dnstap-socket-path:", dnstap_socket_path) + else S_STR("dnstap-ip:", dnstap_ip) + else S_YNO("dnstap-tls:", dnstap_tls) + else S_STR("dnstap-tls-server-name:", dnstap_tls_server_name) + else S_STR("dnstap-tls-cert-bundle:", dnstap_tls_cert_bundle) + else S_STR("dnstap-tls-client-key-file:", dnstap_tls_client_key_file) + else S_STR("dnstap-tls-client-cert-file:", + dnstap_tls_client_cert_file) else S_YNO("dnstap-send-identity:", dnstap_send_identity) else S_YNO("dnstap-send-version:", dnstap_send_version) else S_STR("dnstap-identity:", dnstap_identity) @@ -1039,6 +1046,14 @@ config_get_option(struct config_file* cfg, const char* opt, #ifdef USE_DNSTAP else O_YNO(opt, "dnstap-enable", dnstap) else O_STR(opt, "dnstap-socket-path", dnstap_socket_path) + else O_STR(opt, "dnstap-ip", dnstap_ip) + else O_YNO(opt, "dnstap-tls", dnstap_tls) + else O_STR(opt, "dnstap-tls-server-name", dnstap_tls_server_name) + else O_STR(opt, "dnstap-tls-cert-bundle", dnstap_tls_cert_bundle) + else O_STR(opt, "dnstap-tls-client-key-file", + dnstap_tls_client_key_file) + else O_STR(opt, "dnstap-tls-client-cert-file", + dnstap_tls_client_cert_file) else O_YNO(opt, "dnstap-send-identity", dnstap_send_identity) else O_YNO(opt, "dnstap-send-version", dnstap_send_version) else O_STR(opt, "dnstap-identity", dnstap_identity) @@ -1458,6 +1473,11 @@ config_delete(struct config_file* cfg) free(cfg->dns64_prefix); config_delstrlist(cfg->dns64_ignore_aaaa); free(cfg->dnstap_socket_path); + free(cfg->dnstap_ip); + free(cfg->dnstap_tls_server_name); + free(cfg->dnstap_tls_cert_bundle); + free(cfg->dnstap_tls_client_key_file); + free(cfg->dnstap_tls_client_cert_file); free(cfg->dnstap_identity); free(cfg->dnstap_version); config_deldblstrlist(cfg->ratelimit_for_domain); diff --git a/util/config_file.h b/util/config_file.h index 8739ca2ae..548fd9335 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -474,6 +474,18 @@ struct config_file { int dnstap; /** dnstap socket path */ char* dnstap_socket_path; + /** dnstap IP */ + char* dnstap_ip; + /** dnstap TLS enable */ + int dnstap_tls; + /** dnstap tls server authentication name */ + char* dnstap_tls_server_name; + /** dnstap server cert bundle */ + char* dnstap_tls_cert_bundle; + /** dnstap client key for client authentication */ + char* dnstap_tls_client_key_file; + /** dnstap client cert for client authentication */ + char* dnstap_tls_client_cert_file; /** true to send "identity" via dnstap */ int dnstap_send_identity; /** true to send "version" via dnstap */ From 00700bbe13fdb0100f1ce2c54fed22e9570f6e62 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 09:40:37 +0100 Subject: [PATCH 077/235] dnstap io, config entries parse and lex. --- util/configlexer.c | 3853 +++++++++++++++++++++--------------------- util/configlexer.lex | 8 + util/configparser.c | 2706 +++++++++++++++-------------- util/configparser.h | 510 +++--- util/configparser.y | 51 +- 5 files changed, 3681 insertions(+), 3447 deletions(-) diff --git a/util/configlexer.c b/util/configlexer.c index 3b31bb02b..7e7de17c6 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 302 -#define YY_END_OF_BUFFER 303 +#define YY_NUM_RULES 308 +#define YY_END_OF_BUFFER 309 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,336 +363,343 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2986] = +static const flex_int16_t yy_accept[3042] = { 0, - 1, 1, 284, 284, 288, 288, 292, 292, 296, 296, - 1, 1, 303, 300, 1, 282, 282, 301, 2, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 284, 285, 285, 286, 301, 288, 289, 289, - 290, 301, 295, 292, 293, 293, 294, 301, 296, 297, - 297, 298, 301, 299, 283, 2, 287, 301, 299, 300, - 0, 1, 2, 2, 2, 2, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 1, 1, 290, 290, 294, 294, 298, 298, 302, 302, + 1, 1, 309, 306, 1, 288, 288, 307, 2, 307, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 290, 291, 291, 292, 307, 294, 295, 295, + 296, 307, 301, 298, 299, 299, 300, 307, 302, 303, + 303, 304, 307, 305, 289, 2, 293, 307, 305, 306, + 0, 1, 2, 2, 2, 2, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 284, 0, 288, 0, 295, 0, 292, 296, 0, 299, - 0, 2, 2, 299, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 290, 0, 294, 0, 301, 0, 298, 302, 0, 305, + 0, 2, 2, 305, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 299, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 305, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 112, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 120, 300, 300, 300, 300, - 300, 300, 300, 299, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 112, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 120, 306, 306, 306, 306, + 306, 306, 306, 305, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 96, 300, - 300, 300, 300, 300, 300, 8, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 113, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 125, 300, 299, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 96, 306, + 306, 306, 306, 306, 306, 8, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 113, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 125, 306, 305, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 277, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 283, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 299, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 54, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 222, 300, 14, 15, 300, 18, 17, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 305, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 54, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 222, 306, 14, 15, 306, 18, 17, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 119, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 206, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 3, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 119, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 206, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 3, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 299, 300, 300, 300, 300, 300, 300, - 300, 272, 300, 300, 271, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 291, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 305, 306, 306, 306, 306, 306, 306, + 306, 278, 306, 306, 277, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 297, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 57, 300, 246, 300, 300, 300, 300, - 300, 300, 300, 300, 278, 279, 300, 300, 300, 300, - 300, 58, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 116, 300, 300, - 300, 300, 300, 300, 300, 300, 195, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 20, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 144, 300, 300, 291, 300, + 306, 306, 306, 306, 57, 306, 252, 306, 306, 306, + 306, 306, 306, 306, 306, 284, 285, 306, 306, 306, + 306, 306, 58, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 116, 306, + 306, 306, 306, 306, 306, 306, 306, 195, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 20, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 144, 306, 306, 297, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 94, - 300, 300, 300, 300, 300, 300, 300, 254, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 167, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 143, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 94, 306, 306, 306, 306, 306, 306, 306, 260, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 167, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 143, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 93, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 31, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 32, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 55, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 118, 300, 300, 300, 300, - 300, 111, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 56, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 93, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 31, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 32, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 55, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 118, 306, + 306, 306, 306, 306, 111, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 56, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 168, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 45, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 237, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 225, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 168, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 45, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 49, 300, 50, 300, 300, 300, - 300, 300, 97, 300, 98, 300, 300, 300, 300, 95, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 7, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 215, 300, 300, 300, - 300, 146, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 243, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 49, + 306, 50, 306, 306, 306, 306, 306, 97, 306, 98, + 306, 306, 306, 306, 95, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 7, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 215, 306, 306, 306, 306, 146, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 46, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 187, 300, 186, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 16, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 59, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 194, + 306, 306, 226, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 46, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 187, 306, 186, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 16, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 59, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 100, 300, 99, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 178, - 300, 300, 300, 300, 300, 300, 300, 300, 126, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 78, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 82, 300, + 306, 306, 306, 306, 306, 306, 194, 306, 306, 306, + 306, 306, 306, 100, 306, 99, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 178, 306, 306, 306, + 306, 306, 306, 306, 306, 126, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 78, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 53, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 181, 182, 300, 300, 300, 248, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 6, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 252, - 300, 300, 300, 300, 300, 300, 273, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 41, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 82, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 53, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 181, + 182, 306, 306, 306, 254, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 6, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 258, 306, + 306, 306, 306, 306, 306, 279, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 43, 300, 300, 300, 300, 300, 300, 300, 300, 174, - 300, 300, 300, 121, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 199, 300, 175, 300, 300, 300, - 212, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 44, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 123, 105, 300, - 106, 300, 300, 300, 104, 300, 300, 300, 300, 300, - 300, 300, 300, 141, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 236, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 41, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 43, + 306, 306, 306, 306, 306, 306, 306, 306, 174, 306, + 306, 306, 121, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 199, 306, 175, 306, 306, 306, 212, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 44, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 123, + 105, 306, 106, 306, 306, 306, 104, 306, 306, 306, + 306, 306, 306, 306, 306, 141, 306, 306, 306, 306, - 300, 300, 300, 300, 176, 300, 300, 300, 300, 300, - 179, 300, 185, 300, 300, 300, 300, 300, 211, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 92, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 117, 300, 300, 300, 300, 300, 300, 51, 300, - 300, 300, 25, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 19, 300, 300, 300, 300, 300, 300, 26, - 35, 300, 151, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 242, 306, 306, + 306, 306, 306, 306, 306, 306, 176, 306, 306, 306, + 306, 306, 179, 306, 185, 306, 306, 306, 306, 306, + 211, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 92, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 117, 306, 306, 306, 306, 306, 306, + 51, 306, 306, 306, 25, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 19, 306, 306, 306, 306, 306, + 306, 26, 35, 306, 151, 306, 306, 306, 306, 306, - 300, 300, 67, 69, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 256, 300, 300, - 300, 223, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 107, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 140, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 267, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 145, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 205, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 67, 69, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 262, + 306, 306, 306, 223, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 107, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 140, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 273, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 276, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 162, 300, 300, 300, 300, 300, 300, 300, 300, 101, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 157, - 300, 169, 300, 300, 300, 300, 300, 129, 300, 300, - 300, 300, 300, 88, 300, 300, 300, 300, 197, 300, - 300, 300, 300, 300, 300, 213, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 228, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 122, 300, + 145, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 205, 306, 306, 306, 306, 306, + 306, 306, 306, 282, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 162, 306, 306, 306, 306, + 306, 306, 306, 306, 101, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 157, 306, 169, 306, 306, 306, + 306, 306, 129, 306, 306, 306, 306, 306, 88, 306, + 306, 306, 306, 197, 306, 306, 306, 306, 306, 306, + 213, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 161, - 300, 300, 300, 300, 300, 70, 71, 300, 300, 300, - 300, 300, 52, 300, 300, 300, 300, 300, 77, 170, - 300, 188, 300, 216, 300, 300, 180, 249, 300, 300, - 300, 300, 300, 63, 300, 172, 300, 300, 300, 300, - 300, 9, 300, 300, 300, 91, 300, 300, 300, 300, - 241, 300, 300, 300, 196, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 234, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 122, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 161, 306, 306, + 306, 306, 306, 70, 71, 306, 306, 306, 306, 306, + 52, 306, 306, 306, 306, 306, 77, 170, 306, 188, + 306, 216, 306, 306, 180, 255, 306, 306, 306, 306, + 306, 63, 306, 172, 306, 306, 306, 306, 306, 9, + 306, 306, 306, 91, 306, 306, 306, 306, 247, 306, + 306, 306, 196, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 160, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 147, 300, 255, 300, 300, - 300, 300, 227, 300, 300, 300, 300, 300, 300, 300, - 300, 207, 300, 300, 300, 300, 247, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 270, 300, 171, 300, 300, 300, 300, 300, 300, - 300, 62, 64, 300, 300, 300, 300, 300, 300, 300, - 90, 300, 300, 300, 300, 239, 300, 300, 300, 251, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 160, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 147, 306, 261, 306, 306, 306, 306, + 233, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 207, 306, 306, 306, 306, 253, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 276, 306, 171, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 201, 33, 27, 29, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 34, 300, 28, 30, 300, 300, - 300, 300, 300, 300, 300, 300, 87, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 203, 200, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 61, 300, 300, 124, 300, 108, 300, 300, 300, 300, - 300, 300, 300, 300, 142, 13, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 265, 300, 268, 300, 300, + 306, 306, 62, 64, 306, 306, 306, 306, 306, 306, + 306, 90, 306, 306, 306, 306, 245, 306, 306, 306, + 257, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 201, 33, 27, 29, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 34, 306, 28, 30, 306, + 306, 306, 306, 306, 306, 306, 306, 87, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 203, 200, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 61, 306, 306, 124, 306, 108, - 300, 300, 300, 300, 300, 300, 300, 300, 12, 300, - 300, 21, 300, 300, 300, 245, 300, 300, 300, 253, - 300, 300, 300, 65, 300, 209, 300, 300, 300, 300, - 202, 300, 300, 60, 300, 300, 300, 300, 22, 300, - 42, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 156, 155, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 204, 198, 300, 214, 300, 300, - 257, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 72, 300, 300, 300, 240, + 306, 306, 306, 306, 306, 306, 306, 306, 142, 13, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 271, + 306, 274, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 12, 306, 306, 21, 306, 306, 306, 251, + 306, 306, 306, 259, 306, 306, 306, 65, 306, 209, + 306, 306, 306, 306, 202, 306, 306, 60, 306, 306, + 306, 306, 22, 306, 42, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 156, 155, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 204, 198, + 306, 214, 306, 306, 263, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 184, 300, 300, 300, 300, 208, - 300, 300, 300, 300, 300, 300, 300, 300, 274, 275, - 153, 300, 300, 66, 300, 300, 300, 300, 163, 300, - 300, 102, 103, 300, 300, 300, 300, 148, 300, 150, - 300, 189, 300, 300, 300, 300, 154, 300, 300, 217, - 300, 300, 300, 300, 300, 300, 300, 131, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 224, - 300, 300, 300, 23, 300, 250, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 190, 300, 300, - 238, 300, 269, 300, 183, 300, 300, 300, 300, 47, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 72, 306, 306, 306, 246, 306, 306, 306, + 306, 184, 306, 306, 306, 306, 208, 306, 306, 306, + 306, 306, 306, 306, 306, 280, 281, 153, 306, 306, + 66, 306, 306, 306, 306, 163, 306, 306, 102, 103, + 306, 306, 306, 306, 148, 306, 150, 306, 189, 306, + 306, 306, 306, 154, 306, 306, 217, 306, 306, 306, + 306, 306, 306, 306, 131, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 224, 306, 306, 306, - 300, 300, 300, 300, 4, 300, 300, 300, 115, 130, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 220, 36, - 37, 300, 300, 300, 300, 300, 300, 300, 258, 300, - 300, 300, 300, 300, 300, 226, 300, 300, 300, 193, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 75, - 300, 48, 244, 300, 221, 300, 300, 300, 300, 11, - 300, 300, 300, 300, 300, 114, 300, 300, 300, 300, - 191, 79, 300, 39, 300, 300, 300, 300, 300, 300, - 300, 300, 159, 300, 300, 300, 300, 300, 133, 300, + 306, 306, 306, 306, 23, 306, 256, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 190, 306, + 306, 244, 306, 275, 306, 183, 306, 306, 306, 306, + 47, 306, 306, 306, 306, 4, 306, 306, 306, 115, + 130, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 220, + 36, 37, 306, 306, 306, 306, 306, 306, 306, 264, + 306, 306, 306, 306, 306, 306, 232, 306, 306, 306, + 306, 306, 306, 306, 193, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 75, 306, 48, 250, 306, 221, - 300, 300, 300, 300, 300, 300, 300, 300, 225, 127, - 300, 300, 109, 110, 300, 300, 300, 81, 85, 80, - 300, 73, 300, 300, 300, 300, 300, 10, 300, 300, - 300, 242, 300, 300, 300, 300, 281, 38, 300, 300, - 300, 300, 300, 158, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 86, 84, 300, 74, 266, 300, 300, 300, - 300, 300, 300, 300, 177, 300, 300, 300, 300, 300, - 192, 300, 300, 300, 300, 300, 300, 300, 300, 149, - 68, 300, 300, 300, 300, 300, 259, 300, 300, 300, + 306, 306, 306, 306, 11, 306, 306, 306, 306, 306, + 114, 306, 306, 306, 306, 191, 79, 306, 39, 306, + 306, 306, 306, 306, 306, 306, 306, 159, 306, 306, + 306, 306, 306, 133, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 231, 306, 306, 306, 306, 127, 306, + 306, 109, 110, 306, 306, 306, 81, 85, 80, 306, + 73, 306, 306, 306, 306, 306, 10, 306, 306, 306, + 248, 306, 306, 306, 306, 287, 38, 306, 306, 306, + 306, 306, 158, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 128, 300, 83, 134, 135, 138, - 139, 136, 137, 76, 300, 243, 300, 300, 300, 300, - 152, 300, 300, 300, 300, 300, 219, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 165, 164, 40, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 89, 300, 218, - 300, 235, 263, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 5, 300, 300, 210, 300, 300, 264, - 300, 300, 300, 300, 300, 300, 300, 300, 24, 300, + 306, 306, 306, 306, 306, 86, 84, 306, 74, 272, + 306, 306, 306, 306, 306, 306, 306, 177, 306, 306, + 306, 306, 306, 192, 306, 306, 306, 306, 306, 306, + 306, 306, 149, 68, 306, 306, 306, 306, 306, 265, + 306, 306, 306, 306, 306, 306, 306, 228, 306, 306, + 227, 128, 306, 83, 134, 135, 138, 139, 136, 137, + 76, 306, 249, 306, 306, 306, 306, 152, 306, 306, + 306, 306, 306, 219, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 165, 164, 40, 306, 306, 306, 306, 306, 306, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 132, 300, 300, 300, 300, 300, - 300, 300, 300, 166, 300, 173, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 260, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 280, 300, 300, 231, 300, 300, 300, - 300, 300, 261, 300, 300, 300, 300, 300, 300, 262, - 300, 300, 300, 229, 300, 232, 233, 300, 300, 300, - 300, 300, 230, 234, 0 + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 89, 306, + 218, 306, 241, 269, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 5, 306, 306, 210, + 306, 306, 270, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 229, 24, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 230, 306, 306, 306, + 132, 306, 306, 306, 306, 306, 306, 306, 306, 166, + 306, 173, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 266, 306, 306, 306, 306, 306, 306, 306, 306, + + 306, 306, 306, 306, 306, 306, 306, 306, 306, 286, + 306, 306, 237, 306, 306, 306, 306, 306, 267, 306, + 306, 306, 306, 306, 306, 268, 306, 306, 306, 235, + 306, 238, 239, 306, 306, 306, 306, 306, 236, 240, + 0 } ; static const YY_CHAR yy_ec[256] = @@ -735,15 +742,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3000] = +static const flex_int16_t yy_base[3056] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 4280, 4028, 81, 5813, 5813, 5813, 96, 52, + 90, 112, 3491, 3333, 81, 5920, 5920, 5920, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 3954, 5813, 5813, 5813, 107, 3854, 5813, 5813, - 5813, 165, 3105, 2544, 5813, 5813, 5813, 211, 2291, 5813, - 5813, 5813, 180, 2178, 5813, 217, 5813, 221, 168, 1832, + 189, 152, 3242, 5920, 5920, 5920, 107, 2717, 5920, 5920, + 5920, 165, 2157, 2047, 5920, 5920, 5920, 211, 1913, 5920, + 5920, 5920, 180, 1568, 5920, 217, 5920, 221, 168, 1529, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -772,9 +779,9 @@ static const flex_int16_t yy_base[3000] = 700, 701, 702, 711, 704, 712, 713, 726, 731, 721, 732, 733, 735, 737, 740, 748, 739, 746, 743, 750, - 752, 753, 762, 758, 5813, 757, 760, 773, 766, 774, + 752, 753, 762, 758, 5920, 757, 760, 773, 766, 774, 775, 776, 781, 782, 763, 789, 787, 788, 792, 814, - 796, 798, 794, 803, 806, 5813, 804, 808, 838, 810, + 796, 798, 794, 803, 806, 5920, 804, 808, 838, 810, 812, 832, 828, 824, 827, 829, 839, 836, 849, 842, 847, 851, 862, 858, 859, 860, 861, 864, 863, 877, 872, 870, 799, 874, 889, 875, 882, 886, 887, 892, @@ -783,21 +790,21 @@ static const flex_int16_t yy_base[3000] = 942, 943, 937, 944, 947, 950, 951, 952, 953, 961, 958, 959, 963, 964, 966, 967, 970, 972, 973, 975, - 977, 979, 978, 985, 988, 981, 994, 989, 5813, 996, - 998, 999, 1000, 1001, 1003, 5813, 1004, 1005, 1006, 1014, + 977, 979, 978, 985, 988, 981, 994, 989, 5920, 996, + 998, 999, 1000, 1001, 1003, 5920, 1004, 1005, 1006, 1014, 1017, 1016, 1013, 1023, 1027, 1028, 1029, 1030, 1039, 1012, 1041, 1040, 1036, 1042, 1046, 1048, 1049, 1051, 1052, 1054, - 1055, 1057, 1060, 1077, 5813, 1061, 1064, 1062, 1063, 1070, + 1055, 1057, 1060, 1077, 5920, 1061, 1064, 1062, 1063, 1070, 1080, 1089, 1072, 1090, 1088, 1065, 1105, 1092, 1106, 1100, 1101, 1111, 1102, 1113, 1107, 1116, 1115, 1117, 1118, 1119, - 1120, 1125, 1126, 1131, 5813, 1133, 1134, 1145, 1135, 1143, + 1120, 1125, 1126, 1131, 5920, 1133, 1134, 1145, 1135, 1143, 1132, 1146, 1148, 1149, 1150, 1152, 1153, 1156, 1162, 1172, 1157, 1174, 1159, 1170, 1175, 1176, 1177, 1178, 1179, 1180, 1193, 1184, 1186, 1200, 1207, 1203, 1205, 1212, 1190, 1210, 1209, 1208, 1215, 1216, 1217, 1218, 1220, 1221, 1230, 1228, 1226, 1229, 1231, 1242, 1233, 1235, 1240, 1237, 1245, 1247, - 1253, 1254, 1250, 1256, 5813, 1263, 1260, 1267, 1262, 1268, + 1253, 1254, 1250, 1256, 5920, 1263, 1260, 1267, 1262, 1268, 1272, 1274, 1261, 1276, 1278, 1280, 1281, 1282, 1284, 1287, 1289, 1290, 1291, 1292, 1301, 1297, 1307, 1314, 1313, 1315, 1299, 1305, 1324, 1321, 1328, 1327, 1329, 1337, 1325, 1332, @@ -809,601 +816,613 @@ static const flex_int16_t yy_base[3000] = 1416, 1417, 1418, 1419, 1420, 1423, 1424, 1183, 1425, 1440, 1426, 1430, 1438, 1441, 1447, 1446, 1450, 1454, 1444, 1456, 1457, 1458, 1460, 1461, 1465, 1464, 1471, 1468, 1474, 1476, - 1478, 1477, 1480, 1484, 1487, 1481, 5813, 1488, 1495, 1494, + 1478, 1477, 1480, 1484, 1487, 1481, 5920, 1488, 1495, 1494, 1496, 1497, 1499, 1501, 1508, 1503, 1505, 1504, 1506, 1510, - 1516, 5813, 1517, 5813, 5813, 1520, 5813, 5813, 1518, 1523, - 1526, 1536, 1533, 1543, 1298, 1539, 1541, 1545, 1552, 1566, + 1532, 5920, 1513, 5920, 5920, 1516, 5920, 5920, 1517, 1515, + 1518, 1523, 1535, 1538, 1298, 1525, 1542, 1520, 1553, 1557, - 1548, 1550, 1551, 1547, 1556, 1561, 1574, 1562, 1549, 1575, - 1577, 1580, 1586, 1513, 1587, 1579, 1554, 1588, 1590, 1589, - 1592, 1595, 1600, 1601, 1594, 1603, 1596, 1611, 1616, 1607, - 1623, 5813, 1619, 1626, 1631, 1627, 1634, 1630, 1629, 1636, - 1638, 1640, 1641, 1642, 1643, 1645, 1646, 1651, 1604, 1647, - 1659, 1654, 5813, 1657, 1658, 1656, 1662, 1669, 1663, 1664, - 1670, 1674, 1675, 1682, 1679, 1677, 1684, 1685, 1686, 1687, - 5813, 1689, 1697, 1693, 1699, 1700, 1702, 1705, 1701, 1706, - 1707, 1708, 1709, 1711, 1715, 1718, 1719, 1720, 1717, 1724, - 1727, 1730, 1735, 1742, 1737, 1739, 1743, 1745, 1746, 1747, + 1545, 1546, 1548, 1549, 1560, 1571, 1555, 1572, 1565, 1577, + 1579, 1582, 1581, 1587, 1583, 1588, 1590, 1591, 1593, 1592, + 1596, 1598, 1601, 1602, 1599, 1604, 1605, 1614, 1618, 1610, + 1625, 5920, 1621, 1628, 1635, 1631, 1638, 1630, 1634, 1637, + 1642, 1644, 1639, 1646, 1648, 1649, 1650, 1652, 1654, 1657, + 1661, 1658, 5920, 1659, 1662, 1667, 1666, 1670, 1674, 1606, + 1660, 1678, 1676, 1692, 1680, 1682, 1683, 1684, 1688, 1695, + 5920, 1694, 1700, 1690, 1703, 1701, 1704, 1705, 1707, 1710, + 1709, 1713, 1715, 1714, 1716, 1723, 1728, 1721, 1720, 1726, + 1738, 1727, 1742, 1746, 1731, 1734, 1748, 1749, 1750, 1752, - 1749, 1750, 1758, 1751, 1760, 1755, 1762, 1767, 1772, 1759, - 1771, 1774, 1764, 1780, 1788, 1784, 1777, 1773, 1796, 1789, - 1793, 1794, 1797, 1799, 1800, 1801, 1803, 1806, 1807, 1808, - 1810, 5813, 1811, 1816, 5813, 1814, 1817, 1839, 1818, 1820, - 1821, 1823, 1826, 1833, 1825, 1831, 1841, 1843, 1853, 1849, - 1854, 1856, 1859, 1861, 1862, 1865, 1867, 1869, 1878, 1879, - 1883, 1885, 1890, 1870, 1868, 1877, 1896, 1888, 1889, 1891, - 1899, 1906, 1893, 1901, 1903, 1908, 1912, 1914, 1919, 5813, - 1924, 1925, 1920, 1921, 1932, 1930, 1929, 1933, 1936, 1937, - 1944, 1940, 1941, 1946, 1943, 1947, 1950, 1952, 1956, 1957, + 1753, 1755, 1760, 1759, 1762, 1758, 1767, 1769, 1776, 1764, + 1765, 1766, 1779, 1781, 1790, 1786, 1787, 1788, 1797, 1792, + 1794, 1795, 1798, 1807, 1796, 1804, 1809, 1799, 1802, 1814, + 1815, 5920, 1816, 1817, 5920, 1818, 1820, 1842, 1823, 1825, + 1828, 1827, 1830, 1832, 1833, 1835, 1839, 1846, 1862, 1850, + 1865, 1837, 1867, 1854, 1868, 1857, 1859, 1870, 1877, 1885, + 1892, 1875, 1893, 1895, 1876, 1878, 1887, 1906, 1890, 1891, + 1894, 1899, 1900, 1904, 1910, 1903, 1915, 1916, 1922, 1919, + 5920, 1930, 1928, 1927, 1929, 1939, 1936, 1937, 1938, 1940, + 1943, 1950, 1945, 1948, 1952, 1951, 1955, 1953, 1958, 1963, - 1962, 1954, 1973, 5813, 1958, 5813, 1955, 1959, 1972, 1975, - 1976, 1977, 1978, 1980, 5813, 5813, 1981, 1984, 1987, 1996, - 1982, 5813, 1997, 2004, 2001, 2006, 2000, 1999, 2007, 2008, - 2011, 2016, 2012, 2023, 2015, 2022, 2020, 5813, 2028, 2018, - 2024, 2033, 2035, 2036, 2037, 2040, 5813, 2043, 2044, 2047, - 2054, 2046, 2050, 2055, 2058, 2056, 2062, 2063, 2064, 2065, - 2066, 2075, 2076, 2067, 2078, 2081, 2077, 5813, 2074, 2085, - 2093, 2089, 2091, 2088, 2095, 2096, 2098, 2099, 2100, 2103, - 2106, 2107, 2115, 2116, 2108, 2112, 2120, 2113, 2122, 2125, - 2128, 2127, 2129, 2130, 2131, 5813, 2133, 2135, 124, 2139, + 1965, 1960, 1961, 1968, 5920, 1964, 5920, 1975, 1976, 1979, + 1977, 1981, 1982, 1983, 1985, 5920, 5920, 1987, 1984, 1994, + 2006, 2001, 5920, 1986, 2009, 2011, 2004, 2005, 2010, 2013, + 2016, 2017, 2024, 2020, 2027, 2022, 2023, 2025, 5920, 2033, + 2026, 2038, 2041, 2034, 2044, 2048, 2042, 5920, 2045, 2052, + 2055, 2062, 2058, 2060, 2059, 2063, 2064, 2067, 2070, 2071, + 2072, 2073, 2080, 2082, 2078, 2079, 2087, 2094, 5920, 2081, + 2090, 2101, 2093, 2097, 2100, 2102, 2103, 2104, 2105, 2106, + 2112, 2113, 2114, 2122, 2124, 2119, 2115, 2127, 2123, 2129, + 2128, 2135, 2132, 2136, 2137, 2138, 5920, 2139, 2147, 124, - 2140, 2142, 2141, 2148, 2144, 2147, 2164, 2165, 2161, 2160, - 2163, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2177, 5813, - 2151, 2179, 2180, 2182, 2185, 2186, 2189, 5813, 2199, 2202, - 2188, 2201, 2209, 2204, 2210, 2211, 2213, 2218, 2214, 2217, - 5813, 2221, 2224, 2226, 2227, 2228, 2230, 2235, 2237, 2238, - 2239, 2242, 2240, 2241, 2245, 2243, 2246, 2250, 2259, 2249, - 2251, 2256, 2260, 5813, 2272, 2261, 2270, 2263, 2274, 2273, - 2287, 2277, 2280, 2282, 2288, 2297, 2290, 2284, 2298, 2299, - 2304, 2308, 2307, 2313, 2314, 2311, 2315, 2321, 2323, 2324, - 2325, 2329, 2327, 2330, 2331, 2332, 2339, 2340, 2337, 2348, + 2141, 2144, 2148, 2149, 2152, 2165, 2151, 2168, 2172, 2169, + 2173, 2176, 2153, 2170, 2177, 2178, 2179, 2180, 2185, 2183, + 5920, 2189, 2190, 2191, 2186, 2197, 2192, 2194, 5920, 2195, + 2206, 2215, 2216, 2205, 2217, 2207, 2218, 2221, 2222, 2224, + 2228, 2229, 2225, 5920, 2232, 2234, 2237, 2235, 2241, 2245, + 2238, 2248, 2250, 2251, 2252, 2253, 2254, 2257, 2256, 2258, + 2259, 2260, 2267, 2271, 2272, 2274, 5920, 2284, 2262, 2273, + 2280, 2285, 2286, 2294, 2287, 2289, 2295, 2296, 2309, 2299, + 2301, 2311, 2315, 2302, 2304, 2325, 2321, 2324, 2330, 2320, + 2333, 2335, 2323, 2327, 2337, 2336, 2339, 2347, 2342, 2354, - 2346, 2353, 2351, 2356, 5813, 2357, 2358, 2341, 2363, 2371, - 2368, 2369, 2375, 2376, 2377, 2378, 2379, 2386, 2381, 2383, - 2384, 2387, 2388, 2394, 2395, 2399, 2400, 2407, 2401, 2409, - 2410, 5813, 2411, 2415, 2404, 2417, 2419, 2421, 2428, 2429, - 2431, 2422, 2425, 2433, 2434, 2435, 2437, 2439, 2440, 2445, - 2442, 5813, 2448, 2450, 2453, 2456, 2455, 2459, 2462, 2468, - 2466, 2452, 2472, 2473, 2474, 5813, 2481, 2482, 2479, 2483, - 2485, 2486, 2488, 2490, 2491, 5813, 2492, 2493, 2501, 2502, - 2497, 5813, 2504, 2500, 2506, 2507, 2508, 2509, 2517, 2510, - 2513, 2515, 2523, 2525, 2521, 2529, 5813, 2531, 2541, 2536, + 2355, 2352, 2358, 2350, 2371, 2353, 2363, 5920, 2365, 2367, + 2373, 2375, 2386, 2376, 2378, 2379, 2381, 2377, 2387, 2388, + 2395, 2399, 2397, 2394, 2404, 2401, 2403, 2392, 2407, 2411, + 2414, 2418, 2420, 2421, 5920, 2422, 2424, 2417, 2426, 2428, + 2430, 2438, 2439, 2441, 2431, 2434, 2443, 2444, 2445, 2447, + 2449, 2451, 2456, 2453, 5920, 2459, 2457, 2461, 2463, 2465, + 2469, 2470, 2476, 2478, 2479, 2480, 2481, 2482, 5920, 2490, + 2491, 2487, 2499, 2489, 2494, 2496, 2501, 2502, 5920, 2503, + 2504, 2511, 2512, 2508, 5920, 2515, 2510, 2516, 2517, 2518, + 2519, 2520, 2525, 2526, 2528, 2533, 2535, 2531, 2539, 5920, - 2537, 2539, 2542, 2543, 2545, 2557, 2549, 2552, 2559, 2564, - 2561, 2548, 2555, 2569, 2570, 2571, 2573, 2574, 5813, 2576, - 2577, 2579, 2582, 2580, 2585, 2586, 2598, 2588, 2591, 2593, - 2596, 2599, 2601, 2604, 2606, 2612, 2608, 2615, 2618, 2616, - 2621, 2602, 2625, 2628, 2635, 2632, 2636, 5813, 2639, 2640, - 2634, 2641, 2642, 2645, 2646, 2647, 2649, 2650, 2652, 2651, - 2654, 2667, 2676, 2662, 2663, 2655, 2668, 2671, 2672, 2678, - 2679, 2683, 2690, 2681, 2685, 2694, 2689, 2692, 2702, 2691, - 2693, 2695, 2700, 2703, 2704, 2705, 2706, 2713, 2709, 2723, - 2724, 2726, 2715, 2718, 2731, 2732, 5813, 2735, 2733, 2736, + 2540, 2548, 2543, 2541, 2549, 2552, 2553, 2555, 2564, 2556, + 2560, 5920, 2571, 2563, 2575, 2582, 2577, 2562, 2579, 2578, + 2580, 2584, 2585, 5920, 2587, 2590, 2591, 2592, 2595, 2594, + 2600, 2610, 2602, 2603, 2606, 2611, 2613, 2615, 2616, 2617, + 2618, 2607, 2627, 2629, 2631, 2632, 2633, 2635, 2643, 2645, + 2641, 2647, 5920, 2650, 2651, 2644, 2652, 2657, 2658, 2656, + 2659, 2661, 2664, 2662, 2665, 2666, 2675, 2683, 2668, 2686, + 2676, 2678, 2680, 2691, 2684, 2690, 2693, 2698, 2694, 2700, + 2707, 2702, 2706, 2714, 2704, 2705, 2709, 2713, 2715, 2716, + 2718, 2719, 2722, 2727, 2731, 2735, 2734, 2736, 2741, 2742, - 2737, 2742, 2745, 2749, 2739, 2746, 2747, 2757, 2758, 2755, - 2760, 2763, 2770, 2766, 5813, 2767, 5813, 2768, 2769, 2771, - 2779, 2776, 5813, 2781, 5813, 2784, 2791, 2777, 2782, 5813, - 2792, 2786, 2788, 2799, 2794, 2801, 2802, 2803, 2804, 2810, - 2805, 2812, 2807, 2813, 2815, 2816, 2819, 2820, 2826, 2833, - 2828, 2830, 2817, 2836, 2838, 2840, 2841, 5813, 2844, 2845, - 2850, 2849, 2851, 2852, 2853, 2855, 2856, 2858, 2857, 2862, - 2861, 2870, 2874, 2886, 2871, 2888, 5813, 2873, 2884, 2875, - 2889, 5813, 2885, 2892, 2896, 2898, 2893, 2900, 2902, 2901, - 2905, 2903, 2908, 2919, 2920, 2921, 2923, 2924, 2909, 2910, + 2745, 5920, 2743, 2744, 2746, 2752, 2754, 2756, 2763, 2758, + 2762, 2760, 2767, 2770, 2769, 2772, 2776, 2783, 2779, 5920, + 2780, 5920, 2781, 2782, 2784, 2792, 2788, 5920, 2794, 5920, + 2797, 2804, 2791, 2795, 5920, 2806, 2799, 2801, 2812, 2805, + 2814, 2815, 2816, 2817, 2822, 2818, 2824, 2825, 2826, 2828, + 2829, 2832, 2830, 2841, 2844, 2833, 2851, 2838, 2843, 2855, + 2846, 2856, 5920, 2858, 2849, 2862, 2863, 2864, 2866, 2868, + 2870, 2872, 2873, 2871, 2874, 2877, 2884, 2885, 2887, 2888, + 2895, 5920, 2896, 2899, 2894, 2900, 5920, 2902, 2901, 2903, + 2911, 2905, 2909, 2914, 2915, 2916, 2920, 2921, 2928, 2930, - 2933, 2930, 2911, 2938, 2942, 2940, 2931, 2941, 2943, 2946, - 2947, 2954, 2955, 2951, 2958, 2953, 2960, 2964, 2967, 2957, - 2961, 2968, 2969, 2970, 2973, 2974, 2977, 2978, 2979, 2980, - 2982, 5813, 2990, 2986, 2991, 2992, 2995, 2997, 3000, 3001, - 3004, 3002, 3005, 3009, 3007, 5813, 3014, 5813, 3008, 3022, - 3016, 3027, 3020, 3028, 3035, 3031, 3036, 3037, 3039, 3040, - 3041, 3042, 3043, 3047, 3050, 3048, 3061, 3054, 3051, 3063, - 3064, 3065, 3067, 3068, 5813, 3069, 3070, 3072, 3074, 3075, - 3081, 3077, 3087, 3085, 3089, 3091, 3101, 5813, 3093, 3097, - 3098, 3106, 3108, 3104, 3114, 3121, 3118, 3125, 3124, 5813, + 2933, 2923, 5920, 2935, 2940, 2922, 2936, 2943, 2948, 2949, + 2951, 2960, 2956, 2955, 2957, 2958, 2959, 2962, 2969, 2970, + 2966, 2973, 2972, 2976, 2983, 2980, 2974, 2978, 2984, 2986, + 2987, 2990, 2993, 2994, 2989, 2991, 2996, 2997, 5920, 3008, + 2999, 3012, 3013, 3005, 3015, 3003, 3016, 3021, 3022, 3024, + 3023, 3025, 5920, 3028, 5920, 3026, 3033, 3039, 3045, 3040, + 3042, 3046, 3054, 3050, 3047, 3056, 3057, 3055, 3059, 3058, + 3064, 3068, 3069, 3071, 3073, 3070, 3076, 3079, 3081, 3082, + 3084, 5920, 3085, 3086, 3087, 3091, 3092, 3094, 3102, 3100, + 3093, 3105, 3106, 3114, 5920, 3115, 3116, 3118, 3120, 3127, - 3116, 3117, 3132, 3127, 3134, 3135, 5813, 3133, 5813, 3128, - 3138, 3142, 3139, 3145, 3146, 3149, 3151, 3153, 3160, 3161, - 3156, 3144, 3162, 3166, 3168, 3173, 3170, 3171, 3172, 5813, - 3176, 3177, 3178, 3179, 3183, 3186, 3189, 3193, 5813, 3194, - 3196, 3199, 3200, 3201, 3203, 3205, 3204, 3210, 3213, 3207, - 3208, 3221, 3217, 3206, 3227, 3231, 3232, 3237, 5813, 3234, - 3214, 3244, 3241, 3242, 3243, 3246, 3247, 3248, 3250, 3251, - 3252, 3253, 3259, 3258, 3255, 3256, 3261, 3264, 3275, 3272, - 3263, 3276, 3277, 3280, 3283, 3282, 3286, 3289, 3291, 3292, - 3302, 3303, 3294, 3297, 3306, 3307, 3314, 3310, 5813, 3322, + 3119, 3123, 3134, 3130, 3138, 3133, 5920, 3136, 3141, 3148, + 3144, 3143, 3151, 5920, 3150, 5920, 3147, 3149, 3153, 3154, + 3159, 3160, 3162, 3164, 3170, 3171, 3180, 3175, 3167, 3177, + 3179, 3181, 3189, 3182, 3184, 3185, 5920, 3193, 3186, 3197, + 3202, 3205, 3208, 3190, 3196, 5920, 3209, 3212, 3214, 3215, + 3216, 3218, 3220, 3221, 3225, 3226, 3222, 3223, 3236, 3232, + 3229, 3239, 3249, 3250, 3252, 5920, 3254, 3231, 3261, 3257, + 3246, 3260, 3263, 3264, 3265, 3267, 3268, 3269, 3270, 3271, + 3273, 3272, 3280, 3275, 3291, 3276, 3278, 3298, 3300, 3290, + 3282, 3292, 3299, 3304, 3307, 3309, 3313, 3315, 3305, 3317, - 3299, 3325, 3309, 3320, 3327, 3328, 3330, 3331, 3321, 3332, - 3339, 3335, 5813, 3348, 3337, 3336, 3346, 3349, 3359, 3354, - 3340, 3356, 3362, 3358, 3365, 3367, 3368, 3369, 3372, 3373, - 5813, 5813, 3375, 3376, 3379, 5813, 3380, 3378, 3391, 3382, - 3383, 3392, 3395, 3394, 3386, 3396, 3398, 3400, 5813, 3405, - 3414, 3406, 3411, 3415, 3419, 3421, 3417, 3423, 3425, 3427, - 3428, 3430, 3429, 3431, 3434, 3442, 3438, 3437, 3439, 5813, - 3441, 3444, 3448, 3450, 3451, 3454, 5813, 3455, 3456, 3462, - 3463, 3465, 3467, 3473, 3476, 3477, 3478, 3480, 3481, 3482, - 3483, 3485, 3490, 3488, 3495, 3496, 3487, 5813, 3500, 3501, + 3326, 3318, 3320, 3329, 3330, 3337, 3332, 5920, 3342, 3322, + 3344, 3324, 3343, 3348, 3350, 3358, 3353, 3354, 3355, 3362, + 3357, 5920, 3369, 3345, 3371, 3370, 3361, 3384, 3379, 3360, + 3364, 3383, 3386, 3389, 3387, 3391, 3392, 3395, 3396, 5920, + 5920, 3398, 3399, 3400, 5920, 3401, 3402, 3411, 3404, 3406, + 3414, 3408, 3417, 3418, 3419, 3421, 3422, 5920, 3425, 3434, + 3431, 3432, 3441, 3442, 3446, 3443, 3440, 3433, 3437, 3450, + 3452, 3454, 3457, 3458, 3466, 3461, 3463, 3464, 5920, 3465, + 3467, 3469, 3471, 3473, 3475, 5920, 3476, 3482, 3487, 3479, + 3497, 3494, 3491, 3500, 3480, 3503, 3504, 3505, 3506, 3508, - 3504, 3507, 3511, 3514, 3521, 3522, 3518, 3520, 3519, 3529, - 5813, 3526, 3528, 3527, 3530, 3540, 3535, 3542, 3533, 5813, - 3537, 3541, 3543, 5813, 3547, 3551, 3554, 3559, 3546, 3562, - 3561, 3563, 3564, 3565, 5813, 3571, 5813, 3569, 3573, 3577, - 5813, 3575, 3579, 3581, 3583, 3580, 3588, 3590, 3597, 3584, - 3592, 3594, 3598, 3599, 3600, 3608, 3606, 5813, 3609, 3607, - 3613, 3614, 3618, 3611, 3616, 3619, 3626, 5813, 5813, 3629, - 5813, 3630, 3631, 3632, 5813, 3634, 3636, 3641, 3638, 3642, - 3644, 3652, 3645, 5813, 3654, 3640, 3656, 3658, 3659, 3662, - 3663, 3664, 3665, 3666, 3671, 5813, 3668, 3670, 3673, 3669, + 3515, 3512, 3511, 3514, 3518, 3520, 5920, 3521, 3522, 3525, + 3532, 3535, 3542, 3543, 3546, 3529, 3539, 3547, 3554, 5920, + 3549, 3552, 3550, 3551, 3563, 3553, 3564, 3560, 5920, 3565, + 3566, 3568, 5920, 3567, 3578, 3581, 3583, 3569, 3590, 3586, + 3588, 3591, 3587, 5920, 3594, 5920, 3571, 3595, 3600, 5920, + 3598, 3602, 3603, 3605, 3606, 3611, 3612, 3619, 3609, 3613, + 3620, 3621, 3623, 3625, 3632, 3624, 3628, 3631, 3633, 5920, + 3634, 3636, 3639, 3643, 3641, 3645, 3651, 3653, 3652, 5920, + 5920, 3656, 5920, 3659, 3660, 3661, 5920, 3663, 3666, 3670, + 3667, 3668, 3671, 3675, 3679, 5920, 3681, 3682, 3685, 3683, - 3678, 3683, 3679, 3685, 5813, 3689, 3693, 3692, 3696, 3697, - 5813, 3699, 5813, 3700, 3702, 3703, 3707, 3706, 5813, 3712, - 3713, 3717, 3719, 3721, 3720, 3723, 3724, 3730, 3731, 3738, - 3734, 3733, 3735, 5813, 3736, 3740, 3742, 3749, 3737, 3744, - 3753, 3756, 3757, 3758, 3763, 3760, 3767, 3769, 3771, 3773, - 3765, 5813, 3775, 3777, 3776, 3791, 3786, 3781, 5813, 3782, - 3796, 3798, 5813, 3789, 3788, 3800, 3805, 3792, 3799, 3806, - 3807, 3811, 5813, 3812, 3813, 3814, 3815, 3818, 3819, 5813, - 5813, 3827, 5813, 3829, 3816, 3830, 3831, 3832, 3838, 3837, - 3841, 3843, 3840, 3844, 3851, 3852, 3861, 3864, 3868, 3863, + 3689, 3691, 3693, 3694, 3690, 3696, 3695, 5920, 3697, 3700, + 3699, 3704, 3707, 3715, 3708, 3709, 5920, 3719, 3721, 3720, + 3725, 3726, 5920, 3728, 5920, 3731, 3732, 3734, 3740, 3735, + 5920, 3743, 3736, 3748, 3739, 3751, 3753, 3752, 3758, 3744, + 3759, 3766, 3764, 3761, 3767, 5920, 3768, 3770, 3772, 3776, + 3773, 3778, 3786, 3785, 3781, 3789, 3792, 3782, 3795, 3799, + 3793, 3801, 3803, 5920, 3804, 3807, 3808, 3818, 3810, 3811, + 5920, 3814, 3815, 3822, 5920, 3824, 3825, 3830, 3832, 3828, + 3833, 3834, 3835, 3838, 5920, 3836, 3840, 3841, 3842, 3854, + 3855, 5920, 5920, 3856, 5920, 3857, 3843, 3858, 3860, 3844, - 3867, 3853, 5813, 5813, 3870, 3871, 3874, 3877, 3878, 3880, - 3881, 3888, 3884, 3890, 3894, 3895, 3902, 5813, 3901, 3887, - 3904, 5813, 3885, 3898, 3906, 3909, 3911, 3912, 3915, 3914, - 3917, 3918, 3920, 3919, 3922, 3923, 3927, 3926, 3928, 3936, - 5813, 3940, 3937, 3938, 3941, 3943, 3944, 3947, 3949, 3950, - 5813, 3951, 3953, 3955, 3959, 3960, 3962, 3969, 3977, 3979, - 3965, 3973, 3981, 3983, 3985, 3988, 5813, 3989, 3987, 3990, - 3991, 3997, 3999, 4000, 4002, 4004, 4006, 4008, 4009, 4012, - 4016, 4013, 4017, 4018, 4020, 5813, 4024, 4031, 4021, 4034, - 4025, 4035, 4042, 4036, 4047, 4038, 4044, 4048, 4050, 5813, + 3865, 3868, 3870, 3872, 3876, 3877, 3880, 3883, 3888, 3890, + 3892, 3891, 3889, 3893, 5920, 5920, 3899, 3900, 3902, 3904, + 3905, 3907, 3909, 3914, 3912, 3920, 3923, 3924, 3916, 5920, + 3928, 3918, 3930, 5920, 3925, 3931, 3933, 3937, 3935, 3939, + 3942, 3941, 3943, 3944, 3946, 3947, 3949, 3954, 3953, 3955, + 3962, 3960, 3963, 3968, 3970, 5920, 3972, 3971, 3973, 3974, + 3975, 3977, 3982, 3983, 3984, 5920, 3978, 3988, 3991, 3985, + 4000, 3989, 4006, 4009, 4011, 4001, 4004, 4012, 4015, 4019, + 4020, 5920, 4021, 4022, 4023, 4028, 4030, 4032, 4033, 4035, + 4036, 4038, 4041, 4039, 4046, 4048, 4049, 4050, 4051, 4053, - 4051, 4053, 4054, 4056, 4062, 4055, 4058, 4063, 5813, 4065, - 4066, 4068, 4070, 4072, 4077, 4079, 4080, 4082, 4083, 4089, - 5813, 4087, 4088, 4096, 4094, 4097, 4100, 4098, 4102, 5813, - 4106, 4108, 4112, 4120, 4104, 4122, 4118, 4124, 4115, 4117, - 4131, 4126, 4132, 4133, 4136, 4137, 4144, 4149, 4146, 5813, - 4139, 5813, 4147, 4152, 4154, 4157, 4155, 5813, 4160, 4162, - 4164, 4165, 4161, 5813, 4167, 4168, 4171, 4169, 5813, 4182, - 4183, 4172, 4187, 4174, 4189, 5813, 4194, 4195, 4191, 4203, - 4206, 4202, 4204, 4207, 4205, 4209, 4210, 4211, 5813, 4215, - 4213, 4221, 4222, 4224, 4214, 4226, 4232, 4225, 5813, 4235, + 5920, 4055, 4058, 4061, 4067, 4064, 4062, 4070, 4074, 4077, + 4069, 4071, 4078, 4084, 5920, 4079, 4081, 4085, 4087, 4093, + 4089, 4094, 4095, 5920, 4102, 4096, 4098, 4103, 4106, 4107, + 4111, 4112, 4114, 4118, 4126, 5920, 4115, 4128, 4130, 4122, + 4119, 4121, 4131, 4134, 5920, 4138, 4140, 4139, 4155, 4141, + 4156, 4148, 4152, 4151, 4158, 4161, 4159, 4163, 4165, 4166, + 4167, 4179, 4183, 4178, 5920, 4169, 5920, 4184, 4185, 4194, + 4190, 4180, 5920, 4187, 4192, 4196, 4197, 4198, 5920, 4201, + 4204, 4206, 4205, 5920, 4211, 4210, 4209, 4216, 4219, 4222, + 5920, 4225, 4227, 4226, 4238, 4239, 4235, 4236, 4240, 4237, - 4228, 4236, 4237, 4239, 4241, 4242, 4250, 4246, 4245, 5813, - 4249, 4253, 4260, 4259, 4255, 5813, 5813, 4262, 4268, 4270, - 4264, 4271, 5813, 4274, 4281, 4277, 4280, 4282, 5813, 5813, - 4284, 5813, 4285, 5813, 4286, 4288, 5813, 5813, 4287, 4293, - 4294, 4296, 4298, 5813, 4306, 5813, 4308, 4309, 4295, 4307, - 4312, 5813, 4313, 4314, 4316, 5813, 4318, 4328, 4320, 4321, - 5813, 4324, 4325, 4330, 5813, 4333, 4340, 4337, 4331, 4341, - 4346, 4343, 4347, 4352, 4353, 4354, 4335, 4357, 4364, 4368, - 4370, 4372, 4373, 4356, 4375, 4376, 4378, 4381, 4382, 4383, - 4384, 4387, 4388, 4390, 4392, 4395, 4396, 4397, 4398, 4399, + 4242, 4243, 4244, 4252, 4247, 4248, 5920, 4251, 4254, 4259, + 4260, 4263, 4264, 4266, 4268, 4269, 5920, 4271, 4273, 4274, + 4275, 4277, 4278, 4280, 4292, 4290, 4279, 5920, 4283, 4295, + 4307, 4302, 4303, 5920, 5920, 4304, 4287, 4306, 4291, 4311, + 5920, 4315, 4314, 4313, 4321, 4322, 5920, 5920, 4324, 5920, + 4316, 5920, 4326, 4327, 5920, 5920, 4328, 4329, 4330, 4332, + 4339, 5920, 4342, 5920, 4350, 4345, 4336, 4347, 4348, 5920, + 4349, 4351, 4357, 5920, 4358, 4360, 4359, 4361, 5920, 4365, + 4362, 4366, 5920, 4370, 4373, 4374, 4375, 4378, 4380, 4386, + 4382, 4383, 4389, 4390, 4391, 4394, 4403, 4405, 4407, 4409, - 4409, 4401, 4402, 4412, 4415, 4405, 4413, 4416, 4417, 4418, - 4425, 4427, 4420, 4423, 5813, 4428, 4430, 4434, 4437, 4439, - 4442, 4443, 4445, 4450, 4454, 5813, 4458, 5813, 4460, 4451, - 4456, 4462, 5813, 4463, 4464, 4465, 4466, 4468, 4470, 4471, - 4472, 5813, 4475, 4476, 4479, 4485, 5813, 4491, 4493, 4478, - 4494, 4495, 4499, 4497, 4501, 4504, 4503, 4506, 4508, 4516, - 4509, 4511, 4513, 4518, 4517, 4521, 4524, 4358, 4531, 4533, - 4539, 5813, 4525, 5813, 4534, 4528, 4536, 4540, 4545, 4542, - 4546, 5813, 5813, 4549, 4551, 4553, 4555, 4556, 4558, 4559, - 5813, 4561, 4564, 4567, 4571, 5813, 4572, 4573, 4578, 5813, + 4398, 4400, 4412, 4413, 4415, 4419, 4420, 4421, 4422, 4424, + 4425, 4427, 4429, 4434, 4430, 4433, 4435, 4436, 4443, 4437, + 4439, 4450, 4446, 4451, 4452, 4453, 4454, 4460, 4461, 4458, + 4464, 4465, 5920, 4463, 4468, 4469, 4470, 4471, 4482, 4483, + 4476, 4494, 4495, 5920, 4497, 5920, 4499, 4484, 4501, 4486, + 5920, 4489, 4503, 4491, 4504, 4506, 4507, 4508, 4511, 4514, + 4516, 4517, 5920, 4520, 4522, 4526, 4529, 5920, 4530, 4537, + 4523, 4525, 4533, 4538, 4542, 4545, 4546, 4547, 4549, 4551, + 4558, 4554, 4555, 4556, 4559, 4557, 4561, 4568, 4565, 4579, + 4569, 4583, 5920, 4574, 5920, 4576, 4580, 4584, 4586, 4587, - 4575, 4579, 4581, 4583, 4580, 4590, 4586, 4594, 4595, 4596, - 4598, 5813, 5813, 5813, 5813, 4600, 4602, 4605, 4606, 4607, - 4609, 4612, 4614, 4610, 5813, 4616, 5813, 5813, 4617, 4623, - 4626, 4627, 4629, 4630, 4633, 4631, 5813, 4635, 4636, 4638, - 4644, 4646, 4648, 4651, 4652, 4653, 4654, 4661, 4660, 4662, - 4664, 4668, 4667, 4670, 5813, 5813, 4674, 4676, 4677, 4684, - 4681, 4685, 4688, 4689, 4691, 4692, 4694, 4695, 4697, 4698, - 5813, 4699, 4705, 5813, 4700, 5813, 4706, 4713, 4707, 4714, - 4715, 4717, 4719, 4721, 5813, 5813, 4716, 4722, 4728, 4732, - 4729, 4734, 4723, 4737, 4733, 5813, 4739, 5813, 4740, 4741, + 4588, 4590, 5920, 5920, 4591, 4594, 4601, 4589, 4595, 4603, + 4610, 5920, 4605, 4612, 4618, 4615, 5920, 4607, 4619, 4622, + 5920, 4623, 4624, 4625, 4631, 4626, 4637, 4638, 4632, 4634, + 4640, 4647, 5920, 5920, 5920, 5920, 4648, 4642, 4654, 4644, + 4655, 4651, 4656, 4659, 4661, 5920, 4663, 5920, 5920, 4666, + 4667, 4669, 4670, 4673, 4674, 4677, 4679, 5920, 4680, 4684, + 4685, 4682, 4692, 4699, 4694, 4700, 4678, 4688, 4708, 4704, + 4710, 4703, 4707, 4714, 4716, 5920, 5920, 4717, 4720, 4721, + 4728, 4726, 4729, 4738, 4733, 4735, 4736, 4739, 4741, 4723, + 4748, 4752, 4750, 4747, 5920, 4751, 4757, 5920, 4753, 5920, - 4750, 4744, 4757, 4759, 4761, 4763, 4756, 4765, 5813, 4758, - 4766, 5813, 4768, 4771, 4773, 5813, 4774, 4777, 4781, 5813, - 4783, 4786, 4784, 5813, 4792, 5813, 4778, 4794, 4793, 4801, - 5813, 4787, 4796, 5813, 4803, 4809, 4810, 4804, 5813, 4806, - 5813, 4811, 4815, 4818, 4821, 4812, 4823, 4816, 4825, 4826, - 4834, 4833, 4835, 5813, 5813, 4842, 4830, 4837, 4838, 4844, - 4851, 4846, 4848, 4855, 5813, 5813, 4856, 5813, 4859, 4860, - 5813, 4847, 4862, 4864, 4868, 4866, 4849, 4874, 4876, 4870, - 4877, 4892, 4878, 4880, 4893, 4895, 4898, 4900, 4887, 4902, - 4890, 4883, 4904, 4905, 4906, 5813, 4912, 4914, 4915, 5813, + 4758, 4761, 4725, 4762, 4764, 4767, 4768, 4770, 5920, 5920, + 4771, 4772, 4774, 4778, 4780, 4782, 4781, 4784, 4785, 5920, + 4786, 5920, 4787, 4794, 4789, 4795, 4803, 4806, 4808, 4810, + 4805, 4811, 5920, 4812, 4814, 5920, 4815, 4817, 4818, 5920, + 4822, 4825, 4829, 5920, 4835, 4826, 4832, 5920, 4839, 5920, + 4836, 4840, 4841, 4848, 5920, 4843, 4849, 5920, 4852, 4855, + 4857, 4846, 5920, 4844, 5920, 4858, 4865, 4866, 4869, 4861, + 4871, 4872, 4873, 4874, 4881, 4880, 4882, 5920, 5920, 4890, + 4877, 4883, 4887, 4892, 4899, 4894, 4897, 4896, 5920, 5920, + 4904, 5920, 4902, 4905, 5920, 4906, 4911, 4912, 4913, 4915, - 4919, 4916, 4921, 4922, 5813, 4929, 4930, 4931, 4932, 5813, - 4924, 4935, 4943, 4936, 4937, 4950, 4938, 4946, 5813, 5813, - 5813, 4948, 4957, 5813, 4959, 4954, 4960, 4961, 5813, 4962, - 4963, 5813, 5813, 4964, 4965, 4966, 4973, 5813, 4969, 5813, - 4970, 5813, 4972, 4978, 4987, 4984, 5813, 4990, 4996, 5813, - 4999, 5002, 5004, 5005, 4992, 4994, 5006, 5813, 4982, 5010, - 5016, 5008, 5009, 5017, 5018, 5019, 5026, 5022, 5025, 5813, - 5029, 5028, 5030, 5813, 5032, 5813, 5033, 5036, 5035, 5042, - 5040, 5034, 5044, 5054, 5041, 5058, 5045, 5813, 5061, 5063, - 5813, 5055, 5813, 5066, 5813, 5068, 5069, 5070, 5072, 5813, + 4916, 4920, 4922, 4923, 4924, 4925, 4926, 4932, 4944, 4928, + 4942, 4948, 4950, 4952, 4954, 4946, 4956, 4957, 4958, 4959, + 4960, 4963, 5920, 4965, 4966, 4967, 5920, 4971, 4972, 4974, + 4976, 5920, 4987, 4982, 4988, 4989, 5920, 4975, 4995, 4992, + 4990, 5000, 5007, 5003, 5002, 5920, 5920, 5920, 5004, 5013, + 5920, 5018, 5005, 5008, 5010, 5920, 5014, 5020, 5920, 5920, + 5021, 5022, 5024, 5035, 5920, 5025, 5920, 5026, 5920, 5034, + 5036, 5042, 5040, 5920, 5045, 5051, 5920, 5054, 5057, 5059, + 5060, 5048, 5061, 5062, 5920, 5070, 5066, 5072, 5074, 5063, + 5065, 5078, 5075, 5082, 5079, 5085, 5920, 5087, 5089, 5090, - 5074, 5071, 5075, 5078, 5813, 5079, 5081, 5083, 5813, 5813, - 5087, 5094, 5096, 4634, 5090, 5093, 5099, 5103, 5100, 5104, - 5105, 5112, 5108, 5109, 5110, 5115, 5117, 5123, 5813, 5813, - 5813, 5116, 5118, 5132, 5134, 5136, 5135, 5131, 5813, 5137, - 5140, 5141, 5150, 5146, 5148, 5813, 5152, 5143, 5156, 5813, - 5154, 5158, 5161, 5155, 5167, 5171, 5174, 5176, 5177, 5813, - 5179, 5813, 5813, 5168, 5813, 5159, 5180, 5183, 5184, 5813, - 5189, 5186, 5190, 5192, 5194, 5813, 5197, 5195, 5198, 5199, - 5813, 5813, 5207, 5813, 5209, 5211, 5212, 5219, 5218, 5214, - 5221, 5223, 5813, 5224, 5225, 5227, 5229, 5231, 5813, 5234, + 5096, 5088, 5098, 5092, 5920, 5100, 5920, 5101, 5102, 5105, + 5108, 5103, 5106, 5030, 5111, 5110, 5121, 5118, 5920, 5123, + 5127, 5920, 5124, 5920, 5129, 5920, 5130, 5131, 5132, 5133, + 5920, 5135, 5139, 5140, 5141, 5920, 5142, 5144, 5150, 5920, + 5920, 5151, 5161, 5152, 5153, 5165, 5167, 5154, 5169, 5162, + 5170, 5156, 5178, 5177, 5180, 5181, 5183, 5184, 5185, 5920, + 5920, 5920, 5190, 5189, 5197, 5194, 5195, 5205, 5200, 5920, + 5203, 5206, 5204, 5213, 5210, 5215, 5920, 5212, 5216, 5217, + 5219, 5221, 5222, 5226, 5920, 5230, 5237, 5233, 5225, 5240, + 5244, 5247, 5249, 5250, 5920, 5252, 5920, 5920, 5253, 5920, - 5233, 5235, 5236, 5239, 5238, 5243, 5246, 5248, 5813, 5813, - 5249, 5250, 5813, 5813, 5259, 5265, 5247, 5813, 5813, 5813, - 5271, 5813, 5273, 5277, 5281, 5285, 5262, 5813, 5287, 5276, - 5284, 5813, 5268, 5280, 5290, 5292, 5813, 5813, 5289, 5196, - 5293, 5296, 5301, 5813, 5299, 5302, 5303, 5307, 5309, 5310, - 5313, 5312, 5328, 5326, 5315, 5319, 5323, 5330, 5331, 5329, - 5333, 5337, 5813, 5813, 5339, 5813, 5813, 5346, 5350, 5352, - 5354, 5356, 5358, 5360, 5813, 5361, 5363, 5364, 5365, 5347, - 5813, 5366, 5369, 5371, 5374, 5372, 5375, 5378, 5380, 5813, - 5813, 5381, 5388, 5382, 5389, 5383, 5813, 5392, 5400, 5396, + 5254, 5256, 5257, 5258, 5920, 5261, 5263, 5262, 5264, 5266, + 5920, 5274, 5267, 5269, 5270, 5920, 5920, 5281, 5920, 5284, + 5285, 5286, 5295, 5291, 5293, 5297, 5294, 5920, 5292, 5298, + 5302, 5304, 5305, 5920, 5306, 5308, 5309, 5310, 5313, 5317, + 5319, 5320, 5321, 5920, 5323, 5315, 5338, 5334, 5920, 5322, + 5340, 5920, 5920, 5325, 5344, 5345, 5920, 5920, 5920, 5347, + 5920, 5351, 5357, 5361, 5365, 5348, 5920, 5367, 5356, 5364, + 5920, 5360, 5368, 5370, 5372, 5920, 5920, 5369, 5376, 5373, + 5381, 5382, 5920, 5384, 5386, 5391, 5399, 5401, 5389, 5403, + 5405, 5412, 5385, 5393, 5407, 5409, 5410, 5416, 5413, 5420, - 5397, 5398, 5403, 5404, 5813, 5407, 5813, 5813, 5813, 5813, - 5813, 5813, 5813, 5813, 5406, 5813, 5405, 5412, 5414, 5416, - 5813, 5419, 5423, 5424, 5425, 5426, 5813, 5427, 5430, 5429, - 5341, 5431, 5435, 5438, 5433, 5437, 5443, 5439, 5447, 5444, - 5448, 5449, 5813, 5813, 5813, 5453, 5456, 5458, 5460, 5471, - 5472, 5475, 5478, 5461, 5463, 5479, 5481, 5484, 5466, 5485, - 5493, 5488, 5490, 5495, 5492, 5496, 5498, 5813, 5499, 5813, - 5501, 5813, 5813, 5504, 5505, 5508, 5509, 5517, 5518, 5513, - 5520, 5521, 5523, 5813, 5524, 5526, 5813, 5525, 5530, 5813, - 5529, 5531, 5532, 5535, 5537, 5538, 5542, 5553, 5813, 5541, + 5429, 5425, 5427, 5434, 5435, 5920, 5920, 5437, 5920, 5920, + 5439, 5442, 5444, 5446, 5448, 5450, 5452, 5920, 5387, 5454, + 5455, 5456, 5457, 5920, 5459, 5461, 5458, 5462, 5467, 5465, + 5469, 5471, 5920, 5920, 5463, 5480, 5472, 5485, 5474, 5920, + 5487, 5482, 5488, 5489, 5491, 5493, 5496, 5920, 5495, 5497, + 5920, 5920, 5499, 5920, 5920, 5920, 5920, 5920, 5920, 5920, + 5920, 5500, 5920, 5504, 5508, 5516, 5519, 5920, 5505, 5513, + 5424, 5509, 5520, 5920, 5521, 5524, 5525, 5531, 5523, 5526, + 5532, 5536, 5539, 5537, 5540, 5541, 5542, 5546, 5543, 5547, + 5549, 5920, 5920, 5920, 5548, 5550, 5560, 5552, 5569, 5571, - 5544, 5552, 5555, 5559, 5566, 5567, 5565, 5569, 5572, 5556, - 5579, 5581, 5578, 5585, 5813, 5582, 5576, 5587, 5588, 5589, - 5596, 5591, 5592, 5813, 5597, 5813, 5600, 5602, 5601, 5593, - 5603, 5604, 5615, 5613, 5619, 5813, 5609, 5620, 5623, 5624, - 5626, 5628, 5629, 5630, 5638, 5634, 5641, 5645, 5640, 5646, - 5631, 5651, 5648, 5813, 5655, 5652, 5813, 5657, 5658, 5659, - 5660, 5664, 5813, 5669, 5661, 5666, 5672, 5675, 5670, 5813, - 5682, 5684, 5686, 5813, 5687, 5813, 5813, 5689, 5676, 5688, - 5691, 5697, 5813, 5813, 5813, 5721, 5728, 5735, 5742, 5749, - 88, 5756, 5763, 5770, 5777, 5784, 5791, 5798, 5805 + 5574, 5576, 5563, 5566, 5577, 5578, 5579, 5581, 5585, 5593, + 5588, 5589, 5590, 5591, 5597, 5592, 5594, 5599, 5920, 5603, + 5920, 5604, 5920, 5920, 5609, 5614, 5612, 5605, 5616, 5623, + 5619, 5621, 5625, 5626, 5628, 5630, 5920, 5632, 5635, 5920, + 5636, 5637, 5920, 5638, 5640, 5642, 5639, 5643, 5646, 5649, + 5657, 5648, 5920, 5920, 5651, 5659, 5660, 5664, 5667, 5674, + 5669, 5673, 5675, 5676, 5666, 5688, 5920, 5684, 5686, 5690, + 5920, 5692, 5687, 5693, 5694, 5695, 5703, 5698, 5699, 5920, + 5701, 5920, 5705, 5707, 5710, 5708, 5709, 5711, 5720, 5718, + 5722, 5920, 5725, 5729, 5726, 5731, 5733, 5736, 5737, 5738, + 5740, 5742, 5746, 5750, 5752, 5753, 5743, 5756, 5754, 5920, + 5764, 5755, 5920, 5765, 5766, 5758, 5767, 5768, 5920, 5776, + 5772, 5778, 5779, 5782, 5783, 5920, 5785, 5788, 5789, 5920, + 5793, 5920, 5920, 5794, 5792, 5795, 5801, 5803, 5920, 5920, + 5920, 5828, 5835, 5842, 5849, 5856, 88, 5863, 5870, 5877, + 5884, 5891, 5898, 5905, 5912 } ; -static const flex_int16_t yy_def[3000] = +static const flex_int16_t yy_def[3056] = { 0, - 2985, 1, 2986, 2986, 2987, 2987, 2988, 2988, 2989, 2989, - 2990, 2990, 2985, 2991, 2985, 2985, 2985, 2985, 2992, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2993, 2985, 2985, 2985, 2993, 2994, 2985, 2985, - 2985, 2994, 2995, 2985, 2985, 2985, 2985, 2995, 2996, 2985, - 2985, 2985, 2996, 2997, 2985, 2998, 2985, 2997, 2997, 2991, - 2991, 2985, 2999, 2992, 2999, 2992, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3041, 1, 3042, 3042, 3043, 3043, 3044, 3044, 3045, 3045, + 3046, 3046, 3041, 3047, 3041, 3041, 3041, 3041, 3048, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3049, 3041, 3041, 3041, 3049, 3050, 3041, 3041, + 3041, 3050, 3051, 3041, 3041, 3041, 3041, 3051, 3052, 3041, + 3041, 3041, 3052, 3053, 3041, 3054, 3041, 3053, 3053, 3047, + 3047, 3041, 3055, 3048, 3055, 3048, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2993, 2993, 2994, 2994, 2995, 2995, 2985, 2996, 2996, 2997, - 2997, 2998, 2998, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3049, 3049, 3050, 3050, 3051, 3051, 3041, 3052, 3052, 3053, + 3053, 3054, 3054, 3053, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3053, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3053, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2997, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3053, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2985, 2985, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3053, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3041, 3041, 3047, 3041, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3053, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2997, 2991, + 3047, 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3053, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3041, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3041, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, 2991, - 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3041, 3047, 3041, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2991, 2985, 2991, 2985, 2991, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3041, 3041, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3041, + 3047, 3041, 3047, 3047, 3041, 3041, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2985, 2985, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, + 3047, 3047, 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3041, 3041, 3041, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3041, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3041, 3047, 3041, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2985, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3041, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3041, 3047, 3041, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3041, + 3047, 3041, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2985, - 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2985, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3041, 3041, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3041, 3041, + 3047, 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3041, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 3047, 3047, 3047, 3047, 3041, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3041, 3047, 3041, 3047, 3041, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3041, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3041, 3047, 3041, 3041, 3047, 3041, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2985, 2985, 2985, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2985, 2991, 2985, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, + 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3041, 3041, 3047, 3047, 3047, 3041, 3041, 3041, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3047, 3047, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2985, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, - 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 3047, 3047, 3047, 3047, 3047, 3041, 3041, 3047, 3041, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3041, 3041, 3047, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3047, 3041, 3047, 3047, 3047, 3047, 3041, 3047, 3047, + 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3047, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2985, 0, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985 + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3041, 3047, 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3041, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, + 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3041, + 3047, 3047, 3041, 3047, 3047, 3047, 3047, 3047, 3041, 3047, + 3047, 3047, 3047, 3047, 3047, 3041, 3047, 3047, 3047, 3041, + 3047, 3041, 3041, 3047, 3047, 3047, 3047, 3047, 3041, 3041, + 0, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041 } ; -static const flex_int16_t yy_nxt[5854] = +static const flex_int16_t yy_nxt[5961] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1550,7 +1569,7 @@ static const flex_int16_t yy_nxt[5854] = 71, 722, 71, 71, 71, 71, 729, 727, 738, 733, 71, 71, 71, 736, 71, 731, 739, 737, 71, 735, - 71, 734, 863, 740, 741, 742, 71, 71, 71, 743, + 71, 734, 864, 740, 741, 742, 71, 71, 71, 743, 745, 747, 746, 744, 71, 749, 71, 71, 71, 748, 71, 71, 71, 750, 752, 71, 758, 751, 71, 753, 71, 754, 71, 71, 71, 756, 757, 71, 755, 761, @@ -1572,486 +1591,497 @@ static const flex_int16_t yy_nxt[5854] = 71, 71, 838, 836, 829, 830, 834, 71, 71, 71, 71, 831, 71, 840, 71, 844, 71, 71, 71, 71, - 837, 71, 841, 71, 845, 846, 71, 839, 888, 71, - 71, 71, 843, 71, 850, 847, 71, 842, 851, 71, - 857, 852, 858, 849, 848, 855, 71, 861, 853, 71, - 856, 854, 71, 860, 71, 859, 71, 862, 71, 867, - 71, 71, 71, 71, 71, 71, 875, 71, 865, 71, - 864, 891, 879, 880, 71, 71, 882, 883, 866, 71, - 868, 869, 877, 870, 876, 878, 871, 71, 71, 884, - 71, 872, 71, 71, 881, 885, 886, 873, 874, 71, + 837, 71, 841, 71, 845, 846, 71, 839, 71, 71, + 71, 71, 843, 71, 859, 847, 71, 842, 71, 858, + 861, 856, 71, 849, 848, 71, 857, 860, 71, 862, + 850, 71, 863, 867, 851, 71, 865, 852, 71, 71, + 868, 71, 71, 876, 853, 854, 71, 855, 71, 866, + 71, 869, 870, 71, 871, 882, 880, 872, 71, 878, + 877, 151, 873, 881, 71, 71, 883, 879, 874, 875, + 71, 885, 71, 884, 71, 71, 71, 886, 887, 888, - 71, 71, 71, 71, 887, 71, 895, 71, 71, 71, - 894, 890, 889, 71, 71, 898, 71, 71, 902, 904, - 71, 892, 893, 896, 71, 899, 923, 897, 900, 71, - 905, 901, 71, 908, 903, 906, 71, 907, 909, 71, - 71, 911, 71, 71, 71, 910, 912, 71, 913, 71, - 915, 71, 916, 71, 71, 71, 71, 914, 71, 71, - 71, 919, 917, 922, 71, 920, 925, 71, 924, 71, - 71, 71, 71, 918, 929, 71, 71, 71, 921, 927, - 928, 932, 71, 71, 930, 931, 926, 71, 71, 937, - 71, 933, 71, 939, 938, 71, 935, 71, 71, 71, + 71, 71, 889, 71, 71, 71, 71, 892, 890, 71, + 896, 71, 71, 895, 71, 71, 899, 71, 71, 71, + 891, 903, 905, 71, 893, 894, 897, 71, 898, 901, + 900, 71, 906, 934, 71, 909, 904, 907, 71, 908, + 902, 71, 910, 71, 71, 912, 913, 71, 71, 911, + 71, 71, 71, 914, 916, 71, 917, 71, 915, 71, + 918, 71, 71, 71, 923, 71, 920, 71, 926, 921, + 71, 71, 71, 71, 71, 71, 924, 919, 925, 71, + 71, 928, 922, 71, 929, 930, 932, 71, 931, 71, + 927, 71, 933, 71, 940, 71, 71, 71, 935, 938, - 71, 936, 71, 944, 946, 940, 71, 942, 934, 947, - 71, 945, 71, 71, 71, 71, 941, 949, 71, 71, - 71, 71, 71, 943, 71, 960, 957, 948, 71, 955, - 71, 71, 71, 71, 950, 951, 953, 71, 952, 954, - 71, 961, 958, 71, 956, 962, 965, 959, 71, 963, - 71, 964, 71, 967, 968, 71, 71, 966, 71, 71, - 71, 970, 71, 71, 71, 977, 972, 979, 71, 981, - 969, 71, 71, 71, 982, 71, 971, 71, 978, 973, - 71, 975, 974, 976, 71, 71, 71, 71, 980, 983, - 71, 984, 987, 71, 989, 990, 985, 71, 988, 993, + 936, 71, 937, 71, 939, 71, 943, 71, 71, 947, + 941, 945, 948, 71, 71, 942, 71, 71, 71, 946, + 71, 950, 71, 71, 949, 944, 71, 71, 71, 71, + 961, 956, 958, 71, 71, 951, 71, 952, 953, 71, + 71, 71, 954, 955, 71, 959, 963, 71, 960, 957, + 962, 71, 964, 965, 967, 71, 971, 966, 969, 71, + 968, 71, 71, 71, 970, 71, 71, 978, 71, 980, + 973, 71, 71, 71, 982, 71, 983, 71, 71, 71, + 71, 972, 71, 974, 988, 976, 979, 975, 977, 71, + 986, 981, 71, 984, 71, 990, 985, 991, 987, 71, - 991, 71, 71, 994, 986, 996, 71, 71, 992, 71, - 71, 999, 151, 71, 71, 998, 71, 1002, 1001, 71, - 71, 71, 995, 71, 71, 997, 1005, 71, 1000, 71, - 71, 71, 1017, 71, 71, 1020, 71, 1018, 71, 71, - 1004, 1003, 1006, 1008, 71, 71, 71, 1009, 1007, 1019, - 1022, 1010, 71, 1023, 71, 1011, 71, 1012, 1024, 1025, - 1027, 1013, 71, 1014, 1021, 1028, 71, 71, 1015, 71, - 1026, 1030, 71, 1016, 71, 71, 1029, 1032, 71, 1034, - 71, 71, 71, 71, 1031, 1039, 1040, 1033, 1038, 1035, - 71, 71, 71, 1042, 1037, 1041, 71, 1043, 71, 1036, + 71, 71, 992, 71, 995, 71, 997, 71, 71, 71, + 71, 71, 71, 989, 994, 71, 999, 71, 993, 1000, + 151, 1002, 71, 1003, 1001, 996, 998, 71, 71, 71, + 71, 71, 1006, 71, 1004, 1005, 71, 1018, 71, 1021, + 71, 71, 1019, 71, 1009, 71, 71, 1007, 71, 1023, + 71, 1010, 71, 1008, 1011, 71, 1020, 1026, 1012, 71, + 1013, 1024, 1025, 71, 1014, 1033, 1015, 71, 1022, 1028, + 71, 1016, 71, 1027, 1029, 71, 1017, 1030, 71, 1036, + 71, 71, 1031, 71, 1038, 1034, 1037, 1044, 71, 71, + 71, 71, 1042, 1039, 1032, 1035, 1041, 1040, 71, 1043, - 1045, 71, 71, 71, 71, 1044, 71, 1055, 1046, 71, - 1047, 1059, 71, 1054, 71, 1048, 71, 1049, 1056, 71, - 1058, 71, 1060, 1050, 1057, 71, 1064, 71, 1051, 1052, - 1061, 1066, 71, 71, 71, 1053, 1065, 71, 71, 1070, - 1062, 1067, 71, 71, 1063, 71, 71, 1069, 1071, 71, - 71, 1076, 1068, 71, 71, 1073, 71, 71, 1074, 71, - 71, 1072, 1077, 71, 1079, 71, 1075, 71, 71, 71, - 71, 71, 71, 1078, 1081, 71, 1080, 1083, 1084, 1085, - 1088, 1086, 1090, 1082, 1087, 71, 71, 1089, 71, 71, - 71, 71, 1091, 71, 71, 71, 1096, 71, 1097, 1098, + 71, 1045, 1046, 71, 71, 71, 71, 71, 71, 1058, + 1048, 1047, 71, 71, 1061, 1057, 71, 71, 1049, 71, + 1050, 1059, 1062, 71, 1060, 1051, 149, 1052, 71, 71, + 1064, 1063, 71, 1053, 1067, 71, 1068, 1069, 1054, 1055, + 71, 71, 71, 71, 1070, 1056, 1073, 1065, 1066, 71, + 71, 71, 71, 71, 1074, 1072, 71, 1079, 71, 1071, + 1076, 71, 1077, 71, 71, 71, 71, 1080, 71, 1075, + 1082, 71, 1078, 71, 71, 1091, 71, 71, 71, 1089, + 1081, 71, 1084, 1086, 1083, 1087, 1085, 1088, 71, 71, + 71, 1090, 71, 1092, 71, 71, 71, 71, 71, 71, - 71, 1100, 1093, 1101, 1092, 1095, 1099, 1094, 1102, 71, - 71, 1104, 71, 71, 71, 1106, 1105, 71, 1107, 71, - 71, 71, 1108, 1114, 71, 71, 1103, 1109, 71, 71, - 1116, 71, 1110, 71, 1112, 71, 71, 71, 1111, 1113, - 1118, 71, 1122, 1117, 1120, 1115, 71, 1119, 71, 71, - 71, 1123, 1121, 71, 1125, 1126, 71, 71, 1132, 71, - 71, 1131, 1128, 71, 1124, 1127, 1130, 71, 71, 71, - 1136, 71, 1133, 1129, 1135, 71, 71, 71, 71, 71, - 71, 1140, 1142, 1143, 1147, 1144, 1134, 71, 71, 71, - 71, 71, 1141, 1137, 71, 1138, 1145, 1139, 71, 1146, + 71, 1099, 1093, 1100, 1096, 1101, 1102, 71, 1103, 1094, + 1098, 1095, 1097, 1104, 71, 1106, 1107, 71, 71, 71, + 1111, 1108, 71, 71, 71, 1109, 71, 1105, 1110, 71, + 71, 1117, 1112, 71, 1119, 71, 71, 71, 71, 71, + 71, 1121, 1115, 1113, 1114, 1116, 71, 71, 147, 1123, + 1120, 71, 1122, 1118, 71, 71, 1125, 71, 71, 1126, + 1124, 71, 1128, 1127, 1131, 71, 1129, 1130, 71, 1134, + 1135, 71, 71, 71, 1133, 71, 71, 71, 1139, 1138, + 71, 1132, 1136, 71, 71, 71, 71, 1145, 1143, 1146, + 1137, 71, 71, 71, 71, 71, 1147, 1148, 1140, 1144, - 1150, 71, 71, 1152, 71, 1148, 71, 1151, 71, 71, - 1153, 71, 71, 71, 1156, 1157, 71, 1154, 1149, 71, - 71, 71, 1162, 1163, 1158, 71, 71, 1155, 71, 71, - 1165, 1160, 1166, 71, 1159, 71, 1164, 1170, 71, 1161, - 71, 71, 71, 71, 71, 1167, 71, 1176, 71, 1168, - 1169, 1172, 71, 71, 71, 71, 1182, 71, 1171, 1180, - 71, 71, 1173, 1197, 71, 1175, 1177, 1179, 1178, 1174, - 1181, 1184, 1185, 71, 71, 1187, 71, 71, 71, 1186, - 1183, 1188, 71, 71, 71, 71, 71, 71, 71, 1191, - 71, 151, 71, 71, 1194, 71, 1189, 1190, 71, 71, + 71, 1150, 1141, 71, 1142, 1149, 71, 71, 1153, 1155, + 71, 1154, 1151, 71, 71, 71, 71, 71, 71, 71, + 1159, 1160, 1156, 1152, 1157, 71, 71, 71, 71, 1165, + 1161, 1166, 71, 1168, 1158, 71, 71, 71, 1163, 1169, + 71, 71, 71, 1162, 1173, 71, 1164, 1167, 71, 71, + 71, 71, 71, 1172, 71, 1170, 1171, 71, 1175, 1179, + 71, 71, 71, 1174, 71, 71, 71, 1183, 1180, 1176, + 146, 1178, 1181, 1182, 1184, 1187, 1177, 1185, 71, 1188, + 1192, 71, 71, 71, 1186, 71, 71, 1189, 1190, 71, + 71, 71, 71, 71, 1191, 1194, 71, 1193, 71, 71, - 1192, 71, 71, 1195, 1201, 1193, 1198, 1203, 1209, 1196, - 1200, 1199, 71, 1207, 71, 71, 1204, 71, 1205, 1202, - 1208, 1206, 71, 71, 71, 1211, 71, 71, 1210, 1214, - 71, 71, 1213, 1219, 71, 1212, 1216, 71, 1217, 71, - 71, 71, 1220, 71, 1221, 1215, 1223, 1224, 71, 1218, - 71, 71, 71, 71, 71, 71, 71, 1225, 71, 71, - 1222, 1231, 71, 71, 71, 1226, 1227, 1229, 1230, 71, - 1232, 1228, 71, 71, 71, 1233, 71, 1237, 1236, 1241, - 1234, 1235, 1240, 71, 1238, 71, 71, 71, 1242, 1239, - 71, 1243, 1245, 71, 1247, 71, 1244, 71, 1246, 1248, + 1197, 1200, 71, 71, 71, 71, 1195, 71, 71, 1210, + 71, 1196, 1206, 1198, 1203, 1199, 1204, 1201, 71, 71, + 71, 1207, 1202, 1208, 1211, 1205, 1209, 1212, 71, 71, + 71, 71, 1214, 1215, 71, 71, 1213, 71, 71, 1216, + 1219, 71, 71, 1218, 1224, 71, 1221, 71, 71, 1217, + 71, 71, 1225, 1222, 71, 1226, 1220, 1223, 71, 1228, + 1230, 71, 1229, 71, 71, 71, 71, 71, 1227, 71, + 71, 71, 71, 71, 1236, 71, 1231, 1234, 1232, 1241, + 71, 1235, 1237, 1233, 71, 71, 71, 71, 1238, 1247, + 1240, 1246, 1239, 71, 1248, 1242, 1245, 71, 71, 71, - 71, 71, 1252, 71, 149, 1261, 1260, 1250, 1251, 1249, - 71, 71, 71, 1262, 1265, 1253, 1259, 71, 1254, 1255, - 71, 71, 1263, 1256, 71, 1268, 71, 71, 71, 1257, - 1264, 1266, 1267, 1258, 71, 1270, 71, 71, 71, 1271, - 71, 1272, 71, 71, 71, 71, 1280, 1281, 1277, 1269, - 71, 1275, 71, 71, 71, 1282, 1274, 1273, 1278, 71, - 1276, 71, 1290, 1279, 71, 1283, 71, 1289, 1284, 71, - 71, 71, 1294, 1285, 1292, 1286, 71, 1287, 1296, 1288, - 1291, 71, 71, 1297, 71, 1295, 1293, 1299, 71, 71, - 71, 71, 71, 1305, 71, 1306, 71, 71, 1301, 71, + 71, 1252, 71, 1250, 1243, 1244, 1253, 71, 71, 71, + 1257, 1251, 71, 1249, 71, 71, 1255, 71, 1266, 1254, + 1268, 1256, 71, 1265, 71, 1264, 1269, 1258, 71, 1267, + 1259, 1260, 1270, 71, 71, 1261, 71, 71, 71, 1271, + 71, 1262, 1272, 71, 1273, 1263, 71, 1275, 71, 71, + 71, 1276, 71, 1277, 1274, 71, 1278, 1282, 1279, 1280, + 71, 1285, 1286, 71, 1295, 71, 71, 71, 71, 1281, + 1287, 71, 1289, 1284, 1283, 1288, 71, 1290, 71, 1291, + 71, 1292, 1297, 1293, 71, 1294, 71, 1296, 71, 71, + 71, 71, 71, 1301, 71, 1298, 1304, 1300, 1302, 71, - 71, 71, 1300, 1298, 1307, 1309, 1304, 71, 71, 1302, - 1303, 1308, 71, 71, 71, 1310, 1311, 71, 1314, 1315, - 71, 1317, 71, 71, 71, 1318, 1312, 1319, 71, 1316, - 71, 1323, 71, 1320, 71, 71, 1321, 1313, 71, 1322, - 1325, 71, 71, 1326, 71, 1330, 71, 71, 71, 1327, - 71, 1332, 71, 71, 1324, 71, 1328, 1334, 71, 1329, - 1336, 71, 1335, 71, 1338, 71, 71, 1331, 71, 71, - 1333, 1340, 71, 1337, 1341, 71, 1342, 1343, 1339, 71, - 1344, 71, 1345, 1347, 1346, 71, 71, 71, 1351, 1352, - 1354, 1348, 71, 1349, 71, 71, 71, 1353, 71, 71, + 71, 71, 1310, 1306, 1299, 71, 1305, 71, 71, 1307, + 71, 1303, 71, 1311, 71, 1309, 71, 71, 1312, 1308, + 71, 1313, 1314, 1317, 71, 1316, 1320, 71, 1315, 1319, + 71, 71, 1322, 71, 71, 71, 1323, 71, 1324, 71, + 1328, 71, 1325, 71, 71, 1318, 1321, 71, 1327, 1326, + 1330, 71, 71, 1331, 71, 1335, 71, 71, 71, 1332, + 71, 1337, 71, 1329, 71, 1333, 71, 1339, 1334, 71, + 71, 1341, 71, 1340, 71, 1343, 71, 1336, 71, 1345, + 1338, 1346, 71, 71, 1342, 1344, 1347, 1348, 1349, 71, + 1350, 71, 71, 71, 71, 71, 1351, 1356, 1357, 1353, - 1350, 71, 1358, 71, 71, 71, 71, 1355, 1362, 1363, - 71, 1365, 1357, 71, 71, 71, 1364, 71, 1356, 71, - 71, 71, 71, 71, 1359, 1360, 71, 1366, 71, 1361, - 71, 1372, 1369, 1367, 71, 1370, 71, 1377, 71, 1368, - 1371, 1376, 71, 1373, 71, 147, 1375, 1379, 1381, 71, - 71, 1374, 71, 1382, 71, 71, 71, 1378, 71, 1384, - 1385, 71, 71, 1380, 1392, 71, 1394, 1383, 71, 1386, - 71, 1387, 71, 1388, 71, 1390, 1389, 71, 1391, 1393, - 1397, 1395, 71, 71, 71, 1396, 71, 71, 1400, 71, - 71, 1402, 71, 71, 1398, 71, 1407, 1408, 71, 71, + 71, 1354, 71, 71, 71, 1358, 1359, 71, 1355, 71, + 1352, 1360, 71, 1363, 71, 71, 71, 71, 1367, 1368, + 1362, 71, 1370, 71, 71, 71, 1361, 1369, 71, 71, + 71, 71, 71, 71, 1377, 1364, 1365, 1371, 71, 71, + 1366, 71, 1374, 1372, 71, 1375, 71, 1382, 71, 1373, + 1376, 1381, 71, 71, 71, 1386, 71, 1384, 1378, 1380, + 1387, 71, 71, 1389, 1379, 71, 71, 1383, 71, 71, + 1390, 1397, 1385, 71, 1388, 71, 71, 71, 1399, 1391, + 1400, 1392, 1395, 1393, 71, 1396, 1394, 1398, 71, 1402, + 71, 71, 71, 71, 1403, 71, 1407, 71, 71, 1401, - 1399, 71, 1401, 1404, 71, 1411, 71, 1403, 1405, 71, - 1406, 71, 71, 1412, 71, 71, 1409, 71, 1410, 71, - 1414, 71, 1418, 1413, 1415, 71, 1419, 1416, 71, 71, - 1420, 71, 1423, 1417, 71, 1428, 1426, 1422, 71, 1421, - 1425, 71, 1429, 1427, 1424, 71, 1430, 71, 71, 71, - 1431, 1432, 71, 71, 71, 71, 1434, 1433, 71, 71, - 71, 1439, 71, 71, 71, 71, 1438, 71, 71, 1436, - 1442, 1441, 1435, 1437, 1445, 71, 71, 1450, 1443, 1446, - 71, 71, 1440, 1447, 71, 71, 1444, 1451, 1448, 71, - 1454, 71, 71, 1453, 71, 1449, 71, 1458, 71, 1459, + 71, 1405, 1409, 71, 71, 71, 1414, 71, 71, 1404, + 1406, 1408, 1415, 71, 1411, 71, 71, 1418, 1410, 71, + 71, 1412, 1413, 71, 71, 1416, 71, 1419, 71, 71, + 71, 71, 1417, 1421, 1425, 1420, 1427, 1426, 1428, 1422, + 71, 1423, 71, 1430, 71, 71, 71, 1424, 71, 1429, + 1435, 1432, 1436, 1434, 71, 1437, 71, 71, 71, 1431, + 71, 1438, 1439, 71, 71, 71, 1441, 1433, 1440, 71, + 71, 71, 71, 1446, 71, 71, 1445, 71, 71, 71, + 1449, 71, 1452, 1442, 1443, 1448, 1444, 1453, 71, 71, + 1454, 71, 1450, 71, 1447, 1455, 71, 71, 1451, 71, - 1452, 1461, 71, 71, 71, 71, 71, 71, 71, 1464, - 1455, 1463, 1456, 71, 1457, 71, 71, 71, 71, 71, - 1472, 1462, 71, 1465, 1460, 1466, 71, 1467, 71, 1473, - 1469, 71, 1468, 1471, 1474, 1475, 71, 71, 1470, 71, - 1479, 1478, 1476, 1477, 71, 71, 71, 1481, 71, 71, - 71, 1482, 71, 1484, 1488, 71, 1490, 1480, 71, 71, - 71, 1485, 71, 1489, 1483, 1493, 1487, 1491, 71, 1486, - 71, 71, 1492, 71, 1494, 1495, 71, 1499, 1500, 71, - 71, 71, 71, 71, 71, 1504, 1505, 1503, 1496, 71, - 71, 1497, 71, 1507, 71, 71, 1498, 71, 1501, 71, + 1457, 1456, 1460, 71, 71, 1465, 71, 71, 1458, 1461, + 1459, 71, 1466, 71, 1468, 71, 1462, 71, 71, 71, + 71, 1471, 71, 1463, 1464, 1470, 71, 71, 71, 71, + 144, 71, 71, 1479, 1469, 71, 1472, 1473, 1480, 1467, + 71, 1474, 1476, 1482, 71, 1475, 1478, 71, 71, 71, + 1477, 1484, 1481, 1483, 71, 71, 71, 71, 71, 71, + 1488, 1491, 1485, 1486, 1489, 71, 1495, 71, 1487, 71, + 1497, 71, 1492, 71, 1496, 71, 71, 1490, 1500, 1493, + 71, 1494, 71, 71, 1501, 71, 1498, 1502, 1499, 71, + 1506, 1507, 71, 71, 71, 71, 71, 71, 1511, 1512, - 1508, 71, 1502, 1509, 71, 71, 1510, 71, 1512, 1506, - 1514, 1511, 71, 1515, 71, 71, 71, 71, 71, 1513, - 71, 1519, 1516, 71, 1521, 71, 71, 1525, 71, 71, - 71, 1520, 71, 71, 1518, 1517, 1522, 1528, 1530, 71, - 1523, 71, 1526, 71, 1533, 1524, 71, 1527, 1529, 71, - 1531, 71, 1534, 71, 71, 1536, 1539, 71, 71, 1538, - 1535, 1532, 71, 71, 71, 71, 71, 1546, 71, 71, - 71, 71, 1537, 1547, 71, 71, 1540, 1541, 1544, 1550, - 1551, 1542, 1543, 71, 71, 1553, 71, 71, 71, 1548, - 1545, 1549, 1554, 1555, 1552, 1557, 1559, 71, 71, 71, + 1510, 71, 1503, 1504, 71, 71, 1514, 71, 71, 1505, + 71, 1508, 71, 1515, 71, 1509, 1516, 71, 71, 71, + 1517, 1513, 1519, 1521, 1518, 71, 1522, 71, 71, 71, + 71, 71, 1520, 1523, 1526, 71, 1528, 71, 71, 71, + 1532, 71, 71, 71, 1527, 71, 71, 1525, 1524, 1529, + 1535, 71, 1530, 1537, 71, 1533, 71, 71, 1536, 71, + 1534, 1538, 71, 1531, 71, 1540, 1539, 1542, 71, 71, + 1546, 71, 1543, 1541, 1545, 71, 71, 71, 1544, 71, + 1547, 71, 1553, 71, 71, 71, 71, 71, 1554, 1548, + 71, 1551, 1558, 1557, 1562, 1549, 1550, 71, 71, 1560, - 1558, 71, 71, 1562, 1556, 71, 71, 1560, 1561, 71, - 1564, 71, 1565, 71, 71, 71, 71, 1569, 71, 1570, - 1566, 71, 71, 71, 71, 1584, 1581, 1576, 1571, 1563, - 1568, 1567, 71, 71, 71, 1573, 71, 71, 1574, 1577, - 1582, 1572, 1579, 71, 71, 1578, 71, 1580, 1583, 1586, - 1575, 71, 1585, 71, 71, 71, 71, 1588, 1587, 71, - 71, 1593, 1594, 1592, 71, 1596, 71, 71, 71, 1595, - 71, 71, 1589, 71, 71, 1590, 1599, 71, 1598, 1591, - 71, 71, 71, 71, 1608, 1600, 71, 71, 1601, 1597, - 71, 71, 71, 71, 1602, 71, 1604, 1605, 1606, 71, + 71, 71, 1564, 1561, 1552, 1555, 1556, 71, 71, 71, + 1559, 1566, 71, 71, 71, 71, 71, 1571, 71, 1568, + 1569, 1563, 71, 1565, 71, 1572, 1567, 71, 71, 71, + 1577, 1576, 1573, 71, 71, 71, 71, 1583, 1570, 1585, + 1574, 71, 1575, 71, 1580, 1578, 71, 1581, 71, 71, + 1591, 1584, 1590, 71, 1579, 1586, 71, 1587, 1588, 1582, + 1589, 71, 71, 1593, 71, 1594, 1592, 1595, 71, 71, + 71, 71, 71, 71, 1596, 71, 1602, 1603, 1601, 71, + 1605, 1597, 71, 71, 1604, 71, 71, 71, 1598, 71, + 1599, 71, 1600, 71, 1607, 1608, 71, 71, 1609, 71, - 1607, 1603, 1613, 71, 71, 71, 1616, 1611, 71, 1615, - 71, 1609, 1610, 71, 71, 71, 1612, 71, 71, 1614, - 71, 71, 71, 1617, 1618, 1623, 1621, 71, 1631, 71, - 1622, 1624, 1620, 71, 1625, 71, 1626, 1619, 1630, 1632, - 71, 71, 1627, 1636, 71, 1633, 1629, 1628, 71, 71, - 71, 1635, 71, 71, 71, 71, 71, 1639, 1640, 1634, - 71, 71, 1637, 71, 71, 1643, 1649, 71, 1648, 1638, - 1647, 1642, 1645, 1641, 71, 1646, 71, 71, 71, 1644, - 71, 71, 71, 71, 1650, 71, 1658, 71, 71, 1651, - 71, 1662, 1653, 1655, 71, 1652, 1654, 1660, 71, 1661, + 71, 1617, 71, 71, 71, 1610, 71, 71, 1606, 71, + 71, 1611, 71, 1613, 1614, 1615, 71, 1612, 71, 1616, + 1622, 71, 1618, 1620, 1619, 71, 71, 1625, 71, 71, + 1624, 1621, 1623, 1626, 71, 71, 71, 71, 71, 71, + 1628, 71, 1627, 1630, 1632, 1633, 71, 1629, 1634, 1639, + 1631, 1640, 71, 71, 1635, 71, 1636, 1641, 71, 71, + 71, 1637, 1644, 71, 1638, 1642, 1645, 71, 71, 71, + 71, 71, 71, 1643, 1648, 1649, 1646, 71, 1657, 1647, + 1652, 71, 71, 71, 71, 1658, 71, 1650, 1651, 71, + 1654, 1656, 71, 1655, 71, 71, 1653, 71, 71, 71, - 71, 1657, 71, 1659, 71, 1663, 71, 1656, 1669, 1664, - 71, 71, 1665, 1670, 71, 1675, 1666, 71, 146, 71, - 1671, 71, 1668, 1667, 1674, 1672, 1677, 71, 1678, 71, - 71, 71, 1680, 1673, 71, 1676, 1679, 71, 71, 1684, - 71, 71, 1688, 1681, 1683, 71, 71, 71, 71, 1682, - 1686, 71, 71, 1685, 1689, 71, 1687, 71, 71, 71, - 1690, 1693, 71, 1692, 71, 1698, 71, 1700, 1701, 71, - 1691, 1694, 1695, 71, 71, 71, 1696, 1703, 1697, 71, - 1707, 71, 1702, 71, 71, 71, 71, 1699, 1711, 71, - 71, 71, 71, 1704, 1706, 1713, 71, 1714, 1705, 71, + 71, 1667, 1660, 1659, 71, 71, 71, 71, 1662, 1664, + 1661, 1663, 1670, 71, 1669, 71, 1671, 1666, 71, 71, + 1668, 1678, 1673, 1665, 1675, 1674, 1679, 71, 71, 71, + 1672, 71, 71, 71, 1684, 1686, 71, 1677, 1683, 1676, + 71, 1687, 1680, 71, 1681, 1689, 71, 71, 1688, 71, + 1685, 71, 1690, 1682, 71, 1693, 71, 71, 1697, 1695, + 71, 71, 71, 71, 71, 1696, 71, 71, 1692, 1691, + 1694, 1698, 71, 71, 1701, 71, 1702, 71, 1709, 1699, + 71, 1700, 1707, 71, 71, 1703, 1704, 1710, 71, 1705, + 71, 1706, 71, 71, 71, 71, 1716, 71, 71, 71, - 1709, 1715, 71, 1710, 1716, 1708, 71, 71, 1720, 71, - 1712, 1717, 71, 71, 71, 1724, 71, 71, 71, 71, - 71, 71, 1719, 71, 1726, 1722, 71, 71, 1731, 1718, - 71, 1721, 1725, 1723, 71, 1727, 1739, 1733, 1728, 1729, - 71, 1730, 1732, 1735, 71, 71, 1734, 71, 1736, 1737, - 71, 1740, 1738, 1741, 71, 71, 71, 71, 1743, 71, - 71, 71, 1744, 71, 71, 71, 71, 1742, 71, 71, - 1749, 71, 71, 1753, 71, 1750, 71, 71, 1754, 1759, - 1745, 1747, 1748, 1746, 1751, 71, 1752, 1758, 71, 71, - 71, 1755, 1757, 71, 1756, 71, 71, 1760, 1764, 71, + 1712, 1711, 71, 71, 1708, 1720, 71, 1715, 1713, 71, + 71, 1714, 1726, 1718, 1722, 71, 1719, 1717, 71, 1721, + 1723, 71, 71, 1724, 1729, 71, 1725, 71, 71, 71, + 1733, 71, 1727, 71, 71, 71, 71, 1728, 71, 71, + 1731, 1735, 71, 1740, 71, 71, 1730, 1734, 1732, 71, + 1736, 1737, 71, 1748, 1738, 142, 1739, 1741, 1743, 71, + 1742, 1744, 71, 71, 1746, 71, 1745, 71, 1749, 1750, + 71, 1751, 1747, 71, 71, 1752, 71, 71, 71, 1753, + 71, 71, 71, 71, 71, 71, 71, 1758, 71, 71, + 1762, 71, 1759, 71, 1768, 71, 1760, 1754, 1756, 1757, - 1767, 1768, 71, 1769, 71, 71, 1762, 71, 1761, 1765, - 71, 1766, 71, 1763, 1771, 71, 71, 1772, 1775, 71, - 71, 1777, 71, 71, 1776, 1770, 1778, 71, 1773, 1779, - 1780, 1774, 1781, 71, 71, 71, 1783, 1786, 71, 1784, - 71, 71, 1785, 71, 71, 71, 1793, 1782, 71, 71, - 71, 1798, 71, 71, 1791, 1795, 1787, 1788, 1789, 71, - 1796, 71, 71, 1790, 1797, 1792, 1801, 71, 1794, 71, - 1799, 71, 71, 1803, 1805, 71, 1802, 1800, 71, 1807, - 71, 71, 71, 1810, 1811, 71, 71, 1813, 71, 71, - 1804, 71, 71, 71, 1819, 71, 71, 1806, 1818, 71, + 1755, 1761, 1763, 71, 71, 71, 1769, 1771, 1765, 1766, + 1770, 71, 71, 71, 1773, 1764, 1767, 71, 71, 1776, + 71, 1774, 71, 1779, 1772, 1780, 71, 1781, 71, 1783, + 71, 71, 1775, 71, 1777, 71, 1778, 71, 1782, 71, + 1784, 1787, 71, 71, 1789, 71, 71, 1788, 1790, 1791, + 71, 1793, 1785, 1792, 1786, 71, 71, 71, 71, 1795, + 1796, 71, 1794, 71, 1797, 1798, 71, 71, 71, 1805, + 71, 71, 1809, 71, 71, 71, 1807, 71, 1799, 1800, + 1801, 1808, 71, 71, 71, 1802, 1810, 1803, 1804, 1812, + 1806, 1813, 71, 1815, 1811, 1817, 71, 71, 1816, 71, - 1808, 1815, 1816, 1809, 71, 71, 1812, 71, 71, 71, - 1825, 71, 1817, 71, 1814, 1822, 1823, 1820, 71, 71, - 1821, 1829, 1832, 1828, 71, 1824, 1833, 71, 71, 1827, - 71, 1831, 71, 1834, 71, 1835, 71, 1826, 71, 1830, - 71, 71, 71, 71, 71, 1836, 1840, 71, 1843, 1844, - 71, 71, 71, 1839, 71, 71, 1847, 71, 1837, 1838, - 1841, 71, 1852, 71, 71, 1846, 1851, 71, 71, 71, - 1842, 1845, 1848, 1856, 1849, 71, 71, 1859, 71, 1850, - 71, 1857, 1854, 1853, 1860, 1858, 71, 1855, 1863, 71, - 71, 71, 1870, 71, 71, 71, 71, 1861, 71, 1867, + 71, 1814, 71, 1819, 71, 71, 1822, 1823, 71, 71, + 1825, 71, 71, 71, 71, 71, 1831, 71, 1830, 71, + 1820, 71, 1827, 1828, 71, 1818, 1821, 71, 1834, 1824, + 71, 71, 71, 1837, 71, 71, 1829, 1826, 71, 1835, + 1832, 1841, 1833, 1840, 71, 71, 71, 71, 1844, 1845, + 71, 1839, 1843, 71, 71, 71, 71, 1836, 1846, 71, + 1838, 1847, 1848, 71, 1842, 71, 1849, 71, 1852, 1850, + 71, 71, 1855, 1856, 71, 1851, 71, 71, 71, 71, + 71, 1859, 71, 1864, 71, 1853, 71, 1863, 71, 71, + 3041, 1858, 71, 71, 1857, 71, 1854, 1860, 1861, 1868, - 71, 71, 1862, 71, 1875, 1865, 1872, 1873, 71, 71, - 1874, 1864, 1866, 71, 71, 1868, 1869, 71, 1871, 1880, - 71, 1882, 1876, 1881, 71, 1877, 1883, 71, 1884, 1885, - 1878, 71, 71, 71, 71, 71, 1889, 1879, 1887, 71, - 71, 71, 71, 71, 1888, 1891, 71, 1894, 71, 1896, - 71, 1890, 1892, 71, 71, 71, 71, 1886, 1897, 71, - 71, 1900, 1898, 1901, 71, 1902, 1903, 71, 1893, 1906, - 1895, 1904, 71, 1899, 71, 71, 71, 71, 71, 1905, - 1907, 1908, 71, 1909, 71, 1912, 71, 1910, 71, 1911, - 71, 1914, 71, 71, 71, 1918, 71, 71, 1913, 1917, + 71, 1870, 1862, 1866, 71, 1865, 1869, 71, 1867, 1871, + 71, 1872, 1875, 71, 1876, 1873, 71, 71, 71, 71, + 1874, 71, 1882, 1879, 71, 71, 1885, 71, 71, 1884, + 1877, 71, 1886, 71, 71, 71, 1878, 1887, 71, 1880, + 1883, 1881, 71, 1888, 1892, 71, 1889, 1893, 71, 1894, + 1896, 1890, 71, 1897, 1895, 71, 71, 1899, 1891, 71, + 71, 1901, 71, 71, 71, 71, 71, 71, 1898, 1903, + 1906, 1908, 1900, 71, 1902, 1904, 71, 71, 71, 71, + 71, 71, 71, 1913, 71, 1909, 1912, 1924, 1907, 1905, + 1910, 71, 1914, 1915, 71, 1916, 71, 1918, 1911, 71, - 1915, 71, 1919, 71, 1916, 71, 1920, 71, 1921, 1922, - 71, 71, 71, 71, 1924, 1929, 1927, 1923, 1928, 71, - 71, 71, 71, 1931, 71, 1925, 71, 71, 1935, 71, - 1926, 71, 71, 1930, 1932, 1934, 1937, 1939, 1933, 71, - 1936, 1941, 71, 71, 71, 71, 1942, 71, 1947, 71, - 1938, 71, 1940, 71, 71, 71, 1949, 71, 71, 1950, - 1943, 1944, 1945, 1946, 1951, 71, 1952, 71, 1948, 71, - 1955, 71, 71, 1954, 1953, 71, 71, 71, 71, 71, - 1956, 71, 71, 71, 71, 1967, 71, 1958, 1959, 1960, - 1963, 71, 71, 1957, 1962, 1966, 71, 1971, 71, 1970, + 71, 71, 1917, 71, 71, 1919, 1920, 71, 71, 1922, + 1921, 71, 1923, 71, 1926, 71, 71, 1930, 71, 71, + 1925, 1929, 71, 1927, 71, 71, 71, 1928, 1931, 1932, + 1933, 1934, 71, 71, 71, 1936, 71, 71, 71, 1941, + 1939, 71, 1935, 1940, 71, 71, 71, 71, 1946, 71, + 1943, 1937, 71, 1938, 71, 1942, 71, 1950, 71, 1947, + 1945, 1949, 1944, 1951, 71, 71, 71, 1948, 1956, 71, + 1952, 1954, 71, 71, 71, 1957, 71, 1962, 1955, 71, + 71, 71, 1964, 71, 71, 1953, 1965, 1966, 71, 1958, + 1959, 1960, 71, 1961, 71, 71, 71, 1963, 71, 1970, - 1968, 1965, 71, 1964, 1961, 71, 71, 1973, 1974, 71, - 71, 1969, 71, 71, 1976, 71, 71, 1977, 1972, 71, - 71, 1978, 1982, 1975, 1980, 71, 71, 1984, 1981, 1986, - 71, 1979, 71, 71, 71, 1989, 71, 71, 1983, 1988, - 1985, 1990, 1991, 71, 71, 1994, 71, 71, 71, 71, - 71, 71, 1995, 71, 2000, 71, 1997, 71, 1987, 1996, - 2004, 1992, 71, 2001, 1993, 2002, 71, 1999, 1998, 71, - 71, 71, 2006, 71, 2005, 2009, 71, 2003, 71, 2007, - 71, 2011, 71, 2012, 71, 2010, 71, 2008, 71, 71, - 71, 2014, 2018, 2013, 71, 71, 2015, 2016, 2020, 71, + 1967, 1968, 71, 71, 71, 1971, 71, 71, 71, 71, + 71, 1982, 71, 71, 1978, 1969, 1973, 71, 1974, 1975, + 71, 71, 71, 1972, 1977, 1981, 1986, 1979, 71, 1976, + 1980, 1985, 71, 71, 71, 1983, 1989, 1988, 71, 71, + 1984, 71, 1987, 1991, 71, 71, 1992, 71, 71, 71, + 1993, 1990, 71, 71, 1995, 1997, 71, 71, 1999, 1996, + 2001, 71, 1994, 2000, 71, 71, 71, 1998, 2004, 2003, + 2005, 71, 71, 2009, 71, 2007, 2006, 71, 2002, 71, + 71, 71, 2010, 71, 2015, 71, 71, 2011, 2012, 71, + 2016, 71, 2008, 2019, 71, 71, 2021, 2014, 71, 71, - 2017, 71, 71, 2021, 71, 71, 2023, 2024, 2022, 71, - 2019, 71, 71, 71, 2025, 2027, 2026, 2030, 71, 71, - 71, 2028, 2029, 2031, 71, 71, 71, 71, 71, 71, - 2032, 71, 71, 2039, 2034, 2033, 2040, 2036, 2037, 2035, - 71, 2041, 71, 71, 71, 71, 2042, 2038, 2044, 2050, - 71, 71, 2045, 71, 71, 2052, 71, 71, 2046, 2043, - 2049, 2054, 2047, 2051, 71, 71, 71, 144, 2057, 2055, - 2048, 2059, 2053, 2058, 71, 2060, 71, 71, 2056, 2061, - 71, 71, 2064, 71, 71, 2065, 2063, 71, 2062, 2069, - 71, 71, 2070, 71, 71, 2073, 2068, 71, 71, 2066, + 2013, 2017, 71, 2020, 2024, 71, 71, 2025, 71, 2026, + 2022, 2018, 71, 2027, 71, 2028, 71, 71, 2023, 2029, + 71, 71, 2033, 71, 71, 2035, 2031, 71, 71, 2032, + 2036, 71, 2037, 2040, 2030, 71, 2038, 71, 71, 2039, + 2041, 71, 2034, 71, 2045, 71, 71, 71, 71, 71, + 2042, 71, 2044, 71, 71, 71, 71, 71, 2043, 2046, + 2054, 2051, 2049, 2048, 2047, 2052, 2050, 71, 71, 71, + 71, 71, 2055, 71, 2053, 2057, 2059, 2056, 71, 2060, + 2065, 71, 2063, 71, 2067, 71, 2061, 2064, 2058, 71, + 71, 2062, 2066, 71, 2069, 2072, 71, 2074, 2070, 2075, - 71, 71, 2074, 71, 2075, 2071, 2076, 71, 71, 2078, - 2067, 71, 2072, 2077, 71, 71, 2083, 71, 2079, 71, - 2080, 2081, 71, 2082, 71, 71, 2089, 71, 71, 2086, - 71, 71, 71, 71, 2090, 71, 71, 2085, 2092, 71, - 71, 71, 2084, 2087, 2088, 2096, 2091, 2094, 2099, 71, - 71, 71, 2097, 71, 71, 2095, 71, 71, 2093, 2098, - 71, 2100, 71, 71, 71, 2110, 71, 142, 71, 2101, - 2102, 2111, 71, 71, 2107, 71, 2105, 2103, 71, 2109, - 2104, 2106, 71, 2115, 2108, 2112, 71, 2113, 2114, 2116, - 71, 2117, 71, 2118, 71, 2120, 71, 2123, 71, 2119, + 2073, 71, 71, 71, 71, 71, 71, 2076, 2068, 2071, + 2077, 2079, 71, 71, 2080, 71, 2084, 71, 71, 2085, + 71, 2088, 71, 2093, 2083, 71, 2078, 71, 2081, 71, + 2089, 71, 2086, 71, 2090, 2091, 71, 71, 71, 2082, + 2087, 71, 2092, 71, 71, 2094, 71, 2096, 71, 2098, + 71, 2095, 71, 2101, 71, 71, 71, 71, 2107, 71, + 71, 2105, 71, 2097, 2108, 2100, 71, 71, 71, 2099, + 2102, 2103, 2110, 71, 2104, 71, 71, 2109, 2114, 2106, + 2112, 71, 2117, 71, 71, 71, 71, 71, 71, 2115, + 71, 71, 2111, 2118, 2113, 71, 71, 71, 71, 2116, - 71, 71, 71, 71, 71, 2121, 2124, 2125, 2122, 2129, - 71, 2130, 71, 71, 2132, 71, 2128, 71, 2134, 71, - 2126, 71, 71, 2127, 2137, 71, 71, 2136, 2138, 71, - 71, 71, 2131, 71, 71, 2133, 2135, 71, 71, 2140, - 2139, 71, 2143, 2144, 71, 2141, 2146, 71, 71, 71, - 2150, 71, 2142, 2145, 2148, 71, 2147, 71, 2149, 2152, - 71, 71, 2156, 71, 71, 2151, 71, 71, 71, 71, - 2153, 71, 2154, 2160, 2161, 71, 71, 2165, 71, 71, - 2155, 71, 2159, 71, 2157, 71, 2163, 2162, 2167, 2158, - 71, 2164, 71, 71, 2172, 71, 71, 2168, 2174, 2166, + 2128, 71, 71, 2119, 71, 2120, 2127, 2129, 2125, 2123, + 2121, 2130, 2122, 71, 71, 2132, 2124, 71, 2126, 71, + 2133, 2134, 71, 2135, 71, 71, 2138, 2131, 71, 2136, + 2137, 2141, 71, 71, 71, 71, 71, 2139, 2142, 2143, + 2140, 71, 2147, 71, 2148, 71, 71, 2150, 71, 71, + 2152, 71, 71, 2146, 71, 2144, 2145, 2154, 2155, 71, + 2156, 71, 71, 71, 71, 2149, 71, 2151, 71, 2153, + 2162, 71, 2158, 2161, 71, 71, 2157, 71, 2159, 2164, + 71, 2166, 71, 71, 71, 2160, 2167, 71, 2168, 2170, + 71, 71, 71, 2163, 71, 2165, 2174, 71, 71, 2172, - 71, 71, 71, 2169, 2173, 2175, 2179, 71, 2170, 71, - 71, 71, 2178, 71, 2180, 71, 2184, 71, 2171, 71, - 2176, 71, 2177, 2182, 2186, 71, 2187, 2189, 71, 2191, - 71, 71, 2181, 71, 2183, 71, 2192, 71, 2190, 71, - 2188, 2185, 2193, 2195, 71, 71, 71, 2196, 2197, 71, - 71, 2202, 71, 2194, 2198, 2199, 2203, 71, 2200, 71, - 71, 2208, 71, 2204, 2201, 71, 2207, 71, 71, 2206, - 71, 2209, 2205, 71, 71, 71, 2215, 71, 71, 2210, - 71, 71, 71, 2217, 71, 71, 2226, 71, 2211, 2213, - 2212, 2214, 2218, 2216, 2221, 71, 71, 2219, 2222, 2220, + 71, 2171, 71, 2169, 2178, 2179, 71, 71, 71, 71, + 2173, 71, 2175, 2177, 2183, 71, 71, 2176, 2185, 71, + 71, 2180, 2181, 2182, 71, 71, 2190, 71, 71, 2184, + 2186, 71, 71, 2192, 71, 71, 2191, 2187, 2188, 71, + 2196, 71, 2193, 71, 71, 2200, 2197, 71, 2198, 2202, + 2189, 71, 71, 71, 71, 2201, 2204, 2194, 2205, 2195, + 2199, 71, 2207, 2209, 71, 71, 2210, 2206, 71, 71, + 2211, 71, 71, 2203, 71, 2208, 71, 2214, 71, 71, + 71, 2215, 71, 3041, 2213, 2216, 2220, 2217, 2218, 2212, + 2221, 71, 71, 71, 2219, 2222, 71, 71, 71, 2225, - 71, 2223, 71, 2227, 71, 2224, 2228, 71, 71, 2230, - 2231, 2229, 2225, 2232, 2233, 71, 71, 71, 71, 71, - 71, 2235, 71, 71, 71, 2239, 71, 71, 71, 2241, - 2236, 2234, 2240, 2242, 71, 71, 2237, 71, 71, 71, - 2243, 71, 2238, 2246, 2247, 71, 2244, 2245, 71, 71, - 71, 2248, 71, 2249, 71, 71, 2253, 2256, 71, 71, - 2255, 2250, 71, 71, 2252, 2257, 71, 2261, 71, 2251, - 2263, 2260, 71, 71, 2254, 71, 2258, 71, 2259, 2985, - 2262, 71, 2265, 71, 71, 2268, 2266, 71, 2270, 2264, - 71, 2269, 2272, 71, 71, 71, 2274, 71, 71, 71, + 71, 2226, 2223, 71, 2227, 71, 2224, 71, 2233, 71, + 71, 71, 2228, 2229, 71, 2230, 2231, 71, 71, 71, + 2235, 2232, 71, 71, 71, 2234, 2236, 2240, 2241, 71, + 2239, 2244, 71, 2237, 2238, 71, 2245, 2246, 71, 71, + 71, 2243, 2242, 2247, 2248, 2249, 2250, 2251, 71, 71, + 71, 71, 71, 71, 2253, 71, 71, 71, 2257, 2258, + 71, 71, 2254, 2252, 71, 71, 2260, 71, 2261, 2255, + 2262, 2263, 71, 71, 2259, 2256, 71, 71, 2264, 71, + 2268, 71, 71, 2267, 71, 2265, 71, 71, 71, 2270, + 71, 71, 71, 71, 2274, 2269, 71, 2266, 2276, 2277, - 71, 71, 2271, 2267, 2273, 2278, 71, 71, 71, 71, - 2282, 71, 2280, 2276, 2281, 2284, 2275, 2277, 2283, 71, - 71, 71, 71, 2285, 2286, 71, 71, 71, 2291, 71, - 2288, 71, 2279, 71, 71, 2293, 2296, 71, 71, 2290, - 2292, 71, 2287, 71, 71, 2289, 71, 2299, 71, 2295, - 71, 2294, 2300, 71, 71, 2301, 71, 2297, 2305, 71, - 71, 2298, 2302, 2303, 2304, 71, 71, 71, 2310, 71, - 71, 71, 2309, 2395, 2306, 2311, 2312, 71, 2308, 2307, - 2313, 71, 2314, 71, 2315, 71, 71, 2317, 71, 71, - 2319, 71, 2320, 2318, 71, 71, 71, 71, 2316, 2325, + 71, 2286, 2273, 71, 71, 71, 2271, 2272, 71, 2278, + 2279, 2275, 2280, 2281, 2282, 71, 71, 71, 2284, 71, + 71, 2291, 2287, 2283, 71, 2289, 71, 71, 71, 71, + 2288, 2285, 2290, 2293, 71, 71, 2295, 71, 2292, 71, + 71, 71, 71, 71, 2294, 71, 2299, 2296, 2301, 71, + 2302, 2303, 71, 2297, 2304, 71, 2298, 2305, 71, 2306, + 71, 71, 71, 71, 71, 2307, 2309, 2314, 2300, 2312, + 71, 71, 71, 71, 71, 71, 2311, 2317, 71, 71, + 2313, 2310, 2308, 71, 2320, 2321, 71, 71, 71, 2316, + 2315, 71, 2322, 71, 2318, 71, 71, 2319, 2325, 71, - 71, 71, 2327, 71, 2328, 71, 2321, 2322, 71, 71, - 71, 71, 71, 2324, 71, 71, 2323, 2331, 71, 2329, - 2326, 2330, 71, 2332, 2337, 71, 71, 2334, 71, 71, - 71, 71, 2333, 71, 2335, 2336, 71, 2338, 71, 2344, - 71, 71, 2341, 71, 2339, 2343, 2340, 71, 2346, 2345, - 71, 2347, 71, 2351, 2342, 71, 71, 2355, 71, 2348, - 2353, 2354, 2356, 71, 71, 2349, 2352, 71, 2357, 71, - 2350, 71, 2358, 71, 2359, 71, 71, 71, 71, 71, - 2361, 71, 2360, 71, 71, 71, 2370, 2371, 71, 71, - 2367, 71, 71, 2985, 2362, 2364, 2363, 2374, 71, 2366, + 2324, 2326, 71, 71, 71, 3041, 2323, 71, 2330, 2327, + 2328, 71, 2332, 71, 2329, 2333, 71, 2334, 71, 2335, + 71, 2336, 71, 2337, 2331, 71, 71, 2340, 71, 2341, + 2339, 2338, 71, 71, 71, 71, 2346, 71, 71, 2348, + 71, 2349, 71, 71, 2342, 2343, 71, 71, 71, 71, + 71, 2345, 71, 2352, 2344, 2351, 71, 2347, 2350, 71, + 2353, 2355, 2358, 71, 71, 71, 71, 71, 2359, 2354, + 2356, 71, 2357, 71, 71, 2365, 71, 71, 71, 2362, + 2366, 71, 71, 71, 71, 2361, 2372, 2364, 2376, 71, + 2360, 2363, 2367, 2368, 2369, 71, 71, 71, 2373, 71, - 2365, 2373, 2369, 2368, 71, 2376, 71, 71, 71, 2377, - 71, 2372, 71, 2375, 71, 2379, 71, 71, 2385, 71, - 2386, 71, 71, 2387, 71, 2378, 71, 2380, 2381, 71, - 71, 71, 2382, 2383, 71, 2384, 2391, 71, 71, 2389, - 2388, 71, 2394, 2396, 71, 2390, 71, 71, 2397, 71, - 2392, 2398, 71, 71, 2393, 71, 2400, 2399, 71, 71, - 2401, 2402, 71, 2404, 71, 2409, 71, 2408, 71, 71, - 2412, 71, 71, 2403, 71, 2405, 2413, 71, 2406, 2416, - 71, 2415, 2407, 2410, 71, 71, 71, 2411, 71, 2414, - 2420, 71, 71, 71, 71, 2424, 71, 2417, 2423, 71, + 2374, 2375, 71, 2370, 71, 2371, 2377, 71, 71, 2378, + 71, 2379, 71, 2380, 71, 2381, 71, 71, 2383, 71, + 71, 71, 2384, 2390, 71, 2382, 2386, 71, 2388, 71, + 71, 2394, 2395, 71, 2385, 71, 71, 2387, 71, 71, + 2389, 2398, 71, 71, 2391, 2392, 71, 2393, 2397, 2400, + 71, 71, 2399, 2403, 2401, 71, 2402, 2396, 71, 71, + 71, 2409, 71, 2410, 71, 2411, 2404, 71, 71, 71, + 71, 71, 71, 2405, 71, 2407, 2406, 2415, 71, 2408, + 2419, 71, 71, 2413, 2421, 2412, 2418, 71, 2414, 71, + 2416, 2420, 71, 71, 2417, 2422, 71, 71, 2424, 71, - 2421, 2422, 2426, 71, 2427, 2418, 2419, 71, 71, 71, - 2431, 71, 2425, 71, 2432, 71, 2428, 2434, 71, 71, - 71, 2430, 71, 71, 2429, 71, 2439, 71, 2441, 71, - 71, 2437, 2435, 2436, 2438, 2442, 71, 2433, 2440, 71, - 71, 2443, 71, 71, 71, 2445, 71, 71, 71, 71, - 2446, 71, 2449, 2444, 2451, 2448, 2452, 71, 2454, 71, - 2455, 71, 2447, 2450, 71, 71, 71, 71, 2460, 2680, - 2457, 2456, 2453, 71, 71, 71, 2462, 71, 2461, 2465, - 71, 71, 2466, 71, 2458, 2459, 2464, 71, 2468, 71, - 71, 2470, 2463, 2469, 71, 2474, 2471, 71, 71, 2472, + 71, 71, 71, 71, 71, 2428, 2423, 71, 71, 2426, + 2432, 3041, 2425, 2433, 71, 2436, 71, 2434, 71, 2427, + 71, 2429, 2430, 71, 2431, 71, 2435, 2437, 71, 2439, + 2440, 71, 71, 2438, 2444, 71, 71, 71, 71, 71, + 2442, 2441, 2447, 2448, 71, 71, 2446, 71, 2445, 2450, + 71, 71, 2443, 71, 2452, 71, 2451, 71, 2449, 2455, + 71, 71, 2456, 2453, 71, 2454, 2458, 71, 71, 71, + 2459, 2463, 71, 2461, 71, 2465, 71, 2457, 2462, 71, + 71, 2460, 71, 71, 2466, 2467, 71, 71, 2469, 2464, + 71, 71, 71, 71, 2470, 71, 2468, 71, 71, 2472, - 2467, 71, 71, 2473, 71, 71, 2475, 71, 71, 2476, - 71, 71, 71, 71, 2477, 2480, 2479, 2482, 71, 71, - 71, 2483, 2478, 2481, 2485, 2484, 71, 71, 71, 71, - 71, 2486, 71, 2491, 71, 71, 71, 2489, 2487, 2490, - 2488, 71, 71, 2492, 2496, 71, 71, 71, 2493, 2500, - 71, 2499, 71, 71, 71, 2494, 2498, 71, 2504, 2985, - 2495, 2497, 2505, 71, 2507, 2501, 2508, 2502, 2509, 71, - 71, 71, 71, 2503, 71, 2510, 71, 2511, 71, 71, - 2513, 71, 2506, 2512, 71, 2515, 71, 71, 2518, 2519, - 71, 71, 2514, 2520, 71, 2521, 71, 71, 2516, 71, + 2473, 71, 2475, 2476, 2478, 71, 2471, 71, 2474, 2482, + 2477, 2479, 71, 71, 2480, 2484, 71, 71, 2481, 2483, + 71, 71, 2485, 71, 2486, 2488, 2489, 71, 2490, 71, + 71, 2487, 2492, 71, 71, 2494, 71, 2493, 71, 71, + 2495, 71, 71, 2491, 2496, 2498, 71, 2497, 71, 71, + 2499, 71, 71, 2500, 71, 2505, 2514, 2504, 2501, 2506, + 71, 71, 2503, 71, 71, 71, 71, 2502, 2507, 2509, + 71, 71, 2508, 2510, 71, 71, 2512, 71, 2511, 2513, + 71, 71, 2518, 71, 71, 71, 2516, 71, 2515, 2517, + 2523, 71, 2519, 71, 71, 71, 2527, 71, 71, 71, - 71, 2517, 2523, 2522, 2524, 71, 71, 71, 2528, 71, - 2531, 2525, 2526, 2529, 71, 2532, 71, 71, 2527, 71, - 2530, 2533, 71, 71, 71, 71, 2534, 2538, 71, 71, - 2535, 71, 2539, 2540, 71, 2542, 71, 2536, 71, 71, - 2541, 2546, 2543, 71, 2537, 2547, 71, 71, 71, 2549, - 71, 71, 2548, 2545, 2550, 71, 2544, 71, 2555, 71, - 71, 71, 71, 2554, 71, 2557, 2551, 2558, 71, 71, - 2552, 2553, 71, 71, 2559, 71, 2561, 71, 2563, 71, - 2560, 71, 2568, 71, 2556, 2562, 2566, 71, 2570, 71, - 71, 71, 2576, 71, 2564, 2565, 71, 2567, 2572, 2573, + 71, 2532, 71, 2520, 2525, 2521, 2522, 71, 71, 2526, + 2534, 2531, 2524, 2535, 2529, 2536, 71, 2528, 71, 71, + 2530, 71, 2537, 71, 71, 71, 2538, 71, 71, 2539, + 71, 71, 2542, 2533, 2540, 71, 2545, 2546, 71, 71, + 2541, 2547, 71, 2549, 2543, 71, 2544, 2548, 71, 71, + 2550, 2551, 71, 71, 71, 2555, 71, 71, 2553, 71, + 2556, 71, 71, 2558, 2559, 71, 2554, 2560, 71, 2552, + 71, 71, 2562, 2561, 71, 2563, 2557, 2565, 71, 71, + 2566, 2567, 71, 2569, 71, 71, 71, 71, 2573, 2568, + 71, 2564, 2574, 71, 71, 71, 71, 2576, 2570, 2575, - 71, 2569, 2571, 71, 2574, 71, 71, 2577, 71, 2578, - 2575, 71, 2579, 71, 2580, 71, 2581, 71, 71, 71, - 2582, 2985, 2584, 2583, 2588, 71, 2585, 71, 71, 71, - 2589, 2591, 71, 2593, 71, 71, 2592, 71, 2586, 2587, - 2594, 2595, 71, 71, 71, 71, 2590, 2600, 71, 71, - 71, 71, 2596, 2597, 2598, 2599, 71, 2604, 2602, 71, - 2601, 71, 2605, 71, 2606, 2603, 2608, 71, 2607, 2609, - 71, 2610, 71, 71, 71, 71, 71, 71, 71, 71, - 2619, 2611, 71, 71, 2614, 71, 71, 2617, 2615, 2636, - 2622, 71, 2613, 2985, 2620, 71, 2623, 71, 2612, 2618, + 71, 2572, 2577, 71, 2571, 71, 2582, 71, 2585, 71, + 71, 2581, 71, 2578, 2584, 71, 2579, 71, 71, 71, + 2580, 2588, 2586, 2587, 71, 71, 71, 2590, 71, 71, + 3041, 2593, 2583, 71, 2597, 71, 71, 71, 71, 71, + 2599, 71, 2591, 2592, 2589, 71, 2594, 2596, 2600, 2595, + 2598, 2604, 2601, 2603, 2607, 71, 2605, 71, 2602, 71, + 2606, 71, 2608, 71, 2609, 71, 2610, 71, 2611, 71, + 71, 71, 71, 71, 2613, 2612, 71, 2619, 71, 71, + 71, 2616, 2620, 2622, 71, 71, 2624, 71, 71, 71, + 2614, 3041, 2623, 2617, 2625, 71, 2618, 2615, 2621, 2626, - 71, 2624, 2616, 71, 2621, 71, 2625, 71, 2626, 71, - 2627, 2629, 71, 2628, 2630, 71, 2631, 71, 71, 71, - 2639, 71, 71, 71, 2635, 2633, 2634, 2632, 2637, 71, - 71, 71, 71, 2644, 2638, 71, 2642, 2646, 71, 71, - 2640, 71, 71, 71, 2650, 71, 71, 71, 71, 71, - 2643, 2641, 2653, 71, 71, 71, 2648, 71, 71, 2651, - 2645, 2647, 2652, 2649, 2654, 2657, 2656, 71, 71, 2655, - 2660, 71, 2658, 2662, 71, 2663, 71, 2661, 2665, 71, - 2659, 71, 71, 71, 71, 71, 2670, 71, 71, 2664, - 2669, 71, 71, 2674, 71, 2676, 71, 2666, 2667, 2668, + 71, 71, 71, 71, 2627, 71, 2630, 2631, 71, 2632, + 2628, 2629, 2633, 71, 2635, 71, 71, 71, 71, 2636, + 71, 71, 2639, 71, 2638, 2640, 71, 71, 2634, 2637, + 2641, 71, 2642, 71, 71, 71, 2645, 71, 71, 71, + 3041, 2644, 2650, 71, 2648, 2646, 2643, 71, 71, 71, + 2651, 2692, 2653, 71, 2654, 71, 2655, 2649, 71, 2647, + 2652, 71, 2656, 2657, 71, 2658, 2660, 71, 2659, 2661, + 71, 2662, 71, 71, 71, 71, 71, 2667, 71, 71, + 2666, 2664, 2663, 71, 2668, 71, 2670, 71, 71, 2675, + 2669, 71, 71, 2665, 2671, 71, 2673, 2677, 71, 2672, - 71, 2678, 2681, 71, 2671, 2682, 71, 71, 2675, 71, - 2673, 2672, 71, 71, 2679, 2684, 71, 71, 71, 2689, - 2677, 71, 71, 71, 2686, 71, 2687, 2693, 71, 71, - 71, 71, 2683, 2694, 2691, 2685, 71, 2695, 2688, 2698, - 2690, 2696, 2701, 2692, 71, 71, 2699, 71, 71, 71, - 71, 2697, 2700, 71, 71, 2703, 71, 2706, 2704, 71, - 2709, 71, 2702, 71, 2710, 71, 2713, 71, 71, 71, - 2714, 71, 71, 2705, 71, 2711, 2707, 2708, 2712, 2715, - 71, 71, 2716, 2718, 71, 2717, 2719, 71, 2720, 71, - 71, 2722, 71, 71, 2724, 2721, 71, 71, 2727, 71, + 71, 71, 71, 71, 2678, 71, 2674, 2679, 2680, 71, + 2681, 71, 2685, 71, 71, 71, 71, 2676, 71, 71, + 2682, 71, 2688, 71, 71, 2684, 2683, 2686, 2687, 2693, + 2689, 71, 2690, 2695, 71, 2697, 71, 71, 2691, 2698, + 71, 2700, 71, 71, 71, 71, 71, 2705, 71, 2694, + 2696, 2704, 71, 71, 71, 71, 2709, 71, 2699, 2701, + 2702, 2703, 2711, 71, 71, 71, 71, 71, 2713, 71, + 2714, 2710, 2706, 2708, 71, 71, 2707, 2716, 71, 2717, + 71, 2719, 71, 71, 2712, 2724, 2721, 2718, 2715, 2723, + 71, 71, 2722, 71, 71, 2728, 71, 71, 71, 2730, - 2723, 2728, 71, 71, 2733, 71, 2732, 71, 71, 71, - 71, 71, 71, 2729, 2731, 2725, 2783, 2736, 2726, 2737, - 71, 2738, 71, 2730, 71, 71, 2741, 71, 2734, 2739, - 2735, 71, 71, 2744, 71, 2743, 71, 71, 71, 2740, - 71, 2745, 71, 2742, 71, 2748, 71, 71, 71, 71, - 2750, 71, 71, 2985, 2749, 2751, 71, 2746, 2747, 71, - 71, 71, 71, 71, 2765, 2752, 2760, 2756, 2753, 2754, - 2755, 2763, 71, 2757, 2758, 71, 2762, 2764, 71, 2774, - 2759, 71, 2761, 2766, 71, 2767, 71, 2768, 2769, 71, - 71, 2770, 2771, 71, 71, 2772, 2773, 71, 71, 2775, + 2729, 2720, 71, 71, 2733, 2726, 2734, 71, 71, 2725, + 71, 2735, 2736, 71, 2727, 2731, 71, 71, 71, 71, + 2741, 2738, 2732, 71, 2739, 71, 71, 2744, 71, 71, + 71, 2737, 71, 2749, 71, 71, 2740, 2745, 71, 71, + 2742, 2743, 2752, 71, 3041, 2748, 71, 2746, 2751, 2753, + 71, 2754, 2755, 71, 2750, 2747, 2757, 71, 2756, 2758, + 71, 2759, 71, 71, 2761, 71, 71, 71, 2760, 71, + 71, 71, 2766, 2767, 71, 71, 71, 71, 2771, 71, + 71, 2772, 71, 71, 3041, 2762, 2770, 71, 2775, 2763, + 2768, 2764, 2765, 2776, 71, 2769, 2777, 71, 71, 71, - 71, 2778, 71, 71, 2781, 71, 71, 2776, 2780, 71, - 2784, 2777, 71, 2779, 71, 71, 71, 2789, 2785, 2790, - 71, 2791, 71, 71, 2788, 71, 71, 2782, 71, 2786, - 2787, 2793, 71, 2798, 2794, 2796, 71, 2795, 2792, 71, - 2797, 71, 71, 71, 71, 2805, 71, 2800, 2802, 2803, - 71, 2807, 71, 2799, 71, 2806, 2854, 2801, 2808, 71, - 71, 2804, 2809, 71, 2810, 71, 2811, 71, 2812, 71, - 2813, 71, 2814, 71, 71, 2816, 71, 71, 71, 71, - 2819, 2821, 71, 2815, 71, 71, 2817, 71, 71, 2825, - 2818, 71, 2827, 71, 71, 71, 71, 2824, 2820, 2822, + 2773, 2774, 2780, 2778, 71, 71, 71, 71, 71, 2783, + 71, 71, 2784, 2779, 2782, 71, 2781, 71, 71, 71, + 2787, 71, 71, 71, 2789, 2785, 71, 2790, 71, 2788, + 71, 2786, 71, 71, 71, 71, 71, 2806, 71, 2799, + 2791, 2800, 2792, 2793, 2794, 2802, 2795, 71, 2801, 2796, + 2797, 71, 2803, 71, 2798, 2804, 2807, 71, 71, 2809, + 71, 71, 2808, 2810, 71, 2817, 2805, 2811, 2812, 71, + 71, 2813, 2814, 71, 71, 2815, 2816, 71, 71, 2818, + 71, 71, 71, 71, 2824, 71, 71, 2819, 2823, 71, + 2827, 2820, 2841, 2821, 71, 71, 2826, 71, 71, 71, - 2823, 71, 71, 2831, 2829, 71, 2826, 2834, 2833, 71, - 71, 71, 2828, 71, 2832, 2836, 71, 71, 71, 71, - 71, 2830, 2841, 2835, 2843, 71, 2844, 71, 2845, 71, - 2837, 2842, 71, 2839, 2838, 2840, 71, 71, 71, 71, - 71, 2848, 71, 71, 71, 2847, 71, 2853, 71, 2856, - 71, 71, 71, 2850, 2852, 2846, 71, 71, 2849, 2855, - 71, 71, 71, 2851, 2857, 2858, 71, 2865, 2859, 71, - 2868, 71, 2860, 71, 71, 2862, 71, 2861, 2863, 71, - 2866, 2864, 2869, 2870, 71, 71, 2871, 2872, 71, 2867, - 2873, 71, 71, 2874, 71, 2876, 2875, 71, 71, 2877, + 71, 2822, 71, 2828, 71, 2832, 71, 2825, 2831, 2862, + 2829, 2833, 71, 2834, 71, 2830, 71, 2835, 71, 2839, + 71, 2836, 71, 71, 2840, 71, 71, 2837, 2845, 71, + 2838, 2842, 2848, 71, 2846, 2843, 2849, 71, 71, 2851, + 71, 2897, 71, 2844, 2850, 2847, 2852, 71, 71, 2854, + 71, 2855, 71, 2853, 2856, 71, 2857, 71, 2858, 71, + 2859, 71, 2860, 71, 2861, 71, 2863, 71, 71, 71, + 71, 71, 71, 2868, 71, 71, 71, 2864, 71, 2872, + 71, 2865, 71, 2874, 71, 71, 2869, 71, 2870, 2881, + 2866, 2867, 2871, 71, 2875, 71, 2876, 2873, 71, 2878, - 2881, 71, 2878, 71, 2879, 71, 71, 2884, 71, 71, - 2887, 71, 71, 2880, 71, 2882, 2890, 71, 71, 2891, - 2885, 71, 71, 2883, 2894, 2895, 71, 2888, 2886, 2892, - 71, 71, 2889, 71, 71, 2899, 71, 71, 71, 71, - 2896, 2893, 71, 71, 71, 71, 2897, 2903, 71, 2905, - 71, 71, 2902, 2898, 71, 71, 2985, 71, 2900, 2901, - 2910, 2907, 2904, 2908, 2906, 71, 71, 2915, 71, 71, - 2909, 2911, 71, 2917, 2912, 2913, 2985, 2916, 71, 71, - 71, 2918, 71, 2919, 2914, 71, 2923, 2920, 2922, 71, - 2921, 71, 71, 2924, 71, 71, 2925, 2926, 71, 2927, + 71, 71, 71, 2880, 71, 2879, 71, 2883, 71, 71, + 71, 2877, 71, 71, 2887, 2882, 2890, 71, 71, 2888, + 2892, 71, 71, 2884, 2885, 2886, 71, 2889, 2893, 71, + 2891, 2894, 71, 71, 71, 2896, 71, 71, 71, 71, + 2905, 2895, 2898, 2902, 71, 71, 2903, 2899, 2901, 71, + 71, 2904, 71, 71, 71, 71, 71, 2900, 2906, 71, + 71, 71, 71, 71, 2912, 71, 2909, 2916, 2907, 2911, + 2908, 2913, 2919, 71, 2920, 2917, 71, 2914, 2910, 71, + 2915, 2921, 71, 2918, 71, 2922, 2923, 71, 2924, 71, + 71, 71, 71, 2927, 71, 2925, 2928, 2929, 71, 2926, - 71, 71, 71, 2932, 71, 71, 71, 2929, 2928, 71, - 71, 2935, 2936, 71, 71, 71, 71, 71, 2934, 2939, - 2930, 2931, 71, 2933, 2937, 2940, 71, 2938, 71, 2943, - 2942, 2944, 71, 71, 2947, 2941, 71, 71, 2949, 71, - 2950, 71, 71, 71, 71, 2945, 2951, 71, 2946, 2952, - 2954, 71, 2955, 71, 71, 2948, 2956, 2957, 71, 71, - 2958, 71, 2953, 2960, 71, 71, 2959, 2963, 71, 2961, - 71, 71, 71, 71, 71, 2965, 2966, 71, 2969, 71, - 2962, 2970, 71, 71, 2964, 71, 2973, 2974, 71, 71, - 2975, 2967, 2968, 2971, 2976, 71, 2977, 71, 2972, 71, + 2932, 71, 71, 71, 71, 71, 71, 71, 2935, 2937, + 71, 2940, 71, 2931, 2934, 2933, 71, 71, 71, 2930, + 2938, 2943, 71, 2947, 2936, 71, 2939, 71, 2944, 71, + 2948, 2941, 71, 2945, 71, 2942, 71, 2946, 71, 71, + 2953, 71, 2954, 71, 2952, 71, 2949, 2950, 71, 71, + 71, 71, 71, 71, 2958, 71, 71, 2951, 2960, 71, + 2967, 71, 71, 2957, 71, 2962, 2955, 2965, 2956, 2963, + 71, 2959, 71, 71, 2961, 2966, 2971, 71, 2964, 71, + 71, 2973, 71, 2974, 2968, 2972, 71, 71, 71, 71, + 2969, 2975, 2970, 2976, 2977, 2979, 2980, 71, 2978, 71, - 71, 71, 71, 2983, 71, 2979, 2978, 2980, 2981, 2984, - 71, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2982, 43, 43, 43, 43, 43, 43, 43, 48, 48, - 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, - 53, 53, 59, 59, 59, 59, 59, 59, 59, 64, - 64, 64, 64, 64, 64, 64, 74, 74, 2985, 74, - 74, 74, 74, 141, 141, 2985, 2985, 2985, 141, 141, - 143, 143, 2985, 2985, 143, 2985, 143, 145, 2985, 2985, - 2985, 2985, 2985, 145, 148, 148, 2985, 2985, 2985, 148, - 148, 150, 2985, 2985, 2985, 2985, 2985, 150, 152, 152, + 71, 71, 2982, 71, 2981, 71, 71, 71, 71, 2983, + 2988, 71, 71, 2985, 71, 2991, 71, 2992, 71, 2984, + 71, 71, 71, 71, 71, 2990, 2986, 2987, 2995, 2993, + 2989, 71, 2994, 71, 2999, 71, 3000, 2998, 71, 71, + 2996, 2997, 71, 3003, 71, 3005, 71, 3006, 3001, 71, + 71, 71, 3010, 71, 3007, 71, 71, 3008, 3004, 71, + 3011, 3012, 3013, 71, 3002, 71, 71, 71, 71, 71, + 3009, 71, 3014, 3015, 3017, 3016, 3019, 71, 71, 71, + 71, 71, 3025, 3021, 3022, 71, 3018, 3020, 3026, 71, + 3023, 71, 71, 3029, 3030, 71, 71, 3032, 71, 3024, - 2985, 152, 152, 152, 152, 75, 75, 2985, 75, 75, - 75, 75, 13, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985 + 3033, 71, 71, 3031, 3027, 71, 71, 71, 71, 3034, + 3028, 3035, 3036, 3039, 71, 3040, 71, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3037, 3041, 3041, 3038, 43, 43, + 43, 43, 43, 43, 43, 48, 48, 48, 48, 48, + 48, 48, 53, 53, 53, 53, 53, 53, 53, 59, + 59, 59, 59, 59, 59, 59, 64, 64, 64, 64, + 64, 64, 64, 74, 74, 3041, 74, 74, 74, 74, + 141, 141, 3041, 3041, 3041, 141, 141, 143, 143, 3041, + 3041, 143, 3041, 143, 145, 3041, 3041, 3041, 3041, 3041, + 145, 148, 148, 3041, 3041, 3041, 148, 148, 150, 3041, + + 3041, 3041, 3041, 3041, 150, 152, 152, 3041, 152, 152, + 152, 152, 75, 75, 3041, 75, 75, 75, 75, 13, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041 } ; -static const flex_int16_t yy_chk[5854] = +static const flex_int16_t yy_chk[5961] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2061,13 +2091,13 @@ static const flex_int16_t yy_chk[5854] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 2991, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3047, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 999, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 1000, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, @@ -2220,483 +2250,494 @@ static const flex_int16_t yy_chk[5854] = 665, 668, 669, 666, 660, 661, 664, 670, 669, 671, 672, 662, 673, 671, 674, 675, 676, 678, 677, 679, - 668, 675, 672, 680, 676, 677, 714, 670, 714, 681, - 683, 689, 674, 686, 681, 678, 690, 673, 681, 691, - 689, 681, 690, 680, 679, 683, 693, 693, 681, 692, - 686, 681, 696, 692, 697, 691, 694, 694, 698, 699, - 704, 701, 709, 702, 703, 699, 701, 717, 697, 705, - 696, 717, 705, 706, 706, 708, 708, 709, 698, 700, - 700, 700, 703, 700, 702, 704, 700, 707, 710, 710, - 711, 700, 716, 712, 707, 711, 712, 700, 700, 713, + 668, 675, 672, 680, 676, 677, 683, 670, 690, 686, + 689, 691, 674, 698, 690, 678, 692, 673, 696, 689, + 692, 683, 70, 680, 679, 681, 686, 691, 693, 693, + 681, 694, 694, 698, 681, 697, 696, 681, 701, 702, + 699, 703, 704, 701, 681, 681, 699, 681, 707, 697, + 700, 700, 700, 705, 700, 707, 705, 700, 709, 703, + 702, 64, 700, 706, 706, 708, 708, 704, 700, 700, + 710, 710, 711, 709, 713, 712, 715, 711, 712, 713, - 715, 718, 720, 719, 713, 721, 721, 725, 722, 727, - 720, 716, 715, 723, 724, 724, 726, 749, 728, 730, - 730, 718, 719, 722, 728, 725, 749, 723, 726, 729, - 731, 727, 733, 734, 729, 731, 731, 733, 735, 734, - 736, 737, 739, 738, 735, 736, 738, 737, 739, 740, - 741, 741, 742, 742, 743, 744, 745, 740, 746, 747, - 750, 745, 743, 748, 748, 746, 751, 752, 750, 756, - 754, 755, 751, 744, 756, 757, 759, 760, 747, 754, - 755, 759, 758, 761, 757, 758, 752, 762, 763, 764, - 766, 760, 765, 765, 764, 764, 762, 767, 768, 769, + 714, 716, 714, 717, 718, 720, 719, 717, 715, 721, + 721, 722, 725, 720, 723, 724, 724, 726, 727, 760, + 716, 728, 730, 730, 718, 719, 722, 728, 723, 726, + 725, 729, 731, 760, 733, 734, 729, 731, 731, 733, + 727, 734, 735, 738, 736, 737, 738, 739, 735, 736, + 740, 737, 743, 739, 741, 741, 742, 742, 740, 744, + 743, 745, 746, 747, 748, 748, 745, 749, 751, 746, + 750, 752, 754, 761, 751, 755, 749, 744, 750, 757, + 756, 754, 747, 758, 755, 756, 758, 759, 757, 763, + 752, 762, 759, 765, 765, 766, 767, 768, 761, 764, - 770, 763, 772, 770, 772, 766, 774, 768, 761, 773, - 773, 770, 775, 776, 779, 777, 767, 775, 778, 780, - 781, 782, 783, 769, 784, 786, 783, 774, 785, 781, - 789, 786, 787, 788, 776, 777, 779, 790, 778, 780, - 791, 787, 784, 792, 782, 788, 791, 785, 793, 789, - 795, 790, 796, 793, 794, 794, 797, 792, 798, 799, - 800, 796, 801, 802, 804, 803, 798, 805, 806, 807, - 795, 803, 810, 805, 808, 807, 797, 813, 804, 799, - 808, 801, 800, 802, 811, 809, 818, 812, 806, 809, - 817, 810, 812, 814, 814, 815, 811, 816, 813, 818, + 762, 769, 763, 774, 764, 764, 768, 772, 770, 772, + 766, 770, 773, 773, 776, 767, 775, 777, 778, 770, + 779, 775, 781, 780, 774, 769, 782, 784, 783, 785, + 786, 781, 783, 789, 788, 776, 786, 777, 778, 790, + 792, 787, 779, 780, 795, 784, 788, 796, 785, 782, + 787, 791, 789, 790, 792, 793, 796, 791, 794, 794, + 793, 797, 798, 799, 795, 800, 801, 803, 802, 805, + 798, 806, 804, 803, 807, 805, 808, 810, 811, 812, + 807, 797, 808, 799, 812, 801, 804, 800, 802, 809, + 811, 806, 813, 809, 814, 814, 810, 815, 811, 816, - 816, 815, 820, 819, 811, 821, 821, 822, 817, 819, - 823, 824, 824, 825, 826, 823, 827, 827, 826, 828, - 829, 830, 820, 831, 833, 822, 830, 836, 825, 834, - 837, 839, 839, 840, 841, 842, 842, 840, 845, 843, - 829, 828, 831, 834, 846, 70, 844, 836, 833, 841, - 844, 837, 838, 845, 847, 838, 848, 838, 846, 847, - 849, 838, 850, 838, 843, 849, 849, 851, 838, 852, - 848, 851, 853, 838, 854, 855, 850, 853, 856, 854, - 857, 865, 858, 864, 852, 859, 860, 853, 858, 855, - 866, 859, 860, 862, 857, 861, 861, 863, 862, 856, + 817, 818, 816, 815, 819, 820, 821, 821, 822, 825, + 819, 823, 828, 813, 818, 829, 823, 826, 817, 824, + 824, 826, 827, 827, 825, 820, 822, 830, 831, 833, + 834, 836, 830, 837, 828, 829, 839, 839, 840, 842, + 842, 841, 840, 843, 834, 844, 845, 831, 846, 844, + 852, 836, 847, 833, 837, 838, 841, 847, 838, 848, + 838, 845, 846, 850, 838, 852, 838, 854, 843, 849, + 856, 838, 857, 848, 849, 849, 838, 850, 851, 854, + 853, 855, 851, 858, 856, 853, 855, 862, 862, 865, + 859, 866, 860, 857, 851, 853, 859, 858, 860, 861, - 865, 868, 869, 863, 870, 864, 873, 869, 866, 867, - 867, 873, 871, 868, 874, 867, 875, 867, 870, 872, - 872, 876, 874, 867, 871, 877, 878, 878, 867, 867, - 875, 881, 879, 883, 884, 867, 879, 881, 882, 885, - 876, 882, 887, 886, 877, 885, 888, 884, 886, 889, - 890, 891, 883, 892, 893, 888, 895, 891, 889, 894, - 896, 887, 892, 897, 894, 898, 890, 902, 907, 899, - 900, 905, 908, 893, 896, 901, 895, 898, 899, 900, - 903, 901, 907, 897, 902, 909, 903, 905, 910, 911, - 912, 913, 908, 914, 917, 921, 913, 918, 914, 917, + 867, 863, 864, 869, 870, 861, 863, 871, 864, 870, + 866, 865, 872, 873, 873, 869, 876, 874, 867, 868, + 868, 871, 874, 875, 872, 868, 59, 868, 877, 878, + 876, 875, 880, 868, 879, 879, 880, 882, 868, 868, + 884, 883, 885, 882, 883, 868, 886, 877, 878, 887, + 888, 889, 886, 890, 887, 885, 891, 892, 893, 884, + 889, 894, 890, 892, 896, 895, 898, 893, 897, 888, + 895, 899, 891, 902, 903, 904, 900, 906, 901, 902, + 894, 904, 897, 899, 896, 900, 898, 901, 908, 909, + 911, 903, 910, 906, 912, 913, 914, 919, 915, 924, - 919, 919, 910, 920, 909, 912, 918, 911, 921, 920, - 923, 924, 928, 927, 925, 925, 924, 924, 925, 926, - 929, 930, 926, 932, 931, 933, 923, 927, 935, 932, - 934, 940, 928, 937, 930, 936, 934, 941, 929, 931, - 936, 939, 941, 935, 939, 933, 942, 937, 943, 944, - 945, 942, 940, 946, 944, 945, 948, 949, 952, 952, - 950, 951, 948, 953, 943, 946, 950, 951, 954, 956, - 956, 955, 953, 949, 955, 957, 958, 959, 960, 961, - 964, 960, 962, 963, 967, 964, 954, 969, 962, 963, - 967, 965, 961, 957, 966, 958, 965, 959, 970, 966, + 918, 914, 908, 915, 911, 918, 919, 920, 920, 909, + 913, 910, 912, 921, 922, 924, 925, 927, 928, 921, + 927, 925, 925, 929, 926, 926, 930, 922, 926, 931, + 932, 933, 928, 934, 935, 936, 937, 933, 938, 941, + 935, 937, 931, 929, 930, 932, 940, 944, 54, 940, + 936, 942, 938, 934, 943, 947, 942, 945, 949, 943, + 941, 946, 945, 944, 949, 950, 946, 947, 951, 952, + 953, 953, 955, 954, 951, 952, 956, 957, 957, 956, + 958, 950, 954, 959, 960, 961, 962, 963, 961, 964, + 955, 965, 966, 963, 970, 964, 965, 966, 958, 962, - 971, 974, 972, 973, 973, 969, 971, 972, 975, 976, - 974, 977, 978, 979, 977, 978, 980, 975, 970, 981, - 982, 985, 983, 984, 979, 986, 988, 976, 983, 984, - 986, 981, 987, 987, 980, 989, 985, 991, 990, 982, - 992, 991, 993, 994, 995, 988, 997, 998, 998, 989, - 990, 993, 1000, 1001, 1003, 1002, 1005, 1005, 992, 1003, - 1006, 1004, 994, 1021, 1021, 997, 1000, 1002, 1001, 995, - 1004, 1007, 1008, 1010, 1009, 1010, 1011, 1007, 1008, 1009, - 1006, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1014, - 1019, 64, 1022, 1023, 1017, 1024, 1012, 1013, 1025, 1026, + 967, 968, 959, 971, 960, 967, 973, 968, 972, 974, + 974, 973, 970, 975, 972, 976, 977, 978, 979, 980, + 978, 979, 975, 971, 976, 981, 982, 983, 987, 984, + 980, 985, 986, 987, 977, 984, 989, 985, 982, 988, + 988, 991, 990, 981, 992, 993, 983, 986, 992, 994, + 995, 996, 998, 991, 1001, 989, 990, 1002, 994, 999, + 999, 1003, 1004, 993, 1007, 1005, 1013, 1004, 1001, 995, + 53, 998, 1002, 1003, 1005, 1008, 996, 1006, 1006, 1009, + 1013, 1008, 1010, 1014, 1007, 1009, 1011, 1010, 1011, 1012, + 1015, 1016, 1017, 1018, 1012, 1015, 1020, 1014, 1019, 1025, - 1015, 1031, 1027, 1018, 1025, 1016, 1022, 1027, 1031, 1019, - 1024, 1023, 1029, 1029, 1032, 1030, 1027, 1034, 1027, 1026, - 1030, 1027, 1033, 1035, 1036, 1033, 1037, 1039, 1032, 1036, - 1040, 1038, 1035, 1042, 1042, 1034, 1038, 1043, 1039, 1044, - 1045, 1046, 1043, 1047, 1044, 1037, 1046, 1047, 1048, 1040, - 1049, 1050, 1051, 1053, 1054, 1052, 1056, 1048, 1055, 1057, - 1045, 1054, 1060, 1058, 1061, 1049, 1050, 1052, 1053, 1062, - 1055, 1051, 1059, 1063, 1066, 1056, 1068, 1060, 1059, 1065, - 1057, 1058, 1063, 1067, 1061, 1065, 1070, 1069, 1066, 1062, - 1072, 1067, 1069, 1073, 1071, 1074, 1068, 1078, 1070, 1071, + 1018, 1022, 1022, 1023, 1024, 1027, 1016, 1028, 1030, 1030, + 1026, 1017, 1028, 1019, 1025, 1020, 1026, 1023, 1034, 1031, + 1036, 1028, 1024, 1028, 1031, 1027, 1028, 1032, 1032, 1033, + 1035, 1037, 1034, 1035, 1038, 1039, 1033, 1040, 1043, 1036, + 1039, 1041, 1042, 1038, 1045, 1045, 1041, 1046, 1048, 1037, + 1047, 1051, 1046, 1042, 1049, 1047, 1040, 1043, 1050, 1049, + 1051, 1052, 1050, 1053, 1054, 1055, 1056, 1057, 1048, 1059, + 1058, 1060, 1061, 1062, 1057, 1069, 1052, 1055, 1053, 1062, + 1063, 1056, 1058, 1054, 1064, 1065, 1070, 1066, 1059, 1069, + 1061, 1068, 1060, 1071, 1070, 1063, 1066, 1068, 1072, 1073, - 1071, 1075, 1075, 1077, 59, 1079, 1078, 1073, 1074, 1072, - 1076, 1079, 1080, 1080, 1083, 1076, 1077, 1081, 1076, 1076, - 1083, 1082, 1081, 1076, 1086, 1086, 1084, 1085, 1087, 1076, - 1082, 1084, 1085, 1076, 1088, 1088, 1089, 1090, 1091, 1089, - 1093, 1089, 1092, 1094, 1095, 1096, 1097, 1098, 1094, 1087, - 1099, 1092, 1097, 1098, 1108, 1099, 1091, 1090, 1095, 1101, - 1093, 1100, 1103, 1096, 1103, 1100, 1102, 1102, 1101, 1104, - 1106, 1107, 1108, 1101, 1106, 1101, 1109, 1101, 1110, 1101, - 1104, 1111, 1112, 1110, 1110, 1109, 1107, 1112, 1113, 1114, - 1115, 1116, 1117, 1118, 1119, 1119, 1120, 1121, 1114, 1118, + 1075, 1074, 1076, 1072, 1064, 1065, 1074, 1074, 1077, 1078, + 1078, 1073, 1080, 1071, 1081, 1084, 1076, 1085, 1082, 1075, + 1084, 1077, 1079, 1081, 1082, 1080, 1085, 1079, 1083, 1083, + 1079, 1079, 1086, 1090, 1087, 1079, 1093, 1088, 1086, 1087, + 1094, 1079, 1088, 1089, 1089, 1079, 1091, 1091, 1092, 1096, + 1095, 1092, 1097, 1092, 1090, 1099, 1093, 1097, 1094, 1095, + 1098, 1100, 1101, 1104, 1106, 1102, 1106, 1100, 1101, 1096, + 1102, 1103, 1104, 1099, 1098, 1103, 1107, 1104, 1109, 1104, + 1110, 1104, 1109, 1104, 1105, 1105, 1111, 1107, 1112, 1114, + 1118, 1115, 1116, 1113, 1117, 1110, 1115, 1112, 1113, 1113, - 1122, 1123, 1113, 1111, 1120, 1122, 1117, 1124, 1125, 1115, - 1116, 1121, 1126, 1127, 1129, 1123, 1124, 1135, 1127, 1128, - 1128, 1130, 1130, 1131, 1133, 1131, 1125, 1133, 1134, 1129, - 1136, 1137, 1137, 1134, 1138, 1142, 1135, 1126, 1143, 1136, - 1139, 1139, 1140, 1140, 1141, 1144, 1144, 1145, 1146, 1141, - 1147, 1146, 1148, 1149, 1138, 1151, 1142, 1148, 1150, 1143, - 1150, 1153, 1149, 1154, 1153, 1162, 1155, 1145, 1157, 1156, - 1147, 1155, 1158, 1151, 1156, 1159, 1157, 1158, 1154, 1161, - 1159, 1160, 1160, 1162, 1161, 1163, 1164, 1165, 1167, 1168, - 1170, 1163, 1169, 1164, 1167, 1168, 1170, 1169, 1171, 1172, + 1119, 1120, 1121, 1117, 1111, 1128, 1116, 1124, 1121, 1118, + 1123, 1114, 1122, 1122, 1126, 1120, 1127, 1125, 1123, 1119, + 1129, 1124, 1125, 1128, 1130, 1127, 1131, 1131, 1126, 1130, + 1138, 1132, 1133, 1133, 1134, 1136, 1134, 1137, 1136, 1139, + 1140, 1140, 1137, 1141, 1145, 1129, 1132, 1146, 1139, 1138, + 1142, 1142, 1143, 1143, 1144, 1147, 1147, 1148, 1149, 1144, + 1150, 1149, 1151, 1141, 1152, 1145, 1154, 1151, 1146, 1153, + 1157, 1153, 1156, 1152, 1158, 1156, 1159, 1148, 1160, 1158, + 1150, 1159, 1161, 1162, 1154, 1157, 1160, 1161, 1162, 1163, + 1163, 1164, 1165, 1166, 1167, 1168, 1164, 1170, 1171, 1166, - 1165, 1173, 1174, 1174, 1175, 1177, 1178, 1171, 1179, 1180, - 1181, 1183, 1173, 1184, 1179, 1180, 1181, 1183, 1172, 1185, - 1186, 1187, 1188, 1190, 1175, 1177, 1191, 1184, 1192, 1178, - 1189, 1189, 1186, 1184, 1195, 1187, 1193, 1194, 1194, 1185, - 1188, 1193, 1196, 1190, 1198, 54, 1192, 1196, 1199, 1200, - 1201, 1191, 1202, 1199, 1199, 1203, 1204, 1195, 1205, 1201, - 1202, 1212, 1207, 1198, 1207, 1208, 1209, 1200, 1213, 1203, - 1206, 1204, 1209, 1205, 1211, 1206, 1205, 1210, 1206, 1208, - 1212, 1210, 1214, 1215, 1216, 1211, 1217, 1218, 1215, 1220, - 1221, 1217, 1222, 1224, 1213, 1223, 1223, 1224, 1225, 1226, + 1172, 1167, 1174, 1170, 1171, 1172, 1173, 1175, 1168, 1176, + 1165, 1174, 1173, 1177, 1177, 1178, 1180, 1181, 1182, 1183, + 1176, 1184, 1186, 1187, 1182, 1183, 1175, 1184, 1186, 1188, + 1189, 1190, 1191, 1192, 1192, 1178, 1180, 1187, 1193, 1194, + 1181, 1195, 1189, 1187, 1198, 1190, 1196, 1197, 1197, 1188, + 1191, 1196, 1199, 1201, 1204, 1202, 1203, 1199, 1193, 1195, + 1202, 1202, 1205, 1204, 1194, 1206, 1207, 1198, 1208, 1210, + 1205, 1210, 1201, 1211, 1203, 1218, 1214, 1209, 1213, 1206, + 1214, 1207, 1209, 1208, 1213, 1209, 1208, 1211, 1215, 1216, + 1217, 1220, 1219, 1221, 1216, 1216, 1220, 1222, 1223, 1215, - 1214, 1228, 1216, 1220, 1229, 1227, 1230, 1218, 1221, 1231, - 1222, 1227, 1232, 1228, 1233, 1242, 1225, 1234, 1226, 1235, - 1230, 1237, 1234, 1229, 1231, 1236, 1235, 1232, 1238, 1240, - 1236, 1239, 1239, 1233, 1241, 1244, 1242, 1238, 1243, 1237, - 1241, 1244, 1245, 1243, 1240, 1246, 1246, 1251, 1245, 1247, - 1247, 1249, 1249, 1250, 1252, 1253, 1251, 1250, 1254, 1255, - 1256, 1256, 1257, 1258, 1260, 1259, 1255, 1261, 1266, 1253, - 1259, 1258, 1252, 1254, 1262, 1264, 1265, 1265, 1260, 1262, - 1262, 1267, 1257, 1263, 1268, 1269, 1261, 1266, 1263, 1263, - 1269, 1270, 1271, 1268, 1274, 1264, 1272, 1273, 1275, 1274, + 1225, 1218, 1222, 1226, 1227, 1228, 1228, 1230, 1229, 1217, + 1219, 1221, 1229, 1231, 1225, 1233, 1234, 1232, 1223, 1235, + 1242, 1226, 1227, 1232, 1236, 1230, 1237, 1233, 1238, 1239, + 1240, 1241, 1231, 1235, 1239, 1234, 1241, 1240, 1242, 1236, + 1243, 1237, 1244, 1244, 1245, 1246, 1247, 1238, 1248, 1243, + 1249, 1246, 1250, 1248, 1251, 1251, 1249, 1256, 1250, 1245, + 1252, 1252, 1254, 1254, 1255, 1257, 1256, 1247, 1255, 1260, + 1258, 1259, 1261, 1261, 1262, 1264, 1260, 1263, 1265, 1266, + 1264, 1269, 1267, 1257, 1258, 1263, 1259, 1267, 1267, 1271, + 1268, 1272, 1265, 1273, 1262, 1268, 1268, 1275, 1266, 1270, - 1267, 1276, 1277, 1273, 1280, 1278, 1281, 1276, 1282, 1279, - 1270, 1278, 1271, 1283, 1272, 1279, 1284, 1285, 1286, 1287, - 1287, 1277, 1289, 1280, 1275, 1281, 1288, 1282, 1293, 1288, - 1284, 1294, 1283, 1286, 1289, 1290, 1290, 1291, 1285, 1292, - 1294, 1293, 1291, 1292, 1295, 1296, 1299, 1296, 1298, 1300, - 1301, 1296, 1305, 1298, 1302, 1302, 1304, 1295, 1303, 1306, - 1307, 1299, 1304, 1303, 1296, 1307, 1301, 1305, 1310, 1300, - 1308, 1309, 1306, 1311, 1308, 1309, 1312, 1313, 1314, 1314, - 1316, 1318, 1319, 1313, 1320, 1320, 1321, 1319, 1310, 1322, - 1328, 1311, 1321, 1324, 1324, 1329, 1312, 1326, 1316, 1332, + 1270, 1269, 1273, 1276, 1274, 1278, 1277, 1279, 1271, 1274, + 1272, 1278, 1279, 1280, 1281, 1282, 1275, 1285, 1286, 1283, + 1281, 1284, 1287, 1276, 1277, 1283, 1288, 1284, 1289, 1290, + 48, 1291, 1292, 1292, 1282, 1293, 1285, 1286, 1293, 1280, + 1294, 1287, 1289, 1295, 1295, 1288, 1291, 1297, 1296, 1298, + 1290, 1297, 1294, 1296, 1299, 1300, 1303, 1304, 1301, 1305, + 1301, 1303, 1298, 1299, 1301, 1306, 1307, 1307, 1300, 1308, + 1309, 1310, 1304, 1312, 1308, 1311, 1309, 1301, 1312, 1305, + 1313, 1306, 1315, 1314, 1313, 1316, 1310, 1314, 1311, 1317, + 1318, 1319, 1319, 1321, 1323, 1324, 1318, 1325, 1325, 1326, - 1326, 1333, 1318, 1327, 1327, 1331, 1328, 1335, 1331, 1322, - 1333, 1329, 1334, 1334, 1336, 1337, 1338, 1339, 1341, 1332, - 1343, 1338, 1335, 1340, 1340, 1342, 1344, 1344, 1345, 1346, - 1353, 1339, 1347, 1348, 1337, 1336, 1341, 1347, 1349, 1349, - 1342, 1351, 1345, 1352, 1352, 1343, 1350, 1346, 1348, 1354, - 1350, 1355, 1353, 1356, 1357, 1355, 1359, 1359, 1360, 1357, - 1354, 1351, 1362, 1361, 1363, 1364, 1365, 1365, 1366, 1367, - 1369, 1368, 1356, 1366, 1371, 1370, 1360, 1361, 1363, 1369, - 1370, 1362, 1362, 1372, 1375, 1372, 1378, 1373, 1380, 1367, - 1364, 1368, 1373, 1374, 1371, 1376, 1379, 1379, 1383, 1374, + 1324, 1327, 1315, 1316, 1333, 1326, 1329, 1329, 1334, 1317, + 1331, 1321, 1337, 1331, 1338, 1323, 1332, 1332, 1340, 1336, + 1333, 1327, 1336, 1338, 1334, 1339, 1339, 1341, 1342, 1343, + 1344, 1346, 1337, 1340, 1343, 1345, 1345, 1347, 1348, 1349, + 1349, 1350, 1351, 1353, 1344, 1352, 1356, 1342, 1341, 1346, + 1352, 1358, 1347, 1354, 1354, 1350, 1359, 1355, 1353, 1361, + 1351, 1355, 1365, 1348, 1357, 1357, 1356, 1359, 1360, 1362, + 1364, 1364, 1360, 1358, 1362, 1366, 1367, 1368, 1361, 1369, + 1365, 1370, 1370, 1371, 1374, 1372, 1373, 1375, 1371, 1366, + 1376, 1368, 1375, 1374, 1379, 1367, 1367, 1377, 1378, 1377, - 1378, 1376, 1381, 1383, 1375, 1384, 1387, 1380, 1381, 1385, - 1385, 1386, 1386, 1388, 1390, 1389, 1392, 1390, 1391, 1391, - 1387, 1393, 1399, 1400, 1403, 1403, 1400, 1395, 1392, 1384, - 1389, 1388, 1394, 1395, 1396, 1394, 1397, 1398, 1394, 1396, - 1401, 1393, 1398, 1402, 1407, 1397, 1401, 1399, 1402, 1405, - 1394, 1404, 1404, 1406, 1408, 1405, 1409, 1407, 1406, 1410, - 1411, 1412, 1413, 1411, 1414, 1415, 1416, 1412, 1413, 1414, - 1420, 1415, 1408, 1417, 1421, 1409, 1418, 1418, 1417, 1410, - 1419, 1422, 1423, 1424, 1427, 1419, 1425, 1426, 1420, 1416, - 1427, 1428, 1429, 1430, 1421, 1431, 1423, 1424, 1425, 1434, + 1379, 1380, 1381, 1378, 1369, 1372, 1373, 1385, 1381, 1383, + 1376, 1384, 1384, 1386, 1389, 1388, 1390, 1390, 1392, 1386, + 1388, 1380, 1393, 1383, 1391, 1391, 1385, 1394, 1395, 1396, + 1396, 1395, 1392, 1397, 1398, 1406, 1402, 1400, 1389, 1402, + 1393, 1399, 1394, 1400, 1399, 1397, 1401, 1399, 1404, 1407, + 1408, 1401, 1407, 1405, 1398, 1402, 1408, 1404, 1405, 1399, + 1406, 1409, 1410, 1410, 1411, 1411, 1409, 1412, 1414, 1413, + 1415, 1416, 1417, 1412, 1413, 1418, 1419, 1420, 1418, 1421, + 1422, 1414, 1419, 1420, 1421, 1423, 1422, 1427, 1415, 1424, + 1416, 1428, 1417, 1426, 1424, 1425, 1425, 1429, 1426, 1430, - 1426, 1422, 1433, 1433, 1435, 1436, 1436, 1430, 1437, 1435, - 1438, 1428, 1429, 1439, 1440, 1442, 1431, 1441, 1443, 1434, - 1445, 1449, 1444, 1437, 1438, 1443, 1441, 1447, 1451, 1451, - 1442, 1444, 1440, 1453, 1444, 1450, 1445, 1439, 1450, 1452, - 1452, 1454, 1447, 1456, 1456, 1453, 1449, 1447, 1455, 1457, - 1458, 1455, 1459, 1460, 1461, 1462, 1463, 1459, 1460, 1454, - 1464, 1466, 1457, 1465, 1469, 1463, 1468, 1468, 1467, 1458, - 1466, 1462, 1465, 1461, 1467, 1465, 1470, 1471, 1472, 1464, - 1473, 1474, 1476, 1477, 1469, 1478, 1478, 1479, 1480, 1470, - 1482, 1482, 1472, 1474, 1481, 1471, 1473, 1480, 1484, 1481, + 1431, 1434, 1435, 1432, 1436, 1427, 1433, 1434, 1423, 1437, + 1438, 1428, 1441, 1430, 1431, 1432, 1446, 1429, 1444, 1433, + 1440, 1440, 1435, 1437, 1436, 1442, 1443, 1443, 1445, 1447, + 1442, 1438, 1441, 1444, 1448, 1449, 1451, 1450, 1452, 1456, + 1446, 1454, 1445, 1448, 1450, 1451, 1457, 1447, 1451, 1457, + 1449, 1458, 1458, 1460, 1452, 1461, 1454, 1459, 1459, 1462, + 1465, 1454, 1462, 1464, 1456, 1460, 1463, 1463, 1468, 1466, + 1467, 1470, 1469, 1461, 1466, 1467, 1464, 1471, 1474, 1465, + 1470, 1472, 1473, 1476, 1474, 1475, 1475, 1468, 1469, 1477, + 1472, 1473, 1478, 1472, 1479, 1480, 1471, 1481, 1483, 1484, - 1483, 1477, 1485, 1479, 1486, 1482, 1489, 1476, 1487, 1483, - 1490, 1491, 1483, 1487, 1487, 1493, 1484, 1494, 53, 1492, - 1489, 1493, 1486, 1485, 1492, 1490, 1495, 1495, 1496, 1501, - 1502, 1497, 1498, 1491, 1496, 1494, 1497, 1499, 1498, 1503, - 1504, 1510, 1506, 1499, 1502, 1503, 1508, 1505, 1506, 1501, - 1505, 1511, 1513, 1504, 1508, 1512, 1505, 1522, 1514, 1515, - 1510, 1513, 1516, 1512, 1517, 1518, 1518, 1519, 1520, 1521, - 1511, 1514, 1515, 1519, 1520, 1523, 1516, 1522, 1517, 1524, - 1526, 1525, 1521, 1527, 1528, 1529, 1526, 1518, 1531, 1531, - 1532, 1533, 1534, 1523, 1525, 1533, 1535, 1534, 1524, 1536, + 1485, 1485, 1477, 1476, 1486, 1487, 1491, 1488, 1479, 1481, + 1478, 1480, 1488, 1490, 1487, 1489, 1489, 1484, 1492, 1493, + 1486, 1494, 1490, 1483, 1491, 1490, 1494, 1494, 1496, 1497, + 1489, 1498, 1501, 1499, 1500, 1502, 1502, 1493, 1499, 1492, + 1500, 1503, 1496, 1504, 1497, 1505, 1506, 1503, 1504, 1508, + 1501, 1505, 1506, 1498, 1509, 1510, 1512, 1511, 1513, 1512, + 1517, 1510, 1518, 1515, 1513, 1512, 1519, 1520, 1509, 1508, + 1511, 1515, 1521, 1522, 1519, 1523, 1520, 1524, 1526, 1517, + 1529, 1518, 1525, 1525, 1526, 1521, 1522, 1527, 1528, 1523, + 1530, 1524, 1531, 1527, 1532, 1534, 1533, 1535, 1536, 1539, - 1528, 1535, 1537, 1529, 1536, 1527, 1538, 1540, 1541, 1541, - 1532, 1537, 1542, 1543, 1544, 1545, 1545, 1547, 1546, 1554, - 1550, 1551, 1540, 1548, 1547, 1543, 1549, 1561, 1552, 1538, - 1553, 1542, 1546, 1544, 1552, 1548, 1561, 1554, 1549, 1550, - 1555, 1551, 1553, 1556, 1556, 1557, 1555, 1560, 1557, 1558, - 1558, 1562, 1560, 1563, 1563, 1564, 1565, 1562, 1565, 1566, - 1567, 1568, 1566, 1569, 1570, 1571, 1572, 1564, 1575, 1576, - 1571, 1574, 1573, 1575, 1577, 1572, 1581, 1578, 1576, 1580, - 1567, 1569, 1570, 1568, 1573, 1580, 1574, 1579, 1579, 1582, - 1583, 1576, 1578, 1584, 1577, 1586, 1585, 1581, 1585, 1587, + 1529, 1528, 1533, 1544, 1525, 1538, 1538, 1532, 1530, 1545, + 1540, 1531, 1544, 1535, 1540, 1541, 1536, 1534, 1542, 1539, + 1541, 1543, 1547, 1542, 1548, 1548, 1543, 1549, 1550, 1551, + 1552, 1552, 1545, 1553, 1554, 1557, 1558, 1547, 1555, 1556, + 1550, 1554, 1561, 1559, 1568, 1560, 1549, 1553, 1551, 1559, + 1555, 1556, 1562, 1568, 1557, 43, 1558, 1560, 1562, 1571, + 1561, 1563, 1563, 1564, 1565, 1565, 1564, 1567, 1569, 1570, + 1570, 1571, 1567, 1572, 1569, 1572, 1573, 1574, 1575, 1573, + 1576, 1577, 1578, 1579, 1580, 1582, 1581, 1578, 1584, 1586, + 1582, 1587, 1579, 1583, 1586, 1591, 1580, 1574, 1576, 1577, - 1587, 1588, 1588, 1589, 1589, 1590, 1583, 1593, 1582, 1586, - 1594, 1586, 1601, 1584, 1591, 1591, 1592, 1592, 1595, 1595, - 1596, 1597, 1603, 1598, 1596, 1590, 1598, 1597, 1593, 1600, - 1601, 1594, 1602, 1604, 1609, 1600, 1604, 1607, 1602, 1605, - 1605, 1606, 1606, 1607, 1608, 1610, 1611, 1603, 1612, 1616, - 1615, 1616, 1611, 1621, 1609, 1614, 1608, 1608, 1608, 1617, - 1614, 1614, 1618, 1608, 1615, 1610, 1619, 1620, 1612, 1622, - 1617, 1624, 1619, 1621, 1623, 1623, 1620, 1618, 1625, 1625, - 1626, 1627, 1628, 1628, 1629, 1629, 1630, 1633, 1633, 1634, - 1622, 1638, 1635, 1637, 1640, 1640, 1641, 1624, 1639, 1645, + 1575, 1581, 1583, 1590, 1585, 1592, 1587, 1589, 1584, 1585, + 1588, 1588, 1593, 1589, 1591, 1583, 1585, 1594, 1599, 1594, + 1595, 1592, 1596, 1596, 1590, 1597, 1597, 1598, 1598, 1600, + 1600, 1602, 1593, 1603, 1595, 1610, 1595, 1612, 1599, 1601, + 1601, 1604, 1604, 1605, 1606, 1607, 14, 1605, 1607, 1609, + 1606, 1611, 1602, 1610, 1603, 1609, 1613, 1611, 1624, 1613, + 1614, 1614, 1612, 1615, 1615, 1616, 1617, 1618, 1619, 1620, + 1621, 1616, 1624, 1630, 1627, 1620, 1623, 1631, 1617, 1617, + 1617, 1623, 1623, 1626, 1625, 1617, 1625, 1618, 1619, 1627, + 1621, 1628, 1629, 1630, 1626, 1632, 1632, 1628, 1631, 1633, - 1626, 1635, 1637, 1627, 1639, 1642, 1630, 1644, 1643, 1646, - 1646, 1647, 1638, 1648, 1634, 1643, 1644, 1641, 1650, 1652, - 1642, 1651, 1654, 1650, 1653, 1645, 1655, 1651, 1654, 1648, - 1657, 1653, 1655, 1656, 1656, 1657, 1658, 1647, 1659, 1652, - 1660, 1661, 1663, 1662, 1664, 1658, 1662, 1665, 1665, 1666, - 1668, 1667, 1669, 1661, 1671, 1666, 1669, 1672, 1659, 1660, - 1663, 1673, 1674, 1674, 1675, 1668, 1673, 1676, 1678, 1679, - 1664, 1667, 1669, 1679, 1671, 1680, 1681, 1682, 1682, 1672, - 1683, 1680, 1676, 1675, 1683, 1681, 1684, 1678, 1685, 1685, - 1686, 1687, 1692, 1688, 1689, 1690, 1691, 1684, 1692, 1689, + 1635, 1629, 1634, 1634, 1636, 1637, 1637, 1638, 1638, 1639, + 1642, 1642, 1643, 1644, 1646, 1647, 1649, 1649, 1648, 1650, + 1635, 1652, 1644, 1646, 1648, 1633, 1636, 1651, 1652, 1639, + 1653, 1654, 1655, 1655, 1656, 1657, 1647, 1643, 1659, 1653, + 1650, 1660, 1651, 1659, 1661, 1662, 1668, 1660, 1663, 1664, + 1669, 1657, 1662, 1667, 1663, 1664, 1666, 1654, 1665, 1665, + 1656, 1666, 1667, 1670, 1661, 1671, 1668, 1672, 1671, 1669, + 1673, 1674, 1674, 1675, 1676, 1670, 1677, 1678, 1680, 1675, + 1681, 1678, 1682, 1683, 1683, 1672, 1684, 1682, 1685, 1687, + 13, 1677, 1690, 1695, 1676, 1688, 1673, 1678, 1680, 1688, - 1697, 1694, 1684, 1693, 1697, 1687, 1694, 1695, 1695, 1696, - 1696, 1686, 1688, 1699, 1700, 1690, 1691, 1701, 1693, 1702, - 1702, 1704, 1699, 1703, 1703, 1700, 1704, 1704, 1705, 1706, - 1700, 1707, 1709, 1708, 1705, 1706, 1710, 1701, 1708, 1712, - 1714, 1713, 1710, 1715, 1709, 1713, 1719, 1716, 1717, 1718, - 1721, 1712, 1714, 1716, 1722, 1718, 1723, 1707, 1719, 1729, - 1725, 1723, 1721, 1725, 1726, 1726, 1727, 1727, 1715, 1730, - 1717, 1728, 1728, 1722, 1731, 1730, 1732, 1733, 1734, 1729, - 1731, 1732, 1738, 1733, 1736, 1738, 1739, 1734, 1742, 1736, - 1740, 1740, 1743, 1746, 1744, 1745, 1745, 1750, 1739, 1744, + 1689, 1690, 1681, 1685, 1693, 1684, 1689, 1692, 1687, 1691, + 1691, 1692, 1694, 1694, 1695, 1693, 1696, 1697, 1698, 1699, + 1693, 1700, 1701, 1698, 1703, 1702, 1704, 1704, 1701, 1703, + 1696, 1705, 1705, 1706, 1708, 1709, 1697, 1706, 1710, 1699, + 1702, 1700, 1716, 1708, 1711, 1711, 1709, 1712, 1712, 1713, + 1714, 1709, 1717, 1715, 1713, 1713, 1714, 1717, 1710, 1715, + 1718, 1719, 1721, 1723, 1724, 1722, 1726, 1719, 1716, 1722, + 1725, 1727, 1718, 1728, 1721, 1723, 1725, 1727, 1730, 1731, + 1734, 1732, 1738, 1734, 1747, 1728, 1732, 1747, 1726, 1724, + 1730, 1735, 1735, 1736, 1736, 1737, 1737, 1739, 1731, 1740, - 1742, 1747, 1746, 1748, 1743, 1751, 1747, 1752, 1748, 1749, - 1749, 1753, 1754, 1755, 1751, 1756, 1754, 1750, 1755, 1757, - 1760, 1756, 1759, 1759, 1764, 1752, 1761, 1762, 1762, 1765, - 1753, 1763, 1766, 1757, 1759, 1761, 1764, 1766, 1760, 1767, - 1763, 1770, 1770, 1772, 1773, 1774, 1772, 1776, 1778, 1777, - 1765, 1779, 1767, 1786, 1778, 1780, 1780, 1781, 1783, 1781, - 1773, 1774, 1776, 1777, 1782, 1782, 1783, 1785, 1779, 1787, - 1787, 1788, 1789, 1786, 1785, 1790, 1791, 1792, 1793, 1794, - 1788, 1797, 1800, 1798, 1795, 1799, 1799, 1790, 1791, 1792, - 1795, 1801, 1803, 1789, 1794, 1798, 1802, 1803, 1804, 1802, + 1743, 1741, 1738, 1739, 1742, 1740, 1741, 1745, 1748, 1743, + 1742, 1751, 1745, 1749, 1749, 1752, 1753, 1754, 1754, 1755, + 1748, 1753, 1759, 1751, 1756, 1757, 1760, 1752, 1755, 1756, + 1757, 1758, 1758, 1761, 1762, 1760, 1763, 1766, 1764, 1765, + 1763, 1767, 1759, 1764, 1768, 1765, 1769, 1771, 1771, 1772, + 1767, 1761, 1773, 1762, 1775, 1766, 1774, 1774, 1776, 1771, + 1769, 1773, 1768, 1775, 1777, 1779, 1778, 1772, 1782, 1782, + 1776, 1778, 1784, 1785, 1786, 1784, 1788, 1790, 1779, 1789, + 1791, 1792, 1792, 1790, 1793, 1777, 1793, 1794, 1794, 1785, + 1786, 1788, 1795, 1789, 1797, 1798, 1800, 1791, 1799, 1799, - 1800, 1797, 1806, 1795, 1793, 1808, 1807, 1806, 1807, 1809, - 1810, 1801, 1812, 1814, 1809, 1815, 1816, 1810, 1804, 1818, - 1817, 1812, 1817, 1808, 1815, 1820, 1821, 1820, 1816, 1822, - 1822, 1814, 1823, 1825, 1824, 1825, 1826, 1827, 1818, 1824, - 1821, 1826, 1827, 1828, 1829, 1830, 1832, 1831, 1833, 1835, - 1839, 1830, 1831, 1836, 1837, 1837, 1833, 1840, 1823, 1832, - 1841, 1828, 1838, 1838, 1829, 1839, 1841, 1836, 1835, 1842, - 1843, 1844, 1843, 1846, 1842, 1845, 1845, 1840, 1851, 1844, - 1847, 1847, 1848, 1848, 1849, 1846, 1850, 1844, 1853, 1855, - 1854, 1850, 1854, 1849, 1858, 1860, 1851, 1853, 1856, 1857, + 1795, 1797, 1801, 1805, 1802, 1800, 1803, 1804, 1807, 1806, + 1809, 1811, 1811, 1810, 1807, 1798, 1802, 1812, 1803, 1804, + 1813, 1815, 1816, 1801, 1806, 1810, 1815, 1807, 1814, 1805, + 1809, 1814, 1818, 1820, 1819, 1812, 1819, 1818, 1821, 1822, + 1813, 1824, 1816, 1821, 1826, 1827, 1822, 1828, 1830, 1833, + 1824, 1820, 1835, 1829, 1827, 1829, 1832, 1840, 1832, 1828, + 1834, 1834, 1826, 1833, 1836, 1838, 1837, 1830, 1837, 1836, + 1838, 1839, 1841, 1842, 1844, 1840, 1839, 1843, 1835, 1842, + 1845, 1847, 1843, 1848, 1849, 1849, 1851, 1844, 1845, 1850, + 1850, 1852, 1841, 1853, 1855, 1858, 1855, 1848, 1854, 1853, - 1853, 1865, 1864, 1856, 1856, 1868, 1858, 1860, 1857, 1861, - 1855, 1862, 1869, 1866, 1861, 1864, 1862, 1867, 1867, 1870, - 1871, 1865, 1866, 1868, 1872, 1874, 1875, 1876, 1877, 1885, - 1869, 1878, 1879, 1877, 1871, 1870, 1878, 1874, 1875, 1872, - 1882, 1879, 1884, 1886, 1887, 1888, 1882, 1876, 1884, 1890, - 1890, 1889, 1885, 1893, 1891, 1892, 1892, 1894, 1886, 1882, - 1889, 1894, 1887, 1891, 1895, 1896, 1902, 48, 1897, 1895, - 1888, 1898, 1893, 1897, 1897, 1899, 1900, 1898, 1896, 1900, - 1901, 1899, 1905, 1905, 1906, 1906, 1902, 1907, 1901, 1908, - 1908, 1909, 1909, 1910, 1911, 1912, 1907, 1913, 1923, 1906, + 1847, 1851, 1856, 1854, 1857, 1857, 1861, 1858, 1859, 1859, + 1856, 1852, 1860, 1860, 1862, 1861, 1863, 1865, 1856, 1862, + 1866, 1867, 1866, 1869, 1870, 1868, 1865, 1872, 1873, 1865, + 1868, 1868, 1869, 1873, 1863, 1874, 1870, 1876, 1877, 1872, + 1874, 1880, 1867, 1878, 1879, 1879, 1881, 1882, 1883, 1886, + 1876, 1884, 1878, 1887, 1888, 1889, 1897, 1900, 1877, 1880, + 1889, 1886, 1883, 1882, 1881, 1887, 1884, 1890, 1891, 1894, + 1896, 1898, 1890, 1899, 1888, 1894, 1896, 1891, 1901, 1897, + 1902, 1902, 1900, 1903, 1904, 1904, 1898, 1901, 1894, 1905, + 1906, 1899, 1903, 1907, 1906, 1909, 1908, 1910, 1907, 1911, - 1920, 1912, 1913, 1914, 1914, 1910, 1915, 1915, 1916, 1917, - 1906, 1924, 1911, 1916, 1919, 1917, 1924, 1921, 1919, 1925, - 1920, 1921, 1926, 1923, 1927, 1928, 1930, 1930, 1929, 1927, - 1931, 1932, 1934, 1933, 1931, 1935, 1936, 1926, 1933, 1938, - 1937, 1939, 1925, 1928, 1929, 1937, 1932, 1935, 1940, 1940, - 1943, 1944, 1938, 1942, 1945, 1936, 1946, 1947, 1934, 1939, - 1948, 1942, 1949, 1950, 1952, 1953, 1953, 43, 1954, 1943, - 1944, 1954, 1955, 1956, 1949, 1957, 1947, 1945, 1961, 1952, - 1946, 1948, 1958, 1958, 1950, 1955, 1962, 1956, 1957, 1959, - 1959, 1960, 1960, 1961, 1963, 1963, 1964, 1965, 1965, 1962, + 1909, 1909, 1913, 1910, 1912, 1911, 1914, 1912, 1905, 1908, + 1913, 1917, 1917, 1918, 1918, 1919, 1920, 1920, 1921, 1921, + 1922, 1924, 1923, 1929, 1919, 1925, 1914, 1924, 1918, 1929, + 1925, 1932, 1922, 1926, 1926, 1927, 1927, 1928, 1935, 1918, + 1923, 1931, 1928, 1933, 1936, 1931, 1937, 1933, 1939, 1936, + 1938, 1932, 1940, 1939, 1942, 1941, 1943, 1944, 1945, 1945, + 1946, 1943, 1947, 1935, 1946, 1938, 1949, 1948, 1950, 1937, + 1940, 1941, 1948, 1952, 1942, 1951, 1953, 1947, 1952, 1944, + 1950, 1954, 1955, 1955, 1958, 1957, 1959, 1960, 1961, 1953, + 1962, 1967, 1949, 1957, 1951, 1963, 1964, 1965, 1970, 1954, - 1969, 1966, 1968, 1970, 1971, 1964, 1966, 1968, 1964, 1972, - 1972, 1973, 1973, 1974, 1975, 1975, 1971, 1976, 1977, 1977, - 1969, 1978, 1979, 1970, 1980, 1980, 1982, 1979, 1981, 1981, - 1983, 1984, 1974, 1985, 1989, 1976, 1978, 1987, 1991, 1983, - 1982, 14, 1987, 1988, 1988, 1984, 1990, 1990, 1992, 1994, - 1994, 1996, 1985, 1989, 1992, 1993, 1991, 1997, 1993, 1995, - 1995, 1998, 1999, 1999, 2001, 1994, 2002, 2003, 2006, 2004, - 1996, 2007, 1997, 2004, 2005, 2005, 2008, 2010, 2010, 2011, - 1998, 2012, 2003, 2013, 2001, 2014, 2007, 2006, 2012, 2002, - 2015, 2008, 2016, 2017, 2017, 2018, 2019, 2013, 2019, 2011, + 1968, 1968, 1972, 1958, 1969, 1959, 1967, 1969, 1964, 1962, + 1960, 1970, 1961, 1971, 1976, 1972, 1963, 1977, 1965, 1973, + 1973, 1974, 1974, 1975, 1975, 1978, 1978, 1971, 1979, 1976, + 1977, 1980, 1980, 1981, 1983, 1984, 1985, 1979, 1981, 1983, + 1979, 1986, 1987, 1987, 1988, 1988, 1989, 1990, 1990, 1991, + 1992, 1992, 1994, 1986, 1993, 1984, 1985, 1994, 1995, 1995, + 1996, 1996, 1997, 1998, 1999, 1989, 2000, 1991, 2002, 1993, + 2003, 2003, 1998, 2002, 2004, 2007, 1997, 2006, 1999, 2005, + 2005, 2007, 2011, 2008, 2012, 2000, 2008, 2009, 2009, 2010, + 2010, 2013, 2016, 2004, 2017, 2006, 2014, 2014, 2018, 2012, - 2022, 2023, 2020, 2014, 2018, 2020, 2023, 2025, 2015, 2024, - 2026, 2028, 2022, 2027, 2024, 2029, 2028, 2035, 2016, 2031, - 2020, 2032, 2020, 2026, 2031, 2033, 2032, 2034, 2039, 2036, - 2040, 2037, 2025, 2034, 2027, 2036, 2037, 2038, 2035, 2042, - 2033, 2029, 2038, 2040, 2041, 2043, 2044, 2041, 2042, 2045, - 2046, 2047, 2051, 2039, 2043, 2044, 2048, 2047, 2045, 2049, - 2053, 2055, 2048, 2049, 2046, 2054, 2054, 2055, 2057, 2053, - 2056, 2056, 2051, 2059, 2063, 2060, 2061, 2061, 2062, 2056, - 2065, 2066, 2068, 2063, 2067, 2072, 2074, 2074, 2057, 2059, - 2057, 2060, 2065, 2062, 2068, 2070, 2071, 2066, 2070, 2067, + 2019, 2011, 2021, 2009, 2019, 2020, 2020, 2022, 2023, 2026, + 2013, 2027, 2016, 2018, 2025, 2025, 2028, 2017, 2027, 2029, + 2030, 2021, 2022, 2023, 2031, 2032, 2032, 2033, 2037, 2026, + 2028, 2034, 2041, 2034, 2042, 2040, 2033, 2029, 2030, 2035, + 2037, 2038, 2035, 2039, 2043, 2041, 2038, 2044, 2039, 2043, + 2031, 2046, 2048, 2047, 2050, 2042, 2046, 2035, 2047, 2035, + 2040, 2052, 2049, 2051, 2054, 2053, 2052, 2048, 2049, 2051, + 2053, 2055, 2057, 2044, 2056, 2050, 2058, 2056, 2059, 2060, + 2061, 2057, 2066, 0, 2055, 2058, 2062, 2059, 2060, 2054, + 2063, 2064, 2062, 2072, 2061, 2064, 2063, 2068, 2069, 2069, - 2073, 2071, 2075, 2075, 2079, 2072, 2077, 2077, 2078, 2079, - 2080, 2078, 2073, 2081, 2082, 2082, 2080, 2083, 2085, 2081, - 2084, 2084, 2086, 2087, 2088, 2088, 2091, 2095, 2090, 2091, - 2085, 2083, 2090, 2092, 2092, 2093, 2086, 2094, 2098, 2096, - 2093, 2101, 2087, 2096, 2097, 2097, 2094, 2095, 2100, 2102, - 2103, 2098, 2104, 2100, 2105, 2106, 2104, 2107, 2109, 2108, - 2106, 2101, 2111, 2107, 2103, 2108, 2112, 2113, 2115, 2102, - 2115, 2112, 2114, 2113, 2105, 2118, 2109, 2121, 2111, 13, - 2114, 2119, 2119, 2120, 2122, 2122, 2120, 2124, 2125, 2118, - 2126, 2124, 2127, 2127, 2125, 2128, 2131, 2131, 2133, 2135, + 2074, 2070, 2066, 2071, 2071, 2075, 2068, 2070, 2076, 2076, + 2077, 2078, 2071, 2072, 2080, 2072, 2074, 2081, 2083, 2082, + 2078, 2075, 2087, 2086, 2085, 2077, 2080, 2085, 2086, 2088, + 2083, 2089, 2089, 2081, 2082, 2090, 2090, 2092, 2092, 2094, + 2093, 2088, 2087, 2093, 2094, 2095, 2096, 2097, 2097, 2098, + 2100, 2095, 2096, 2099, 2099, 2101, 2102, 2103, 2103, 2104, + 2105, 2106, 2100, 2098, 2108, 2104, 2106, 2109, 2108, 2101, + 2109, 2110, 2110, 2111, 2105, 2102, 2112, 2113, 2111, 2114, + 2115, 2115, 2116, 2114, 2118, 2112, 2119, 2120, 2121, 2118, + 2122, 2123, 2127, 2124, 2122, 2116, 2129, 2113, 2124, 2125, - 2139, 2136, 2126, 2121, 2128, 2139, 2140, 2141, 2149, 2142, - 2143, 2143, 2141, 2135, 2142, 2147, 2133, 2136, 2145, 2145, - 2150, 2147, 2148, 2148, 2149, 2151, 2153, 2154, 2155, 2155, - 2151, 2157, 2140, 2159, 2160, 2158, 2162, 2162, 2163, 2154, - 2157, 2158, 2150, 2164, 2169, 2153, 2166, 2166, 2177, 2160, - 2168, 2159, 2167, 2167, 2170, 2168, 2172, 2163, 2172, 2171, - 2173, 2164, 2169, 2170, 2171, 2174, 2175, 2176, 2177, 2184, - 2178, 2268, 2176, 2268, 2173, 2178, 2179, 2179, 2175, 2174, - 2180, 2180, 2181, 2181, 2182, 2182, 2183, 2184, 2185, 2186, - 2186, 2187, 2187, 2185, 2188, 2189, 2190, 2191, 2183, 2192, + 2137, 2137, 2121, 2126, 2139, 2125, 2119, 2120, 2130, 2126, + 2127, 2123, 2129, 2130, 2131, 2132, 2133, 2136, 2133, 2138, + 2131, 2143, 2138, 2132, 2140, 2140, 2144, 2143, 2142, 2151, + 2139, 2136, 2142, 2145, 2145, 2146, 2149, 2149, 2144, 2153, + 2154, 2157, 2158, 2159, 2146, 2160, 2157, 2151, 2159, 2167, + 2160, 2161, 2161, 2153, 2163, 2163, 2154, 2165, 2166, 2166, + 2168, 2169, 2171, 2165, 2172, 2167, 2169, 2176, 2158, 2173, + 2173, 2175, 2177, 2176, 2178, 2181, 2172, 2180, 2180, 2182, + 2175, 2171, 2168, 2184, 2184, 2185, 2185, 2186, 2187, 2178, + 2177, 2188, 2186, 2189, 2181, 2191, 2192, 2182, 2189, 2190, - 2192, 2193, 2194, 2194, 2195, 2195, 2188, 2189, 2196, 2197, - 2198, 2199, 2200, 2191, 2202, 2203, 2190, 2198, 2206, 2196, - 2193, 2197, 2201, 2199, 2204, 2204, 2207, 2201, 2205, 2208, - 2209, 2210, 2200, 2213, 2202, 2203, 2214, 2205, 2211, 2211, - 2212, 2216, 2208, 2217, 2206, 2210, 2207, 2218, 2213, 2212, - 2219, 2214, 2220, 2219, 2209, 2221, 2222, 2223, 2223, 2216, - 2221, 2222, 2224, 2224, 2230, 2217, 2220, 2225, 2225, 2231, - 2218, 2227, 2227, 2229, 2229, 2232, 2234, 2235, 2236, 2237, - 2231, 2238, 2230, 2239, 2240, 2241, 2241, 2243, 2243, 2244, - 2238, 2250, 2245, 0, 2232, 2235, 2234, 2246, 2246, 2237, + 2188, 2190, 2193, 2194, 2195, 0, 2187, 2196, 2194, 2191, + 2192, 2201, 2196, 2202, 2193, 2197, 2197, 2198, 2198, 2199, + 2199, 2200, 2200, 2201, 2195, 2203, 2204, 2204, 2205, 2205, + 2203, 2202, 2206, 2207, 2208, 2209, 2210, 2210, 2211, 2212, + 2212, 2213, 2213, 2215, 2206, 2207, 2216, 2214, 2217, 2218, + 2220, 2209, 2221, 2216, 2208, 2215, 2219, 2211, 2214, 2223, + 2217, 2219, 2222, 2222, 2224, 2225, 2226, 2227, 2223, 2218, + 2220, 2230, 2221, 2228, 2229, 2229, 2234, 2231, 2232, 2226, + 2230, 2235, 2236, 2237, 2238, 2225, 2237, 2228, 2241, 2241, + 2224, 2227, 2231, 2232, 2234, 2239, 2240, 2248, 2238, 2250, - 2236, 2245, 2240, 2239, 2248, 2249, 2249, 2251, 2252, 2250, - 2254, 2244, 2253, 2248, 2255, 2252, 2257, 2256, 2258, 2258, - 2259, 2259, 2261, 2260, 2262, 2251, 2263, 2253, 2254, 2260, - 2265, 2264, 2255, 2256, 2266, 2257, 2264, 2267, 2273, 2262, - 2261, 2276, 2267, 2269, 2269, 2263, 2270, 2275, 2270, 2277, - 2265, 2271, 2271, 2278, 2266, 2280, 2275, 2273, 2279, 2281, - 2276, 2277, 2284, 2279, 2285, 2286, 2286, 2285, 2287, 2288, - 2289, 2289, 2290, 2278, 2292, 2280, 2290, 2293, 2281, 2294, - 2294, 2293, 2284, 2287, 2295, 2297, 2298, 2288, 2301, 2292, - 2299, 2299, 2302, 2305, 2303, 2304, 2304, 2295, 2303, 2307, + 2239, 2240, 2252, 2235, 2254, 2236, 2242, 2242, 2243, 2243, + 2245, 2245, 2247, 2247, 2249, 2248, 2253, 2255, 2250, 2256, + 2257, 2258, 2252, 2258, 2259, 2249, 2254, 2260, 2256, 2261, + 2262, 2262, 2264, 2264, 2253, 2265, 2271, 2255, 2272, 2266, + 2257, 2267, 2267, 2269, 2259, 2260, 2273, 2261, 2266, 2270, + 2270, 2274, 2269, 2273, 2271, 2275, 2272, 2265, 2276, 2277, + 2278, 2279, 2279, 2280, 2280, 2281, 2274, 2282, 2283, 2284, + 2286, 2281, 2285, 2275, 2287, 2277, 2276, 2285, 2289, 2278, + 2289, 2288, 2291, 2283, 2291, 2282, 2288, 2294, 2284, 2296, + 2286, 2290, 2290, 2297, 2287, 2292, 2292, 2298, 2296, 2299, - 2301, 2302, 2306, 2306, 2307, 2297, 2298, 2308, 2309, 2310, - 2311, 2311, 2305, 2316, 2316, 2317, 2308, 2318, 2318, 2319, - 2320, 2310, 2321, 2324, 2309, 2322, 2323, 2323, 2326, 2326, - 2329, 2321, 2319, 2320, 2322, 2329, 2330, 2317, 2324, 2331, - 2332, 2330, 2333, 2334, 2336, 2332, 2335, 2614, 2338, 2339, - 2333, 2340, 2336, 2331, 2339, 2335, 2340, 2341, 2342, 2342, - 2343, 2343, 2334, 2338, 2344, 2345, 2346, 2347, 2348, 2614, - 2345, 2344, 2341, 2349, 2348, 2350, 2350, 2351, 2349, 2353, - 2353, 2352, 2354, 2354, 2346, 2347, 2352, 2357, 2358, 2358, - 2359, 2360, 2351, 2359, 2361, 2363, 2360, 2360, 2362, 2361, + 2300, 2301, 2308, 2302, 2305, 2300, 2294, 2306, 2309, 2298, + 2306, 0, 2297, 2307, 2307, 2310, 2310, 2308, 2313, 2299, + 2318, 2301, 2302, 2311, 2305, 2314, 2309, 2311, 2316, 2314, + 2315, 2315, 2319, 2313, 2320, 2320, 2322, 2323, 2324, 2326, + 2318, 2316, 2324, 2325, 2325, 2329, 2323, 2330, 2322, 2327, + 2327, 2328, 2319, 2331, 2329, 2338, 2328, 2340, 2326, 2332, + 2332, 2337, 2337, 2330, 2342, 2331, 2339, 2339, 2341, 2343, + 2340, 2344, 2344, 2342, 2345, 2347, 2347, 2338, 2343, 2350, + 2351, 2341, 2352, 2353, 2350, 2351, 2354, 2355, 2353, 2345, + 2356, 2367, 2357, 2359, 2354, 2362, 2352, 2360, 2361, 2356, - 2357, 2363, 2364, 2362, 2365, 2366, 2364, 2367, 2368, 2365, - 2369, 2370, 2372, 2375, 2366, 2369, 2368, 2372, 2373, 2377, - 2379, 2373, 2367, 2370, 2377, 2375, 2378, 2380, 2381, 2387, - 2382, 2378, 2383, 2383, 2384, 2388, 2393, 2381, 2379, 2382, - 2380, 2389, 2391, 2384, 2390, 2390, 2395, 2392, 2387, 2394, - 2394, 2393, 2397, 2399, 2400, 2388, 2392, 2402, 2400, 0, - 2389, 2391, 2401, 2401, 2403, 2395, 2404, 2397, 2405, 2407, - 2403, 2410, 2404, 2399, 2405, 2406, 2406, 2407, 2408, 2411, - 2410, 2413, 2402, 2408, 2414, 2413, 2415, 2417, 2417, 2418, - 2418, 2427, 2411, 2419, 2419, 2421, 2421, 2423, 2414, 2422, + 2357, 2368, 2360, 2361, 2363, 2363, 2355, 2365, 2359, 2367, + 2362, 2364, 2364, 2366, 2365, 2369, 2372, 2370, 2366, 2368, + 2373, 2369, 2370, 2371, 2371, 2373, 2374, 2374, 2375, 2375, + 2378, 2372, 2379, 2379, 2380, 2381, 2390, 2380, 2403, 2382, + 2381, 2381, 2383, 2378, 2382, 2384, 2385, 2383, 2386, 2387, + 2385, 2384, 2388, 2386, 2389, 2391, 2403, 2390, 2387, 2392, + 2394, 2391, 2389, 2393, 2396, 2392, 2399, 2388, 2393, 2396, + 2397, 2401, 2394, 2397, 2402, 2404, 2401, 2405, 2399, 2402, + 2406, 2407, 2407, 2408, 2411, 2412, 2405, 2413, 2404, 2406, + 2414, 2414, 2408, 2415, 2417, 2416, 2418, 2418, 2419, 2421, - 2432, 2415, 2423, 2422, 2425, 2425, 2429, 2428, 2430, 2433, - 2433, 2427, 2428, 2430, 2430, 2435, 2435, 2438, 2429, 2440, - 2432, 2436, 2436, 2437, 2442, 2446, 2437, 2443, 2443, 2448, - 2438, 2444, 2444, 2445, 2445, 2447, 2447, 2440, 2449, 2450, - 2446, 2451, 2448, 2457, 2442, 2452, 2452, 2451, 2453, 2456, - 2458, 2459, 2453, 2450, 2456, 2456, 2449, 2460, 2461, 2462, - 2472, 2463, 2477, 2460, 2461, 2463, 2457, 2464, 2464, 2467, - 2458, 2459, 2469, 2470, 2467, 2473, 2470, 2474, 2473, 2476, - 2469, 2475, 2477, 2480, 2462, 2472, 2475, 2478, 2479, 2479, - 2481, 2483, 2484, 2484, 2474, 2474, 2492, 2476, 2481, 2482, + 2423, 2425, 2425, 2411, 2416, 2412, 2413, 2424, 2426, 2417, + 2427, 2424, 2415, 2428, 2421, 2429, 2427, 2419, 2431, 2428, + 2423, 2429, 2430, 2430, 2432, 2434, 2431, 2435, 2437, 2432, + 2438, 2439, 2437, 2426, 2434, 2441, 2441, 2442, 2442, 2446, + 2435, 2443, 2443, 2446, 2438, 2447, 2439, 2445, 2445, 2451, + 2447, 2449, 2449, 2452, 2453, 2454, 2456, 2464, 2452, 2462, + 2454, 2454, 2457, 2457, 2459, 2459, 2453, 2460, 2460, 2451, + 2461, 2466, 2462, 2461, 2470, 2464, 2456, 2467, 2467, 2468, + 2468, 2469, 2469, 2471, 2471, 2472, 2473, 2474, 2475, 2470, + 2481, 2466, 2476, 2476, 2475, 2477, 2482, 2480, 2472, 2477, - 2489, 2478, 2480, 2491, 2482, 2482, 2485, 2485, 2486, 2486, - 2483, 2487, 2487, 2488, 2488, 2490, 2489, 2493, 2494, 2495, - 2490, 0, 2492, 2491, 2497, 2497, 2493, 2498, 2499, 2502, - 2498, 2501, 2501, 2503, 2503, 2504, 2502, 2511, 2494, 2495, - 2504, 2506, 2506, 2507, 2508, 2509, 2499, 2512, 2512, 2514, - 2515, 2517, 2507, 2508, 2509, 2511, 2513, 2516, 2514, 2518, - 2513, 2522, 2516, 2516, 2517, 2515, 2522, 2526, 2518, 2523, - 2523, 2525, 2525, 2527, 2528, 2530, 2531, 2534, 2535, 2536, - 2537, 2526, 2539, 2541, 2530, 2543, 2537, 2535, 2531, 2559, - 2543, 2544, 2528, 0, 2539, 2559, 2544, 2546, 2527, 2536, + 2483, 2474, 2480, 2480, 2473, 2484, 2485, 2486, 2488, 2488, + 2487, 2484, 2485, 2481, 2487, 2493, 2482, 2491, 2494, 2496, + 2483, 2494, 2491, 2493, 2497, 2498, 2499, 2497, 2500, 2501, + 0, 2499, 2486, 2502, 2503, 2503, 2504, 2505, 2506, 2507, + 2505, 2510, 2498, 2498, 2496, 2508, 2500, 2502, 2505, 2501, + 2504, 2509, 2506, 2508, 2511, 2511, 2509, 2509, 2507, 2516, + 2510, 2512, 2512, 2513, 2513, 2514, 2514, 2515, 2515, 2517, + 2518, 2519, 2520, 2521, 2517, 2516, 2522, 2524, 2524, 2525, + 2526, 2520, 2525, 2528, 2528, 2529, 2530, 2530, 2538, 2531, + 2518, 0, 2529, 2521, 2531, 2534, 2522, 2519, 2526, 2533, - 2545, 2545, 2534, 2548, 2541, 2555, 2546, 2556, 2548, 2549, - 2549, 2551, 2551, 2549, 2552, 2552, 2553, 2553, 2554, 2557, - 2562, 2562, 2563, 2560, 2557, 2555, 2556, 2554, 2560, 2561, - 2564, 2565, 2566, 2567, 2561, 2568, 2565, 2569, 2569, 2567, - 2563, 2572, 2571, 2573, 2575, 2575, 2577, 2582, 2579, 2578, - 2566, 2564, 2579, 2581, 2585, 2580, 2572, 2583, 2587, 2577, - 2568, 2571, 2578, 2573, 2580, 2583, 2582, 2584, 2592, 2581, - 2586, 2586, 2584, 2589, 2589, 2590, 2590, 2587, 2594, 2594, - 2585, 2596, 2597, 2598, 2602, 2599, 2601, 2601, 2603, 2592, - 2599, 2604, 2606, 2606, 2607, 2608, 2608, 2596, 2597, 2598, + 2533, 2535, 2536, 2541, 2534, 2540, 2538, 2539, 2539, 2540, + 2535, 2536, 2541, 2542, 2543, 2545, 2544, 2549, 2553, 2543, + 2543, 2554, 2549, 2555, 2545, 2550, 2550, 2557, 2542, 2544, + 2552, 2552, 2553, 2558, 2561, 2562, 2557, 2563, 2566, 2568, + 0, 2555, 2564, 2614, 2562, 2558, 2554, 2570, 2564, 2571, + 2566, 2614, 2570, 2573, 2571, 2572, 2572, 2563, 2575, 2561, + 2568, 2582, 2573, 2575, 2576, 2576, 2578, 2578, 2576, 2579, + 2579, 2580, 2580, 2581, 2583, 2584, 2590, 2586, 2591, 2587, + 2584, 2582, 2581, 2586, 2587, 2588, 2589, 2589, 2593, 2594, + 2588, 2592, 2595, 2583, 2590, 2594, 2592, 2596, 2596, 2591, - 2611, 2612, 2615, 2615, 2602, 2616, 2616, 2612, 2607, 2613, - 2604, 2603, 2617, 2619, 2613, 2618, 2618, 2620, 2621, 2622, - 2611, 2623, 2624, 2625, 2619, 2622, 2620, 2626, 2626, 2632, - 2627, 2633, 2617, 2627, 2624, 2618, 2628, 2628, 2621, 2634, - 2623, 2632, 2637, 2625, 2638, 2634, 2635, 2635, 2637, 2636, - 2640, 2633, 2636, 2641, 2642, 2640, 2648, 2643, 2641, 2644, - 2645, 2645, 2638, 2643, 2647, 2647, 2651, 2651, 2654, 2649, - 2652, 2652, 2666, 2642, 2653, 2648, 2644, 2644, 2649, 2653, - 2655, 2664, 2654, 2656, 2656, 2655, 2657, 2657, 2658, 2658, - 2659, 2661, 2661, 2667, 2666, 2659, 2668, 2669, 2669, 2672, + 2598, 2602, 2599, 2600, 2598, 2604, 2593, 2599, 2600, 2601, + 2601, 2603, 2606, 2606, 2608, 2609, 2612, 2595, 2610, 2613, + 2602, 2611, 2610, 2616, 2615, 2604, 2603, 2608, 2609, 2615, + 2611, 2618, 2612, 2617, 2617, 2620, 2620, 2623, 2613, 2621, + 2621, 2625, 2625, 2627, 2628, 2629, 2630, 2632, 2632, 2616, + 2618, 2630, 2633, 2634, 2635, 2637, 2637, 2638, 2623, 2627, + 2628, 2629, 2639, 2639, 2642, 2644, 2645, 2648, 2643, 2652, + 2644, 2638, 2633, 2635, 2643, 2650, 2634, 2646, 2646, 2647, + 2647, 2649, 2649, 2651, 2642, 2653, 2650, 2648, 2645, 2652, + 2654, 2653, 2651, 2655, 2656, 2657, 2657, 2658, 2659, 2659, - 2664, 2671, 2671, 2673, 2677, 2674, 2675, 2675, 2678, 2740, - 2677, 2679, 2680, 2672, 2674, 2667, 2740, 2680, 2668, 2683, - 2683, 2685, 2685, 2673, 2686, 2687, 2688, 2690, 2678, 2686, - 2679, 2689, 2688, 2691, 2691, 2690, 2692, 2694, 2695, 2687, - 2696, 2692, 2697, 2689, 2698, 2696, 2701, 2700, 2702, 2703, - 2698, 2705, 2704, 0, 2697, 2700, 2706, 2694, 2695, 2707, - 2717, 2708, 2711, 2712, 2717, 2701, 2708, 2705, 2702, 2703, - 2704, 2715, 2715, 2706, 2706, 2727, 2712, 2716, 2716, 2727, - 2707, 2733, 2711, 2721, 2721, 2723, 2723, 2724, 2724, 2730, - 2724, 2725, 2725, 2734, 2725, 2726, 2726, 2731, 2726, 2729, + 2658, 2649, 2664, 2663, 2665, 2655, 2666, 2666, 2667, 2654, + 2665, 2667, 2668, 2669, 2656, 2663, 2671, 2673, 2668, 2672, + 2674, 2671, 2664, 2675, 2672, 2678, 2674, 2676, 2676, 2679, + 2680, 2669, 2681, 2682, 2682, 2683, 2673, 2678, 2689, 2684, + 2675, 2675, 2686, 2686, 0, 2681, 2688, 2679, 2684, 2687, + 2687, 2688, 2689, 2690, 2683, 2680, 2691, 2691, 2690, 2692, + 2692, 2693, 2693, 2694, 2696, 2696, 2699, 2701, 2694, 2702, + 2703, 2704, 2704, 2706, 2706, 2708, 2707, 2709, 2710, 2710, + 2713, 2712, 2714, 2715, 0, 2699, 2709, 2712, 2715, 2701, + 2707, 2702, 2703, 2718, 2718, 2708, 2720, 2720, 2721, 2722, - 2729, 2733, 2739, 2735, 2736, 2736, 2741, 2730, 2735, 2742, - 2741, 2731, 2745, 2734, 2743, 2746, 2747, 2747, 2742, 2748, - 2748, 2749, 2749, 2750, 2746, 2752, 2751, 2739, 2755, 2743, - 2745, 2751, 2756, 2754, 2752, 2753, 2757, 2752, 2750, 2754, - 2753, 2753, 2760, 2758, 2759, 2761, 2761, 2756, 2758, 2759, - 2762, 2765, 2765, 2755, 2831, 2762, 2831, 2757, 2768, 2768, - 2780, 2760, 2769, 2769, 2770, 2770, 2771, 2771, 2772, 2772, - 2773, 2773, 2774, 2774, 2776, 2777, 2777, 2778, 2779, 2782, - 2780, 2783, 2783, 2776, 2784, 2786, 2778, 2785, 2787, 2787, - 2779, 2788, 2789, 2789, 2792, 2794, 2796, 2786, 2782, 2784, + 2713, 2714, 2723, 2721, 2724, 2729, 2725, 2727, 2723, 2726, + 2726, 2730, 2727, 2722, 2725, 2731, 2724, 2732, 2733, 2735, + 2731, 2736, 2737, 2738, 2733, 2729, 2739, 2735, 2746, 2732, + 2740, 2730, 2741, 2742, 2743, 2750, 2745, 2754, 2754, 2743, + 2736, 2745, 2737, 2738, 2739, 2747, 2740, 2748, 2746, 2741, + 2741, 2747, 2748, 2751, 2742, 2750, 2755, 2755, 2756, 2760, + 2760, 2766, 2756, 2762, 2762, 2766, 2751, 2763, 2763, 2769, + 2763, 2764, 2764, 2772, 2764, 2765, 2765, 2770, 2765, 2768, + 2768, 2773, 2778, 2774, 2775, 2775, 2780, 2769, 2774, 2779, + 2780, 2770, 2793, 2772, 2781, 2782, 2779, 2784, 2793, 2785, - 2785, 2793, 2795, 2795, 2793, 2798, 2788, 2799, 2798, 2800, - 2801, 2802, 2792, 2799, 2796, 2801, 2803, 2804, 2817, 2815, - 2806, 2794, 2815, 2800, 2818, 2818, 2819, 2819, 2820, 2820, - 2802, 2817, 2822, 2804, 2803, 2806, 2823, 2824, 2825, 2826, - 2828, 2824, 2830, 2829, 2832, 2823, 2835, 2830, 2833, 2833, - 2836, 2834, 2838, 2826, 2829, 2822, 2837, 2840, 2825, 2832, - 2839, 2841, 2842, 2828, 2834, 2835, 2846, 2842, 2836, 2847, - 2848, 2848, 2837, 2849, 2854, 2839, 2855, 2838, 2840, 2859, - 2846, 2841, 2849, 2850, 2850, 2851, 2851, 2852, 2852, 2847, - 2853, 2853, 2856, 2854, 2857, 2856, 2855, 2858, 2860, 2857, + 2819, 2773, 2789, 2781, 2786, 2786, 2794, 2778, 2785, 2819, + 2782, 2787, 2787, 2788, 2788, 2784, 2790, 2789, 2791, 2792, + 2795, 2790, 2796, 2797, 2792, 2792, 2799, 2791, 2797, 2798, + 2791, 2794, 2800, 2800, 2798, 2795, 2801, 2871, 2802, 2803, + 2803, 2871, 2801, 2796, 2802, 2799, 2804, 2804, 2805, 2808, + 2808, 2811, 2811, 2805, 2812, 2812, 2813, 2813, 2814, 2814, + 2815, 2815, 2816, 2816, 2817, 2817, 2820, 2820, 2821, 2822, + 2823, 2827, 2825, 2826, 2826, 2828, 2835, 2821, 2830, 2830, + 2829, 2822, 2831, 2832, 2832, 2837, 2827, 2839, 2828, 2842, + 2823, 2825, 2829, 2836, 2835, 2842, 2836, 2831, 2838, 2838, - 2861, 2862, 2858, 2863, 2859, 2865, 2861, 2864, 2864, 2866, - 2867, 2867, 2869, 2860, 2871, 2862, 2874, 2874, 2875, 2875, - 2865, 2876, 2877, 2863, 2878, 2879, 2880, 2869, 2866, 2876, - 2878, 2879, 2871, 2881, 2882, 2883, 2883, 2885, 2888, 2886, - 2880, 2877, 2891, 2889, 2892, 2893, 2881, 2889, 2894, 2892, - 2895, 2896, 2888, 2882, 2900, 2897, 0, 2901, 2885, 2886, - 2897, 2894, 2891, 2895, 2893, 2902, 2898, 2903, 2903, 2910, - 2896, 2898, 2904, 2905, 2900, 2901, 0, 2904, 2907, 2905, - 2906, 2906, 2908, 2907, 2902, 2909, 2911, 2908, 2910, 2917, - 2909, 2913, 2911, 2912, 2912, 2916, 2913, 2914, 2914, 2916, + 2841, 2843, 2844, 2841, 2845, 2839, 2846, 2844, 2849, 2847, + 2850, 2837, 2853, 2862, 2849, 2843, 2862, 2864, 2869, 2850, + 2865, 2865, 2872, 2845, 2846, 2847, 2870, 2853, 2866, 2866, + 2864, 2867, 2867, 2873, 2875, 2870, 2879, 2876, 2877, 2880, + 2880, 2869, 2872, 2877, 2878, 2881, 2878, 2873, 2876, 2882, + 2884, 2879, 2883, 2885, 2886, 2887, 2889, 2875, 2881, 2888, + 2890, 2895, 2891, 2896, 2887, 2898, 2884, 2891, 2882, 2886, + 2883, 2888, 2897, 2897, 2898, 2895, 2903, 2889, 2885, 2904, + 2890, 2899, 2899, 2896, 2900, 2900, 2901, 2901, 2902, 2902, + 2905, 2906, 2907, 2905, 2908, 2903, 2906, 2907, 2909, 2904, - 2918, 2919, 2920, 2921, 2922, 2923, 2930, 2918, 2917, 2921, - 2925, 2925, 2927, 2927, 2929, 2928, 2931, 2932, 2923, 2929, - 2919, 2920, 2937, 2922, 2928, 2930, 2934, 2928, 2933, 2933, - 2932, 2934, 2935, 2938, 2938, 2931, 2939, 2940, 2940, 2941, - 2941, 2942, 2943, 2944, 2951, 2935, 2942, 2946, 2937, 2943, - 2945, 2945, 2946, 2949, 2947, 2939, 2947, 2948, 2948, 2950, - 2949, 2953, 2944, 2951, 2952, 2956, 2950, 2955, 2955, 2952, - 2958, 2959, 2960, 2961, 2965, 2958, 2959, 2962, 2962, 2966, - 2953, 2964, 2964, 2969, 2956, 2967, 2967, 2968, 2968, 2979, - 2969, 2960, 2961, 2965, 2971, 2971, 2972, 2972, 2966, 2973, + 2910, 2911, 2912, 2913, 2914, 2916, 2910, 2917, 2913, 2915, + 2915, 2918, 2918, 2909, 2912, 2911, 2920, 2922, 2928, 2908, + 2916, 2925, 2925, 2929, 2914, 2927, 2917, 2926, 2926, 2929, + 2930, 2920, 2931, 2927, 2932, 2922, 2930, 2928, 2933, 2934, + 2935, 2935, 2936, 2936, 2934, 2938, 2931, 2932, 2939, 2941, + 2942, 2944, 2947, 2945, 2942, 2946, 2948, 2933, 2945, 2949, + 2952, 2952, 2950, 2941, 2955, 2947, 2938, 2950, 2939, 2948, + 2951, 2944, 2956, 2957, 2946, 2951, 2958, 2958, 2949, 2965, + 2959, 2960, 2961, 2961, 2955, 2959, 2962, 2960, 2963, 2964, + 2956, 2962, 2957, 2963, 2964, 2966, 2968, 2968, 2965, 2969, - 2975, 2980, 2978, 2981, 2981, 2975, 2973, 2978, 2979, 2982, - 2982, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2980, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2987, 2987, - 2987, 2987, 2987, 2987, 2987, 2988, 2988, 2988, 2988, 2988, - 2988, 2988, 2989, 2989, 2989, 2989, 2989, 2989, 2989, 2990, - 2990, 2990, 2990, 2990, 2990, 2990, 2992, 2992, 0, 2992, - 2992, 2992, 2992, 2993, 2993, 0, 0, 0, 2993, 2993, - 2994, 2994, 0, 0, 2994, 0, 2994, 2995, 0, 0, - 0, 0, 0, 2995, 2996, 2996, 0, 0, 0, 2996, - 2996, 2997, 0, 0, 0, 0, 0, 2997, 2998, 2998, + 2973, 2966, 2970, 2970, 2969, 2972, 2974, 2975, 2976, 2972, + 2977, 2978, 2979, 2974, 2981, 2981, 2977, 2983, 2983, 2973, + 2984, 2986, 2987, 2985, 2988, 2979, 2975, 2976, 2985, 2984, + 2978, 2990, 2984, 2989, 2989, 2991, 2990, 2988, 2993, 2995, + 2986, 2987, 2994, 2994, 2996, 2996, 2997, 2997, 2991, 2998, + 2999, 3000, 3001, 3001, 2998, 3002, 3007, 2999, 2995, 3003, + 3002, 3003, 3004, 3004, 2993, 3005, 3006, 3009, 3012, 3008, + 3000, 3016, 3005, 3006, 3008, 3007, 3011, 3011, 3014, 3015, + 3017, 3018, 3018, 3014, 3015, 3021, 3009, 3012, 3020, 3020, + 3016, 3022, 3023, 3023, 3024, 3024, 3025, 3027, 3027, 3017, - 0, 2998, 2998, 2998, 2998, 2999, 2999, 0, 2999, 2999, - 2999, 2999, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985 + 3028, 3028, 3029, 3025, 3021, 3035, 3031, 3034, 3036, 3029, + 3022, 3031, 3034, 3037, 3037, 3038, 3038, 0, 0, 0, + 0, 0, 0, 0, 3035, 0, 0, 3036, 3042, 3042, + 3042, 3042, 3042, 3042, 3042, 3043, 3043, 3043, 3043, 3043, + 3043, 3043, 3044, 3044, 3044, 3044, 3044, 3044, 3044, 3045, + 3045, 3045, 3045, 3045, 3045, 3045, 3046, 3046, 3046, 3046, + 3046, 3046, 3046, 3048, 3048, 0, 3048, 3048, 3048, 3048, + 3049, 3049, 0, 0, 0, 3049, 3049, 3050, 3050, 0, + 0, 3050, 0, 3050, 3051, 0, 0, 0, 0, 0, + 3051, 3052, 3052, 0, 0, 0, 3052, 3052, 3053, 0, + + 0, 0, 0, 0, 3053, 3054, 3054, 0, 3054, 3054, + 3054, 3054, 3055, 3055, 0, 3055, 3055, 3055, 3055, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, + 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041, 3041 } ; static yy_state_type yy_last_accepting_state; @@ -2895,7 +2936,7 @@ static void config_end_include(void) } #endif -#line 2896 "" +#line 2937 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2904,9 +2945,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2905 "" +#line 2946 "" -#line 2907 "" +#line 2948 "" #define INITIAL 0 #define quotedstring 1 @@ -3128,7 +3169,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3129 "" +#line 3170 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3161,13 +3202,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2986 ) + if ( yy_current_state >= 3042 ) 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] != 5813 ); + while ( yy_base[yy_current_state] != 5920 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4318,331 +4359,363 @@ YY_RULE_SETUP case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 230: YY_RULE_SETUP #line 439 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 231: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 232: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } +#line 442 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 233: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } +#line 443 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 234: YY_RULE_SETUP -#line 447 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } +#line 444 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 235: YY_RULE_SETUP -#line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 445 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 236: YY_RULE_SETUP -#line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 447 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 237: YY_RULE_SETUP -#line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 449 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 238: YY_RULE_SETUP -#line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +#line 451 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 239: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 240: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +#line 455 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +#line 457 "./util/configlexer.lex" +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 242: YY_RULE_SETUP -#line 456 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +#line 458 "./util/configlexer.lex" +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 243: YY_RULE_SETUP -#line 457 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +#line 459 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 244: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +#line 460 "./util/configlexer.lex" +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 245: YY_RULE_SETUP -#line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +#line 461 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 246: YY_RULE_SETUP -#line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +#line 462 "./util/configlexer.lex" +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 247: YY_RULE_SETUP -#line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +#line 463 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 248: YY_RULE_SETUP -#line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +#line 464 "./util/configlexer.lex" +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 249: YY_RULE_SETUP -#line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +#line 465 "./util/configlexer.lex" +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 250: YY_RULE_SETUP -#line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +#line 466 "./util/configlexer.lex" +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 251: YY_RULE_SETUP -#line 465 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +#line 467 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 252: YY_RULE_SETUP -#line 466 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +#line 468 "./util/configlexer.lex" +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 253: YY_RULE_SETUP -#line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +#line 469 "./util/configlexer.lex" +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 254: YY_RULE_SETUP -#line 468 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +#line 470 "./util/configlexer.lex" +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 255: YY_RULE_SETUP -#line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +#line 471 "./util/configlexer.lex" +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 256: YY_RULE_SETUP -#line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +#line 472 "./util/configlexer.lex" +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 257: YY_RULE_SETUP -#line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +#line 473 "./util/configlexer.lex" +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 258: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +#line 474 "./util/configlexer.lex" +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 259: YY_RULE_SETUP -#line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +#line 475 "./util/configlexer.lex" +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 260: YY_RULE_SETUP -#line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +#line 476 "./util/configlexer.lex" +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 261: YY_RULE_SETUP -#line 475 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +#line 477 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 262: YY_RULE_SETUP -#line 477 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 478 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 268: YY_RULE_SETUP -#line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +#line 485 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 269: YY_RULE_SETUP -#line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +#line 487 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 270: YY_RULE_SETUP -#line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +#line 488 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 271: YY_RULE_SETUP -#line 487 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +#line 489 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 272: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +#line 490 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 273: YY_RULE_SETUP -#line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +#line 491 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 274: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +#line 492 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 275: YY_RULE_SETUP -#line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +#line 493 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 276: YY_RULE_SETUP -#line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +#line 494 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 277: YY_RULE_SETUP -#line 493 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +#line 495 "./util/configlexer.lex" +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 278: YY_RULE_SETUP -#line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +#line 496 "./util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 279: YY_RULE_SETUP -#line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +#line 497 "./util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 280: YY_RULE_SETUP -#line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +#line 498 "./util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 281: YY_RULE_SETUP -#line 497 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +#line 499 "./util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 282: -/* rule 282 can match eol */ YY_RULE_SETUP -#line 498 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +#line 500 "./util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" +{ YDVAR(0, VAR_IPSET) } + YY_BREAK +case 284: +YY_RULE_SETUP +#line 502 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V4) } + YY_BREAK +case 285: +YY_RULE_SETUP +#line 503 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V6) } + YY_BREAK +case 286: +YY_RULE_SETUP +#line 504 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 287: +YY_RULE_SETUP +#line 505 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 288: +/* rule 288 can match eol */ +YY_RULE_SETUP +#line 506 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 289: +YY_RULE_SETUP +#line 509 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 502 "./util/configlexer.lex" +#line 510 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 284: +case 290: YY_RULE_SETUP -#line 507 "./util/configlexer.lex" +#line 515 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 285: -/* rule 285 can match eol */ +case 291: +/* rule 291 can match eol */ YY_RULE_SETUP -#line 508 "./util/configlexer.lex" +#line 516 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 286: +case 292: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" +#line 518 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4655,34 +4728,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 287: +case 293: YY_RULE_SETUP -#line 522 "./util/configlexer.lex" +#line 530 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 523 "./util/configlexer.lex" +#line 531 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 288: +case 294: YY_RULE_SETUP -#line 528 "./util/configlexer.lex" +#line 536 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 289: -/* rule 289 can match eol */ +case 295: +/* rule 295 can match eol */ YY_RULE_SETUP -#line 529 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 290: +case 296: YY_RULE_SETUP -#line 531 "./util/configlexer.lex" +#line 539 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4695,38 +4768,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 291: +case 297: YY_RULE_SETUP -#line 543 "./util/configlexer.lex" +#line 551 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 545 "./util/configlexer.lex" +#line 553 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 292: +case 298: YY_RULE_SETUP -#line 549 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 293: -/* rule 293 can match eol */ +case 299: +/* rule 299 can match eol */ YY_RULE_SETUP -#line 550 "./util/configlexer.lex" +#line 558 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 294: +case 300: YY_RULE_SETUP -#line 551 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 295: +case 301: YY_RULE_SETUP -#line 552 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4734,27 +4807,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 557 "./util/configlexer.lex" +#line 565 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 296: +case 302: YY_RULE_SETUP -#line 561 "./util/configlexer.lex" +#line 569 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 297: -/* rule 297 can match eol */ +case 303: +/* rule 303 can match eol */ YY_RULE_SETUP -#line 562 "./util/configlexer.lex" +#line 570 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 298: +case 304: YY_RULE_SETUP -#line 564 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4764,7 +4837,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 570 "./util/configlexer.lex" +#line 578 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4776,33 +4849,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 299: +case 305: YY_RULE_SETUP -#line 581 "./util/configlexer.lex" +#line 589 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 300: +case 306: YY_RULE_SETUP -#line 585 "./util/configlexer.lex" +#line 593 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 301: +case 307: YY_RULE_SETUP -#line 589 "./util/configlexer.lex" +#line 597 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 302: +case 308: YY_RULE_SETUP -#line 593 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4803 "" +#line 4876 "" case YY_END_OF_BUFFER: { @@ -5097,7 +5170,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2986 ) + if ( yy_current_state >= 3042 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5125,11 +5198,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2986 ) + if ( yy_current_state >= 3042 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2985); + yy_is_jam = (yy_current_state == 3041); return yy_is_jam ? 0 : yy_current_state; } @@ -5768,6 +5841,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 593 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index deedffa58..8832ab7a0 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -430,6 +430,14 @@ local-zone-override{COLON} { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } dnstap{COLON} { YDVAR(0, VAR_DNSTAP) } dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) } dnstap-socket-path{COLON} { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +dnstap-ip{COLON} { YDVAR(1, VAR_DNSTAP_IP) } +dnstap-tls{COLON} { YDVAR(1, VAR_DNSTAP_TLS) } +dnstap-tls-server-name{COLON} { YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +dnstap-tls-cert-bundle{COLON} { YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +dnstap-tls-client-key-file{COLON} { + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +dnstap-tls-client-cert-file{COLON} { + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } dnstap-send-identity{COLON} { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } dnstap-send-version{COLON} { YDVAR(1, VAR_DNSTAP_SEND_VERSION) } dnstap-identity{COLON} { YDVAR(1, VAR_DNSTAP_IDENTITY) } diff --git a/util/configparser.c b/util/configparser.c index 69ee1cc1c..d02cc6dfc 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -285,130 +285,136 @@ extern int yydebug; VAR_DNSTAP = 406, VAR_DNSTAP_ENABLE = 407, VAR_DNSTAP_SOCKET_PATH = 408, - VAR_DNSTAP_SEND_IDENTITY = 409, - VAR_DNSTAP_SEND_VERSION = 410, - VAR_DNSTAP_IDENTITY = 411, - VAR_DNSTAP_VERSION = 412, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 413, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 414, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 415, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 416, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 417, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 418, - VAR_RESPONSE_IP_TAG = 419, - VAR_RESPONSE_IP = 420, - VAR_RESPONSE_IP_DATA = 421, - VAR_HARDEN_ALGO_DOWNGRADE = 422, - VAR_IP_TRANSPARENT = 423, - VAR_DISABLE_DNSSEC_LAME_CHECK = 424, - VAR_IP_RATELIMIT = 425, - VAR_IP_RATELIMIT_SLABS = 426, - VAR_IP_RATELIMIT_SIZE = 427, - VAR_RATELIMIT = 428, - VAR_RATELIMIT_SLABS = 429, - VAR_RATELIMIT_SIZE = 430, - VAR_RATELIMIT_FOR_DOMAIN = 431, - VAR_RATELIMIT_BELOW_DOMAIN = 432, - VAR_IP_RATELIMIT_FACTOR = 433, - VAR_RATELIMIT_FACTOR = 434, - VAR_SEND_CLIENT_SUBNET = 435, - VAR_CLIENT_SUBNET_ZONE = 436, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 437, - VAR_CLIENT_SUBNET_OPCODE = 438, - VAR_MAX_CLIENT_SUBNET_IPV4 = 439, - VAR_MAX_CLIENT_SUBNET_IPV6 = 440, - VAR_MIN_CLIENT_SUBNET_IPV4 = 441, - VAR_MIN_CLIENT_SUBNET_IPV6 = 442, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 443, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 444, - VAR_CAPS_WHITELIST = 445, - VAR_CACHE_MAX_NEGATIVE_TTL = 446, - VAR_PERMIT_SMALL_HOLDDOWN = 447, - VAR_QNAME_MINIMISATION = 448, - VAR_QNAME_MINIMISATION_STRICT = 449, - VAR_IP_FREEBIND = 450, - VAR_DEFINE_TAG = 451, - VAR_LOCAL_ZONE_TAG = 452, - VAR_ACCESS_CONTROL_TAG = 453, - VAR_LOCAL_ZONE_OVERRIDE = 454, - VAR_ACCESS_CONTROL_TAG_ACTION = 455, - VAR_ACCESS_CONTROL_TAG_DATA = 456, - VAR_VIEW = 457, - VAR_ACCESS_CONTROL_VIEW = 458, - VAR_VIEW_FIRST = 459, - VAR_SERVE_EXPIRED = 460, - VAR_SERVE_EXPIRED_TTL = 461, - VAR_SERVE_EXPIRED_TTL_RESET = 462, - VAR_SERVE_EXPIRED_REPLY_TTL = 463, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 464, - VAR_FAKE_DSA = 465, - VAR_FAKE_SHA1 = 466, - VAR_LOG_IDENTITY = 467, - VAR_HIDE_TRUSTANCHOR = 468, - VAR_TRUST_ANCHOR_SIGNALING = 469, - VAR_AGGRESSIVE_NSEC = 470, - VAR_USE_SYSTEMD = 471, - VAR_SHM_ENABLE = 472, - VAR_SHM_KEY = 473, - VAR_ROOT_KEY_SENTINEL = 474, - VAR_DNSCRYPT = 475, - VAR_DNSCRYPT_ENABLE = 476, - VAR_DNSCRYPT_PORT = 477, - VAR_DNSCRYPT_PROVIDER = 478, - VAR_DNSCRYPT_SECRET_KEY = 479, - VAR_DNSCRYPT_PROVIDER_CERT = 480, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 481, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 482, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 483, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 484, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 485, - VAR_IPSECMOD_ENABLED = 486, - VAR_IPSECMOD_HOOK = 487, - VAR_IPSECMOD_IGNORE_BOGUS = 488, - VAR_IPSECMOD_MAX_TTL = 489, - VAR_IPSECMOD_WHITELIST = 490, - VAR_IPSECMOD_STRICT = 491, - VAR_CACHEDB = 492, - VAR_CACHEDB_BACKEND = 493, - VAR_CACHEDB_SECRETSEED = 494, - VAR_CACHEDB_REDISHOST = 495, - VAR_CACHEDB_REDISPORT = 496, - VAR_CACHEDB_REDISTIMEOUT = 497, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 498, - VAR_FOR_UPSTREAM = 499, - VAR_AUTH_ZONE = 500, - VAR_ZONEFILE = 501, - VAR_MASTER = 502, - VAR_URL = 503, - VAR_FOR_DOWNSTREAM = 504, - VAR_FALLBACK_ENABLED = 505, - VAR_TLS_ADDITIONAL_PORT = 506, - VAR_LOW_RTT = 507, - VAR_LOW_RTT_PERMIL = 508, - VAR_FAST_SERVER_PERMIL = 509, - VAR_FAST_SERVER_NUM = 510, - VAR_ALLOW_NOTIFY = 511, - VAR_TLS_WIN_CERT = 512, - VAR_TCP_CONNECTION_LIMIT = 513, - VAR_FORWARD_NO_CACHE = 514, - VAR_STUB_NO_CACHE = 515, - VAR_LOG_SERVFAIL = 516, - VAR_DENY_ANY = 517, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 518, - VAR_LOG_TAG_QUERYREPLY = 519, - VAR_STREAM_WAIT_SIZE = 520, - VAR_TLS_CIPHERS = 521, - VAR_TLS_CIPHERSUITES = 522, - VAR_IPSET = 523, - VAR_IPSET_NAME_V4 = 524, - VAR_IPSET_NAME_V6 = 525, - VAR_TLS_SESSION_TICKET_KEYS = 526, - VAR_RPZ = 527, - VAR_TAGS = 528, - VAR_RPZ_ACTION_OVERRIDE = 529, - VAR_RPZ_CNAME_OVERRIDE = 530, - VAR_RPZ_LOG = 531, - VAR_RPZ_LOG_NAME = 532 + VAR_DNSTAP_IP = 409, + VAR_DNSTAP_TLS = 410, + VAR_DNSTAP_TLS_SERVER_NAME = 411, + VAR_DNSTAP_TLS_CERT_BUNDLE = 412, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 413, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 414, + VAR_DNSTAP_SEND_IDENTITY = 415, + VAR_DNSTAP_SEND_VERSION = 416, + VAR_DNSTAP_IDENTITY = 417, + VAR_DNSTAP_VERSION = 418, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 419, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 420, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 421, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 422, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 423, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 424, + VAR_RESPONSE_IP_TAG = 425, + VAR_RESPONSE_IP = 426, + VAR_RESPONSE_IP_DATA = 427, + VAR_HARDEN_ALGO_DOWNGRADE = 428, + VAR_IP_TRANSPARENT = 429, + VAR_DISABLE_DNSSEC_LAME_CHECK = 430, + VAR_IP_RATELIMIT = 431, + VAR_IP_RATELIMIT_SLABS = 432, + VAR_IP_RATELIMIT_SIZE = 433, + VAR_RATELIMIT = 434, + VAR_RATELIMIT_SLABS = 435, + VAR_RATELIMIT_SIZE = 436, + VAR_RATELIMIT_FOR_DOMAIN = 437, + VAR_RATELIMIT_BELOW_DOMAIN = 438, + VAR_IP_RATELIMIT_FACTOR = 439, + VAR_RATELIMIT_FACTOR = 440, + VAR_SEND_CLIENT_SUBNET = 441, + VAR_CLIENT_SUBNET_ZONE = 442, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 443, + VAR_CLIENT_SUBNET_OPCODE = 444, + VAR_MAX_CLIENT_SUBNET_IPV4 = 445, + VAR_MAX_CLIENT_SUBNET_IPV6 = 446, + VAR_MIN_CLIENT_SUBNET_IPV4 = 447, + VAR_MIN_CLIENT_SUBNET_IPV6 = 448, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 449, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 450, + VAR_CAPS_WHITELIST = 451, + VAR_CACHE_MAX_NEGATIVE_TTL = 452, + VAR_PERMIT_SMALL_HOLDDOWN = 453, + VAR_QNAME_MINIMISATION = 454, + VAR_QNAME_MINIMISATION_STRICT = 455, + VAR_IP_FREEBIND = 456, + VAR_DEFINE_TAG = 457, + VAR_LOCAL_ZONE_TAG = 458, + VAR_ACCESS_CONTROL_TAG = 459, + VAR_LOCAL_ZONE_OVERRIDE = 460, + VAR_ACCESS_CONTROL_TAG_ACTION = 461, + VAR_ACCESS_CONTROL_TAG_DATA = 462, + VAR_VIEW = 463, + VAR_ACCESS_CONTROL_VIEW = 464, + VAR_VIEW_FIRST = 465, + VAR_SERVE_EXPIRED = 466, + VAR_SERVE_EXPIRED_TTL = 467, + VAR_SERVE_EXPIRED_TTL_RESET = 468, + VAR_SERVE_EXPIRED_REPLY_TTL = 469, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 470, + VAR_FAKE_DSA = 471, + VAR_FAKE_SHA1 = 472, + VAR_LOG_IDENTITY = 473, + VAR_HIDE_TRUSTANCHOR = 474, + VAR_TRUST_ANCHOR_SIGNALING = 475, + VAR_AGGRESSIVE_NSEC = 476, + VAR_USE_SYSTEMD = 477, + VAR_SHM_ENABLE = 478, + VAR_SHM_KEY = 479, + VAR_ROOT_KEY_SENTINEL = 480, + VAR_DNSCRYPT = 481, + VAR_DNSCRYPT_ENABLE = 482, + VAR_DNSCRYPT_PORT = 483, + VAR_DNSCRYPT_PROVIDER = 484, + VAR_DNSCRYPT_SECRET_KEY = 485, + VAR_DNSCRYPT_PROVIDER_CERT = 486, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 487, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 488, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 489, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 490, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 491, + VAR_IPSECMOD_ENABLED = 492, + VAR_IPSECMOD_HOOK = 493, + VAR_IPSECMOD_IGNORE_BOGUS = 494, + VAR_IPSECMOD_MAX_TTL = 495, + VAR_IPSECMOD_WHITELIST = 496, + VAR_IPSECMOD_STRICT = 497, + VAR_CACHEDB = 498, + VAR_CACHEDB_BACKEND = 499, + VAR_CACHEDB_SECRETSEED = 500, + VAR_CACHEDB_REDISHOST = 501, + VAR_CACHEDB_REDISPORT = 502, + VAR_CACHEDB_REDISTIMEOUT = 503, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 504, + VAR_FOR_UPSTREAM = 505, + VAR_AUTH_ZONE = 506, + VAR_ZONEFILE = 507, + VAR_MASTER = 508, + VAR_URL = 509, + VAR_FOR_DOWNSTREAM = 510, + VAR_FALLBACK_ENABLED = 511, + VAR_TLS_ADDITIONAL_PORT = 512, + VAR_LOW_RTT = 513, + VAR_LOW_RTT_PERMIL = 514, + VAR_FAST_SERVER_PERMIL = 515, + VAR_FAST_SERVER_NUM = 516, + VAR_ALLOW_NOTIFY = 517, + VAR_TLS_WIN_CERT = 518, + VAR_TCP_CONNECTION_LIMIT = 519, + VAR_FORWARD_NO_CACHE = 520, + VAR_STUB_NO_CACHE = 521, + VAR_LOG_SERVFAIL = 522, + VAR_DENY_ANY = 523, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 524, + VAR_LOG_TAG_QUERYREPLY = 525, + VAR_STREAM_WAIT_SIZE = 526, + VAR_TLS_CIPHERS = 527, + VAR_TLS_CIPHERSUITES = 528, + VAR_IPSET = 529, + VAR_IPSET_NAME_V4 = 530, + VAR_IPSET_NAME_V6 = 531, + VAR_TLS_SESSION_TICKET_KEYS = 532, + VAR_RPZ = 533, + VAR_TAGS = 534, + VAR_RPZ_ACTION_OVERRIDE = 535, + VAR_RPZ_CNAME_OVERRIDE = 536, + VAR_RPZ_LOG = 537, + VAR_RPZ_LOG_NAME = 538 }; #endif /* Tokens. */ @@ -563,130 +569,136 @@ extern int yydebug; #define VAR_DNSTAP 406 #define VAR_DNSTAP_ENABLE 407 #define VAR_DNSTAP_SOCKET_PATH 408 -#define VAR_DNSTAP_SEND_IDENTITY 409 -#define VAR_DNSTAP_SEND_VERSION 410 -#define VAR_DNSTAP_IDENTITY 411 -#define VAR_DNSTAP_VERSION 412 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 413 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 414 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 415 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 416 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 417 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 418 -#define VAR_RESPONSE_IP_TAG 419 -#define VAR_RESPONSE_IP 420 -#define VAR_RESPONSE_IP_DATA 421 -#define VAR_HARDEN_ALGO_DOWNGRADE 422 -#define VAR_IP_TRANSPARENT 423 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 424 -#define VAR_IP_RATELIMIT 425 -#define VAR_IP_RATELIMIT_SLABS 426 -#define VAR_IP_RATELIMIT_SIZE 427 -#define VAR_RATELIMIT 428 -#define VAR_RATELIMIT_SLABS 429 -#define VAR_RATELIMIT_SIZE 430 -#define VAR_RATELIMIT_FOR_DOMAIN 431 -#define VAR_RATELIMIT_BELOW_DOMAIN 432 -#define VAR_IP_RATELIMIT_FACTOR 433 -#define VAR_RATELIMIT_FACTOR 434 -#define VAR_SEND_CLIENT_SUBNET 435 -#define VAR_CLIENT_SUBNET_ZONE 436 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 437 -#define VAR_CLIENT_SUBNET_OPCODE 438 -#define VAR_MAX_CLIENT_SUBNET_IPV4 439 -#define VAR_MAX_CLIENT_SUBNET_IPV6 440 -#define VAR_MIN_CLIENT_SUBNET_IPV4 441 -#define VAR_MIN_CLIENT_SUBNET_IPV6 442 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 443 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 444 -#define VAR_CAPS_WHITELIST 445 -#define VAR_CACHE_MAX_NEGATIVE_TTL 446 -#define VAR_PERMIT_SMALL_HOLDDOWN 447 -#define VAR_QNAME_MINIMISATION 448 -#define VAR_QNAME_MINIMISATION_STRICT 449 -#define VAR_IP_FREEBIND 450 -#define VAR_DEFINE_TAG 451 -#define VAR_LOCAL_ZONE_TAG 452 -#define VAR_ACCESS_CONTROL_TAG 453 -#define VAR_LOCAL_ZONE_OVERRIDE 454 -#define VAR_ACCESS_CONTROL_TAG_ACTION 455 -#define VAR_ACCESS_CONTROL_TAG_DATA 456 -#define VAR_VIEW 457 -#define VAR_ACCESS_CONTROL_VIEW 458 -#define VAR_VIEW_FIRST 459 -#define VAR_SERVE_EXPIRED 460 -#define VAR_SERVE_EXPIRED_TTL 461 -#define VAR_SERVE_EXPIRED_TTL_RESET 462 -#define VAR_SERVE_EXPIRED_REPLY_TTL 463 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 464 -#define VAR_FAKE_DSA 465 -#define VAR_FAKE_SHA1 466 -#define VAR_LOG_IDENTITY 467 -#define VAR_HIDE_TRUSTANCHOR 468 -#define VAR_TRUST_ANCHOR_SIGNALING 469 -#define VAR_AGGRESSIVE_NSEC 470 -#define VAR_USE_SYSTEMD 471 -#define VAR_SHM_ENABLE 472 -#define VAR_SHM_KEY 473 -#define VAR_ROOT_KEY_SENTINEL 474 -#define VAR_DNSCRYPT 475 -#define VAR_DNSCRYPT_ENABLE 476 -#define VAR_DNSCRYPT_PORT 477 -#define VAR_DNSCRYPT_PROVIDER 478 -#define VAR_DNSCRYPT_SECRET_KEY 479 -#define VAR_DNSCRYPT_PROVIDER_CERT 480 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 481 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 482 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 483 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 484 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 485 -#define VAR_IPSECMOD_ENABLED 486 -#define VAR_IPSECMOD_HOOK 487 -#define VAR_IPSECMOD_IGNORE_BOGUS 488 -#define VAR_IPSECMOD_MAX_TTL 489 -#define VAR_IPSECMOD_WHITELIST 490 -#define VAR_IPSECMOD_STRICT 491 -#define VAR_CACHEDB 492 -#define VAR_CACHEDB_BACKEND 493 -#define VAR_CACHEDB_SECRETSEED 494 -#define VAR_CACHEDB_REDISHOST 495 -#define VAR_CACHEDB_REDISPORT 496 -#define VAR_CACHEDB_REDISTIMEOUT 497 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 498 -#define VAR_FOR_UPSTREAM 499 -#define VAR_AUTH_ZONE 500 -#define VAR_ZONEFILE 501 -#define VAR_MASTER 502 -#define VAR_URL 503 -#define VAR_FOR_DOWNSTREAM 504 -#define VAR_FALLBACK_ENABLED 505 -#define VAR_TLS_ADDITIONAL_PORT 506 -#define VAR_LOW_RTT 507 -#define VAR_LOW_RTT_PERMIL 508 -#define VAR_FAST_SERVER_PERMIL 509 -#define VAR_FAST_SERVER_NUM 510 -#define VAR_ALLOW_NOTIFY 511 -#define VAR_TLS_WIN_CERT 512 -#define VAR_TCP_CONNECTION_LIMIT 513 -#define VAR_FORWARD_NO_CACHE 514 -#define VAR_STUB_NO_CACHE 515 -#define VAR_LOG_SERVFAIL 516 -#define VAR_DENY_ANY 517 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 518 -#define VAR_LOG_TAG_QUERYREPLY 519 -#define VAR_STREAM_WAIT_SIZE 520 -#define VAR_TLS_CIPHERS 521 -#define VAR_TLS_CIPHERSUITES 522 -#define VAR_IPSET 523 -#define VAR_IPSET_NAME_V4 524 -#define VAR_IPSET_NAME_V6 525 -#define VAR_TLS_SESSION_TICKET_KEYS 526 -#define VAR_RPZ 527 -#define VAR_TAGS 528 -#define VAR_RPZ_ACTION_OVERRIDE 529 -#define VAR_RPZ_CNAME_OVERRIDE 530 -#define VAR_RPZ_LOG 531 -#define VAR_RPZ_LOG_NAME 532 +#define VAR_DNSTAP_IP 409 +#define VAR_DNSTAP_TLS 410 +#define VAR_DNSTAP_TLS_SERVER_NAME 411 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 412 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 413 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 414 +#define VAR_DNSTAP_SEND_IDENTITY 415 +#define VAR_DNSTAP_SEND_VERSION 416 +#define VAR_DNSTAP_IDENTITY 417 +#define VAR_DNSTAP_VERSION 418 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 419 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 420 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 421 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 422 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 423 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 424 +#define VAR_RESPONSE_IP_TAG 425 +#define VAR_RESPONSE_IP 426 +#define VAR_RESPONSE_IP_DATA 427 +#define VAR_HARDEN_ALGO_DOWNGRADE 428 +#define VAR_IP_TRANSPARENT 429 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 430 +#define VAR_IP_RATELIMIT 431 +#define VAR_IP_RATELIMIT_SLABS 432 +#define VAR_IP_RATELIMIT_SIZE 433 +#define VAR_RATELIMIT 434 +#define VAR_RATELIMIT_SLABS 435 +#define VAR_RATELIMIT_SIZE 436 +#define VAR_RATELIMIT_FOR_DOMAIN 437 +#define VAR_RATELIMIT_BELOW_DOMAIN 438 +#define VAR_IP_RATELIMIT_FACTOR 439 +#define VAR_RATELIMIT_FACTOR 440 +#define VAR_SEND_CLIENT_SUBNET 441 +#define VAR_CLIENT_SUBNET_ZONE 442 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 443 +#define VAR_CLIENT_SUBNET_OPCODE 444 +#define VAR_MAX_CLIENT_SUBNET_IPV4 445 +#define VAR_MAX_CLIENT_SUBNET_IPV6 446 +#define VAR_MIN_CLIENT_SUBNET_IPV4 447 +#define VAR_MIN_CLIENT_SUBNET_IPV6 448 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 449 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 450 +#define VAR_CAPS_WHITELIST 451 +#define VAR_CACHE_MAX_NEGATIVE_TTL 452 +#define VAR_PERMIT_SMALL_HOLDDOWN 453 +#define VAR_QNAME_MINIMISATION 454 +#define VAR_QNAME_MINIMISATION_STRICT 455 +#define VAR_IP_FREEBIND 456 +#define VAR_DEFINE_TAG 457 +#define VAR_LOCAL_ZONE_TAG 458 +#define VAR_ACCESS_CONTROL_TAG 459 +#define VAR_LOCAL_ZONE_OVERRIDE 460 +#define VAR_ACCESS_CONTROL_TAG_ACTION 461 +#define VAR_ACCESS_CONTROL_TAG_DATA 462 +#define VAR_VIEW 463 +#define VAR_ACCESS_CONTROL_VIEW 464 +#define VAR_VIEW_FIRST 465 +#define VAR_SERVE_EXPIRED 466 +#define VAR_SERVE_EXPIRED_TTL 467 +#define VAR_SERVE_EXPIRED_TTL_RESET 468 +#define VAR_SERVE_EXPIRED_REPLY_TTL 469 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 470 +#define VAR_FAKE_DSA 471 +#define VAR_FAKE_SHA1 472 +#define VAR_LOG_IDENTITY 473 +#define VAR_HIDE_TRUSTANCHOR 474 +#define VAR_TRUST_ANCHOR_SIGNALING 475 +#define VAR_AGGRESSIVE_NSEC 476 +#define VAR_USE_SYSTEMD 477 +#define VAR_SHM_ENABLE 478 +#define VAR_SHM_KEY 479 +#define VAR_ROOT_KEY_SENTINEL 480 +#define VAR_DNSCRYPT 481 +#define VAR_DNSCRYPT_ENABLE 482 +#define VAR_DNSCRYPT_PORT 483 +#define VAR_DNSCRYPT_PROVIDER 484 +#define VAR_DNSCRYPT_SECRET_KEY 485 +#define VAR_DNSCRYPT_PROVIDER_CERT 486 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 487 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 488 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 489 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 490 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 491 +#define VAR_IPSECMOD_ENABLED 492 +#define VAR_IPSECMOD_HOOK 493 +#define VAR_IPSECMOD_IGNORE_BOGUS 494 +#define VAR_IPSECMOD_MAX_TTL 495 +#define VAR_IPSECMOD_WHITELIST 496 +#define VAR_IPSECMOD_STRICT 497 +#define VAR_CACHEDB 498 +#define VAR_CACHEDB_BACKEND 499 +#define VAR_CACHEDB_SECRETSEED 500 +#define VAR_CACHEDB_REDISHOST 501 +#define VAR_CACHEDB_REDISPORT 502 +#define VAR_CACHEDB_REDISTIMEOUT 503 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 504 +#define VAR_FOR_UPSTREAM 505 +#define VAR_AUTH_ZONE 506 +#define VAR_ZONEFILE 507 +#define VAR_MASTER 508 +#define VAR_URL 509 +#define VAR_FOR_DOWNSTREAM 510 +#define VAR_FALLBACK_ENABLED 511 +#define VAR_TLS_ADDITIONAL_PORT 512 +#define VAR_LOW_RTT 513 +#define VAR_LOW_RTT_PERMIL 514 +#define VAR_FAST_SERVER_PERMIL 515 +#define VAR_FAST_SERVER_NUM 516 +#define VAR_ALLOW_NOTIFY 517 +#define VAR_TLS_WIN_CERT 518 +#define VAR_TCP_CONNECTION_LIMIT 519 +#define VAR_FORWARD_NO_CACHE 520 +#define VAR_STUB_NO_CACHE 521 +#define VAR_LOG_SERVFAIL 522 +#define VAR_DENY_ANY 523 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 524 +#define VAR_LOG_TAG_QUERYREPLY 525 +#define VAR_STREAM_WAIT_SIZE 526 +#define VAR_TLS_CIPHERS 527 +#define VAR_TLS_CIPHERSUITES 528 +#define VAR_IPSET 529 +#define VAR_IPSET_NAME_V4 530 +#define VAR_IPSET_NAME_V6 531 +#define VAR_TLS_SESSION_TICKET_KEYS 532 +#define VAR_RPZ 533 +#define VAR_TAGS 534 +#define VAR_RPZ_ACTION_OVERRIDE 535 +#define VAR_RPZ_CNAME_OVERRIDE 536 +#define VAR_RPZ_LOG 537 +#define VAR_RPZ_LOG_NAME 538 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -696,7 +708,7 @@ union YYSTYPE char* str; -#line 700 "util/configparser.c" +#line 712 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -946,19 +958,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 590 +#define YYLAST 602 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 278 +#define YYNTOKENS 284 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 301 +#define YYNNTS 307 /* YYNRULES -- Number of rules. */ -#define YYNRULES 580 +#define YYNRULES 592 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 863 +#define YYNSTATES 881 #define YYUNDEFTOK 2 -#define YYMAXUTOK 532 +#define YYMAXUTOK 538 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1022,72 +1034,73 @@ static const yytype_uint16 yytranslate[] = 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 + 275, 276, 277, 278, 279, 280, 281, 282, 283 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 175, 175, 175, 176, 176, 177, 177, 178, 178, - 178, 179, 179, 180, 180, 181, 185, 190, 191, 192, - 192, 192, 193, 193, 194, 194, 195, 195, 196, 196, - 196, 197, 197, 198, 198, 198, 199, 199, 199, 200, - 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, - 205, 206, 206, 207, 207, 208, 208, 208, 209, 209, - 209, 210, 210, 210, 211, 211, 212, 212, 213, 213, - 214, 214, 215, 215, 215, 216, 216, 217, 217, 218, - 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, - 222, 223, 223, 224, 224, 225, 225, 226, 226, 227, - 227, 228, 228, 228, 229, 229, 230, 230, 230, 231, - 231, 231, 232, 232, 232, 233, 233, 233, 233, 234, - 235, 235, 235, 236, 236, 236, 237, 237, 238, 238, - 239, 239, 239, 240, 240, 241, 241, 241, 242, 242, - 243, 243, 244, 245, 245, 246, 246, 247, 247, 248, - 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, - 254, 254, 254, 255, 255, 256, 256, 257, 257, 258, - 258, 259, 259, 260, 260, 261, 261, 261, 262, 262, - 262, 263, 263, 263, 264, 264, 265, 266, 266, 267, - 267, 268, 268, 269, 269, 270, 270, 270, 271, 271, - 271, 272, 272, 272, 273, 273, 274, 274, 275, 275, - 277, 289, 290, 291, 291, 291, 291, 291, 292, 292, - 294, 306, 307, 308, 308, 308, 308, 309, 309, 311, - 325, 326, 327, 327, 327, 327, 328, 328, 328, 330, - 347, 348, 349, 349, 349, 349, 350, 350, 350, 351, - 354, 373, 390, 398, 408, 416, 433, 434, 435, 435, - 435, 435, 435, 436, 436, 436, 437, 437, 439, 448, - 457, 468, 477, 486, 495, 506, 515, 527, 541, 556, - 567, 584, 601, 618, 635, 650, 665, 678, 693, 702, - 711, 720, 729, 738, 747, 756, 765, 774, 783, 792, - 801, 810, 823, 832, 845, 854, 863, 872, 879, 886, - 895, 902, 911, 919, 926, 933, 941, 950, 959, 973, - 982, 991, 1000, 1009, 1018, 1027, 1034, 1041, 1067, 1075, - 1082, 1089, 1096, 1103, 1111, 1119, 1127, 1134, 1145, 1156, - 1163, 1172, 1181, 1190, 1197, 1204, 1212, 1220, 1230, 1240, - 1250, 1258, 1271, 1282, 1290, 1303, 1312, 1321, 1330, 1340, - 1350, 1358, 1371, 1380, 1388, 1397, 1405, 1418, 1427, 1434, - 1444, 1454, 1464, 1474, 1484, 1494, 1504, 1514, 1521, 1528, - 1535, 1544, 1553, 1562, 1571, 1578, 1588, 1608, 1615, 1633, - 1646, 1659, 1668, 1677, 1686, 1695, 1705, 1715, 1726, 1735, - 1744, 1753, 1762, 1771, 1780, 1793, 1806, 1815, 1822, 1831, - 1840, 1849, 1858, 1866, 1879, 1887, 1928, 1935, 1950, 1960, - 1970, 1977, 1984, 1991, 2000, 2008, 2022, 2043, 2064, 2076, - 2088, 2100, 2109, 2130, 2140, 2149, 2157, 2165, 2178, 2191, - 2206, 2221, 2230, 2239, 2245, 2254, 2263, 2273, 2283, 2296, - 2309, 2321, 2335, 2347, 2361, 2371, 2378, 2385, 2394, 2403, - 2413, 2423, 2433, 2440, 2447, 2456, 2465, 2475, 2485, 2492, - 2499, 2506, 2514, 2524, 2534, 2544, 2554, 2593, 2603, 2611, - 2619, 2634, 2643, 2648, 2649, 2650, 2650, 2650, 2651, 2651, - 2651, 2652, 2652, 2654, 2664, 2673, 2680, 2687, 2694, 2701, - 2708, 2715, 2720, 2721, 2722, 2722, 2723, 2723, 2724, 2724, - 2725, 2726, 2727, 2728, 2729, 2730, 2732, 2741, 2748, 2757, - 2766, 2773, 2780, 2790, 2800, 2810, 2820, 2830, 2840, 2845, - 2846, 2847, 2849, 2855, 2865, 2872, 2881, 2889, 2894, 2895, - 2897, 2897, 2897, 2898, 2898, 2899, 2900, 2901, 2902, 2903, - 2905, 2915, 2924, 2931, 2940, 2947, 2956, 2964, 2977, 2985, - 2998, 3003, 3004, 3005, 3005, 3006, 3006, 3006, 3008, 3020, - 3032, 3044, 3059, 3072, 3083, 3088, 3089, 3090, 3090, 3092, - 3107 + 0, 177, 177, 177, 178, 178, 179, 179, 180, 180, + 180, 181, 181, 182, 182, 183, 187, 192, 193, 194, + 194, 194, 195, 195, 196, 196, 197, 197, 198, 198, + 198, 199, 199, 200, 200, 200, 201, 201, 201, 202, + 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, + 207, 208, 208, 209, 209, 210, 210, 210, 211, 211, + 211, 212, 212, 212, 213, 213, 214, 214, 215, 215, + 216, 216, 217, 217, 217, 218, 218, 219, 219, 220, + 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, + 224, 225, 225, 226, 226, 227, 227, 228, 228, 229, + 229, 230, 230, 230, 231, 231, 232, 232, 232, 233, + 233, 233, 234, 234, 234, 235, 235, 235, 235, 236, + 237, 237, 237, 238, 238, 238, 239, 239, 240, 240, + 241, 241, 241, 242, 242, 243, 243, 243, 244, 244, + 245, 245, 246, 247, 247, 248, 248, 249, 249, 250, + 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, + 256, 256, 256, 257, 257, 258, 258, 259, 259, 260, + 260, 261, 261, 262, 262, 263, 263, 263, 264, 264, + 264, 265, 265, 265, 266, 266, 267, 268, 268, 269, + 269, 270, 270, 271, 271, 272, 272, 272, 273, 273, + 273, 274, 274, 274, 275, 275, 276, 276, 277, 277, + 279, 291, 292, 293, 293, 293, 293, 293, 294, 294, + 296, 308, 309, 310, 310, 310, 310, 311, 311, 313, + 327, 328, 329, 329, 329, 329, 330, 330, 330, 332, + 349, 350, 351, 351, 351, 351, 352, 352, 352, 353, + 356, 375, 392, 400, 410, 418, 435, 436, 437, 437, + 437, 437, 437, 438, 438, 438, 439, 439, 441, 450, + 459, 470, 479, 488, 497, 508, 517, 529, 543, 558, + 569, 586, 603, 620, 637, 652, 667, 680, 695, 704, + 713, 722, 731, 740, 749, 758, 767, 776, 785, 794, + 803, 812, 825, 834, 847, 856, 865, 874, 881, 888, + 897, 904, 913, 921, 928, 935, 943, 952, 961, 975, + 984, 993, 1002, 1011, 1020, 1029, 1036, 1043, 1069, 1077, + 1084, 1091, 1098, 1105, 1113, 1121, 1129, 1136, 1147, 1158, + 1165, 1174, 1183, 1192, 1199, 1206, 1214, 1222, 1232, 1242, + 1252, 1260, 1273, 1284, 1292, 1305, 1314, 1323, 1332, 1342, + 1352, 1360, 1373, 1382, 1390, 1399, 1407, 1420, 1429, 1436, + 1446, 1456, 1466, 1476, 1486, 1496, 1506, 1516, 1523, 1530, + 1537, 1546, 1555, 1564, 1573, 1580, 1590, 1610, 1617, 1635, + 1648, 1661, 1670, 1679, 1688, 1697, 1707, 1717, 1728, 1737, + 1746, 1755, 1764, 1773, 1782, 1795, 1808, 1817, 1824, 1833, + 1842, 1851, 1860, 1868, 1881, 1889, 1930, 1937, 1952, 1962, + 1972, 1979, 1986, 1993, 2002, 2010, 2024, 2045, 2066, 2078, + 2090, 2102, 2111, 2132, 2142, 2151, 2159, 2167, 2180, 2193, + 2208, 2223, 2232, 2241, 2247, 2256, 2265, 2275, 2285, 2298, + 2311, 2323, 2337, 2349, 2363, 2373, 2380, 2387, 2396, 2405, + 2415, 2425, 2435, 2442, 2449, 2458, 2467, 2477, 2487, 2494, + 2501, 2508, 2516, 2526, 2536, 2546, 2556, 2595, 2605, 2613, + 2621, 2636, 2645, 2650, 2651, 2652, 2652, 2652, 2653, 2653, + 2653, 2654, 2654, 2656, 2666, 2675, 2682, 2689, 2696, 2703, + 2710, 2717, 2722, 2723, 2724, 2724, 2725, 2725, 2725, 2726, + 2727, 2727, 2728, 2728, 2729, 2729, 2730, 2731, 2732, 2733, + 2734, 2735, 2737, 2746, 2753, 2760, 2769, 2776, 2783, 2790, + 2797, 2806, 2815, 2822, 2829, 2839, 2849, 2859, 2869, 2879, + 2889, 2894, 2895, 2896, 2898, 2904, 2914, 2921, 2930, 2938, + 2943, 2944, 2946, 2946, 2946, 2947, 2947, 2948, 2949, 2950, + 2951, 2952, 2954, 2964, 2973, 2980, 2989, 2996, 3005, 3013, + 3026, 3034, 3047, 3052, 3053, 3054, 3054, 3055, 3055, 3055, + 3057, 3069, 3081, 3093, 3108, 3121, 3132, 3137, 3138, 3139, + 3139, 3141, 3156 }; #endif @@ -1145,8 +1158,11 @@ static const char *const yytname[] = "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", - "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_SEND_IDENTITY", - "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", + "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_IDENTITY", "VAR_DNSTAP_VERSION", "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", @@ -1298,8 +1314,11 @@ static const char *const yytname[] = "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_socket_path", "dt_dnstap_send_identity", - "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", + "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", @@ -1355,14 +1374,15 @@ static const yytype_uint16 yytoknum[] = 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 + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538 }; # endif -#define YYPACT_NINF -262 +#define YYPACT_NINF -268 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-262))) + (!!((Yystate) == (-268))) #define YYTABLE_NINF -1 @@ -1373,93 +1393,95 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -262, 0, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, 261, -41, - -36, -40, -20, -42, -29, -128, -105, -170, -221, -261, - 2, 3, 4, 12, 26, 27, 28, 31, 32, 33, - 35, 36, 37, 38, 39, 51, 52, 53, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 85, 87, - 88, 91, 93, 94, 95, 96, 97, 98, 99, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 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, 193, 197, 198, 199, - 200, 201, 202, 203, 205, 206, 207, 208, 211, 212, - 215, 228, 229, 230, 231, 232, 233, 234, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 259, 260, 294, 295, 296, 297, 301, 302, 303, 345, - 346, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 347, 348, 349, 350, 351, 352, 353, - -262, -262, -262, -262, -262, -262, -262, -262, 357, 361, - 362, 387, 388, 389, -262, -262, -262, -262, -262, -262, - -262, 391, 402, 403, 404, 405, 406, 407, -262, -262, - -262, -262, -262, -262, -262, -262, 408, 409, 410, 411, - 412, 413, 414, 453, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 455, 471, 472, 473, 474, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, 475, - 476, 477, 478, 479, 480, 481, 488, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 489, 490, 491, 492, - 493, 495, 496, 497, 498, 499, 500, 501, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, 504, -262, -262, 507, 510, 511, 519, 520, 521, - 523, 524, 525, 526, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, 527, 528, 529, 530, 531, - -262, -262, -262, -262, -262, -262, 532, 533, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - 534, 535, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, 536, 537, 538, - -262, -262, -262, -262, -262, -262, -262, -262, -262, 539, - 540, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - 541, 542, 543, 544, 545, 546, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 547, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 548, -262, -262, 549, - 550, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, 551, 552, 553, -262, -262, -262, -262, -262, - -262, -262, -262 + -268, 0, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, 267, -41, + -36, -40, -20, -42, -44, -86, -105, -203, -227, -267, + 2, 3, 4, 12, 24, 25, 26, 27, 28, 31, + 32, 33, 35, 36, 37, 38, 39, 49, 50, 51, + 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 85, 87, 88, 91, 93, 94, 95, 96, + 97, 98, 99, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 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, 199, 203, 204, 205, + 206, 207, 208, 209, 211, 212, 213, 214, 217, 218, + 221, 234, 235, 236, 237, 238, 239, 240, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 265, 266, 300, 301, 302, 303, 307, 308, 309, 351, + 352, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, 353, 354, 355, 356, 357, 358, 359, + -268, -268, -268, -268, -268, -268, -268, -268, 363, 367, + 368, 393, 394, 395, -268, -268, -268, -268, -268, -268, + -268, 397, 408, 409, 410, 411, 412, 413, -268, -268, + -268, -268, -268, -268, -268, -268, 414, 415, 416, 417, + 418, 419, 420, 421, -268, -268, -268, -268, -268, -268, + -268, -268, -268, 422, 423, 424, 425, 426, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, 465, + 467, 483, 484, 485, 486, 487, 488, -268, -268, -268, + -268, -268, -268, -268, -268, -268, 489, 490, 491, 492, + 493, 500, 501, 502, 503, 504, 505, 507, 508, 509, + 510, 511, 512, 513, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, 516, -268, -268, 519, 522, 523, 531, + 532, 533, 535, 536, 537, 538, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, 539, 540, 541, + 542, 543, -268, -268, -268, -268, -268, -268, 544, 545, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, 546, 547, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, 548, + 549, 550, -268, -268, -268, -268, -268, -268, -268, -268, + -268, 551, 552, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, 553, 554, 555, 556, 557, 558, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, 559, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, 560, -268, + -268, 561, 562, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + 563, 564, 565, -268, -268, -268, -268, -268, -268, -268, + -268 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1467,9 +1489,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 210, 220, 482, 528, 501, 229, - 537, 560, 239, 574, 255, 3, 18, 212, 222, 231, - 241, 257, 484, 503, 530, 539, 562, 576, 4, 5, + 2, 0, 1, 16, 210, 220, 482, 540, 501, 229, + 549, 572, 239, 586, 255, 3, 18, 212, 222, 231, + 241, 257, 484, 503, 542, 551, 574, 588, 4, 5, 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1519,77 +1541,79 @@ static const yytype_uint16 yydefact[] = 265, 266, 267, 256, 258, 259, 261, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 483, 485, 487, 486, 492, 488, 489, 490, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 502, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 0, 529, 531, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 538, 540, 541, 542, 544, 545, - 543, 546, 547, 548, 549, 0, 0, 0, 0, 0, - 561, 563, 564, 565, 566, 567, 0, 0, 575, 577, - 578, 269, 268, 275, 288, 286, 294, 295, 298, 296, - 297, 299, 300, 301, 302, 303, 325, 326, 327, 328, - 329, 353, 354, 355, 360, 361, 291, 362, 363, 366, - 364, 365, 368, 369, 370, 384, 340, 341, 343, 344, - 371, 387, 334, 336, 388, 394, 395, 396, 292, 352, - 412, 413, 335, 407, 318, 287, 330, 385, 391, 372, - 0, 0, 416, 293, 270, 317, 376, 271, 289, 290, - 331, 332, 414, 374, 378, 379, 272, 417, 356, 383, - 319, 339, 389, 390, 393, 406, 333, 410, 408, 409, - 345, 351, 380, 381, 346, 347, 373, 398, 320, 321, - 324, 304, 306, 307, 308, 309, 310, 418, 419, 421, - 357, 358, 359, 367, 422, 423, 424, 0, 0, 0, - 375, 348, 533, 433, 437, 435, 434, 438, 436, 0, - 0, 441, 442, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 377, 392, 411, 446, 447, 349, 425, - 0, 0, 0, 0, 0, 0, 399, 400, 401, 402, - 403, 404, 405, 534, 342, 337, 397, 316, 273, 274, - 338, 448, 450, 449, 451, 452, 453, 305, 312, 443, - 445, 444, 311, 0, 323, 382, 420, 322, 350, 313, - 314, 315, 454, 455, 456, 460, 459, 457, 458, 461, - 462, 463, 464, 466, 465, 475, 0, 479, 480, 0, - 0, 481, 467, 473, 468, 469, 470, 472, 474, 471, - 250, 251, 252, 253, 254, 493, 495, 494, 497, 498, - 499, 500, 496, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 532, 550, 551, 552, 555, - 553, 554, 556, 557, 558, 559, 568, 569, 570, 571, - 572, 579, 580, 386, 415, 432, 535, 536, 439, 440, - 426, 427, 0, 0, 0, 431, 573, 476, 477, 478, - 430, 428, 429 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 502, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 0, 541, 543, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 550, 552, 553, 554, + 556, 557, 555, 558, 559, 560, 561, 0, 0, 0, + 0, 0, 573, 575, 576, 577, 578, 579, 0, 0, + 587, 589, 590, 269, 268, 275, 288, 286, 294, 295, + 298, 296, 297, 299, 300, 301, 302, 303, 325, 326, + 327, 328, 329, 353, 354, 355, 360, 361, 291, 362, + 363, 366, 364, 365, 368, 369, 370, 384, 340, 341, + 343, 344, 371, 387, 334, 336, 388, 394, 395, 396, + 292, 352, 412, 413, 335, 407, 318, 287, 330, 385, + 391, 372, 0, 0, 416, 293, 270, 317, 376, 271, + 289, 290, 331, 332, 414, 374, 378, 379, 272, 417, + 356, 383, 319, 339, 389, 390, 393, 406, 333, 410, + 408, 409, 345, 351, 380, 381, 346, 347, 373, 398, + 320, 321, 324, 304, 306, 307, 308, 309, 310, 418, + 419, 421, 357, 358, 359, 367, 422, 423, 424, 0, + 0, 0, 375, 348, 545, 433, 437, 435, 434, 438, + 436, 0, 0, 441, 442, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 377, 392, 411, 446, 447, + 349, 425, 0, 0, 0, 0, 0, 0, 399, 400, + 401, 402, 403, 404, 405, 546, 342, 337, 397, 316, + 273, 274, 338, 448, 450, 449, 451, 452, 453, 305, + 312, 443, 445, 444, 311, 0, 323, 382, 420, 322, + 350, 313, 314, 315, 454, 455, 456, 460, 459, 457, + 458, 461, 462, 463, 464, 466, 465, 475, 0, 479, + 480, 0, 0, 481, 467, 473, 468, 469, 470, 472, + 474, 471, 250, 251, 252, 253, 254, 493, 495, 494, + 497, 498, 499, 500, 496, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 544, 562, 563, 564, 567, 565, 566, + 568, 569, 570, 571, 580, 581, 582, 583, 584, 591, + 592, 386, 415, 432, 547, 548, 439, 440, 426, 427, + 0, 0, 0, 431, 585, 476, 477, 478, 430, 428, + 429 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -23, 554, 555, 556, 557, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262 + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -23, 566, 567, 568, 569, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -1620,12 +1644,12 @@ static const yytype_int16 yydefgoto[] = 446, 447, 448, 449, 450, 475, 476, 477, 478, 479, 480, 481, 482, 459, 460, 461, 462, 463, 464, 465, 22, 34, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 23, 35, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 24, 36, 542, 543, - 418, 419, 420, 421, 25, 37, 554, 555, 556, 557, - 558, 559, 560, 561, 562, 563, 564, 26, 38, 570, - 571, 572, 573, 574, 575, 422, 27, 39, 578, 579, - 580 + 515, 23, 35, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 24, 36, 554, 555, 418, 419, 420, 421, + 25, 37, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 26, 38, 582, 583, 584, 585, 586, + 587, 422, 27, 39, 590, 591, 592 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1633,140 +1657,142 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 466, 423, 451, 424, 425, 541, 438, 576, 577, - 494, 3, 581, 582, 583, 439, 440, 565, 566, 567, - 568, 569, 584, 466, 516, 517, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 585, 586, 587, 452, - 453, 588, 589, 590, 4, 591, 592, 593, 594, 595, - 5, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 596, 597, 598, 454, 426, 499, 500, 501, 502, - 503, 504, 505, 506, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 618, 6, 619, 427, 620, 621, 428, - 441, 622, 442, 623, 624, 625, 626, 627, 628, 629, - 7, 630, 631, 632, 633, 634, 635, 636, 637, 638, - 639, 640, 641, 642, 643, 455, 456, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, - 667, 8, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 457, 680, 681, 682, 683, 684, - 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, - 715, 716, 9, 717, 468, 469, 470, 718, 719, 720, - 721, 722, 723, 724, 473, 725, 726, 727, 728, 429, - 10, 729, 730, 443, 467, 731, 468, 469, 470, 471, - 472, 483, 484, 485, 486, 487, 473, 11, 732, 733, - 734, 735, 736, 737, 738, 12, 739, 740, 741, 742, - 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, - 753, 754, 755, 756, 757, 758, 759, 760, 13, 761, - 762, 0, 14, 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, 763, 764, 765, 766, 71, 72, - 73, 767, 768, 769, 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, 770, 771, 772, 773, 774, - 775, 776, 777, 778, 115, 116, 117, 779, 118, 119, - 120, 780, 781, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 782, 783, 784, - 145, 785, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 786, 787, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 797, 798, 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, 799, 194, 800, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 801, 802, 803, 804, 805, 806, 807, 808, 809, - 810, 811, 210, 211, 212, 213, 214, 215, 812, 813, - 814, 815, 816, 817, 216, 818, 819, 820, 821, 822, - 823, 824, 217, 218, 825, 219, 220, 826, 221, 222, - 827, 828, 223, 224, 225, 226, 227, 228, 229, 829, - 830, 831, 230, 832, 833, 834, 835, 836, 837, 838, - 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, - 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, - 859, 860, 861, 862, 0, 0, 0, 0, 0, 0, + 2, 466, 423, 451, 424, 425, 553, 438, 588, 589, + 494, 3, 593, 594, 595, 439, 440, 577, 578, 579, + 580, 581, 596, 466, 556, 557, 558, 559, 560, 561, + 562, 563, 564, 565, 597, 598, 599, 600, 601, 452, + 453, 602, 603, 604, 4, 605, 606, 607, 608, 609, + 5, 499, 500, 501, 502, 503, 504, 505, 506, 610, + 611, 612, 613, 614, 454, 426, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 6, 625, 427, 626, 627, 428, + 441, 628, 442, 629, 630, 631, 632, 633, 634, 635, + 7, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 455, 456, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 8, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, + 457, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, + 721, 722, 723, 724, 725, 726, 727, 728, 9, 729, + 468, 469, 470, 730, 731, 732, 733, 734, 735, 736, + 473, 737, 738, 739, 740, 429, 10, 741, 742, 443, + 467, 743, 468, 469, 470, 471, 472, 483, 484, 485, + 486, 487, 473, 11, 744, 745, 746, 747, 748, 749, + 750, 12, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, + 769, 770, 771, 772, 13, 773, 774, 0, 14, 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, + 775, 776, 777, 778, 71, 72, 73, 779, 780, 781, + 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, 782, 783, 784, 785, 786, 787, 788, 789, 790, + 115, 116, 117, 791, 118, 119, 120, 792, 793, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 794, 795, 796, 145, 797, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 812, 813, 814, 815, 816, 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, 817, 194, 818, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 210, 211, 212, 213, 214, 215, + 830, 831, 832, 833, 834, 835, 216, 836, 837, 838, + 839, 840, 841, 842, 217, 218, 843, 219, 220, 844, + 221, 222, 845, 846, 223, 224, 225, 226, 227, 228, + 229, 847, 848, 849, 230, 850, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 495, 496, 497, - 498 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, + 496, 497, 498 }; static const yytype_int16 yycheck[] = { - 0, 43, 43, 43, 45, 46, 111, 43, 269, 270, - 33, 11, 10, 10, 10, 51, 52, 238, 239, 240, - 241, 242, 10, 43, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 10, 10, 10, 79, + 0, 43, 43, 43, 45, 46, 111, 43, 275, 276, + 33, 11, 10, 10, 10, 51, 52, 244, 245, 246, + 247, 248, 10, 43, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 10, 10, 10, 10, 10, 79, 80, 10, 10, 10, 44, 10, 10, 10, 10, 10, - 50, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 10, 10, 10, 104, 106, 95, 96, 97, 98, - 99, 100, 101, 102, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 50, 95, 96, 97, 98, 99, 100, 101, 102, 10, + 10, 10, 10, 10, 104, 106, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 94, 10, 137, 10, 10, 140, 136, 10, 138, 10, 10, 10, 10, 10, 10, 10, 110, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 165, 166, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 171, 172, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 151, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 204, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 210, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 208, 10, + 252, 253, 254, 10, 10, 10, 10, 10, 10, 10, + 262, 10, 10, 10, 10, 266, 226, 10, 10, 265, + 250, 10, 252, 253, 254, 255, 256, 279, 280, 281, + 282, 283, 262, 243, 10, 10, 10, 10, 10, 10, + 10, 251, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 202, 10, 246, 247, 248, 10, 10, 10, - 10, 10, 10, 10, 256, 10, 10, 10, 10, 260, - 220, 10, 10, 259, 244, 10, 246, 247, 248, 249, - 250, 273, 274, 275, 276, 277, 256, 237, 10, 10, - 10, 10, 10, 10, 10, 245, 10, 10, 10, 10, + 10, 10, 10, 10, 274, 10, 10, -1, 278, 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, + 10, 10, 10, 10, 47, 48, 49, 10, 10, 10, + 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, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 103, 104, 105, 10, 107, 108, 109, 10, 10, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 10, 10, 10, 139, 10, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 268, 10, - 10, -1, 272, 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, 10, 10, 10, 10, 47, 48, - 49, 10, 10, 10, 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, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 103, 104, 105, 10, 107, 108, - 109, 10, 10, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 10, 10, 10, - 139, 10, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 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, 10, 203, 10, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 231, 232, 233, 234, 235, 236, 10, 10, - 10, 10, 10, 10, 243, 10, 10, 10, 10, 10, - 10, 10, 251, 252, 10, 254, 255, 10, 257, 258, - 10, 10, 261, 262, 263, 264, 265, 266, 267, 10, - 10, 10, 271, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 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, 10, 209, 10, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 237, 238, 239, 240, 241, 242, + 10, 10, 10, 10, 10, 10, 249, 10, 10, 10, + 10, 10, 10, 10, 257, 258, 10, 260, 261, 10, + 263, 264, 10, 10, 267, 268, 269, 270, 271, 272, + 273, 10, 10, 10, 277, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33, 33, 33, - 33 + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + 33, 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 279, 0, 11, 44, 50, 94, 110, 151, 202, - 220, 237, 245, 268, 272, 280, 281, 284, 287, 290, - 293, 301, 518, 529, 544, 552, 565, 574, 282, 285, - 288, 291, 294, 302, 519, 530, 545, 553, 566, 575, + 0, 285, 0, 11, 44, 50, 94, 110, 151, 208, + 226, 243, 251, 274, 278, 286, 287, 290, 293, 296, + 299, 307, 524, 535, 556, 564, 577, 586, 288, 291, + 294, 297, 300, 308, 525, 536, 557, 565, 578, 587, 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, @@ -1778,15 +1804,112 @@ static const yytype_uint16 yystos[] = 109, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 139, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 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, 203, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 231, 232, 233, 234, 235, 236, 243, 251, 252, 254, - 255, 257, 258, 261, 262, 263, 264, 265, 266, 267, - 271, 283, 304, 305, 306, 307, 308, 309, 310, 311, + 145, 146, 147, 148, 149, 150, 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, 209, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 237, 238, 239, 240, 241, 242, 249, 257, 258, 260, + 261, 263, 264, 267, 268, 269, 270, 271, 272, 273, + 277, 289, 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, 560, 561, + 562, 563, 585, 43, 45, 46, 106, 137, 140, 266, + 292, 496, 497, 498, 499, 500, 501, 502, 43, 51, + 52, 136, 138, 265, 295, 503, 504, 505, 506, 507, + 508, 43, 79, 80, 104, 171, 172, 210, 298, 517, + 518, 519, 520, 521, 522, 523, 43, 250, 252, 253, + 254, 255, 256, 262, 301, 509, 510, 511, 512, 513, + 514, 515, 516, 279, 280, 281, 282, 283, 302, 303, + 304, 305, 306, 309, 509, 510, 511, 512, 513, 95, + 96, 97, 98, 99, 100, 101, 102, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 111, 558, 559, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 244, 245, 246, + 247, 248, 579, 580, 581, 582, 583, 584, 275, 276, + 588, 589, 590, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = +{ + 0, 284, 285, 285, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 287, 288, 288, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 290, 291, 291, 292, 292, 292, 292, 292, 292, 292, + 293, 294, 294, 295, 295, 295, 295, 295, 295, 296, + 297, 297, 298, 298, 298, 298, 298, 298, 298, 299, + 300, 300, 301, 301, 301, 301, 301, 301, 301, 301, + 302, 303, 304, 305, 306, 307, 308, 308, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 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, @@ -1804,116 +1927,22 @@ static const yytype_uint16 yystos[] = 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, 548, 549, - 550, 551, 573, 43, 45, 46, 106, 137, 140, 260, - 286, 490, 491, 492, 493, 494, 495, 496, 43, 51, - 52, 136, 138, 259, 289, 497, 498, 499, 500, 501, - 502, 43, 79, 80, 104, 165, 166, 204, 292, 511, - 512, 513, 514, 515, 516, 517, 43, 244, 246, 247, - 248, 249, 250, 256, 295, 503, 504, 505, 506, 507, - 508, 509, 510, 273, 274, 275, 276, 277, 296, 297, - 298, 299, 300, 303, 503, 504, 505, 506, 507, 95, - 96, 97, 98, 99, 100, 101, 102, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 111, 546, 547, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 554, 555, 556, 557, 558, 559, - 560, 561, 562, 563, 564, 238, 239, 240, 241, 242, - 567, 568, 569, 570, 571, 572, 269, 270, 576, 577, - 578, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 -}; - - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = -{ - 0, 278, 279, 279, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 281, 282, 282, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 284, 285, 285, 286, 286, 286, 286, 286, 286, 286, - 287, 288, 288, 289, 289, 289, 289, 289, 289, 290, - 291, 291, 292, 292, 292, 292, 292, 292, 292, 293, - 294, 294, 295, 295, 295, 295, 295, 295, 295, 295, - 296, 297, 298, 299, 300, 301, 302, 302, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 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, 519, 520, 520, 520, 520, 520, - 520, 520, 520, 521, 522, 523, 524, 525, 526, 527, - 528, 529, 530, 530, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 553, - 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, - 565, 566, 566, 567, 567, 567, 567, 567, 568, 569, - 570, 571, 572, 573, 574, 575, 575, 576, 576, 577, - 578 + 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, 525, 526, 526, 526, 526, 526, + 526, 526, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 536, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 565, 566, 566, 566, 566, 566, 566, 566, 566, + 566, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 578, 579, 579, 579, 579, 579, + 580, 581, 582, 583, 584, 585, 586, 587, 587, 588, + 588, 589, 590 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1970,14 +1999,15 @@ static const yytype_uint8 yyr2[] = 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, - 2 + 1, 2, 0, 1, 2, 2, 2, 3, 3, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, + 1, 2, 2 }; @@ -2662,15 +2692,15 @@ yyreduce: switch (yyn) { case 16: -#line 186 "./util/configparser.y" +#line 188 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2670 "util/configparser.c" +#line 2700 "util/configparser.c" break; case 210: -#line 278 "./util/configparser.y" +#line 280 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2681,11 +2711,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2685 "util/configparser.c" +#line 2715 "util/configparser.c" break; case 220: -#line 295 "./util/configparser.y" +#line 297 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2696,11 +2726,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2700 "util/configparser.c" +#line 2730 "util/configparser.c" break; case 229: -#line 312 "./util/configparser.y" +#line 314 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2713,11 +2743,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2717 "util/configparser.c" +#line 2747 "util/configparser.c" break; case 239: -#line 331 "./util/configparser.y" +#line 333 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2733,11 +2763,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2737 "util/configparser.c" +#line 2767 "util/configparser.c" break; case 250: -#line 355 "./util/configparser.y" +#line 357 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2754,11 +2784,11 @@ yyreduce: } } -#line 2758 "util/configparser.c" +#line 2788 "util/configparser.c" break; case 251: -#line 374 "./util/configparser.y" +#line 376 "./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 && @@ -2773,21 +2803,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2777 "util/configparser.c" +#line 2807 "util/configparser.c" break; case 252: -#line 391 "./util/configparser.y" +#line 393 "./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 2787 "util/configparser.c" +#line 2817 "util/configparser.c" break; case 253: -#line 399 "./util/configparser.y" +#line 401 "./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) @@ -2795,21 +2825,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2799 "util/configparser.c" +#line 2829 "util/configparser.c" break; case 254: -#line 409 "./util/configparser.y" +#line 411 "./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 2809 "util/configparser.c" +#line 2839 "util/configparser.c" break; case 255: -#line 417 "./util/configparser.y" +#line 419 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2825,11 +2855,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2829 "util/configparser.c" +#line 2859 "util/configparser.c" break; case 268: -#line 440 "./util/configparser.y" +#line 442 "./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) @@ -2837,11 +2867,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2841 "util/configparser.c" +#line 2871 "util/configparser.c" break; case 269: -#line 449 "./util/configparser.y" +#line 451 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2849,11 +2879,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2853 "util/configparser.c" +#line 2883 "util/configparser.c" break; case 270: -#line 458 "./util/configparser.y" +#line 460 "./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) @@ -2863,11 +2893,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2867 "util/configparser.c" +#line 2897 "util/configparser.c" break; case 271: -#line 469 "./util/configparser.y" +#line 471 "./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) @@ -2875,11 +2905,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2879 "util/configparser.c" +#line 2909 "util/configparser.c" break; case 272: -#line 478 "./util/configparser.y" +#line 480 "./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) @@ -2887,11 +2917,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2891 "util/configparser.c" +#line 2921 "util/configparser.c" break; case 273: -#line 487 "./util/configparser.y" +#line 489 "./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) @@ -2899,11 +2929,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2903 "util/configparser.c" +#line 2933 "util/configparser.c" break; case 274: -#line 496 "./util/configparser.y" +#line 498 "./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) @@ -2913,11 +2943,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2917 "util/configparser.c" +#line 2947 "util/configparser.c" break; case 275: -#line 507 "./util/configparser.y" +#line 509 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2925,11 +2955,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2929 "util/configparser.c" +#line 2959 "util/configparser.c" break; case 276: -#line 516 "./util/configparser.y" +#line 518 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2940,11 +2970,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2944 "util/configparser.c" +#line 2974 "util/configparser.c" break; case 277: -#line 528 "./util/configparser.y" +#line 530 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2956,11 +2986,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2960 "util/configparser.c" +#line 2990 "util/configparser.c" break; case 278: -#line 542 "./util/configparser.y" +#line 544 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2974,11 +3004,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2978 "util/configparser.c" +#line 3008 "util/configparser.c" break; case 279: -#line 557 "./util/configparser.y" +#line 559 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2988,11 +3018,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2992 "util/configparser.c" +#line 3022 "util/configparser.c" break; case 280: -#line 568 "./util/configparser.y" +#line 570 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3008,11 +3038,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3012 "util/configparser.c" +#line 3042 "util/configparser.c" break; case 281: -#line 585 "./util/configparser.y" +#line 587 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3028,11 +3058,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3032 "util/configparser.c" +#line 3062 "util/configparser.c" break; case 282: -#line 602 "./util/configparser.y" +#line 604 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3048,11 +3078,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3052 "util/configparser.c" +#line 3082 "util/configparser.c" break; case 283: -#line 619 "./util/configparser.y" +#line 621 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3068,11 +3098,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3072 "util/configparser.c" +#line 3102 "util/configparser.c" break; case 284: -#line 636 "./util/configparser.y" +#line 638 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3086,11 +3116,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3090 "util/configparser.c" +#line 3120 "util/configparser.c" break; case 285: -#line 651 "./util/configparser.y" +#line 653 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3104,11 +3134,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3108 "util/configparser.c" +#line 3138 "util/configparser.c" break; case 286: -#line 666 "./util/configparser.y" +#line 668 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3120,11 +3150,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3124 "util/configparser.c" +#line 3154 "util/configparser.c" break; case 287: -#line 679 "./util/configparser.y" +#line 681 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3138,11 +3168,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3142 "util/configparser.c" +#line 3172 "util/configparser.c" break; case 288: -#line 694 "./util/configparser.y" +#line 696 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3150,11 +3180,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3154 "util/configparser.c" +#line 3184 "util/configparser.c" break; case 289: -#line 703 "./util/configparser.y" +#line 705 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3162,11 +3192,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3166 "util/configparser.c" +#line 3196 "util/configparser.c" break; case 290: -#line 712 "./util/configparser.y" +#line 714 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3174,11 +3204,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3178 "util/configparser.c" +#line 3208 "util/configparser.c" break; case 291: -#line 721 "./util/configparser.y" +#line 723 "./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) @@ -3186,11 +3216,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3190 "util/configparser.c" +#line 3220 "util/configparser.c" break; case 292: -#line 730 "./util/configparser.y" +#line 732 "./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) @@ -3198,11 +3228,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3202 "util/configparser.c" +#line 3232 "util/configparser.c" break; case 293: -#line 739 "./util/configparser.y" +#line 741 "./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) @@ -3210,11 +3240,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3214 "util/configparser.c" +#line 3244 "util/configparser.c" break; case 294: -#line 748 "./util/configparser.y" +#line 750 "./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) @@ -3222,11 +3252,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3226 "util/configparser.c" +#line 3256 "util/configparser.c" break; case 295: -#line 757 "./util/configparser.y" +#line 759 "./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) @@ -3234,11 +3264,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" +#line 3268 "util/configparser.c" break; case 296: -#line 766 "./util/configparser.y" +#line 768 "./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) @@ -3246,11 +3276,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" +#line 3280 "util/configparser.c" break; case 297: -#line 775 "./util/configparser.y" +#line 777 "./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) @@ -3258,11 +3288,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" +#line 3292 "util/configparser.c" break; case 298: -#line 784 "./util/configparser.y" +#line 786 "./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) @@ -3270,11 +3300,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3274 "util/configparser.c" +#line 3304 "util/configparser.c" break; case 299: -#line 793 "./util/configparser.y" +#line 795 "./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) @@ -3282,11 +3312,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3286 "util/configparser.c" +#line 3316 "util/configparser.c" break; case 300: -#line 802 "./util/configparser.y" +#line 804 "./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) @@ -3294,11 +3324,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3298 "util/configparser.c" +#line 3328 "util/configparser.c" break; case 301: -#line 811 "./util/configparser.y" +#line 813 "./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) @@ -3310,11 +3340,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3314 "util/configparser.c" +#line 3344 "util/configparser.c" break; case 302: -#line 824 "./util/configparser.y" +#line 826 "./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) @@ -3322,11 +3352,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3326 "util/configparser.c" +#line 3356 "util/configparser.c" break; case 303: -#line 833 "./util/configparser.y" +#line 835 "./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) @@ -3338,11 +3368,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3342 "util/configparser.c" +#line 3372 "util/configparser.c" break; case 304: -#line 846 "./util/configparser.y" +#line 848 "./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) @@ -3350,11 +3380,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3354 "util/configparser.c" +#line 3384 "util/configparser.c" break; case 305: -#line 855 "./util/configparser.y" +#line 857 "./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) @@ -3362,11 +3392,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3366 "util/configparser.c" +#line 3396 "util/configparser.c" break; case 306: -#line 864 "./util/configparser.y" +#line 866 "./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) @@ -3374,31 +3404,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" +#line 3408 "util/configparser.c" break; case 307: -#line 873 "./util/configparser.y" +#line 875 "./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 3388 "util/configparser.c" +#line 3418 "util/configparser.c" break; case 308: -#line 880 "./util/configparser.y" +#line 882 "./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 3398 "util/configparser.c" +#line 3428 "util/configparser.c" break; case 309: -#line 887 "./util/configparser.y" +#line 889 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3406,21 +3436,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3410 "util/configparser.c" +#line 3440 "util/configparser.c" break; case 310: -#line 896 "./util/configparser.y" +#line 898 "./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 3420 "util/configparser.c" +#line 3450 "util/configparser.c" break; case 311: -#line 903 "./util/configparser.y" +#line 905 "./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) @@ -3428,53 +3458,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3432 "util/configparser.c" +#line 3462 "util/configparser.c" break; case 312: -#line 912 "./util/configparser.y" +#line 914 "./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 3443 "util/configparser.c" +#line 3473 "util/configparser.c" break; case 313: -#line 920 "./util/configparser.y" +#line 922 "./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 3453 "util/configparser.c" +#line 3483 "util/configparser.c" break; case 314: -#line 927 "./util/configparser.y" +#line 929 "./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 3463 "util/configparser.c" +#line 3493 "util/configparser.c" break; case 315: -#line 934 "./util/configparser.y" +#line 936 "./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 3474 "util/configparser.c" +#line 3504 "util/configparser.c" break; case 316: -#line 942 "./util/configparser.y" +#line 944 "./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) @@ -3482,11 +3512,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3486 "util/configparser.c" +#line 3516 "util/configparser.c" break; case 317: -#line 951 "./util/configparser.y" +#line 953 "./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) @@ -3494,11 +3524,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3498 "util/configparser.c" +#line 3528 "util/configparser.c" break; case 318: -#line 960 "./util/configparser.y" +#line 962 "./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) @@ -3511,11 +3541,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3515 "util/configparser.c" +#line 3545 "util/configparser.c" break; case 319: -#line 974 "./util/configparser.y" +#line 976 "./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) @@ -3523,11 +3553,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3527 "util/configparser.c" +#line 3557 "util/configparser.c" break; case 320: -#line 983 "./util/configparser.y" +#line 985 "./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) @@ -3535,11 +3565,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3539 "util/configparser.c" +#line 3569 "util/configparser.c" break; case 321: -#line 992 "./util/configparser.y" +#line 994 "./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) @@ -3547,11 +3577,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3551 "util/configparser.c" +#line 3581 "util/configparser.c" break; case 322: -#line 1001 "./util/configparser.y" +#line 1003 "./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) @@ -3559,11 +3589,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3563 "util/configparser.c" +#line 3593 "util/configparser.c" break; case 323: -#line 1010 "./util/configparser.y" +#line 1012 "./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) @@ -3571,11 +3601,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3575 "util/configparser.c" +#line 3605 "util/configparser.c" break; case 324: -#line 1019 "./util/configparser.y" +#line 1021 "./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) @@ -3583,31 +3613,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" +#line 3617 "util/configparser.c" break; case 325: -#line 1028 "./util/configparser.y" +#line 1030 "./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 3597 "util/configparser.c" +#line 3627 "util/configparser.c" break; case 326: -#line 1035 "./util/configparser.y" +#line 1037 "./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 3607 "util/configparser.c" +#line 3637 "util/configparser.c" break; case 327: -#line 1042 "./util/configparser.y" +#line 1044 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3632,105 +3662,105 @@ yyreduce: } } } -#line 3636 "util/configparser.c" +#line 3666 "util/configparser.c" break; case 328: -#line 1068 "./util/configparser.y" +#line 1070 "./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 3647 "util/configparser.c" +#line 3677 "util/configparser.c" break; case 329: -#line 1076 "./util/configparser.y" +#line 1078 "./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 3657 "util/configparser.c" +#line 3687 "util/configparser.c" break; case 330: -#line 1083 "./util/configparser.y" +#line 1085 "./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 3667 "util/configparser.c" +#line 3697 "util/configparser.c" break; case 331: -#line 1090 "./util/configparser.y" +#line 1092 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3677 "util/configparser.c" +#line 3707 "util/configparser.c" break; case 332: -#line 1097 "./util/configparser.y" +#line 1099 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3687 "util/configparser.c" +#line 3717 "util/configparser.c" break; case 333: -#line 1104 "./util/configparser.y" +#line 1106 "./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 3698 "util/configparser.c" +#line 3728 "util/configparser.c" break; case 334: -#line 1112 "./util/configparser.y" +#line 1114 "./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 3709 "util/configparser.c" +#line 3739 "util/configparser.c" break; case 335: -#line 1120 "./util/configparser.y" +#line 1122 "./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 3720 "util/configparser.c" +#line 3750 "util/configparser.c" break; case 336: -#line 1128 "./util/configparser.y" +#line 1130 "./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 3730 "util/configparser.c" +#line 3760 "util/configparser.c" break; case 337: -#line 1135 "./util/configparser.y" +#line 1137 "./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) @@ -3740,11 +3770,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3744 "util/configparser.c" +#line 3774 "util/configparser.c" break; case 338: -#line 1146 "./util/configparser.y" +#line 1148 "./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) @@ -3754,21 +3784,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3758 "util/configparser.c" +#line 3788 "util/configparser.c" break; case 339: -#line 1157 "./util/configparser.y" +#line 1159 "./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 3768 "util/configparser.c" +#line 3798 "util/configparser.c" break; case 340: -#line 1164 "./util/configparser.y" +#line 1166 "./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) @@ -3776,11 +3806,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3780 "util/configparser.c" +#line 3810 "util/configparser.c" break; case 341: -#line 1173 "./util/configparser.y" +#line 1175 "./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) @@ -3788,11 +3818,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3792 "util/configparser.c" +#line 3822 "util/configparser.c" break; case 342: -#line 1182 "./util/configparser.y" +#line 1184 "./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) @@ -3800,53 +3830,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3804 "util/configparser.c" +#line 3834 "util/configparser.c" break; case 343: -#line 1191 "./util/configparser.y" +#line 1193 "./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 3814 "util/configparser.c" +#line 3844 "util/configparser.c" break; case 344: -#line 1198 "./util/configparser.y" +#line 1200 "./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 3824 "util/configparser.c" +#line 3854 "util/configparser.c" break; case 345: -#line 1205 "./util/configparser.y" +#line 1207 "./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 3835 "util/configparser.c" +#line 3865 "util/configparser.c" break; case 346: -#line 1213 "./util/configparser.y" +#line 1215 "./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 3846 "util/configparser.c" +#line 3876 "util/configparser.c" break; case 347: -#line 1221 "./util/configparser.y" +#line 1223 "./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) @@ -3855,11 +3885,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3859 "util/configparser.c" +#line 3889 "util/configparser.c" break; case 348: -#line 1231 "./util/configparser.y" +#line 1233 "./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) @@ -3868,11 +3898,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3872 "util/configparser.c" +#line 3902 "util/configparser.c" break; case 349: -#line 1241 "./util/configparser.y" +#line 1243 "./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) @@ -3881,22 +3911,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3885 "util/configparser.c" +#line 3915 "util/configparser.c" break; case 350: -#line 1251 "./util/configparser.y" +#line 1253 "./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 3896 "util/configparser.c" +#line 3926 "util/configparser.c" break; case 351: -#line 1259 "./util/configparser.y" +#line 1261 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3908,11 +3938,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3912 "util/configparser.c" +#line 3942 "util/configparser.c" break; case 352: -#line 1272 "./util/configparser.y" +#line 1274 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3922,22 +3952,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3926 "util/configparser.c" +#line 3956 "util/configparser.c" break; case 353: -#line 1283 "./util/configparser.y" +#line 1285 "./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 3937 "util/configparser.c" +#line 3967 "util/configparser.c" break; case 354: -#line 1291 "./util/configparser.y" +#line 1293 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3949,11 +3979,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3953 "util/configparser.c" +#line 3983 "util/configparser.c" break; case 355: -#line 1304 "./util/configparser.y" +#line 1306 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3961,11 +3991,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3965 "util/configparser.c" +#line 3995 "util/configparser.c" break; case 356: -#line 1313 "./util/configparser.y" +#line 1315 "./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) @@ -3973,11 +4003,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3977 "util/configparser.c" +#line 4007 "util/configparser.c" break; case 357: -#line 1322 "./util/configparser.y" +#line 1324 "./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) @@ -3985,11 +4015,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3989 "util/configparser.c" +#line 4019 "util/configparser.c" break; case 358: -#line 1331 "./util/configparser.y" +#line 1333 "./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) @@ -3998,11 +4028,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4002 "util/configparser.c" +#line 4032 "util/configparser.c" break; case 359: -#line 1341 "./util/configparser.y" +#line 1343 "./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) @@ -4011,22 +4041,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4015 "util/configparser.c" +#line 4045 "util/configparser.c" break; case 360: -#line 1351 "./util/configparser.y" +#line 1353 "./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 4026 "util/configparser.c" +#line 4056 "util/configparser.c" break; case 361: -#line 1359 "./util/configparser.y" +#line 1361 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4038,11 +4068,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" +#line 4072 "util/configparser.c" break; case 362: -#line 1372 "./util/configparser.y" +#line 1374 "./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) @@ -4050,22 +4080,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" +#line 4084 "util/configparser.c" break; case 363: -#line 1381 "./util/configparser.y" +#line 1383 "./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 4065 "util/configparser.c" +#line 4095 "util/configparser.c" break; case 364: -#line 1389 "./util/configparser.y" +#line 1391 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4073,22 +4103,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4077 "util/configparser.c" +#line 4107 "util/configparser.c" break; case 365: -#line 1398 "./util/configparser.y" +#line 1400 "./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 4088 "util/configparser.c" +#line 4118 "util/configparser.c" break; case 366: -#line 1406 "./util/configparser.y" +#line 1408 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4100,11 +4130,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4104 "util/configparser.c" +#line 4134 "util/configparser.c" break; case 367: -#line 1419 "./util/configparser.y" +#line 1421 "./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) @@ -4112,21 +4142,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4116 "util/configparser.c" +#line 4146 "util/configparser.c" break; case 368: -#line 1428 "./util/configparser.y" +#line 1430 "./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 4126 "util/configparser.c" +#line 4156 "util/configparser.c" break; case 369: -#line 1435 "./util/configparser.y" +#line 1437 "./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) @@ -4135,11 +4165,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4139 "util/configparser.c" +#line 4169 "util/configparser.c" break; case 370: -#line 1445 "./util/configparser.y" +#line 1447 "./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) @@ -4148,11 +4178,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4152 "util/configparser.c" +#line 4182 "util/configparser.c" break; case 371: -#line 1455 "./util/configparser.y" +#line 1457 "./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) @@ -4161,11 +4191,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4165 "util/configparser.c" +#line 4195 "util/configparser.c" break; case 372: -#line 1465 "./util/configparser.y" +#line 1467 "./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) @@ -4174,11 +4204,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4178 "util/configparser.c" +#line 4208 "util/configparser.c" break; case 373: -#line 1475 "./util/configparser.y" +#line 1477 "./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) @@ -4187,11 +4217,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4191 "util/configparser.c" +#line 4221 "util/configparser.c" break; case 374: -#line 1485 "./util/configparser.y" +#line 1487 "./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) @@ -4200,11 +4230,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4204 "util/configparser.c" +#line 4234 "util/configparser.c" break; case 375: -#line 1495 "./util/configparser.y" +#line 1497 "./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) @@ -4213,11 +4243,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4217 "util/configparser.c" +#line 4247 "util/configparser.c" break; case 376: -#line 1505 "./util/configparser.y" +#line 1507 "./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) @@ -4226,41 +4256,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" +#line 4260 "util/configparser.c" break; case 377: -#line 1515 "./util/configparser.y" +#line 1517 "./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 4240 "util/configparser.c" +#line 4270 "util/configparser.c" break; case 378: -#line 1522 "./util/configparser.y" +#line 1524 "./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 4250 "util/configparser.c" +#line 4280 "util/configparser.c" break; case 379: -#line 1529 "./util/configparser.y" +#line 1531 "./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 4260 "util/configparser.c" +#line 4290 "util/configparser.c" break; case 380: -#line 1536 "./util/configparser.y" +#line 1538 "./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) @@ -4268,11 +4298,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4272 "util/configparser.c" +#line 4302 "util/configparser.c" break; case 381: -#line 1545 "./util/configparser.y" +#line 1547 "./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) @@ -4280,11 +4310,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4284 "util/configparser.c" +#line 4314 "util/configparser.c" break; case 382: -#line 1554 "./util/configparser.y" +#line 1556 "./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) @@ -4292,11 +4322,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4296 "util/configparser.c" +#line 4326 "util/configparser.c" break; case 383: -#line 1563 "./util/configparser.y" +#line 1565 "./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) @@ -4304,21 +4334,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4308 "util/configparser.c" +#line 4338 "util/configparser.c" break; case 384: -#line 1572 "./util/configparser.y" +#line 1574 "./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 4318 "util/configparser.c" +#line 4348 "util/configparser.c" break; case 385: -#line 1579 "./util/configparser.y" +#line 1581 "./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) @@ -4327,11 +4357,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4331 "util/configparser.c" +#line 4361 "util/configparser.c" break; case 386: -#line 1589 "./util/configparser.y" +#line 1591 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4350,21 +4380,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4354 "util/configparser.c" +#line 4384 "util/configparser.c" break; case 387: -#line 1609 "./util/configparser.y" +#line 1611 "./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 4364 "util/configparser.c" +#line 4394 "util/configparser.c" break; case 388: -#line 1616 "./util/configparser.y" +#line 1618 "./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) { @@ -4381,11 +4411,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4415 "util/configparser.c" break; case 389: -#line 1634 "./util/configparser.y" +#line 1636 "./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) { @@ -4397,11 +4427,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4401 "util/configparser.c" +#line 4431 "util/configparser.c" break; case 390: -#line 1647 "./util/configparser.y" +#line 1649 "./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) { @@ -4413,11 +4443,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4417 "util/configparser.c" +#line 4447 "util/configparser.c" break; case 391: -#line 1660 "./util/configparser.y" +#line 1662 "./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) @@ -4425,11 +4455,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4429 "util/configparser.c" +#line 4459 "util/configparser.c" break; case 392: -#line 1669 "./util/configparser.y" +#line 1671 "./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) @@ -4437,11 +4467,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4441 "util/configparser.c" +#line 4471 "util/configparser.c" break; case 393: -#line 1678 "./util/configparser.y" +#line 1680 "./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) @@ -4449,11 +4479,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4453 "util/configparser.c" +#line 4483 "util/configparser.c" break; case 394: -#line 1687 "./util/configparser.y" +#line 1689 "./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) @@ -4461,11 +4491,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4465 "util/configparser.c" +#line 4495 "util/configparser.c" break; case 395: -#line 1696 "./util/configparser.y" +#line 1698 "./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) @@ -4474,11 +4504,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4478 "util/configparser.c" +#line 4508 "util/configparser.c" break; case 396: -#line 1706 "./util/configparser.y" +#line 1708 "./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) @@ -4487,11 +4517,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4491 "util/configparser.c" +#line 4521 "util/configparser.c" break; case 397: -#line 1716 "./util/configparser.y" +#line 1718 "./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) @@ -4501,11 +4531,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4505 "util/configparser.c" +#line 4535 "util/configparser.c" break; case 398: -#line 1727 "./util/configparser.y" +#line 1729 "./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) @@ -4513,11 +4543,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4517 "util/configparser.c" +#line 4547 "util/configparser.c" break; case 399: -#line 1736 "./util/configparser.y" +#line 1738 "./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) @@ -4525,11 +4555,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4529 "util/configparser.c" +#line 4559 "util/configparser.c" break; case 400: -#line 1745 "./util/configparser.y" +#line 1747 "./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) @@ -4537,11 +4567,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4541 "util/configparser.c" +#line 4571 "util/configparser.c" break; case 401: -#line 1754 "./util/configparser.y" +#line 1756 "./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) @@ -4549,11 +4579,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4553 "util/configparser.c" +#line 4583 "util/configparser.c" break; case 402: -#line 1763 "./util/configparser.y" +#line 1765 "./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) @@ -4561,11 +4591,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4565 "util/configparser.c" +#line 4595 "util/configparser.c" break; case 403: -#line 1772 "./util/configparser.y" +#line 1774 "./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) @@ -4573,11 +4603,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4577 "util/configparser.c" +#line 4607 "util/configparser.c" break; case 404: -#line 1781 "./util/configparser.y" +#line 1783 "./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) @@ -4589,11 +4619,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4593 "util/configparser.c" +#line 4623 "util/configparser.c" break; case 405: -#line 1794 "./util/configparser.y" +#line 1796 "./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) @@ -4605,11 +4635,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4609 "util/configparser.c" +#line 4639 "util/configparser.c" break; case 406: -#line 1807 "./util/configparser.y" +#line 1809 "./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) @@ -4617,21 +4647,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4621 "util/configparser.c" +#line 4651 "util/configparser.c" break; case 407: -#line 1816 "./util/configparser.y" +#line 1818 "./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 4631 "util/configparser.c" +#line 4661 "util/configparser.c" break; case 408: -#line 1823 "./util/configparser.y" +#line 1825 "./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) @@ -4639,11 +4669,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4643 "util/configparser.c" +#line 4673 "util/configparser.c" break; case 409: -#line 1832 "./util/configparser.y" +#line 1834 "./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) @@ -4651,11 +4681,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4655 "util/configparser.c" +#line 4685 "util/configparser.c" break; case 410: -#line 1841 "./util/configparser.y" +#line 1843 "./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) @@ -4663,11 +4693,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4667 "util/configparser.c" +#line 4697 "util/configparser.c" break; case 411: -#line 1850 "./util/configparser.y" +#line 1852 "./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) @@ -4676,22 +4706,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4680 "util/configparser.c" +#line 4710 "util/configparser.c" break; case 412: -#line 1859 "./util/configparser.y" +#line 1861 "./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 4691 "util/configparser.c" +#line 4721 "util/configparser.c" break; case 413: -#line 1867 "./util/configparser.y" +#line 1869 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4703,22 +4733,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4707 "util/configparser.c" +#line 4737 "util/configparser.c" break; case 414: -#line 1880 "./util/configparser.y" +#line 1882 "./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 4718 "util/configparser.c" +#line 4748 "util/configparser.c" break; case 415: -#line 1888 "./util/configparser.y" +#line 1890 "./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 && @@ -4758,21 +4788,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4762 "util/configparser.c" +#line 4792 "util/configparser.c" break; case 416: -#line 1929 "./util/configparser.y" +#line 1931 "./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 4772 "util/configparser.c" +#line 4802 "util/configparser.c" break; case 417: -#line 1936 "./util/configparser.y" +#line 1938 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4786,11 +4816,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4790 "util/configparser.c" +#line 4820 "util/configparser.c" break; case 418: -#line 1951 "./util/configparser.y" +#line 1953 "./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) @@ -4799,11 +4829,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4803 "util/configparser.c" +#line 4833 "util/configparser.c" break; case 419: -#line 1961 "./util/configparser.y" +#line 1963 "./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) @@ -4812,41 +4842,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4816 "util/configparser.c" +#line 4846 "util/configparser.c" break; case 420: -#line 1971 "./util/configparser.y" +#line 1973 "./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 4826 "util/configparser.c" +#line 4856 "util/configparser.c" break; case 421: -#line 1978 "./util/configparser.y" +#line 1980 "./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 4836 "util/configparser.c" +#line 4866 "util/configparser.c" break; case 422: -#line 1985 "./util/configparser.y" +#line 1987 "./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 4846 "util/configparser.c" +#line 4876 "util/configparser.c" break; case 423: -#line 1992 "./util/configparser.y" +#line 1994 "./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) @@ -4854,22 +4884,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4858 "util/configparser.c" +#line 4888 "util/configparser.c" break; case 424: -#line 2001 "./util/configparser.y" +#line 2003 "./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 4869 "util/configparser.c" +#line 4899 "util/configparser.c" break; case 425: -#line 2009 "./util/configparser.y" +#line 2011 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4882,11 +4912,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4886 "util/configparser.c" +#line 4916 "util/configparser.c" break; case 426: -#line 2023 "./util/configparser.y" +#line 2025 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4906,11 +4936,11 @@ yyreduce: } } } -#line 4910 "util/configparser.c" +#line 4940 "util/configparser.c" break; case 427: -#line 2044 "./util/configparser.y" +#line 2046 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4930,11 +4960,11 @@ yyreduce: } } } -#line 4934 "util/configparser.c" +#line 4964 "util/configparser.c" break; case 428: -#line 2065 "./util/configparser.y" +#line 2067 "./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, @@ -4945,11 +4975,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4949 "util/configparser.c" +#line 4979 "util/configparser.c" break; case 429: -#line 2077 "./util/configparser.y" +#line 2079 "./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, @@ -4960,11 +4990,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4964 "util/configparser.c" +#line 4994 "util/configparser.c" break; case 430: -#line 2089 "./util/configparser.y" +#line 2091 "./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, @@ -4975,11 +5005,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4979 "util/configparser.c" +#line 5009 "util/configparser.c" break; case 431: -#line 2101 "./util/configparser.y" +#line 2103 "./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, @@ -4987,11 +5017,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4991 "util/configparser.c" +#line 5021 "util/configparser.c" break; case 432: -#line 2110 "./util/configparser.y" +#line 2112 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5011,11 +5041,11 @@ yyreduce: } } } -#line 5015 "util/configparser.c" +#line 5045 "util/configparser.c" break; case 433: -#line 2131 "./util/configparser.y" +#line 2133 "./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) @@ -5023,11 +5053,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5027 "util/configparser.c" +#line 5057 "util/configparser.c" break; case 434: -#line 2141 "./util/configparser.y" +#line 2143 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5035,33 +5065,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5039 "util/configparser.c" +#line 5069 "util/configparser.c" break; case 435: -#line 2150 "./util/configparser.y" +#line 2152 "./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 5050 "util/configparser.c" +#line 5080 "util/configparser.c" break; case 436: -#line 2158 "./util/configparser.y" +#line 2160 "./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 5061 "util/configparser.c" +#line 5091 "util/configparser.c" break; case 437: -#line 2166 "./util/configparser.y" +#line 2168 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5073,11 +5103,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5077 "util/configparser.c" +#line 5107 "util/configparser.c" break; case 438: -#line 2179 "./util/configparser.y" +#line 2181 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5089,11 +5119,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5093 "util/configparser.c" +#line 5123 "util/configparser.c" break; case 439: -#line 2192 "./util/configparser.y" +#line 2194 "./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) { @@ -5107,11 +5137,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5111 "util/configparser.c" +#line 5141 "util/configparser.c" break; case 440: -#line 2207 "./util/configparser.y" +#line 2209 "./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) { @@ -5125,11 +5155,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5129 "util/configparser.c" +#line 5159 "util/configparser.c" break; case 441: -#line 2222 "./util/configparser.y" +#line 2224 "./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) @@ -5137,11 +5167,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5141 "util/configparser.c" +#line 5171 "util/configparser.c" break; case 442: -#line 2231 "./util/configparser.y" +#line 2233 "./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) @@ -5149,20 +5179,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5153 "util/configparser.c" +#line 5183 "util/configparser.c" break; case 443: -#line 2240 "./util/configparser.y" +#line 2242 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5162 "util/configparser.c" +#line 5192 "util/configparser.c" break; case 444: -#line 2246 "./util/configparser.y" +#line 2248 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5170,11 +5200,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5174 "util/configparser.c" +#line 5204 "util/configparser.c" break; case 445: -#line 2255 "./util/configparser.y" +#line 2257 "./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) @@ -5182,11 +5212,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5186 "util/configparser.c" +#line 5216 "util/configparser.c" break; case 446: -#line 2264 "./util/configparser.y" +#line 2266 "./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) @@ -5195,11 +5225,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5199 "util/configparser.c" +#line 5229 "util/configparser.c" break; case 447: -#line 2274 "./util/configparser.y" +#line 2276 "./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) @@ -5208,11 +5238,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5212 "util/configparser.c" +#line 5242 "util/configparser.c" break; case 448: -#line 2284 "./util/configparser.y" +#line 2286 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5224,11 +5254,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5228 "util/configparser.c" +#line 5258 "util/configparser.c" break; case 449: -#line 2297 "./util/configparser.y" +#line 2299 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5240,11 +5270,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5244 "util/configparser.c" +#line 5274 "util/configparser.c" break; case 450: -#line 2310 "./util/configparser.y" +#line 2312 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5255,11 +5285,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5259 "util/configparser.c" +#line 5289 "util/configparser.c" break; case 451: -#line 2322 "./util/configparser.y" +#line 2324 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5272,11 +5302,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5276 "util/configparser.c" +#line 5306 "util/configparser.c" break; case 452: -#line 2336 "./util/configparser.y" +#line 2338 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5287,11 +5317,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5291 "util/configparser.c" +#line 5321 "util/configparser.c" break; case 453: -#line 2348 "./util/configparser.y" +#line 2350 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5304,11 +5334,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5308 "util/configparser.c" +#line 5338 "util/configparser.c" break; case 454: -#line 2362 "./util/configparser.y" +#line 2364 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5317,31 +5347,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5321 "util/configparser.c" +#line 5351 "util/configparser.c" break; case 455: -#line 2372 "./util/configparser.y" +#line 2374 "./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 5331 "util/configparser.c" +#line 5361 "util/configparser.c" break; case 456: -#line 2379 "./util/configparser.y" +#line 2381 "./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 5341 "util/configparser.c" +#line 5371 "util/configparser.c" break; case 457: -#line 2386 "./util/configparser.y" +#line 2388 "./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) @@ -5349,11 +5379,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5353 "util/configparser.c" +#line 5383 "util/configparser.c" break; case 458: -#line 2395 "./util/configparser.y" +#line 2397 "./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) @@ -5361,11 +5391,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5365 "util/configparser.c" +#line 5395 "util/configparser.c" break; case 459: -#line 2404 "./util/configparser.y" +#line 2406 "./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) @@ -5374,11 +5404,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5378 "util/configparser.c" +#line 5408 "util/configparser.c" break; case 460: -#line 2414 "./util/configparser.y" +#line 2416 "./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) @@ -5387,11 +5417,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5391 "util/configparser.c" +#line 5421 "util/configparser.c" break; case 461: -#line 2424 "./util/configparser.y" +#line 2426 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5400,31 +5430,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5404 "util/configparser.c" +#line 5434 "util/configparser.c" break; case 462: -#line 2434 "./util/configparser.y" +#line 2436 "./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 5414 "util/configparser.c" +#line 5444 "util/configparser.c" break; case 463: -#line 2441 "./util/configparser.y" +#line 2443 "./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 5424 "util/configparser.c" +#line 5454 "util/configparser.c" break; case 464: -#line 2448 "./util/configparser.y" +#line 2450 "./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) @@ -5432,11 +5462,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5436 "util/configparser.c" +#line 5466 "util/configparser.c" break; case 465: -#line 2457 "./util/configparser.y" +#line 2459 "./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) @@ -5444,11 +5474,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5448 "util/configparser.c" +#line 5478 "util/configparser.c" break; case 466: -#line 2466 "./util/configparser.y" +#line 2468 "./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) @@ -5457,11 +5487,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5461 "util/configparser.c" +#line 5491 "util/configparser.c" break; case 467: -#line 2476 "./util/configparser.y" +#line 2478 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5470,52 +5500,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5474 "util/configparser.c" +#line 5504 "util/configparser.c" break; case 468: -#line 2486 "./util/configparser.y" +#line 2488 "./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 5484 "util/configparser.c" +#line 5514 "util/configparser.c" break; case 469: -#line 2493 "./util/configparser.y" +#line 2495 "./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 5494 "util/configparser.c" +#line 5524 "util/configparser.c" break; case 470: -#line 2500 "./util/configparser.y" +#line 2502 "./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 5504 "util/configparser.c" +#line 5534 "util/configparser.c" break; case 471: -#line 2507 "./util/configparser.y" +#line 2509 "./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 5515 "util/configparser.c" +#line 5545 "util/configparser.c" break; case 472: -#line 2515 "./util/configparser.y" +#line 2517 "./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) @@ -5524,11 +5554,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5528 "util/configparser.c" +#line 5558 "util/configparser.c" break; case 473: -#line 2525 "./util/configparser.y" +#line 2527 "./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) @@ -5537,11 +5567,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5541 "util/configparser.c" +#line 5571 "util/configparser.c" break; case 474: -#line 2535 "./util/configparser.y" +#line 2537 "./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) @@ -5550,11 +5580,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5554 "util/configparser.c" +#line 5584 "util/configparser.c" break; case 475: -#line 2545 "./util/configparser.y" +#line 2547 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5563,11 +5593,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5567 "util/configparser.c" +#line 5597 "util/configparser.c" break; case 476: -#line 2555 "./util/configparser.y" +#line 2557 "./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 && @@ -5605,11 +5635,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5609 "util/configparser.c" +#line 5639 "util/configparser.c" break; case 477: -#line 2594 "./util/configparser.y" +#line 2596 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5618,33 +5648,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5622 "util/configparser.c" +#line 5652 "util/configparser.c" break; case 478: -#line 2604 "./util/configparser.y" +#line 2606 "./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 5633 "util/configparser.c" +#line 5663 "util/configparser.c" break; case 479: -#line 2612 "./util/configparser.y" +#line 2614 "./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 5644 "util/configparser.c" +#line 5674 "util/configparser.c" break; case 480: -#line 2620 "./util/configparser.y" +#line 2622 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5658,11 +5688,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5662 "util/configparser.c" +#line 5692 "util/configparser.c" break; case 481: -#line 2635 "./util/configparser.y" +#line 2637 "./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) @@ -5670,19 +5700,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5674 "util/configparser.c" +#line 5704 "util/configparser.c" break; case 482: -#line 2644 "./util/configparser.y" +#line 2646 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5682 "util/configparser.c" +#line 5712 "util/configparser.c" break; case 493: -#line 2655 "./util/configparser.y" +#line 2657 "./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) @@ -5691,11 +5721,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5695 "util/configparser.c" +#line 5725 "util/configparser.c" break; case 494: -#line 2665 "./util/configparser.y" +#line 2667 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5703,79 +5733,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5707 "util/configparser.c" +#line 5737 "util/configparser.c" break; case 495: -#line 2674 "./util/configparser.y" +#line 2676 "./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 5717 "util/configparser.c" +#line 5747 "util/configparser.c" break; case 496: -#line 2681 "./util/configparser.y" +#line 2683 "./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 5727 "util/configparser.c" +#line 5757 "util/configparser.c" break; case 497: -#line 2688 "./util/configparser.y" +#line 2690 "./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 5737 "util/configparser.c" +#line 5767 "util/configparser.c" break; case 498: -#line 2695 "./util/configparser.y" +#line 2697 "./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 5747 "util/configparser.c" +#line 5777 "util/configparser.c" break; case 499: -#line 2702 "./util/configparser.y" +#line 2704 "./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 5757 "util/configparser.c" +#line 5787 "util/configparser.c" break; case 500: -#line 2709 "./util/configparser.y" +#line 2711 "./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 5767 "util/configparser.c" +#line 5797 "util/configparser.c" break; case 501: -#line 2716 "./util/configparser.y" +#line 2718 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5775 "util/configparser.c" +#line 5805 "util/configparser.c" break; - case 516: -#line 2733 "./util/configparser.y" + case 522: +#line 2738 "./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) @@ -5783,21 +5813,83 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5787 "util/configparser.c" +#line 5817 "util/configparser.c" break; - case 517: -#line 2742 "./util/configparser.y" + case 523: +#line 2747 "./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 5797 "util/configparser.c" +#line 5827 "util/configparser.c" break; - case 518: -#line 2749 "./util/configparser.y" + case 524: +#line 2754 "./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 5837 "util/configparser.c" + break; + + case 525: +#line 2761 "./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 5849 "util/configparser.c" + break; + + case 526: +#line 2770 "./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 5859 "util/configparser.c" + break; + + case 527: +#line 2777 "./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 5869 "util/configparser.c" + break; + + case 528: +#line 2784 "./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 5879 "util/configparser.c" + break; + + case 529: +#line 2791 "./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 5889 "util/configparser.c" + break; + + case 530: +#line 2798 "./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) @@ -5805,11 +5897,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5809 "util/configparser.c" +#line 5901 "util/configparser.c" break; - case 519: -#line 2758 "./util/configparser.y" + case 531: +#line 2807 "./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) @@ -5817,31 +5909,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5821 "util/configparser.c" +#line 5913 "util/configparser.c" break; - case 520: -#line 2767 "./util/configparser.y" + case 532: +#line 2816 "./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 5831 "util/configparser.c" +#line 5923 "util/configparser.c" break; - case 521: -#line 2774 "./util/configparser.y" + case 533: +#line 2823 "./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 5841 "util/configparser.c" +#line 5933 "util/configparser.c" break; - case 522: -#line 2781 "./util/configparser.y" + case 534: +#line 2830 "./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) @@ -5850,11 +5942,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5854 "util/configparser.c" +#line 5946 "util/configparser.c" break; - case 523: -#line 2791 "./util/configparser.y" + case 535: +#line 2840 "./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) @@ -5863,11 +5955,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5867 "util/configparser.c" +#line 5959 "util/configparser.c" break; - case 524: -#line 2801 "./util/configparser.y" + case 536: +#line 2850 "./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) @@ -5876,11 +5968,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5880 "util/configparser.c" +#line 5972 "util/configparser.c" break; - case 525: -#line 2811 "./util/configparser.y" + case 537: +#line 2860 "./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) @@ -5889,11 +5981,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5893 "util/configparser.c" +#line 5985 "util/configparser.c" break; - case 526: -#line 2821 "./util/configparser.y" + case 538: +#line 2870 "./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) @@ -5902,11 +5994,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5906 "util/configparser.c" +#line 5998 "util/configparser.c" break; - case 527: -#line 2831 "./util/configparser.y" + case 539: +#line 2880 "./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) @@ -5915,29 +6007,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5919 "util/configparser.c" +#line 6011 "util/configparser.c" break; - case 528: -#line 2841 "./util/configparser.y" + case 540: +#line 2890 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 5927 "util/configparser.c" +#line 6019 "util/configparser.c" break; - case 532: -#line 2850 "./util/configparser.y" + case 544: +#line 2899 "./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 5937 "util/configparser.c" +#line 6029 "util/configparser.c" break; - case 533: -#line 2856 "./util/configparser.y" + case 545: +#line 2905 "./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) @@ -5946,21 +6038,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5950 "util/configparser.c" +#line 6042 "util/configparser.c" break; - case 534: -#line 2866 "./util/configparser.y" + case 546: +#line 2915 "./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 5960 "util/configparser.c" +#line 6052 "util/configparser.c" break; - case 535: -#line 2873 "./util/configparser.y" + case 547: +#line 2922 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5968,30 +6060,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5972 "util/configparser.c" +#line 6064 "util/configparser.c" break; - case 536: -#line 2882 "./util/configparser.y" + case 548: +#line 2931 "./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 5983 "util/configparser.c" +#line 6075 "util/configparser.c" break; - case 537: -#line 2890 "./util/configparser.y" + case 549: +#line 2939 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5991 "util/configparser.c" +#line 6083 "util/configparser.c" break; - case 550: -#line 2906 "./util/configparser.y" + case 562: +#line 2955 "./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) @@ -5999,11 +6091,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6003 "util/configparser.c" +#line 6095 "util/configparser.c" break; - case 551: -#line 2916 "./util/configparser.y" + case 563: +#line 2965 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6011,21 +6103,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6015 "util/configparser.c" +#line 6107 "util/configparser.c" break; - case 552: -#line 2925 "./util/configparser.y" + case 564: +#line 2974 "./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 6025 "util/configparser.c" +#line 6117 "util/configparser.c" break; - case 553: -#line 2932 "./util/configparser.y" + case 565: +#line 2981 "./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))) @@ -6033,21 +6125,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6037 "util/configparser.c" +#line 6129 "util/configparser.c" break; - case 554: -#line 2941 "./util/configparser.y" + case 566: +#line 2990 "./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 6047 "util/configparser.c" +#line 6139 "util/configparser.c" break; - case 555: -#line 2948 "./util/configparser.y" + case 567: +#line 2997 "./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))) @@ -6055,22 +6147,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6059 "util/configparser.c" +#line 6151 "util/configparser.c" break; - case 556: -#line 2957 "./util/configparser.y" + case 568: +#line 3006 "./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 6070 "util/configparser.c" +#line 6162 "util/configparser.c" break; - case 557: -#line 2965 "./util/configparser.y" + case 569: +#line 3014 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6082,22 +6174,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6086 "util/configparser.c" +#line 6178 "util/configparser.c" break; - case 558: -#line 2978 "./util/configparser.y" + case 570: +#line 3027 "./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 6097 "util/configparser.c" +#line 6189 "util/configparser.c" break; - case 559: -#line 2986 "./util/configparser.y" + case 571: +#line 3035 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6109,19 +6201,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6113 "util/configparser.c" +#line 6205 "util/configparser.c" break; - case 560: -#line 2999 "./util/configparser.y" + case 572: +#line 3048 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6121 "util/configparser.c" +#line 6213 "util/configparser.c" break; - case 568: -#line 3009 "./util/configparser.y" + case 580: +#line 3058 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6132,11 +6224,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6136 "util/configparser.c" +#line 6228 "util/configparser.c" break; - case 569: -#line 3021 "./util/configparser.y" + case 581: +#line 3070 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6147,11 +6239,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6151 "util/configparser.c" +#line 6243 "util/configparser.c" break; - case 570: -#line 3033 "./util/configparser.y" + case 582: +#line 3082 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6162,11 +6254,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6166 "util/configparser.c" +#line 6258 "util/configparser.c" break; - case 571: -#line 3045 "./util/configparser.y" + case 583: +#line 3094 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6180,11 +6272,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6184 "util/configparser.c" +#line 6276 "util/configparser.c" break; - case 572: -#line 3060 "./util/configparser.y" + case 584: +#line 3109 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6196,11 +6288,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6200 "util/configparser.c" +#line 6292 "util/configparser.c" break; - case 573: -#line 3073 "./util/configparser.y" + case 585: +#line 3122 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6210,19 +6302,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6214 "util/configparser.c" +#line 6306 "util/configparser.c" break; - case 574: -#line 3084 "./util/configparser.y" + case 586: +#line 3133 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6222 "util/configparser.c" +#line 6314 "util/configparser.c" break; - case 579: -#line 3093 "./util/configparser.y" + case 591: +#line 3142 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6236,11 +6328,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6240 "util/configparser.c" +#line 6332 "util/configparser.c" break; - case 580: -#line 3108 "./util/configparser.y" + case 592: +#line 3157 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6254,11 +6346,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6258 "util/configparser.c" +#line 6350 "util/configparser.c" break; -#line 6262 "util/configparser.c" +#line 6354 "util/configparser.c" default: break; } @@ -6490,7 +6582,7 @@ yyreturn: #endif return yyresult; } -#line 3122 "./util/configparser.y" +#line 3171 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 4d7e6b12f..42a66bac8 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -200,130 +200,136 @@ extern int yydebug; VAR_DNSTAP = 406, VAR_DNSTAP_ENABLE = 407, VAR_DNSTAP_SOCKET_PATH = 408, - VAR_DNSTAP_SEND_IDENTITY = 409, - VAR_DNSTAP_SEND_VERSION = 410, - VAR_DNSTAP_IDENTITY = 411, - VAR_DNSTAP_VERSION = 412, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 413, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 414, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 415, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 416, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 417, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 418, - VAR_RESPONSE_IP_TAG = 419, - VAR_RESPONSE_IP = 420, - VAR_RESPONSE_IP_DATA = 421, - VAR_HARDEN_ALGO_DOWNGRADE = 422, - VAR_IP_TRANSPARENT = 423, - VAR_DISABLE_DNSSEC_LAME_CHECK = 424, - VAR_IP_RATELIMIT = 425, - VAR_IP_RATELIMIT_SLABS = 426, - VAR_IP_RATELIMIT_SIZE = 427, - VAR_RATELIMIT = 428, - VAR_RATELIMIT_SLABS = 429, - VAR_RATELIMIT_SIZE = 430, - VAR_RATELIMIT_FOR_DOMAIN = 431, - VAR_RATELIMIT_BELOW_DOMAIN = 432, - VAR_IP_RATELIMIT_FACTOR = 433, - VAR_RATELIMIT_FACTOR = 434, - VAR_SEND_CLIENT_SUBNET = 435, - VAR_CLIENT_SUBNET_ZONE = 436, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 437, - VAR_CLIENT_SUBNET_OPCODE = 438, - VAR_MAX_CLIENT_SUBNET_IPV4 = 439, - VAR_MAX_CLIENT_SUBNET_IPV6 = 440, - VAR_MIN_CLIENT_SUBNET_IPV4 = 441, - VAR_MIN_CLIENT_SUBNET_IPV6 = 442, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 443, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 444, - VAR_CAPS_WHITELIST = 445, - VAR_CACHE_MAX_NEGATIVE_TTL = 446, - VAR_PERMIT_SMALL_HOLDDOWN = 447, - VAR_QNAME_MINIMISATION = 448, - VAR_QNAME_MINIMISATION_STRICT = 449, - VAR_IP_FREEBIND = 450, - VAR_DEFINE_TAG = 451, - VAR_LOCAL_ZONE_TAG = 452, - VAR_ACCESS_CONTROL_TAG = 453, - VAR_LOCAL_ZONE_OVERRIDE = 454, - VAR_ACCESS_CONTROL_TAG_ACTION = 455, - VAR_ACCESS_CONTROL_TAG_DATA = 456, - VAR_VIEW = 457, - VAR_ACCESS_CONTROL_VIEW = 458, - VAR_VIEW_FIRST = 459, - VAR_SERVE_EXPIRED = 460, - VAR_SERVE_EXPIRED_TTL = 461, - VAR_SERVE_EXPIRED_TTL_RESET = 462, - VAR_SERVE_EXPIRED_REPLY_TTL = 463, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 464, - VAR_FAKE_DSA = 465, - VAR_FAKE_SHA1 = 466, - VAR_LOG_IDENTITY = 467, - VAR_HIDE_TRUSTANCHOR = 468, - VAR_TRUST_ANCHOR_SIGNALING = 469, - VAR_AGGRESSIVE_NSEC = 470, - VAR_USE_SYSTEMD = 471, - VAR_SHM_ENABLE = 472, - VAR_SHM_KEY = 473, - VAR_ROOT_KEY_SENTINEL = 474, - VAR_DNSCRYPT = 475, - VAR_DNSCRYPT_ENABLE = 476, - VAR_DNSCRYPT_PORT = 477, - VAR_DNSCRYPT_PROVIDER = 478, - VAR_DNSCRYPT_SECRET_KEY = 479, - VAR_DNSCRYPT_PROVIDER_CERT = 480, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 481, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 482, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 483, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 484, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 485, - VAR_IPSECMOD_ENABLED = 486, - VAR_IPSECMOD_HOOK = 487, - VAR_IPSECMOD_IGNORE_BOGUS = 488, - VAR_IPSECMOD_MAX_TTL = 489, - VAR_IPSECMOD_WHITELIST = 490, - VAR_IPSECMOD_STRICT = 491, - VAR_CACHEDB = 492, - VAR_CACHEDB_BACKEND = 493, - VAR_CACHEDB_SECRETSEED = 494, - VAR_CACHEDB_REDISHOST = 495, - VAR_CACHEDB_REDISPORT = 496, - VAR_CACHEDB_REDISTIMEOUT = 497, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 498, - VAR_FOR_UPSTREAM = 499, - VAR_AUTH_ZONE = 500, - VAR_ZONEFILE = 501, - VAR_MASTER = 502, - VAR_URL = 503, - VAR_FOR_DOWNSTREAM = 504, - VAR_FALLBACK_ENABLED = 505, - VAR_TLS_ADDITIONAL_PORT = 506, - VAR_LOW_RTT = 507, - VAR_LOW_RTT_PERMIL = 508, - VAR_FAST_SERVER_PERMIL = 509, - VAR_FAST_SERVER_NUM = 510, - VAR_ALLOW_NOTIFY = 511, - VAR_TLS_WIN_CERT = 512, - VAR_TCP_CONNECTION_LIMIT = 513, - VAR_FORWARD_NO_CACHE = 514, - VAR_STUB_NO_CACHE = 515, - VAR_LOG_SERVFAIL = 516, - VAR_DENY_ANY = 517, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 518, - VAR_LOG_TAG_QUERYREPLY = 519, - VAR_STREAM_WAIT_SIZE = 520, - VAR_TLS_CIPHERS = 521, - VAR_TLS_CIPHERSUITES = 522, - VAR_IPSET = 523, - VAR_IPSET_NAME_V4 = 524, - VAR_IPSET_NAME_V6 = 525, - VAR_TLS_SESSION_TICKET_KEYS = 526, - VAR_RPZ = 527, - VAR_TAGS = 528, - VAR_RPZ_ACTION_OVERRIDE = 529, - VAR_RPZ_CNAME_OVERRIDE = 530, - VAR_RPZ_LOG = 531, - VAR_RPZ_LOG_NAME = 532 + VAR_DNSTAP_IP = 409, + VAR_DNSTAP_TLS = 410, + VAR_DNSTAP_TLS_SERVER_NAME = 411, + VAR_DNSTAP_TLS_CERT_BUNDLE = 412, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 413, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 414, + VAR_DNSTAP_SEND_IDENTITY = 415, + VAR_DNSTAP_SEND_VERSION = 416, + VAR_DNSTAP_IDENTITY = 417, + VAR_DNSTAP_VERSION = 418, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 419, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 420, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 421, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 422, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 423, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 424, + VAR_RESPONSE_IP_TAG = 425, + VAR_RESPONSE_IP = 426, + VAR_RESPONSE_IP_DATA = 427, + VAR_HARDEN_ALGO_DOWNGRADE = 428, + VAR_IP_TRANSPARENT = 429, + VAR_DISABLE_DNSSEC_LAME_CHECK = 430, + VAR_IP_RATELIMIT = 431, + VAR_IP_RATELIMIT_SLABS = 432, + VAR_IP_RATELIMIT_SIZE = 433, + VAR_RATELIMIT = 434, + VAR_RATELIMIT_SLABS = 435, + VAR_RATELIMIT_SIZE = 436, + VAR_RATELIMIT_FOR_DOMAIN = 437, + VAR_RATELIMIT_BELOW_DOMAIN = 438, + VAR_IP_RATELIMIT_FACTOR = 439, + VAR_RATELIMIT_FACTOR = 440, + VAR_SEND_CLIENT_SUBNET = 441, + VAR_CLIENT_SUBNET_ZONE = 442, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 443, + VAR_CLIENT_SUBNET_OPCODE = 444, + VAR_MAX_CLIENT_SUBNET_IPV4 = 445, + VAR_MAX_CLIENT_SUBNET_IPV6 = 446, + VAR_MIN_CLIENT_SUBNET_IPV4 = 447, + VAR_MIN_CLIENT_SUBNET_IPV6 = 448, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 449, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 450, + VAR_CAPS_WHITELIST = 451, + VAR_CACHE_MAX_NEGATIVE_TTL = 452, + VAR_PERMIT_SMALL_HOLDDOWN = 453, + VAR_QNAME_MINIMISATION = 454, + VAR_QNAME_MINIMISATION_STRICT = 455, + VAR_IP_FREEBIND = 456, + VAR_DEFINE_TAG = 457, + VAR_LOCAL_ZONE_TAG = 458, + VAR_ACCESS_CONTROL_TAG = 459, + VAR_LOCAL_ZONE_OVERRIDE = 460, + VAR_ACCESS_CONTROL_TAG_ACTION = 461, + VAR_ACCESS_CONTROL_TAG_DATA = 462, + VAR_VIEW = 463, + VAR_ACCESS_CONTROL_VIEW = 464, + VAR_VIEW_FIRST = 465, + VAR_SERVE_EXPIRED = 466, + VAR_SERVE_EXPIRED_TTL = 467, + VAR_SERVE_EXPIRED_TTL_RESET = 468, + VAR_SERVE_EXPIRED_REPLY_TTL = 469, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 470, + VAR_FAKE_DSA = 471, + VAR_FAKE_SHA1 = 472, + VAR_LOG_IDENTITY = 473, + VAR_HIDE_TRUSTANCHOR = 474, + VAR_TRUST_ANCHOR_SIGNALING = 475, + VAR_AGGRESSIVE_NSEC = 476, + VAR_USE_SYSTEMD = 477, + VAR_SHM_ENABLE = 478, + VAR_SHM_KEY = 479, + VAR_ROOT_KEY_SENTINEL = 480, + VAR_DNSCRYPT = 481, + VAR_DNSCRYPT_ENABLE = 482, + VAR_DNSCRYPT_PORT = 483, + VAR_DNSCRYPT_PROVIDER = 484, + VAR_DNSCRYPT_SECRET_KEY = 485, + VAR_DNSCRYPT_PROVIDER_CERT = 486, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 487, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 488, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 489, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 490, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 491, + VAR_IPSECMOD_ENABLED = 492, + VAR_IPSECMOD_HOOK = 493, + VAR_IPSECMOD_IGNORE_BOGUS = 494, + VAR_IPSECMOD_MAX_TTL = 495, + VAR_IPSECMOD_WHITELIST = 496, + VAR_IPSECMOD_STRICT = 497, + VAR_CACHEDB = 498, + VAR_CACHEDB_BACKEND = 499, + VAR_CACHEDB_SECRETSEED = 500, + VAR_CACHEDB_REDISHOST = 501, + VAR_CACHEDB_REDISPORT = 502, + VAR_CACHEDB_REDISTIMEOUT = 503, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 504, + VAR_FOR_UPSTREAM = 505, + VAR_AUTH_ZONE = 506, + VAR_ZONEFILE = 507, + VAR_MASTER = 508, + VAR_URL = 509, + VAR_FOR_DOWNSTREAM = 510, + VAR_FALLBACK_ENABLED = 511, + VAR_TLS_ADDITIONAL_PORT = 512, + VAR_LOW_RTT = 513, + VAR_LOW_RTT_PERMIL = 514, + VAR_FAST_SERVER_PERMIL = 515, + VAR_FAST_SERVER_NUM = 516, + VAR_ALLOW_NOTIFY = 517, + VAR_TLS_WIN_CERT = 518, + VAR_TCP_CONNECTION_LIMIT = 519, + VAR_FORWARD_NO_CACHE = 520, + VAR_STUB_NO_CACHE = 521, + VAR_LOG_SERVFAIL = 522, + VAR_DENY_ANY = 523, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 524, + VAR_LOG_TAG_QUERYREPLY = 525, + VAR_STREAM_WAIT_SIZE = 526, + VAR_TLS_CIPHERS = 527, + VAR_TLS_CIPHERSUITES = 528, + VAR_IPSET = 529, + VAR_IPSET_NAME_V4 = 530, + VAR_IPSET_NAME_V6 = 531, + VAR_TLS_SESSION_TICKET_KEYS = 532, + VAR_RPZ = 533, + VAR_TAGS = 534, + VAR_RPZ_ACTION_OVERRIDE = 535, + VAR_RPZ_CNAME_OVERRIDE = 536, + VAR_RPZ_LOG = 537, + VAR_RPZ_LOG_NAME = 538 }; #endif /* Tokens. */ @@ -478,130 +484,136 @@ extern int yydebug; #define VAR_DNSTAP 406 #define VAR_DNSTAP_ENABLE 407 #define VAR_DNSTAP_SOCKET_PATH 408 -#define VAR_DNSTAP_SEND_IDENTITY 409 -#define VAR_DNSTAP_SEND_VERSION 410 -#define VAR_DNSTAP_IDENTITY 411 -#define VAR_DNSTAP_VERSION 412 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 413 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 414 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 415 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 416 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 417 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 418 -#define VAR_RESPONSE_IP_TAG 419 -#define VAR_RESPONSE_IP 420 -#define VAR_RESPONSE_IP_DATA 421 -#define VAR_HARDEN_ALGO_DOWNGRADE 422 -#define VAR_IP_TRANSPARENT 423 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 424 -#define VAR_IP_RATELIMIT 425 -#define VAR_IP_RATELIMIT_SLABS 426 -#define VAR_IP_RATELIMIT_SIZE 427 -#define VAR_RATELIMIT 428 -#define VAR_RATELIMIT_SLABS 429 -#define VAR_RATELIMIT_SIZE 430 -#define VAR_RATELIMIT_FOR_DOMAIN 431 -#define VAR_RATELIMIT_BELOW_DOMAIN 432 -#define VAR_IP_RATELIMIT_FACTOR 433 -#define VAR_RATELIMIT_FACTOR 434 -#define VAR_SEND_CLIENT_SUBNET 435 -#define VAR_CLIENT_SUBNET_ZONE 436 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 437 -#define VAR_CLIENT_SUBNET_OPCODE 438 -#define VAR_MAX_CLIENT_SUBNET_IPV4 439 -#define VAR_MAX_CLIENT_SUBNET_IPV6 440 -#define VAR_MIN_CLIENT_SUBNET_IPV4 441 -#define VAR_MIN_CLIENT_SUBNET_IPV6 442 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 443 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 444 -#define VAR_CAPS_WHITELIST 445 -#define VAR_CACHE_MAX_NEGATIVE_TTL 446 -#define VAR_PERMIT_SMALL_HOLDDOWN 447 -#define VAR_QNAME_MINIMISATION 448 -#define VAR_QNAME_MINIMISATION_STRICT 449 -#define VAR_IP_FREEBIND 450 -#define VAR_DEFINE_TAG 451 -#define VAR_LOCAL_ZONE_TAG 452 -#define VAR_ACCESS_CONTROL_TAG 453 -#define VAR_LOCAL_ZONE_OVERRIDE 454 -#define VAR_ACCESS_CONTROL_TAG_ACTION 455 -#define VAR_ACCESS_CONTROL_TAG_DATA 456 -#define VAR_VIEW 457 -#define VAR_ACCESS_CONTROL_VIEW 458 -#define VAR_VIEW_FIRST 459 -#define VAR_SERVE_EXPIRED 460 -#define VAR_SERVE_EXPIRED_TTL 461 -#define VAR_SERVE_EXPIRED_TTL_RESET 462 -#define VAR_SERVE_EXPIRED_REPLY_TTL 463 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 464 -#define VAR_FAKE_DSA 465 -#define VAR_FAKE_SHA1 466 -#define VAR_LOG_IDENTITY 467 -#define VAR_HIDE_TRUSTANCHOR 468 -#define VAR_TRUST_ANCHOR_SIGNALING 469 -#define VAR_AGGRESSIVE_NSEC 470 -#define VAR_USE_SYSTEMD 471 -#define VAR_SHM_ENABLE 472 -#define VAR_SHM_KEY 473 -#define VAR_ROOT_KEY_SENTINEL 474 -#define VAR_DNSCRYPT 475 -#define VAR_DNSCRYPT_ENABLE 476 -#define VAR_DNSCRYPT_PORT 477 -#define VAR_DNSCRYPT_PROVIDER 478 -#define VAR_DNSCRYPT_SECRET_KEY 479 -#define VAR_DNSCRYPT_PROVIDER_CERT 480 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 481 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 482 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 483 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 484 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 485 -#define VAR_IPSECMOD_ENABLED 486 -#define VAR_IPSECMOD_HOOK 487 -#define VAR_IPSECMOD_IGNORE_BOGUS 488 -#define VAR_IPSECMOD_MAX_TTL 489 -#define VAR_IPSECMOD_WHITELIST 490 -#define VAR_IPSECMOD_STRICT 491 -#define VAR_CACHEDB 492 -#define VAR_CACHEDB_BACKEND 493 -#define VAR_CACHEDB_SECRETSEED 494 -#define VAR_CACHEDB_REDISHOST 495 -#define VAR_CACHEDB_REDISPORT 496 -#define VAR_CACHEDB_REDISTIMEOUT 497 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 498 -#define VAR_FOR_UPSTREAM 499 -#define VAR_AUTH_ZONE 500 -#define VAR_ZONEFILE 501 -#define VAR_MASTER 502 -#define VAR_URL 503 -#define VAR_FOR_DOWNSTREAM 504 -#define VAR_FALLBACK_ENABLED 505 -#define VAR_TLS_ADDITIONAL_PORT 506 -#define VAR_LOW_RTT 507 -#define VAR_LOW_RTT_PERMIL 508 -#define VAR_FAST_SERVER_PERMIL 509 -#define VAR_FAST_SERVER_NUM 510 -#define VAR_ALLOW_NOTIFY 511 -#define VAR_TLS_WIN_CERT 512 -#define VAR_TCP_CONNECTION_LIMIT 513 -#define VAR_FORWARD_NO_CACHE 514 -#define VAR_STUB_NO_CACHE 515 -#define VAR_LOG_SERVFAIL 516 -#define VAR_DENY_ANY 517 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 518 -#define VAR_LOG_TAG_QUERYREPLY 519 -#define VAR_STREAM_WAIT_SIZE 520 -#define VAR_TLS_CIPHERS 521 -#define VAR_TLS_CIPHERSUITES 522 -#define VAR_IPSET 523 -#define VAR_IPSET_NAME_V4 524 -#define VAR_IPSET_NAME_V6 525 -#define VAR_TLS_SESSION_TICKET_KEYS 526 -#define VAR_RPZ 527 -#define VAR_TAGS 528 -#define VAR_RPZ_ACTION_OVERRIDE 529 -#define VAR_RPZ_CNAME_OVERRIDE 530 -#define VAR_RPZ_LOG 531 -#define VAR_RPZ_LOG_NAME 532 +#define VAR_DNSTAP_IP 409 +#define VAR_DNSTAP_TLS 410 +#define VAR_DNSTAP_TLS_SERVER_NAME 411 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 412 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 413 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 414 +#define VAR_DNSTAP_SEND_IDENTITY 415 +#define VAR_DNSTAP_SEND_VERSION 416 +#define VAR_DNSTAP_IDENTITY 417 +#define VAR_DNSTAP_VERSION 418 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 419 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 420 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 421 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 422 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 423 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 424 +#define VAR_RESPONSE_IP_TAG 425 +#define VAR_RESPONSE_IP 426 +#define VAR_RESPONSE_IP_DATA 427 +#define VAR_HARDEN_ALGO_DOWNGRADE 428 +#define VAR_IP_TRANSPARENT 429 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 430 +#define VAR_IP_RATELIMIT 431 +#define VAR_IP_RATELIMIT_SLABS 432 +#define VAR_IP_RATELIMIT_SIZE 433 +#define VAR_RATELIMIT 434 +#define VAR_RATELIMIT_SLABS 435 +#define VAR_RATELIMIT_SIZE 436 +#define VAR_RATELIMIT_FOR_DOMAIN 437 +#define VAR_RATELIMIT_BELOW_DOMAIN 438 +#define VAR_IP_RATELIMIT_FACTOR 439 +#define VAR_RATELIMIT_FACTOR 440 +#define VAR_SEND_CLIENT_SUBNET 441 +#define VAR_CLIENT_SUBNET_ZONE 442 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 443 +#define VAR_CLIENT_SUBNET_OPCODE 444 +#define VAR_MAX_CLIENT_SUBNET_IPV4 445 +#define VAR_MAX_CLIENT_SUBNET_IPV6 446 +#define VAR_MIN_CLIENT_SUBNET_IPV4 447 +#define VAR_MIN_CLIENT_SUBNET_IPV6 448 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 449 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 450 +#define VAR_CAPS_WHITELIST 451 +#define VAR_CACHE_MAX_NEGATIVE_TTL 452 +#define VAR_PERMIT_SMALL_HOLDDOWN 453 +#define VAR_QNAME_MINIMISATION 454 +#define VAR_QNAME_MINIMISATION_STRICT 455 +#define VAR_IP_FREEBIND 456 +#define VAR_DEFINE_TAG 457 +#define VAR_LOCAL_ZONE_TAG 458 +#define VAR_ACCESS_CONTROL_TAG 459 +#define VAR_LOCAL_ZONE_OVERRIDE 460 +#define VAR_ACCESS_CONTROL_TAG_ACTION 461 +#define VAR_ACCESS_CONTROL_TAG_DATA 462 +#define VAR_VIEW 463 +#define VAR_ACCESS_CONTROL_VIEW 464 +#define VAR_VIEW_FIRST 465 +#define VAR_SERVE_EXPIRED 466 +#define VAR_SERVE_EXPIRED_TTL 467 +#define VAR_SERVE_EXPIRED_TTL_RESET 468 +#define VAR_SERVE_EXPIRED_REPLY_TTL 469 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 470 +#define VAR_FAKE_DSA 471 +#define VAR_FAKE_SHA1 472 +#define VAR_LOG_IDENTITY 473 +#define VAR_HIDE_TRUSTANCHOR 474 +#define VAR_TRUST_ANCHOR_SIGNALING 475 +#define VAR_AGGRESSIVE_NSEC 476 +#define VAR_USE_SYSTEMD 477 +#define VAR_SHM_ENABLE 478 +#define VAR_SHM_KEY 479 +#define VAR_ROOT_KEY_SENTINEL 480 +#define VAR_DNSCRYPT 481 +#define VAR_DNSCRYPT_ENABLE 482 +#define VAR_DNSCRYPT_PORT 483 +#define VAR_DNSCRYPT_PROVIDER 484 +#define VAR_DNSCRYPT_SECRET_KEY 485 +#define VAR_DNSCRYPT_PROVIDER_CERT 486 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 487 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 488 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 489 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 490 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 491 +#define VAR_IPSECMOD_ENABLED 492 +#define VAR_IPSECMOD_HOOK 493 +#define VAR_IPSECMOD_IGNORE_BOGUS 494 +#define VAR_IPSECMOD_MAX_TTL 495 +#define VAR_IPSECMOD_WHITELIST 496 +#define VAR_IPSECMOD_STRICT 497 +#define VAR_CACHEDB 498 +#define VAR_CACHEDB_BACKEND 499 +#define VAR_CACHEDB_SECRETSEED 500 +#define VAR_CACHEDB_REDISHOST 501 +#define VAR_CACHEDB_REDISPORT 502 +#define VAR_CACHEDB_REDISTIMEOUT 503 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 504 +#define VAR_FOR_UPSTREAM 505 +#define VAR_AUTH_ZONE 506 +#define VAR_ZONEFILE 507 +#define VAR_MASTER 508 +#define VAR_URL 509 +#define VAR_FOR_DOWNSTREAM 510 +#define VAR_FALLBACK_ENABLED 511 +#define VAR_TLS_ADDITIONAL_PORT 512 +#define VAR_LOW_RTT 513 +#define VAR_LOW_RTT_PERMIL 514 +#define VAR_FAST_SERVER_PERMIL 515 +#define VAR_FAST_SERVER_NUM 516 +#define VAR_ALLOW_NOTIFY 517 +#define VAR_TLS_WIN_CERT 518 +#define VAR_TCP_CONNECTION_LIMIT 519 +#define VAR_FORWARD_NO_CACHE 520 +#define VAR_STUB_NO_CACHE 521 +#define VAR_LOG_SERVFAIL 522 +#define VAR_DENY_ANY 523 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 524 +#define VAR_LOG_TAG_QUERYREPLY 525 +#define VAR_STREAM_WAIT_SIZE 526 +#define VAR_TLS_CIPHERS 527 +#define VAR_TLS_CIPHERSUITES 528 +#define VAR_IPSET 529 +#define VAR_IPSET_NAME_V4 530 +#define VAR_IPSET_NAME_V6 531 +#define VAR_TLS_SESSION_TICKET_KEYS 532 +#define VAR_RPZ 533 +#define VAR_TAGS 534 +#define VAR_RPZ_ACTION_OVERRIDE 535 +#define VAR_RPZ_CNAME_OVERRIDE 536 +#define VAR_RPZ_LOG 537 +#define VAR_RPZ_LOG_NAME 538 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -611,7 +623,7 @@ union YYSTYPE char* str; -#line 615 "util/configparser.h" +#line 627 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 798f4a972..50eb5dbdb 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -116,7 +116,9 @@ extern struct config_parser_state* cfg_parser; %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES %token VAR_INFRA_CACHE_MIN_RTT %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA -%token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH +%token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP +%token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE +%token VAR_DNSTAP_TLS_CLIENT_KEY_FILE VAR_DNSTAP_TLS_CLIENT_CERT_FILE %token VAR_DNSTAP_SEND_IDENTITY VAR_DNSTAP_SEND_VERSION %token VAR_DNSTAP_IDENTITY VAR_DNSTAP_VERSION %token VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES @@ -2720,6 +2722,9 @@ dtstart: VAR_DNSTAP contents_dt: contents_dt content_dt | ; content_dt: dt_dnstap_enable | 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 | @@ -2745,6 +2750,50 @@ dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG cfg_parser->cfg->dnstap_socket_path = $2; } ; +dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG + { + OUTYY(("P(dt_dnstap_ip:%s)\n", $2)); + free(cfg_parser->cfg->dnstap_ip); + cfg_parser->cfg->dnstap_ip = $2; + } + ; +dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG + { + OUTYY(("P(dt_dnstap_tls:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_tls = (strcmp($2, "yes")==0); + free($2); + } + ; +dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG + { + OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", $2)); + free(cfg_parser->cfg->dnstap_tls_server_name); + cfg_parser->cfg->dnstap_tls_server_name = $2; + } + ; +dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG + { + OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", $2)); + free(cfg_parser->cfg->dnstap_tls_cert_bundle); + cfg_parser->cfg->dnstap_tls_cert_bundle = $2; + } + ; +dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG + { + OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", $2)); + free(cfg_parser->cfg->dnstap_tls_client_key_file); + cfg_parser->cfg->dnstap_tls_client_key_file = $2; + } + ; +dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG + { + OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", $2)); + free(cfg_parser->cfg->dnstap_tls_client_cert_file); + cfg_parser->cfg->dnstap_tls_client_cert_file = $2; + } + ; dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG { OUTYY(("P(dt_dnstap_send_identity:%s)\n", $2)); From 6d1b4e050d6d766707f1a18b69d684c86877b3cf Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 10:01:37 +0100 Subject: [PATCH 078/235] dnstap io, dnstap tls default is yes, and man page documentation. --- doc/example.conf.in | 2 +- doc/unbound.conf.5.in | 72 +++++++++++++++++++++++++++++++++++++++++++ util/config_file.c | 1 + 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index ec1b1ac70..277ea1977 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1026,7 +1026,7 @@ remote-control: # # set it to "IPaddress[@port]" of the destination. # dnstap-ip: "" # # if set to yes if you want to use TLS to dnstap-ip, no for TCP. -# dnstap-tls: no +# dnstap-tls: yes # # name for authenticating the upstream server. or "" disabled. # dnstap-tls-server-name: "" # # if "", it uses the cert bundle from the main unbound config. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 38c2d2984..86a962430 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2114,6 +2114,78 @@ If this timeout expires Unbound closes the connection, treats it as if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. +.SS DNSTAP Logging Options +DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. +.TP +.B dnstap-enable: \fI +If dnstap is enabled. Default no. If yes, it connects to the dnstap server +and if any of the dnstap-log-..-messages options is enabled it sends logs +for those messages to the server. +.TP +.B dnstap-socket-path: \fI +Sets the unix socket file name for connecting to the server that is +listening on that socket. Default is "@DNSTAP_SOCKET_PATH@". +.TP +.B dnstap-ip: \fI +If "", the unix socket is used, if set with an IP address (IPv4 or IPv6) +that address is used to connect to the server. +.TP +.B dnstap-tls: \fI +Set this to use TLS to connect to the server specified in \fBdnstap-ip\fR. +The default is yes. If set to no, TCP is used to connect to the server. +.TP +.B dnstap-tls-server-name: \fI +The TLS server name to authenticate the server with. Used when \fBdnstap-tls\fR is enabled. If "" it is ignored, default "". +.TP +.B dnstap-tls-cert-bundle: \fI +The pem file with certs to verify the TLS server certificate. If "" the +server default cert bundle is used, or the windows cert bundle on windows. +Default is "". +.TP +.B dnstap-tls-client-key-file: \fI +The client key file for TLS client authentication. If "" client +authentication is not used. Default is "". +.TP +.B dnstap-tls-client-cert-file: \fI +The client cert file for TLS client authentication. Default is "". +.TP +.B dnstap-send-identity: \fI +If enabled, the server identity is included in the log messages. +Default is no. +.TP +.B dnstap-send-version: \fI +If enabled, the server version if included in the log messages. +Default is no. +.TP +.B dnstap-identity: \fI +The identity to send with messages, if "" the hostname is used. +Default is "". +.TP +.B dnstap-version: \fI +The version to send with messages, if "" the package version is used. +Default is "". +.TP +.B dnstap-log-resolver-query-messages: \fI +Enable to log resolver query messages. Default is no. +These are messages from unbound to upstream servers. +.TP +.B dnstap-log-resolver-response-messages: \fI +Enable to log resolver response messages. Default is no. +These are replies from upstream servers to unbound. +.TP +.B dnstap-log-client-query-messages: \fI +Enable to log client query messages. Default is no. +These are client queries to unbound. +.TP +.B dnstap-log-client-response-messages: \fI +Enable to log client response messages. Default is no. +These are responses from unbound to clients. +.TP +.B dnstap-log-forwarder-query-messages: \fI +Enable to log forwarder query messages. Default is no. +.TP +.B dnstap-log-forwarder-response-messages: \fI +Enable to log forwarder response messages. Default is no. .SS Response Policy Zone Options .LP Response Policy Zones are configured with \fBrpz:\fR, and each one must have a diff --git a/util/config_file.c b/util/config_file.c index 19a5a0bcd..394cf17f3 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -295,6 +295,7 @@ config_create(void) if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH))) goto error_exit; #endif + cfg->dnstap_tls = 1; cfg->disable_dnssec_lame_check = 0; cfg->ip_ratelimit = 0; cfg->ratelimit = 0; From 748b70ae8bf082b2967f0fb84f90b4ee4844e187 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 10:33:33 +0100 Subject: [PATCH 079/235] dnstap io, fix clang analysis warning --- dnstap/dtstream.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 4af83cd41..7474de1e3 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -275,6 +275,10 @@ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) } if(dtio->upstream_is_tcp || dtio->upstream_is_tls) { + if(!cfg->dnstap_ip || cfg->dnstap_ip[0] == 0) { + log_err("dnstap setup: no dnstap-ip for TCP connect"); + return 0; + } free(dtio->ip_str); dtio->ip_str = strdup(cfg->dnstap_ip); if(!dtio->ip_str) { From 465af5845731c4cf42fed27731ae9654161c9d57 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 13:23:58 +0100 Subject: [PATCH 080/235] dnstap io, fix to compile without ssl. --- dnstap/dtstream.c | 18 ++++++++++++++++++ dnstap/unbound-dnstap-socket.c | 22 ++++++++++++++++++++++ services/outside_network.c | 2 ++ util/net_help.c | 2 ++ 4 files changed, 44 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 7474de1e3..ba545dd7c 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -83,8 +83,10 @@ static int dtio_add_output_event_write(struct dt_io_thread* dtio); static void dtio_reconnect_enable(struct dt_io_thread* dtio); /** stop from stop_flush event loop */ static void dtio_stop_flush_exit(struct stop_flush_info* info); +#ifdef HAVE_SSL /** enable briefly waiting for a read event, for SSL negotiation */ static int dtio_enable_brief_read(struct dt_io_thread* dtio); +#endif struct dt_msg_queue* dt_msg_queue_create(void) @@ -638,6 +640,7 @@ static int dtio_check_nb_connect(struct dt_io_thread* dtio) return 1; /* everything okay */ } +#ifdef HAVE_SSL /** write to ssl output * returns number of bytes written, 0 if nothing happened, * try again later, or -1 if the channel is to be closed. */ @@ -679,6 +682,7 @@ static int dtio_write_ssl(struct dt_io_thread* dtio, uint8_t* buf, } return r; } +#endif /* HAVE_SSL */ /** write buffer to output. * returns number of bytes written, 0 if nothing happened, @@ -689,8 +693,10 @@ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, ssize_t ret; if(dtio->fd == -1) return -1; +#ifdef HAVE_SSL if(dtio->ssl) return dtio_write_ssl(dtio, buf, len); +#endif ret = send(dtio->fd, (void*)buf, len, 0); if(ret == -1) { #ifndef USE_WINSOCK @@ -948,6 +954,7 @@ static void dtio_sleep(struct dt_io_thread* dtio) (void)dtio_add_output_event_read(dtio); } +#ifdef HAVE_SSL /** enable the brief read condition */ static int dtio_enable_brief_read(struct dt_io_thread* dtio) { @@ -963,7 +970,9 @@ static int dtio_enable_brief_read(struct dt_io_thread* dtio) } return dtio_add_output_event_read(dtio); } +#endif /* HAVE_SSL */ +#ifdef HAVE_SSL /** disable the brief read condition */ static int dtio_disable_brief_read(struct dt_io_thread* dtio) { @@ -979,7 +988,9 @@ static int dtio_disable_brief_read(struct dt_io_thread* dtio) } return dtio_add_output_event_write(dtio); } +#endif /* HAVE_SSL */ +#ifdef HAVE_SSL /** check peer verification after ssl handshake connection, false if closed*/ static int dtio_ssl_check_peer(struct dt_io_thread* dtio) { @@ -1030,7 +1041,9 @@ static int dtio_ssl_check_peer(struct dt_io_thread* dtio) } return 1; } +#endif /* HAVE_SSL */ +#ifdef HAVE_SSL /** perform ssl handshake, returns 1 if okay, 0 to stop */ static int dtio_ssl_handshake(struct dt_io_thread* dtio, struct stop_flush_info* info) @@ -1116,6 +1129,7 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, } return 1; } +#endif /* HAVE_SSL */ /** callback for the dnstap events, to write to the output */ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) @@ -1137,11 +1151,13 @@ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) /* nonblocking connect check passed, continue */ } +#ifdef HAVE_SSL if(dtio->ssl && (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) { if(!dtio_ssl_handshake(dtio, NULL)) return; } +#endif if((bits&UB_EV_READ)) { if(!dtio_check_close(dtio)) @@ -1352,11 +1368,13 @@ static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) } /* nonblocking connect check passed, continue */ } +#ifdef HAVE_SSL if(dtio->ssl && (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) { if(!dtio_ssl_handshake(dtio, info)) return; } +#endif if((bits&UB_EV_READ)) { if(!dtio_check_close(dtio)) { diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index eda75e0c0..803236196 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -178,7 +178,9 @@ static void tap_socket_close(struct tap_socket* s) static void tap_socket_delete(struct tap_socket* s) { if(!s) return; +#ifdef HAVE_SSL SSL_CTX_free(s->sslctx); +#endif ub_event_free(s->ev); free(s->socketpath); free(s->ip); @@ -702,6 +704,8 @@ static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, return ret; } +/* define routine for have_ssl only to avoid unused function warning */ +#ifdef HAVE_SSL /** set to wait briefly for a write event, for one event call */ static void tap_enable_brief_write(struct tap_data* data) { @@ -712,7 +716,10 @@ static void tap_enable_brief_write(struct tap_data* data) log_err("could not ub_event_add in tap_enable_brief_write"); data->ssl_brief_write = 1; } +#endif /* HAVE_SSL */ +/* define routine for have_ssl only to avoid unused function warning */ +#ifdef HAVE_SSL /** stop the brief wait for a write event. back to reading. */ static void tap_disable_brief_write(struct tap_data* data) { @@ -723,7 +730,9 @@ static void tap_disable_brief_write(struct tap_data* data) log_err("could not ub_event_add in tap_disable_brief_write"); data->ssl_brief_write = 0; } +#endif /* HAVE_SSL */ +#ifdef HAVE_SSL /** receive bytes over ssl stream, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len) @@ -764,13 +773,16 @@ static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len) } return r; } +#endif /* HAVE_SSL */ /** receive bytes on the tap connection, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ static ssize_t tap_receive(struct tap_data* data, void* buf, size_t len) { +#ifdef HAVE_SSL if(data->ssl) return ssl_read_bytes(data, buf, len); +#endif return receive_bytes(data, data->fd, buf, len); } @@ -779,7 +791,9 @@ void tap_data_free(struct tap_data* data) { ub_event_del(data->ev); ub_event_free(data->ev); +#ifdef HAVE_SSL SSL_free(data->ssl); +#endif close(data->fd); free(data->id); free(data->frame); @@ -865,6 +879,7 @@ static int reply_with_finish(int fd) return 1; } +#ifdef HAVE_SSL /** check SSL peer certificate, return 0 on fail */ static int tap_check_peer(struct tap_data* data) { @@ -910,7 +925,9 @@ static int tap_check_peer(struct tap_data* data) } return 1; } +#endif /* HAVE_SSL */ +#ifdef HAVE_SSL /** perform SSL handshake, return 0 to wait for events, 1 if done */ static int tap_handshake(struct tap_data* data) { @@ -974,17 +991,20 @@ static int tap_handshake(struct tap_data* data) } return 1; } +#endif /* HAVE_SSL */ /** callback for dnstap listener */ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_data* data = (struct tap_data*)arg; if(verbosity>=3) log_info("tap callback"); +#ifdef HAVE_SSL if(data->ssl && (!data->ssl_handshake_done || data->ssl_brief_write)) { if(!tap_handshake(data)) return; } +#endif while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; ssize_t ret = tap_receive(data, @@ -1351,6 +1371,7 @@ int main(int argc, char** argv) argv += optind; if(usessl) { +#ifdef HAVE_SSL #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif @@ -1368,6 +1389,7 @@ int main(int argc, char** argv) #else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif +#endif /* HAVE_SSL */ } setup_and_run(&local_list, &tcp_list, &tls_list, server_key, server_cert, verifypem); diff --git a/services/outside_network.c b/services/outside_network.c index 612767056..721dd335a 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -375,7 +375,9 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) pend->c->ssl_shake_state = comm_ssl_shake_write; if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name)) { pend->c->fd = s; +#ifdef HAVE_SSL SSL_free(pend->c->ssl); +#endif pend->c->ssl = NULL; comm_point_close(pend->c); return 0; diff --git a/util/net_help.c b/util/net_help.c index 007eaff0b..98c92ad86 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1223,6 +1223,8 @@ int set_auth_name_on_ssl(void* ssl, char* auth_name) if(!auth_name) return 1; #ifdef HAVE_SSL (void)SSL_set_tlsext_host_name(ssl, auth_name); +#else + (void)ssl; #endif #ifdef HAVE_SSL_SET1_HOST SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL); From 583e8b71e4fa51f20f3db84feb98054aabdb4c2c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 13:54:07 +0100 Subject: [PATCH 081/235] Nicer comment text. --- dnstap/dnstap_fstrm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnstap/dnstap_fstrm.c b/dnstap/dnstap_fstrm.c index 51ff71a6e..be4acace8 100644 --- a/dnstap/dnstap_fstrm.c +++ b/dnstap/dnstap_fstrm.c @@ -52,7 +52,7 @@ void* fstrm_create_control_frame_start(char* contenttype, size_t* len) * 4byte 0: control indicator. * 4byte bigendian: length of control frame * 4byte bigendian: type START - * 4byte bigendian: frame option: content-type + * 4byte bigendian: option: content-type * 4byte bigendian: length of string * string of content type (dnstap) */ From 7da19e96cec049cc58a176576525db60df78dad1 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 14:16:56 +0100 Subject: [PATCH 082/235] dnstap io, test for TCP and reconnect for that. --- dnstap/unbound-dnstap-socket.c | 2 + testdata/dnstap_tcp.tdir/dnstap_tcp.conf | 42 +++++++++ testdata/dnstap_tcp.tdir/dnstap_tcp.dsc | 16 ++++ testdata/dnstap_tcp.tdir/dnstap_tcp.post | 23 +++++ testdata/dnstap_tcp.tdir/dnstap_tcp.pre | 54 ++++++++++++ testdata/dnstap_tcp.tdir/dnstap_tcp.test | 91 ++++++++++++++++++++ testdata/dnstap_tcp.tdir/dnstap_tcp.testns | 22 +++++ testdata/dnstap_tcp.tdir/unbound_control.key | 15 ++++ testdata/dnstap_tcp.tdir/unbound_control.pem | 11 +++ testdata/dnstap_tcp.tdir/unbound_server.key | 15 ++++ testdata/dnstap_tcp.tdir/unbound_server.pem | 11 +++ 11 files changed, 302 insertions(+) create mode 100644 testdata/dnstap_tcp.tdir/dnstap_tcp.conf create mode 100644 testdata/dnstap_tcp.tdir/dnstap_tcp.dsc create mode 100644 testdata/dnstap_tcp.tdir/dnstap_tcp.post create mode 100644 testdata/dnstap_tcp.tdir/dnstap_tcp.pre create mode 100644 testdata/dnstap_tcp.tdir/dnstap_tcp.test create mode 100644 testdata/dnstap_tcp.tdir/dnstap_tcp.testns create mode 100644 testdata/dnstap_tcp.tdir/unbound_control.key create mode 100644 testdata/dnstap_tcp.tdir/unbound_control.pem create mode 100644 testdata/dnstap_tcp.tdir/unbound_server.key create mode 100644 testdata/dnstap_tcp.tdir/unbound_server.pem diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 803236196..e26e12ede 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -1266,9 +1266,11 @@ setup_and_run(struct config_strlist_head* local_list, verifypem); if(!tap_socket_list_addevs(maindata->acceptlist, base)) fatal_exit("could not setup accept events"); + if(verbosity) log_info("start of service"); ub_event_base_dispatch(base); + if(verbosity) log_info("end of service"); sig_base = NULL; tap_socket_list_delete(maindata->acceptlist); ub_event_base_free(base); diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.conf b/testdata/dnstap_tcp.tdir/dnstap_tcp.conf new file mode 100644 index 000000000..6aefaad1e --- /dev/null +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.conf @@ -0,0 +1,42 @@ +server: + verbosity: 2 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + #dnstap-socket-path: "dnstap.socket" + dnstap-ip: "127.0.0.1@@TAPPORT@" + dnstap-tls: no + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.dsc b/testdata/dnstap_tcp.tdir/dnstap_tcp.dsc new file mode 100644 index 000000000..de4ad82da --- /dev/null +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_tcp +Version: 1.0 +Description: test dnstap tcp and reconnect +CreationDate: Tue Feb 14 14:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_tcp.pre +Post: dnstap_tcp.post +Test: dnstap_tcp.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.post b/testdata/dnstap_tcp.tdir/dnstap_tcp.post new file mode 100644 index 000000000..64e30db17 --- /dev/null +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.post @@ -0,0 +1,23 @@ +# #-- dnstap_tcp.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +echo "> tap logfiles" +cat tap.log +cat tap.errlog +echo "> tap2 logfiles" +cat tap2.log +cat tap2.errlog +cat fwd.log +exit 0 diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.pre b/testdata/dnstap_tcp.tdir/dnstap_tcp.pre new file mode 100644 index 000000000..3006603c5 --- /dev/null +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.pre @@ -0,0 +1,54 @@ +# #-- dnstap_tcp.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +TAP_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_tcp.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -s "127.0.0.1@$TAP_PORT" -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap.errlog" "start of service" + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tcp.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.test b/testdata/dnstap_tcp.tdir/dnstap_tcp.test new file mode 100644 index 000000000..bf79b6d72 --- /dev/null +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.test @@ -0,0 +1,91 @@ +# #-- dnstap_tcp.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "" +echo "> test disconnect from the upstream server" + +kill_pid $DNSTAP_SOCKET_PID +dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. + +# bring log socket back up +$PRE/unbound-dnstap-socket -s "127.0.0.1@$TAP_PORT" -l -vvvv 2>tap2.errlog >tap2.log & +if test $? -ne 0; then + echo "could not start (again) unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap2.errlog" "start of service" + +dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. +sleep 2 +dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. + +for x in down up up2; do + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi + if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; + else + echo "$x.example.net. information not in tap2.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + echo "> tap2 logfiles" + cat tap2.log + cat tap2.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 + fi +done + +echo "> OK" +exit 0 diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.testns b/testdata/dnstap_tcp.tdir/dnstap_tcp.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_tcp.tdir/unbound_control.key b/testdata/dnstap_tcp.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_tcp.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tcp.tdir/unbound_control.pem b/testdata/dnstap_tcp.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_tcp.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tcp.tdir/unbound_server.key b/testdata/dnstap_tcp.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_tcp.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tcp.tdir/unbound_server.pem b/testdata/dnstap_tcp.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_tcp.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From 4d3524f496d21fc328b86dd2b44ee75dfe96b12c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 14:44:02 +0100 Subject: [PATCH 083/235] dnstap io, test for TLS and reconnect for that. And fix unused parameters for dt_create and fix check of socket path when using IP address. --- daemon/daemon.c | 3 +- dnstap/dnstap.c | 14 +-- dnstap/dnstap.h | 4 +- testdata/dnstap_tcp.tdir/dnstap_tcp.conf | 2 +- testdata/dnstap_tcp.tdir/dnstap_tcp.post | 4 +- testdata/dnstap_tls.tdir/dnstap_tls.conf | 42 +++++++++ testdata/dnstap_tls.tdir/dnstap_tls.dsc | 16 ++++ testdata/dnstap_tls.tdir/dnstap_tls.post | 23 +++++ testdata/dnstap_tls.tdir/dnstap_tls.pre | 54 ++++++++++++ testdata/dnstap_tls.tdir/dnstap_tls.test | 91 ++++++++++++++++++++ testdata/dnstap_tls.tdir/dnstap_tls.testns | 22 +++++ testdata/dnstap_tls.tdir/unbound_control.key | 15 ++++ testdata/dnstap_tls.tdir/unbound_control.pem | 11 +++ testdata/dnstap_tls.tdir/unbound_server.key | 15 ++++ testdata/dnstap_tls.tdir/unbound_server.pem | 11 +++ 15 files changed, 312 insertions(+), 15 deletions(-) create mode 100644 testdata/dnstap_tls.tdir/dnstap_tls.conf create mode 100644 testdata/dnstap_tls.tdir/dnstap_tls.dsc create mode 100644 testdata/dnstap_tls.tdir/dnstap_tls.post create mode 100644 testdata/dnstap_tls.tdir/dnstap_tls.pre create mode 100644 testdata/dnstap_tls.tdir/dnstap_tls.test create mode 100644 testdata/dnstap_tls.tdir/dnstap_tls.testns create mode 100644 testdata/dnstap_tls.tdir/unbound_control.key create mode 100644 testdata/dnstap_tls.tdir/unbound_control.pem create mode 100644 testdata/dnstap_tls.tdir/unbound_server.key create mode 100644 testdata/dnstap_tls.tdir/unbound_server.pem diff --git a/daemon/daemon.c b/daemon/daemon.c index 48f2a721d..1e1dfd002 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -451,8 +451,7 @@ daemon_create_workers(struct daemon* daemon) fatal_exit("out of memory during daemon init"); if(daemon->cfg->dnstap) { #ifdef USE_DNSTAP - daemon->dtenv = dt_create(daemon->cfg->dnstap_socket_path, - (unsigned int)daemon->num, daemon->cfg); + daemon->dtenv = dt_create(daemon->cfg); if (!daemon->dtenv) fatal_exit("dt_create failed"); #else diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index 2787c73ec..c34f08b2e 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -128,16 +128,16 @@ check_socket_file(const char* socket_path) } struct dt_env * -dt_create(const char *socket_path, unsigned num_workers, - struct config_file* cfg) +dt_create(struct config_file* cfg) { struct dt_env *env; - verbose(VERB_OPS, "attempting to connect to dnstap socket %s", - socket_path); - log_assert(socket_path != NULL); - log_assert(num_workers > 0); - check_socket_file(socket_path); + if(cfg->dnstap && cfg->dnstap_socket_path && cfg->dnstap_socket_path[0] && + (cfg->dnstap_ip==NULL || cfg->dnstap_ip[0]==0)) { + verbose(VERB_OPS, "attempting to connect to dnstap socket %s", + cfg->dnstap_socket_path); + check_socket_file(cfg->dnstap_socket_path); + } env = (struct dt_env *) calloc(1, sizeof(struct dt_env)); if (!env) diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h index c87a549aa..cfef6fc42 100644 --- a/dnstap/dnstap.h +++ b/dnstap/dnstap.h @@ -84,13 +84,11 @@ struct dt_env { * of the structure) to ensure lock-free access to its own per-worker circular * queue. Duplicate the environment object if more than one worker needs to * share access to the dnstap I/O socket. - * @param socket_path: path to dnstap logging socket, must be non-NULL. - * @param num_workers: number of worker threads, must be > 0. * @param cfg: with config settings. * @return dt_env object, NULL on failure. */ struct dt_env * -dt_create(const char *socket_path, unsigned num_workers, struct config_file* cfg); +dt_create(struct config_file* cfg); /** * Apply config settings. diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.conf b/testdata/dnstap_tcp.tdir/dnstap_tcp.conf index 6aefaad1e..3506ab56a 100644 --- a/testdata/dnstap_tcp.tdir/dnstap_tcp.conf +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.conf @@ -26,7 +26,7 @@ forward-zone: forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes - #dnstap-socket-path: "dnstap.socket" + dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: no dnstap-send-identity: yes diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.post b/testdata/dnstap_tcp.tdir/dnstap_tcp.post index 64e30db17..8aad21e19 100644 --- a/testdata/dnstap_tcp.tdir/dnstap_tcp.post +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.post @@ -17,7 +17,7 @@ echo "> tap logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" -cat tap2.log -cat tap2.errlog +if test -f tap2.log; then cat tap2.log; fi +if test -f tap2.errlog; then cat tap2.errlog; fi cat fwd.log exit 0 diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.conf b/testdata/dnstap_tls.tdir/dnstap_tls.conf new file mode 100644 index 000000000..3bff3d1d0 --- /dev/null +++ b/testdata/dnstap_tls.tdir/dnstap_tls.conf @@ -0,0 +1,42 @@ +server: + verbosity: 2 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-ip: "127.0.0.1@@TAPPORT@" + dnstap-tls: yes + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.dsc b/testdata/dnstap_tls.tdir/dnstap_tls.dsc new file mode 100644 index 000000000..20a4467ce --- /dev/null +++ b/testdata/dnstap_tls.tdir/dnstap_tls.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_tls +Version: 1.0 +Description: test dnstap tls and reconnect +CreationDate: Tue Feb 14 14:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_tls.pre +Post: dnstap_tls.post +Test: dnstap_tls.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.post b/testdata/dnstap_tls.tdir/dnstap_tls.post new file mode 100644 index 000000000..fe1824a06 --- /dev/null +++ b/testdata/dnstap_tls.tdir/dnstap_tls.post @@ -0,0 +1,23 @@ +# #-- dnstap_tls.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +echo "> tap logfiles" +cat tap.log +cat tap.errlog +echo "> tap2 logfiles" +if test -f tap2.log; then cat tap2.log; fi +if test -f tap2.errlog; then cat tap2.errlog; fi +cat fwd.log +exit 0 diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.pre b/testdata/dnstap_tls.tdir/dnstap_tls.pre new file mode 100644 index 000000000..1df914873 --- /dev/null +++ b/testdata/dnstap_tls.tdir/dnstap_tls.pre @@ -0,0 +1,54 @@ +# #-- dnstap_tls.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +TAP_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_tls.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap.errlog" "start of service" + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.test b/testdata/dnstap_tls.tdir/dnstap_tls.test new file mode 100644 index 000000000..64260eac8 --- /dev/null +++ b/testdata/dnstap_tls.tdir/dnstap_tls.test @@ -0,0 +1,91 @@ +# #-- dnstap_tls.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "" +echo "> test disconnect from the upstream server" + +kill_pid $DNSTAP_SOCKET_PID +dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. + +# bring log socket back up +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap2.errlog >tap2.log & +if test $? -ne 0; then + echo "could not start (again) unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap2.errlog" "start of service" + +dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. +sleep 2 +dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. + +for x in down up up2; do + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi + if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; + else + echo "$x.example.net. information not in tap2.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + echo "> tap2 logfiles" + cat tap2.log + cat tap2.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 + fi +done + +echo "> OK" +exit 0 diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.testns b/testdata/dnstap_tls.tdir/dnstap_tls.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_tls.tdir/dnstap_tls.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_tls.tdir/unbound_control.key b/testdata/dnstap_tls.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_tls.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls.tdir/unbound_control.pem b/testdata/dnstap_tls.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_tls.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls.tdir/unbound_server.key b/testdata/dnstap_tls.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_tls.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls.tdir/unbound_server.pem b/testdata/dnstap_tls.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_tls.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From 7b19ba3d57138871c8c17ac22acfa301847892fa Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 15:41:17 +0100 Subject: [PATCH 084/235] dnstap io, fix spinning reconnect when handshake fails for TLS. --- dnstap/dtstream.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index ba545dd7c..27a3d570c 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -65,6 +65,8 @@ #define DTIO_RECONNECT_TIMEOUT_MIN 10 /** the msec to wait for reconnect max after backoff */ #define DTIO_RECONNECT_TIMEOUT_MAX 1000 +/** the msec to wait for reconnect slow, to stop busy spinning on reconnect */ +#define DTIO_RECONNECT_TIMEOUT_SLOW 1000 struct stop_flush_info; /** DTIO command channel commands */ @@ -529,6 +531,14 @@ static void dtio_reconnect_clear(struct dt_io_thread* dtio) dtio_reconnect_del(dtio); } +/** reconnect slowly, because we already know we have to wait for a bit */ +static void dtio_reconnect_slow(struct dt_io_thread* dtio, int msec) +{ + dtio_reconnect_del(dtio); + dtio->reconnect_timeout = msec; + dtio_reconnect_enable(dtio); +} + /** delete the current message in the dtio, and reset counters */ static void dtio_cur_msg_free(struct dt_io_thread* dtio) { @@ -1078,6 +1088,7 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); + dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } else if(want == SSL_ERROR_SYSCALL) { @@ -1099,6 +1110,7 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); + dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } else { @@ -1112,6 +1124,7 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); + dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } @@ -1124,6 +1137,7 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); + dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } From 2106692a891048e1d4a7de5232ca44c8561bcb66 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Feb 2020 15:44:55 +0100 Subject: [PATCH 085/235] dnstap io, test TLS with peername and TLS authentication. --- .../dnstap_tls_peername.conf | 44 +++++++++ .../dnstap_tls_peername.dsc | 16 ++++ .../dnstap_tls_peername.post | 23 +++++ .../dnstap_tls_peername.pre | 54 +++++++++++ .../dnstap_tls_peername.test | 91 +++++++++++++++++++ .../dnstap_tls_peername.testns | 22 +++++ .../unbound_control.key | 15 +++ .../unbound_control.pem | 11 +++ .../unbound_server.key | 15 +++ .../unbound_server.pem | 11 +++ 10 files changed, 302 insertions(+) create mode 100644 testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.conf create mode 100644 testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc create mode 100644 testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post create mode 100644 testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre create mode 100644 testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test create mode 100644 testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.testns create mode 100644 testdata/dnstap_tls_peername.tdir/unbound_control.key create mode 100644 testdata/dnstap_tls_peername.tdir/unbound_control.pem create mode 100644 testdata/dnstap_tls_peername.tdir/unbound_server.key create mode 100644 testdata/dnstap_tls_peername.tdir/unbound_server.pem diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.conf b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.conf new file mode 100644 index 000000000..55f844ae4 --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.conf @@ -0,0 +1,44 @@ +server: + verbosity: 4 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-ip: "127.0.0.1@@TAPPORT@" + dnstap-tls: yes + dnstap-tls-server-name: "unbound" + dnstap-tls-cert-bundle: "unbound_server.pem" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc new file mode 100644 index 000000000..d011d5ece --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_tls_peername +Version: 1.0 +Description: test dnstap tls and reconnect +CreationDate: Tue Feb 14 14:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_tls_peername.pre +Post: dnstap_tls_peername.post +Test: dnstap_tls_peername.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post new file mode 100644 index 000000000..b2c29d0da --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post @@ -0,0 +1,23 @@ +# #-- dnstap_tls_peername.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +echo "> tap logfiles" +cat tap.log +cat tap.errlog +echo "> tap2 logfiles" +if test -f tap2.log; then cat tap2.log; fi +if test -f tap2.errlog; then cat tap2.errlog; fi +cat fwd.log +exit 0 diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre new file mode 100644 index 000000000..25b838d8b --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre @@ -0,0 +1,54 @@ +# #-- dnstap_tls_peername.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +TAP_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_tls_peername.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap.errlog" "start of service" + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_peername.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test new file mode 100644 index 000000000..6082c3a89 --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test @@ -0,0 +1,91 @@ +# #-- dnstap_tls_peername.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "" +echo "> test disconnect from the upstream server" + +kill_pid $DNSTAP_SOCKET_PID +dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. + +# bring log socket back up +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap2.errlog >tap2.log & +if test $? -ne 0; then + echo "could not start (again) unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap2.errlog" "start of service" + +dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. +sleep 2 +dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. + +for x in down up up2; do + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi + if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; + else + echo "$x.example.net. information not in tap2.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + echo "> tap2 logfiles" + cat tap2.log + cat tap2.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 + fi +done + +echo "> OK" +exit 0 diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.testns b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_tls_peername.tdir/unbound_control.key b/testdata/dnstap_tls_peername.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_control.pem b/testdata/dnstap_tls_peername.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_server.key b/testdata/dnstap_tls_peername.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_server.pem b/testdata/dnstap_tls_peername.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_tls_peername.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From 42fdfd8121a63ee7e2fc9e62ff60d700acbb061a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 17 Feb 2020 10:09:46 +0100 Subject: [PATCH 086/235] - contrib/drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format, contributed by Andreas Schulze. --- contrib/README | 2 ++ contrib/drop2rpz | 39 +++++++++++++++++++++++++++++++++++++++ doc/Changelog | 4 ++++ 3 files changed, 45 insertions(+) create mode 100644 contrib/drop2rpz diff --git a/contrib/README b/contrib/README index d8afceabd..18c076fd8 100644 --- a/contrib/README +++ b/contrib/README @@ -51,3 +51,5 @@ distribution but may be helpful. compile. From Saksham Manchanda (Secure64). Please note that we think this will drop DNSKEY and DS lookups for tlds and hence break DNSSEC lookups for downstream clients. +* drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format, + contributed by Andreas Schulze. diff --git a/contrib/drop2rpz b/contrib/drop2rpz new file mode 100644 index 000000000..01602f651 --- /dev/null +++ b/contrib/drop2rpz @@ -0,0 +1,39 @@ +#!/usr/bin/perl + +# usage: curl --silent https://www.spamhaus.org/drop/drop.txt | $0 > /path/to/spamhaus-drop.rpz.local +# +# unbound.conf: +# rpz: +# name: "spamhaus-drop.rpz.local." +# zonefile: "/path/tp/spamhaus-drop.rpz.local" +# rpz-log: yes +# rpz-log-name: "spamhaus-drop" +# + +use strict; +use vars qw{$o1 $o2 $o3 $o4 $m}; + +# trailing dots required +my $origin = 'drop.spamhaus.org.rpz.local.'; +my $mname = 'localhost.'; +my $rname = 'root.localhost.'; +my $ns = $mname; + +my $rpz_action = '.'; # return NXDOMAIN +#my $rpz_action = '*.'; # return NODATA +#my $rpz_action = 'rpz-drop.'; # drop the query + +print "$origin SOA $mname $rname 1 43200 7200 2419200 3600\n"; +print "$origin NS $ns\n"; +while(<>) { + if(($o1, $o2, $o3, $o4, $m) = m{(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)}) { + print "$m.$o4.$o3.$o2.$o1.rpz-ip.$origin CNAME $rpz_action\n"; + } else { + print "$_"; + } +} + +# add a testpoint: ask for "dns.google" +# print "32.8.8.8.8.rpz-ip.$origin CNAME $rpz_action\n"; + +exit; diff --git a/doc/Changelog b/doc/Changelog index 6bbb4dba5..03fcb7d42 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +17 February 2020: Wouter + - drop2rpz: perl script that converts the Spamhaus DROP-List in + RPZ-Format, contributed by Andreas Schulze. + 14 February 2020: Wouter - Fix spelling in unbound.conf.5.in. - Stop unbound-checkconf from insisting that auth-zone and rpz From a9b7638f4b517560f36485f6dc21701e2020b487 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 17 Feb 2020 10:10:44 +0100 Subject: [PATCH 087/235] Neater changelog --- doc/Changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 03fcb7d42..82502bc14 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,6 @@ 17 February 2020: Wouter - - drop2rpz: perl script that converts the Spamhaus DROP-List in - RPZ-Format, contributed by Andreas Schulze. + - contrib/drop2rpz: perl script that converts the Spamhaus DROP-List + in RPZ-Format, contributed by Andreas Schulze. 14 February 2020: Wouter - Fix spelling in unbound.conf.5.in. From 4b354d38c11f5609bfb69ff6ca0c0783f25f33d0 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 17 Feb 2020 12:56:20 +0100 Subject: [PATCH 088/235] - Remove unused variable. --- doc/Changelog | 3 +++ services/outside_network.c | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 82502bc14..9f14eafa5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +17 February 2020: George + - Remove unused variable. + 17 February 2020: Wouter - contrib/drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format, contributed by Andreas Schulze. diff --git a/services/outside_network.c b/services/outside_network.c index 9876c2150..80b1f1245 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1974,7 +1974,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, sq->pending = NULL; /* removed after callback */ if(error == NETEVENT_TIMEOUT) { - int rto = 0; if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000) { /* fallback to 1480/1280 */ sq->status = serviced_query_UDP_EDNS_FRAG; @@ -1990,9 +1989,9 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, sq->status = serviced_query_UDP_EDNS; } sq->retry++; - if(!(rto=infra_rtt_update(outnet->infra, &sq->addr, sq->addrlen, + if(!infra_rtt_update(outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, sq->qtype, -1, sq->last_rtt, - (time_t)now.tv_sec))) + (time_t)now.tv_sec)) log_err("out of memory in UDP exponential backoff"); if(sq->retry < OUTBOUND_UDP_RETRY) { log_name_addr(VERB_ALGO, "retry query", sq->qbuf+10, From fe5370a98ae6a0ee3161e28ec3de0ac01327a1bd Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 17 Feb 2020 13:36:30 +0100 Subject: [PATCH 089/235] - Add respip to supported module-config options in unbound-checkconf. --- doc/Changelog | 3 +++ smallapp/unbound-checkconf.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 9f14eafa5..322eceea8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +17 February 2020: Ralph + - Add respip to supported module-config options in unbound-checkconf. + 17 February 2020: George - Remove unused variable. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 27c6d4c3a..1d31fd84e 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -548,10 +548,7 @@ morechecks(struct config_file* cfg) /* check that the modules listed in module_conf exist */ check_modules_exist(cfg->module_conf); - /* There should be no reason for 'respip' module not to work with - * dns64, but it's not explicitly confirmed, so the combination is - * excluded below. It's simply unknown yet for the combination of - * respip and other modules. */ + /* Respip is know to *not* work with dns64. */ if(strcmp(cfg->module_conf, "iterator") != 0 && strcmp(cfg->module_conf, "validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator iterator") != 0 @@ -560,7 +557,9 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "respip validator iterator") != 0 #ifdef WITH_PYTHONMODULE && strcmp(cfg->module_conf, "python iterator") != 0 + && strcmp(cfg->module_conf, "python respip iterator") != 0 && strcmp(cfg->module_conf, "python validator iterator") != 0 + && strcmp(cfg->module_conf, "python respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator python iterator") != 0 && strcmp(cfg->module_conf, "dns64 python iterator") != 0 && strcmp(cfg->module_conf, "dns64 python validator iterator") != 0 @@ -570,7 +569,9 @@ morechecks(struct config_file* cfg) #endif #ifdef USE_CACHEDB && strcmp(cfg->module_conf, "validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "respip validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "cachedb iterator") != 0 + && strcmp(cfg->module_conf, "respip cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 cachedb iterator") != 0 #endif @@ -580,39 +581,61 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "dns64 python cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 python validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "python cachedb iterator") != 0 + && strcmp(cfg->module_conf, "python respip cachedb iterator") != 0 && strcmp(cfg->module_conf, "python validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "python respip validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "cachedb python iterator") != 0 + && strcmp(cfg->module_conf, "respip cachedb python iterator") != 0 && strcmp(cfg->module_conf, "validator cachedb python iterator") != 0 + && strcmp(cfg->module_conf, "respip validator cachedb python iterator") != 0 && strcmp(cfg->module_conf, "validator python cachedb iterator") != 0 + && strcmp(cfg->module_conf, "respip validator python cachedb iterator") != 0 #endif #ifdef CLIENT_SUBNET && strcmp(cfg->module_conf, "subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache iterator") != 0 && strcmp(cfg->module_conf, "subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache validator iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(CLIENT_SUBNET) && strcmp(cfg->module_conf, "python subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "python respip subnetcache iterator") != 0 && strcmp(cfg->module_conf, "subnetcache python iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache python iterator") != 0 && strcmp(cfg->module_conf, "python subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "python respip subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "subnetcache python validator iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache python validator iterator") != 0 && strcmp(cfg->module_conf, "subnetcache validator python iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache validator python iterator") != 0 #endif #ifdef USE_IPSECMOD && strcmp(cfg->module_conf, "ipsecmod iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(USE_IPSECMOD) && strcmp(cfg->module_conf, "python ipsecmod iterator") != 0 + && strcmp(cfg->module_conf, "python ipsecmod respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod python iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod python respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 && strcmp(cfg->module_conf, "python ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "python ipsecmod respip validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod python validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod python respip validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator python iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator python iterator") != 0 #endif #ifdef USE_IPSET && strcmp(cfg->module_conf, "validator ipset iterator") != 0 + && strcmp(cfg->module_conf, "validator ipset respip iterator") != 0 && strcmp(cfg->module_conf, "ipset iterator") != 0 + && strcmp(cfg->module_conf, "ipset respip iterator") != 0 #endif ) { fatal_exit("module conf '%s' is not known to work", From b7706993198fdbdb274c2958b7de13f23d62482c Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 17 Feb 2020 13:38:01 +0100 Subject: [PATCH 090/235] typo fix --- smallapp/unbound-checkconf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 1d31fd84e..c46d41215 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -548,7 +548,7 @@ morechecks(struct config_file* cfg) /* check that the modules listed in module_conf exist */ check_modules_exist(cfg->module_conf); - /* Respip is know to *not* work with dns64. */ + /* Respip is known to *not* work with dns64. */ if(strcmp(cfg->module_conf, "iterator") != 0 && strcmp(cfg->module_conf, "validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator iterator") != 0 From 85fd23769fb223707e2a30df5bf25d407364858c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 17 Feb 2020 15:24:29 +0100 Subject: [PATCH 091/235] - changelog point where the tag for 1.10.0rc2 release is. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 322eceea8..d9c72937a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +17 February 2020: Wouter + - changelog point where the tag for 1.10.0rc2 release is. + 17 February 2020: Ralph - Add respip to supported module-config options in unbound-checkconf. From 6accd3d6815ca8fd2725cff071766137c1ea829a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 18 Feb 2020 08:31:38 +0100 Subject: [PATCH 092/235] - protect X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS with ifdef for different openssl versions. --- doc/Changelog | 4 ++++ services/outside_network.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index d9c72937a..d599af68e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +18 February 2020: Wouter + - protect X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS with ifdef for + different openssl versions. + 17 February 2020: Wouter - changelog point where the tag for 1.10.0rc2 release is. diff --git a/services/outside_network.c b/services/outside_network.c index 80b1f1245..d3ebe04f6 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -398,7 +398,9 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) * set1_host like verification */ if(w->tls_auth_name) { X509_VERIFY_PARAM* param = SSL_get0_param(pend->c->ssl); +# ifdef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); +# endif if(!X509_VERIFY_PARAM_set1_host(param, w->tls_auth_name, strlen(w->tls_auth_name))) { log_err("X509_VERIFY_PARAM_set1_host failed"); pend->c->fd = s; @@ -2316,7 +2318,9 @@ setup_comm_ssl(struct comm_point* cp, struct outside_network* outnet, * set1_host like verification */ if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) { X509_VERIFY_PARAM* param = SSL_get0_param(cp->ssl); +# ifdef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); +# endif if(!X509_VERIFY_PARAM_set1_host(param, host, strlen(host))) { log_err("X509_VERIFY_PARAM_set1_host failed"); return 0; From 9556d595368ae0c63823775c4feb96d57c5c34f0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 18 Feb 2020 14:18:03 +0100 Subject: [PATCH 093/235] dnstap io, test that failed name or auth certificate fails to connect tls. --- testdata/dnstap.tdir/dnstap.test | 4 ++ testdata/dnstap_tcp.tdir/dnstap_tcp.test | 4 ++ testdata/dnstap_tls.tdir/dnstap_tls.test | 4 ++ .../dnstap_tls_badcert.conf | 48 +++++++++++++++++ .../dnstap_tls_badcert.dsc | 16 ++++++ .../dnstap_tls_badcert.post | 20 +++++++ .../dnstap_tls_badcert.pre | 54 +++++++++++++++++++ .../dnstap_tls_badcert.test | 51 ++++++++++++++++++ .../dnstap_tls_badcert.testns | 22 ++++++++ .../unbound_control.key | 15 ++++++ .../unbound_control.pem | 11 ++++ .../unbound_server.key | 15 ++++++ .../unbound_server.pem | 11 ++++ .../dnstap_tls_badname.conf | 46 ++++++++++++++++ .../dnstap_tls_badname.dsc | 16 ++++++ .../dnstap_tls_badname.post | 20 +++++++ .../dnstap_tls_badname.pre | 54 +++++++++++++++++++ .../dnstap_tls_badname.test | 51 ++++++++++++++++++ .../dnstap_tls_badname.testns | 22 ++++++++ .../unbound_control.key | 15 ++++++ .../unbound_control.pem | 11 ++++ .../unbound_server.key | 15 ++++++ .../unbound_server.pem | 11 ++++ .../dnstap_tls_peername.dsc | 2 +- .../dnstap_tls_peername.post | 3 -- .../dnstap_tls_peername.test | 45 +--------------- 26 files changed, 539 insertions(+), 47 deletions(-) create mode 100644 testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.conf create mode 100644 testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc create mode 100644 testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post create mode 100644 testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre create mode 100644 testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test create mode 100644 testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.testns create mode 100644 testdata/dnstap_tls_badcert.tdir/unbound_control.key create mode 100644 testdata/dnstap_tls_badcert.tdir/unbound_control.pem create mode 100644 testdata/dnstap_tls_badcert.tdir/unbound_server.key create mode 100644 testdata/dnstap_tls_badcert.tdir/unbound_server.pem create mode 100644 testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.conf create mode 100644 testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc create mode 100644 testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post create mode 100644 testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre create mode 100644 testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test create mode 100644 testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.testns create mode 100644 testdata/dnstap_tls_badname.tdir/unbound_control.key create mode 100644 testdata/dnstap_tls_badname.tdir/unbound_control.pem create mode 100644 testdata/dnstap_tls_badname.tdir/unbound_server.key create mode 100644 testdata/dnstap_tls_badname.tdir/unbound_server.pem diff --git a/testdata/dnstap.tdir/dnstap.test b/testdata/dnstap.tdir/dnstap.test index 4ee4daf4c..04db17b27 100644 --- a/testdata/dnstap.tdir/dnstap.test +++ b/testdata/dnstap.tdir/dnstap.test @@ -30,6 +30,8 @@ echo "> check tap.log for dnstap info" if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else @@ -56,6 +58,8 @@ dig @127.0.0.1 -p $UNBOUND_PORT q8.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q9.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q10.example.net. for x in q1 q2 q3 q4 5 q6 q7 q8 q9 q10; do + if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.test b/testdata/dnstap_tcp.tdir/dnstap_tcp.test index bf79b6d72..d57eecfdb 100644 --- a/testdata/dnstap_tcp.tdir/dnstap_tcp.test +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.test @@ -30,6 +30,8 @@ echo "> check tap.log for dnstap info" if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else @@ -66,6 +68,8 @@ sleep 2 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. for x in down up up2; do + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.test b/testdata/dnstap_tls.tdir/dnstap_tls.test index 64260eac8..f9a2bf00d 100644 --- a/testdata/dnstap_tls.tdir/dnstap_tls.test +++ b/testdata/dnstap_tls.tdir/dnstap_tls.test @@ -30,6 +30,8 @@ echo "> check tap.log for dnstap info" if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else @@ -66,6 +68,8 @@ sleep 2 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. for x in down up up2; do + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi + if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.conf b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.conf new file mode 100644 index 000000000..32698b621 --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.conf @@ -0,0 +1,48 @@ +server: + verbosity: 4 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-ip: "127.0.0.1@@TAPPORT@" + dnstap-tls: yes + dnstap-tls-server-name: "unbound" + # the actual tls cert bundle that authenticates the server + # is the unbound_server.pem bundle. + # we pass the wrong bundle. (of another key we also use in the client + # authentication test) + dnstap-tls-cert-bundle: "unbound_control.pem" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc new file mode 100644 index 000000000..e495e6c99 --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_tls_badcert +Version: 1.0 +Description: test dnstap tls with bad cert for authentication +CreationDate: Tue Feb 14 14:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_tls_badcert.pre +Post: dnstap_tls_badcert.post +Test: dnstap_tls_badcert.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post new file mode 100644 index 000000000..d71eb28ae --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post @@ -0,0 +1,20 @@ +# #-- dnstap_tls_badcert.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +echo "> tap logfiles" +cat tap.log +cat tap.errlog +cat fwd.log +exit 0 diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre new file mode 100644 index 000000000..eff7074d0 --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre @@ -0,0 +1,54 @@ +# #-- dnstap_tls_badcert.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +TAP_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_tls_badcert.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap.errlog" "start of service" + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_badcert.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test new file mode 100644 index 000000000..0b85f64ac --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test @@ -0,0 +1,51 @@ +# #-- dnstap_tls_badcert.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log; then + echo "it is in tap.log"; + echo "but there should not be a connection" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +else + echo "information not in tap.log" +fi + +echo "> OK" +exit 0 diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.testns b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_control.key b/testdata/dnstap_tls_badcert.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_control.pem b/testdata/dnstap_tls_badcert.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_server.key b/testdata/dnstap_tls_badcert.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_server.pem b/testdata/dnstap_tls_badcert.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_tls_badcert.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.conf b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.conf new file mode 100644 index 000000000..75e98a71d --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.conf @@ -0,0 +1,46 @@ +server: + verbosity: 4 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-ip: "127.0.0.1@@TAPPORT@" + dnstap-tls: yes + # actual certificate name: "unbound" + # we enter another name here. + dnstap-tls-server-name: "anothername" + dnstap-tls-cert-bundle: "unbound_server.pem" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc new file mode 100644 index 000000000..33cc38a6c --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_tls_badname +Version: 1.0 +Description: test dnstap tls test bad peer name for authentication +CreationDate: Tue Feb 14 14:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_tls_badname.pre +Post: dnstap_tls_badname.post +Test: dnstap_tls_badname.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post new file mode 100644 index 000000000..59f05b81d --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post @@ -0,0 +1,20 @@ +# #-- dnstap_tls_badname.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +echo "> tap logfiles" +cat tap.log +cat tap.errlog +cat fwd.log +exit 0 diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre new file mode 100644 index 000000000..0ffee6081 --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre @@ -0,0 +1,54 @@ +# #-- dnstap_tls_badname.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +TAP_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_tls_badname.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap.errlog" "start of service" + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_badname.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test new file mode 100644 index 000000000..248d8f222 --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test @@ -0,0 +1,51 @@ +# #-- dnstap_tls_badname.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log; then + echo "it is in tap.log"; + echo "but there should not be a connection" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +else + echo "information not in tap.log" +fi + +echo "> OK" +exit 0 diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.testns b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_tls_badname.tdir/unbound_control.key b/testdata/dnstap_tls_badname.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_control.pem b/testdata/dnstap_tls_badname.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_server.key b/testdata/dnstap_tls_badname.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_server.pem b/testdata/dnstap_tls_badname.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_tls_badname.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc index d011d5ece..bce84f55c 100644 --- a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc @@ -1,6 +1,6 @@ BaseName: dnstap_tls_peername Version: 1.0 -Description: test dnstap tls and reconnect +Description: test dnstap tls with auth name and tls authentication CreationDate: Tue Feb 14 14:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post index b2c29d0da..3ca63ada4 100644 --- a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post @@ -16,8 +16,5 @@ cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog -echo "> tap2 logfiles" -if test -f tap2.log; then cat tap2.log; fi -if test -f tap2.errlog; then cat tap2.errlog; fi cat fwd.log exit 0 diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test index 6082c3a89..03bcbadfd 100644 --- a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test @@ -30,6 +30,8 @@ echo "> check tap.log for dnstap info" if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else @@ -44,48 +46,5 @@ else exit 1 fi -echo "" -echo "> test disconnect from the upstream server" - -kill_pid $DNSTAP_SOCKET_PID -dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. - -# bring log socket back up -$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap2.errlog >tap2.log & -if test $? -ne 0; then - echo "could not start (again) unbound-dnstap-socket server" - exit 1 -fi -DNSTAP_SOCKET_PID=$! -echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test -# wait for the server to go up -wait_server_up "tap2.errlog" "start of service" - -dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. -sleep 2 -dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. - -for x in down up up2; do - if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi - if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi - if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi - if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi - if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; - else - echo "$x.example.net. information not in tap2.log" - echo "failed" - echo "> cat logfiles" - cat tap.log - cat tap.errlog - echo "> tap2 logfiles" - cat tap2.log - cat tap2.errlog - cat fwd.log - cat unbound.log - echo "Not OK" - exit 1 - fi -done - echo "> OK" exit 0 From 3753d01253e4f60bcd306480b6d3f50c3c79670b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 18 Feb 2020 16:30:13 +0100 Subject: [PATCH 094/235] dnstap io, test for client authentication, unbound can send client authentication credentials, when configured, and unbound-dnstap-socket can verify the client credentials, and refuses the connection if missing. --- .../dnstap_tls_badcert.dsc | 2 +- .../dnstap_tls_badname.dsc | 2 +- .../dnstap_tls_clientauth.conf | 46 ++++++++++++++++ .../dnstap_tls_clientauth.dsc | 16 ++++++ .../dnstap_tls_clientauth.post | 20 +++++++ .../dnstap_tls_clientauth.pre | 54 +++++++++++++++++++ .../dnstap_tls_clientauth.test | 50 +++++++++++++++++ .../dnstap_tls_clientauth.testns | 22 ++++++++ .../unbound_control.key | 15 ++++++ .../unbound_control.pem | 11 ++++ .../unbound_server.key | 15 ++++++ .../unbound_server.pem | 11 ++++ 12 files changed, 262 insertions(+), 2 deletions(-) create mode 100644 testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.conf create mode 100644 testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.dsc create mode 100644 testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post create mode 100644 testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre create mode 100644 testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test create mode 100644 testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.testns create mode 100644 testdata/dnstap_tls_clientauth.tdir/unbound_control.key create mode 100644 testdata/dnstap_tls_clientauth.tdir/unbound_control.pem create mode 100644 testdata/dnstap_tls_clientauth.tdir/unbound_server.key create mode 100644 testdata/dnstap_tls_clientauth.tdir/unbound_server.pem diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc index e495e6c99..7d392ff56 100644 --- a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc @@ -1,7 +1,7 @@ BaseName: dnstap_tls_badcert Version: 1.0 Description: test dnstap tls with bad cert for authentication -CreationDate: Tue Feb 14 14:00:38 CET 2020 +CreationDate: Tue Feb 18 13:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc index 33cc38a6c..9f878b91c 100644 --- a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc @@ -1,7 +1,7 @@ BaseName: dnstap_tls_badname Version: 1.0 Description: test dnstap tls test bad peer name for authentication -CreationDate: Tue Feb 14 14:00:38 CET 2020 +CreationDate: Tue Feb 18 13:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.conf b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.conf new file mode 100644 index 000000000..6182526ac --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.conf @@ -0,0 +1,46 @@ +server: + verbosity: 4 + num-threads: 1 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-ip: "127.0.0.1@@TAPPORT@" + dnstap-tls: yes + dnstap-tls-server-name: "unbound" + dnstap-tls-cert-bundle: "unbound_server.pem" + dnstap-tls-client-key-file: "unbound_control.key" + dnstap-tls-client-cert-file: "unbound_control.pem" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: yes + dnstap-log-resolver-response-messages: yes + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: yes + dnstap-log-forwarder-response-messages: yes + diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.dsc b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.dsc new file mode 100644 index 000000000..37aacbbd9 --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.dsc @@ -0,0 +1,16 @@ +BaseName: dnstap_tls_clientauth +Version: 1.0 +Description: test dnstap tls with client authentication +CreationDate: Tue Feb 18 14:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnstap_tls_clientauth.pre +Post: dnstap_tls_clientauth.post +Test: dnstap_tls_clientauth.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post new file mode 100644 index 000000000..83df2a72e --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post @@ -0,0 +1,20 @@ +# #-- dnstap_tls_clientauth.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +echo "> tap logfiles" +cat tap.log +cat tap.errlog +cat fwd.log +exit 0 diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre new file mode 100644 index 000000000..a035181ce --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre @@ -0,0 +1,54 @@ +# #-- dnstap_tls_clientauth.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +TAP_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnstap_tls_clientauth.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -z unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up +wait_server_up "tap.errlog" "start of service" + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_clientauth.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test new file mode 100644 index 000000000..5b9cce0a4 --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test @@ -0,0 +1,50 @@ +# #-- dnstap_tls_clientauth.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> OK" +exit 0 diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.testns b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_control.key b/testdata/dnstap_tls_clientauth.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem b/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_server.key b/testdata/dnstap_tls_clientauth.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem b/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From 8f14388cb43be382a43619b7c0abe7308d4a3505 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 18 Feb 2020 17:04:08 +0100 Subject: [PATCH 095/235] dnstap io, move control frame ready, accept and log to dnstap_fstrm code. --- dnstap/dnstap_fstrm.c | 112 +++++++++++++++++++++++++++++++++ dnstap/dnstap_fstrm.h | 37 +++++++++++ dnstap/unbound-dnstap-socket.c | 95 ++++++---------------------- 3 files changed, 168 insertions(+), 76 deletions(-) diff --git a/dnstap/dnstap_fstrm.c b/dnstap/dnstap_fstrm.c index be4acace8..aac98e567 100644 --- a/dnstap/dnstap_fstrm.c +++ b/dnstap/dnstap_fstrm.c @@ -43,6 +43,7 @@ #include "config.h" #include "dnstap/dnstap_fstrm.h" +#include "sldns/sbuffer.h" void* fstrm_create_control_frame_start(char* contenttype, size_t* len) { @@ -89,3 +90,114 @@ void* fstrm_create_control_frame_stop(size_t* len) *len = n; return control; } + +void* fstrm_create_control_frame_accept(char* contenttype, size_t* len) +{ + uint32_t* control; + size_t n; + /* control frame on reply: + * 4 bytes 0 escape + * 4 bytes bigendian length of frame + * 4 bytes bigendian type ACCEPT + * 4 bytes bigendian frame option content type + * 4 bytes bigendian length of string + * string of content type. + */ + /* len includes the escape and framelength */ + n = 4+4+4+4+4+strlen(contenttype); + control = malloc(n); + if(!control) { + return NULL; + } + control[0] = 0; + control[1] = htonl(4+4+4+strlen(contenttype)); + control[2] = htonl(FSTRM_CONTROL_FRAME_ACCEPT); + control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); + control[4] = htonl(strlen(contenttype)); + memmove(&control[5], contenttype, strlen(contenttype)); + *len = n; + return control; +} + +void* fstrm_create_control_frame_finish(size_t* len) +{ + uint32_t* control; + size_t n; + /* control frame on reply: + * 4 bytes 0 escape + * 4 bytes bigendian length of frame + * 4 bytes bigendian type FINISH + */ + /* len includes the escape and framelength */ + n = 4+4+4; + control = malloc(n); + if(!control) { + return NULL; + } + control[0] = 0; + control[1] = htonl(4); + control[2] = htonl(FSTRM_CONTROL_FRAME_FINISH); + *len = n; + return control; +} + +char* fstrm_describe_control(void* pkt, size_t len) +{ + uint32_t frametype = 0; + char buf[512]; + size_t at = 0, remain; + uint8_t* pos; + + buf[0]=0; + if(len < 4) { + snprintf(buf, sizeof(buf), "malformed control frame, " + "too short, len=%u", (unsigned int)len); + return strdup(buf); + } + frametype = sldns_read_uint32(pkt); + if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) { + at+=snprintf(buf+at, sizeof(buf)-at, "accept"); + } else if(frametype == FSTRM_CONTROL_FRAME_START) { + at+=snprintf(buf+at, sizeof(buf)-at, "start"); + } else if(frametype == FSTRM_CONTROL_FRAME_STOP) { + at+=snprintf(buf+at, sizeof(buf)-at, "stop"); + } else if(frametype == FSTRM_CONTROL_FRAME_READY) { + at+=snprintf(buf+at, sizeof(buf)-at, "ready"); + } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) { + at+=snprintf(buf+at, sizeof(buf)-at, "finish"); + } else { + at+=snprintf(buf+at, sizeof(buf)-at, "type%d", + (int)frametype); + } + + /* show the content type options */ + pos = pkt + 4; + remain = len - 4; + while(remain >= 8) { + uint32_t field_type = sldns_read_uint32(pos); + uint32_t field_len = sldns_read_uint32(pos+4); + if(remain < field_len) { + at+=snprintf(buf+at, sizeof(buf)-at, "malformed_field"); + break; + } + if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { + at+=snprintf(buf+at, sizeof(buf)-at, " content-type("); + if(at+field_len < sizeof(buf)) { + memmove(buf+at, pos+8, field_len); + at += field_len; + } + at+=snprintf(buf+at, sizeof(buf)-at, ")"); + } else { + at+=snprintf(buf+at, sizeof(buf)-at, + " field(type %u, length %u)", + (unsigned int)field_type, + (unsigned int)field_len); + } + pos += 8 + field_len; + remain -= (8 + field_len); + } + if(remain > 0) + at+=snprintf(buf+at, sizeof(buf)-at, " trailing-bytes" + "(length %u)", (unsigned int)remain); + return strdup(buf); +} diff --git a/dnstap/dnstap_fstrm.h b/dnstap/dnstap_fstrm.h index 3b70547f1..f0cf93628 100644 --- a/dnstap/dnstap_fstrm.h +++ b/dnstap/dnstap_fstrm.h @@ -139,4 +139,41 @@ void* fstrm_create_control_frame_start(char* contenttype, size_t* len); */ void* fstrm_create_control_frame_stop(size_t* len); +/** + * This creates an FSTRM control frame of type ACCEPT. + * @param contenttype: a zero delimited string with the content type. + * for dnstap streams use DNSTAP_CONTENT_TYPE. + * @param len: if a buffer is returned this is the length of that buffer. + * @return NULL on malloc failure. Returns a malloced buffer with the + * protocol message. The buffer starts with the 4 bytes of 0 that indicate + * a control frame. The buffer should be sent without preceding it with + * the 'len' variable (like data frames are), but straight the content of the + * buffer, because the lengths are included in the buffer. This is so that + * the zero control indicator can be included before the control frame length. + */ +void* fstrm_create_control_frame_accept(char* contenttype, size_t* len); + +/** + * This creates an FSTRM control frame of type FINISH. + * @param len: if a buffer is returned this is the length of that buffer. + * @return NULL on malloc failure. Returns a malloced buffer with the + * protocol message. The buffer starts with the 4 bytes of 0 that indicate + * a control frame. The buffer should be sent without preceding it with + * the 'len' variable (like data frames are), but straight the content of the + * buffer, because the lengths are included in the buffer. This is so that + * the zero control indicator can be included before the control frame length. + */ +void* fstrm_create_control_frame_finish(size_t* len); + +/** + * Return string that describes a control packet. For debug, logs. + * Like 'start content-type(protobuf:dnstap.Dnstap)' or 'stop'. + * @param pkt: the packet data, that is the data after the 4 zero start + * bytes and 4 length bytes. + * @param len: the length of the control packet data, in pkt. This is the + * ntohl of the 4 bytes length preceding the data. + * @return zero delimited string, malloced. Or NULL on malloc failure. + */ +char* fstrm_describe_control(void* pkt, size_t len); + #endif /* DNSTAP_FSTRM_H */ diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index e26e12ede..0605d4d7c 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -409,54 +409,15 @@ static int tap_socket_list_addevs(struct tap_socket_list* list, /** log control frame contents */ static void log_control_frame(uint8_t* pkt, size_t len) { - uint32_t frametype = 0; - char buf[256]; - size_t at = 0, remain; - uint8_t* pos; + char* desc; if(verbosity == 0) return; - if(len < 4) { - log_err("malformed control frame, too short, len=%d", (int)len); + desc = fstrm_describe_control(pkt, len); + if(!desc) { + log_err("out of memory"); return; } - buf[0]=0; - frametype = sldns_read_uint32(pkt); - if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) { - at+=snprintf(buf+at, sizeof(buf)-at, "accept"); - } else if(frametype == FSTRM_CONTROL_FRAME_START) { - at+=snprintf(buf+at, sizeof(buf)-at, "start"); - } else if(frametype == FSTRM_CONTROL_FRAME_STOP) { - at+=snprintf(buf+at, sizeof(buf)-at, "stop"); - } else if(frametype == FSTRM_CONTROL_FRAME_READY) { - at+=snprintf(buf+at, sizeof(buf)-at, "ready"); - } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) { - at+=snprintf(buf+at, sizeof(buf)-at, "finish"); - } else { - at+=snprintf(buf+at, sizeof(buf)-at, "type%d", - (int)frametype); - } - - /* show the content type options */ - pos = pkt + 4; - remain = len - 4; - while(remain >= 8) { - uint32_t field_type = sldns_read_uint32(pos); - uint32_t field_len = sldns_read_uint32(pos+4); - if(remain < field_len) { - at+=snprintf(buf+at, sizeof(buf)-at, "malformed_field"); - break; - } - if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { - at+=snprintf(buf+at, sizeof(buf)-at, " content-type("); - if(at+field_len < sizeof(buf)) { - memmove(buf+at, pos+8, field_len); - at += field_len; - } - at+=snprintf(buf+at, sizeof(buf)-at, ")"); - } - pos += 8 + field_len; - remain -= (8 + field_len); - } - log_info("control frame %s", buf); + log_info("control frame %s", desc); + free(desc); } /** convert mtype to string */ @@ -804,32 +765,17 @@ void tap_data_free(struct tap_data* data) * returns 0 on error */ static int reply_with_accept(int fd) { - /* control frame on reply: - * 4 bytes 0 escape - * 4 bytes bigendian length of frame - * 4 bytes bigendian type ACCEPT - * 4 bytes bigendian frame option content type - * 4 bytes bigendian length of string - * string of content type. - */ - uint32_t* acceptframe; /* len includes the escape and framelength */ - size_t len = 4+4+4+4+4+strlen(DNSTAP_CONTENT_TYPE); - acceptframe = calloc(1, len); + size_t len = 0; + void* acceptframe = fstrm_create_control_frame_accept( + DNSTAP_CONTENT_TYPE, &len); if(!acceptframe) { log_err("out of memory"); return 0; } - acceptframe[0] = 0; - acceptframe[1] = htonl(4+4+4+strlen(DNSTAP_CONTENT_TYPE)); - acceptframe[2] = htonl(FSTRM_CONTROL_FRAME_ACCEPT); - acceptframe[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); - acceptframe[4] = htonl(strlen(DNSTAP_CONTENT_TYPE)); - memmove(&acceptframe[5], DNSTAP_CONTENT_TYPE, - strlen(DNSTAP_CONTENT_TYPE)); fd_set_block(fd); - if(send(fd, (void*)acceptframe, len, 0) == -1) { + if(send(fd, acceptframe, len, 0) == -1) { #ifndef USE_WINSOCK log_err("send failed: %s", strerror(errno)); #else @@ -851,31 +797,28 @@ static int reply_with_accept(int fd) * returns 0 on error */ static int reply_with_finish(int fd) { - /* control frame on reply: - * 4 bytes 0 escape - * 4 bytes bigendian length of frame - * 4 bytes bigendian type FINISH - */ - uint32_t finishframe[3]; - /* len includes the escape and framelength */ - size_t len = 4+4+4; - finishframe[0] = 0; - finishframe[1] = htonl(4); - finishframe[2] = htonl(FSTRM_CONTROL_FRAME_FINISH); + size_t len = 0; + void* finishframe = fstrm_create_control_frame_finish(&len); + if(!finishframe) { + log_err("out of memory"); + return 0; + } fd_set_block(fd); - if(send(fd, (void*)finishframe, len, 0) == -1) { + if(send(fd, finishframe, len, 0) == -1) { #ifndef USE_WINSOCK log_err("send failed: %s", strerror(errno)); #else log_err("send failed: %s", wsa_strerror(WSAGetLastError())); #endif fd_set_nonblock(fd); + free(finishframe); return 0; } if(verbosity) log_info("sent control frame(finish)"); fd_set_nonblock(fd); + free(finishframe); return 1; } From 9473b0b2c5d9f762ca21d592610863ceb5d788c9 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 18 Feb 2020 17:20:45 +0100 Subject: [PATCH 096/235] Fix issue reported by clang analyzer. --- dnstap/dnstap_fstrm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnstap/dnstap_fstrm.c b/dnstap/dnstap_fstrm.c index aac98e567..4d4cb835e 100644 --- a/dnstap/dnstap_fstrm.c +++ b/dnstap/dnstap_fstrm.c @@ -197,7 +197,7 @@ char* fstrm_describe_control(void* pkt, size_t len) remain -= (8 + field_len); } if(remain > 0) - at+=snprintf(buf+at, sizeof(buf)-at, " trailing-bytes" + snprintf(buf+at, sizeof(buf)-at, " trailing-bytes" "(length %u)", (unsigned int)remain); return strdup(buf); } From 57baa78dd137555b9a3b23f77ad94fcb778243c7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 19 Feb 2020 17:33:36 +0100 Subject: [PATCH 097/235] Fix memory leak in error case. From review. --- dnstap/dnstap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index c34f08b2e..cd4c070f2 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -150,6 +150,7 @@ dt_create(struct config_file* cfg) return NULL; } if(!dt_io_thread_apply_cfg(env->dtio, cfg)) { + dt_io_thread_delete(env->dtio); free(env); return NULL; } From e55b89096f9f30c5a80f1fb8252c7239d236d24a Mon Sep 17 00:00:00 2001 From: Alex Band Date: Thu, 20 Feb 2020 09:13:54 +0100 Subject: [PATCH 098/235] Add GitHub Sponsors for Organisations --- .github/FUNDING.yml | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index ecee84aa4..2a357c0c7 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,2 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username +github: [NLnetLabs] custom: ['https://nlnetlabs.nl/funding/'] From ec0d6f196e003d03c9120bbec3e54889a02ae9d2 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 20 Feb 2020 09:17:24 +0100 Subject: [PATCH 099/235] - Updated contrib/unbound_smf23.tar.gz with Solaris SMF service for Unbound from Yuri Voinov. --- contrib/README | 2 +- contrib/unbound_smf22.tar.gz | Bin 4578 -> 0 bytes contrib/unbound_smf23.tar.gz | Bin 0 -> 4648 bytes doc/Changelog | 4 ++++ 4 files changed, 5 insertions(+), 1 deletion(-) delete mode 100644 contrib/unbound_smf22.tar.gz create mode 100644 contrib/unbound_smf23.tar.gz diff --git a/contrib/README b/contrib/README index 18c076fd8..9db078e56 100644 --- a/contrib/README +++ b/contrib/README @@ -27,7 +27,7 @@ distribution but may be helpful. works like the BIND feature (removes AAAA records unless AAAA-only domain). Useful for certain 'broken IPv6 default route' scenarios. Patch from Stephane Lapie for ASAHI Net. -* unbound_smf22.tar.gz: Solaris SMF installation/removal scripts. +* unbound_smf23.tar.gz: Solaris SMF installation/removal scripts. Contributed by Yuri Voinov. * unbound.socket and unbound.service: systemd files for unbound, install them in /usr/lib/systemd/system. Contributed by Sami Kerola and Pavel Odintsov. diff --git a/contrib/unbound_smf22.tar.gz b/contrib/unbound_smf22.tar.gz deleted file mode 100644 index e4c51c3dc6c1054b59ae8d3218bd52930b6097fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4578 zcmV<85gqOyiwFp7UiVZ40CjF+Z*^{DUvq6{GBPf7VR8WN9BET4MUcBs6TD5Yew4Ml%$8Ghsd;PIF_lC1?p^?Dk+;5@w|f! zrgd#SZEuy*6*ia-`_2&HzHDiZLk+UNLtb?)jl5)PhPg!sr-#T0c);*TCYxiEXeu=v zB0oL&(2$3ovNs8|k<)7cz(^(7e)Qbf!QY$_H_+m&)rGfKLvQb6n+H>l%} zGr>X)=YL7DG-X|{-0{}Uds?5!`v;r2ZR1`zCeIT+W!~>A&snz`2_NG?aBrv)rO}`jC zyYM_a{rr;XpruW7O?qK&eqQw4({z1JDlCX+tFk7&xHz>iD>__5sn9jxMF>L58cfXe zU<2qgOD`_Y6qlz~pU=w)p*mS+J}1Yp0{Ca<7K_i$&Clj#&pl*`%W6@bf_bE+mEudY zh5TBAF+-BpI|&esB+DZtsmdvN4IywS0I>x~7C{Jr_@)mWW5r#!OxMv2&oyGsQQD-X zdqvYGgG18W5`oo%9mv=gwQRHx(aPj?(of`s$AC=oL|$=?r4^YZ6*j_|hesXOKsFCIw`YKywgzwoq6qOoDQ3w^}tVhpIS-AV~y;5W;;8nBGXGQrJo1iDV^Es`RcT z;r`}SEwhA7qm20MD_&J-1^EVm4NIxy6IsaXG7;;S{25{c-W-XrkERoz8o1ufYFKUXc#hV95-uFFmVgyU60lBvVyUX8u8~I` zA&J65=Lk;K;fD)~2HPks=zAS*2+$pF=R2l9=y4eAUy@K}naDAjR<^%g8l*c5=+@e5>Ih z$Rnfx`ws*>BpUvO14AkQcbX(U`skyCy#MLPpS<_!#~=2?OrO{G>uvb=s7c7l56y#L zYKM(K2|27Cw_DBnA^sxdyV}vo@xI`En4BE9YlqFGx!p1W{eTBz;iBUPS!5 z*&@gLt;SKixl4{(^}WN|cZaoKfa>1CnIN*?APsV|R|8^=GwHbA+HD-yP&o|9jT|1x z48#Rw#nd5Ov*GLn+}+b(>nTZk|F{lw)|+4d)ZArlIkHE#(XNx@gZkddpT7Z9zt+BKOiIb?HA%{*$d`O}ARDlSGDS@Jb>r)U zMzdYtZw%Lu4;ti;c2lbV1~9OEO5mlPv2|@azEzt5s`##}+YqHIQMJ@wW)@ z6jTGu^!uO0-xdV22h5F3n(h5s`;_z2JgT=)%fp@?>*yH3&tbhT9km+aT|j7Dtdx&x zKh%H0g)|8?zl`rs5eLE*3es{D{s7^q&@KzSYF&C{MxfKuj?};ARw_y%`3clzap+lLrywWk3vj1U)3b+qcy~7Kr-2 zPn2Mzc4$$hWyRGUw*4wbiF%QWnja`Dx=ja2I*ep%uys=(I6A1(Dqhzar5%scvYljM zp5P^D8*pn{1zPz5i@xb<7A-1zCz!a=C?fZUX@rF8F7uNe-`jz*S%Yd@_RMUa1-8B%{3RGZL*Ok(}e~T8v()x}qn7qE2)y*AS`xhCz ztC)hx>x=2Q2K`ryXsBuuej}gPlhTE^MgK|(z2%7fT}m=~pO%XJ)ngAX_+ST*o+6ke zor6d=KXBf=P4aN1i`-g;!mFa9O(D5f?fk%aW*~jD?3&eH+)m<)xy$iHZj>pDK6oug zIfje$Dz%)QBJOrYeqUiQu{SBx!G!E?lM~YzEzdVA2y_ydC@w!qF%DF4wxG?0q-gGSDV+ zx!(ET$ap;e%VkEhclqBfG^qaxmH$NUAGOehND9WTSkn{u)Op1{&~c^uoaMsObA_n| zUfdCshpfyNUYeVp?dYB^%q_2az3ecOLSY*wLUQ0 zIVC>0H+72H55*{RGf+qn(=}Ek!C{}z3?kl8Z^m9VT~dMlk*re)nczT9x^T!q;DDDb z{JO?2Sz6WUWC;wjXd1~4-CS36<}5ZAgJ@;VD`Yd^XycmDQoaV09-T#+5-5!L9>R z_@khq#^SBtBqb zmk#&Ffl%^^X~)tZo8}mJSEqNK=Q_GzuXspRV%5J@=3u-YQxL;maKfmn0x;Z?*ve(a zWl`@>D!kJ>Wy1>@Pq>Ju`pW|b*^x+cxt!mb4ueVpUl4{L{G`Sae$I(Focd#F0sSQ0 zFl?m_7mPac3bCg!vQHt?pxq9sS)8TKyq@qLGv!)p$1PqHWt?7MV}y?K2Q>EFfqUv46v z|Ba20kKN^ex6sbX|19ES~wryy?8e?|+r`O}+erNSu`IdzZ=Po-52Qi=GXO zR^$2Ia`-ciD*sMndByLrV_$6`yHhiw$E#zy%Lwl>!hdf@ShTK|6J9@$>C6kSlo+~3 zm(*Q8ew6qAq5(aFMt%EHdel7d~V*FkV$78fId)BAJA#&{NYf$h5_%-!PraZk_N^DgR@Pa5ElueswR3!a9FP>kOdTquArfFyZpMLh`W zHc>(34b6twMBoV){G&bv)-jP~Z40h;nUG;8EStJ+Zeus>)7=L>=rbYc=T$GMBufS7ToVZMSY^TC5f8*v-oaU=dC-IV{Zzqk-qcIP!2WR(6e^K-sR zL`>^5D5Cd6u$3Sm?nzVNdf|b;YBkV8v6#(lv^k zAHs0eGZv#nTRJ5E`pO$`7sT~PqC z=hspTSWbp2Qvgr^0AvEvKmY&$ diff --git a/contrib/unbound_smf23.tar.gz b/contrib/unbound_smf23.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..96a671920ef32f2757da3e86835a641a82924d82 GIT binary patch literal 4648 zcmV+@64&h?iwFquo=si?19fgV(xZ0&zXhwqHt z7#bNL9vK z@4yq^G2pRnSoRj&n(hY_%AJ8>lnr0RC^E}~#6R7-*)P#E?j~Rx&W!LsgW191?C>Bw zd7MCm3v7n;a2;uNz)~H9vQM zd=ydaikB_8+nnC>0MD;R8Z=R^RUdrf;VH$SU-N`}eSw6Eso z=T*;B!!*~l+=6;`%4^!A#i@k=#kce_;vj93FFuLOxpoos{?enxnf&t9>X(y=q!Mr< z!7Ve35L#b0-9-!rUE10oYDY_h`ByzRoRe(g6JpifZ;5w^t~mox@O z3H}xOAd!>=Bw!K}E55a~l7O_XMv!=XG|^Lr1{3gapM$r_5E+uBAV|#Sa!a`h6prgx zDz@XHk>VO^N>DRI5S|%G^hPF=p-zTRFr=YSwclzQMM1CP*ac2B@<`8t;EOsd6Ws`~ z;ppYb(M~2gA>ru}5l<8+6Tnl}KJ;Q)fWJQ`I zRXM9| zijx`^CSg}%7GYOTGYCjhOn|i{h8IX;Pzol?RE**peD)b6a|@j#v{Z+SE$9aBBN)A& zc6b;$d51?Sp9=>Cg<$~KlyFNZ+|!L!`XJij*^q&L+MQC!$+A5R>-eiLp>=gb>4l_< zo0o1Fb7<2_B!?2nu$FKbcjrVuDq3j~I*8|k((Aj9e*U?Zh)#4itX(;KO@zGN9|omI zuD-!0AUO!X5lg_g93THkHsH6BaK&7`plSSJP`h#6uG$=?7t1Wqtc>@}`+)iX_~>Zw z{C{Y?BmW`h@7!}WrRs(`X%&##*A(Ohv`FEMKWfYheEt%vdL|vHO!HR8S8t!7c z!m;&rlu$;~rc4uP7Xh$Xfw`{k>>vXUbJ)N8hHH43W?GD4{z7~Z8w9JCQyc;4g@WxA zac2?y5)c*vK9X0kt&*|fJA&|A>=~6t2&nNz^@2x0ZBWF!s_me{9OR*l6ckZ^xB?<- zF=-IEq6ukHf>B*uLc9~1K_pFymE<62cTsx|+b~>@IRT!MB*D?PfZ|%UiDY9-_ZVj~ zYJ?@*H0^Eb#{Cc{s<;zc`U*|chB5#vXbOHMwiwqR>Mhh5CYlavm$?I!$Kn2DxEgK$ zx=As12MHg}Pkhcxif4CIs@aYZP+yeO?*59{Uu9M`>2JH#&O zy{D0Kp+LoUJ+2_zdc%9Ru{>0+6N?y9$H?gz3YiEJUQiI#E3&p#z}*R$MU`tHEia;f z1QVr8)F%Qta$7->1>m96#?2-$+^GF%@5_ExLIOL5?Uc7r))}r{IZSpgyaZKhafepK zQo>ErCo4n7(#l^@_%S|6E-1!|$vkGFq5|I&a6(fKGK)RyXh~A?HY!`ZR0utu>5geI z3Vs|$%94B@T|OdpX|Rj7hv{5S`hOTiqVz%0rkIA#A$1W6C%B?(m%MG=iRy96DQp@D zh@RnLX@FYMqHmu-wlo$FmcBtE6Yr>^t1H{fJS&?JVysA-(BzB~W}Gn;nI1VlrAHB@ z|86x}@MHDW0o=;@u50L4zZOfSBCvcnp;s4hYu4H@4R^C&>*8*bn)aPk*o4+;G7ust zX-in`SG%cS=i|Rn{x1yt7s~&~?hJM0|Kmf~`TuqPe|G-=-JkyWpTGOlAO8dMBlvT5 zzt+OPM-70J*NuaptB3Ws0EgA%Rd!dq-oZOH$$lN`aI#m$$?EU4<63jK zeq80kA)vOR0Eua<3F@%>=C3u}?Y=v%;hMF^^S?Cq>aXA61FqPt?eErK)?06I=Z_Ea z*(GDuU|HG1`hePT-NxQ=YxjgdA2qc7#^I0k7bnenv#~3r2e<0S z`v-4-uHq8VHeBN~KF0}AdJQco7XTSKY8)KCd)qoDv|VDL@l)-X_=1SE5M59^ph>aS zf-aeni@k6fx?tBt=YHZ`I)Vptg7N_HRhkU#lO>cWES*6EoxD9z@?h4YP&H? z zY5Pi_Z==4_z!3E3|B9Hw@0x$9?_&Jit2O_p-s)M={BYDn$-YC`y@J=ZR%7oRHO=>& zL~>8G-1?8TRdJb4ejTHt#L;FKXzxN zGyfkMygvW)G1}cPD00ZpsFR7I%wXb+d)nQ;nWgE~C(E;j0h zFXFHbePG8qvPG|$jYDU!D>Ia!>C$QRqy_ngCC$S|$rrJc~?Nr!gN-dEB zI`cA_k}IU{X#s*-NkX*Ik_v{!gc2$2R=P?J(WI*PZUF!}hz zU7-l<3cWJ@RHP8&RvA-3_-#RYfM_RXS|@`95`E<#W_K>K~iOhg%dbrB>P8y3!#XO3e# zsjfSdAWnBZ`huQPu0ZP#xQN{m#p0ZwDU%ImF^48Orw}|_p10zsty~NO#q;nfzU=08 z9~JBv-|%uN)yCVI8?$)lnZa@|Q>G7g?A)v)$?Jw`cspvYN0hr@hSO#?7+ES<%dsx} z(C203fY`a$lhV7GC3p-gUQ7)qOq~MdbgDPFvhkV46(YYg1OV(7g{R<6>8%4}CM z?`A{Bw7V+bj{cVE=)H^8f6dG2V;1ydM^zwi~2Ej!9ji-xmCgib$rs5(WB%zIZN zeQx)=8~?JjI2-N$29rT~tK+>~vp|pskLXHC0OE*6u}7_anadcqo9Ac4+en26WfO}#z$CZm@?spoc3{(2@fICAxVDXqzg$mVbQkI8>YREnFARMKks9d z40&k@i;27#&5Kb^xD*{JTQLtsSb9a~xS}kj!Y_D*W7%P85-D)I zbw#LDR?qta-_^LAqy2I76J4RnYno)^0-wVY0S+XiJ4)=38b7zV9w;8|cbmRRL~zgB zqBzJmRvmX|Esr_(NFj8j&9Hnn&>II+$-C2@WB%i`z@T?^=IQHPL>Bak2P*vP4BE3e zN6T;8$;qgfjIdKw9E^t~adV6A*2Jtot;PjxmPw)8!sxnKynfUy3#J_z({7u~jUQ)UopWl877?iKK zGarjDx!$FClDOUY5trZMTTgGV6gNkMdsS^4W8^xOobWMojM7e*31jIkAyeXMuZe-38>$mD)&?Yq}9K3by00f@kgwsB;J6G&~jW z$S%gEgt`)S+3$amFRwQ~e*HJrQU8sOj}Kqhf4^+~C(dS{Quz&yo>uvV-|@TO>i_># z^-X>Kl`5R{?WgCd<{su|msQV(!z%6d-E#B-ens5CUk>WHirao4AIY7XS%}nmda-<6 z5nfk>pKe8%cP>^FUbQHU)`b@;41KFxX(*y+WX5jQVK`cH>~d#)*tsB%uM**1NbVy;8?UFzm;W%FR<-?5 Date: Thu, 20 Feb 2020 14:41:39 +0100 Subject: [PATCH 100/235] Note tag position in Changelog. --- doc/Changelog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index dd405c6cd..1dcd34e6b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,7 +7,8 @@ different openssl versions. 17 February 2020: Wouter - - changelog point where the tag for 1.10.0rc2 release is. + - changelog point where the tag for 1.10.0rc2 release is. And with + the unbound_smf23 commit added to it, that is the 1.10.0 release. 17 February 2020: Ralph - Add respip to supported module-config options in unbound-checkconf. From d2a843b422af08a6ce3ac1a18a8c100a7b743447 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 20 Feb 2020 14:42:58 +0100 Subject: [PATCH 101/235] - master branch has 1.10.1 version. --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- doc/Changelog | 1 + 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 0b840e9d2..bdec1f002 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.10.0. +# Generated by GNU Autoconf 2.69 for unbound 1.10.1. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.10.0' -PACKAGE_STRING='unbound 1.10.0' +PACKAGE_VERSION='1.10.1' +PACKAGE_STRING='unbound 1.10.1' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1452,7 +1452,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.10.0 to adapt to many kinds of systems. +\`configure' configures unbound 1.10.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1517,7 +1517,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.10.0:";; + short | recursive ) echo "Configuration of unbound 1.10.1:";; esac cat <<\_ACEOF @@ -1740,7 +1740,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.10.0 +unbound configure 1.10.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2449,7 +2449,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.10.0, which was +It was created by unbound $as_me 1.10.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2801,11 +2801,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=10 -UNBOUND_VERSION_MICRO=0 +UNBOUND_VERSION_MICRO=1 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=7 +LIBUNBOUND_REVISION=8 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2880,6 +2880,7 @@ LIBUNBOUND_AGE=1 # 1.9.5 had 9:5:1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 +# 1.10.1 had 9:8:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -21598,7 +21599,7 @@ _ACEOF -version=1.10.0 +version=1.10.1 date=`date +'%b %e, %Y'` @@ -22117,7 +22118,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.10.0, which was +This file was extended by unbound $as_me 1.10.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22183,7 +22184,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.10.0 +unbound config.status 1.10.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 6bbdb176e..3e00c999c 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[10]) -m4_define([VERSION_MICRO],[0]) +m4_define([VERSION_MICRO],[1]) 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=7 +LIBUNBOUND_REVISION=8 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -93,6 +93,7 @@ LIBUNBOUND_AGE=1 # 1.9.5 had 9:5:1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 +# 1.10.1 had 9:8:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/doc/Changelog b/doc/Changelog index 1dcd34e6b..05d35b995 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 20 February 2020: Wouter - Updated contrib/unbound_smf23.tar.gz with Solaris SMF service for Unbound from Yuri Voinov. + - master branch has 1.10.1 version. 18 February 2020: Wouter - protect X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS with ifdef for From 5aaa5e253deac0f6ea0d45305668b20031f4610e Mon Sep 17 00:00:00 2001 From: Florian Obser Date: Fri, 10 Jan 2020 13:55:55 +0100 Subject: [PATCH 102/235] Allow the kernel to provide random source ports. On some operating systems, for example OpenBSD since some decades, the kernel binds to a random source port if asked for any port (port number 0). There is no need to replicate this functionality in userland. --- config.h.in | 4 ++++ configure | 19 +++++++++++++++++++ configure.ac | 9 +++++++++ services/outside_network.c | 24 ++++++++++++++++++++++-- services/outside_network.h | 2 ++ 5 files changed, 56 insertions(+), 2 deletions(-) diff --git a/config.h.in b/config.h.in index 78d47fedc..4f419604c 100644 --- a/config.h.in +++ b/config.h.in @@ -805,6 +805,10 @@ /* Define to 1 to use ipset support */ #undef USE_IPSET +/* Define to 1 to disable explict UDP source port randomisation and rely on the + kernel to provide random source ports */ +#undef DISABLE_EXPLICIT_PORT_RANDOMISATION + /* Define if you want to use internal select based events */ #undef USE_MINI_EVENT diff --git a/configure b/configure index bdec1f002..744defe21 100755 --- a/configure +++ b/configure @@ -890,6 +890,7 @@ enable_cachedb enable_ipsecmod enable_ipset with_libmnl +enable_explicit_port_randomisation with_libunbound_only ' ac_precious_vars='build_alias @@ -1579,6 +1580,9 @@ Optional Features: --enable-ipsecmod Enable ipsecmod module that facilitates opportunistic IPsec --enable-ipset enable ipset module + --disable-explicit-port-randomisation + disable explicit source port randomisation and rely + on the kernel to provide random source ports Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -21443,6 +21447,21 @@ $as_echo "found in $dir" >&6; } # nothing ;; esac +# Check whether --enable-explicit-port-randomisation was given. +if test "${enable_explicit_port_randomisation+set}" = set; then : + enableval=$enable_explicit_port_randomisation; +fi + +case "$enable_explicit_port_randomisation" in + no) + +$as_echo "#define DISABLE_EXPLICIT_PORT_RANDOMISATION 1" >>confdefs.h + + ;; + yes|*) + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${MAKE:-make} supports $< with implicit rule in scope" >&5 $as_echo_n "checking if ${MAKE:-make} supports $< with implicit rule in scope... " >&6; } diff --git a/configure.ac b/configure.ac index 3e00c999c..d58c825d0 100644 --- a/configure.ac +++ b/configure.ac @@ -1778,6 +1778,15 @@ case "$enable_ipset" in # nothing ;; esac +AC_ARG_ENABLE(explicit-port-randomisation, AC_HELP_STRING([--disable-explicit-port-randomisation], [disable explicit source port randomisation and rely on the kernel to provide random source ports])) +case "$enable_explicit_port_randomisation" in + no) + AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.]) + ;; + yes|*) + ;; +esac + AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope]) # on openBSD, the implicit rule make $< work. diff --git a/services/outside_network.c b/services/outside_network.c index d3ebe04f6..1e83bf3a1 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -514,7 +514,9 @@ portcomm_loweruse(struct outside_network* outnet, struct port_comm* pc) comm_point_close(pc->cp); pif = pc->pif; log_assert(pif->inuse > 0); +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pif->avail_ports[pif->avail_total - pif->inuse] = pc->number; +#endif pif->inuse--; pif->out[pc->index] = pif->out[pif->inuse]; pif->out[pc->index]->index = pc->index; @@ -727,10 +729,12 @@ create_pending_tcp(struct outside_network* outnet, size_t bufsize) static int setup_if(struct port_if* pif, const char* addrstr, int* avail, int numavail, size_t numfd) { +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pif->avail_total = numavail; pif->avail_ports = (int*)memdup(avail, (size_t)numavail*sizeof(int)); if(!pif->avail_ports) return 0; +#endif if(!ipstrtoaddr(addrstr, UNBOUND_DNS_PORT, &pif->addr, &pif->addrlen) && !netblockstrtoaddr(addrstr, UNBOUND_DNS_PORT, &pif->addr, &pif->addrlen, &pif->pfxlen)) @@ -957,7 +961,9 @@ outside_network_delete(struct outside_network* outnet) comm_point_delete(pc->cp); free(pc); } +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION free(outnet->ip4_ifs[i].avail_ports); +#endif free(outnet->ip4_ifs[i].out); } free(outnet->ip4_ifs); @@ -971,7 +977,9 @@ outside_network_delete(struct outside_network* outnet) comm_point_delete(pc->cp); free(pc); } +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION free(outnet->ip6_ifs[i].avail_ports); +#endif free(outnet->ip6_ifs[i].out); } free(outnet->ip6_ifs); @@ -1135,6 +1143,7 @@ select_ifport(struct outside_network* outnet, struct pending* pend, while(1) { my_if = ub_random_max(outnet->rnd, num_if); pif = &ifs[my_if]; +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION my_port = ub_random_max(outnet->rnd, pif->avail_total); if(my_port < pif->inuse) { /* port already open */ @@ -1146,6 +1155,9 @@ select_ifport(struct outside_network* outnet, struct pending* pend, /* try to open new port, if fails, loop to try again */ log_assert(pif->inuse < pif->maxout); portno = pif->avail_ports[my_port - pif->inuse]; +#else + my_port = portno = 0; +#endif fd = udp_sockport(&pif->addr, pif->addrlen, pif->pfxlen, portno, &inuse, outnet->rnd); if(fd == -1 && !inuse) { @@ -1169,8 +1181,10 @@ select_ifport(struct outside_network* outnet, struct pending* pend, /* grab port in interface */ pif->out[pif->inuse] = pend->pc; +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pif->avail_ports[my_port - pif->inuse] = pif->avail_ports[pif->avail_total-pif->inuse-1]; +#endif pif->inuse++; break; } @@ -2227,6 +2241,7 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, } addr = &pif->addr; addrlen = pif->addrlen; +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pnum = ub_random_max(outnet->rnd, pif->avail_total); if(pnum < pif->inuse) { /* port already open */ @@ -2235,7 +2250,9 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, /* unused ports in start part of array */ port = pif->avail_ports[pnum - pif->inuse]; } - +#else + pnum = port = 0; +#endif if(addr_is_ip6(to_addr, to_addrlen)) { struct sockaddr_in6 sa = *(struct sockaddr_in6*)addr; sa.sin6_port = (in_port_t)htons((uint16_t)port); @@ -2459,7 +2476,10 @@ if_get_mem(struct port_if* pif) { size_t s; int i; - s = sizeof(*pif) + sizeof(int)*pif->avail_total + + s = sizeof(*pif) + +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION + sizeof(int)*pif->avail_total + +#endif sizeof(struct port_comm*)*pif->maxout; for(i=0; iinuse; i++) s += sizeof(*pif->out[i]) + diff --git a/services/outside_network.h b/services/outside_network.h index 3456a3da3..f12b2e5be 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -172,11 +172,13 @@ struct port_if { * if 0, no randomisation. */ int pfxlen; +#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION /** the available ports array. These are unused. * Only the first total-inuse part is filled. */ int* avail_ports; /** the total number of available ports (size of the array) */ int avail_total; +#endif /** array of the commpoints currently in use. * allocated for max number of fds, first part in use. */ From 42ee37847feeb850d8b2b06be0ad807e33de1e04 Mon Sep 17 00:00:00 2001 From: glitsj16 Date: Sat, 22 Feb 2020 01:16:11 +0000 Subject: [PATCH 103/235] Fix typo --- contrib/unbound.service.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/unbound.service.in b/contrib/unbound.service.in index 8c51bcbbe..8ebe529c9 100644 --- a/contrib/unbound.service.in +++ b/contrib/unbound.service.in @@ -76,7 +76,7 @@ RestrictSUIDSGID=yes ReadWritePaths=@UNBOUND_RUN_DIR@ @UNBOUND_CHROOT_DIR@ # Below rules are needed when chroot is enabled (usually it's enabled by default). -# If chroot is disabled like chrooot: "" then they may be safely removed. +# If chroot is disabled like chroot: "" then they may be safely removed. TemporaryFileSystem=@UNBOUND_CHROOT_DIR@/dev:ro TemporaryFileSystem=@UNBOUND_CHROOT_DIR@/run:ro BindReadOnlyPaths=-/run/systemd/notify:@UNBOUND_CHROOT_DIR@/run/systemd/notify From f99dd8f6dce865823010206a83c02ffdddc582cb Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 24 Feb 2020 12:01:20 +0100 Subject: [PATCH 104/235] Changelog note for PR #166. - Merge PR #166: Fix typo in unbound.service.in, by glitsj16. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 05d35b995..b2aac14c9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +24 February 2020: George + - Merge PR #166: Fix typo in unbound.service.in, by glitsj16. + 20 February 2020: Wouter - Updated contrib/unbound_smf23.tar.gz with Solaris SMF service for Unbound from Yuri Voinov. From 318d4e91cc1f29629d4b8277edffff1ec1fe9546 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 25 Feb 2020 09:55:59 +0100 Subject: [PATCH 105/235] - Fix #165: Add prefer-ip4: yesno config option to prefer ipv4 for using ipv4 filters, because the hosts ip6 netblock /64 is not owned by one operator, and thus reputation is shared. --- doc/Changelog | 5 + iterator/iter_utils.c | 57 + smallapp/unbound-checkconf.c | 2 + util/config_file.h | 2 + util/configlexer.c | 3721 +++++++++++++++++----------------- util/configlexer.lex | 1 + util/configparser.c | 3646 ++++++++++++++++----------------- util/configparser.h | 1048 +++++----- util/configparser.y | 13 +- 9 files changed, 4298 insertions(+), 4197 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index b2aac14c9..620d627f8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +25 February 2020: Wouter + - Fix #165: Add prefer-ip4: yesno config option to prefer ipv4 for + using ipv4 filters, because the hosts ip6 netblock /64 is not owned + by one operator, and thus reputation is shared. + 24 February 2020: George - Merge PR #166: Fix typo in unbound.service.in, by glitsj16. diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 2ab55ceb4..c726ba6b3 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -484,6 +484,63 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env, got_num = num4ok; *selected_rtt = num4_lowrtt; } + } else if (env->cfg->prefer_ip4) { + int got_num4 = 0; + int low_rtt4 = 0; + int i; + int attempt = -1; /* filter to make sure addresses have + less attempts on them than the first, to force round + robin when all the IPv4 addresses fail */ + int num6ok = 0; /* number ip6 at low attempt count */ + int num6_lowrtt = 0; + prev = NULL; + a = dp->result_list; + for(i = 0; i < got_num; i++) { + swap_to_front = 0; + if(a->addr.ss_family != AF_INET && attempt == -1) { + /* if we only have ip6 at low attempt count, + * then ip4 is failing, and we need to + * select one of the remaining IPv6 addrs */ + attempt = a->attempts; + num6ok++; + num6_lowrtt = a->sel_rtt; + } else if(a->addr.ss_family != AF_INET && attempt == a->attempts) { + num6ok++; + if(num6_lowrtt == 0 || a->sel_rtt < num6_lowrtt) { + num6_lowrtt = a->sel_rtt; + } + } + if(a->addr.ss_family == AF_INET) { + if(attempt == -1) { + attempt = a->attempts; + } else if(a->attempts > attempt) { + break; + } + got_num4++; + swap_to_front = 1; + if(low_rtt4 == 0 || a->sel_rtt < low_rtt4) { + low_rtt4 = a->sel_rtt; + } + } + /* swap to front if IPv4, or move to next result */ + if(swap_to_front && prev) { + n = a->next_result; + prev->next_result = n; + a->next_result = dp->result_list; + dp->result_list = a; + a = n; + } else { + prev = a; + a = a->next_result; + } + } + if(got_num4 > 0) { + got_num = got_num4; + *selected_rtt = low_rtt4; + } else if(num6ok > 0) { + got_num = num6ok; + *selected_rtt = num6_lowrtt; + } } return got_num; } diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index c46d41215..34902f363 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -481,6 +481,8 @@ morechecks(struct config_file* cfg) fatal_exit("num_threads value weird"); if(!cfg->do_ip4 && !cfg->do_ip6) fatal_exit("ip4 and ip6 are both disabled, pointless"); + if(!cfg->do_ip4 && cfg->prefer_ip4) + fatal_exit("cannot prefer and disable ip4, pointless"); if(!cfg->do_ip6 && cfg->prefer_ip6) fatal_exit("cannot prefer and disable ip6, pointless"); if(!cfg->do_udp && !cfg->do_tcp) diff --git a/util/config_file.h b/util/config_file.h index 8739ca2ae..ff80d63c4 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -85,6 +85,8 @@ struct config_file { int do_ip4; /** do ip6 query support. */ int do_ip6; + /** prefer ip4 upstream queries. */ + int prefer_ip4; /** prefer ip6 upstream queries. */ int prefer_ip6; /** do udp query support. */ diff --git a/util/configlexer.c b/util/configlexer.c index 3b31bb02b..112301330 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 302 -#define YY_END_OF_BUFFER 303 +#define YY_NUM_RULES 303 +#define YY_END_OF_BUFFER 304 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,336 +363,336 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2986] = +static const flex_int16_t yy_accept[2988] = { 0, - 1, 1, 284, 284, 288, 288, 292, 292, 296, 296, - 1, 1, 303, 300, 1, 282, 282, 301, 2, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 284, 285, 285, 286, 301, 288, 289, 289, - 290, 301, 295, 292, 293, 293, 294, 301, 296, 297, - 297, 298, 301, 299, 283, 2, 287, 301, 299, 300, - 0, 1, 2, 2, 2, 2, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 1, 1, 285, 285, 289, 289, 293, 293, 297, 297, + 1, 1, 304, 301, 1, 283, 283, 302, 2, 302, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 285, 286, 286, 287, 302, 289, 290, 290, + 291, 302, 296, 293, 294, 294, 295, 302, 297, 298, + 298, 299, 302, 300, 284, 2, 288, 302, 300, 301, + 0, 1, 2, 2, 2, 2, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 284, 0, 288, 0, 295, 0, 292, 296, 0, 299, - 0, 2, 2, 299, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 285, 0, 289, 0, 296, 0, 293, 297, 0, 300, + 0, 2, 2, 300, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 299, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 300, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 112, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 120, 300, 300, 300, 300, - 300, 300, 300, 299, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 113, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 121, 301, 301, 301, 301, + 301, 301, 301, 300, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 96, 300, - 300, 300, 300, 300, 300, 8, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 113, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 125, 300, 299, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 97, 301, + 301, 301, 301, 301, 301, 8, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 114, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 126, 301, 300, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 277, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 278, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 299, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 54, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 222, 300, 14, 15, 300, 18, 17, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 300, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 55, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 223, 301, 14, 15, 301, 19, 18, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 119, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 206, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 3, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 120, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 207, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 3, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 299, 300, 300, 300, 300, 300, 300, - 300, 272, 300, 300, 271, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 291, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 300, 301, 301, 301, 301, 301, 301, + 301, 273, 301, 301, 272, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 292, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 57, 300, 246, 300, 300, 300, 300, - 300, 300, 300, 300, 278, 279, 300, 300, 300, 300, - 300, 58, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 116, 300, 300, - 300, 300, 300, 300, 300, 300, 195, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 20, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 144, 300, 300, 291, 300, + 301, 301, 301, 58, 301, 247, 301, 301, 301, 301, + 301, 301, 301, 301, 279, 280, 301, 301, 301, 301, + 301, 59, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 117, 301, 301, + 301, 301, 301, 301, 301, 301, 196, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 21, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 145, 301, 301, 292, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 94, - 300, 300, 300, 300, 300, 300, 300, 254, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 167, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 143, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 95, + 301, 301, 301, 301, 301, 301, 301, 255, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 168, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 144, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 93, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 31, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 32, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 55, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 118, 300, 300, 300, 300, - 300, 111, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 56, 300, 300, 300, + 301, 301, 301, 301, 94, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 32, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 33, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 56, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 119, 301, 301, 301, 301, + 301, 112, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 57, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 168, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 45, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 237, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 169, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 46, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 238, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 49, 300, 50, 300, 300, 300, - 300, 300, 97, 300, 98, 300, 300, 300, 300, 95, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 7, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 215, 300, 300, 300, - 300, 146, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 50, 301, 51, 301, 301, + 301, 301, 301, 98, 301, 99, 301, 301, 301, 301, + 96, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 7, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 216, 301, 301, + 301, 301, 147, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 46, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 187, 300, 186, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 16, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 59, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 194, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 47, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 188, 301, 187, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 16, 17, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 60, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 100, 300, 99, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 178, - 300, 300, 300, 300, 300, 300, 300, 300, 126, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 78, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 82, 300, + 301, 195, 301, 301, 301, 301, 301, 301, 101, 301, + 100, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 179, 301, 301, 301, 301, 301, 301, 301, 301, + 127, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 79, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 53, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 181, 182, 300, 300, 300, 248, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 6, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 252, - 300, 300, 300, 300, 300, 300, 273, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 41, 300, 300, + 83, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 54, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 182, 183, 301, 301, 301, 249, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 6, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 253, 301, 301, 301, 301, 301, 301, 274, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 42, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 43, 300, 300, 300, 300, 300, 300, 300, 300, 174, - 300, 300, 300, 121, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 199, 300, 175, 300, 300, 300, - 212, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 44, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 123, 105, 300, - 106, 300, 300, 300, 104, 300, 300, 300, 300, 300, - 300, 300, 300, 141, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 236, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 44, 301, 301, 301, 301, 301, 301, 301, + 301, 175, 301, 301, 301, 122, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 200, 301, 176, 301, + 301, 301, 213, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 45, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 124, + 106, 301, 107, 301, 301, 301, 105, 301, 301, 301, + 301, 301, 301, 301, 301, 142, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 237, 301, 301, - 300, 300, 300, 300, 176, 300, 300, 300, 300, 300, - 179, 300, 185, 300, 300, 300, 300, 300, 211, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 92, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 117, 300, 300, 300, 300, 300, 300, 51, 300, - 300, 300, 25, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 19, 300, 300, 300, 300, 300, 300, 26, - 35, 300, 151, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 301, 177, 301, 301, 301, + 301, 301, 180, 301, 186, 301, 301, 301, 301, 301, + 212, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 93, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 118, 301, 301, 301, 301, 301, 301, + 52, 301, 301, 301, 26, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 20, 301, 301, 301, 301, 301, + 301, 27, 36, 301, 152, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 67, 69, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 256, 300, 300, - 300, 223, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 107, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 140, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 267, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 145, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 205, + 301, 301, 301, 301, 68, 70, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 257, + 301, 301, 301, 224, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 108, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 141, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 268, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 146, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 276, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 162, 300, 300, 300, 300, 300, 300, 300, 300, 101, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 157, - 300, 169, 300, 300, 300, 300, 300, 129, 300, 300, - 300, 300, 300, 88, 300, 300, 300, 300, 197, 300, - 300, 300, 300, 300, 300, 213, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 228, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 122, 300, + 301, 206, 301, 301, 301, 301, 301, 301, 301, 301, + 277, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 163, 301, 301, 301, 301, 301, 301, 301, + 301, 102, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 158, 301, 170, 301, 301, 301, 301, 301, 130, + 301, 301, 301, 301, 301, 89, 301, 301, 301, 301, + 198, 301, 301, 301, 301, 301, 301, 214, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 229, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 161, - 300, 300, 300, 300, 300, 70, 71, 300, 300, 300, - 300, 300, 52, 300, 300, 300, 300, 300, 77, 170, - 300, 188, 300, 216, 300, 300, 180, 249, 300, 300, - 300, 300, 300, 63, 300, 172, 300, 300, 300, 300, - 300, 9, 300, 300, 300, 91, 300, 300, 300, 300, - 241, 300, 300, 300, 196, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 123, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 162, 301, 301, 301, 301, 301, 71, 72, 301, + 301, 301, 301, 301, 53, 301, 301, 301, 301, 301, + 78, 171, 301, 189, 301, 217, 301, 301, 181, 250, + 301, 301, 301, 301, 301, 64, 301, 173, 301, 301, + 301, 301, 301, 9, 301, 301, 301, 92, 301, 301, + 301, 301, 242, 301, 301, 301, 197, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 160, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 147, 300, 255, 300, 300, - 300, 300, 227, 300, 300, 300, 300, 300, 300, 300, - 300, 207, 300, 300, 300, 300, 247, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 270, 300, 171, 300, 300, 300, 300, 300, 300, - 300, 62, 64, 300, 300, 300, 300, 300, 300, 300, - 90, 300, 300, 300, 300, 239, 300, 300, 300, 251, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 161, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 148, 301, 256, + 301, 301, 301, 301, 228, 301, 301, 301, 301, 301, + 301, 301, 301, 208, 301, 301, 301, 301, 248, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 271, 301, 172, 301, 301, 301, 301, + 301, 301, 301, 63, 65, 301, 301, 301, 301, 301, + 301, 301, 91, 301, 301, 301, 301, 240, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 201, 33, 27, 29, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 34, 300, 28, 30, 300, 300, - 300, 300, 300, 300, 300, 300, 87, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 203, 200, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 61, 300, 300, 124, 300, 108, 300, 300, 300, 300, - 300, 300, 300, 300, 142, 13, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 265, 300, 268, 300, 300, + 301, 252, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 202, 34, 28, 30, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 35, 301, 29, 31, + 301, 301, 301, 301, 301, 301, 301, 301, 88, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 204, 201, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 62, 301, 301, 125, 301, 109, 301, 301, + 301, 301, 301, 301, 301, 301, 143, 13, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 266, 301, 269, - 300, 300, 300, 300, 300, 300, 300, 300, 12, 300, - 300, 21, 300, 300, 300, 245, 300, 300, 300, 253, - 300, 300, 300, 65, 300, 209, 300, 300, 300, 300, - 202, 300, 300, 60, 300, 300, 300, 300, 22, 300, - 42, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 156, 155, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 204, 198, 300, 214, 300, 300, - 257, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 72, 300, 300, 300, 240, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 12, 301, 301, 22, 301, 301, 301, 246, 301, 301, + 301, 254, 301, 301, 301, 66, 301, 210, 301, 301, + 301, 301, 203, 301, 301, 61, 301, 301, 301, 301, + 23, 301, 43, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 157, 156, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 205, 199, 301, 215, + 301, 301, 258, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 73, 301, 301, - 300, 300, 300, 300, 184, 300, 300, 300, 300, 208, - 300, 300, 300, 300, 300, 300, 300, 300, 274, 275, - 153, 300, 300, 66, 300, 300, 300, 300, 163, 300, - 300, 102, 103, 300, 300, 300, 300, 148, 300, 150, - 300, 189, 300, 300, 300, 300, 154, 300, 300, 217, - 300, 300, 300, 300, 300, 300, 300, 131, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 224, - 300, 300, 300, 23, 300, 250, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 190, 300, 300, - 238, 300, 269, 300, 183, 300, 300, 300, 300, 47, + 301, 241, 301, 301, 301, 301, 185, 301, 301, 301, + 301, 209, 301, 301, 301, 301, 301, 301, 301, 301, + 275, 276, 154, 301, 301, 67, 301, 301, 301, 301, + 164, 301, 301, 103, 104, 301, 301, 301, 301, 149, + 301, 151, 301, 190, 301, 301, 301, 301, 155, 301, + 301, 218, 301, 301, 301, 301, 301, 301, 301, 132, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 225, 301, 301, 301, 24, 301, 251, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 191, + 301, 301, 239, 301, 270, 301, 184, 301, 301, 301, - 300, 300, 300, 300, 4, 300, 300, 300, 115, 130, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 220, 36, - 37, 300, 300, 300, 300, 300, 300, 300, 258, 300, - 300, 300, 300, 300, 300, 226, 300, 300, 300, 193, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 75, - 300, 48, 244, 300, 221, 300, 300, 300, 300, 11, - 300, 300, 300, 300, 300, 114, 300, 300, 300, 300, - 191, 79, 300, 39, 300, 300, 300, 300, 300, 300, - 300, 300, 159, 300, 300, 300, 300, 300, 133, 300, + 301, 48, 301, 301, 301, 301, 4, 301, 301, 301, + 116, 131, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 221, 37, 38, 301, 301, 301, 301, 301, 301, 301, + 259, 301, 301, 301, 301, 301, 301, 227, 301, 301, + 301, 194, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 76, 301, 49, 245, 301, 222, 301, 301, 301, + 301, 11, 301, 301, 301, 301, 301, 115, 301, 301, + 301, 301, 192, 80, 301, 40, 301, 301, 301, 301, + 301, 301, 301, 301, 160, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 225, 127, - 300, 300, 109, 110, 300, 300, 300, 81, 85, 80, - 300, 73, 300, 300, 300, 300, 300, 10, 300, 300, - 300, 242, 300, 300, 300, 300, 281, 38, 300, 300, - 300, 300, 300, 158, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 86, 84, 300, 74, 266, 300, 300, 300, - 300, 300, 300, 300, 177, 300, 300, 300, 300, 300, - 192, 300, 300, 300, 300, 300, 300, 300, 300, 149, - 68, 300, 300, 300, 300, 300, 259, 300, 300, 300, + 134, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 226, 128, 301, 301, 110, 111, 301, 301, 301, 82, + 86, 81, 301, 74, 301, 301, 301, 301, 301, 10, + 301, 301, 301, 243, 301, 301, 301, 301, 282, 39, + 301, 301, 301, 301, 301, 159, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 87, 85, 301, 75, 267, 301, + 301, 301, 301, 301, 301, 301, 178, 301, 301, 301, + 301, 301, 193, 301, 301, 301, 301, 301, 301, 301, + 301, 150, 69, 301, 301, 301, 301, 301, 260, 301, - 300, 300, 300, 300, 128, 300, 83, 134, 135, 138, - 139, 136, 137, 76, 300, 243, 300, 300, 300, 300, - 152, 300, 300, 300, 300, 300, 219, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 165, 164, 40, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 89, 300, 218, - 300, 235, 263, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 5, 300, 300, 210, 300, 300, 264, - 300, 300, 300, 300, 300, 300, 300, 300, 24, 300, + 301, 301, 301, 301, 301, 301, 129, 301, 84, 135, + 136, 139, 140, 137, 138, 77, 301, 244, 301, 301, + 301, 301, 153, 301, 301, 301, 301, 301, 220, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 166, 165, 41, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 90, + 301, 219, 301, 236, 264, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 5, 301, 301, 211, 301, + 301, 265, 301, 301, 301, 301, 301, 301, 301, 301, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 132, 300, 300, 300, 300, 300, - 300, 300, 300, 166, 300, 173, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 260, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 280, 300, 300, 231, 300, 300, 300, - 300, 300, 261, 300, 300, 300, 300, 300, 300, 262, - 300, 300, 300, 229, 300, 232, 233, 300, 300, 300, - 300, 300, 230, 234, 0 + 25, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 133, 301, 301, 301, + 301, 301, 301, 301, 301, 167, 301, 174, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 261, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 281, 301, 301, 232, 301, + 301, 301, 301, 301, 262, 301, 301, 301, 301, 301, + 301, 263, 301, 301, 301, 230, 301, 233, 234, 301, + 301, 301, 301, 301, 231, 235, 0 } ; static const YY_CHAR yy_ec[256] = @@ -735,15 +735,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3000] = +static const flex_int16_t yy_base[3002] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 4280, 4028, 81, 5813, 5813, 5813, 96, 52, + 90, 112, 3479, 3230, 81, 5821, 5821, 5821, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 3954, 5813, 5813, 5813, 107, 3854, 5813, 5813, - 5813, 165, 3105, 2544, 5813, 5813, 5813, 211, 2291, 5813, - 5813, 5813, 180, 2178, 5813, 217, 5813, 221, 168, 1832, + 189, 152, 3109, 5821, 5821, 5821, 107, 3022, 5821, 5821, + 5821, 165, 2626, 2353, 5821, 5821, 5821, 211, 2291, 5821, + 5821, 5821, 180, 2178, 5821, 217, 5821, 221, 168, 1832, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -772,9 +772,9 @@ static const flex_int16_t yy_base[3000] = 700, 701, 702, 711, 704, 712, 713, 726, 731, 721, 732, 733, 735, 737, 740, 748, 739, 746, 743, 750, - 752, 753, 762, 758, 5813, 757, 760, 773, 766, 774, + 752, 753, 762, 758, 5821, 757, 760, 773, 766, 774, 775, 776, 781, 782, 763, 789, 787, 788, 792, 814, - 796, 798, 794, 803, 806, 5813, 804, 808, 838, 810, + 796, 798, 794, 803, 806, 5821, 804, 808, 838, 810, 812, 832, 828, 824, 827, 829, 839, 836, 849, 842, 847, 851, 862, 858, 859, 860, 861, 864, 863, 877, 872, 870, 799, 874, 889, 875, 882, 886, 887, 892, @@ -783,21 +783,21 @@ static const flex_int16_t yy_base[3000] = 942, 943, 937, 944, 947, 950, 951, 952, 953, 961, 958, 959, 963, 964, 966, 967, 970, 972, 973, 975, - 977, 979, 978, 985, 988, 981, 994, 989, 5813, 996, - 998, 999, 1000, 1001, 1003, 5813, 1004, 1005, 1006, 1014, + 977, 979, 978, 985, 988, 981, 994, 989, 5821, 996, + 998, 999, 1000, 1001, 1003, 5821, 1004, 1005, 1006, 1014, 1017, 1016, 1013, 1023, 1027, 1028, 1029, 1030, 1039, 1012, 1041, 1040, 1036, 1042, 1046, 1048, 1049, 1051, 1052, 1054, - 1055, 1057, 1060, 1077, 5813, 1061, 1064, 1062, 1063, 1070, + 1055, 1057, 1060, 1077, 5821, 1061, 1064, 1062, 1063, 1070, 1080, 1089, 1072, 1090, 1088, 1065, 1105, 1092, 1106, 1100, 1101, 1111, 1102, 1113, 1107, 1116, 1115, 1117, 1118, 1119, - 1120, 1125, 1126, 1131, 5813, 1133, 1134, 1145, 1135, 1143, + 1120, 1125, 1126, 1131, 5821, 1133, 1134, 1145, 1135, 1143, 1132, 1146, 1148, 1149, 1150, 1152, 1153, 1156, 1162, 1172, 1157, 1174, 1159, 1170, 1175, 1176, 1177, 1178, 1179, 1180, 1193, 1184, 1186, 1200, 1207, 1203, 1205, 1212, 1190, 1210, 1209, 1208, 1215, 1216, 1217, 1218, 1220, 1221, 1230, 1228, 1226, 1229, 1231, 1242, 1233, 1235, 1240, 1237, 1245, 1247, - 1253, 1254, 1250, 1256, 5813, 1263, 1260, 1267, 1262, 1268, + 1253, 1254, 1250, 1256, 5821, 1263, 1260, 1267, 1262, 1268, 1272, 1274, 1261, 1276, 1278, 1280, 1281, 1282, 1284, 1287, 1289, 1290, 1291, 1292, 1301, 1297, 1307, 1314, 1313, 1315, 1299, 1305, 1324, 1321, 1328, 1327, 1329, 1337, 1325, 1332, @@ -809,601 +809,603 @@ static const flex_int16_t yy_base[3000] = 1416, 1417, 1418, 1419, 1420, 1423, 1424, 1183, 1425, 1440, 1426, 1430, 1438, 1441, 1447, 1446, 1450, 1454, 1444, 1456, 1457, 1458, 1460, 1461, 1465, 1464, 1471, 1468, 1474, 1476, - 1478, 1477, 1480, 1484, 1487, 1481, 5813, 1488, 1495, 1494, + 1478, 1477, 1480, 1484, 1487, 1481, 5821, 1488, 1495, 1494, 1496, 1497, 1499, 1501, 1508, 1503, 1505, 1504, 1506, 1510, - 1516, 5813, 1517, 5813, 5813, 1520, 5813, 5813, 1518, 1523, + 1516, 5821, 1517, 5821, 5821, 1520, 5821, 5821, 1518, 1523, 1526, 1536, 1533, 1543, 1298, 1539, 1541, 1545, 1552, 1566, 1548, 1550, 1551, 1547, 1556, 1561, 1574, 1562, 1549, 1575, 1577, 1580, 1586, 1513, 1587, 1579, 1554, 1588, 1590, 1589, 1592, 1595, 1600, 1601, 1594, 1603, 1596, 1611, 1616, 1607, - 1623, 5813, 1619, 1626, 1631, 1627, 1634, 1630, 1629, 1636, + 1623, 5821, 1619, 1626, 1631, 1627, 1634, 1630, 1629, 1636, 1638, 1640, 1641, 1642, 1643, 1645, 1646, 1651, 1604, 1647, - 1659, 1654, 5813, 1657, 1658, 1656, 1662, 1669, 1663, 1664, + 1659, 1654, 5821, 1657, 1658, 1656, 1662, 1669, 1663, 1664, 1670, 1674, 1675, 1682, 1679, 1677, 1684, 1685, 1686, 1687, - 5813, 1689, 1697, 1693, 1699, 1700, 1702, 1705, 1701, 1706, + 5821, 1689, 1697, 1693, 1699, 1700, 1702, 1705, 1701, 1706, 1707, 1708, 1709, 1711, 1715, 1718, 1719, 1720, 1717, 1724, 1727, 1730, 1735, 1742, 1737, 1739, 1743, 1745, 1746, 1747, 1749, 1750, 1758, 1751, 1760, 1755, 1762, 1767, 1772, 1759, 1771, 1774, 1764, 1780, 1788, 1784, 1777, 1773, 1796, 1789, 1793, 1794, 1797, 1799, 1800, 1801, 1803, 1806, 1807, 1808, - 1810, 5813, 1811, 1816, 5813, 1814, 1817, 1839, 1818, 1820, + 1810, 5821, 1811, 1816, 5821, 1814, 1817, 1839, 1818, 1820, 1821, 1823, 1826, 1833, 1825, 1831, 1841, 1843, 1853, 1849, 1854, 1856, 1859, 1861, 1862, 1865, 1867, 1869, 1878, 1879, 1883, 1885, 1890, 1870, 1868, 1877, 1896, 1888, 1889, 1891, - 1899, 1906, 1893, 1901, 1903, 1908, 1912, 1914, 1919, 5813, + 1899, 1906, 1893, 1901, 1903, 1908, 1912, 1914, 1919, 5821, 1924, 1925, 1920, 1921, 1932, 1930, 1929, 1933, 1936, 1937, 1944, 1940, 1941, 1946, 1943, 1947, 1950, 1952, 1956, 1957, - 1962, 1954, 1973, 5813, 1958, 5813, 1955, 1959, 1972, 1975, - 1976, 1977, 1978, 1980, 5813, 5813, 1981, 1984, 1987, 1996, - 1982, 5813, 1997, 2004, 2001, 2006, 2000, 1999, 2007, 2008, - 2011, 2016, 2012, 2023, 2015, 2022, 2020, 5813, 2028, 2018, - 2024, 2033, 2035, 2036, 2037, 2040, 5813, 2043, 2044, 2047, + 1962, 1954, 1973, 5821, 1958, 5821, 1955, 1959, 1972, 1975, + 1976, 1977, 1978, 1980, 5821, 5821, 1981, 1984, 1987, 1996, + 1982, 5821, 1997, 2004, 2001, 2006, 2000, 1999, 2007, 2008, + 2011, 2016, 2012, 2023, 2015, 2022, 2020, 5821, 2028, 2018, + 2024, 2033, 2035, 2036, 2037, 2040, 5821, 2043, 2044, 2047, 2054, 2046, 2050, 2055, 2058, 2056, 2062, 2063, 2064, 2065, - 2066, 2075, 2076, 2067, 2078, 2081, 2077, 5813, 2074, 2085, + 2066, 2075, 2076, 2067, 2078, 2081, 2077, 5821, 2074, 2085, 2093, 2089, 2091, 2088, 2095, 2096, 2098, 2099, 2100, 2103, 2106, 2107, 2115, 2116, 2108, 2112, 2120, 2113, 2122, 2125, - 2128, 2127, 2129, 2130, 2131, 5813, 2133, 2135, 124, 2139, + 2128, 2127, 2129, 2130, 2131, 5821, 2133, 2135, 124, 2139, 2140, 2142, 2141, 2148, 2144, 2147, 2164, 2165, 2161, 2160, - 2163, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2177, 5813, - 2151, 2179, 2180, 2182, 2185, 2186, 2189, 5813, 2199, 2202, + 2163, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2177, 5821, + 2151, 2179, 2180, 2182, 2185, 2186, 2189, 5821, 2199, 2202, 2188, 2201, 2209, 2204, 2210, 2211, 2213, 2218, 2214, 2217, - 5813, 2221, 2224, 2226, 2227, 2228, 2230, 2235, 2237, 2238, + 5821, 2221, 2224, 2226, 2227, 2228, 2230, 2235, 2237, 2238, 2239, 2242, 2240, 2241, 2245, 2243, 2246, 2250, 2259, 2249, - 2251, 2256, 2260, 5813, 2272, 2261, 2270, 2263, 2274, 2273, + 2251, 2256, 2260, 5821, 2272, 2261, 2270, 2263, 2274, 2273, 2287, 2277, 2280, 2282, 2288, 2297, 2290, 2284, 2298, 2299, 2304, 2308, 2307, 2313, 2314, 2311, 2315, 2321, 2323, 2324, 2325, 2329, 2327, 2330, 2331, 2332, 2339, 2340, 2337, 2348, - 2346, 2353, 2351, 2356, 5813, 2357, 2358, 2341, 2363, 2371, - 2368, 2369, 2375, 2376, 2377, 2378, 2379, 2386, 2381, 2383, - 2384, 2387, 2388, 2394, 2395, 2399, 2400, 2407, 2401, 2409, - 2410, 5813, 2411, 2415, 2404, 2417, 2419, 2421, 2428, 2429, - 2431, 2422, 2425, 2433, 2434, 2435, 2437, 2439, 2440, 2445, - 2442, 5813, 2448, 2450, 2453, 2456, 2455, 2459, 2462, 2468, - 2466, 2452, 2472, 2473, 2474, 5813, 2481, 2482, 2479, 2483, - 2485, 2486, 2488, 2490, 2491, 5813, 2492, 2493, 2501, 2502, - 2497, 5813, 2504, 2500, 2506, 2507, 2508, 2509, 2517, 2510, - 2513, 2515, 2523, 2525, 2521, 2529, 5813, 2531, 2541, 2536, + 2346, 2353, 2359, 2358, 5821, 2361, 2363, 2349, 2368, 2376, + 2351, 2374, 2371, 2372, 2380, 2382, 2383, 2390, 2386, 2388, + 2389, 2393, 2391, 2395, 2392, 2394, 2402, 2409, 2400, 2412, + 2414, 5821, 2417, 2413, 2406, 2421, 2423, 2424, 2427, 2428, + 2431, 2432, 2433, 2435, 2437, 2438, 2439, 2440, 2442, 2446, + 2443, 5821, 2447, 2449, 2455, 2458, 2462, 2466, 2467, 2468, + 2473, 2456, 2475, 2476, 2452, 5821, 2485, 2486, 2477, 2490, + 2487, 2488, 2489, 2492, 2493, 5821, 2494, 2495, 2503, 2504, + 2499, 5821, 2508, 2501, 2506, 2510, 2509, 2511, 2516, 2512, + 2519, 2520, 2525, 2528, 2524, 2531, 5821, 2533, 2540, 2535, - 2537, 2539, 2542, 2543, 2545, 2557, 2549, 2552, 2559, 2564, - 2561, 2548, 2555, 2569, 2570, 2571, 2573, 2574, 5813, 2576, - 2577, 2579, 2582, 2580, 2585, 2586, 2598, 2588, 2591, 2593, - 2596, 2599, 2601, 2604, 2606, 2612, 2608, 2615, 2618, 2616, - 2621, 2602, 2625, 2628, 2635, 2632, 2636, 5813, 2639, 2640, - 2634, 2641, 2642, 2645, 2646, 2647, 2649, 2650, 2652, 2651, - 2654, 2667, 2676, 2662, 2663, 2655, 2668, 2671, 2672, 2678, - 2679, 2683, 2690, 2681, 2685, 2694, 2689, 2692, 2702, 2691, - 2693, 2695, 2700, 2703, 2704, 2705, 2706, 2713, 2709, 2723, - 2724, 2726, 2715, 2718, 2731, 2732, 5813, 2735, 2733, 2736, + 2537, 2541, 2542, 2543, 2545, 2554, 2548, 2551, 2561, 2564, + 2566, 2557, 2567, 2569, 2570, 2571, 2573, 2572, 5821, 2574, + 2579, 2580, 2581, 2586, 2583, 2584, 2591, 2594, 2595, 2596, + 2600, 2602, 2599, 2604, 2605, 2608, 2607, 2611, 2621, 2616, + 2623, 2619, 2627, 2630, 2634, 2635, 2637, 5821, 2642, 2639, + 2644, 2633, 2645, 2646, 2647, 2648, 2650, 2652, 2657, 2655, + 2656, 2664, 2672, 2665, 2667, 2673, 2674, 2677, 2676, 2678, + 2679, 2680, 2688, 2684, 2683, 2696, 2687, 2694, 2701, 2691, + 2702, 2703, 2704, 2705, 2707, 2711, 2712, 2714, 2708, 2716, + 2725, 2727, 2729, 2718, 2730, 2734, 2735, 5821, 2738, 2736, - 2737, 2742, 2745, 2749, 2739, 2746, 2747, 2757, 2758, 2755, - 2760, 2763, 2770, 2766, 5813, 2767, 5813, 2768, 2769, 2771, - 2779, 2776, 5813, 2781, 5813, 2784, 2791, 2777, 2782, 5813, - 2792, 2786, 2788, 2799, 2794, 2801, 2802, 2803, 2804, 2810, - 2805, 2812, 2807, 2813, 2815, 2816, 2819, 2820, 2826, 2833, - 2828, 2830, 2817, 2836, 2838, 2840, 2841, 5813, 2844, 2845, - 2850, 2849, 2851, 2852, 2853, 2855, 2856, 2858, 2857, 2862, - 2861, 2870, 2874, 2886, 2871, 2888, 5813, 2873, 2884, 2875, - 2889, 5813, 2885, 2892, 2896, 2898, 2893, 2900, 2902, 2901, - 2905, 2903, 2908, 2919, 2920, 2921, 2923, 2924, 2909, 2910, + 2740, 2742, 2745, 2748, 2752, 2749, 2750, 2756, 2755, 2762, + 2757, 2765, 2767, 2774, 2770, 5821, 2771, 5821, 2772, 2773, + 2775, 2785, 2780, 5821, 2782, 5821, 2788, 2795, 2786, 2790, + 5821, 2796, 2784, 2792, 2797, 2803, 2805, 2808, 2807, 2809, + 2810, 2813, 2814, 2815, 2816, 2819, 2820, 2825, 2821, 2835, + 2824, 2822, 2843, 2832, 2837, 2841, 2839, 2846, 5821, 2850, + 2847, 2852, 2853, 2855, 2856, 2859, 2857, 2863, 2864, 2861, + 2871, 2867, 2875, 2874, 2886, 2868, 2891, 5821, 2878, 2890, + 2882, 2893, 5821, 2895, 2894, 2896, 2902, 2898, 2904, 2905, + 2906, 2907, 2911, 2910, 2913, 2921, 2924, 2917, 2927, 2914, - 2933, 2930, 2911, 2938, 2942, 2940, 2931, 2941, 2943, 2946, - 2947, 2954, 2955, 2951, 2958, 2953, 2960, 2964, 2967, 2957, - 2961, 2968, 2969, 2970, 2973, 2974, 2977, 2978, 2979, 2980, - 2982, 5813, 2990, 2986, 2991, 2992, 2995, 2997, 3000, 3001, - 3004, 3002, 3005, 3009, 3007, 5813, 3014, 5813, 3008, 3022, - 3016, 3027, 3020, 3028, 3035, 3031, 3036, 3037, 3039, 3040, - 3041, 3042, 3043, 3047, 3050, 3048, 3061, 3054, 3051, 3063, - 3064, 3065, 3067, 3068, 5813, 3069, 3070, 3072, 3074, 3075, - 3081, 3077, 3087, 3085, 3089, 3091, 3101, 5813, 3093, 3097, - 3098, 3106, 3108, 3104, 3114, 3121, 3118, 3125, 3124, 5813, + 2925, 2940, 2933, 2935, 2941, 2943, 2944, 2945, 2946, 2947, + 2948, 2950, 2957, 2960, 2956, 2965, 2952, 2962, 2970, 2971, + 2955, 2963, 2972, 2974, 2977, 2978, 2980, 2985, 2981, 2982, + 2984, 2986, 5821, 2995, 2989, 2999, 2996, 3000, 3003, 2987, + 3005, 3010, 3006, 3013, 3016, 3008, 5821, 3012, 5821, 3014, + 3026, 3031, 3034, 3035, 3018, 3037, 3042, 3038, 3043, 3044, + 3045, 3046, 3048, 3052, 3053, 3054, 3058, 3074, 3056, 3057, + 3060, 3069, 3070, 3059, 3071, 5821, 5821, 3076, 3078, 3079, + 3081, 3082, 3085, 3088, 3086, 3092, 3093, 3094, 3105, 5821, + 3102, 3100, 3106, 3108, 3117, 3107, 3119, 3126, 3122, 3129, - 3116, 3117, 3132, 3127, 3134, 3135, 5813, 3133, 5813, 3128, - 3138, 3142, 3139, 3145, 3146, 3149, 3151, 3153, 3160, 3161, - 3156, 3144, 3162, 3166, 3168, 3173, 3170, 3171, 3172, 5813, - 3176, 3177, 3178, 3179, 3183, 3186, 3189, 3193, 5813, 3194, - 3196, 3199, 3200, 3201, 3203, 3205, 3204, 3210, 3213, 3207, - 3208, 3221, 3217, 3206, 3227, 3231, 3232, 3237, 5813, 3234, - 3214, 3244, 3241, 3242, 3243, 3246, 3247, 3248, 3250, 3251, - 3252, 3253, 3259, 3258, 3255, 3256, 3261, 3264, 3275, 3272, - 3263, 3276, 3277, 3280, 3283, 3282, 3286, 3289, 3291, 3292, - 3302, 3303, 3294, 3297, 3306, 3307, 3314, 3310, 5813, 3322, + 3124, 5821, 3121, 3131, 3138, 3133, 3134, 3142, 5821, 3139, + 5821, 3135, 3140, 3144, 3148, 3149, 3150, 3151, 3153, 3156, + 3164, 3166, 3161, 3168, 3169, 3170, 3171, 3178, 3173, 3175, + 3176, 5821, 3180, 3181, 3182, 3185, 3192, 3193, 3196, 3183, + 5821, 3199, 3203, 3200, 3204, 3207, 3209, 3210, 3211, 3213, + 3215, 3212, 3217, 3228, 3220, 3221, 3223, 3234, 3235, 3241, + 5821, 3242, 3236, 3249, 3251, 3244, 3246, 3252, 3253, 3254, + 3257, 3259, 3258, 3260, 3262, 3264, 3261, 3271, 3265, 3267, + 3284, 3278, 3268, 3281, 3270, 3287, 3288, 3292, 3294, 3297, + 3299, 3291, 3302, 3303, 3305, 3309, 3313, 3310, 3321, 3316, - 3299, 3325, 3309, 3320, 3327, 3328, 3330, 3331, 3321, 3332, - 3339, 3335, 5813, 3348, 3337, 3336, 3346, 3349, 3359, 3354, - 3340, 3356, 3362, 3358, 3365, 3367, 3368, 3369, 3372, 3373, - 5813, 5813, 3375, 3376, 3379, 5813, 3380, 3378, 3391, 3382, - 3383, 3392, 3395, 3394, 3386, 3396, 3398, 3400, 5813, 3405, - 3414, 3406, 3411, 3415, 3419, 3421, 3417, 3423, 3425, 3427, - 3428, 3430, 3429, 3431, 3434, 3442, 3438, 3437, 3439, 5813, - 3441, 3444, 3448, 3450, 3451, 3454, 5813, 3455, 3456, 3462, - 3463, 3465, 3467, 3473, 3476, 3477, 3478, 3480, 3481, 3482, - 3483, 3485, 3490, 3488, 3495, 3496, 3487, 5813, 3500, 3501, + 5821, 3323, 3318, 3328, 3320, 3324, 3332, 3333, 3335, 3325, + 3340, 3341, 3348, 3343, 5821, 3352, 3350, 3347, 3354, 3353, + 3362, 3357, 3355, 3358, 3370, 3359, 3371, 3367, 3373, 3376, + 3381, 3374, 5821, 5821, 3383, 3378, 3384, 5821, 3388, 3386, + 3396, 3392, 3389, 3398, 3399, 3400, 3401, 3404, 3402, 3408, + 5821, 3411, 3418, 3414, 3415, 3423, 3425, 3421, 3426, 3429, + 3430, 3432, 3433, 3436, 3435, 3437, 3440, 3448, 3444, 3443, + 3452, 5821, 3446, 3447, 3449, 3460, 3455, 3461, 5821, 3462, + 3467, 3473, 3468, 3483, 3480, 3475, 3488, 3457, 3485, 3470, + 3490, 3492, 3493, 3500, 3496, 3497, 3504, 3505, 3510, 5821, - 3504, 3507, 3511, 3514, 3521, 3522, 3518, 3520, 3519, 3529, - 5813, 3526, 3528, 3527, 3530, 3540, 3535, 3542, 3533, 5813, - 3537, 3541, 3543, 5813, 3547, 3551, 3554, 3559, 3546, 3562, - 3561, 3563, 3564, 3565, 5813, 3571, 5813, 3569, 3573, 3577, - 5813, 3575, 3579, 3581, 3583, 3580, 3588, 3590, 3597, 3584, - 3592, 3594, 3598, 3599, 3600, 3608, 3606, 5813, 3609, 3607, - 3613, 3614, 3618, 3611, 3616, 3619, 3626, 5813, 5813, 3629, - 5813, 3630, 3631, 3632, 5813, 3634, 3636, 3641, 3638, 3642, - 3644, 3652, 3645, 5813, 3654, 3640, 3656, 3658, 3659, 3662, - 3663, 3664, 3665, 3666, 3671, 5813, 3668, 3670, 3673, 3669, + 3498, 3508, 3501, 3516, 3518, 3526, 3528, 3529, 3509, 3527, + 3530, 3537, 5821, 3533, 3534, 3536, 3539, 3546, 3541, 3549, + 3544, 5821, 3547, 3550, 3552, 5821, 3551, 3560, 3566, 3568, + 3553, 3576, 3571, 3574, 3572, 3575, 5821, 3580, 5821, 3555, + 3581, 3582, 5821, 3586, 3587, 3589, 3591, 3588, 3595, 3596, + 3603, 3592, 3604, 3605, 3606, 3607, 3609, 3616, 3608, 5821, + 3617, 3615, 3619, 3620, 3626, 3624, 3627, 3632, 3630, 5821, + 5821, 3639, 5821, 3631, 3640, 3641, 5821, 3644, 3646, 3651, + 3647, 3649, 3652, 3662, 3655, 5821, 3658, 3653, 3666, 3668, + 3669, 3670, 3671, 3672, 3674, 3676, 3675, 5821, 3678, 3680, - 3678, 3683, 3679, 3685, 5813, 3689, 3693, 3692, 3696, 3697, - 5813, 3699, 5813, 3700, 3702, 3703, 3707, 3706, 5813, 3712, - 3713, 3717, 3719, 3721, 3720, 3723, 3724, 3730, 3731, 3738, - 3734, 3733, 3735, 5813, 3736, 3740, 3742, 3749, 3737, 3744, - 3753, 3756, 3757, 3758, 3763, 3760, 3767, 3769, 3771, 3773, - 3765, 5813, 3775, 3777, 3776, 3791, 3786, 3781, 5813, 3782, - 3796, 3798, 5813, 3789, 3788, 3800, 3805, 3792, 3799, 3806, - 3807, 3811, 5813, 3812, 3813, 3814, 3815, 3818, 3819, 5813, - 5813, 3827, 5813, 3829, 3816, 3830, 3831, 3832, 3838, 3837, - 3841, 3843, 3840, 3844, 3851, 3852, 3861, 3864, 3868, 3863, + 3686, 3679, 3687, 3693, 3699, 3688, 5821, 3701, 3703, 3695, + 3709, 3710, 5821, 3702, 5821, 3712, 3715, 3716, 3718, 3719, + 5821, 3721, 3722, 3726, 3727, 3729, 3731, 3732, 3735, 3739, + 3741, 3748, 3744, 3743, 3746, 5821, 3745, 3751, 3759, 3762, + 3752, 3750, 3766, 3768, 3769, 3772, 3775, 3777, 3778, 3781, + 3776, 3786, 3783, 5821, 3784, 3790, 3787, 3800, 3795, 3797, + 5821, 3798, 3802, 3806, 5821, 3803, 3805, 3812, 3814, 3815, + 3817, 3818, 3822, 3823, 5821, 3819, 3820, 3824, 3837, 3840, + 3830, 5821, 5821, 3841, 5821, 3843, 3827, 3846, 3848, 3826, + 3853, 3829, 3854, 3856, 3852, 3864, 3865, 3859, 3875, 3873, - 3867, 3853, 5813, 5813, 3870, 3871, 3874, 3877, 3878, 3880, - 3881, 3888, 3884, 3890, 3894, 3895, 3902, 5813, 3901, 3887, - 3904, 5813, 3885, 3898, 3906, 3909, 3911, 3912, 3915, 3914, - 3917, 3918, 3920, 3919, 3922, 3923, 3927, 3926, 3928, 3936, - 5813, 3940, 3937, 3938, 3941, 3943, 3944, 3947, 3949, 3950, - 5813, 3951, 3953, 3955, 3959, 3960, 3962, 3969, 3977, 3979, - 3965, 3973, 3981, 3983, 3985, 3988, 5813, 3989, 3987, 3990, - 3991, 3997, 3999, 4000, 4002, 4004, 4006, 4008, 4009, 4012, - 4016, 4013, 4017, 4018, 4020, 5813, 4024, 4031, 4021, 4034, - 4025, 4035, 4042, 4036, 4047, 4038, 4044, 4048, 4050, 5813, + 3882, 3877, 3747, 3858, 5821, 5821, 3884, 3885, 3879, 3890, + 3891, 3881, 3887, 3901, 3894, 3896, 3903, 3904, 3912, 5821, + 3910, 3898, 3913, 5821, 3907, 3915, 3908, 3919, 3916, 3922, + 3923, 3925, 3926, 3927, 3928, 3929, 3935, 3937, 3936, 3938, + 3943, 3945, 5821, 3946, 3948, 3949, 3950, 3952, 3953, 3957, + 3958, 3959, 5821, 3960, 3963, 3966, 3964, 3965, 3971, 3981, + 3986, 3988, 3974, 3983, 3990, 3992, 3994, 3995, 5821, 3997, + 3998, 3999, 4003, 4006, 4008, 4009, 4011, 4012, 4014, 4016, + 4017, 4021, 4024, 4025, 4026, 4027, 4029, 5821, 4032, 4034, + 4036, 4043, 4038, 4040, 4044, 4049, 4052, 4045, 4053, 4054, - 4051, 4053, 4054, 4056, 4062, 4055, 4058, 4063, 5813, 4065, - 4066, 4068, 4070, 4072, 4077, 4079, 4080, 4082, 4083, 4089, - 5813, 4087, 4088, 4096, 4094, 4097, 4100, 4098, 4102, 5813, - 4106, 4108, 4112, 4120, 4104, 4122, 4118, 4124, 4115, 4117, - 4131, 4126, 4132, 4133, 4136, 4137, 4144, 4149, 4146, 5813, - 4139, 5813, 4147, 4152, 4154, 4157, 4155, 5813, 4160, 4162, - 4164, 4165, 4161, 5813, 4167, 4168, 4171, 4169, 5813, 4182, - 4183, 4172, 4187, 4174, 4189, 5813, 4194, 4195, 4191, 4203, - 4206, 4202, 4204, 4207, 4205, 4209, 4210, 4211, 5813, 4215, - 4213, 4221, 4222, 4224, 4214, 4226, 4232, 4225, 5813, 4235, + 4058, 5821, 4059, 4060, 4061, 4062, 4070, 4063, 4071, 4072, + 5821, 4075, 4077, 4078, 4067, 4080, 4084, 4088, 4089, 4091, + 4092, 4093, 5821, 4095, 4099, 4101, 4103, 4105, 4108, 4110, + 4109, 5821, 4112, 4116, 4119, 4126, 4122, 4130, 4127, 4131, + 4123, 4125, 4137, 4133, 4141, 4144, 4145, 4146, 4155, 4157, + 4152, 5821, 4139, 5821, 4158, 4161, 4169, 4164, 4166, 5821, + 4168, 4171, 4175, 4170, 4172, 5821, 4177, 4176, 4178, 4179, + 5821, 4180, 4190, 4182, 4194, 4197, 4198, 5821, 4201, 4204, + 4203, 4211, 4215, 4213, 4210, 4216, 4214, 4218, 4219, 4220, + 5821, 4223, 4222, 4229, 4230, 4231, 4233, 4237, 4243, 4234, - 4228, 4236, 4237, 4239, 4241, 4242, 4250, 4246, 4245, 5813, - 4249, 4253, 4260, 4259, 4255, 5813, 5813, 4262, 4268, 4270, - 4264, 4271, 5813, 4274, 4281, 4277, 4280, 4282, 5813, 5813, - 4284, 5813, 4285, 5813, 4286, 4288, 5813, 5813, 4287, 4293, - 4294, 4296, 4298, 5813, 4306, 5813, 4308, 4309, 4295, 4307, - 4312, 5813, 4313, 4314, 4316, 5813, 4318, 4328, 4320, 4321, - 5813, 4324, 4325, 4330, 5813, 4333, 4340, 4337, 4331, 4341, - 4346, 4343, 4347, 4352, 4353, 4354, 4335, 4357, 4364, 4368, - 4370, 4372, 4373, 4356, 4375, 4376, 4378, 4381, 4382, 4383, - 4384, 4387, 4388, 4390, 4392, 4395, 4396, 4397, 4398, 4399, + 5821, 4239, 4236, 4245, 4246, 4248, 4249, 4250, 4257, 4258, + 4254, 5821, 4259, 4261, 4268, 4263, 4274, 5821, 5821, 4267, + 4277, 4270, 4279, 4282, 5821, 4280, 4291, 4286, 4288, 4290, + 5821, 5821, 4293, 5821, 4289, 5821, 4294, 4295, 5821, 5821, + 4296, 4297, 4304, 4310, 4303, 5821, 4313, 5821, 4306, 4316, + 4314, 4318, 4319, 5821, 4320, 4321, 4326, 5821, 4322, 4334, + 4327, 4329, 5821, 4336, 4332, 4337, 5821, 4341, 4347, 4338, + 4348, 4349, 4352, 4354, 4350, 4353, 4359, 4360, 4361, 4363, + 4370, 4373, 4375, 4377, 4378, 4362, 4379, 4382, 4385, 4387, + 4388, 4389, 4391, 4393, 4394, 4396, 4398, 4401, 4402, 4403, - 4409, 4401, 4402, 4412, 4415, 4405, 4413, 4416, 4417, 4418, - 4425, 4427, 4420, 4423, 5813, 4428, 4430, 4434, 4437, 4439, - 4442, 4443, 4445, 4450, 4454, 5813, 4458, 5813, 4460, 4451, - 4456, 4462, 5813, 4463, 4464, 4465, 4466, 4468, 4470, 4471, - 4472, 5813, 4475, 4476, 4479, 4485, 5813, 4491, 4493, 4478, - 4494, 4495, 4499, 4497, 4501, 4504, 4503, 4506, 4508, 4516, - 4509, 4511, 4513, 4518, 4517, 4521, 4524, 4358, 4531, 4533, - 4539, 5813, 4525, 5813, 4534, 4528, 4536, 4540, 4545, 4542, - 4546, 5813, 5813, 4549, 4551, 4553, 4555, 4556, 4558, 4559, - 5813, 4561, 4564, 4567, 4571, 5813, 4572, 4573, 4578, 5813, + 4404, 4405, 4406, 4408, 4415, 4418, 4420, 4419, 4421, 4423, + 4422, 4424, 4426, 4430, 4432, 4433, 5821, 4431, 4434, 4437, + 4440, 4444, 4450, 4452, 4454, 4462, 4463, 5821, 4465, 5821, + 4467, 4451, 4459, 4471, 5821, 4472, 4473, 4474, 4475, 4476, + 4477, 4480, 4478, 5821, 4482, 4483, 4484, 4487, 5821, 4494, + 4489, 4499, 4500, 4501, 4504, 4502, 4506, 4507, 4509, 4511, + 4513, 4521, 4514, 4516, 4522, 4525, 4526, 4527, 4529, 4533, + 4537, 4538, 4543, 5821, 4539, 5821, 4544, 4545, 4548, 4549, + 4550, 4551, 4554, 5821, 5821, 4552, 4556, 4562, 4563, 4557, + 4566, 4570, 5821, 4567, 4576, 4584, 4568, 5821, 4577, 4579, - 4575, 4579, 4581, 4583, 4580, 4590, 4586, 4594, 4595, 4596, - 4598, 5813, 5813, 5813, 5813, 4600, 4602, 4605, 4606, 4607, - 4609, 4612, 4614, 4610, 5813, 4616, 5813, 5813, 4617, 4623, - 4626, 4627, 4629, 4630, 4633, 4631, 5813, 4635, 4636, 4638, - 4644, 4646, 4648, 4651, 4652, 4653, 4654, 4661, 4660, 4662, - 4664, 4668, 4667, 4670, 5813, 5813, 4674, 4676, 4677, 4684, - 4681, 4685, 4688, 4689, 4691, 4692, 4694, 4695, 4697, 4698, - 5813, 4699, 4705, 5813, 4700, 5813, 4706, 4713, 4707, 4714, - 4715, 4717, 4719, 4721, 5813, 5813, 4716, 4722, 4728, 4732, - 4729, 4734, 4723, 4737, 4733, 5813, 4739, 5813, 4740, 4741, + 4586, 5821, 4588, 4587, 4589, 4591, 4592, 4595, 4598, 4601, + 4602, 4604, 4606, 5821, 5821, 5821, 5821, 4607, 4609, 4613, + 4614, 4615, 4617, 4620, 4622, 4619, 5821, 4624, 5821, 5821, + 4625, 4632, 4633, 4635, 4636, 4638, 4639, 4641, 5821, 4643, + 4645, 4646, 4652, 4654, 4656, 4659, 4660, 4661, 4662, 4669, + 4668, 4670, 4672, 4676, 4675, 4678, 5821, 5821, 4682, 4684, + 4685, 4692, 4689, 4693, 4696, 4697, 4699, 4700, 4702, 4703, + 4705, 4706, 5821, 4707, 4713, 5821, 4708, 5821, 4714, 4721, + 4715, 4722, 4723, 4725, 4727, 4729, 5821, 5821, 4724, 4730, + 4736, 4740, 4737, 4742, 4731, 4745, 4741, 5821, 4747, 5821, - 4750, 4744, 4757, 4759, 4761, 4763, 4756, 4765, 5813, 4758, - 4766, 5813, 4768, 4771, 4773, 5813, 4774, 4777, 4781, 5813, - 4783, 4786, 4784, 5813, 4792, 5813, 4778, 4794, 4793, 4801, - 5813, 4787, 4796, 5813, 4803, 4809, 4810, 4804, 5813, 4806, - 5813, 4811, 4815, 4818, 4821, 4812, 4823, 4816, 4825, 4826, - 4834, 4833, 4835, 5813, 5813, 4842, 4830, 4837, 4838, 4844, - 4851, 4846, 4848, 4855, 5813, 5813, 4856, 5813, 4859, 4860, - 5813, 4847, 4862, 4864, 4868, 4866, 4849, 4874, 4876, 4870, - 4877, 4892, 4878, 4880, 4893, 4895, 4898, 4900, 4887, 4902, - 4890, 4883, 4904, 4905, 4906, 5813, 4912, 4914, 4915, 5813, + 4748, 4749, 4758, 4752, 4765, 4767, 4769, 4771, 4764, 4773, + 5821, 4766, 4774, 5821, 4776, 4779, 4781, 5821, 4782, 4785, + 4789, 5821, 4791, 4794, 4792, 5821, 4800, 5821, 4786, 4802, + 4801, 4809, 5821, 4795, 4804, 5821, 4811, 4817, 4818, 4812, + 5821, 4814, 5821, 4819, 4823, 4826, 4829, 4820, 4831, 4824, + 4833, 4834, 4842, 4841, 4843, 5821, 5821, 4850, 4838, 4845, + 4846, 4852, 4859, 4854, 4856, 4863, 5821, 5821, 4864, 5821, + 4867, 4868, 5821, 4855, 4870, 4872, 4876, 4874, 4857, 4882, + 4884, 4878, 4885, 4900, 4886, 4888, 4901, 4903, 4906, 4908, + 4895, 4910, 4898, 4891, 4912, 4913, 4914, 5821, 4920, 4922, - 4919, 4916, 4921, 4922, 5813, 4929, 4930, 4931, 4932, 5813, - 4924, 4935, 4943, 4936, 4937, 4950, 4938, 4946, 5813, 5813, - 5813, 4948, 4957, 5813, 4959, 4954, 4960, 4961, 5813, 4962, - 4963, 5813, 5813, 4964, 4965, 4966, 4973, 5813, 4969, 5813, - 4970, 5813, 4972, 4978, 4987, 4984, 5813, 4990, 4996, 5813, - 4999, 5002, 5004, 5005, 4992, 4994, 5006, 5813, 4982, 5010, - 5016, 5008, 5009, 5017, 5018, 5019, 5026, 5022, 5025, 5813, - 5029, 5028, 5030, 5813, 5032, 5813, 5033, 5036, 5035, 5042, - 5040, 5034, 5044, 5054, 5041, 5058, 5045, 5813, 5061, 5063, - 5813, 5055, 5813, 5066, 5813, 5068, 5069, 5070, 5072, 5813, + 4923, 5821, 4927, 4924, 4929, 4930, 5821, 4937, 4938, 4939, + 4940, 5821, 4932, 4943, 4951, 4944, 4945, 4958, 4946, 4954, + 5821, 5821, 5821, 4956, 4965, 5821, 4967, 4962, 4968, 4969, + 5821, 4970, 4971, 5821, 5821, 4972, 4973, 4974, 4981, 5821, + 4977, 5821, 4978, 5821, 4980, 4986, 4995, 4992, 5821, 4998, + 5004, 5821, 5007, 5010, 5012, 5013, 5000, 5002, 5014, 5821, + 4990, 5018, 5024, 5016, 5017, 5025, 5026, 5027, 5034, 5030, + 5033, 5821, 5037, 5036, 5038, 5821, 5040, 5821, 5041, 5044, + 5043, 5050, 5048, 5042, 5052, 5062, 5049, 5066, 5053, 5821, + 5069, 5071, 5821, 5063, 5821, 5074, 5821, 5076, 5077, 5078, - 5074, 5071, 5075, 5078, 5813, 5079, 5081, 5083, 5813, 5813, - 5087, 5094, 5096, 4634, 5090, 5093, 5099, 5103, 5100, 5104, - 5105, 5112, 5108, 5109, 5110, 5115, 5117, 5123, 5813, 5813, - 5813, 5116, 5118, 5132, 5134, 5136, 5135, 5131, 5813, 5137, - 5140, 5141, 5150, 5146, 5148, 5813, 5152, 5143, 5156, 5813, - 5154, 5158, 5161, 5155, 5167, 5171, 5174, 5176, 5177, 5813, - 5179, 5813, 5813, 5168, 5813, 5159, 5180, 5183, 5184, 5813, - 5189, 5186, 5190, 5192, 5194, 5813, 5197, 5195, 5198, 5199, - 5813, 5813, 5207, 5813, 5209, 5211, 5212, 5219, 5218, 5214, - 5221, 5223, 5813, 5224, 5225, 5227, 5229, 5231, 5813, 5234, + 5080, 5821, 5082, 5079, 5083, 5086, 5821, 5087, 5089, 5091, + 5821, 5821, 5095, 5102, 5104, 4642, 5098, 5101, 5107, 5111, + 5108, 5112, 5113, 5120, 5116, 5117, 5118, 5123, 5125, 5131, + 5821, 5821, 5821, 5124, 5126, 5140, 5142, 5144, 5143, 5139, + 5821, 5145, 5148, 5149, 5158, 5154, 5156, 5821, 5160, 5151, + 5164, 5821, 5162, 5166, 5169, 5163, 5175, 5179, 5182, 5184, + 5185, 5821, 5187, 5821, 5821, 5176, 5821, 5167, 5188, 5191, + 5192, 5821, 5197, 5194, 5198, 5200, 5202, 5821, 5205, 5203, + 5206, 5207, 5821, 5821, 5215, 5821, 5217, 5219, 5220, 5227, + 5226, 5222, 5229, 5231, 5821, 5232, 5233, 5235, 5237, 5239, - 5233, 5235, 5236, 5239, 5238, 5243, 5246, 5248, 5813, 5813, - 5249, 5250, 5813, 5813, 5259, 5265, 5247, 5813, 5813, 5813, - 5271, 5813, 5273, 5277, 5281, 5285, 5262, 5813, 5287, 5276, - 5284, 5813, 5268, 5280, 5290, 5292, 5813, 5813, 5289, 5196, - 5293, 5296, 5301, 5813, 5299, 5302, 5303, 5307, 5309, 5310, - 5313, 5312, 5328, 5326, 5315, 5319, 5323, 5330, 5331, 5329, - 5333, 5337, 5813, 5813, 5339, 5813, 5813, 5346, 5350, 5352, - 5354, 5356, 5358, 5360, 5813, 5361, 5363, 5364, 5365, 5347, - 5813, 5366, 5369, 5371, 5374, 5372, 5375, 5378, 5380, 5813, - 5813, 5381, 5388, 5382, 5389, 5383, 5813, 5392, 5400, 5396, + 5821, 5242, 5241, 5243, 5244, 5247, 5246, 5251, 5254, 5256, + 5821, 5821, 5257, 5258, 5821, 5821, 5267, 5273, 5255, 5821, + 5821, 5821, 5279, 5821, 5281, 5285, 5289, 5293, 5270, 5821, + 5295, 5284, 5292, 5821, 5276, 5288, 5298, 5300, 5821, 5821, + 5297, 5204, 5301, 5304, 5309, 5821, 5307, 5310, 5311, 5315, + 5317, 5318, 5321, 5320, 5336, 5334, 5323, 5327, 5331, 5338, + 5339, 5337, 5341, 5345, 5821, 5821, 5347, 5821, 5821, 5354, + 5358, 5360, 5362, 5364, 5366, 5368, 5821, 5369, 5371, 5372, + 5373, 5355, 5821, 5374, 5377, 5379, 5382, 5380, 5383, 5386, + 5388, 5821, 5821, 5389, 5396, 5390, 5397, 5391, 5821, 5400, - 5397, 5398, 5403, 5404, 5813, 5407, 5813, 5813, 5813, 5813, - 5813, 5813, 5813, 5813, 5406, 5813, 5405, 5412, 5414, 5416, - 5813, 5419, 5423, 5424, 5425, 5426, 5813, 5427, 5430, 5429, - 5341, 5431, 5435, 5438, 5433, 5437, 5443, 5439, 5447, 5444, - 5448, 5449, 5813, 5813, 5813, 5453, 5456, 5458, 5460, 5471, - 5472, 5475, 5478, 5461, 5463, 5479, 5481, 5484, 5466, 5485, - 5493, 5488, 5490, 5495, 5492, 5496, 5498, 5813, 5499, 5813, - 5501, 5813, 5813, 5504, 5505, 5508, 5509, 5517, 5518, 5513, - 5520, 5521, 5523, 5813, 5524, 5526, 5813, 5525, 5530, 5813, - 5529, 5531, 5532, 5535, 5537, 5538, 5542, 5553, 5813, 5541, + 5408, 5404, 5405, 5406, 5411, 5412, 5821, 5415, 5821, 5821, + 5821, 5821, 5821, 5821, 5821, 5821, 5414, 5821, 5413, 5420, + 5422, 5424, 5821, 5427, 5431, 5432, 5433, 5434, 5821, 5435, + 5438, 5437, 5349, 5439, 5443, 5446, 5441, 5445, 5451, 5447, + 5455, 5452, 5456, 5457, 5821, 5821, 5821, 5461, 5464, 5466, + 5468, 5479, 5480, 5483, 5486, 5469, 5471, 5487, 5489, 5492, + 5474, 5493, 5501, 5496, 5498, 5503, 5500, 5504, 5506, 5821, + 5507, 5821, 5509, 5821, 5821, 5512, 5513, 5516, 5517, 5525, + 5526, 5521, 5528, 5529, 5531, 5821, 5532, 5534, 5821, 5533, + 5538, 5821, 5537, 5539, 5540, 5543, 5545, 5546, 5550, 5561, - 5544, 5552, 5555, 5559, 5566, 5567, 5565, 5569, 5572, 5556, - 5579, 5581, 5578, 5585, 5813, 5582, 5576, 5587, 5588, 5589, - 5596, 5591, 5592, 5813, 5597, 5813, 5600, 5602, 5601, 5593, - 5603, 5604, 5615, 5613, 5619, 5813, 5609, 5620, 5623, 5624, - 5626, 5628, 5629, 5630, 5638, 5634, 5641, 5645, 5640, 5646, - 5631, 5651, 5648, 5813, 5655, 5652, 5813, 5657, 5658, 5659, - 5660, 5664, 5813, 5669, 5661, 5666, 5672, 5675, 5670, 5813, - 5682, 5684, 5686, 5813, 5687, 5813, 5813, 5689, 5676, 5688, - 5691, 5697, 5813, 5813, 5813, 5721, 5728, 5735, 5742, 5749, - 88, 5756, 5763, 5770, 5777, 5784, 5791, 5798, 5805 + 5821, 5549, 5552, 5560, 5563, 5567, 5574, 5575, 5573, 5577, + 5580, 5564, 5587, 5589, 5586, 5593, 5821, 5590, 5584, 5595, + 5596, 5597, 5604, 5599, 5600, 5821, 5605, 5821, 5608, 5610, + 5609, 5601, 5611, 5612, 5623, 5621, 5627, 5821, 5617, 5628, + 5631, 5632, 5634, 5636, 5637, 5638, 5646, 5642, 5649, 5653, + 5648, 5654, 5639, 5659, 5656, 5821, 5663, 5660, 5821, 5665, + 5666, 5667, 5668, 5672, 5821, 5677, 5669, 5674, 5680, 5683, + 5678, 5821, 5690, 5692, 5694, 5821, 5695, 5821, 5821, 5697, + 5684, 5696, 5699, 5705, 5821, 5821, 5821, 5729, 5736, 5743, + 5750, 5757, 88, 5764, 5771, 5778, 5785, 5792, 5799, 5806, + 5813 } ; -static const flex_int16_t yy_def[3000] = +static const flex_int16_t yy_def[3002] = { 0, - 2985, 1, 2986, 2986, 2987, 2987, 2988, 2988, 2989, 2989, - 2990, 2990, 2985, 2991, 2985, 2985, 2985, 2985, 2992, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2993, 2985, 2985, 2985, 2993, 2994, 2985, 2985, - 2985, 2994, 2995, 2985, 2985, 2985, 2985, 2995, 2996, 2985, - 2985, 2985, 2996, 2997, 2985, 2998, 2985, 2997, 2997, 2991, - 2991, 2985, 2999, 2992, 2999, 2992, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2987, 1, 2988, 2988, 2989, 2989, 2990, 2990, 2991, 2991, + 2992, 2992, 2987, 2993, 2987, 2987, 2987, 2987, 2994, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2995, 2987, 2987, 2987, 2995, 2996, 2987, 2987, + 2987, 2996, 2997, 2987, 2987, 2987, 2987, 2997, 2998, 2987, + 2987, 2987, 2998, 2999, 2987, 3000, 2987, 2999, 2999, 2993, + 2993, 2987, 3001, 2994, 3001, 2994, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2993, 2993, 2994, 2994, 2995, 2995, 2985, 2996, 2996, 2997, - 2997, 2998, 2998, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2995, 2995, 2996, 2996, 2997, 2997, 2987, 2998, 2998, 2999, + 2999, 3000, 3000, 2999, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2999, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2999, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2997, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2999, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2985, 2985, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2999, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2987, 2987, 2993, 2987, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2999, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2997, 2991, + 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2999, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2987, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, 2991, - 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2987, 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2987, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, + 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2991, 2985, 2991, 2985, 2991, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2987, 2987, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2987, 2987, 2993, 2987, 2993, 2987, 2993, 2993, 2987, 2987, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2987, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2987, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2985, 2985, 2985, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2987, 2987, 2987, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2987, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2985, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2987, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2987, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2985, - 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2985, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985, + 2993, 2987, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2987, 2987, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2987, 2987, 2993, 2993, 2993, 2993, 2987, + 2993, 2987, 2993, 2987, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2987, 2993, 2987, 2993, 2987, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 2993, 2987, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2987, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2987, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2987, 2987, 2993, 2987, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2987, 2987, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, - 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2985, 2985, 2985, - 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, - 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2985, 2991, 2985, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2987, 2987, 2993, 2993, 2987, 2987, 2993, 2993, 2993, 2987, + 2987, 2987, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2987, 2987, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2987, 2993, 2987, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2987, 2993, 2993, 2993, 2993, 2993, 2987, 2993, - 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2985, 2985, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, - 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2985, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2987, 2987, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, + 2993, 2987, 2993, 2987, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2987, 2993, + 2993, 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, - 2991, 2991, 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, - 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2991, 2991, 2991, - 2991, 2991, 2985, 2985, 0, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985 + 2987, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, + 2993, 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2987, 2993, + 2993, 2993, 2993, 2993, 2987, 2993, 2993, 2993, 2993, 2993, + 2993, 2987, 2993, 2993, 2993, 2987, 2993, 2987, 2987, 2993, + 2993, 2993, 2993, 2993, 2987, 2987, 0, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987 } ; -static const flex_int16_t yy_nxt[5854] = +static const flex_int16_t yy_nxt[5862] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1663,395 +1665,396 @@ static const flex_int16_t yy_nxt[5854] = 71, 71, 1263, 1256, 71, 1268, 71, 71, 71, 1257, 1264, 1266, 1267, 1258, 71, 1270, 71, 71, 71, 1271, 71, 1272, 71, 71, 71, 71, 1280, 1281, 1277, 1269, - 71, 1275, 71, 71, 71, 1282, 1274, 1273, 1278, 71, - 1276, 71, 1290, 1279, 71, 1283, 71, 1289, 1284, 71, - 71, 71, 1294, 1285, 1292, 1286, 71, 1287, 1296, 1288, - 1291, 71, 71, 1297, 71, 1295, 1293, 1299, 71, 71, - 71, 71, 71, 1305, 71, 1306, 71, 71, 1301, 71, + 71, 1275, 71, 71, 147, 1282, 1274, 1273, 1278, 71, + 1276, 71, 71, 1279, 71, 1283, 71, 1289, 1284, 1290, + 1291, 71, 71, 1285, 71, 1286, 71, 1287, 1293, 1288, + 1295, 71, 1292, 1297, 71, 71, 1299, 71, 1298, 71, + 1296, 1294, 1300, 71, 1302, 71, 71, 1306, 1301, 71, - 71, 71, 1300, 1298, 1307, 1309, 1304, 71, 71, 1302, - 1303, 1308, 71, 71, 71, 1310, 1311, 71, 1314, 1315, - 71, 1317, 71, 71, 71, 1318, 1312, 1319, 71, 1316, - 71, 1323, 71, 1320, 71, 71, 1321, 1313, 71, 1322, - 1325, 71, 71, 1326, 71, 1330, 71, 71, 71, 1327, - 71, 1332, 71, 71, 1324, 71, 1328, 1334, 71, 1329, - 1336, 71, 1335, 71, 1338, 71, 71, 1331, 71, 71, - 1333, 1340, 71, 1337, 1341, 71, 1342, 1343, 1339, 71, - 1344, 71, 1345, 1347, 1346, 71, 71, 71, 1351, 1352, - 1354, 1348, 71, 1349, 71, 71, 71, 1353, 71, 71, + 1307, 71, 71, 71, 71, 71, 71, 71, 71, 1308, + 1305, 1310, 1303, 71, 1304, 71, 1309, 1312, 1311, 71, + 1315, 1316, 71, 1313, 1318, 71, 71, 71, 1317, 1319, + 71, 1321, 1314, 1320, 71, 1324, 71, 71, 1322, 1326, + 71, 71, 1327, 1323, 71, 71, 71, 1331, 71, 1328, + 71, 71, 71, 71, 1333, 71, 71, 1325, 1335, 71, + 71, 1337, 71, 1339, 1336, 71, 1329, 1330, 71, 71, + 1332, 71, 1334, 1341, 1338, 71, 1342, 1340, 1351, 71, + 71, 71, 1346, 1343, 1344, 1345, 71, 1348, 71, 71, + 71, 1347, 1352, 1353, 1349, 1354, 1350, 1355, 71, 71, - 1350, 71, 1358, 71, 71, 71, 71, 1355, 1362, 1363, - 71, 1365, 1357, 71, 71, 71, 1364, 71, 1356, 71, - 71, 71, 71, 71, 1359, 1360, 71, 1366, 71, 1361, - 71, 1372, 1369, 1367, 71, 1370, 71, 1377, 71, 1368, - 1371, 1376, 71, 1373, 71, 147, 1375, 1379, 1381, 71, - 71, 1374, 71, 1382, 71, 71, 71, 1378, 71, 1384, - 1385, 71, 71, 1380, 1392, 71, 1394, 1383, 71, 1386, - 71, 1387, 71, 1388, 71, 1390, 1389, 71, 1391, 1393, - 1397, 1395, 71, 71, 71, 1396, 71, 71, 1400, 71, - 71, 1402, 71, 71, 1398, 71, 1407, 1408, 71, 71, + 71, 71, 71, 71, 1359, 71, 71, 71, 71, 1356, + 1363, 1364, 71, 1358, 71, 1366, 71, 71, 1365, 71, + 1357, 71, 71, 71, 71, 71, 1360, 1361, 1367, 71, + 1373, 1362, 71, 71, 1368, 1370, 1371, 71, 71, 1369, + 1378, 71, 1372, 1377, 71, 1374, 71, 1382, 71, 1380, + 71, 1376, 1383, 71, 71, 71, 71, 1375, 71, 1385, + 1379, 71, 1386, 1393, 71, 1381, 1384, 71, 1395, 1387, + 71, 1388, 1391, 1389, 71, 1392, 1390, 71, 1394, 71, + 71, 1396, 71, 71, 71, 71, 71, 71, 1401, 1398, + 1397, 1403, 71, 71, 71, 1408, 71, 71, 1412, 71, - 1399, 71, 1401, 1404, 71, 1411, 71, 1403, 1405, 71, - 1406, 71, 71, 1412, 71, 71, 1409, 71, 1410, 71, - 1414, 71, 1418, 1413, 1415, 71, 1419, 1416, 71, 71, - 1420, 71, 1423, 1417, 71, 1428, 1426, 1422, 71, 1421, - 1425, 71, 1429, 1427, 1424, 71, 1430, 71, 71, 71, - 1431, 1432, 71, 71, 71, 71, 1434, 1433, 71, 71, - 71, 1439, 71, 71, 71, 71, 1438, 71, 71, 1436, - 1442, 1441, 1435, 1437, 1445, 71, 71, 1450, 1443, 1446, - 71, 71, 1440, 1447, 71, 71, 1444, 1451, 1448, 71, - 1454, 71, 71, 1453, 71, 1449, 71, 1458, 71, 1459, + 1400, 1405, 1402, 1409, 71, 1404, 1399, 71, 71, 71, + 1406, 1407, 71, 71, 1410, 71, 1411, 71, 71, 1413, + 71, 71, 1419, 1415, 71, 1420, 1421, 1414, 1416, 71, + 1417, 1418, 71, 1423, 71, 1424, 71, 1429, 1422, 146, + 71, 1430, 1426, 71, 1425, 1428, 71, 71, 71, 1431, + 71, 1432, 71, 1427, 1433, 71, 1434, 71, 71, 71, + 71, 71, 1440, 71, 1436, 71, 1435, 1439, 71, 71, + 71, 1446, 1437, 1442, 1438, 1443, 1447, 71, 71, 1448, + 71, 1451, 1444, 1441, 1449, 71, 71, 71, 1445, 71, + 71, 71, 71, 71, 1455, 1459, 71, 71, 1450, 1454, - 1452, 1461, 71, 71, 71, 71, 71, 71, 71, 1464, - 1455, 1463, 1456, 71, 1457, 71, 71, 71, 71, 71, - 1472, 1462, 71, 1465, 1460, 1466, 71, 1467, 71, 1473, - 1469, 71, 1468, 1471, 1474, 1475, 71, 71, 1470, 71, - 1479, 1478, 1476, 1477, 71, 71, 71, 1481, 71, 71, - 71, 1482, 71, 1484, 1488, 71, 1490, 1480, 71, 71, - 71, 1485, 71, 1489, 1483, 1493, 1487, 1491, 71, 1486, - 71, 71, 1492, 71, 1494, 1495, 71, 1499, 1500, 71, - 71, 71, 71, 71, 71, 1504, 1505, 1503, 1496, 71, - 71, 1497, 71, 1507, 71, 71, 1498, 71, 1501, 71, + 71, 71, 1460, 1462, 71, 1452, 1453, 71, 1465, 71, + 1456, 1458, 1457, 1464, 71, 71, 71, 71, 71, 1463, + 71, 71, 1461, 1466, 71, 71, 1473, 71, 1476, 71, + 1474, 71, 1470, 1475, 1467, 1468, 1469, 1477, 71, 1472, + 71, 1471, 71, 71, 1480, 1478, 1479, 71, 71, 71, + 1483, 71, 1481, 71, 1484, 71, 1486, 1490, 71, 1492, + 1482, 71, 71, 71, 1487, 71, 1491, 1485, 71, 71, + 71, 1489, 1496, 1488, 1495, 71, 1494, 1493, 71, 1497, + 71, 1501, 1502, 71, 71, 71, 71, 71, 71, 1506, + 1498, 1505, 1507, 71, 1509, 71, 1499, 71, 71, 71, - 1508, 71, 1502, 1509, 71, 71, 1510, 71, 1512, 1506, - 1514, 1511, 71, 1515, 71, 71, 71, 71, 71, 1513, - 71, 1519, 1516, 71, 1521, 71, 71, 1525, 71, 71, - 71, 1520, 71, 71, 1518, 1517, 1522, 1528, 1530, 71, - 1523, 71, 1526, 71, 1533, 1524, 71, 1527, 1529, 71, - 1531, 71, 1534, 71, 71, 1536, 1539, 71, 71, 1538, - 1535, 1532, 71, 71, 71, 71, 71, 1546, 71, 71, - 71, 71, 1537, 1547, 71, 71, 1540, 1541, 1544, 1550, - 1551, 1542, 1543, 71, 71, 1553, 71, 71, 71, 1548, - 1545, 1549, 1554, 1555, 1552, 1557, 1559, 71, 71, 71, + 1500, 71, 1503, 71, 1510, 71, 1504, 1511, 71, 71, + 71, 1517, 1514, 1508, 1516, 1512, 71, 1515, 71, 1513, + 71, 71, 71, 71, 1523, 1521, 71, 71, 71, 71, + 1527, 1518, 71, 71, 71, 71, 1522, 71, 71, 1519, + 1520, 1533, 1525, 1530, 1524, 71, 1528, 1532, 71, 1531, + 71, 1529, 71, 1526, 71, 1534, 71, 1535, 1538, 71, + 71, 1537, 1541, 71, 1540, 71, 71, 1536, 71, 71, + 71, 1539, 71, 1548, 71, 1549, 71, 71, 1542, 1543, + 71, 71, 1546, 1552, 71, 1544, 1545, 71, 71, 1553, + 1555, 71, 1556, 1557, 1547, 71, 1550, 1551, 1559, 71, - 1558, 71, 71, 1562, 1556, 71, 71, 1560, 1561, 71, - 1564, 71, 1565, 71, 71, 71, 71, 1569, 71, 1570, - 1566, 71, 71, 71, 71, 1584, 1581, 1576, 1571, 1563, - 1568, 1567, 71, 71, 71, 1573, 71, 71, 1574, 1577, - 1582, 1572, 1579, 71, 71, 1578, 71, 1580, 1583, 1586, - 1575, 71, 1585, 71, 71, 71, 71, 1588, 1587, 71, - 71, 1593, 1594, 1592, 71, 1596, 71, 71, 71, 1595, - 71, 71, 1589, 71, 71, 1590, 1599, 71, 1598, 1591, - 71, 71, 71, 71, 1608, 1600, 71, 71, 1601, 1597, - 71, 71, 71, 71, 1602, 71, 1604, 1605, 1606, 71, + 1554, 1558, 1561, 71, 71, 1560, 71, 71, 71, 71, + 1566, 71, 1563, 1564, 1562, 71, 1567, 71, 71, 71, + 71, 1572, 1571, 71, 71, 1568, 71, 71, 1578, 1575, + 71, 1565, 1576, 1570, 71, 1569, 1573, 71, 71, 1580, + 71, 1583, 1579, 1574, 1577, 1581, 71, 1584, 71, 1586, + 1588, 1585, 1582, 71, 71, 1587, 71, 71, 71, 71, + 71, 71, 1589, 71, 1595, 71, 1594, 1596, 71, 71, + 71, 1590, 1598, 71, 1597, 71, 71, 1591, 71, 1592, + 1600, 1593, 1601, 71, 71, 71, 1603, 71, 1599, 1602, + 71, 71, 1610, 71, 71, 71, 1604, 71, 71, 71, - 1607, 1603, 1613, 71, 71, 71, 1616, 1611, 71, 1615, - 71, 1609, 1610, 71, 71, 71, 1612, 71, 71, 1614, - 71, 71, 71, 1617, 1618, 1623, 1621, 71, 1631, 71, - 1622, 1624, 1620, 71, 1625, 71, 1626, 1619, 1630, 1632, - 71, 71, 1627, 1636, 71, 1633, 1629, 1628, 71, 71, - 71, 1635, 71, 71, 71, 71, 71, 1639, 1640, 1634, - 71, 71, 1637, 71, 71, 1643, 1649, 71, 1648, 1638, - 1647, 1642, 1645, 1641, 71, 1646, 71, 71, 71, 1644, - 71, 71, 71, 71, 1650, 71, 1658, 71, 71, 1651, - 71, 1662, 1653, 1655, 71, 1652, 1654, 1660, 71, 1661, + 71, 1606, 71, 1608, 1607, 1605, 1609, 1615, 71, 71, + 1618, 1613, 71, 71, 1611, 1612, 71, 1617, 71, 71, + 1614, 71, 1616, 71, 1621, 71, 71, 71, 1619, 71, + 1620, 71, 1623, 1625, 1624, 144, 1622, 1628, 1626, 71, + 1629, 1627, 1632, 1633, 71, 1630, 1634, 71, 71, 1636, + 71, 71, 1631, 1637, 1638, 71, 71, 71, 71, 71, + 1635, 71, 1641, 1642, 1639, 71, 71, 71, 1651, 71, + 71, 71, 71, 71, 1645, 1640, 1647, 1644, 1643, 1648, + 1649, 1650, 71, 71, 71, 1646, 1653, 71, 1656, 71, + 1652, 71, 71, 1660, 71, 71, 1657, 1655, 71, 71, - 71, 1657, 71, 1659, 71, 1663, 71, 1656, 1669, 1664, - 71, 71, 1665, 1670, 71, 1675, 1666, 71, 146, 71, - 1671, 71, 1668, 1667, 1674, 1672, 1677, 71, 1678, 71, - 71, 71, 1680, 1673, 71, 1676, 1679, 71, 71, 1684, - 71, 71, 1688, 1681, 1683, 71, 71, 71, 71, 1682, - 1686, 71, 71, 1685, 1689, 71, 1687, 71, 71, 71, - 1690, 1693, 71, 1692, 71, 1698, 71, 1700, 1701, 71, - 1691, 1694, 1695, 71, 71, 71, 1696, 1703, 1697, 71, - 1707, 71, 1702, 71, 71, 71, 71, 1699, 1711, 71, - 71, 71, 71, 1704, 1706, 1713, 71, 1714, 1705, 71, + 1654, 71, 1664, 1663, 1662, 71, 71, 71, 1666, 1659, + 1661, 1667, 1671, 71, 1658, 71, 1665, 1672, 71, 71, + 71, 71, 142, 1668, 1677, 1670, 1676, 1669, 1674, 1673, + 71, 1679, 71, 1680, 71, 71, 1682, 71, 1678, 71, + 1681, 1675, 71, 1683, 71, 1686, 71, 71, 71, 1690, + 1688, 71, 71, 71, 1684, 71, 1689, 71, 1685, 1687, + 1691, 71, 71, 71, 71, 1694, 71, 1692, 1700, 71, + 1695, 1702, 1693, 1703, 71, 1696, 1697, 71, 1698, 71, + 1699, 71, 71, 71, 71, 1709, 71, 1704, 71, 71, + 1701, 71, 1713, 71, 71, 71, 71, 1708, 71, 1715, - 1709, 1715, 71, 1710, 1716, 1708, 71, 71, 1720, 71, - 1712, 1717, 71, 71, 71, 1724, 71, 71, 71, 71, - 71, 71, 1719, 71, 1726, 1722, 71, 71, 1731, 1718, - 71, 1721, 1725, 1723, 71, 1727, 1739, 1733, 1728, 1729, - 71, 1730, 1732, 1735, 71, 71, 1734, 71, 1736, 1737, - 71, 1740, 1738, 1741, 71, 71, 71, 71, 1743, 71, - 71, 71, 1744, 71, 71, 71, 71, 1742, 71, 71, - 1749, 71, 71, 1753, 71, 1750, 71, 71, 1754, 1759, - 1745, 1747, 1748, 1746, 1751, 71, 1752, 1758, 71, 71, - 71, 1755, 1757, 71, 1756, 71, 71, 1760, 1764, 71, + 1706, 1705, 1707, 1716, 1711, 71, 71, 1712, 1710, 71, + 1717, 1718, 71, 71, 1714, 1722, 71, 71, 1719, 1720, + 71, 1726, 71, 71, 71, 71, 71, 1721, 71, 1724, + 71, 1728, 1723, 71, 71, 1733, 71, 1727, 1729, 1725, + 1730, 71, 1736, 71, 1731, 1734, 1737, 71, 71, 71, + 1732, 1738, 1735, 1739, 71, 71, 1742, 71, 1741, 71, + 1740, 1745, 71, 1743, 71, 71, 71, 71, 1746, 1744, + 71, 71, 71, 71, 71, 71, 1751, 71, 71, 1755, + 71, 71, 1752, 71, 71, 1761, 1747, 1753, 1749, 1748, + 1750, 71, 1754, 1756, 71, 1759, 1760, 71, 1758, 1764, - 1767, 1768, 71, 1769, 71, 71, 1762, 71, 1761, 1765, - 71, 1766, 71, 1763, 1771, 71, 71, 1772, 1775, 71, - 71, 1777, 71, 71, 1776, 1770, 1778, 71, 1773, 1779, - 1780, 1774, 1781, 71, 71, 71, 1783, 1786, 71, 1784, - 71, 71, 1785, 71, 71, 71, 1793, 1782, 71, 71, - 71, 1798, 71, 71, 1791, 1795, 1787, 1788, 1789, 71, - 1796, 71, 71, 1790, 1797, 1792, 1801, 71, 1794, 71, - 1799, 71, 71, 1803, 1805, 71, 1802, 1800, 71, 1807, - 71, 71, 71, 1810, 1811, 71, 71, 1813, 71, 71, - 1804, 71, 71, 71, 1819, 71, 71, 1806, 1818, 71, + 71, 71, 1762, 1766, 71, 71, 1757, 71, 1769, 1770, + 71, 1771, 71, 1763, 1773, 71, 71, 1774, 71, 1767, + 1765, 1768, 71, 71, 1772, 1777, 71, 1778, 1779, 71, + 1781, 71, 1780, 71, 71, 1783, 71, 71, 71, 1775, + 1785, 71, 1788, 1776, 1786, 71, 71, 1787, 71, 1782, + 1789, 1790, 1791, 71, 71, 1795, 71, 1792, 1784, 1797, + 71, 71, 1800, 71, 1798, 71, 71, 71, 71, 1803, + 71, 71, 71, 1793, 1794, 71, 1796, 1799, 1801, 1804, + 71, 1802, 1807, 71, 71, 1809, 71, 71, 1805, 71, + 1812, 71, 1806, 1813, 71, 1815, 71, 71, 1808, 71, - 1808, 1815, 1816, 1809, 71, 71, 1812, 71, 71, 71, - 1825, 71, 1817, 71, 1814, 1822, 1823, 1820, 71, 71, - 1821, 1829, 1832, 1828, 71, 1824, 1833, 71, 71, 1827, - 71, 1831, 71, 1834, 71, 1835, 71, 1826, 71, 1830, - 71, 71, 71, 71, 71, 1836, 1840, 71, 1843, 1844, - 71, 71, 71, 1839, 71, 71, 1847, 71, 1837, 1838, - 1841, 71, 1852, 71, 71, 1846, 1851, 71, 71, 71, - 1842, 1845, 1848, 1856, 1849, 71, 71, 1859, 71, 1850, - 71, 1857, 1854, 1853, 1860, 1858, 71, 1855, 1863, 71, - 71, 71, 1870, 71, 71, 71, 71, 1861, 71, 1867, + 1810, 71, 71, 1820, 1821, 71, 1817, 1814, 1811, 71, + 1818, 71, 71, 71, 71, 71, 1816, 71, 1827, 1824, + 1819, 71, 1825, 1822, 71, 1831, 1823, 71, 71, 1830, + 1834, 71, 1835, 1836, 71, 1833, 71, 1829, 71, 71, + 1826, 1828, 71, 71, 1837, 71, 71, 1832, 71, 71, + 71, 1838, 1842, 71, 1845, 1846, 71, 71, 1841, 71, + 71, 71, 71, 1839, 1840, 71, 1843, 1853, 71, 1849, + 71, 1848, 1854, 71, 71, 71, 1844, 1847, 2987, 1851, + 71, 71, 1852, 71, 1858, 1850, 71, 1855, 71, 1856, + 1860, 1866, 1859, 71, 1857, 1861, 71, 1862, 71, 1863, - 71, 71, 1862, 71, 1875, 1865, 1872, 1873, 71, 71, - 1874, 1864, 1866, 71, 71, 1868, 1869, 71, 1871, 1880, - 71, 1882, 1876, 1881, 71, 1877, 1883, 71, 1884, 1885, - 1878, 71, 71, 71, 71, 71, 1889, 1879, 1887, 71, - 71, 71, 71, 71, 1888, 1891, 71, 1894, 71, 1896, - 71, 1890, 1892, 71, 71, 71, 71, 1886, 1897, 71, - 71, 1900, 1898, 1901, 71, 1902, 1903, 71, 1893, 1906, - 1895, 1904, 71, 1899, 71, 71, 71, 71, 71, 1905, - 1907, 1908, 71, 1909, 71, 1912, 71, 1910, 71, 1911, - 71, 1914, 71, 71, 71, 1918, 71, 71, 1913, 1917, + 1865, 71, 1868, 71, 1864, 71, 71, 1872, 1869, 71, + 71, 71, 1867, 71, 71, 1874, 1875, 71, 71, 1876, + 1878, 71, 71, 71, 1873, 1870, 1871, 1877, 1882, 71, + 1883, 71, 1879, 1884, 1881, 1886, 1887, 1880, 1885, 71, + 71, 71, 71, 71, 1891, 1889, 71, 71, 1888, 71, + 71, 1893, 71, 1896, 71, 1890, 1898, 71, 1892, 71, + 71, 1894, 71, 71, 71, 71, 71, 1903, 71, 1899, + 1902, 1914, 1900, 71, 1904, 2987, 1897, 1895, 1905, 71, + 1906, 71, 1901, 1908, 71, 71, 1907, 71, 71, 71, + 1909, 1911, 1910, 71, 71, 71, 1916, 1912, 1913, 71, - 1915, 71, 1919, 71, 1916, 71, 1920, 71, 1921, 1922, - 71, 71, 71, 71, 1924, 1929, 1927, 1923, 1928, 71, - 71, 71, 71, 1931, 71, 1925, 71, 71, 1935, 71, - 1926, 71, 71, 1930, 1932, 1934, 1937, 1939, 1933, 71, - 1936, 1941, 71, 71, 71, 71, 1942, 71, 1947, 71, - 1938, 71, 1940, 71, 71, 71, 1949, 71, 71, 1950, - 1943, 1944, 1945, 1946, 1951, 71, 1952, 71, 1948, 71, - 1955, 71, 71, 1954, 1953, 71, 71, 71, 71, 71, - 1956, 71, 71, 71, 71, 1967, 71, 1958, 1959, 1960, - 1963, 71, 71, 1957, 1962, 1966, 71, 1971, 71, 1970, + 71, 71, 71, 1920, 71, 71, 1915, 1919, 71, 71, + 1921, 1917, 1918, 1922, 1923, 1924, 71, 71, 71, 71, + 71, 71, 71, 1931, 1929, 1925, 1926, 1930, 71, 71, + 71, 1933, 71, 71, 1937, 1932, 1927, 71, 1928, 71, + 71, 1936, 1934, 71, 71, 71, 1935, 1944, 1938, 1939, + 1941, 1943, 71, 71, 71, 2987, 1942, 71, 1949, 71, + 71, 1940, 71, 1951, 71, 71, 71, 1952, 71, 1945, + 1946, 71, 1947, 1948, 1953, 71, 1954, 1950, 1955, 71, + 1957, 71, 71, 71, 71, 71, 1956, 71, 71, 71, + 1958, 71, 71, 71, 1965, 1960, 1961, 1962, 1969, 71, - 1968, 1965, 71, 1964, 1961, 71, 71, 1973, 1974, 71, - 71, 1969, 71, 71, 1976, 71, 71, 1977, 1972, 71, - 71, 1978, 1982, 1975, 1980, 71, 71, 1984, 1981, 1986, - 71, 1979, 71, 71, 71, 1989, 71, 71, 1983, 1988, - 1985, 1990, 1991, 71, 71, 1994, 71, 71, 71, 71, - 71, 71, 1995, 71, 2000, 71, 1997, 71, 1987, 1996, - 2004, 1992, 71, 2001, 1993, 2002, 71, 1999, 1998, 71, - 71, 71, 2006, 71, 2005, 2009, 71, 2003, 71, 2007, - 71, 2011, 71, 2012, 71, 2010, 71, 2008, 71, 71, - 71, 2014, 2018, 2013, 71, 71, 2015, 2016, 2020, 71, + 71, 71, 2987, 1959, 1964, 1968, 71, 1966, 71, 1972, + 1970, 1967, 71, 1963, 71, 71, 71, 1973, 1976, 1975, + 1971, 1974, 71, 71, 1980, 71, 1977, 1978, 71, 71, + 1979, 71, 71, 1984, 71, 71, 1986, 1982, 1988, 71, + 71, 1983, 71, 1981, 71, 71, 1991, 1990, 71, 1987, + 1992, 1985, 71, 1993, 71, 1996, 71, 71, 71, 71, + 71, 71, 1997, 71, 71, 71, 1989, 1999, 2064, 1998, + 1994, 2002, 71, 2006, 1995, 71, 2003, 2000, 2001, 71, + 2004, 71, 71, 2005, 2008, 71, 2007, 2011, 71, 71, + 71, 71, 2013, 2009, 71, 2014, 71, 71, 2015, 71, - 2017, 71, 71, 2021, 71, 71, 2023, 2024, 2022, 71, - 2019, 71, 71, 71, 2025, 2027, 2026, 2030, 71, 71, - 71, 2028, 2029, 2031, 71, 71, 71, 71, 71, 71, - 2032, 71, 71, 2039, 2034, 2033, 2040, 2036, 2037, 2035, - 71, 2041, 71, 71, 71, 71, 2042, 2038, 2044, 2050, - 71, 71, 2045, 71, 71, 2052, 71, 71, 2046, 2043, - 2049, 2054, 2047, 2051, 71, 71, 71, 144, 2057, 2055, - 2048, 2059, 2053, 2058, 71, 2060, 71, 71, 2056, 2061, - 71, 71, 2064, 71, 71, 2065, 2063, 71, 2062, 2069, - 71, 71, 2070, 71, 71, 2073, 2068, 71, 71, 2066, + 71, 2010, 2012, 71, 2016, 2020, 2018, 2022, 71, 2019, + 71, 71, 2023, 71, 2017, 71, 71, 2024, 71, 71, + 2027, 2021, 2025, 2026, 2028, 71, 2032, 71, 71, 2029, + 71, 71, 71, 71, 2031, 71, 71, 71, 2030, 71, + 71, 2052, 71, 71, 2038, 2039, 2033, 2035, 2034, 2036, + 71, 2037, 2043, 71, 71, 2041, 71, 2040, 2042, 71, + 2044, 71, 2046, 2047, 2050, 71, 71, 71, 2054, 71, + 2987, 71, 71, 2045, 2048, 2051, 2053, 71, 71, 2049, + 2061, 2056, 2059, 2057, 2055, 2058, 71, 2060, 71, 2062, + 71, 2065, 71, 2063, 71, 71, 2066, 71, 71, 2067, - 71, 71, 2074, 71, 2075, 2071, 2076, 71, 71, 2078, - 2067, 71, 2072, 2077, 71, 71, 2083, 71, 2079, 71, - 2080, 2081, 71, 2082, 71, 71, 2089, 71, 71, 2086, - 71, 71, 71, 71, 2090, 71, 71, 2085, 2092, 71, - 71, 71, 2084, 2087, 2088, 2096, 2091, 2094, 2099, 71, - 71, 71, 2097, 71, 71, 2095, 71, 71, 2093, 2098, - 71, 2100, 71, 71, 71, 2110, 71, 142, 71, 2101, - 2102, 2111, 71, 71, 2107, 71, 2105, 2103, 71, 2109, - 2104, 2106, 71, 2115, 2108, 2112, 71, 2113, 2114, 2116, - 71, 2117, 71, 2118, 71, 2120, 71, 2123, 71, 2119, + 71, 2070, 2071, 71, 71, 2072, 2073, 71, 2075, 71, + 2077, 71, 2076, 2068, 71, 2078, 71, 71, 2074, 2080, + 71, 71, 2079, 71, 2069, 71, 71, 2081, 71, 71, + 2083, 2082, 71, 2085, 2088, 71, 71, 2091, 71, 71, + 71, 71, 71, 2092, 2086, 2084, 2094, 2087, 71, 71, + 71, 71, 2090, 2089, 2098, 2093, 71, 2101, 71, 71, + 2096, 71, 71, 71, 2099, 71, 71, 2102, 2095, 2097, + 71, 71, 71, 71, 2100, 2112, 71, 71, 71, 71, + 2103, 2104, 2113, 2109, 71, 2107, 2105, 71, 2111, 2106, + 2114, 2108, 2115, 2110, 71, 2117, 71, 2116, 2118, 71, - 71, 71, 71, 71, 71, 2121, 2124, 2125, 2122, 2129, - 71, 2130, 71, 71, 2132, 71, 2128, 71, 2134, 71, - 2126, 71, 71, 2127, 2137, 71, 71, 2136, 2138, 71, - 71, 71, 2131, 71, 71, 2133, 2135, 71, 71, 2140, - 2139, 71, 2143, 2144, 71, 2141, 2146, 71, 71, 71, - 2150, 71, 2142, 2145, 2148, 71, 2147, 71, 2149, 2152, - 71, 71, 2156, 71, 71, 2151, 71, 71, 71, 71, - 2153, 71, 2154, 2160, 2161, 71, 71, 2165, 71, 71, - 2155, 71, 2159, 71, 2157, 71, 2163, 2162, 2167, 2158, - 71, 2164, 71, 71, 2172, 71, 71, 2168, 2174, 2166, + 2119, 71, 2120, 71, 2122, 71, 2125, 71, 71, 2121, + 71, 71, 71, 2126, 2123, 2127, 71, 2124, 2131, 71, + 2132, 71, 71, 2134, 71, 71, 2136, 71, 2130, 71, + 71, 2128, 2129, 2139, 71, 2138, 2140, 71, 71, 71, + 71, 2133, 71, 2135, 2137, 71, 2146, 71, 2142, 71, + 2145, 71, 2141, 71, 2143, 2148, 71, 71, 71, 2150, + 2151, 2144, 71, 2152, 2154, 71, 71, 71, 2147, 2149, + 2158, 71, 71, 71, 71, 71, 71, 2155, 2153, 2162, + 71, 2156, 2163, 71, 71, 71, 2157, 2167, 71, 2161, + 71, 71, 2159, 71, 2170, 2164, 2160, 71, 2169, 2165, - 71, 71, 71, 2169, 2173, 2175, 2179, 71, 2170, 71, - 71, 71, 2178, 71, 2180, 71, 2184, 71, 2171, 71, - 2176, 71, 2177, 2182, 2186, 71, 2187, 2189, 71, 2191, - 71, 71, 2181, 71, 2183, 71, 2192, 71, 2190, 71, - 2188, 2185, 2193, 2195, 71, 71, 71, 2196, 2197, 71, - 71, 2202, 71, 2194, 2198, 2199, 2203, 71, 2200, 71, - 71, 2208, 71, 2204, 2201, 71, 2207, 71, 71, 2206, - 71, 2209, 2205, 71, 71, 71, 2215, 71, 71, 2210, - 71, 71, 71, 2217, 71, 71, 2226, 71, 2211, 2213, - 2212, 2214, 2218, 2216, 2221, 71, 71, 2219, 2222, 2220, + 2166, 71, 71, 2174, 71, 71, 71, 2176, 71, 2177, + 2168, 2171, 71, 2175, 71, 2172, 71, 2181, 71, 2182, + 2180, 71, 71, 71, 2178, 71, 2179, 2173, 2186, 71, + 2188, 2184, 71, 2191, 2189, 71, 71, 2193, 71, 71, + 71, 2183, 2185, 71, 71, 2194, 71, 2190, 2187, 2195, + 71, 2197, 71, 2198, 71, 2199, 2192, 71, 71, 71, + 2987, 2196, 2204, 2200, 2205, 71, 2201, 2202, 71, 2206, + 71, 71, 2207, 2203, 71, 2209, 2210, 71, 2211, 71, + 2208, 71, 71, 71, 71, 71, 2212, 2217, 71, 71, + 71, 71, 71, 71, 2219, 71, 2224, 2215, 2218, 2213, - 71, 2223, 71, 2227, 71, 2224, 2228, 71, 71, 2230, - 2231, 2229, 2225, 2232, 2233, 71, 71, 71, 71, 71, - 71, 2235, 71, 71, 71, 2239, 71, 71, 71, 2241, - 2236, 2234, 2240, 2242, 71, 71, 2237, 71, 71, 71, - 2243, 71, 2238, 2246, 2247, 71, 2244, 2245, 71, 71, - 71, 2248, 71, 2249, 71, 71, 2253, 2256, 71, 71, - 2255, 2250, 71, 71, 2252, 2257, 71, 2261, 71, 2251, - 2263, 2260, 71, 71, 2254, 71, 2258, 71, 2259, 2985, - 2262, 71, 2265, 71, 71, 2268, 2266, 71, 2270, 2264, - 71, 2269, 2272, 71, 71, 71, 2274, 71, 71, 71, + 2216, 2214, 2220, 71, 2223, 2221, 2222, 71, 2225, 2228, + 71, 71, 2229, 2230, 71, 2226, 71, 71, 2233, 2227, + 2231, 2232, 2234, 71, 71, 2235, 71, 71, 71, 71, + 2237, 71, 71, 71, 2241, 71, 71, 2236, 2243, 2238, + 2242, 2244, 71, 71, 71, 2239, 71, 71, 2245, 71, + 71, 2240, 71, 2246, 2248, 2249, 71, 2251, 71, 71, + 2250, 71, 71, 71, 2258, 2255, 2247, 71, 2257, 2252, + 71, 71, 71, 2254, 71, 2263, 71, 2259, 2253, 2262, + 71, 71, 2256, 71, 2264, 2260, 2268, 71, 2261, 2265, + 71, 2267, 71, 71, 2266, 71, 2270, 2271, 2272, 71, - 71, 71, 2271, 2267, 2273, 2278, 71, 71, 71, 71, - 2282, 71, 2280, 2276, 2281, 2284, 2275, 2277, 2283, 71, - 71, 71, 71, 2285, 2286, 71, 71, 71, 2291, 71, - 2288, 71, 2279, 71, 71, 2293, 2296, 71, 71, 2290, - 2292, 71, 2287, 71, 71, 2289, 71, 2299, 71, 2295, - 71, 2294, 2300, 71, 71, 2301, 71, 2297, 2305, 71, - 71, 2298, 2302, 2303, 2304, 71, 71, 71, 2310, 71, - 71, 71, 2309, 2395, 2306, 2311, 2312, 71, 2308, 2307, - 2313, 71, 2314, 71, 2315, 71, 71, 2317, 71, 71, - 2319, 71, 2320, 2318, 71, 71, 71, 71, 2316, 2325, + 2274, 71, 71, 71, 71, 2276, 71, 71, 71, 71, + 71, 2273, 2275, 2286, 2280, 2284, 71, 71, 2269, 71, + 2277, 2278, 2282, 71, 2279, 2285, 71, 71, 2283, 71, + 2287, 71, 71, 71, 71, 71, 2281, 2290, 2293, 71, + 71, 2295, 71, 2288, 2294, 71, 2292, 71, 2298, 71, + 71, 71, 2291, 2289, 71, 2301, 2303, 2297, 2296, 2302, + 71, 71, 71, 71, 2299, 71, 71, 71, 2300, 2307, + 2306, 2305, 71, 71, 71, 71, 71, 2308, 2311, 2304, + 2309, 2313, 2314, 71, 2310, 2315, 71, 2316, 71, 2317, + 71, 71, 71, 2319, 2312, 71, 2321, 2320, 71, 2322, - 71, 71, 2327, 71, 2328, 71, 2321, 2322, 71, 71, - 71, 71, 71, 2324, 71, 71, 2323, 2331, 71, 2329, - 2326, 2330, 71, 2332, 2337, 71, 71, 2334, 71, 71, - 71, 71, 2333, 71, 2335, 2336, 71, 2338, 71, 2344, - 71, 71, 2341, 71, 2339, 2343, 2340, 71, 2346, 2345, - 71, 2347, 71, 2351, 2342, 71, 71, 2355, 71, 2348, - 2353, 2354, 2356, 71, 71, 2349, 2352, 71, 2357, 71, - 2350, 71, 2358, 71, 2359, 71, 71, 71, 71, 71, - 2361, 71, 2360, 71, 71, 71, 2370, 2371, 71, 71, - 2367, 71, 71, 2985, 2362, 2364, 2363, 2374, 71, 2366, + 71, 71, 71, 2318, 71, 2327, 71, 71, 2329, 71, + 2330, 71, 2323, 2324, 71, 71, 71, 71, 71, 71, + 2326, 71, 2325, 2333, 2336, 2331, 2328, 2332, 71, 2334, + 2339, 71, 71, 71, 71, 71, 71, 71, 2335, 71, + 2346, 2337, 2340, 71, 71, 71, 71, 71, 2338, 2343, + 71, 2345, 2347, 71, 2342, 2987, 2353, 71, 2341, 2344, + 2348, 2349, 2350, 71, 71, 71, 2357, 71, 2355, 2351, + 2356, 2354, 71, 2352, 2358, 71, 71, 2359, 71, 2360, + 71, 2361, 2362, 2363, 71, 71, 71, 71, 71, 71, + 71, 71, 2372, 71, 2373, 71, 71, 71, 2369, 2376, - 2365, 2373, 2369, 2368, 71, 2376, 71, 71, 71, 2377, - 71, 2372, 71, 2375, 71, 2379, 71, 71, 2385, 71, - 2386, 71, 71, 2387, 71, 2378, 71, 2380, 2381, 71, - 71, 71, 2382, 2383, 71, 2384, 2391, 71, 71, 2389, - 2388, 71, 2394, 2396, 71, 2390, 71, 71, 2397, 71, - 2392, 2398, 71, 71, 2393, 71, 2400, 2399, 71, 71, - 2401, 2402, 71, 2404, 71, 2409, 71, 2408, 71, 71, - 2412, 71, 71, 2403, 71, 2405, 2413, 71, 2406, 2416, - 71, 2415, 2407, 2410, 71, 71, 71, 2411, 71, 2414, - 2420, 71, 71, 71, 71, 2424, 71, 2417, 2423, 71, + 71, 2378, 71, 2364, 2366, 2365, 2375, 71, 2368, 2367, + 2370, 2371, 71, 71, 71, 71, 2377, 71, 2374, 71, + 71, 2381, 71, 2387, 71, 2388, 71, 71, 2389, 71, + 2379, 2380, 2382, 2383, 71, 71, 2385, 2384, 71, 71, + 71, 2386, 71, 2393, 2391, 2390, 71, 2396, 2397, 2398, + 71, 71, 71, 2399, 2392, 2400, 71, 71, 71, 2394, + 2395, 71, 71, 71, 71, 71, 2402, 71, 2406, 71, + 71, 2401, 2410, 2404, 2411, 71, 71, 2403, 2414, 71, + 71, 71, 2405, 71, 2407, 2409, 2408, 2415, 2413, 71, + 71, 2412, 71, 2417, 2419, 2416, 2418, 71, 2422, 71, - 2421, 2422, 2426, 71, 2427, 2418, 2419, 71, 71, 71, - 2431, 71, 2425, 71, 2432, 71, 2428, 2434, 71, 71, - 71, 2430, 71, 71, 2429, 71, 2439, 71, 2441, 71, - 71, 2437, 2435, 2436, 2438, 2442, 71, 2433, 2440, 71, - 71, 2443, 71, 71, 71, 2445, 71, 71, 71, 71, - 2446, 71, 2449, 2444, 2451, 2448, 2452, 71, 2454, 71, - 2455, 71, 2447, 2450, 71, 71, 71, 71, 2460, 2680, - 2457, 2456, 2453, 71, 71, 71, 2462, 71, 2461, 2465, - 71, 71, 2466, 71, 2458, 2459, 2464, 71, 2468, 71, - 71, 2470, 2463, 2469, 71, 2474, 2471, 71, 71, 2472, + 71, 71, 71, 2426, 71, 71, 2425, 2428, 71, 2424, + 2420, 71, 2421, 2423, 71, 71, 2429, 71, 2433, 71, + 71, 2434, 71, 2430, 2427, 2436, 71, 71, 71, 2432, + 71, 2431, 71, 71, 2441, 71, 2443, 71, 71, 2439, + 2437, 2438, 2440, 2444, 2435, 71, 71, 2442, 71, 71, + 2445, 71, 71, 2447, 71, 71, 71, 2448, 71, 71, + 2446, 2450, 2451, 2453, 2454, 71, 2456, 71, 2457, 71, + 2449, 2452, 71, 71, 71, 71, 2462, 2682, 2459, 2458, + 2455, 71, 71, 71, 2464, 71, 2463, 2467, 71, 71, + 2468, 71, 2460, 2461, 2466, 71, 2470, 71, 71, 2472, - 2467, 71, 71, 2473, 71, 71, 2475, 71, 71, 2476, - 71, 71, 71, 71, 2477, 2480, 2479, 2482, 71, 71, - 71, 2483, 2478, 2481, 2485, 2484, 71, 71, 71, 71, - 71, 2486, 71, 2491, 71, 71, 71, 2489, 2487, 2490, - 2488, 71, 71, 2492, 2496, 71, 71, 71, 2493, 2500, - 71, 2499, 71, 71, 71, 2494, 2498, 71, 2504, 2985, - 2495, 2497, 2505, 71, 2507, 2501, 2508, 2502, 2509, 71, - 71, 71, 71, 2503, 71, 2510, 71, 2511, 71, 71, - 2513, 71, 2506, 2512, 71, 2515, 71, 71, 2518, 2519, - 71, 71, 2514, 2520, 71, 2521, 71, 71, 2516, 71, + 2465, 2471, 71, 2476, 2473, 71, 71, 2474, 2469, 71, + 71, 2475, 71, 71, 2477, 71, 71, 2478, 71, 71, + 71, 71, 2479, 2482, 2481, 2484, 71, 71, 71, 2485, + 2480, 2483, 2487, 2486, 71, 71, 71, 71, 71, 2488, + 71, 2493, 71, 71, 71, 2491, 2489, 2492, 2490, 71, + 71, 2494, 2498, 71, 71, 71, 2495, 2502, 71, 2501, + 71, 71, 71, 2496, 2500, 71, 2506, 2987, 2497, 2499, + 2507, 71, 2509, 2503, 2510, 2504, 2511, 71, 71, 71, + 71, 2505, 71, 2512, 71, 2513, 71, 71, 2515, 71, + 2508, 2514, 71, 2517, 71, 71, 2520, 2521, 71, 71, - 71, 2517, 2523, 2522, 2524, 71, 71, 71, 2528, 71, - 2531, 2525, 2526, 2529, 71, 2532, 71, 71, 2527, 71, - 2530, 2533, 71, 71, 71, 71, 2534, 2538, 71, 71, - 2535, 71, 2539, 2540, 71, 2542, 71, 2536, 71, 71, - 2541, 2546, 2543, 71, 2537, 2547, 71, 71, 71, 2549, - 71, 71, 2548, 2545, 2550, 71, 2544, 71, 2555, 71, - 71, 71, 71, 2554, 71, 2557, 2551, 2558, 71, 71, - 2552, 2553, 71, 71, 2559, 71, 2561, 71, 2563, 71, - 2560, 71, 2568, 71, 2556, 2562, 2566, 71, 2570, 71, - 71, 71, 2576, 71, 2564, 2565, 71, 2567, 2572, 2573, + 2516, 2522, 71, 2523, 71, 71, 2518, 71, 71, 2519, + 2525, 2524, 2526, 71, 71, 71, 2530, 71, 2533, 2527, + 2528, 2531, 71, 2534, 71, 71, 2529, 71, 2532, 2535, + 71, 71, 71, 71, 2536, 2540, 71, 71, 2537, 71, + 2541, 2542, 71, 2544, 71, 2538, 71, 71, 2543, 2548, + 2545, 71, 2539, 2549, 71, 71, 71, 2551, 71, 71, + 2550, 2547, 2552, 71, 2546, 71, 2557, 71, 71, 71, + 71, 2556, 71, 2559, 2553, 2560, 71, 71, 2554, 2555, + 71, 71, 2561, 71, 2563, 71, 2565, 71, 2562, 71, + 2570, 71, 2558, 2564, 2568, 71, 2572, 71, 71, 71, - 71, 2569, 2571, 71, 2574, 71, 71, 2577, 71, 2578, - 2575, 71, 2579, 71, 2580, 71, 2581, 71, 71, 71, - 2582, 2985, 2584, 2583, 2588, 71, 2585, 71, 71, 71, - 2589, 2591, 71, 2593, 71, 71, 2592, 71, 2586, 2587, - 2594, 2595, 71, 71, 71, 71, 2590, 2600, 71, 71, - 71, 71, 2596, 2597, 2598, 2599, 71, 2604, 2602, 71, - 2601, 71, 2605, 71, 2606, 2603, 2608, 71, 2607, 2609, - 71, 2610, 71, 71, 71, 71, 71, 71, 71, 71, - 2619, 2611, 71, 71, 2614, 71, 71, 2617, 2615, 2636, - 2622, 71, 2613, 2985, 2620, 71, 2623, 71, 2612, 2618, + 2578, 71, 2566, 2567, 71, 2569, 2574, 2575, 71, 2571, + 2573, 71, 2576, 71, 71, 2579, 71, 2580, 2577, 71, + 2581, 71, 2582, 71, 2583, 71, 71, 71, 2584, 2987, + 2586, 2585, 2590, 71, 2587, 71, 71, 71, 2591, 2593, + 71, 2595, 71, 71, 2594, 71, 2588, 2589, 2596, 2597, + 71, 71, 71, 71, 2592, 2602, 71, 71, 71, 71, + 2598, 2599, 2600, 2601, 71, 2606, 2604, 71, 2603, 71, + 2607, 71, 2608, 2605, 2610, 71, 2609, 2611, 71, 2612, + 71, 71, 71, 71, 71, 71, 71, 71, 2621, 2613, + 71, 71, 2616, 71, 71, 2619, 2617, 2638, 2624, 71, - 71, 2624, 2616, 71, 2621, 71, 2625, 71, 2626, 71, - 2627, 2629, 71, 2628, 2630, 71, 2631, 71, 71, 71, - 2639, 71, 71, 71, 2635, 2633, 2634, 2632, 2637, 71, - 71, 71, 71, 2644, 2638, 71, 2642, 2646, 71, 71, - 2640, 71, 71, 71, 2650, 71, 71, 71, 71, 71, - 2643, 2641, 2653, 71, 71, 71, 2648, 71, 71, 2651, - 2645, 2647, 2652, 2649, 2654, 2657, 2656, 71, 71, 2655, - 2660, 71, 2658, 2662, 71, 2663, 71, 2661, 2665, 71, - 2659, 71, 71, 71, 71, 71, 2670, 71, 71, 2664, - 2669, 71, 71, 2674, 71, 2676, 71, 2666, 2667, 2668, + 2615, 2987, 2622, 71, 2625, 71, 2614, 2620, 71, 2626, + 2618, 71, 2623, 71, 2627, 71, 2628, 71, 2629, 2631, + 71, 2630, 2632, 71, 2633, 71, 71, 71, 2641, 71, + 71, 71, 2637, 2635, 2636, 2634, 2639, 71, 71, 71, + 71, 2646, 2640, 71, 2644, 2648, 71, 71, 2642, 71, + 71, 71, 2652, 71, 71, 71, 71, 71, 2645, 2643, + 2655, 71, 71, 71, 2650, 71, 71, 2653, 2647, 2649, + 2654, 2651, 2656, 2659, 2658, 71, 71, 2657, 2662, 71, + 2660, 2664, 71, 2665, 71, 2663, 2667, 71, 2661, 71, + 71, 71, 71, 71, 2672, 71, 71, 2666, 2671, 71, - 71, 2678, 2681, 71, 2671, 2682, 71, 71, 2675, 71, - 2673, 2672, 71, 71, 2679, 2684, 71, 71, 71, 2689, - 2677, 71, 71, 71, 2686, 71, 2687, 2693, 71, 71, - 71, 71, 2683, 2694, 2691, 2685, 71, 2695, 2688, 2698, - 2690, 2696, 2701, 2692, 71, 71, 2699, 71, 71, 71, - 71, 2697, 2700, 71, 71, 2703, 71, 2706, 2704, 71, - 2709, 71, 2702, 71, 2710, 71, 2713, 71, 71, 71, - 2714, 71, 71, 2705, 71, 2711, 2707, 2708, 2712, 2715, - 71, 71, 2716, 2718, 71, 2717, 2719, 71, 2720, 71, - 71, 2722, 71, 71, 2724, 2721, 71, 71, 2727, 71, + 71, 2676, 71, 2678, 71, 2668, 2669, 2670, 71, 2680, + 2683, 71, 2673, 2684, 71, 71, 2677, 71, 2675, 2674, + 71, 71, 2681, 2686, 71, 71, 71, 2691, 2679, 71, + 71, 71, 2688, 71, 2689, 2695, 71, 71, 71, 71, + 2685, 2696, 2693, 2687, 71, 2697, 2690, 2700, 2692, 2698, + 2703, 2694, 71, 71, 2701, 71, 71, 71, 71, 2699, + 2702, 71, 71, 2705, 71, 2708, 2706, 71, 2711, 71, + 2704, 71, 2712, 71, 2715, 71, 71, 71, 2716, 71, + 71, 2707, 71, 2713, 2709, 2710, 2714, 2717, 71, 71, + 2718, 2720, 71, 2719, 2721, 71, 2722, 71, 71, 2724, - 2723, 2728, 71, 71, 2733, 71, 2732, 71, 71, 71, - 71, 71, 71, 2729, 2731, 2725, 2783, 2736, 2726, 2737, - 71, 2738, 71, 2730, 71, 71, 2741, 71, 2734, 2739, - 2735, 71, 71, 2744, 71, 2743, 71, 71, 71, 2740, - 71, 2745, 71, 2742, 71, 2748, 71, 71, 71, 71, - 2750, 71, 71, 2985, 2749, 2751, 71, 2746, 2747, 71, - 71, 71, 71, 71, 2765, 2752, 2760, 2756, 2753, 2754, - 2755, 2763, 71, 2757, 2758, 71, 2762, 2764, 71, 2774, - 2759, 71, 2761, 2766, 71, 2767, 71, 2768, 2769, 71, - 71, 2770, 2771, 71, 71, 2772, 2773, 71, 71, 2775, + 71, 71, 2726, 2723, 71, 71, 2729, 71, 2725, 2730, + 71, 71, 2735, 71, 2734, 71, 71, 71, 71, 71, + 71, 2731, 2733, 2727, 2785, 2738, 2728, 2739, 71, 2740, + 71, 2732, 71, 71, 2743, 71, 2736, 2741, 2737, 71, + 71, 2746, 71, 2745, 71, 71, 71, 2742, 71, 2747, + 71, 2744, 71, 2750, 71, 71, 71, 71, 2752, 71, + 71, 2987, 2751, 2753, 71, 2748, 2749, 71, 71, 71, + 71, 71, 2767, 2754, 2762, 2758, 2755, 2756, 2757, 2765, + 71, 2759, 2760, 71, 2764, 2766, 71, 2776, 2761, 71, + 2763, 2768, 71, 2769, 71, 2770, 2771, 71, 71, 2772, - 71, 2778, 71, 71, 2781, 71, 71, 2776, 2780, 71, - 2784, 2777, 71, 2779, 71, 71, 71, 2789, 2785, 2790, - 71, 2791, 71, 71, 2788, 71, 71, 2782, 71, 2786, - 2787, 2793, 71, 2798, 2794, 2796, 71, 2795, 2792, 71, - 2797, 71, 71, 71, 71, 2805, 71, 2800, 2802, 2803, - 71, 2807, 71, 2799, 71, 2806, 2854, 2801, 2808, 71, - 71, 2804, 2809, 71, 2810, 71, 2811, 71, 2812, 71, - 2813, 71, 2814, 71, 71, 2816, 71, 71, 71, 71, - 2819, 2821, 71, 2815, 71, 71, 2817, 71, 71, 2825, - 2818, 71, 2827, 71, 71, 71, 71, 2824, 2820, 2822, + 2773, 71, 71, 2774, 2775, 71, 71, 2777, 71, 2780, + 71, 71, 2783, 71, 71, 2778, 2782, 71, 2786, 2779, + 71, 2781, 71, 71, 71, 2791, 2787, 2792, 71, 2793, + 71, 71, 2790, 71, 71, 2784, 71, 2788, 2789, 2795, + 71, 2800, 2796, 2798, 71, 2797, 2794, 71, 2799, 71, + 71, 71, 71, 2807, 71, 2802, 2804, 2805, 71, 2809, + 71, 2801, 71, 2808, 2856, 2803, 2810, 71, 71, 2806, + 2811, 71, 2812, 71, 2813, 71, 2814, 71, 2815, 71, + 2816, 71, 71, 2818, 71, 71, 71, 71, 2821, 2823, + 71, 2817, 71, 71, 2819, 71, 71, 2827, 2820, 71, - 2823, 71, 71, 2831, 2829, 71, 2826, 2834, 2833, 71, - 71, 71, 2828, 71, 2832, 2836, 71, 71, 71, 71, - 71, 2830, 2841, 2835, 2843, 71, 2844, 71, 2845, 71, - 2837, 2842, 71, 2839, 2838, 2840, 71, 71, 71, 71, - 71, 2848, 71, 71, 71, 2847, 71, 2853, 71, 2856, - 71, 71, 71, 2850, 2852, 2846, 71, 71, 2849, 2855, - 71, 71, 71, 2851, 2857, 2858, 71, 2865, 2859, 71, - 2868, 71, 2860, 71, 71, 2862, 71, 2861, 2863, 71, - 2866, 2864, 2869, 2870, 71, 71, 2871, 2872, 71, 2867, - 2873, 71, 71, 2874, 71, 2876, 2875, 71, 71, 2877, + 2829, 71, 71, 71, 71, 2826, 2822, 2824, 2825, 71, + 71, 2833, 2831, 71, 2828, 2836, 2835, 71, 71, 71, + 2830, 71, 2834, 2838, 71, 71, 71, 71, 71, 2832, + 2843, 2837, 2845, 71, 2846, 71, 2847, 71, 2839, 2844, + 71, 2841, 2840, 2842, 71, 71, 71, 71, 71, 2850, + 71, 71, 71, 2849, 71, 2855, 71, 2858, 71, 71, + 71, 2852, 2854, 2848, 71, 71, 2851, 2857, 71, 71, + 71, 2853, 2859, 2860, 71, 2867, 2861, 71, 2870, 71, + 2862, 71, 71, 2864, 71, 2863, 2865, 71, 2868, 2866, + 2871, 2872, 71, 71, 2873, 2874, 71, 2869, 2875, 71, - 2881, 71, 2878, 71, 2879, 71, 71, 2884, 71, 71, - 2887, 71, 71, 2880, 71, 2882, 2890, 71, 71, 2891, - 2885, 71, 71, 2883, 2894, 2895, 71, 2888, 2886, 2892, - 71, 71, 2889, 71, 71, 2899, 71, 71, 71, 71, - 2896, 2893, 71, 71, 71, 71, 2897, 2903, 71, 2905, - 71, 71, 2902, 2898, 71, 71, 2985, 71, 2900, 2901, - 2910, 2907, 2904, 2908, 2906, 71, 71, 2915, 71, 71, - 2909, 2911, 71, 2917, 2912, 2913, 2985, 2916, 71, 71, - 71, 2918, 71, 2919, 2914, 71, 2923, 2920, 2922, 71, - 2921, 71, 71, 2924, 71, 71, 2925, 2926, 71, 2927, + 71, 2876, 71, 2878, 2877, 71, 71, 2879, 2883, 71, + 2880, 71, 2881, 71, 71, 2886, 71, 71, 2889, 71, + 71, 2882, 71, 2884, 2892, 71, 71, 2893, 2887, 71, + 71, 2885, 2896, 2897, 71, 2890, 2888, 2894, 71, 71, + 2891, 71, 71, 2901, 71, 71, 71, 71, 2898, 2895, + 71, 71, 71, 71, 2899, 2905, 71, 2907, 71, 71, + 2904, 2900, 71, 71, 2987, 71, 2902, 2903, 2912, 2909, + 2906, 2910, 2908, 71, 71, 2917, 71, 71, 2911, 2913, + 71, 2919, 2914, 2915, 2987, 2918, 71, 71, 71, 2920, + 71, 2921, 2916, 71, 2925, 2922, 2924, 71, 2923, 71, - 71, 71, 71, 2932, 71, 71, 71, 2929, 2928, 71, - 71, 2935, 2936, 71, 71, 71, 71, 71, 2934, 2939, - 2930, 2931, 71, 2933, 2937, 2940, 71, 2938, 71, 2943, - 2942, 2944, 71, 71, 2947, 2941, 71, 71, 2949, 71, - 2950, 71, 71, 71, 71, 2945, 2951, 71, 2946, 2952, - 2954, 71, 2955, 71, 71, 2948, 2956, 2957, 71, 71, - 2958, 71, 2953, 2960, 71, 71, 2959, 2963, 71, 2961, - 71, 71, 71, 71, 71, 2965, 2966, 71, 2969, 71, - 2962, 2970, 71, 71, 2964, 71, 2973, 2974, 71, 71, - 2975, 2967, 2968, 2971, 2976, 71, 2977, 71, 2972, 71, + 71, 2926, 71, 71, 2927, 2928, 71, 2929, 71, 71, + 71, 2934, 71, 71, 71, 2931, 2930, 71, 71, 2937, + 2938, 71, 71, 71, 71, 71, 2936, 2941, 2932, 2933, + 71, 2935, 2939, 2942, 71, 2940, 71, 2945, 2944, 2946, + 71, 71, 2949, 2943, 71, 71, 2951, 71, 2952, 71, + 71, 71, 71, 2947, 2953, 71, 2948, 2954, 2956, 71, + 2957, 71, 71, 2950, 2958, 2959, 71, 71, 2960, 71, + 2955, 2962, 71, 71, 2961, 2965, 71, 2963, 71, 71, + 71, 71, 71, 2967, 2968, 71, 2971, 71, 2964, 2972, + 71, 71, 2966, 71, 2975, 2976, 71, 71, 2977, 2969, - 71, 71, 71, 2983, 71, 2979, 2978, 2980, 2981, 2984, - 71, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2982, 43, 43, 43, 43, 43, 43, 43, 48, 48, - 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, - 53, 53, 59, 59, 59, 59, 59, 59, 59, 64, - 64, 64, 64, 64, 64, 64, 74, 74, 2985, 74, - 74, 74, 74, 141, 141, 2985, 2985, 2985, 141, 141, - 143, 143, 2985, 2985, 143, 2985, 143, 145, 2985, 2985, - 2985, 2985, 2985, 145, 148, 148, 2985, 2985, 2985, 148, - 148, 150, 2985, 2985, 2985, 2985, 2985, 150, 152, 152, + 2970, 2973, 2978, 71, 2979, 71, 2974, 71, 71, 71, + 71, 2985, 71, 2981, 2980, 2982, 2983, 2986, 71, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2984, 43, + 43, 43, 43, 43, 43, 43, 48, 48, 48, 48, + 48, 48, 48, 53, 53, 53, 53, 53, 53, 53, + 59, 59, 59, 59, 59, 59, 59, 64, 64, 64, + 64, 64, 64, 64, 74, 74, 2987, 74, 74, 74, + 74, 141, 141, 2987, 2987, 2987, 141, 141, 143, 143, + 2987, 2987, 143, 2987, 143, 145, 2987, 2987, 2987, 2987, + 2987, 145, 148, 148, 2987, 2987, 2987, 148, 148, 150, - 2985, 152, 152, 152, 152, 75, 75, 2985, 75, 75, - 75, 75, 13, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985 + 2987, 2987, 2987, 2987, 2987, 150, 152, 152, 2987, 152, + 152, 152, 152, 75, 75, 2987, 75, 75, 75, 75, + 13, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987 } ; -static const flex_int16_t yy_chk[5854] = +static const flex_int16_t yy_chk[5862] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2061,7 +2064,7 @@ static const flex_int16_t yy_chk[5854] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 2991, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2993, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, @@ -2311,392 +2314,393 @@ static const flex_int16_t yy_chk[5854] = 1083, 1082, 1081, 1076, 1086, 1086, 1084, 1085, 1087, 1076, 1082, 1084, 1085, 1076, 1088, 1088, 1089, 1090, 1091, 1089, 1093, 1089, 1092, 1094, 1095, 1096, 1097, 1098, 1094, 1087, - 1099, 1092, 1097, 1098, 1108, 1099, 1091, 1090, 1095, 1101, - 1093, 1100, 1103, 1096, 1103, 1100, 1102, 1102, 1101, 1104, - 1106, 1107, 1108, 1101, 1106, 1101, 1109, 1101, 1110, 1101, - 1104, 1111, 1112, 1110, 1110, 1109, 1107, 1112, 1113, 1114, - 1115, 1116, 1117, 1118, 1119, 1119, 1120, 1121, 1114, 1118, + 1099, 1092, 1097, 1098, 54, 1099, 1091, 1090, 1095, 1101, + 1093, 1100, 1108, 1096, 1111, 1100, 1102, 1102, 1101, 1103, + 1103, 1104, 1103, 1101, 1106, 1101, 1107, 1101, 1106, 1101, + 1108, 1109, 1104, 1110, 1113, 1114, 1111, 1112, 1110, 1110, + 1109, 1107, 1112, 1115, 1114, 1116, 1117, 1118, 1113, 1119, - 1122, 1123, 1113, 1111, 1120, 1122, 1117, 1124, 1125, 1115, - 1116, 1121, 1126, 1127, 1129, 1123, 1124, 1135, 1127, 1128, - 1128, 1130, 1130, 1131, 1133, 1131, 1125, 1133, 1134, 1129, - 1136, 1137, 1137, 1134, 1138, 1142, 1135, 1126, 1143, 1136, - 1139, 1139, 1140, 1140, 1141, 1144, 1144, 1145, 1146, 1141, - 1147, 1146, 1148, 1149, 1138, 1151, 1142, 1148, 1150, 1143, - 1150, 1153, 1149, 1154, 1153, 1162, 1155, 1145, 1157, 1156, - 1147, 1155, 1158, 1151, 1156, 1159, 1157, 1158, 1154, 1161, - 1159, 1160, 1160, 1162, 1161, 1163, 1164, 1165, 1167, 1168, - 1170, 1163, 1169, 1164, 1167, 1168, 1170, 1169, 1171, 1172, + 1119, 1120, 1121, 1118, 1123, 1125, 1122, 1126, 1124, 1120, + 1117, 1122, 1115, 1129, 1116, 1127, 1121, 1124, 1123, 1135, + 1127, 1128, 1128, 1125, 1130, 1130, 1134, 1131, 1129, 1131, + 1133, 1134, 1126, 1133, 1136, 1137, 1137, 1138, 1135, 1139, + 1139, 1140, 1140, 1136, 1141, 1142, 1143, 1144, 1144, 1141, + 1145, 1146, 1147, 1148, 1146, 1149, 1151, 1138, 1148, 1150, + 1153, 1150, 1154, 1153, 1149, 1165, 1142, 1143, 1155, 1162, + 1145, 1156, 1147, 1155, 1151, 1157, 1156, 1154, 1165, 1158, + 1159, 1160, 1160, 1157, 1158, 1159, 1161, 1162, 1163, 1164, + 1169, 1161, 1167, 1168, 1163, 1169, 1164, 1170, 1167, 1168, - 1165, 1173, 1174, 1174, 1175, 1177, 1178, 1171, 1179, 1180, - 1181, 1183, 1173, 1184, 1179, 1180, 1181, 1183, 1172, 1185, - 1186, 1187, 1188, 1190, 1175, 1177, 1191, 1184, 1192, 1178, - 1189, 1189, 1186, 1184, 1195, 1187, 1193, 1194, 1194, 1185, - 1188, 1193, 1196, 1190, 1198, 54, 1192, 1196, 1199, 1200, - 1201, 1191, 1202, 1199, 1199, 1203, 1204, 1195, 1205, 1201, - 1202, 1212, 1207, 1198, 1207, 1208, 1209, 1200, 1213, 1203, - 1206, 1204, 1209, 1205, 1211, 1206, 1205, 1210, 1206, 1208, - 1212, 1210, 1214, 1215, 1216, 1211, 1217, 1218, 1215, 1220, - 1221, 1217, 1222, 1224, 1213, 1223, 1223, 1224, 1225, 1226, + 1171, 1172, 1173, 1170, 1174, 1174, 1175, 1177, 1178, 1171, + 1179, 1180, 1181, 1173, 1184, 1183, 1179, 1180, 1181, 1185, + 1172, 1183, 1187, 1186, 1188, 1190, 1175, 1177, 1184, 1189, + 1189, 1178, 1191, 1192, 1184, 1186, 1187, 1195, 1193, 1185, + 1194, 1194, 1188, 1193, 1196, 1190, 1198, 1199, 1200, 1196, + 1201, 1192, 1199, 1199, 1202, 1203, 1204, 1191, 1205, 1201, + 1195, 1207, 1202, 1207, 1208, 1198, 1200, 1206, 1209, 1203, + 1212, 1204, 1206, 1205, 1209, 1206, 1205, 1210, 1208, 1211, + 1213, 1210, 1214, 1215, 1216, 1218, 1217, 1220, 1215, 1212, + 1211, 1217, 1221, 1222, 1223, 1223, 1225, 1226, 1227, 1224, - 1214, 1228, 1216, 1220, 1229, 1227, 1230, 1218, 1221, 1231, - 1222, 1227, 1232, 1228, 1233, 1242, 1225, 1234, 1226, 1235, - 1230, 1237, 1234, 1229, 1231, 1236, 1235, 1232, 1238, 1240, - 1236, 1239, 1239, 1233, 1241, 1244, 1242, 1238, 1243, 1237, - 1241, 1244, 1245, 1243, 1240, 1246, 1246, 1251, 1245, 1247, - 1247, 1249, 1249, 1250, 1252, 1253, 1251, 1250, 1254, 1255, - 1256, 1256, 1257, 1258, 1260, 1259, 1255, 1261, 1266, 1253, - 1259, 1258, 1252, 1254, 1262, 1264, 1265, 1265, 1260, 1262, - 1262, 1267, 1257, 1263, 1268, 1269, 1261, 1266, 1263, 1263, - 1269, 1270, 1271, 1268, 1274, 1264, 1272, 1273, 1275, 1274, + 1214, 1220, 1216, 1224, 1227, 1218, 1213, 1228, 1229, 1230, + 1221, 1222, 1233, 1231, 1225, 1232, 1226, 1234, 1235, 1228, + 1237, 1236, 1234, 1230, 1238, 1235, 1236, 1229, 1231, 1240, + 1232, 1233, 1242, 1238, 1239, 1239, 1241, 1244, 1237, 53, + 1243, 1245, 1241, 1244, 1240, 1243, 1252, 1245, 1246, 1246, + 1247, 1247, 1250, 1242, 1249, 1249, 1250, 1251, 1253, 1254, + 1255, 1256, 1256, 1257, 1252, 1258, 1251, 1255, 1260, 1261, + 1259, 1262, 1253, 1258, 1254, 1259, 1262, 1262, 1264, 1263, + 1265, 1265, 1260, 1257, 1263, 1263, 1266, 1267, 1261, 1269, + 1268, 1270, 1271, 1272, 1269, 1273, 1275, 1274, 1264, 1268, - 1267, 1276, 1277, 1273, 1280, 1278, 1281, 1276, 1282, 1279, - 1270, 1278, 1271, 1283, 1272, 1279, 1284, 1285, 1286, 1287, - 1287, 1277, 1289, 1280, 1275, 1281, 1288, 1282, 1293, 1288, - 1284, 1294, 1283, 1286, 1289, 1290, 1290, 1291, 1285, 1292, - 1294, 1293, 1291, 1292, 1295, 1296, 1299, 1296, 1298, 1300, - 1301, 1296, 1305, 1298, 1302, 1302, 1304, 1295, 1303, 1306, - 1307, 1299, 1304, 1303, 1296, 1307, 1301, 1305, 1310, 1300, - 1308, 1309, 1306, 1311, 1308, 1309, 1312, 1313, 1314, 1314, - 1316, 1318, 1319, 1313, 1320, 1320, 1321, 1319, 1310, 1322, - 1328, 1311, 1321, 1324, 1324, 1329, 1312, 1326, 1316, 1332, + 1277, 1273, 1274, 1276, 1280, 1266, 1267, 1278, 1279, 1276, + 1270, 1272, 1271, 1278, 1279, 1281, 1282, 1283, 1284, 1277, + 1285, 1289, 1275, 1280, 1286, 1287, 1287, 1288, 1290, 1290, + 1288, 1294, 1284, 1289, 1281, 1282, 1283, 1291, 1291, 1286, + 1292, 1285, 1293, 1295, 1294, 1292, 1293, 1296, 1297, 1300, + 1297, 1299, 1295, 1301, 1297, 1302, 1299, 1303, 1303, 1305, + 1296, 1304, 1306, 1307, 1300, 1305, 1304, 1297, 1309, 1308, + 1311, 1302, 1309, 1301, 1308, 1310, 1307, 1306, 1312, 1310, + 1313, 1314, 1315, 1315, 1317, 1319, 1320, 1314, 1321, 1321, + 1311, 1320, 1322, 1323, 1325, 1325, 1312, 1333, 1322, 1329, - 1326, 1333, 1318, 1327, 1327, 1331, 1328, 1335, 1331, 1322, - 1333, 1329, 1334, 1334, 1336, 1337, 1338, 1339, 1341, 1332, - 1343, 1338, 1335, 1340, 1340, 1342, 1344, 1344, 1345, 1346, - 1353, 1339, 1347, 1348, 1337, 1336, 1341, 1347, 1349, 1349, - 1342, 1351, 1345, 1352, 1352, 1343, 1350, 1346, 1348, 1354, - 1350, 1355, 1353, 1356, 1357, 1355, 1359, 1359, 1360, 1357, - 1354, 1351, 1362, 1361, 1363, 1364, 1365, 1365, 1366, 1367, - 1369, 1368, 1356, 1366, 1371, 1370, 1360, 1361, 1363, 1369, - 1370, 1362, 1362, 1372, 1375, 1372, 1378, 1373, 1380, 1367, - 1364, 1368, 1373, 1374, 1371, 1376, 1379, 1379, 1383, 1374, + 1313, 1327, 1317, 1330, 1327, 1334, 1319, 1328, 1328, 1332, + 1335, 1335, 1332, 1323, 1334, 1329, 1336, 1333, 1337, 1330, + 1339, 1338, 1340, 1341, 1341, 1339, 1342, 1343, 1344, 1345, + 1345, 1336, 1346, 1347, 1349, 1352, 1340, 1351, 1348, 1337, + 1338, 1351, 1343, 1348, 1342, 1354, 1346, 1350, 1350, 1349, + 1355, 1347, 1357, 1344, 1356, 1352, 1353, 1353, 1356, 1358, + 1361, 1355, 1360, 1360, 1358, 1362, 1363, 1354, 1364, 1365, + 1367, 1357, 1366, 1366, 1370, 1367, 1368, 1369, 1361, 1362, + 1372, 1376, 1364, 1370, 1371, 1363, 1363, 1374, 1373, 1371, + 1373, 1379, 1374, 1375, 1365, 1381, 1368, 1369, 1377, 1375, - 1378, 1376, 1381, 1383, 1375, 1384, 1387, 1380, 1381, 1385, - 1385, 1386, 1386, 1388, 1390, 1389, 1392, 1390, 1391, 1391, - 1387, 1393, 1399, 1400, 1403, 1403, 1400, 1395, 1392, 1384, - 1389, 1388, 1394, 1395, 1396, 1394, 1397, 1398, 1394, 1396, - 1401, 1393, 1398, 1402, 1407, 1397, 1401, 1399, 1402, 1405, - 1394, 1404, 1404, 1406, 1408, 1405, 1409, 1407, 1406, 1410, - 1411, 1412, 1413, 1411, 1414, 1415, 1416, 1412, 1413, 1414, - 1420, 1415, 1408, 1417, 1421, 1409, 1418, 1418, 1417, 1410, - 1419, 1422, 1423, 1424, 1427, 1419, 1425, 1426, 1420, 1416, - 1427, 1428, 1429, 1430, 1421, 1431, 1423, 1424, 1425, 1434, + 1372, 1376, 1380, 1380, 1377, 1379, 1382, 1385, 1384, 1386, + 1386, 1388, 1382, 1384, 1381, 1387, 1387, 1389, 1390, 1391, + 1392, 1392, 1391, 1394, 1393, 1388, 1395, 1400, 1396, 1395, + 1398, 1385, 1395, 1390, 1396, 1389, 1393, 1397, 1401, 1398, + 1399, 1401, 1397, 1394, 1395, 1399, 1403, 1402, 1404, 1404, + 1406, 1403, 1400, 1402, 1405, 1405, 1406, 1407, 1408, 1409, + 1410, 1411, 1407, 1412, 1413, 1417, 1412, 1414, 1421, 1415, + 1413, 1408, 1416, 1414, 1415, 1418, 1422, 1409, 1416, 1410, + 1418, 1411, 1419, 1419, 1420, 1423, 1421, 1424, 1417, 1420, + 1425, 1426, 1428, 1427, 1429, 1430, 1422, 1431, 1428, 1432, - 1426, 1422, 1433, 1433, 1435, 1436, 1436, 1430, 1437, 1435, - 1438, 1428, 1429, 1439, 1440, 1442, 1431, 1441, 1443, 1434, - 1445, 1449, 1444, 1437, 1438, 1443, 1441, 1447, 1451, 1451, - 1442, 1444, 1440, 1453, 1444, 1450, 1445, 1439, 1450, 1452, - 1452, 1454, 1447, 1456, 1456, 1453, 1449, 1447, 1455, 1457, - 1458, 1455, 1459, 1460, 1461, 1462, 1463, 1459, 1460, 1454, - 1464, 1466, 1457, 1465, 1469, 1463, 1468, 1468, 1467, 1458, - 1466, 1462, 1465, 1461, 1467, 1465, 1470, 1471, 1472, 1464, - 1473, 1474, 1476, 1477, 1469, 1478, 1478, 1479, 1480, 1470, - 1482, 1482, 1472, 1474, 1481, 1471, 1473, 1480, 1484, 1481, + 1440, 1424, 1435, 1426, 1425, 1423, 1427, 1434, 1434, 1437, + 1437, 1431, 1436, 1438, 1429, 1430, 1439, 1436, 1441, 1443, + 1432, 1446, 1435, 1442, 1440, 1448, 1444, 1450, 1438, 1445, + 1439, 1455, 1442, 1444, 1443, 48, 1441, 1446, 1445, 1451, + 1448, 1445, 1451, 1452, 1452, 1448, 1453, 1453, 1454, 1455, + 1456, 1458, 1450, 1456, 1457, 1457, 1459, 1460, 1461, 1462, + 1454, 1463, 1460, 1461, 1458, 1464, 1465, 1466, 1469, 1469, + 1470, 1467, 1474, 1471, 1464, 1459, 1466, 1463, 1462, 1466, + 1467, 1468, 1472, 1473, 1475, 1465, 1471, 1468, 1474, 1478, + 1470, 1479, 1480, 1480, 1481, 1482, 1475, 1473, 1483, 1485, - 1483, 1477, 1485, 1479, 1486, 1482, 1489, 1476, 1487, 1483, - 1490, 1491, 1483, 1487, 1487, 1493, 1484, 1494, 53, 1492, - 1489, 1493, 1486, 1485, 1492, 1490, 1495, 1495, 1496, 1501, - 1502, 1497, 1498, 1491, 1496, 1494, 1497, 1499, 1498, 1503, - 1504, 1510, 1506, 1499, 1502, 1503, 1508, 1505, 1506, 1501, - 1505, 1511, 1513, 1504, 1508, 1512, 1505, 1522, 1514, 1515, - 1510, 1513, 1516, 1512, 1517, 1518, 1518, 1519, 1520, 1521, - 1511, 1514, 1515, 1519, 1520, 1523, 1516, 1522, 1517, 1524, - 1526, 1525, 1521, 1527, 1528, 1529, 1526, 1518, 1531, 1531, - 1532, 1533, 1534, 1523, 1525, 1533, 1535, 1534, 1524, 1536, + 1472, 1484, 1484, 1483, 1482, 1486, 1487, 1488, 1485, 1479, + 1481, 1485, 1489, 1492, 1478, 1491, 1484, 1489, 1489, 1493, + 1496, 1494, 43, 1486, 1495, 1488, 1494, 1487, 1492, 1491, + 1495, 1497, 1497, 1498, 1503, 1499, 1500, 1501, 1496, 1498, + 1499, 1493, 1500, 1501, 1504, 1505, 1506, 1507, 1512, 1508, + 1507, 1505, 1510, 1513, 1503, 1508, 1507, 1514, 1504, 1506, + 1510, 1515, 1516, 1517, 1518, 1514, 1519, 1512, 1520, 1520, + 1515, 1521, 1513, 1522, 1523, 1516, 1517, 1521, 1518, 1522, + 1519, 1524, 1525, 1526, 1527, 1528, 1529, 1523, 1530, 1531, + 1520, 1528, 1533, 1533, 1534, 1535, 1540, 1527, 1536, 1535, - 1528, 1535, 1537, 1529, 1536, 1527, 1538, 1540, 1541, 1541, - 1532, 1537, 1542, 1543, 1544, 1545, 1545, 1547, 1546, 1554, - 1550, 1551, 1540, 1548, 1547, 1543, 1549, 1561, 1552, 1538, - 1553, 1542, 1546, 1544, 1552, 1548, 1561, 1554, 1549, 1550, - 1555, 1551, 1553, 1556, 1556, 1557, 1555, 1560, 1557, 1558, - 1558, 1562, 1560, 1563, 1563, 1564, 1565, 1562, 1565, 1566, - 1567, 1568, 1566, 1569, 1570, 1571, 1572, 1564, 1575, 1576, - 1571, 1574, 1573, 1575, 1577, 1572, 1581, 1578, 1576, 1580, - 1567, 1569, 1570, 1568, 1573, 1580, 1574, 1579, 1579, 1582, - 1583, 1576, 1578, 1584, 1577, 1586, 1585, 1581, 1585, 1587, + 1525, 1524, 1526, 1536, 1530, 1537, 1538, 1531, 1529, 1539, + 1537, 1538, 1542, 1544, 1534, 1543, 1543, 1545, 1539, 1540, + 1546, 1547, 1547, 1548, 1549, 1552, 1550, 1542, 1551, 1545, + 1553, 1549, 1544, 1555, 1556, 1554, 1557, 1548, 1550, 1546, + 1551, 1554, 1557, 14, 1552, 1555, 1558, 1558, 1559, 1563, + 1553, 1559, 1556, 1560, 1560, 1562, 1564, 1566, 1563, 1567, + 1562, 1567, 1564, 1565, 1565, 1568, 1569, 1570, 1568, 1566, + 1571, 1573, 1572, 1574, 1577, 1575, 1573, 1576, 1579, 1577, + 1580, 1583, 1574, 1585, 1578, 1582, 1569, 1575, 1571, 1570, + 1572, 1582, 1576, 1578, 1584, 1580, 1581, 1581, 1579, 1585, - 1587, 1588, 1588, 1589, 1589, 1590, 1583, 1593, 1582, 1586, - 1594, 1586, 1601, 1584, 1591, 1591, 1592, 1592, 1595, 1595, - 1596, 1597, 1603, 1598, 1596, 1590, 1598, 1597, 1593, 1600, - 1601, 1594, 1602, 1604, 1609, 1600, 1604, 1607, 1602, 1605, - 1605, 1606, 1606, 1607, 1608, 1610, 1611, 1603, 1612, 1616, - 1615, 1616, 1611, 1621, 1609, 1614, 1608, 1608, 1608, 1617, - 1614, 1614, 1618, 1608, 1615, 1610, 1619, 1620, 1612, 1622, - 1617, 1624, 1619, 1621, 1623, 1623, 1620, 1618, 1625, 1625, - 1626, 1627, 1628, 1628, 1629, 1629, 1630, 1633, 1633, 1634, - 1622, 1638, 1635, 1637, 1640, 1640, 1641, 1624, 1639, 1645, + 1586, 1587, 1583, 1587, 1592, 1588, 1578, 1589, 1589, 1590, + 1590, 1591, 1591, 1584, 1593, 1593, 1594, 1594, 1595, 1588, + 1586, 1588, 1596, 1598, 1592, 1597, 1597, 1598, 1599, 1600, + 1602, 1603, 1600, 1605, 1599, 1604, 1602, 1606, 1610, 1595, + 1606, 1604, 1609, 1596, 1607, 1607, 1608, 1608, 1609, 1603, + 1610, 1610, 1610, 1611, 1612, 1613, 1614, 1610, 1605, 1616, + 1618, 1613, 1618, 1617, 1616, 1616, 1620, 1619, 1623, 1621, + 1622, 1624, 1626, 1611, 1612, 1621, 1614, 1617, 1619, 1622, + 1628, 1620, 1625, 1625, 1627, 1627, 1629, 1632, 1623, 1630, + 1630, 1636, 1624, 1631, 1631, 1635, 1635, 1637, 1626, 1640, - 1626, 1635, 1637, 1627, 1639, 1642, 1630, 1644, 1643, 1646, - 1646, 1647, 1638, 1648, 1634, 1643, 1644, 1641, 1650, 1652, - 1642, 1651, 1654, 1650, 1653, 1645, 1655, 1651, 1654, 1648, - 1657, 1653, 1655, 1656, 1656, 1657, 1658, 1647, 1659, 1652, - 1660, 1661, 1663, 1662, 1664, 1658, 1662, 1665, 1665, 1666, - 1668, 1667, 1669, 1661, 1671, 1666, 1669, 1672, 1659, 1660, - 1663, 1673, 1674, 1674, 1675, 1668, 1673, 1676, 1678, 1679, - 1664, 1667, 1669, 1679, 1671, 1680, 1681, 1682, 1682, 1672, - 1683, 1680, 1676, 1675, 1683, 1681, 1684, 1678, 1685, 1685, - 1686, 1687, 1692, 1688, 1689, 1690, 1691, 1684, 1692, 1689, + 1628, 1639, 1643, 1641, 1642, 1642, 1637, 1632, 1629, 1641, + 1639, 1644, 1645, 1646, 1647, 1649, 1636, 1648, 1648, 1645, + 1640, 1650, 1646, 1643, 1652, 1653, 1644, 1654, 1655, 1652, + 1656, 1653, 1657, 1658, 1658, 1655, 1656, 1650, 1657, 1659, + 1647, 1649, 1660, 1661, 1659, 1662, 1663, 1654, 1665, 1664, + 1666, 1660, 1664, 1667, 1667, 1668, 1670, 1669, 1663, 1673, + 1674, 1668, 1675, 1661, 1662, 1671, 1665, 1675, 1677, 1671, + 1688, 1670, 1676, 1676, 1678, 1680, 1666, 1669, 13, 1673, + 1681, 1683, 1674, 1690, 1681, 1671, 1682, 1677, 1686, 1678, + 1683, 1688, 1682, 1685, 1680, 1684, 1684, 1685, 1689, 1686, - 1697, 1694, 1684, 1693, 1697, 1687, 1694, 1695, 1695, 1696, - 1696, 1686, 1688, 1699, 1700, 1690, 1691, 1701, 1693, 1702, - 1702, 1704, 1699, 1703, 1703, 1700, 1704, 1704, 1705, 1706, - 1700, 1707, 1709, 1708, 1705, 1706, 1710, 1701, 1708, 1712, - 1714, 1713, 1710, 1715, 1709, 1713, 1719, 1716, 1717, 1718, - 1721, 1712, 1714, 1716, 1722, 1718, 1723, 1707, 1719, 1729, - 1725, 1723, 1721, 1725, 1726, 1726, 1727, 1727, 1715, 1730, - 1717, 1728, 1728, 1722, 1731, 1730, 1732, 1733, 1734, 1729, - 1731, 1732, 1738, 1733, 1736, 1738, 1739, 1734, 1742, 1736, - 1740, 1740, 1743, 1746, 1744, 1745, 1745, 1750, 1739, 1744, + 1687, 1687, 1690, 1691, 1686, 1692, 1693, 1694, 1691, 1695, + 1696, 1701, 1689, 1694, 1703, 1696, 1697, 1697, 1698, 1698, + 1701, 1702, 1709, 1699, 1695, 1692, 1693, 1699, 1704, 1704, + 1705, 1705, 1702, 1706, 1703, 1707, 1708, 1702, 1706, 1706, + 1710, 1707, 1708, 1711, 1712, 1710, 1714, 1715, 1709, 1716, + 1712, 1715, 1717, 1718, 1719, 1711, 1720, 1721, 1714, 1718, + 1723, 1716, 1720, 1724, 1727, 1725, 1731, 1727, 1740, 1721, + 1725, 1740, 1723, 1728, 1728, 0, 1719, 1717, 1729, 1729, + 1730, 1730, 1724, 1732, 1733, 1735, 1731, 1734, 1736, 1732, + 1733, 1735, 1734, 1738, 1741, 1742, 1742, 1736, 1738, 1744, - 1742, 1747, 1746, 1748, 1743, 1751, 1747, 1752, 1748, 1749, - 1749, 1753, 1754, 1755, 1751, 1756, 1754, 1750, 1755, 1757, - 1760, 1756, 1759, 1759, 1764, 1752, 1761, 1762, 1762, 1765, - 1753, 1763, 1766, 1757, 1759, 1761, 1764, 1766, 1760, 1767, - 1763, 1770, 1770, 1772, 1773, 1774, 1772, 1776, 1778, 1777, - 1765, 1779, 1767, 1786, 1778, 1780, 1780, 1781, 1783, 1781, - 1773, 1774, 1776, 1777, 1782, 1782, 1783, 1785, 1779, 1787, - 1787, 1788, 1789, 1786, 1785, 1790, 1791, 1792, 1793, 1794, - 1788, 1797, 1800, 1798, 1795, 1799, 1799, 1790, 1791, 1792, - 1795, 1801, 1803, 1789, 1794, 1798, 1802, 1803, 1804, 1802, + 1745, 1748, 1746, 1747, 1747, 1752, 1741, 1746, 1749, 1750, + 1748, 1744, 1745, 1749, 1750, 1751, 1751, 1753, 1754, 1755, + 1756, 1759, 1757, 1758, 1756, 1752, 1753, 1757, 1762, 1758, + 1761, 1761, 1763, 1764, 1764, 1759, 1754, 1766, 1755, 1765, + 1767, 1763, 1761, 1769, 1774, 1768, 1762, 1774, 1765, 1766, + 1768, 1772, 1772, 1775, 1776, 0, 1769, 1778, 1780, 1779, + 1781, 1767, 1782, 1782, 1780, 1783, 1788, 1783, 1785, 1775, + 1776, 1787, 1778, 1779, 1784, 1784, 1785, 1781, 1787, 1789, + 1789, 1790, 1791, 1792, 1793, 1794, 1788, 1795, 1797, 1796, + 1790, 1799, 1802, 1800, 1797, 1792, 1793, 1794, 1801, 1801, - 1800, 1797, 1806, 1795, 1793, 1808, 1807, 1806, 1807, 1809, - 1810, 1801, 1812, 1814, 1809, 1815, 1816, 1810, 1804, 1818, - 1817, 1812, 1817, 1808, 1815, 1820, 1821, 1820, 1816, 1822, - 1822, 1814, 1823, 1825, 1824, 1825, 1826, 1827, 1818, 1824, - 1821, 1826, 1827, 1828, 1829, 1830, 1832, 1831, 1833, 1835, - 1839, 1830, 1831, 1836, 1837, 1837, 1833, 1840, 1823, 1832, - 1841, 1828, 1838, 1838, 1829, 1839, 1841, 1836, 1835, 1842, - 1843, 1844, 1843, 1846, 1842, 1845, 1845, 1840, 1851, 1844, - 1847, 1847, 1848, 1848, 1849, 1846, 1850, 1844, 1853, 1855, - 1854, 1850, 1854, 1849, 1858, 1860, 1851, 1853, 1856, 1857, + 1803, 1806, 0, 1791, 1796, 1800, 1804, 1797, 1810, 1804, + 1802, 1799, 1805, 1795, 1808, 1814, 1809, 1805, 1809, 1808, + 1803, 1806, 1811, 1812, 1814, 1816, 1810, 1811, 1817, 1818, + 1812, 1819, 1820, 1819, 1822, 1823, 1822, 1817, 1824, 1824, + 1825, 1818, 1826, 1816, 1827, 1828, 1827, 1826, 1829, 1823, + 1828, 1820, 1830, 1829, 1831, 1832, 1834, 1833, 1837, 1835, + 1903, 1832, 1833, 1842, 1838, 1841, 1825, 1835, 1903, 1834, + 1830, 1839, 1839, 1843, 1831, 1840, 1840, 1837, 1838, 1843, + 1841, 1844, 1845, 1842, 1845, 1846, 1844, 1847, 1847, 1851, + 1848, 1849, 1849, 1846, 1850, 1850, 1853, 1855, 1851, 1852, - 1853, 1865, 1864, 1856, 1856, 1868, 1858, 1860, 1857, 1861, - 1855, 1862, 1869, 1866, 1861, 1864, 1862, 1867, 1867, 1870, - 1871, 1865, 1866, 1868, 1872, 1874, 1875, 1876, 1877, 1885, - 1869, 1878, 1879, 1877, 1871, 1870, 1878, 1874, 1875, 1872, - 1882, 1879, 1884, 1886, 1887, 1888, 1882, 1876, 1884, 1890, - 1890, 1889, 1885, 1893, 1891, 1892, 1892, 1894, 1886, 1882, - 1889, 1894, 1887, 1891, 1895, 1896, 1902, 48, 1897, 1895, - 1888, 1898, 1893, 1897, 1897, 1899, 1900, 1898, 1896, 1900, - 1901, 1899, 1905, 1905, 1906, 1906, 1902, 1907, 1901, 1908, - 1908, 1909, 1909, 1910, 1911, 1912, 1907, 1913, 1923, 1906, + 1857, 1846, 1848, 1856, 1852, 1856, 1855, 1858, 1859, 1855, + 1860, 1862, 1858, 1858, 1853, 1863, 1866, 1859, 1867, 1864, + 1863, 1857, 1860, 1862, 1864, 1868, 1869, 1869, 1870, 1866, + 1871, 1872, 1876, 1877, 1868, 1873, 1874, 1878, 1867, 1890, + 1887, 1892, 1892, 1881, 1876, 1877, 1870, 1872, 1871, 1873, + 1879, 1874, 1881, 1880, 1884, 1879, 1886, 1878, 1880, 1888, + 1884, 1889, 1886, 1887, 1890, 1895, 1891, 1893, 1894, 1894, + 0, 1904, 1898, 1884, 1888, 1891, 1893, 1896, 1897, 1889, + 1900, 1896, 1899, 1897, 1895, 1898, 1900, 1899, 1899, 1901, + 1902, 1904, 1909, 1902, 1912, 1901, 1907, 1907, 1908, 1908, - 1920, 1912, 1913, 1914, 1914, 1910, 1915, 1915, 1916, 1917, - 1906, 1924, 1911, 1916, 1919, 1917, 1924, 1921, 1919, 1925, - 1920, 1921, 1926, 1923, 1927, 1928, 1930, 1930, 1929, 1927, - 1931, 1932, 1934, 1933, 1931, 1935, 1936, 1926, 1933, 1938, - 1937, 1939, 1925, 1928, 1929, 1937, 1932, 1935, 1940, 1940, - 1943, 1944, 1938, 1942, 1945, 1936, 1946, 1947, 1934, 1939, - 1948, 1942, 1949, 1950, 1952, 1953, 1953, 43, 1954, 1943, - 1944, 1954, 1955, 1956, 1949, 1957, 1947, 1945, 1961, 1952, - 1946, 1948, 1958, 1958, 1950, 1955, 1962, 1956, 1957, 1959, - 1959, 1960, 1960, 1961, 1963, 1963, 1964, 1965, 1965, 1962, + 1913, 1909, 1910, 1910, 1911, 1911, 1912, 1915, 1914, 1916, + 1916, 1922, 1915, 1908, 1914, 1917, 1917, 1918, 1913, 1919, + 1925, 1927, 1918, 1921, 1908, 1919, 1923, 1921, 1926, 1929, + 1923, 1922, 1928, 1926, 1929, 1930, 1931, 1932, 1932, 1933, + 1934, 1935, 1936, 1933, 1927, 1925, 1935, 1928, 1937, 1939, + 1938, 1940, 1931, 1930, 1939, 1934, 1941, 1942, 1942, 1944, + 1937, 1945, 1946, 1947, 1940, 1948, 1949, 1944, 1936, 1938, + 1950, 1951, 1952, 1954, 1941, 1955, 1955, 1957, 1958, 1956, + 1945, 1946, 1956, 1951, 1959, 1949, 1947, 1963, 1954, 1948, + 1957, 1950, 1958, 1952, 1960, 1960, 1964, 1959, 1961, 1961, - 1969, 1966, 1968, 1970, 1971, 1964, 1966, 1968, 1964, 1972, - 1972, 1973, 1973, 1974, 1975, 1975, 1971, 1976, 1977, 1977, - 1969, 1978, 1979, 1970, 1980, 1980, 1982, 1979, 1981, 1981, - 1983, 1984, 1974, 1985, 1989, 1976, 1978, 1987, 1991, 1983, - 1982, 14, 1987, 1988, 1988, 1984, 1990, 1990, 1992, 1994, - 1994, 1996, 1985, 1989, 1992, 1993, 1991, 1997, 1993, 1995, - 1995, 1998, 1999, 1999, 2001, 1994, 2002, 2003, 2006, 2004, - 1996, 2007, 1997, 2004, 2005, 2005, 2008, 2010, 2010, 2011, - 1998, 2012, 2003, 2013, 2001, 2014, 2007, 2006, 2012, 2002, - 2015, 2008, 2016, 2017, 2017, 2018, 2019, 2013, 2019, 2011, + 1962, 1962, 1963, 1965, 1965, 1966, 1967, 1967, 1968, 1964, + 1970, 1971, 1972, 1968, 1966, 1970, 1973, 1966, 1974, 1974, + 1975, 1975, 1976, 1977, 1977, 1978, 1979, 1979, 1973, 1980, + 1981, 1971, 1972, 1982, 1982, 1981, 1983, 1983, 1984, 1985, + 1986, 1976, 1987, 1978, 1980, 1989, 1990, 1990, 1985, 1991, + 1989, 1993, 1984, 1994, 1986, 1992, 1992, 1995, 1998, 1994, + 1995, 1987, 1996, 1996, 1997, 1997, 1999, 2000, 1991, 1993, + 2001, 2001, 2003, 2004, 2005, 2006, 2008, 1998, 1996, 2006, + 2015, 1999, 2007, 2007, 2009, 2010, 2000, 2012, 2012, 2005, + 2013, 2014, 2003, 2016, 2015, 2008, 2004, 2017, 2014, 2009, - 2022, 2023, 2020, 2014, 2018, 2020, 2023, 2025, 2015, 2024, - 2026, 2028, 2022, 2027, 2024, 2029, 2028, 2035, 2016, 2031, - 2020, 2032, 2020, 2026, 2031, 2033, 2032, 2034, 2039, 2036, - 2040, 2037, 2025, 2034, 2027, 2036, 2037, 2038, 2035, 2042, - 2033, 2029, 2038, 2040, 2041, 2043, 2044, 2041, 2042, 2045, - 2046, 2047, 2051, 2039, 2043, 2044, 2048, 2047, 2045, 2049, - 2053, 2055, 2048, 2049, 2046, 2054, 2054, 2055, 2057, 2053, - 2056, 2056, 2051, 2059, 2063, 2060, 2061, 2061, 2062, 2056, - 2065, 2066, 2068, 2063, 2067, 2072, 2074, 2074, 2057, 2059, - 2057, 2060, 2065, 2062, 2068, 2070, 2071, 2066, 2070, 2067, + 2010, 2018, 2019, 2019, 2020, 2021, 2022, 2021, 2024, 2022, + 2013, 2016, 2025, 2020, 2026, 2017, 2027, 2025, 2028, 2026, + 2024, 2029, 2031, 2030, 2022, 2033, 2022, 2018, 2030, 2034, + 2033, 2028, 2035, 2036, 2034, 2037, 2041, 2038, 2042, 2036, + 2039, 2027, 2029, 2038, 2040, 2039, 2044, 2035, 2031, 2040, + 2043, 2042, 2053, 2043, 2045, 2044, 2037, 2046, 2047, 2048, + 0, 2041, 2049, 2045, 2050, 2051, 2046, 2047, 2049, 2051, + 2050, 2055, 2053, 2048, 2056, 2056, 2057, 2058, 2058, 2059, + 2055, 2061, 2057, 2064, 2062, 2065, 2058, 2063, 2063, 2068, + 2067, 2069, 2070, 2072, 2065, 2074, 2072, 2061, 2064, 2059, - 2073, 2071, 2075, 2075, 2079, 2072, 2077, 2077, 2078, 2079, - 2080, 2078, 2073, 2081, 2082, 2082, 2080, 2083, 2085, 2081, - 2084, 2084, 2086, 2087, 2088, 2088, 2091, 2095, 2090, 2091, - 2085, 2083, 2090, 2092, 2092, 2093, 2086, 2094, 2098, 2096, - 2093, 2101, 2087, 2096, 2097, 2097, 2094, 2095, 2100, 2102, - 2103, 2098, 2104, 2100, 2105, 2106, 2104, 2107, 2109, 2108, - 2106, 2101, 2111, 2107, 2103, 2108, 2112, 2113, 2115, 2102, - 2115, 2112, 2114, 2113, 2105, 2118, 2109, 2121, 2111, 13, - 2114, 2119, 2119, 2120, 2122, 2122, 2120, 2124, 2125, 2118, - 2126, 2124, 2127, 2127, 2125, 2128, 2131, 2131, 2133, 2135, + 2062, 2059, 2067, 2073, 2070, 2068, 2069, 2075, 2073, 2076, + 2076, 2077, 2077, 2079, 2079, 2074, 2081, 2080, 2082, 2075, + 2080, 2081, 2083, 2085, 2082, 2084, 2084, 2087, 2083, 2086, + 2086, 2088, 2089, 2090, 2090, 2093, 2092, 2085, 2093, 2087, + 2092, 2094, 2094, 2095, 2096, 2088, 2097, 2100, 2095, 2103, + 2098, 2089, 2102, 2096, 2098, 2099, 2099, 2102, 2104, 2105, + 2100, 2106, 2107, 2108, 2109, 2106, 2097, 2111, 2108, 2103, + 2109, 2110, 2113, 2105, 2114, 2115, 2116, 2110, 2104, 2114, + 2120, 2115, 2107, 2122, 2116, 2111, 2122, 2117, 2113, 2117, + 2121, 2121, 2123, 2126, 2120, 2124, 2124, 2126, 2127, 2128, - 2139, 2136, 2126, 2121, 2128, 2139, 2140, 2141, 2149, 2142, - 2143, 2143, 2141, 2135, 2142, 2147, 2133, 2136, 2145, 2145, - 2150, 2147, 2148, 2148, 2149, 2151, 2153, 2154, 2155, 2155, - 2151, 2157, 2140, 2159, 2160, 2158, 2162, 2162, 2163, 2154, - 2157, 2158, 2150, 2164, 2169, 2153, 2166, 2166, 2177, 2160, - 2168, 2159, 2167, 2167, 2170, 2168, 2172, 2163, 2172, 2171, - 2173, 2164, 2169, 2170, 2171, 2174, 2175, 2176, 2177, 2184, - 2178, 2268, 2176, 2268, 2173, 2178, 2179, 2179, 2175, 2174, - 2180, 2180, 2181, 2181, 2182, 2182, 2183, 2184, 2185, 2186, - 2186, 2187, 2187, 2185, 2188, 2189, 2190, 2191, 2183, 2192, + 2129, 2129, 2135, 2130, 2127, 2133, 2133, 2137, 2138, 2141, + 2142, 2128, 2130, 2149, 2141, 2145, 2145, 2143, 2123, 2149, + 2135, 2137, 2143, 2144, 2138, 2147, 2147, 2151, 2144, 2150, + 2150, 2152, 2153, 2155, 2156, 2159, 2142, 2153, 2157, 2157, + 2161, 2160, 2162, 2151, 2159, 2165, 2156, 2160, 2164, 2164, + 2166, 2170, 2155, 2152, 2168, 2168, 2170, 2162, 2161, 2169, + 2169, 2171, 2172, 2175, 2165, 2173, 2176, 2174, 2166, 2174, + 2173, 2172, 2177, 2178, 2179, 2186, 2180, 2175, 2178, 2171, + 2176, 2180, 2181, 2181, 2177, 2182, 2182, 2183, 2183, 2184, + 2184, 2185, 2187, 2186, 2179, 2188, 2188, 2187, 2189, 2189, - 2192, 2193, 2194, 2194, 2195, 2195, 2188, 2189, 2196, 2197, - 2198, 2199, 2200, 2191, 2202, 2203, 2190, 2198, 2206, 2196, - 2193, 2197, 2201, 2199, 2204, 2204, 2207, 2201, 2205, 2208, - 2209, 2210, 2200, 2213, 2202, 2203, 2214, 2205, 2211, 2211, - 2212, 2216, 2208, 2217, 2206, 2210, 2207, 2218, 2213, 2212, - 2219, 2214, 2220, 2219, 2209, 2221, 2222, 2223, 2223, 2216, - 2221, 2222, 2224, 2224, 2230, 2217, 2220, 2225, 2225, 2231, - 2218, 2227, 2227, 2229, 2229, 2232, 2234, 2235, 2236, 2237, - 2231, 2238, 2230, 2239, 2240, 2241, 2241, 2243, 2243, 2244, - 2238, 2250, 2245, 0, 2232, 2235, 2234, 2246, 2246, 2237, + 2190, 2191, 2192, 2185, 2193, 2194, 2194, 2195, 2196, 2196, + 2197, 2197, 2190, 2191, 2198, 2199, 2200, 2201, 2202, 2203, + 2193, 2204, 2192, 2200, 2203, 2198, 2195, 2199, 2205, 2201, + 2206, 2206, 2208, 2207, 2209, 2211, 2210, 2212, 2202, 2213, + 2213, 2204, 2207, 2214, 2218, 2215, 2216, 2219, 2205, 2210, + 2220, 2212, 2214, 2221, 2209, 0, 2221, 2222, 2208, 2211, + 2215, 2216, 2218, 2223, 2232, 2224, 2225, 2225, 2223, 2219, + 2224, 2222, 2233, 2220, 2226, 2226, 2227, 2227, 2229, 2229, + 2231, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, + 2241, 2243, 2243, 2242, 2245, 2245, 2246, 2247, 2240, 2248, - 2236, 2245, 2240, 2239, 2248, 2249, 2249, 2251, 2252, 2250, - 2254, 2244, 2253, 2248, 2255, 2252, 2257, 2256, 2258, 2258, - 2259, 2259, 2261, 2260, 2262, 2251, 2263, 2253, 2254, 2260, - 2265, 2264, 2255, 2256, 2266, 2257, 2264, 2267, 2273, 2262, - 2261, 2276, 2267, 2269, 2269, 2263, 2270, 2275, 2270, 2277, - 2265, 2271, 2271, 2278, 2266, 2280, 2275, 2273, 2279, 2281, - 2276, 2277, 2284, 2279, 2285, 2286, 2286, 2285, 2287, 2288, - 2289, 2289, 2290, 2278, 2292, 2280, 2290, 2293, 2281, 2294, - 2294, 2293, 2284, 2287, 2295, 2297, 2298, 2288, 2301, 2292, - 2299, 2299, 2302, 2305, 2303, 2304, 2304, 2295, 2303, 2307, + 2248, 2251, 2251, 2234, 2237, 2236, 2247, 2250, 2239, 2238, + 2241, 2242, 2252, 2253, 2254, 2256, 2250, 2255, 2246, 2257, + 2258, 2254, 2259, 2260, 2260, 2261, 2261, 2263, 2262, 2264, + 2252, 2253, 2255, 2256, 2262, 2265, 2258, 2257, 2266, 2267, + 2268, 2259, 2269, 2266, 2264, 2263, 2270, 2269, 2270, 2271, + 2271, 2272, 2275, 2272, 2265, 2273, 2273, 2277, 2278, 2267, + 2268, 2279, 2280, 2281, 2282, 2286, 2277, 2283, 2281, 2287, + 2290, 2275, 2287, 2279, 2288, 2288, 2289, 2278, 2291, 2291, + 2294, 2297, 2280, 2292, 2282, 2286, 2283, 2292, 2290, 2295, + 2299, 2289, 2300, 2295, 2297, 2294, 2296, 2296, 2301, 2301, - 2301, 2302, 2306, 2306, 2307, 2297, 2298, 2308, 2309, 2310, - 2311, 2311, 2305, 2316, 2316, 2317, 2308, 2318, 2318, 2319, - 2320, 2310, 2321, 2324, 2309, 2322, 2323, 2323, 2326, 2326, - 2329, 2321, 2319, 2320, 2322, 2329, 2330, 2317, 2324, 2331, - 2332, 2330, 2333, 2334, 2336, 2332, 2335, 2614, 2338, 2339, - 2333, 2340, 2336, 2331, 2339, 2335, 2340, 2341, 2342, 2342, - 2343, 2343, 2334, 2338, 2344, 2345, 2346, 2347, 2348, 2614, - 2345, 2344, 2341, 2349, 2348, 2350, 2350, 2351, 2349, 2353, - 2353, 2352, 2354, 2354, 2346, 2347, 2352, 2357, 2358, 2358, - 2359, 2360, 2351, 2359, 2361, 2363, 2360, 2360, 2362, 2361, + 2304, 2303, 2305, 2306, 2306, 2307, 2305, 2308, 2308, 2304, + 2299, 2309, 2300, 2303, 2310, 2311, 2309, 2312, 2313, 2313, + 2318, 2318, 2319, 2310, 2307, 2320, 2320, 2321, 2322, 2312, + 2323, 2311, 2326, 2324, 2325, 2325, 2328, 2328, 2331, 2323, + 2321, 2322, 2324, 2331, 2319, 2332, 2333, 2326, 2334, 2335, + 2332, 2336, 2337, 2334, 2338, 2616, 2340, 2335, 2341, 2342, + 2333, 2337, 2338, 2341, 2342, 2343, 2344, 2344, 2345, 2345, + 2336, 2340, 2346, 2347, 2348, 2349, 2350, 2616, 2347, 2346, + 2343, 2351, 2350, 2352, 2352, 2353, 2351, 2355, 2355, 2354, + 2356, 2356, 2348, 2349, 2354, 2359, 2360, 2360, 2361, 2362, - 2357, 2363, 2364, 2362, 2365, 2366, 2364, 2367, 2368, 2365, - 2369, 2370, 2372, 2375, 2366, 2369, 2368, 2372, 2373, 2377, - 2379, 2373, 2367, 2370, 2377, 2375, 2378, 2380, 2381, 2387, - 2382, 2378, 2383, 2383, 2384, 2388, 2393, 2381, 2379, 2382, - 2380, 2389, 2391, 2384, 2390, 2390, 2395, 2392, 2387, 2394, - 2394, 2393, 2397, 2399, 2400, 2388, 2392, 2402, 2400, 0, - 2389, 2391, 2401, 2401, 2403, 2395, 2404, 2397, 2405, 2407, - 2403, 2410, 2404, 2399, 2405, 2406, 2406, 2407, 2408, 2411, - 2410, 2413, 2402, 2408, 2414, 2413, 2415, 2417, 2417, 2418, - 2418, 2427, 2411, 2419, 2419, 2421, 2421, 2423, 2414, 2422, + 2353, 2361, 2363, 2365, 2362, 2362, 2364, 2363, 2359, 2365, + 2366, 2364, 2367, 2368, 2366, 2369, 2370, 2367, 2371, 2372, + 2374, 2377, 2368, 2371, 2370, 2374, 2375, 2379, 2381, 2375, + 2369, 2372, 2379, 2377, 2380, 2382, 2383, 2389, 2384, 2380, + 2385, 2385, 2386, 2390, 2395, 2383, 2381, 2384, 2382, 2391, + 2393, 2386, 2392, 2392, 2397, 2394, 2389, 2396, 2396, 2395, + 2399, 2401, 2402, 2390, 2394, 2404, 2402, 0, 2391, 2393, + 2403, 2403, 2405, 2397, 2406, 2399, 2407, 2409, 2405, 2412, + 2406, 2401, 2407, 2408, 2408, 2409, 2410, 2413, 2412, 2415, + 2404, 2410, 2416, 2415, 2417, 2419, 2419, 2420, 2420, 2429, - 2432, 2415, 2423, 2422, 2425, 2425, 2429, 2428, 2430, 2433, - 2433, 2427, 2428, 2430, 2430, 2435, 2435, 2438, 2429, 2440, - 2432, 2436, 2436, 2437, 2442, 2446, 2437, 2443, 2443, 2448, - 2438, 2444, 2444, 2445, 2445, 2447, 2447, 2440, 2449, 2450, - 2446, 2451, 2448, 2457, 2442, 2452, 2452, 2451, 2453, 2456, - 2458, 2459, 2453, 2450, 2456, 2456, 2449, 2460, 2461, 2462, - 2472, 2463, 2477, 2460, 2461, 2463, 2457, 2464, 2464, 2467, - 2458, 2459, 2469, 2470, 2467, 2473, 2470, 2474, 2473, 2476, - 2469, 2475, 2477, 2480, 2462, 2472, 2475, 2478, 2479, 2479, - 2481, 2483, 2484, 2484, 2474, 2474, 2492, 2476, 2481, 2482, + 2413, 2421, 2421, 2423, 2423, 2425, 2416, 2424, 2434, 2417, + 2425, 2424, 2427, 2427, 2431, 2430, 2432, 2435, 2435, 2429, + 2430, 2432, 2432, 2437, 2437, 2440, 2431, 2442, 2434, 2438, + 2438, 2439, 2444, 2448, 2439, 2445, 2445, 2450, 2440, 2446, + 2446, 2447, 2447, 2449, 2449, 2442, 2451, 2452, 2448, 2453, + 2450, 2459, 2444, 2454, 2454, 2453, 2455, 2458, 2460, 2461, + 2455, 2452, 2458, 2458, 2451, 2462, 2463, 2464, 2474, 2465, + 2479, 2462, 2463, 2465, 2459, 2466, 2466, 2469, 2460, 2461, + 2471, 2472, 2469, 2475, 2472, 2476, 2475, 2478, 2471, 2477, + 2479, 2482, 2464, 2474, 2477, 2480, 2481, 2481, 2483, 2485, - 2489, 2478, 2480, 2491, 2482, 2482, 2485, 2485, 2486, 2486, - 2483, 2487, 2487, 2488, 2488, 2490, 2489, 2493, 2494, 2495, - 2490, 0, 2492, 2491, 2497, 2497, 2493, 2498, 2499, 2502, - 2498, 2501, 2501, 2503, 2503, 2504, 2502, 2511, 2494, 2495, - 2504, 2506, 2506, 2507, 2508, 2509, 2499, 2512, 2512, 2514, - 2515, 2517, 2507, 2508, 2509, 2511, 2513, 2516, 2514, 2518, - 2513, 2522, 2516, 2516, 2517, 2515, 2522, 2526, 2518, 2523, - 2523, 2525, 2525, 2527, 2528, 2530, 2531, 2534, 2535, 2536, - 2537, 2526, 2539, 2541, 2530, 2543, 2537, 2535, 2531, 2559, - 2543, 2544, 2528, 0, 2539, 2559, 2544, 2546, 2527, 2536, + 2486, 2486, 2476, 2476, 2494, 2478, 2483, 2484, 2491, 2480, + 2482, 2493, 2484, 2484, 2487, 2487, 2488, 2488, 2485, 2489, + 2489, 2490, 2490, 2492, 2491, 2495, 2496, 2497, 2492, 0, + 2494, 2493, 2499, 2499, 2495, 2500, 2501, 2504, 2500, 2503, + 2503, 2505, 2505, 2506, 2504, 2513, 2496, 2497, 2506, 2508, + 2508, 2509, 2510, 2511, 2501, 2514, 2514, 2516, 2517, 2519, + 2509, 2510, 2511, 2513, 2515, 2518, 2516, 2520, 2515, 2524, + 2518, 2518, 2519, 2517, 2524, 2528, 2520, 2525, 2525, 2527, + 2527, 2529, 2530, 2532, 2533, 2536, 2537, 2538, 2539, 2528, + 2541, 2543, 2532, 2545, 2539, 2537, 2533, 2561, 2545, 2546, - 2545, 2545, 2534, 2548, 2541, 2555, 2546, 2556, 2548, 2549, - 2549, 2551, 2551, 2549, 2552, 2552, 2553, 2553, 2554, 2557, - 2562, 2562, 2563, 2560, 2557, 2555, 2556, 2554, 2560, 2561, - 2564, 2565, 2566, 2567, 2561, 2568, 2565, 2569, 2569, 2567, - 2563, 2572, 2571, 2573, 2575, 2575, 2577, 2582, 2579, 2578, - 2566, 2564, 2579, 2581, 2585, 2580, 2572, 2583, 2587, 2577, - 2568, 2571, 2578, 2573, 2580, 2583, 2582, 2584, 2592, 2581, - 2586, 2586, 2584, 2589, 2589, 2590, 2590, 2587, 2594, 2594, - 2585, 2596, 2597, 2598, 2602, 2599, 2601, 2601, 2603, 2592, - 2599, 2604, 2606, 2606, 2607, 2608, 2608, 2596, 2597, 2598, + 2530, 0, 2541, 2561, 2546, 2548, 2529, 2538, 2547, 2547, + 2536, 2550, 2543, 2557, 2548, 2558, 2550, 2551, 2551, 2553, + 2553, 2551, 2554, 2554, 2555, 2555, 2556, 2559, 2564, 2564, + 2565, 2562, 2559, 2557, 2558, 2556, 2562, 2563, 2566, 2567, + 2568, 2569, 2563, 2570, 2567, 2571, 2571, 2569, 2565, 2574, + 2573, 2575, 2577, 2577, 2579, 2584, 2581, 2580, 2568, 2566, + 2581, 2583, 2587, 2582, 2574, 2585, 2589, 2579, 2570, 2573, + 2580, 2575, 2582, 2585, 2584, 2586, 2594, 2583, 2588, 2588, + 2586, 2591, 2591, 2592, 2592, 2589, 2596, 2596, 2587, 2598, + 2599, 2600, 2604, 2601, 2603, 2603, 2605, 2594, 2601, 2606, - 2611, 2612, 2615, 2615, 2602, 2616, 2616, 2612, 2607, 2613, - 2604, 2603, 2617, 2619, 2613, 2618, 2618, 2620, 2621, 2622, - 2611, 2623, 2624, 2625, 2619, 2622, 2620, 2626, 2626, 2632, - 2627, 2633, 2617, 2627, 2624, 2618, 2628, 2628, 2621, 2634, - 2623, 2632, 2637, 2625, 2638, 2634, 2635, 2635, 2637, 2636, - 2640, 2633, 2636, 2641, 2642, 2640, 2648, 2643, 2641, 2644, - 2645, 2645, 2638, 2643, 2647, 2647, 2651, 2651, 2654, 2649, - 2652, 2652, 2666, 2642, 2653, 2648, 2644, 2644, 2649, 2653, - 2655, 2664, 2654, 2656, 2656, 2655, 2657, 2657, 2658, 2658, - 2659, 2661, 2661, 2667, 2666, 2659, 2668, 2669, 2669, 2672, + 2608, 2608, 2609, 2610, 2610, 2598, 2599, 2600, 2613, 2614, + 2617, 2617, 2604, 2618, 2618, 2614, 2609, 2615, 2606, 2605, + 2619, 2621, 2615, 2620, 2620, 2622, 2623, 2624, 2613, 2625, + 2626, 2627, 2621, 2624, 2622, 2628, 2628, 2634, 2629, 2635, + 2619, 2629, 2626, 2620, 2630, 2630, 2623, 2636, 2625, 2634, + 2639, 2627, 2640, 2636, 2637, 2637, 2639, 2638, 2642, 2635, + 2638, 2643, 2644, 2642, 2650, 2645, 2643, 2646, 2647, 2647, + 2640, 2645, 2649, 2649, 2653, 2653, 2656, 2651, 2654, 2654, + 2668, 2644, 2655, 2650, 2646, 2646, 2651, 2655, 2657, 2666, + 2656, 2658, 2658, 2657, 2659, 2659, 2660, 2660, 2661, 2663, - 2664, 2671, 2671, 2673, 2677, 2674, 2675, 2675, 2678, 2740, - 2677, 2679, 2680, 2672, 2674, 2667, 2740, 2680, 2668, 2683, - 2683, 2685, 2685, 2673, 2686, 2687, 2688, 2690, 2678, 2686, - 2679, 2689, 2688, 2691, 2691, 2690, 2692, 2694, 2695, 2687, - 2696, 2692, 2697, 2689, 2698, 2696, 2701, 2700, 2702, 2703, - 2698, 2705, 2704, 0, 2697, 2700, 2706, 2694, 2695, 2707, - 2717, 2708, 2711, 2712, 2717, 2701, 2708, 2705, 2702, 2703, - 2704, 2715, 2715, 2706, 2706, 2727, 2712, 2716, 2716, 2727, - 2707, 2733, 2711, 2721, 2721, 2723, 2723, 2724, 2724, 2730, - 2724, 2725, 2725, 2734, 2725, 2726, 2726, 2731, 2726, 2729, + 2663, 2669, 2668, 2661, 2670, 2671, 2671, 2674, 2666, 2673, + 2673, 2675, 2679, 2676, 2677, 2677, 2680, 2742, 2679, 2681, + 2682, 2674, 2676, 2669, 2742, 2682, 2670, 2685, 2685, 2687, + 2687, 2675, 2688, 2689, 2690, 2692, 2680, 2688, 2681, 2691, + 2690, 2693, 2693, 2692, 2694, 2696, 2697, 2689, 2698, 2694, + 2699, 2691, 2700, 2698, 2703, 2702, 2704, 2705, 2700, 2707, + 2706, 0, 2699, 2702, 2708, 2696, 2697, 2709, 2719, 2710, + 2713, 2714, 2719, 2703, 2710, 2707, 2704, 2705, 2706, 2717, + 2717, 2708, 2708, 2729, 2714, 2718, 2718, 2729, 2709, 2735, + 2713, 2723, 2723, 2725, 2725, 2726, 2726, 2732, 2726, 2727, - 2729, 2733, 2739, 2735, 2736, 2736, 2741, 2730, 2735, 2742, - 2741, 2731, 2745, 2734, 2743, 2746, 2747, 2747, 2742, 2748, - 2748, 2749, 2749, 2750, 2746, 2752, 2751, 2739, 2755, 2743, - 2745, 2751, 2756, 2754, 2752, 2753, 2757, 2752, 2750, 2754, - 2753, 2753, 2760, 2758, 2759, 2761, 2761, 2756, 2758, 2759, - 2762, 2765, 2765, 2755, 2831, 2762, 2831, 2757, 2768, 2768, - 2780, 2760, 2769, 2769, 2770, 2770, 2771, 2771, 2772, 2772, - 2773, 2773, 2774, 2774, 2776, 2777, 2777, 2778, 2779, 2782, - 2780, 2783, 2783, 2776, 2784, 2786, 2778, 2785, 2787, 2787, - 2779, 2788, 2789, 2789, 2792, 2794, 2796, 2786, 2782, 2784, + 2727, 2736, 2727, 2728, 2728, 2733, 2728, 2731, 2731, 2735, + 2741, 2737, 2738, 2738, 2743, 2732, 2737, 2744, 2743, 2733, + 2747, 2736, 2745, 2748, 2749, 2749, 2744, 2750, 2750, 2751, + 2751, 2752, 2748, 2754, 2753, 2741, 2757, 2745, 2747, 2753, + 2758, 2756, 2754, 2755, 2759, 2754, 2752, 2756, 2755, 2755, + 2762, 2760, 2761, 2763, 2763, 2758, 2760, 2761, 2764, 2767, + 2767, 2757, 2833, 2764, 2833, 2759, 2770, 2770, 2782, 2762, + 2771, 2771, 2772, 2772, 2773, 2773, 2774, 2774, 2775, 2775, + 2776, 2776, 2778, 2779, 2779, 2780, 2781, 2784, 2782, 2785, + 2785, 2778, 2786, 2788, 2780, 2787, 2789, 2789, 2781, 2790, - 2785, 2793, 2795, 2795, 2793, 2798, 2788, 2799, 2798, 2800, - 2801, 2802, 2792, 2799, 2796, 2801, 2803, 2804, 2817, 2815, - 2806, 2794, 2815, 2800, 2818, 2818, 2819, 2819, 2820, 2820, - 2802, 2817, 2822, 2804, 2803, 2806, 2823, 2824, 2825, 2826, - 2828, 2824, 2830, 2829, 2832, 2823, 2835, 2830, 2833, 2833, - 2836, 2834, 2838, 2826, 2829, 2822, 2837, 2840, 2825, 2832, - 2839, 2841, 2842, 2828, 2834, 2835, 2846, 2842, 2836, 2847, - 2848, 2848, 2837, 2849, 2854, 2839, 2855, 2838, 2840, 2859, - 2846, 2841, 2849, 2850, 2850, 2851, 2851, 2852, 2852, 2847, - 2853, 2853, 2856, 2854, 2857, 2856, 2855, 2858, 2860, 2857, + 2791, 2791, 2794, 2796, 2798, 2788, 2784, 2786, 2787, 2795, + 2797, 2797, 2795, 2800, 2790, 2801, 2800, 2802, 2803, 2804, + 2794, 2801, 2798, 2803, 2805, 2806, 2819, 2817, 2808, 2796, + 2817, 2802, 2820, 2820, 2821, 2821, 2822, 2822, 2804, 2819, + 2824, 2806, 2805, 2808, 2825, 2826, 2827, 2828, 2830, 2826, + 2832, 2831, 2834, 2825, 2837, 2832, 2835, 2835, 2838, 2836, + 2840, 2828, 2831, 2824, 2839, 2842, 2827, 2834, 2841, 2843, + 2844, 2830, 2836, 2837, 2848, 2844, 2838, 2849, 2850, 2850, + 2839, 2851, 2856, 2841, 2857, 2840, 2842, 2861, 2848, 2843, + 2851, 2852, 2852, 2853, 2853, 2854, 2854, 2849, 2855, 2855, - 2861, 2862, 2858, 2863, 2859, 2865, 2861, 2864, 2864, 2866, - 2867, 2867, 2869, 2860, 2871, 2862, 2874, 2874, 2875, 2875, - 2865, 2876, 2877, 2863, 2878, 2879, 2880, 2869, 2866, 2876, - 2878, 2879, 2871, 2881, 2882, 2883, 2883, 2885, 2888, 2886, - 2880, 2877, 2891, 2889, 2892, 2893, 2881, 2889, 2894, 2892, - 2895, 2896, 2888, 2882, 2900, 2897, 0, 2901, 2885, 2886, - 2897, 2894, 2891, 2895, 2893, 2902, 2898, 2903, 2903, 2910, - 2896, 2898, 2904, 2905, 2900, 2901, 0, 2904, 2907, 2905, - 2906, 2906, 2908, 2907, 2902, 2909, 2911, 2908, 2910, 2917, - 2909, 2913, 2911, 2912, 2912, 2916, 2913, 2914, 2914, 2916, + 2858, 2856, 2859, 2858, 2857, 2860, 2862, 2859, 2863, 2864, + 2860, 2865, 2861, 2867, 2863, 2866, 2866, 2868, 2869, 2869, + 2871, 2862, 2873, 2864, 2876, 2876, 2877, 2877, 2867, 2878, + 2879, 2865, 2880, 2881, 2882, 2871, 2868, 2878, 2880, 2881, + 2873, 2883, 2884, 2885, 2885, 2887, 2890, 2888, 2882, 2879, + 2893, 2891, 2894, 2895, 2883, 2891, 2896, 2894, 2897, 2898, + 2890, 2884, 2902, 2899, 0, 2903, 2887, 2888, 2899, 2896, + 2893, 2897, 2895, 2904, 2900, 2905, 2905, 2912, 2898, 2900, + 2906, 2907, 2902, 2903, 0, 2906, 2909, 2907, 2908, 2908, + 2910, 2909, 2904, 2911, 2913, 2910, 2912, 2919, 2911, 2915, - 2918, 2919, 2920, 2921, 2922, 2923, 2930, 2918, 2917, 2921, - 2925, 2925, 2927, 2927, 2929, 2928, 2931, 2932, 2923, 2929, - 2919, 2920, 2937, 2922, 2928, 2930, 2934, 2928, 2933, 2933, - 2932, 2934, 2935, 2938, 2938, 2931, 2939, 2940, 2940, 2941, - 2941, 2942, 2943, 2944, 2951, 2935, 2942, 2946, 2937, 2943, - 2945, 2945, 2946, 2949, 2947, 2939, 2947, 2948, 2948, 2950, - 2949, 2953, 2944, 2951, 2952, 2956, 2950, 2955, 2955, 2952, - 2958, 2959, 2960, 2961, 2965, 2958, 2959, 2962, 2962, 2966, - 2953, 2964, 2964, 2969, 2956, 2967, 2967, 2968, 2968, 2979, - 2969, 2960, 2961, 2965, 2971, 2971, 2972, 2972, 2966, 2973, + 2913, 2914, 2914, 2918, 2915, 2916, 2916, 2918, 2920, 2921, + 2922, 2923, 2924, 2925, 2932, 2920, 2919, 2923, 2927, 2927, + 2929, 2929, 2931, 2930, 2933, 2934, 2925, 2931, 2921, 2922, + 2939, 2924, 2930, 2932, 2936, 2930, 2935, 2935, 2934, 2936, + 2937, 2940, 2940, 2933, 2941, 2942, 2942, 2943, 2943, 2944, + 2945, 2946, 2953, 2937, 2944, 2948, 2939, 2945, 2947, 2947, + 2948, 2951, 2949, 2941, 2949, 2950, 2950, 2952, 2951, 2955, + 2946, 2953, 2954, 2958, 2952, 2957, 2957, 2954, 2960, 2961, + 2962, 2963, 2967, 2960, 2961, 2964, 2964, 2968, 2955, 2966, + 2966, 2971, 2958, 2969, 2969, 2970, 2970, 2981, 2971, 2962, - 2975, 2980, 2978, 2981, 2981, 2975, 2973, 2978, 2979, 2982, - 2982, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2980, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2987, 2987, - 2987, 2987, 2987, 2987, 2987, 2988, 2988, 2988, 2988, 2988, - 2988, 2988, 2989, 2989, 2989, 2989, 2989, 2989, 2989, 2990, - 2990, 2990, 2990, 2990, 2990, 2990, 2992, 2992, 0, 2992, - 2992, 2992, 2992, 2993, 2993, 0, 0, 0, 2993, 2993, - 2994, 2994, 0, 0, 2994, 0, 2994, 2995, 0, 0, - 0, 0, 0, 2995, 2996, 2996, 0, 0, 0, 2996, - 2996, 2997, 0, 0, 0, 0, 0, 2997, 2998, 2998, + 2963, 2967, 2973, 2973, 2974, 2974, 2968, 2975, 2977, 2982, + 2980, 2983, 2983, 2977, 2975, 2980, 2981, 2984, 2984, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2982, 2988, + 2988, 2988, 2988, 2988, 2988, 2988, 2989, 2989, 2989, 2989, + 2989, 2989, 2989, 2990, 2990, 2990, 2990, 2990, 2990, 2990, + 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2992, 2992, 2992, + 2992, 2992, 2992, 2992, 2994, 2994, 0, 2994, 2994, 2994, + 2994, 2995, 2995, 0, 0, 0, 2995, 2995, 2996, 2996, + 0, 0, 2996, 0, 2996, 2997, 0, 0, 0, 0, + 0, 2997, 2998, 2998, 0, 0, 0, 2998, 2998, 2999, - 0, 2998, 2998, 2998, 2998, 2999, 2999, 0, 2999, 2999, - 2999, 2999, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, - 2985, 2985, 2985 + 0, 0, 0, 0, 0, 2999, 3000, 3000, 0, 3000, + 3000, 3000, 3000, 3001, 3001, 0, 3001, 3001, 3001, 3001, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2987, + 2987 } ; static yy_state_type yy_last_accepting_state; @@ -2895,7 +2899,7 @@ static void config_end_include(void) } #endif -#line 2896 "" +#line 2900 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2904,9 +2908,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2905 "" +#line 2909 "" -#line 2907 "" +#line 2911 "" #define INITIAL 0 #define quotedstring 1 @@ -3128,7 +3132,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3129 "" +#line 3133 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3161,13 +3165,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2986 ) + if ( yy_current_state >= 2988 ) 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] != 5813 ); + while ( yy_base[yy_current_state] != 5821 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3272,52 +3276,52 @@ YY_RULE_SETUP case 16: YY_RULE_SETUP #line 223 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFER_IP6) } +{ YDVAR(1, VAR_PREFER_IP4) } YY_BREAK case 17: YY_RULE_SETUP #line 224 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_UDP) } +{ YDVAR(1, VAR_PREFER_IP6) } YY_BREAK case 18: YY_RULE_SETUP #line 225 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_TCP) } +{ YDVAR(1, VAR_DO_UDP) } YY_BREAK case 19: YY_RULE_SETUP #line 226 "./util/configlexer.lex" -{ YDVAR(1, VAR_TCP_UPSTREAM) } +{ YDVAR(1, VAR_DO_TCP) } YY_BREAK case 20: YY_RULE_SETUP #line 227 "./util/configlexer.lex" -{ YDVAR(1, VAR_TCP_MSS) } +{ YDVAR(1, VAR_TCP_UPSTREAM) } YY_BREAK case 21: YY_RULE_SETUP #line 228 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_TCP_MSS) } +{ YDVAR(1, VAR_TCP_MSS) } YY_BREAK case 22: YY_RULE_SETUP #line 229 "./util/configlexer.lex" -{ YDVAR(1, VAR_TCP_IDLE_TIMEOUT) } +{ YDVAR(1, VAR_OUTGOING_TCP_MSS) } YY_BREAK case 23: YY_RULE_SETUP #line 230 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) } +{ YDVAR(1, VAR_TCP_IDLE_TIMEOUT) } YY_BREAK case 24: YY_RULE_SETUP #line 231 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) } +{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) } YY_BREAK case 25: YY_RULE_SETUP #line 232 "./util/configlexer.lex" -{ YDVAR(1, VAR_SSL_UPSTREAM) } +{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) } YY_BREAK case 26: YY_RULE_SETUP @@ -3327,7 +3331,7 @@ YY_RULE_SETUP case 27: YY_RULE_SETUP #line 234 "./util/configlexer.lex" -{ YDVAR(1, VAR_SSL_SERVICE_KEY) } +{ YDVAR(1, VAR_SSL_UPSTREAM) } YY_BREAK case 28: YY_RULE_SETUP @@ -3337,7 +3341,7 @@ YY_RULE_SETUP case 29: YY_RULE_SETUP #line 236 "./util/configlexer.lex" -{ YDVAR(1, VAR_SSL_SERVICE_PEM) } +{ YDVAR(1, VAR_SSL_SERVICE_KEY) } YY_BREAK case 30: YY_RULE_SETUP @@ -3347,7 +3351,7 @@ YY_RULE_SETUP case 31: YY_RULE_SETUP #line 238 "./util/configlexer.lex" -{ YDVAR(1, VAR_SSL_PORT) } +{ YDVAR(1, VAR_SSL_SERVICE_PEM) } YY_BREAK case 32: YY_RULE_SETUP @@ -3357,7 +3361,7 @@ YY_RULE_SETUP case 33: YY_RULE_SETUP #line 240 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_SSL_PORT) } YY_BREAK case 34: YY_RULE_SETUP @@ -3367,12 +3371,12 @@ YY_RULE_SETUP case 35: YY_RULE_SETUP #line 242 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_WIN_CERT) } +{ YDVAR(1, VAR_TLS_CERT_BUNDLE) } YY_BREAK case 36: YY_RULE_SETUP #line 243 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } +{ YDVAR(1, VAR_TLS_WIN_CERT) } YY_BREAK case 37: YY_RULE_SETUP @@ -3392,32 +3396,32 @@ YY_RULE_SETUP case 40: YY_RULE_SETUP #line 247 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 41: YY_RULE_SETUP #line 248 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_CIPHERS) } +{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } YY_BREAK case 42: YY_RULE_SETUP #line 249 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_CIPHERSUITES) } +{ YDVAR(1, VAR_TLS_CIPHERS) } YY_BREAK case 43: YY_RULE_SETUP #line 250 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_TLS_CIPHERSUITES) } YY_BREAK case 44: YY_RULE_SETUP #line 251 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 45: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 46: YY_RULE_SETUP @@ -3427,282 +3431,282 @@ YY_RULE_SETUP case 47: YY_RULE_SETUP #line 254 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 48: YY_RULE_SETUP #line 255 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 49: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 50: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 51: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 52: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 53: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 54: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 55: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 56: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 57: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 58: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 59: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 60: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 61: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 62: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 63: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 64: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 65: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 66: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 67: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 68: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 69: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 70: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 71: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 72: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 73: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 74: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 75: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 76: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 77: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 78: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 79: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 80: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 81: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 82: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 83: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 84: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 85: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 86: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 87: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 88: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 89: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 90: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 91: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 92: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 93: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 94: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 95: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 96: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 97: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 98: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 99: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 100: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 101: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 102: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 103: YY_RULE_SETUP @@ -3712,32 +3716,32 @@ YY_RULE_SETUP case 104: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 105: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 106: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 107: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 108: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 109: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 110: YY_RULE_SETUP @@ -3747,699 +3751,699 @@ YY_RULE_SETUP case 111: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 112: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 113: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 114: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 115: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 116: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 117: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 118: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 119: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 120: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 121: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 122: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 123: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 125: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 126: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 127: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 128: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 129: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 130: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 131: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 132: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 133: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 134: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 135: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 136: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 137: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 138: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 139: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 140: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 141: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 142: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 143: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 144: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 145: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 146: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 147: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 148: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 149: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 153: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 154: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 155: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 156: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 157: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 158: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 159: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 160: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 161: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 162: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 163: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 164: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 165: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 166: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 167: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 168: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 169: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 170: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 171: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 172: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 173: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 174: YY_RULE_SETUP -#line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 381 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 175: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 176: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 177: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 230: YY_RULE_SETUP -#line 439 "./util/configlexer.lex" +#line 438 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 231: YY_RULE_SETUP -#line 441 "./util/configlexer.lex" +#line 440 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 232: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" +#line 442 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 233: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" +#line 444 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 234: YY_RULE_SETUP -#line 447 "./util/configlexer.lex" +#line 446 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 235: YY_RULE_SETUP -#line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 448 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 236: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 237: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 238: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 239: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 240: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 241: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 242: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 243: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 244: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 245: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 246: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 247: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 248: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 249: YY_RULE_SETUP @@ -4454,195 +4458,200 @@ YY_RULE_SETUP case 251: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 252: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 253: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 254: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 255: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 256: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 257: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 258: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 259: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 260: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 261: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 262: YY_RULE_SETUP -#line 477 "./util/configlexer.lex" +#line 476 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 263: YY_RULE_SETUP -#line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 478 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 270: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 271: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 272: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 273: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 274: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 275: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 276: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 277: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 278: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 279: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 280: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 281: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 282: -/* rule 282 can match eol */ YY_RULE_SETUP #line 498 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 283: +/* rule 283 can match eol */ +YY_RULE_SETUP +#line 499 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 283: +case 284: YY_RULE_SETUP -#line 501 "./util/configlexer.lex" +#line 502 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 502 "./util/configlexer.lex" +#line 503 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 284: -YY_RULE_SETUP -#line 507 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 285: -/* rule 285 can match eol */ YY_RULE_SETUP #line 508 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 286: +/* rule 286 can match eol */ +YY_RULE_SETUP +#line 509 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 286: +case 287: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" +#line 511 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4655,34 +4664,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 287: +case 288: YY_RULE_SETUP -#line 522 "./util/configlexer.lex" +#line 523 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 523 "./util/configlexer.lex" +#line 524 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 288: -YY_RULE_SETUP -#line 528 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 289: -/* rule 289 can match eol */ YY_RULE_SETUP #line 529 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 290: +/* rule 290 can match eol */ +YY_RULE_SETUP +#line 530 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 290: +case 291: YY_RULE_SETUP -#line 531 "./util/configlexer.lex" +#line 532 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4695,38 +4704,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 291: +case 292: YY_RULE_SETUP -#line 543 "./util/configlexer.lex" +#line 544 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 545 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 292: -YY_RULE_SETUP -#line 549 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 293: -/* rule 293 can match eol */ YY_RULE_SETUP #line 550 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 294: +/* rule 294 can match eol */ YY_RULE_SETUP #line 551 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 295: YY_RULE_SETUP #line 552 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 296: +YY_RULE_SETUP +#line 553 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4734,27 +4743,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 557 "./util/configlexer.lex" +#line 558 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 296: -YY_RULE_SETUP -#line 561 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 297: -/* rule 297 can match eol */ YY_RULE_SETUP #line 562 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 298: +/* rule 298 can match eol */ +YY_RULE_SETUP +#line 563 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 298: +case 299: YY_RULE_SETUP -#line 564 "./util/configlexer.lex" +#line 565 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4764,7 +4773,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 570 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4776,33 +4785,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 299: +case 300: YY_RULE_SETUP -#line 581 "./util/configlexer.lex" +#line 582 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 300: +case 301: YY_RULE_SETUP -#line 585 "./util/configlexer.lex" +#line 586 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 301: +case 302: YY_RULE_SETUP -#line 589 "./util/configlexer.lex" +#line 590 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 302: +case 303: YY_RULE_SETUP -#line 593 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4803 "" +#line 4812 "" case YY_END_OF_BUFFER: { @@ -5097,7 +5106,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2986 ) + if ( yy_current_state >= 2988 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5125,11 +5134,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2986 ) + if ( yy_current_state >= 2988 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2985); + yy_is_jam = (yy_current_state == 2987); return yy_is_jam ? 0 : yy_current_state; } @@ -5768,6 +5777,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 593 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index deedffa58..c98f097a0 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -220,6 +220,7 @@ outgoing-num-tcp{COLON} { YDVAR(1, VAR_OUTGOING_NUM_TCP) } incoming-num-tcp{COLON} { YDVAR(1, VAR_INCOMING_NUM_TCP) } do-ip4{COLON} { YDVAR(1, VAR_DO_IP4) } do-ip6{COLON} { YDVAR(1, VAR_DO_IP6) } +prefer-ip4{COLON} { YDVAR(1, VAR_PREFER_IP4) } prefer-ip6{COLON} { YDVAR(1, VAR_PREFER_IP6) } do-udp{COLON} { YDVAR(1, VAR_DO_UDP) } do-tcp{COLON} { YDVAR(1, VAR_DO_TCP) } diff --git a/util/configparser.c b/util/configparser.c index 69ee1cc1c..c53aea9eb 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -148,267 +148,268 @@ extern int yydebug; VAR_PORT = 269, VAR_OUTGOING_RANGE = 270, VAR_INTERFACE = 271, - VAR_DO_IP4 = 272, - VAR_DO_IP6 = 273, - VAR_PREFER_IP6 = 274, - VAR_DO_UDP = 275, - VAR_DO_TCP = 276, - VAR_TCP_MSS = 277, - VAR_OUTGOING_TCP_MSS = 278, - VAR_TCP_IDLE_TIMEOUT = 279, - VAR_EDNS_TCP_KEEPALIVE = 280, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 281, - VAR_CHROOT = 282, - VAR_USERNAME = 283, - VAR_DIRECTORY = 284, - VAR_LOGFILE = 285, - VAR_PIDFILE = 286, - VAR_MSG_CACHE_SIZE = 287, - VAR_MSG_CACHE_SLABS = 288, - VAR_NUM_QUERIES_PER_THREAD = 289, - VAR_RRSET_CACHE_SIZE = 290, - VAR_RRSET_CACHE_SLABS = 291, - VAR_OUTGOING_NUM_TCP = 292, - VAR_INFRA_HOST_TTL = 293, - VAR_INFRA_LAME_TTL = 294, - VAR_INFRA_CACHE_SLABS = 295, - VAR_INFRA_CACHE_NUMHOSTS = 296, - VAR_INFRA_CACHE_LAME_SIZE = 297, - VAR_NAME = 298, - VAR_STUB_ZONE = 299, - VAR_STUB_HOST = 300, - VAR_STUB_ADDR = 301, - VAR_TARGET_FETCH_POLICY = 302, - VAR_HARDEN_SHORT_BUFSIZE = 303, - VAR_HARDEN_LARGE_QUERIES = 304, - VAR_FORWARD_ZONE = 305, - VAR_FORWARD_HOST = 306, - VAR_FORWARD_ADDR = 307, - VAR_DO_NOT_QUERY_ADDRESS = 308, - VAR_HIDE_IDENTITY = 309, - VAR_HIDE_VERSION = 310, - VAR_IDENTITY = 311, - VAR_VERSION = 312, - VAR_HARDEN_GLUE = 313, - VAR_MODULE_CONF = 314, - VAR_TRUST_ANCHOR_FILE = 315, - VAR_TRUST_ANCHOR = 316, - VAR_VAL_OVERRIDE_DATE = 317, - VAR_BOGUS_TTL = 318, - VAR_VAL_CLEAN_ADDITIONAL = 319, - VAR_VAL_PERMISSIVE_MODE = 320, - VAR_INCOMING_NUM_TCP = 321, - VAR_MSG_BUFFER_SIZE = 322, - VAR_KEY_CACHE_SIZE = 323, - VAR_KEY_CACHE_SLABS = 324, - VAR_TRUSTED_KEYS_FILE = 325, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 326, - VAR_USE_SYSLOG = 327, - VAR_OUTGOING_INTERFACE = 328, - VAR_ROOT_HINTS = 329, - VAR_DO_NOT_QUERY_LOCALHOST = 330, - VAR_CACHE_MAX_TTL = 331, - VAR_HARDEN_DNSSEC_STRIPPED = 332, - VAR_ACCESS_CONTROL = 333, - VAR_LOCAL_ZONE = 334, - VAR_LOCAL_DATA = 335, - VAR_INTERFACE_AUTOMATIC = 336, - VAR_STATISTICS_INTERVAL = 337, - VAR_DO_DAEMONIZE = 338, - VAR_USE_CAPS_FOR_ID = 339, - VAR_STATISTICS_CUMULATIVE = 340, - VAR_OUTGOING_PORT_PERMIT = 341, - VAR_OUTGOING_PORT_AVOID = 342, - VAR_DLV_ANCHOR_FILE = 343, - VAR_DLV_ANCHOR = 344, - VAR_NEG_CACHE_SIZE = 345, - VAR_HARDEN_REFERRAL_PATH = 346, - VAR_PRIVATE_ADDRESS = 347, - VAR_PRIVATE_DOMAIN = 348, - VAR_REMOTE_CONTROL = 349, - VAR_CONTROL_ENABLE = 350, - VAR_CONTROL_INTERFACE = 351, - VAR_CONTROL_PORT = 352, - VAR_SERVER_KEY_FILE = 353, - VAR_SERVER_CERT_FILE = 354, - VAR_CONTROL_KEY_FILE = 355, - VAR_CONTROL_CERT_FILE = 356, - VAR_CONTROL_USE_CERT = 357, - VAR_EXTENDED_STATISTICS = 358, - VAR_LOCAL_DATA_PTR = 359, - VAR_JOSTLE_TIMEOUT = 360, - VAR_STUB_PRIME = 361, - VAR_UNWANTED_REPLY_THRESHOLD = 362, - VAR_LOG_TIME_ASCII = 363, - VAR_DOMAIN_INSECURE = 364, - VAR_PYTHON = 365, - VAR_PYTHON_SCRIPT = 366, - VAR_VAL_SIG_SKEW_MIN = 367, - VAR_VAL_SIG_SKEW_MAX = 368, - VAR_CACHE_MIN_TTL = 369, - VAR_VAL_LOG_LEVEL = 370, - VAR_AUTO_TRUST_ANCHOR_FILE = 371, - VAR_KEEP_MISSING = 372, - VAR_ADD_HOLDDOWN = 373, - VAR_DEL_HOLDDOWN = 374, - VAR_SO_RCVBUF = 375, - VAR_EDNS_BUFFER_SIZE = 376, - VAR_PREFETCH = 377, - VAR_PREFETCH_KEY = 378, - VAR_SO_SNDBUF = 379, - VAR_SO_REUSEPORT = 380, - VAR_HARDEN_BELOW_NXDOMAIN = 381, - VAR_IGNORE_CD_FLAG = 382, - VAR_LOG_QUERIES = 383, - VAR_LOG_REPLIES = 384, - VAR_LOG_LOCAL_ACTIONS = 385, - VAR_TCP_UPSTREAM = 386, - VAR_SSL_UPSTREAM = 387, - VAR_SSL_SERVICE_KEY = 388, - VAR_SSL_SERVICE_PEM = 389, - VAR_SSL_PORT = 390, - VAR_FORWARD_FIRST = 391, - VAR_STUB_SSL_UPSTREAM = 392, - VAR_FORWARD_SSL_UPSTREAM = 393, - VAR_TLS_CERT_BUNDLE = 394, - VAR_STUB_FIRST = 395, - VAR_MINIMAL_RESPONSES = 396, - VAR_RRSET_ROUNDROBIN = 397, - VAR_MAX_UDP_SIZE = 398, - VAR_DELAY_CLOSE = 399, - VAR_UNBLOCK_LAN_ZONES = 400, - VAR_INSECURE_LAN_ZONES = 401, - VAR_INFRA_CACHE_MIN_RTT = 402, - VAR_DNS64_PREFIX = 403, - VAR_DNS64_SYNTHALL = 404, - VAR_DNS64_IGNORE_AAAA = 405, - VAR_DNSTAP = 406, - VAR_DNSTAP_ENABLE = 407, - VAR_DNSTAP_SOCKET_PATH = 408, - VAR_DNSTAP_SEND_IDENTITY = 409, - VAR_DNSTAP_SEND_VERSION = 410, - VAR_DNSTAP_IDENTITY = 411, - VAR_DNSTAP_VERSION = 412, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 413, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 414, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 415, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 416, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 417, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 418, - VAR_RESPONSE_IP_TAG = 419, - VAR_RESPONSE_IP = 420, - VAR_RESPONSE_IP_DATA = 421, - VAR_HARDEN_ALGO_DOWNGRADE = 422, - VAR_IP_TRANSPARENT = 423, - VAR_DISABLE_DNSSEC_LAME_CHECK = 424, - VAR_IP_RATELIMIT = 425, - VAR_IP_RATELIMIT_SLABS = 426, - VAR_IP_RATELIMIT_SIZE = 427, - VAR_RATELIMIT = 428, - VAR_RATELIMIT_SLABS = 429, - VAR_RATELIMIT_SIZE = 430, - VAR_RATELIMIT_FOR_DOMAIN = 431, - VAR_RATELIMIT_BELOW_DOMAIN = 432, - VAR_IP_RATELIMIT_FACTOR = 433, - VAR_RATELIMIT_FACTOR = 434, - VAR_SEND_CLIENT_SUBNET = 435, - VAR_CLIENT_SUBNET_ZONE = 436, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 437, - VAR_CLIENT_SUBNET_OPCODE = 438, - VAR_MAX_CLIENT_SUBNET_IPV4 = 439, - VAR_MAX_CLIENT_SUBNET_IPV6 = 440, - VAR_MIN_CLIENT_SUBNET_IPV4 = 441, - VAR_MIN_CLIENT_SUBNET_IPV6 = 442, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 443, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 444, - VAR_CAPS_WHITELIST = 445, - VAR_CACHE_MAX_NEGATIVE_TTL = 446, - VAR_PERMIT_SMALL_HOLDDOWN = 447, - VAR_QNAME_MINIMISATION = 448, - VAR_QNAME_MINIMISATION_STRICT = 449, - VAR_IP_FREEBIND = 450, - VAR_DEFINE_TAG = 451, - VAR_LOCAL_ZONE_TAG = 452, - VAR_ACCESS_CONTROL_TAG = 453, - VAR_LOCAL_ZONE_OVERRIDE = 454, - VAR_ACCESS_CONTROL_TAG_ACTION = 455, - VAR_ACCESS_CONTROL_TAG_DATA = 456, - VAR_VIEW = 457, - VAR_ACCESS_CONTROL_VIEW = 458, - VAR_VIEW_FIRST = 459, - VAR_SERVE_EXPIRED = 460, - VAR_SERVE_EXPIRED_TTL = 461, - VAR_SERVE_EXPIRED_TTL_RESET = 462, - VAR_SERVE_EXPIRED_REPLY_TTL = 463, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 464, - VAR_FAKE_DSA = 465, - VAR_FAKE_SHA1 = 466, - VAR_LOG_IDENTITY = 467, - VAR_HIDE_TRUSTANCHOR = 468, - VAR_TRUST_ANCHOR_SIGNALING = 469, - VAR_AGGRESSIVE_NSEC = 470, - VAR_USE_SYSTEMD = 471, - VAR_SHM_ENABLE = 472, - VAR_SHM_KEY = 473, - VAR_ROOT_KEY_SENTINEL = 474, - VAR_DNSCRYPT = 475, - VAR_DNSCRYPT_ENABLE = 476, - VAR_DNSCRYPT_PORT = 477, - VAR_DNSCRYPT_PROVIDER = 478, - VAR_DNSCRYPT_SECRET_KEY = 479, - VAR_DNSCRYPT_PROVIDER_CERT = 480, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 481, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 482, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 483, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 484, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 485, - VAR_IPSECMOD_ENABLED = 486, - VAR_IPSECMOD_HOOK = 487, - VAR_IPSECMOD_IGNORE_BOGUS = 488, - VAR_IPSECMOD_MAX_TTL = 489, - VAR_IPSECMOD_WHITELIST = 490, - VAR_IPSECMOD_STRICT = 491, - VAR_CACHEDB = 492, - VAR_CACHEDB_BACKEND = 493, - VAR_CACHEDB_SECRETSEED = 494, - VAR_CACHEDB_REDISHOST = 495, - VAR_CACHEDB_REDISPORT = 496, - VAR_CACHEDB_REDISTIMEOUT = 497, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 498, - VAR_FOR_UPSTREAM = 499, - VAR_AUTH_ZONE = 500, - VAR_ZONEFILE = 501, - VAR_MASTER = 502, - VAR_URL = 503, - VAR_FOR_DOWNSTREAM = 504, - VAR_FALLBACK_ENABLED = 505, - VAR_TLS_ADDITIONAL_PORT = 506, - VAR_LOW_RTT = 507, - VAR_LOW_RTT_PERMIL = 508, - VAR_FAST_SERVER_PERMIL = 509, - VAR_FAST_SERVER_NUM = 510, - VAR_ALLOW_NOTIFY = 511, - VAR_TLS_WIN_CERT = 512, - VAR_TCP_CONNECTION_LIMIT = 513, - VAR_FORWARD_NO_CACHE = 514, - VAR_STUB_NO_CACHE = 515, - VAR_LOG_SERVFAIL = 516, - VAR_DENY_ANY = 517, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 518, - VAR_LOG_TAG_QUERYREPLY = 519, - VAR_STREAM_WAIT_SIZE = 520, - VAR_TLS_CIPHERS = 521, - VAR_TLS_CIPHERSUITES = 522, - VAR_IPSET = 523, - VAR_IPSET_NAME_V4 = 524, - VAR_IPSET_NAME_V6 = 525, - VAR_TLS_SESSION_TICKET_KEYS = 526, - VAR_RPZ = 527, - VAR_TAGS = 528, - VAR_RPZ_ACTION_OVERRIDE = 529, - VAR_RPZ_CNAME_OVERRIDE = 530, - VAR_RPZ_LOG = 531, - VAR_RPZ_LOG_NAME = 532 + VAR_PREFER_IP4 = 272, + VAR_DO_IP4 = 273, + VAR_DO_IP6 = 274, + VAR_PREFER_IP6 = 275, + VAR_DO_UDP = 276, + VAR_DO_TCP = 277, + VAR_TCP_MSS = 278, + VAR_OUTGOING_TCP_MSS = 279, + VAR_TCP_IDLE_TIMEOUT = 280, + VAR_EDNS_TCP_KEEPALIVE = 281, + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, + VAR_CHROOT = 283, + VAR_USERNAME = 284, + VAR_DIRECTORY = 285, + VAR_LOGFILE = 286, + VAR_PIDFILE = 287, + VAR_MSG_CACHE_SIZE = 288, + VAR_MSG_CACHE_SLABS = 289, + VAR_NUM_QUERIES_PER_THREAD = 290, + VAR_RRSET_CACHE_SIZE = 291, + VAR_RRSET_CACHE_SLABS = 292, + VAR_OUTGOING_NUM_TCP = 293, + VAR_INFRA_HOST_TTL = 294, + VAR_INFRA_LAME_TTL = 295, + VAR_INFRA_CACHE_SLABS = 296, + VAR_INFRA_CACHE_NUMHOSTS = 297, + VAR_INFRA_CACHE_LAME_SIZE = 298, + VAR_NAME = 299, + VAR_STUB_ZONE = 300, + VAR_STUB_HOST = 301, + VAR_STUB_ADDR = 302, + VAR_TARGET_FETCH_POLICY = 303, + VAR_HARDEN_SHORT_BUFSIZE = 304, + VAR_HARDEN_LARGE_QUERIES = 305, + VAR_FORWARD_ZONE = 306, + VAR_FORWARD_HOST = 307, + VAR_FORWARD_ADDR = 308, + VAR_DO_NOT_QUERY_ADDRESS = 309, + VAR_HIDE_IDENTITY = 310, + VAR_HIDE_VERSION = 311, + VAR_IDENTITY = 312, + VAR_VERSION = 313, + VAR_HARDEN_GLUE = 314, + VAR_MODULE_CONF = 315, + VAR_TRUST_ANCHOR_FILE = 316, + VAR_TRUST_ANCHOR = 317, + VAR_VAL_OVERRIDE_DATE = 318, + VAR_BOGUS_TTL = 319, + VAR_VAL_CLEAN_ADDITIONAL = 320, + VAR_VAL_PERMISSIVE_MODE = 321, + VAR_INCOMING_NUM_TCP = 322, + VAR_MSG_BUFFER_SIZE = 323, + VAR_KEY_CACHE_SIZE = 324, + VAR_KEY_CACHE_SLABS = 325, + VAR_TRUSTED_KEYS_FILE = 326, + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, + VAR_USE_SYSLOG = 328, + VAR_OUTGOING_INTERFACE = 329, + VAR_ROOT_HINTS = 330, + VAR_DO_NOT_QUERY_LOCALHOST = 331, + VAR_CACHE_MAX_TTL = 332, + VAR_HARDEN_DNSSEC_STRIPPED = 333, + VAR_ACCESS_CONTROL = 334, + VAR_LOCAL_ZONE = 335, + VAR_LOCAL_DATA = 336, + VAR_INTERFACE_AUTOMATIC = 337, + VAR_STATISTICS_INTERVAL = 338, + VAR_DO_DAEMONIZE = 339, + VAR_USE_CAPS_FOR_ID = 340, + VAR_STATISTICS_CUMULATIVE = 341, + VAR_OUTGOING_PORT_PERMIT = 342, + VAR_OUTGOING_PORT_AVOID = 343, + VAR_DLV_ANCHOR_FILE = 344, + VAR_DLV_ANCHOR = 345, + VAR_NEG_CACHE_SIZE = 346, + VAR_HARDEN_REFERRAL_PATH = 347, + VAR_PRIVATE_ADDRESS = 348, + VAR_PRIVATE_DOMAIN = 349, + VAR_REMOTE_CONTROL = 350, + VAR_CONTROL_ENABLE = 351, + VAR_CONTROL_INTERFACE = 352, + VAR_CONTROL_PORT = 353, + VAR_SERVER_KEY_FILE = 354, + VAR_SERVER_CERT_FILE = 355, + VAR_CONTROL_KEY_FILE = 356, + VAR_CONTROL_CERT_FILE = 357, + VAR_CONTROL_USE_CERT = 358, + VAR_EXTENDED_STATISTICS = 359, + VAR_LOCAL_DATA_PTR = 360, + VAR_JOSTLE_TIMEOUT = 361, + VAR_STUB_PRIME = 362, + VAR_UNWANTED_REPLY_THRESHOLD = 363, + VAR_LOG_TIME_ASCII = 364, + VAR_DOMAIN_INSECURE = 365, + VAR_PYTHON = 366, + VAR_PYTHON_SCRIPT = 367, + VAR_VAL_SIG_SKEW_MIN = 368, + VAR_VAL_SIG_SKEW_MAX = 369, + VAR_CACHE_MIN_TTL = 370, + VAR_VAL_LOG_LEVEL = 371, + VAR_AUTO_TRUST_ANCHOR_FILE = 372, + VAR_KEEP_MISSING = 373, + VAR_ADD_HOLDDOWN = 374, + VAR_DEL_HOLDDOWN = 375, + VAR_SO_RCVBUF = 376, + VAR_EDNS_BUFFER_SIZE = 377, + VAR_PREFETCH = 378, + VAR_PREFETCH_KEY = 379, + VAR_SO_SNDBUF = 380, + VAR_SO_REUSEPORT = 381, + VAR_HARDEN_BELOW_NXDOMAIN = 382, + VAR_IGNORE_CD_FLAG = 383, + VAR_LOG_QUERIES = 384, + VAR_LOG_REPLIES = 385, + VAR_LOG_LOCAL_ACTIONS = 386, + VAR_TCP_UPSTREAM = 387, + VAR_SSL_UPSTREAM = 388, + VAR_SSL_SERVICE_KEY = 389, + VAR_SSL_SERVICE_PEM = 390, + VAR_SSL_PORT = 391, + VAR_FORWARD_FIRST = 392, + VAR_STUB_SSL_UPSTREAM = 393, + VAR_FORWARD_SSL_UPSTREAM = 394, + VAR_TLS_CERT_BUNDLE = 395, + VAR_STUB_FIRST = 396, + VAR_MINIMAL_RESPONSES = 397, + VAR_RRSET_ROUNDROBIN = 398, + VAR_MAX_UDP_SIZE = 399, + VAR_DELAY_CLOSE = 400, + VAR_UNBLOCK_LAN_ZONES = 401, + VAR_INSECURE_LAN_ZONES = 402, + VAR_INFRA_CACHE_MIN_RTT = 403, + VAR_DNS64_PREFIX = 404, + VAR_DNS64_SYNTHALL = 405, + VAR_DNS64_IGNORE_AAAA = 406, + VAR_DNSTAP = 407, + VAR_DNSTAP_ENABLE = 408, + VAR_DNSTAP_SOCKET_PATH = 409, + VAR_DNSTAP_SEND_IDENTITY = 410, + VAR_DNSTAP_SEND_VERSION = 411, + VAR_DNSTAP_IDENTITY = 412, + VAR_DNSTAP_VERSION = 413, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 414, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 415, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 416, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 417, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 418, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 419, + VAR_RESPONSE_IP_TAG = 420, + VAR_RESPONSE_IP = 421, + VAR_RESPONSE_IP_DATA = 422, + VAR_HARDEN_ALGO_DOWNGRADE = 423, + VAR_IP_TRANSPARENT = 424, + VAR_DISABLE_DNSSEC_LAME_CHECK = 425, + VAR_IP_RATELIMIT = 426, + VAR_IP_RATELIMIT_SLABS = 427, + VAR_IP_RATELIMIT_SIZE = 428, + VAR_RATELIMIT = 429, + VAR_RATELIMIT_SLABS = 430, + VAR_RATELIMIT_SIZE = 431, + VAR_RATELIMIT_FOR_DOMAIN = 432, + VAR_RATELIMIT_BELOW_DOMAIN = 433, + VAR_IP_RATELIMIT_FACTOR = 434, + VAR_RATELIMIT_FACTOR = 435, + VAR_SEND_CLIENT_SUBNET = 436, + VAR_CLIENT_SUBNET_ZONE = 437, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 438, + VAR_CLIENT_SUBNET_OPCODE = 439, + VAR_MAX_CLIENT_SUBNET_IPV4 = 440, + VAR_MAX_CLIENT_SUBNET_IPV6 = 441, + VAR_MIN_CLIENT_SUBNET_IPV4 = 442, + VAR_MIN_CLIENT_SUBNET_IPV6 = 443, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 444, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 445, + VAR_CAPS_WHITELIST = 446, + VAR_CACHE_MAX_NEGATIVE_TTL = 447, + VAR_PERMIT_SMALL_HOLDDOWN = 448, + VAR_QNAME_MINIMISATION = 449, + VAR_QNAME_MINIMISATION_STRICT = 450, + VAR_IP_FREEBIND = 451, + VAR_DEFINE_TAG = 452, + VAR_LOCAL_ZONE_TAG = 453, + VAR_ACCESS_CONTROL_TAG = 454, + VAR_LOCAL_ZONE_OVERRIDE = 455, + VAR_ACCESS_CONTROL_TAG_ACTION = 456, + VAR_ACCESS_CONTROL_TAG_DATA = 457, + VAR_VIEW = 458, + VAR_ACCESS_CONTROL_VIEW = 459, + VAR_VIEW_FIRST = 460, + VAR_SERVE_EXPIRED = 461, + VAR_SERVE_EXPIRED_TTL = 462, + VAR_SERVE_EXPIRED_TTL_RESET = 463, + VAR_SERVE_EXPIRED_REPLY_TTL = 464, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 465, + VAR_FAKE_DSA = 466, + VAR_FAKE_SHA1 = 467, + VAR_LOG_IDENTITY = 468, + VAR_HIDE_TRUSTANCHOR = 469, + VAR_TRUST_ANCHOR_SIGNALING = 470, + VAR_AGGRESSIVE_NSEC = 471, + VAR_USE_SYSTEMD = 472, + VAR_SHM_ENABLE = 473, + VAR_SHM_KEY = 474, + VAR_ROOT_KEY_SENTINEL = 475, + VAR_DNSCRYPT = 476, + VAR_DNSCRYPT_ENABLE = 477, + VAR_DNSCRYPT_PORT = 478, + VAR_DNSCRYPT_PROVIDER = 479, + VAR_DNSCRYPT_SECRET_KEY = 480, + VAR_DNSCRYPT_PROVIDER_CERT = 481, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 482, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 483, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 484, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 485, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 486, + VAR_IPSECMOD_ENABLED = 487, + VAR_IPSECMOD_HOOK = 488, + VAR_IPSECMOD_IGNORE_BOGUS = 489, + VAR_IPSECMOD_MAX_TTL = 490, + VAR_IPSECMOD_WHITELIST = 491, + VAR_IPSECMOD_STRICT = 492, + VAR_CACHEDB = 493, + VAR_CACHEDB_BACKEND = 494, + VAR_CACHEDB_SECRETSEED = 495, + VAR_CACHEDB_REDISHOST = 496, + VAR_CACHEDB_REDISPORT = 497, + VAR_CACHEDB_REDISTIMEOUT = 498, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 499, + VAR_FOR_UPSTREAM = 500, + VAR_AUTH_ZONE = 501, + VAR_ZONEFILE = 502, + VAR_MASTER = 503, + VAR_URL = 504, + VAR_FOR_DOWNSTREAM = 505, + VAR_FALLBACK_ENABLED = 506, + VAR_TLS_ADDITIONAL_PORT = 507, + VAR_LOW_RTT = 508, + VAR_LOW_RTT_PERMIL = 509, + VAR_FAST_SERVER_PERMIL = 510, + VAR_FAST_SERVER_NUM = 511, + VAR_ALLOW_NOTIFY = 512, + VAR_TLS_WIN_CERT = 513, + VAR_TCP_CONNECTION_LIMIT = 514, + VAR_FORWARD_NO_CACHE = 515, + VAR_STUB_NO_CACHE = 516, + VAR_LOG_SERVFAIL = 517, + VAR_DENY_ANY = 518, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 519, + VAR_LOG_TAG_QUERYREPLY = 520, + VAR_STREAM_WAIT_SIZE = 521, + VAR_TLS_CIPHERS = 522, + VAR_TLS_CIPHERSUITES = 523, + VAR_IPSET = 524, + VAR_IPSET_NAME_V4 = 525, + VAR_IPSET_NAME_V6 = 526, + VAR_TLS_SESSION_TICKET_KEYS = 527, + VAR_RPZ = 528, + VAR_TAGS = 529, + VAR_RPZ_ACTION_OVERRIDE = 530, + VAR_RPZ_CNAME_OVERRIDE = 531, + VAR_RPZ_LOG = 532, + VAR_RPZ_LOG_NAME = 533 }; #endif /* Tokens. */ @@ -426,267 +427,268 @@ extern int yydebug; #define VAR_PORT 269 #define VAR_OUTGOING_RANGE 270 #define VAR_INTERFACE 271 -#define VAR_DO_IP4 272 -#define VAR_DO_IP6 273 -#define VAR_PREFER_IP6 274 -#define VAR_DO_UDP 275 -#define VAR_DO_TCP 276 -#define VAR_TCP_MSS 277 -#define VAR_OUTGOING_TCP_MSS 278 -#define VAR_TCP_IDLE_TIMEOUT 279 -#define VAR_EDNS_TCP_KEEPALIVE 280 -#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 281 -#define VAR_CHROOT 282 -#define VAR_USERNAME 283 -#define VAR_DIRECTORY 284 -#define VAR_LOGFILE 285 -#define VAR_PIDFILE 286 -#define VAR_MSG_CACHE_SIZE 287 -#define VAR_MSG_CACHE_SLABS 288 -#define VAR_NUM_QUERIES_PER_THREAD 289 -#define VAR_RRSET_CACHE_SIZE 290 -#define VAR_RRSET_CACHE_SLABS 291 -#define VAR_OUTGOING_NUM_TCP 292 -#define VAR_INFRA_HOST_TTL 293 -#define VAR_INFRA_LAME_TTL 294 -#define VAR_INFRA_CACHE_SLABS 295 -#define VAR_INFRA_CACHE_NUMHOSTS 296 -#define VAR_INFRA_CACHE_LAME_SIZE 297 -#define VAR_NAME 298 -#define VAR_STUB_ZONE 299 -#define VAR_STUB_HOST 300 -#define VAR_STUB_ADDR 301 -#define VAR_TARGET_FETCH_POLICY 302 -#define VAR_HARDEN_SHORT_BUFSIZE 303 -#define VAR_HARDEN_LARGE_QUERIES 304 -#define VAR_FORWARD_ZONE 305 -#define VAR_FORWARD_HOST 306 -#define VAR_FORWARD_ADDR 307 -#define VAR_DO_NOT_QUERY_ADDRESS 308 -#define VAR_HIDE_IDENTITY 309 -#define VAR_HIDE_VERSION 310 -#define VAR_IDENTITY 311 -#define VAR_VERSION 312 -#define VAR_HARDEN_GLUE 313 -#define VAR_MODULE_CONF 314 -#define VAR_TRUST_ANCHOR_FILE 315 -#define VAR_TRUST_ANCHOR 316 -#define VAR_VAL_OVERRIDE_DATE 317 -#define VAR_BOGUS_TTL 318 -#define VAR_VAL_CLEAN_ADDITIONAL 319 -#define VAR_VAL_PERMISSIVE_MODE 320 -#define VAR_INCOMING_NUM_TCP 321 -#define VAR_MSG_BUFFER_SIZE 322 -#define VAR_KEY_CACHE_SIZE 323 -#define VAR_KEY_CACHE_SLABS 324 -#define VAR_TRUSTED_KEYS_FILE 325 -#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 326 -#define VAR_USE_SYSLOG 327 -#define VAR_OUTGOING_INTERFACE 328 -#define VAR_ROOT_HINTS 329 -#define VAR_DO_NOT_QUERY_LOCALHOST 330 -#define VAR_CACHE_MAX_TTL 331 -#define VAR_HARDEN_DNSSEC_STRIPPED 332 -#define VAR_ACCESS_CONTROL 333 -#define VAR_LOCAL_ZONE 334 -#define VAR_LOCAL_DATA 335 -#define VAR_INTERFACE_AUTOMATIC 336 -#define VAR_STATISTICS_INTERVAL 337 -#define VAR_DO_DAEMONIZE 338 -#define VAR_USE_CAPS_FOR_ID 339 -#define VAR_STATISTICS_CUMULATIVE 340 -#define VAR_OUTGOING_PORT_PERMIT 341 -#define VAR_OUTGOING_PORT_AVOID 342 -#define VAR_DLV_ANCHOR_FILE 343 -#define VAR_DLV_ANCHOR 344 -#define VAR_NEG_CACHE_SIZE 345 -#define VAR_HARDEN_REFERRAL_PATH 346 -#define VAR_PRIVATE_ADDRESS 347 -#define VAR_PRIVATE_DOMAIN 348 -#define VAR_REMOTE_CONTROL 349 -#define VAR_CONTROL_ENABLE 350 -#define VAR_CONTROL_INTERFACE 351 -#define VAR_CONTROL_PORT 352 -#define VAR_SERVER_KEY_FILE 353 -#define VAR_SERVER_CERT_FILE 354 -#define VAR_CONTROL_KEY_FILE 355 -#define VAR_CONTROL_CERT_FILE 356 -#define VAR_CONTROL_USE_CERT 357 -#define VAR_EXTENDED_STATISTICS 358 -#define VAR_LOCAL_DATA_PTR 359 -#define VAR_JOSTLE_TIMEOUT 360 -#define VAR_STUB_PRIME 361 -#define VAR_UNWANTED_REPLY_THRESHOLD 362 -#define VAR_LOG_TIME_ASCII 363 -#define VAR_DOMAIN_INSECURE 364 -#define VAR_PYTHON 365 -#define VAR_PYTHON_SCRIPT 366 -#define VAR_VAL_SIG_SKEW_MIN 367 -#define VAR_VAL_SIG_SKEW_MAX 368 -#define VAR_CACHE_MIN_TTL 369 -#define VAR_VAL_LOG_LEVEL 370 -#define VAR_AUTO_TRUST_ANCHOR_FILE 371 -#define VAR_KEEP_MISSING 372 -#define VAR_ADD_HOLDDOWN 373 -#define VAR_DEL_HOLDDOWN 374 -#define VAR_SO_RCVBUF 375 -#define VAR_EDNS_BUFFER_SIZE 376 -#define VAR_PREFETCH 377 -#define VAR_PREFETCH_KEY 378 -#define VAR_SO_SNDBUF 379 -#define VAR_SO_REUSEPORT 380 -#define VAR_HARDEN_BELOW_NXDOMAIN 381 -#define VAR_IGNORE_CD_FLAG 382 -#define VAR_LOG_QUERIES 383 -#define VAR_LOG_REPLIES 384 -#define VAR_LOG_LOCAL_ACTIONS 385 -#define VAR_TCP_UPSTREAM 386 -#define VAR_SSL_UPSTREAM 387 -#define VAR_SSL_SERVICE_KEY 388 -#define VAR_SSL_SERVICE_PEM 389 -#define VAR_SSL_PORT 390 -#define VAR_FORWARD_FIRST 391 -#define VAR_STUB_SSL_UPSTREAM 392 -#define VAR_FORWARD_SSL_UPSTREAM 393 -#define VAR_TLS_CERT_BUNDLE 394 -#define VAR_STUB_FIRST 395 -#define VAR_MINIMAL_RESPONSES 396 -#define VAR_RRSET_ROUNDROBIN 397 -#define VAR_MAX_UDP_SIZE 398 -#define VAR_DELAY_CLOSE 399 -#define VAR_UNBLOCK_LAN_ZONES 400 -#define VAR_INSECURE_LAN_ZONES 401 -#define VAR_INFRA_CACHE_MIN_RTT 402 -#define VAR_DNS64_PREFIX 403 -#define VAR_DNS64_SYNTHALL 404 -#define VAR_DNS64_IGNORE_AAAA 405 -#define VAR_DNSTAP 406 -#define VAR_DNSTAP_ENABLE 407 -#define VAR_DNSTAP_SOCKET_PATH 408 -#define VAR_DNSTAP_SEND_IDENTITY 409 -#define VAR_DNSTAP_SEND_VERSION 410 -#define VAR_DNSTAP_IDENTITY 411 -#define VAR_DNSTAP_VERSION 412 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 413 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 414 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 415 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 416 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 417 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 418 -#define VAR_RESPONSE_IP_TAG 419 -#define VAR_RESPONSE_IP 420 -#define VAR_RESPONSE_IP_DATA 421 -#define VAR_HARDEN_ALGO_DOWNGRADE 422 -#define VAR_IP_TRANSPARENT 423 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 424 -#define VAR_IP_RATELIMIT 425 -#define VAR_IP_RATELIMIT_SLABS 426 -#define VAR_IP_RATELIMIT_SIZE 427 -#define VAR_RATELIMIT 428 -#define VAR_RATELIMIT_SLABS 429 -#define VAR_RATELIMIT_SIZE 430 -#define VAR_RATELIMIT_FOR_DOMAIN 431 -#define VAR_RATELIMIT_BELOW_DOMAIN 432 -#define VAR_IP_RATELIMIT_FACTOR 433 -#define VAR_RATELIMIT_FACTOR 434 -#define VAR_SEND_CLIENT_SUBNET 435 -#define VAR_CLIENT_SUBNET_ZONE 436 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 437 -#define VAR_CLIENT_SUBNET_OPCODE 438 -#define VAR_MAX_CLIENT_SUBNET_IPV4 439 -#define VAR_MAX_CLIENT_SUBNET_IPV6 440 -#define VAR_MIN_CLIENT_SUBNET_IPV4 441 -#define VAR_MIN_CLIENT_SUBNET_IPV6 442 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 443 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 444 -#define VAR_CAPS_WHITELIST 445 -#define VAR_CACHE_MAX_NEGATIVE_TTL 446 -#define VAR_PERMIT_SMALL_HOLDDOWN 447 -#define VAR_QNAME_MINIMISATION 448 -#define VAR_QNAME_MINIMISATION_STRICT 449 -#define VAR_IP_FREEBIND 450 -#define VAR_DEFINE_TAG 451 -#define VAR_LOCAL_ZONE_TAG 452 -#define VAR_ACCESS_CONTROL_TAG 453 -#define VAR_LOCAL_ZONE_OVERRIDE 454 -#define VAR_ACCESS_CONTROL_TAG_ACTION 455 -#define VAR_ACCESS_CONTROL_TAG_DATA 456 -#define VAR_VIEW 457 -#define VAR_ACCESS_CONTROL_VIEW 458 -#define VAR_VIEW_FIRST 459 -#define VAR_SERVE_EXPIRED 460 -#define VAR_SERVE_EXPIRED_TTL 461 -#define VAR_SERVE_EXPIRED_TTL_RESET 462 -#define VAR_SERVE_EXPIRED_REPLY_TTL 463 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 464 -#define VAR_FAKE_DSA 465 -#define VAR_FAKE_SHA1 466 -#define VAR_LOG_IDENTITY 467 -#define VAR_HIDE_TRUSTANCHOR 468 -#define VAR_TRUST_ANCHOR_SIGNALING 469 -#define VAR_AGGRESSIVE_NSEC 470 -#define VAR_USE_SYSTEMD 471 -#define VAR_SHM_ENABLE 472 -#define VAR_SHM_KEY 473 -#define VAR_ROOT_KEY_SENTINEL 474 -#define VAR_DNSCRYPT 475 -#define VAR_DNSCRYPT_ENABLE 476 -#define VAR_DNSCRYPT_PORT 477 -#define VAR_DNSCRYPT_PROVIDER 478 -#define VAR_DNSCRYPT_SECRET_KEY 479 -#define VAR_DNSCRYPT_PROVIDER_CERT 480 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 481 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 482 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 483 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 484 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 485 -#define VAR_IPSECMOD_ENABLED 486 -#define VAR_IPSECMOD_HOOK 487 -#define VAR_IPSECMOD_IGNORE_BOGUS 488 -#define VAR_IPSECMOD_MAX_TTL 489 -#define VAR_IPSECMOD_WHITELIST 490 -#define VAR_IPSECMOD_STRICT 491 -#define VAR_CACHEDB 492 -#define VAR_CACHEDB_BACKEND 493 -#define VAR_CACHEDB_SECRETSEED 494 -#define VAR_CACHEDB_REDISHOST 495 -#define VAR_CACHEDB_REDISPORT 496 -#define VAR_CACHEDB_REDISTIMEOUT 497 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 498 -#define VAR_FOR_UPSTREAM 499 -#define VAR_AUTH_ZONE 500 -#define VAR_ZONEFILE 501 -#define VAR_MASTER 502 -#define VAR_URL 503 -#define VAR_FOR_DOWNSTREAM 504 -#define VAR_FALLBACK_ENABLED 505 -#define VAR_TLS_ADDITIONAL_PORT 506 -#define VAR_LOW_RTT 507 -#define VAR_LOW_RTT_PERMIL 508 -#define VAR_FAST_SERVER_PERMIL 509 -#define VAR_FAST_SERVER_NUM 510 -#define VAR_ALLOW_NOTIFY 511 -#define VAR_TLS_WIN_CERT 512 -#define VAR_TCP_CONNECTION_LIMIT 513 -#define VAR_FORWARD_NO_CACHE 514 -#define VAR_STUB_NO_CACHE 515 -#define VAR_LOG_SERVFAIL 516 -#define VAR_DENY_ANY 517 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 518 -#define VAR_LOG_TAG_QUERYREPLY 519 -#define VAR_STREAM_WAIT_SIZE 520 -#define VAR_TLS_CIPHERS 521 -#define VAR_TLS_CIPHERSUITES 522 -#define VAR_IPSET 523 -#define VAR_IPSET_NAME_V4 524 -#define VAR_IPSET_NAME_V6 525 -#define VAR_TLS_SESSION_TICKET_KEYS 526 -#define VAR_RPZ 527 -#define VAR_TAGS 528 -#define VAR_RPZ_ACTION_OVERRIDE 529 -#define VAR_RPZ_CNAME_OVERRIDE 530 -#define VAR_RPZ_LOG 531 -#define VAR_RPZ_LOG_NAME 532 +#define VAR_PREFER_IP4 272 +#define VAR_DO_IP4 273 +#define VAR_DO_IP6 274 +#define VAR_PREFER_IP6 275 +#define VAR_DO_UDP 276 +#define VAR_DO_TCP 277 +#define VAR_TCP_MSS 278 +#define VAR_OUTGOING_TCP_MSS 279 +#define VAR_TCP_IDLE_TIMEOUT 280 +#define VAR_EDNS_TCP_KEEPALIVE 281 +#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 282 +#define VAR_CHROOT 283 +#define VAR_USERNAME 284 +#define VAR_DIRECTORY 285 +#define VAR_LOGFILE 286 +#define VAR_PIDFILE 287 +#define VAR_MSG_CACHE_SIZE 288 +#define VAR_MSG_CACHE_SLABS 289 +#define VAR_NUM_QUERIES_PER_THREAD 290 +#define VAR_RRSET_CACHE_SIZE 291 +#define VAR_RRSET_CACHE_SLABS 292 +#define VAR_OUTGOING_NUM_TCP 293 +#define VAR_INFRA_HOST_TTL 294 +#define VAR_INFRA_LAME_TTL 295 +#define VAR_INFRA_CACHE_SLABS 296 +#define VAR_INFRA_CACHE_NUMHOSTS 297 +#define VAR_INFRA_CACHE_LAME_SIZE 298 +#define VAR_NAME 299 +#define VAR_STUB_ZONE 300 +#define VAR_STUB_HOST 301 +#define VAR_STUB_ADDR 302 +#define VAR_TARGET_FETCH_POLICY 303 +#define VAR_HARDEN_SHORT_BUFSIZE 304 +#define VAR_HARDEN_LARGE_QUERIES 305 +#define VAR_FORWARD_ZONE 306 +#define VAR_FORWARD_HOST 307 +#define VAR_FORWARD_ADDR 308 +#define VAR_DO_NOT_QUERY_ADDRESS 309 +#define VAR_HIDE_IDENTITY 310 +#define VAR_HIDE_VERSION 311 +#define VAR_IDENTITY 312 +#define VAR_VERSION 313 +#define VAR_HARDEN_GLUE 314 +#define VAR_MODULE_CONF 315 +#define VAR_TRUST_ANCHOR_FILE 316 +#define VAR_TRUST_ANCHOR 317 +#define VAR_VAL_OVERRIDE_DATE 318 +#define VAR_BOGUS_TTL 319 +#define VAR_VAL_CLEAN_ADDITIONAL 320 +#define VAR_VAL_PERMISSIVE_MODE 321 +#define VAR_INCOMING_NUM_TCP 322 +#define VAR_MSG_BUFFER_SIZE 323 +#define VAR_KEY_CACHE_SIZE 324 +#define VAR_KEY_CACHE_SLABS 325 +#define VAR_TRUSTED_KEYS_FILE 326 +#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 327 +#define VAR_USE_SYSLOG 328 +#define VAR_OUTGOING_INTERFACE 329 +#define VAR_ROOT_HINTS 330 +#define VAR_DO_NOT_QUERY_LOCALHOST 331 +#define VAR_CACHE_MAX_TTL 332 +#define VAR_HARDEN_DNSSEC_STRIPPED 333 +#define VAR_ACCESS_CONTROL 334 +#define VAR_LOCAL_ZONE 335 +#define VAR_LOCAL_DATA 336 +#define VAR_INTERFACE_AUTOMATIC 337 +#define VAR_STATISTICS_INTERVAL 338 +#define VAR_DO_DAEMONIZE 339 +#define VAR_USE_CAPS_FOR_ID 340 +#define VAR_STATISTICS_CUMULATIVE 341 +#define VAR_OUTGOING_PORT_PERMIT 342 +#define VAR_OUTGOING_PORT_AVOID 343 +#define VAR_DLV_ANCHOR_FILE 344 +#define VAR_DLV_ANCHOR 345 +#define VAR_NEG_CACHE_SIZE 346 +#define VAR_HARDEN_REFERRAL_PATH 347 +#define VAR_PRIVATE_ADDRESS 348 +#define VAR_PRIVATE_DOMAIN 349 +#define VAR_REMOTE_CONTROL 350 +#define VAR_CONTROL_ENABLE 351 +#define VAR_CONTROL_INTERFACE 352 +#define VAR_CONTROL_PORT 353 +#define VAR_SERVER_KEY_FILE 354 +#define VAR_SERVER_CERT_FILE 355 +#define VAR_CONTROL_KEY_FILE 356 +#define VAR_CONTROL_CERT_FILE 357 +#define VAR_CONTROL_USE_CERT 358 +#define VAR_EXTENDED_STATISTICS 359 +#define VAR_LOCAL_DATA_PTR 360 +#define VAR_JOSTLE_TIMEOUT 361 +#define VAR_STUB_PRIME 362 +#define VAR_UNWANTED_REPLY_THRESHOLD 363 +#define VAR_LOG_TIME_ASCII 364 +#define VAR_DOMAIN_INSECURE 365 +#define VAR_PYTHON 366 +#define VAR_PYTHON_SCRIPT 367 +#define VAR_VAL_SIG_SKEW_MIN 368 +#define VAR_VAL_SIG_SKEW_MAX 369 +#define VAR_CACHE_MIN_TTL 370 +#define VAR_VAL_LOG_LEVEL 371 +#define VAR_AUTO_TRUST_ANCHOR_FILE 372 +#define VAR_KEEP_MISSING 373 +#define VAR_ADD_HOLDDOWN 374 +#define VAR_DEL_HOLDDOWN 375 +#define VAR_SO_RCVBUF 376 +#define VAR_EDNS_BUFFER_SIZE 377 +#define VAR_PREFETCH 378 +#define VAR_PREFETCH_KEY 379 +#define VAR_SO_SNDBUF 380 +#define VAR_SO_REUSEPORT 381 +#define VAR_HARDEN_BELOW_NXDOMAIN 382 +#define VAR_IGNORE_CD_FLAG 383 +#define VAR_LOG_QUERIES 384 +#define VAR_LOG_REPLIES 385 +#define VAR_LOG_LOCAL_ACTIONS 386 +#define VAR_TCP_UPSTREAM 387 +#define VAR_SSL_UPSTREAM 388 +#define VAR_SSL_SERVICE_KEY 389 +#define VAR_SSL_SERVICE_PEM 390 +#define VAR_SSL_PORT 391 +#define VAR_FORWARD_FIRST 392 +#define VAR_STUB_SSL_UPSTREAM 393 +#define VAR_FORWARD_SSL_UPSTREAM 394 +#define VAR_TLS_CERT_BUNDLE 395 +#define VAR_STUB_FIRST 396 +#define VAR_MINIMAL_RESPONSES 397 +#define VAR_RRSET_ROUNDROBIN 398 +#define VAR_MAX_UDP_SIZE 399 +#define VAR_DELAY_CLOSE 400 +#define VAR_UNBLOCK_LAN_ZONES 401 +#define VAR_INSECURE_LAN_ZONES 402 +#define VAR_INFRA_CACHE_MIN_RTT 403 +#define VAR_DNS64_PREFIX 404 +#define VAR_DNS64_SYNTHALL 405 +#define VAR_DNS64_IGNORE_AAAA 406 +#define VAR_DNSTAP 407 +#define VAR_DNSTAP_ENABLE 408 +#define VAR_DNSTAP_SOCKET_PATH 409 +#define VAR_DNSTAP_SEND_IDENTITY 410 +#define VAR_DNSTAP_SEND_VERSION 411 +#define VAR_DNSTAP_IDENTITY 412 +#define VAR_DNSTAP_VERSION 413 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 414 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 415 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 416 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 417 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 418 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 419 +#define VAR_RESPONSE_IP_TAG 420 +#define VAR_RESPONSE_IP 421 +#define VAR_RESPONSE_IP_DATA 422 +#define VAR_HARDEN_ALGO_DOWNGRADE 423 +#define VAR_IP_TRANSPARENT 424 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 425 +#define VAR_IP_RATELIMIT 426 +#define VAR_IP_RATELIMIT_SLABS 427 +#define VAR_IP_RATELIMIT_SIZE 428 +#define VAR_RATELIMIT 429 +#define VAR_RATELIMIT_SLABS 430 +#define VAR_RATELIMIT_SIZE 431 +#define VAR_RATELIMIT_FOR_DOMAIN 432 +#define VAR_RATELIMIT_BELOW_DOMAIN 433 +#define VAR_IP_RATELIMIT_FACTOR 434 +#define VAR_RATELIMIT_FACTOR 435 +#define VAR_SEND_CLIENT_SUBNET 436 +#define VAR_CLIENT_SUBNET_ZONE 437 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 438 +#define VAR_CLIENT_SUBNET_OPCODE 439 +#define VAR_MAX_CLIENT_SUBNET_IPV4 440 +#define VAR_MAX_CLIENT_SUBNET_IPV6 441 +#define VAR_MIN_CLIENT_SUBNET_IPV4 442 +#define VAR_MIN_CLIENT_SUBNET_IPV6 443 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 444 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 445 +#define VAR_CAPS_WHITELIST 446 +#define VAR_CACHE_MAX_NEGATIVE_TTL 447 +#define VAR_PERMIT_SMALL_HOLDDOWN 448 +#define VAR_QNAME_MINIMISATION 449 +#define VAR_QNAME_MINIMISATION_STRICT 450 +#define VAR_IP_FREEBIND 451 +#define VAR_DEFINE_TAG 452 +#define VAR_LOCAL_ZONE_TAG 453 +#define VAR_ACCESS_CONTROL_TAG 454 +#define VAR_LOCAL_ZONE_OVERRIDE 455 +#define VAR_ACCESS_CONTROL_TAG_ACTION 456 +#define VAR_ACCESS_CONTROL_TAG_DATA 457 +#define VAR_VIEW 458 +#define VAR_ACCESS_CONTROL_VIEW 459 +#define VAR_VIEW_FIRST 460 +#define VAR_SERVE_EXPIRED 461 +#define VAR_SERVE_EXPIRED_TTL 462 +#define VAR_SERVE_EXPIRED_TTL_RESET 463 +#define VAR_SERVE_EXPIRED_REPLY_TTL 464 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 465 +#define VAR_FAKE_DSA 466 +#define VAR_FAKE_SHA1 467 +#define VAR_LOG_IDENTITY 468 +#define VAR_HIDE_TRUSTANCHOR 469 +#define VAR_TRUST_ANCHOR_SIGNALING 470 +#define VAR_AGGRESSIVE_NSEC 471 +#define VAR_USE_SYSTEMD 472 +#define VAR_SHM_ENABLE 473 +#define VAR_SHM_KEY 474 +#define VAR_ROOT_KEY_SENTINEL 475 +#define VAR_DNSCRYPT 476 +#define VAR_DNSCRYPT_ENABLE 477 +#define VAR_DNSCRYPT_PORT 478 +#define VAR_DNSCRYPT_PROVIDER 479 +#define VAR_DNSCRYPT_SECRET_KEY 480 +#define VAR_DNSCRYPT_PROVIDER_CERT 481 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 482 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 483 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 484 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 485 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 486 +#define VAR_IPSECMOD_ENABLED 487 +#define VAR_IPSECMOD_HOOK 488 +#define VAR_IPSECMOD_IGNORE_BOGUS 489 +#define VAR_IPSECMOD_MAX_TTL 490 +#define VAR_IPSECMOD_WHITELIST 491 +#define VAR_IPSECMOD_STRICT 492 +#define VAR_CACHEDB 493 +#define VAR_CACHEDB_BACKEND 494 +#define VAR_CACHEDB_SECRETSEED 495 +#define VAR_CACHEDB_REDISHOST 496 +#define VAR_CACHEDB_REDISPORT 497 +#define VAR_CACHEDB_REDISTIMEOUT 498 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 499 +#define VAR_FOR_UPSTREAM 500 +#define VAR_AUTH_ZONE 501 +#define VAR_ZONEFILE 502 +#define VAR_MASTER 503 +#define VAR_URL 504 +#define VAR_FOR_DOWNSTREAM 505 +#define VAR_FALLBACK_ENABLED 506 +#define VAR_TLS_ADDITIONAL_PORT 507 +#define VAR_LOW_RTT 508 +#define VAR_LOW_RTT_PERMIL 509 +#define VAR_FAST_SERVER_PERMIL 510 +#define VAR_FAST_SERVER_NUM 511 +#define VAR_ALLOW_NOTIFY 512 +#define VAR_TLS_WIN_CERT 513 +#define VAR_TCP_CONNECTION_LIMIT 514 +#define VAR_FORWARD_NO_CACHE 515 +#define VAR_STUB_NO_CACHE 516 +#define VAR_LOG_SERVFAIL 517 +#define VAR_DENY_ANY 518 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 519 +#define VAR_LOG_TAG_QUERYREPLY 520 +#define VAR_STREAM_WAIT_SIZE 521 +#define VAR_TLS_CIPHERS 522 +#define VAR_TLS_CIPHERSUITES 523 +#define VAR_IPSET 524 +#define VAR_IPSET_NAME_V4 525 +#define VAR_IPSET_NAME_V6 526 +#define VAR_TLS_SESSION_TICKET_KEYS 527 +#define VAR_RPZ 528 +#define VAR_TAGS 529 +#define VAR_RPZ_ACTION_OVERRIDE 530 +#define VAR_RPZ_CNAME_OVERRIDE 531 +#define VAR_RPZ_LOG 532 +#define VAR_RPZ_LOG_NAME 533 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -696,7 +698,7 @@ union YYSTYPE char* str; -#line 700 "util/configparser.c" +#line 702 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -946,19 +948,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 590 +#define YYLAST 592 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 278 +#define YYNTOKENS 279 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 301 +#define YYNNTS 302 /* YYNRULES -- Number of rules. */ -#define YYNRULES 580 +#define YYNRULES 582 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 863 +#define YYNSTATES 866 #define YYUNDEFTOK 2 -#define YYMAXUTOK 532 +#define YYMAXUTOK 533 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1022,7 +1024,7 @@ static const yytype_uint16 yytranslate[] = 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 + 275, 276, 277, 278 }; #if YYDEBUG @@ -1031,63 +1033,63 @@ static const yytype_uint16 yyrline[] = { 0, 175, 175, 175, 176, 176, 177, 177, 178, 178, 178, 179, 179, 180, 180, 181, 185, 190, 191, 192, - 192, 192, 193, 193, 194, 194, 195, 195, 196, 196, - 196, 197, 197, 198, 198, 198, 199, 199, 199, 200, - 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, - 205, 206, 206, 207, 207, 208, 208, 208, 209, 209, - 209, 210, 210, 210, 211, 211, 212, 212, 213, 213, - 214, 214, 215, 215, 215, 216, 216, 217, 217, 218, - 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, - 222, 223, 223, 224, 224, 225, 225, 226, 226, 227, - 227, 228, 228, 228, 229, 229, 230, 230, 230, 231, - 231, 231, 232, 232, 232, 233, 233, 233, 233, 234, - 235, 235, 235, 236, 236, 236, 237, 237, 238, 238, - 239, 239, 239, 240, 240, 241, 241, 241, 242, 242, - 243, 243, 244, 245, 245, 246, 246, 247, 247, 248, - 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, - 254, 254, 254, 255, 255, 256, 256, 257, 257, 258, - 258, 259, 259, 260, 260, 261, 261, 261, 262, 262, - 262, 263, 263, 263, 264, 264, 265, 266, 266, 267, - 267, 268, 268, 269, 269, 270, 270, 270, 271, 271, - 271, 272, 272, 272, 273, 273, 274, 274, 275, 275, - 277, 289, 290, 291, 291, 291, 291, 291, 292, 292, - 294, 306, 307, 308, 308, 308, 308, 309, 309, 311, - 325, 326, 327, 327, 327, 327, 328, 328, 328, 330, - 347, 348, 349, 349, 349, 349, 350, 350, 350, 351, - 354, 373, 390, 398, 408, 416, 433, 434, 435, 435, - 435, 435, 435, 436, 436, 436, 437, 437, 439, 448, - 457, 468, 477, 486, 495, 506, 515, 527, 541, 556, - 567, 584, 601, 618, 635, 650, 665, 678, 693, 702, - 711, 720, 729, 738, 747, 756, 765, 774, 783, 792, - 801, 810, 823, 832, 845, 854, 863, 872, 879, 886, - 895, 902, 911, 919, 926, 933, 941, 950, 959, 973, - 982, 991, 1000, 1009, 1018, 1027, 1034, 1041, 1067, 1075, - 1082, 1089, 1096, 1103, 1111, 1119, 1127, 1134, 1145, 1156, - 1163, 1172, 1181, 1190, 1197, 1204, 1212, 1220, 1230, 1240, - 1250, 1258, 1271, 1282, 1290, 1303, 1312, 1321, 1330, 1340, - 1350, 1358, 1371, 1380, 1388, 1397, 1405, 1418, 1427, 1434, - 1444, 1454, 1464, 1474, 1484, 1494, 1504, 1514, 1521, 1528, - 1535, 1544, 1553, 1562, 1571, 1578, 1588, 1608, 1615, 1633, - 1646, 1659, 1668, 1677, 1686, 1695, 1705, 1715, 1726, 1735, - 1744, 1753, 1762, 1771, 1780, 1793, 1806, 1815, 1822, 1831, - 1840, 1849, 1858, 1866, 1879, 1887, 1928, 1935, 1950, 1960, - 1970, 1977, 1984, 1991, 2000, 2008, 2022, 2043, 2064, 2076, - 2088, 2100, 2109, 2130, 2140, 2149, 2157, 2165, 2178, 2191, - 2206, 2221, 2230, 2239, 2245, 2254, 2263, 2273, 2283, 2296, - 2309, 2321, 2335, 2347, 2361, 2371, 2378, 2385, 2394, 2403, - 2413, 2423, 2433, 2440, 2447, 2456, 2465, 2475, 2485, 2492, - 2499, 2506, 2514, 2524, 2534, 2544, 2554, 2593, 2603, 2611, - 2619, 2634, 2643, 2648, 2649, 2650, 2650, 2650, 2651, 2651, - 2651, 2652, 2652, 2654, 2664, 2673, 2680, 2687, 2694, 2701, - 2708, 2715, 2720, 2721, 2722, 2722, 2723, 2723, 2724, 2724, - 2725, 2726, 2727, 2728, 2729, 2730, 2732, 2741, 2748, 2757, - 2766, 2773, 2780, 2790, 2800, 2810, 2820, 2830, 2840, 2845, - 2846, 2847, 2849, 2855, 2865, 2872, 2881, 2889, 2894, 2895, - 2897, 2897, 2897, 2898, 2898, 2899, 2900, 2901, 2902, 2903, - 2905, 2915, 2924, 2931, 2940, 2947, 2956, 2964, 2977, 2985, - 2998, 3003, 3004, 3005, 3005, 3006, 3006, 3006, 3008, 3020, - 3032, 3044, 3059, 3072, 3083, 3088, 3089, 3090, 3090, 3092, - 3107 + 192, 192, 193, 193, 194, 194, 194, 195, 195, 196, + 196, 196, 197, 197, 198, 198, 198, 199, 199, 199, + 200, 200, 201, 201, 202, 202, 203, 203, 204, 204, + 205, 205, 206, 206, 207, 207, 208, 208, 208, 209, + 209, 209, 210, 210, 210, 211, 211, 212, 212, 213, + 213, 214, 214, 215, 215, 215, 216, 216, 217, 217, + 218, 218, 218, 219, 219, 220, 220, 221, 221, 222, + 222, 222, 223, 223, 224, 224, 225, 225, 226, 226, + 227, 227, 228, 228, 228, 229, 229, 230, 230, 230, + 231, 231, 231, 232, 232, 232, 233, 233, 233, 233, + 234, 235, 235, 235, 236, 236, 236, 237, 237, 238, + 238, 239, 239, 239, 240, 240, 241, 241, 241, 242, + 242, 243, 243, 244, 245, 245, 246, 246, 247, 247, + 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, + 253, 254, 254, 254, 255, 255, 256, 256, 257, 257, + 258, 258, 259, 259, 260, 260, 261, 261, 261, 262, + 262, 262, 263, 263, 263, 264, 264, 265, 266, 266, + 267, 267, 268, 268, 269, 269, 270, 270, 270, 271, + 271, 271, 272, 272, 272, 273, 273, 274, 274, 275, + 275, 277, 289, 290, 291, 291, 291, 291, 291, 292, + 292, 294, 306, 307, 308, 308, 308, 308, 309, 309, + 311, 325, 326, 327, 327, 327, 327, 328, 328, 328, + 330, 347, 348, 349, 349, 349, 349, 350, 350, 350, + 351, 354, 373, 390, 398, 408, 416, 433, 434, 435, + 435, 435, 435, 435, 436, 436, 436, 437, 437, 439, + 448, 457, 468, 477, 486, 495, 506, 515, 527, 541, + 556, 567, 584, 601, 618, 635, 650, 665, 678, 693, + 702, 711, 720, 729, 738, 747, 756, 765, 774, 783, + 792, 801, 810, 819, 832, 841, 854, 863, 872, 881, + 888, 895, 904, 911, 920, 928, 935, 942, 950, 959, + 968, 982, 991, 1000, 1009, 1018, 1027, 1036, 1043, 1050, + 1076, 1084, 1091, 1098, 1105, 1112, 1120, 1128, 1136, 1143, + 1154, 1165, 1172, 1181, 1190, 1199, 1206, 1213, 1221, 1229, + 1239, 1249, 1259, 1267, 1280, 1291, 1299, 1312, 1321, 1330, + 1339, 1349, 1359, 1367, 1380, 1389, 1397, 1406, 1414, 1427, + 1436, 1443, 1453, 1463, 1473, 1483, 1493, 1503, 1513, 1523, + 1530, 1537, 1544, 1553, 1562, 1571, 1580, 1587, 1597, 1617, + 1624, 1642, 1655, 1668, 1677, 1686, 1695, 1704, 1714, 1724, + 1735, 1744, 1753, 1762, 1771, 1780, 1789, 1802, 1815, 1824, + 1831, 1840, 1849, 1858, 1867, 1875, 1888, 1896, 1937, 1944, + 1959, 1969, 1979, 1986, 1993, 2000, 2009, 2017, 2031, 2052, + 2073, 2085, 2097, 2109, 2118, 2139, 2149, 2158, 2166, 2174, + 2187, 2200, 2215, 2230, 2239, 2248, 2254, 2263, 2272, 2282, + 2292, 2305, 2318, 2330, 2344, 2356, 2370, 2380, 2387, 2394, + 2403, 2412, 2422, 2432, 2442, 2449, 2456, 2465, 2474, 2484, + 2494, 2501, 2508, 2515, 2523, 2533, 2543, 2553, 2563, 2602, + 2612, 2620, 2628, 2643, 2652, 2657, 2658, 2659, 2659, 2659, + 2660, 2660, 2660, 2661, 2661, 2663, 2673, 2682, 2689, 2696, + 2703, 2710, 2717, 2724, 2729, 2730, 2731, 2731, 2732, 2732, + 2733, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2741, 2750, + 2757, 2766, 2775, 2782, 2789, 2799, 2809, 2819, 2829, 2839, + 2849, 2854, 2855, 2856, 2858, 2864, 2874, 2881, 2890, 2898, + 2903, 2904, 2906, 2906, 2906, 2907, 2907, 2908, 2909, 2910, + 2911, 2912, 2914, 2924, 2933, 2940, 2949, 2956, 2965, 2973, + 2986, 2994, 3007, 3012, 3013, 3014, 3014, 3015, 3015, 3015, + 3017, 3029, 3041, 3053, 3068, 3081, 3092, 3097, 3098, 3099, + 3099, 3101, 3116 }; #endif @@ -1099,14 +1101,14 @@ static const char *const yytname[] = "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT", "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", - "VAR_DO_IP4", "VAR_DO_IP6", "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_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_PREFER_IP4", "VAR_DO_IP4", "VAR_DO_IP6", "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_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", @@ -1217,28 +1219,28 @@ static const char *const yytname[] = "server_outgoing_port_permit", "server_outgoing_port_avoid", "server_outgoing_num_tcp", "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4", "server_do_ip6", - "server_do_udp", "server_do_tcp", "server_prefer_ip6", "server_tcp_mss", - "server_outgoing_tcp_mss", "server_tcp_idle_timeout", - "server_tcp_keepalive", "server_tcp_keepalive_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_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_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_identity", "server_version", "server_so_rcvbuf", - "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent", - "server_ip_freebind", "server_stream_wait_size", + "server_do_udp", "server_do_tcp", "server_prefer_ip4", + "server_prefer_ip6", "server_tcp_mss", "server_outgoing_tcp_mss", + "server_tcp_idle_timeout", "server_tcp_keepalive", + "server_tcp_keepalive_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_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_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_identity", "server_version", + "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", + "server_ip_transparent", "server_ip_freebind", "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", @@ -1355,14 +1357,14 @@ static const yytype_uint16 yytoknum[] = 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 + 525, 526, 527, 528, 529, 530, 531, 532, 533 }; # endif -#define YYPACT_NINF -262 +#define YYPACT_NINF -263 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-262))) + (!!((Yystate) == (-263))) #define YYTABLE_NINF -1 @@ -1373,93 +1375,93 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -262, 0, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, 261, -41, - -36, -40, -20, -42, -29, -128, -105, -170, -221, -261, + -263, 0, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 262, -42, + -37, -41, -21, -43, -30, -129, -106, -170, -222, -262, 2, 3, 4, 12, 26, 27, 28, 31, 32, 33, - 35, 36, 37, 38, 39, 51, 52, 53, 64, 65, + 34, 36, 37, 38, 39, 40, 52, 53, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 85, 87, - 88, 91, 93, 94, 95, 96, 97, 98, 99, 101, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 87, + 88, 91, 93, 94, 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, + 134, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 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, 193, 197, 198, 199, - 200, 201, 202, 203, 205, 206, 207, 208, 211, 212, - 215, 228, 229, 230, 231, 232, 233, 234, 236, 237, + 186, 187, 188, 189, 190, 191, 192, 197, 198, 199, + 200, 201, 202, 203, 205, 206, 207, 208, 210, 212, + 215, 227, 229, 230, 231, 232, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 259, 260, 294, 295, 296, 297, 301, 302, 303, 345, - 346, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 347, 348, 349, 350, 351, 352, 353, - -262, -262, -262, -262, -262, -262, -262, -262, 357, 361, - 362, 387, 388, 389, -262, -262, -262, -262, -262, -262, - -262, 391, 402, 403, 404, 405, 406, 407, -262, -262, - -262, -262, -262, -262, -262, -262, 408, 409, 410, 411, - 412, 413, 414, 453, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 455, 471, 472, 473, 474, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, 475, - 476, 477, 478, 479, 480, 481, 488, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 489, 490, 491, 492, - 493, 495, 496, 497, 498, 499, 500, 501, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, 504, -262, -262, 507, 510, 511, 519, 520, 521, - 523, 524, 525, 526, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, 527, 528, 529, 530, 531, - -262, -262, -262, -262, -262, -262, 532, 533, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - 534, 535, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, 536, 537, 538, - -262, -262, -262, -262, -262, -262, -262, -262, -262, 539, - 540, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - 541, 542, 543, 544, 545, 546, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, 547, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, 548, -262, -262, 549, - 550, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, 551, 552, 553, -262, -262, -262, -262, -262, - -262, -262, -262 + 258, 260, 261, 296, 297, 298, 299, 303, 304, 305, + 347, 348, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, 349, 350, 351, 352, 353, + 354, 355, -263, -263, -263, -263, -263, -263, -263, -263, + 359, 363, 364, 389, 390, 391, -263, -263, -263, -263, + -263, -263, -263, 393, 404, 405, 406, 407, 408, 409, + -263, -263, -263, -263, -263, -263, -263, -263, 410, 411, + 412, 413, 414, 415, 416, 455, -263, -263, -263, -263, + -263, -263, -263, -263, -263, 457, 473, 474, 475, 476, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, 477, 478, 479, 480, 481, 482, 483, 490, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 491, 492, + 493, 494, 495, 497, 498, 499, 500, 501, 502, 503, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, 506, -263, -263, 509, 512, 513, 521, + 522, 523, 525, 526, 527, 528, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, 529, 530, 531, + 532, 533, -263, -263, -263, -263, -263, -263, 534, 535, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, 536, 537, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + 538, 539, 540, -263, -263, -263, -263, -263, -263, -263, + -263, -263, 541, 542, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, 543, 544, 545, 546, 547, 548, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, 549, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, 550, + -263, -263, 551, 552, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, 553, 554, 555, -263, -263, + -263, -263, -263, -263, -263, -263 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1467,9 +1469,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 210, 220, 482, 528, 501, 229, - 537, 560, 239, 574, 255, 3, 18, 212, 222, 231, - 241, 257, 484, 503, 530, 539, 562, 576, 4, 5, + 2, 0, 1, 16, 211, 221, 484, 530, 503, 230, + 539, 562, 240, 576, 256, 3, 18, 213, 223, 232, + 242, 258, 486, 505, 532, 541, 564, 578, 4, 5, 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1490,142 +1492,142 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 19, 20, 82, 85, 94, 181, 182, 21, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 33, 73, 22, 86, 87, 44, 66, 81, 23, 24, - 26, 27, 25, 28, 29, 30, 31, 32, 117, 193, - 118, 120, 121, 122, 195, 200, 196, 207, 208, 209, - 177, 83, 72, 98, 115, 116, 205, 202, 119, 34, - 35, 36, 37, 38, 74, 88, 89, 104, 60, 70, - 61, 185, 186, 99, 54, 55, 184, 56, 57, 108, - 112, 126, 135, 160, 206, 109, 67, 39, 40, 41, - 96, 127, 128, 129, 42, 43, 45, 46, 48, 49, - 47, 133, 50, 51, 52, 58, 77, 113, 91, 134, - 84, 156, 92, 93, 110, 111, 203, 97, 53, 75, - 78, 59, 62, 100, 101, 76, 157, 102, 63, 64, - 65, 194, 114, 170, 171, 172, 173, 174, 175, 183, - 103, 71, 105, 106, 107, 158, 68, 69, 90, 79, - 80, 95, 123, 124, 204, 125, 130, 131, 132, 161, - 162, 164, 166, 167, 165, 168, 178, 136, 137, 140, - 141, 138, 139, 142, 143, 145, 144, 197, 199, 198, - 159, 169, 187, 189, 188, 190, 191, 192, 163, 176, - 179, 180, 201, 0, 0, 0, 0, 0, 0, 0, - 211, 213, 214, 215, 217, 218, 219, 216, 0, 0, - 0, 0, 0, 0, 221, 223, 224, 225, 226, 227, - 228, 0, 0, 0, 0, 0, 0, 0, 230, 232, - 233, 236, 237, 234, 238, 235, 0, 0, 0, 0, - 0, 0, 0, 0, 240, 242, 243, 244, 245, 249, - 246, 247, 248, 0, 0, 0, 0, 0, 260, 264, - 265, 266, 267, 256, 258, 259, 261, 262, 263, 0, - 0, 0, 0, 0, 0, 0, 0, 483, 485, 487, - 486, 492, 488, 489, 490, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 502, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 0, 529, 531, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 538, 540, 541, 542, 544, 545, - 543, 546, 547, 548, 549, 0, 0, 0, 0, 0, - 561, 563, 564, 565, 566, 567, 0, 0, 575, 577, - 578, 269, 268, 275, 288, 286, 294, 295, 298, 296, - 297, 299, 300, 301, 302, 303, 325, 326, 327, 328, - 329, 353, 354, 355, 360, 361, 291, 362, 363, 366, - 364, 365, 368, 369, 370, 384, 340, 341, 343, 344, - 371, 387, 334, 336, 388, 394, 395, 396, 292, 352, - 412, 413, 335, 407, 318, 287, 330, 385, 391, 372, - 0, 0, 416, 293, 270, 317, 376, 271, 289, 290, - 331, 332, 414, 374, 378, 379, 272, 417, 356, 383, - 319, 339, 389, 390, 393, 406, 333, 410, 408, 409, - 345, 351, 380, 381, 346, 347, 373, 398, 320, 321, - 324, 304, 306, 307, 308, 309, 310, 418, 419, 421, - 357, 358, 359, 367, 422, 423, 424, 0, 0, 0, - 375, 348, 533, 433, 437, 435, 434, 438, 436, 0, - 0, 441, 442, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 377, 392, 411, 446, 447, 349, 425, - 0, 0, 0, 0, 0, 0, 399, 400, 401, 402, - 403, 404, 405, 534, 342, 337, 397, 316, 273, 274, - 338, 448, 450, 449, 451, 452, 453, 305, 312, 443, - 445, 444, 311, 0, 323, 382, 420, 322, 350, 313, - 314, 315, 454, 455, 456, 460, 459, 457, 458, 461, - 462, 463, 464, 466, 465, 475, 0, 479, 480, 0, - 0, 481, 467, 473, 468, 469, 470, 472, 474, 471, - 250, 251, 252, 253, 254, 493, 495, 494, 497, 498, - 499, 500, 496, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 532, 550, 551, 552, 555, - 553, 554, 556, 557, 558, 559, 568, 569, 570, 571, - 572, 579, 580, 386, 415, 432, 535, 536, 439, 440, - 426, 427, 0, 0, 0, 431, 573, 476, 477, 478, - 430, 428, 429 + 0, 0, 17, 19, 20, 83, 86, 95, 182, 183, + 21, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 34, 74, 22, 87, 88, 45, 67, 82, 23, + 24, 27, 28, 25, 26, 29, 30, 31, 32, 33, + 118, 194, 119, 121, 122, 123, 196, 201, 197, 208, + 209, 210, 178, 84, 73, 99, 116, 117, 206, 203, + 120, 35, 36, 37, 38, 39, 75, 89, 90, 105, + 61, 71, 62, 186, 187, 100, 55, 56, 185, 57, + 58, 109, 113, 127, 136, 161, 207, 110, 68, 40, + 41, 42, 97, 128, 129, 130, 43, 44, 46, 47, + 49, 50, 48, 134, 51, 52, 53, 59, 78, 114, + 92, 135, 85, 157, 93, 94, 111, 112, 204, 98, + 54, 76, 79, 60, 63, 101, 102, 77, 158, 103, + 64, 65, 66, 195, 115, 171, 172, 173, 174, 175, + 176, 184, 104, 72, 106, 107, 108, 159, 69, 70, + 91, 80, 81, 96, 124, 125, 205, 126, 131, 132, + 133, 162, 163, 165, 167, 168, 166, 169, 179, 137, + 138, 141, 142, 139, 140, 143, 144, 146, 145, 198, + 200, 199, 160, 170, 188, 190, 189, 191, 192, 193, + 164, 177, 180, 181, 202, 0, 0, 0, 0, 0, + 0, 0, 212, 214, 215, 216, 218, 219, 220, 217, + 0, 0, 0, 0, 0, 0, 222, 224, 225, 226, + 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, + 231, 233, 234, 237, 238, 235, 239, 236, 0, 0, + 0, 0, 0, 0, 0, 0, 241, 243, 244, 245, + 246, 250, 247, 248, 249, 0, 0, 0, 0, 0, + 261, 265, 266, 267, 268, 257, 259, 260, 262, 263, + 264, 0, 0, 0, 0, 0, 0, 0, 0, 485, + 487, 489, 488, 494, 490, 491, 492, 493, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 504, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 0, 531, 533, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 540, 542, 543, 544, + 546, 547, 545, 548, 549, 550, 551, 0, 0, 0, + 0, 0, 563, 565, 566, 567, 568, 569, 0, 0, + 577, 579, 580, 270, 269, 276, 289, 287, 299, 295, + 296, 300, 297, 298, 301, 302, 303, 304, 305, 327, + 328, 329, 330, 331, 355, 356, 357, 362, 363, 292, + 364, 365, 368, 366, 367, 370, 371, 372, 386, 342, + 343, 345, 346, 373, 389, 336, 338, 390, 396, 397, + 398, 293, 354, 414, 415, 337, 409, 320, 288, 332, + 387, 393, 374, 0, 0, 418, 294, 271, 319, 378, + 272, 290, 291, 333, 334, 416, 376, 380, 381, 273, + 419, 358, 385, 321, 341, 391, 392, 395, 408, 335, + 412, 410, 411, 347, 353, 382, 383, 348, 349, 375, + 400, 322, 323, 326, 306, 308, 309, 310, 311, 312, + 420, 421, 423, 359, 360, 361, 369, 424, 425, 426, + 0, 0, 0, 377, 350, 535, 435, 439, 437, 436, + 440, 438, 0, 0, 443, 444, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 379, 394, 413, 448, + 449, 351, 427, 0, 0, 0, 0, 0, 0, 401, + 402, 403, 404, 405, 406, 407, 536, 344, 339, 399, + 318, 274, 275, 340, 450, 452, 451, 453, 454, 455, + 307, 314, 445, 447, 446, 313, 0, 325, 384, 422, + 324, 352, 315, 316, 317, 456, 457, 458, 462, 461, + 459, 460, 463, 464, 465, 466, 468, 467, 477, 0, + 481, 482, 0, 0, 483, 469, 475, 470, 471, 472, + 474, 476, 473, 251, 252, 253, 254, 255, 495, 497, + 496, 499, 500, 501, 502, 498, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 534, 552, + 553, 554, 557, 555, 556, 558, 559, 560, 561, 570, + 571, 572, 573, 574, 581, 582, 388, 417, 434, 537, + 538, 441, 442, 428, 429, 0, 0, 0, 433, 575, + 478, 479, 480, 432, 430, 431 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -23, 554, 555, 556, 557, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, - -262 + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -23, 556, 557, 558, + 559, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 231, 17, 29, 430, 18, - 30, 444, 19, 31, 458, 20, 32, 474, 488, 489, - 490, 491, 492, 21, 33, 493, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 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, 431, 432, 433, 434, 435, 436, 437, 445, - 446, 447, 448, 449, 450, 475, 476, 477, 478, 479, - 480, 481, 482, 459, 460, 461, 462, 463, 464, 465, - 22, 34, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 23, 35, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 24, 36, 542, 543, - 418, 419, 420, 421, 25, 37, 554, 555, 556, 557, - 558, 559, 560, 561, 562, 563, 564, 26, 38, 570, - 571, 572, 573, 574, 575, 422, 27, 39, 578, 579, - 580 + -1, 1, 15, 16, 28, 232, 17, 29, 432, 18, + 30, 446, 19, 31, 460, 20, 32, 476, 490, 491, + 492, 493, 494, 21, 33, 495, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 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, 433, 434, 435, 436, 437, 438, 439, + 447, 448, 449, 450, 451, 452, 477, 478, 479, 480, + 481, 482, 483, 484, 461, 462, 463, 464, 465, 466, + 467, 22, 34, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 23, 35, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 24, 36, 544, + 545, 420, 421, 422, 423, 25, 37, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 26, 38, + 572, 573, 574, 575, 576, 577, 424, 27, 39, 580, + 581, 582 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1633,160 +1635,160 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 466, 423, 451, 424, 425, 541, 438, 576, 577, - 494, 3, 581, 582, 583, 439, 440, 565, 566, 567, - 568, 569, 584, 466, 516, 517, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 585, 586, 587, 452, - 453, 588, 589, 590, 4, 591, 592, 593, 594, 595, - 5, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 596, 597, 598, 454, 426, 499, 500, 501, 502, - 503, 504, 505, 506, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, - 615, 616, 617, 618, 6, 619, 427, 620, 621, 428, - 441, 622, 442, 623, 624, 625, 626, 627, 628, 629, - 7, 630, 631, 632, 633, 634, 635, 636, 637, 638, - 639, 640, 641, 642, 643, 455, 456, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, - 667, 8, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 457, 680, 681, 682, 683, 684, - 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, - 715, 716, 9, 717, 468, 469, 470, 718, 719, 720, - 721, 722, 723, 724, 473, 725, 726, 727, 728, 429, - 10, 729, 730, 443, 467, 731, 468, 469, 470, 471, - 472, 483, 484, 485, 486, 487, 473, 11, 732, 733, - 734, 735, 736, 737, 738, 12, 739, 740, 741, 742, - 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, - 753, 754, 755, 756, 757, 758, 759, 760, 13, 761, - 762, 0, 14, 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, 763, 764, 765, 766, 71, 72, - 73, 767, 768, 769, 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, 770, 771, 772, 773, 774, - 775, 776, 777, 778, 115, 116, 117, 779, 118, 119, - 120, 780, 781, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 782, 783, 784, - 145, 785, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 786, 787, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 797, 798, 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, 799, 194, 800, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 801, 802, 803, 804, 805, 806, 807, 808, 809, - 810, 811, 210, 211, 212, 213, 214, 215, 812, 813, - 814, 815, 816, 817, 216, 818, 819, 820, 821, 822, - 823, 824, 217, 218, 825, 219, 220, 826, 221, 222, - 827, 828, 223, 224, 225, 226, 227, 228, 229, 829, - 830, 831, 230, 832, 833, 834, 835, 836, 837, 838, - 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, - 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, - 859, 860, 861, 862, 0, 0, 0, 0, 0, 0, + 2, 468, 425, 453, 426, 427, 543, 440, 578, 579, + 496, 3, 583, 584, 585, 441, 442, 567, 568, 569, + 570, 571, 586, 468, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 587, 588, 589, 454, + 455, 590, 591, 592, 593, 4, 594, 595, 596, 597, + 598, 5, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 599, 600, 456, 428, 501, 502, 503, 504, + 505, 506, 507, 508, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 6, 429, 622, 623, 430, + 443, 624, 444, 625, 626, 627, 628, 629, 630, 631, + 632, 7, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 457, 458, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 8, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 459, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 9, 470, 471, 472, 720, 721, 722, + 723, 724, 725, 726, 475, 727, 728, 729, 730, 431, + 731, 10, 732, 445, 469, 733, 470, 471, 472, 473, + 474, 485, 486, 487, 488, 489, 475, 734, 11, 735, + 736, 737, 738, 739, 740, 741, 12, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 13, + 764, 765, 0, 14, 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, 766, 767, 768, 769, + 72, 73, 74, 770, 771, 772, 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, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 116, 117, 118, 782, + 119, 120, 121, 783, 784, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 785, + 786, 787, 146, 788, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 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, 802, 195, 803, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 211, 212, 213, 214, 215, 216, + 815, 816, 817, 818, 819, 820, 217, 821, 822, 823, + 824, 825, 826, 827, 218, 219, 828, 220, 221, 829, + 222, 223, 830, 831, 224, 225, 226, 227, 228, 229, + 230, 832, 833, 834, 231, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 495, 496, 497, - 498 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, + 498, 499, 500 }; static const yytype_int16 yycheck[] = { - 0, 43, 43, 43, 45, 46, 111, 43, 269, 270, - 33, 11, 10, 10, 10, 51, 52, 238, 239, 240, - 241, 242, 10, 43, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 10, 10, 10, 79, - 80, 10, 10, 10, 44, 10, 10, 10, 10, 10, - 50, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 10, 10, 10, 104, 106, 95, 96, 97, 98, - 99, 100, 101, 102, 10, 10, 10, 10, 10, 10, + 0, 44, 44, 44, 46, 47, 112, 44, 270, 271, + 33, 11, 10, 10, 10, 52, 53, 239, 240, 241, + 242, 243, 10, 44, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 10, 10, 10, 80, + 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, + 10, 51, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 10, 10, 105, 107, 96, 97, 98, 99, + 100, 101, 102, 103, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 94, 10, 137, 10, 10, 140, - 136, 10, 138, 10, 10, 10, 10, 10, 10, 10, - 110, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 165, 166, 10, 10, 10, + 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, + 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, + 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 166, 167, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 151, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 204, 10, 10, 10, 10, 10, + 10, 10, 152, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 205, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 202, 10, 246, 247, 248, 10, 10, 10, - 10, 10, 10, 10, 256, 10, 10, 10, 10, 260, - 220, 10, 10, 259, 244, 10, 246, 247, 248, 249, - 250, 273, 274, 275, 276, 277, 256, 237, 10, 10, - 10, 10, 10, 10, 10, 245, 10, 10, 10, 10, + 10, 10, 10, 203, 247, 248, 249, 10, 10, 10, + 10, 10, 10, 10, 257, 10, 10, 10, 10, 261, + 10, 221, 10, 260, 245, 10, 247, 248, 249, 250, + 251, 274, 275, 276, 277, 278, 257, 10, 238, 10, + 10, 10, 10, 10, 10, 10, 246, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 268, 10, - 10, -1, 272, 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, 10, 10, 10, 10, 47, 48, - 49, 10, 10, 10, 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, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 103, 104, 105, 10, 107, 108, - 109, 10, 10, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 10, 10, 10, - 139, 10, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 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, 10, 203, 10, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 231, 232, 233, 234, 235, 236, 10, 10, - 10, 10, 10, 10, 243, 10, 10, 10, 10, 10, - 10, 10, 251, 252, 10, 254, 255, 10, 257, 258, - 10, 10, 261, 262, 263, 264, 265, 266, 267, 10, - 10, 10, 271, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 269, + 10, 10, -1, 273, 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, 10, 10, 10, 10, + 48, 49, 50, 10, 10, 10, 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, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 104, 105, 106, 10, + 108, 109, 110, 10, 10, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 10, + 10, 10, 140, 10, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 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, 10, 204, 10, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 232, 233, 234, 235, 236, 237, + 10, 10, 10, 10, 10, 10, 244, 10, 10, 10, + 10, 10, 10, 10, 252, 253, 10, 255, 256, 10, + 258, 259, 10, 10, 262, 263, 264, 265, 266, 267, + 268, 10, 10, 10, 272, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33, 33, 33, - 33 + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + 33, 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 279, 0, 11, 44, 50, 94, 110, 151, 202, - 220, 237, 245, 268, 272, 280, 281, 284, 287, 290, - 293, 301, 518, 529, 544, 552, 565, 574, 282, 285, - 288, 291, 294, 302, 519, 530, 545, 553, 566, 575, + 0, 280, 0, 11, 45, 51, 95, 111, 152, 203, + 221, 238, 246, 269, 273, 281, 282, 285, 288, 291, + 294, 302, 520, 531, 546, 554, 567, 576, 283, 286, + 289, 292, 295, 303, 521, 532, 547, 555, 568, 577, 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, 47, 48, 49, 53, 54, 55, 56, 57, 58, + 42, 43, 48, 49, 50, 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, 103, 104, 105, 107, 108, - 109, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 89, 90, 91, 92, 93, 94, 104, 105, 106, 108, + 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 139, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 164, 165, 166, 167, + 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 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, 203, 205, 206, 207, 208, 209, + 198, 199, 200, 201, 202, 204, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 231, 232, 233, 234, 235, 236, 243, 251, 252, 254, - 255, 257, 258, 261, 262, 263, 264, 265, 266, 267, - 271, 283, 304, 305, 306, 307, 308, 309, 310, 311, + 220, 232, 233, 234, 235, 236, 237, 244, 252, 253, + 255, 256, 258, 259, 262, 263, 264, 265, 266, 267, + 268, 272, 284, 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, @@ -1804,24 +1806,24 @@ static const yytype_uint16 yystos[] = 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, 548, 549, - 550, 551, 573, 43, 45, 46, 106, 137, 140, 260, - 286, 490, 491, 492, 493, 494, 495, 496, 43, 51, - 52, 136, 138, 259, 289, 497, 498, 499, 500, 501, - 502, 43, 79, 80, 104, 165, 166, 204, 292, 511, - 512, 513, 514, 515, 516, 517, 43, 244, 246, 247, - 248, 249, 250, 256, 295, 503, 504, 505, 506, 507, - 508, 509, 510, 273, 274, 275, 276, 277, 296, 297, - 298, 299, 300, 303, 503, 504, 505, 506, 507, 95, - 96, 97, 98, 99, 100, 101, 102, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 531, 532, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 550, 551, 552, 553, 575, 44, 46, 47, 107, 138, + 141, 261, 287, 492, 493, 494, 495, 496, 497, 498, + 44, 52, 53, 137, 139, 260, 290, 499, 500, 501, + 502, 503, 504, 44, 80, 81, 105, 166, 167, 205, + 293, 513, 514, 515, 516, 517, 518, 519, 44, 245, + 247, 248, 249, 250, 251, 257, 296, 505, 506, 507, + 508, 509, 510, 511, 512, 274, 275, 276, 277, 278, + 297, 298, 299, 300, 301, 304, 505, 506, 507, 508, + 509, 96, 97, 98, 99, 100, 101, 102, 103, 522, + 523, 524, 525, 526, 527, 528, 529, 530, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 111, 546, 547, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 554, 555, 556, 557, 558, 559, - 560, 561, 562, 563, 564, 238, 239, 240, 241, 242, - 567, 568, 569, 570, 571, 572, 269, 270, 576, 577, - 578, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 543, 544, 545, 112, 548, 549, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 239, 240, 241, + 242, 243, 569, 570, 571, 572, 573, 574, 270, 271, + 578, 579, 580, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1849,39 +1851,39 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 278, 279, 279, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 281, 282, 282, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 284, 285, 285, 286, 286, 286, 286, 286, 286, 286, - 287, 288, 288, 289, 289, 289, 289, 289, 289, 290, - 291, 291, 292, 292, 292, 292, 292, 292, 292, 293, - 294, 294, 295, 295, 295, 295, 295, 295, 295, 295, - 296, 297, 298, 299, 300, 301, 302, 302, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 304, 305, + 0, 279, 280, 280, 281, 281, 281, 281, 281, 281, + 281, 281, 281, 281, 281, 281, 282, 283, 283, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 285, 286, 286, 287, 287, 287, 287, 287, 287, + 287, 288, 289, 289, 290, 290, 290, 290, 290, 290, + 291, 292, 292, 293, 293, 293, 293, 293, 293, 293, + 294, 295, 295, 296, 296, 296, 296, 296, 296, 296, + 296, 297, 298, 299, 300, 301, 302, 303, 303, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 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, @@ -1903,17 +1905,17 @@ static const yytype_uint16 yyr1[] = 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, 519, 520, 520, 520, 520, 520, - 520, 520, 520, 521, 522, 523, 524, 525, 526, 527, - 528, 529, 530, 530, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 532, 533, 534, 535, + 516, 517, 518, 519, 520, 521, 521, 522, 522, 522, + 522, 522, 522, 522, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 532, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 553, - 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, - 565, 566, 566, 567, 567, 567, 567, 567, 568, 569, - 570, 571, 572, 573, 574, 575, 575, 576, 576, 577, - 578 + 546, 547, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 555, 556, 556, 556, 556, 556, 556, 556, 556, + 556, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 568, 569, 569, 569, 569, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 577, 578, + 578, 579, 580 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1940,44 +1942,44 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 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, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 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, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, + 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, + 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, + 3, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, - 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 3, 3, 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, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, - 2 + 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, + 1, 2, 2 }; @@ -2666,10 +2668,10 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2670 "util/configparser.c" +#line 2672 "util/configparser.c" break; - case 210: + case 211: #line 278 "./util/configparser.y" { struct config_stub* s; @@ -2681,10 +2683,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2685 "util/configparser.c" +#line 2687 "util/configparser.c" break; - case 220: + case 221: #line 295 "./util/configparser.y" { struct config_stub* s; @@ -2696,10 +2698,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2700 "util/configparser.c" +#line 2702 "util/configparser.c" break; - case 229: + case 230: #line 312 "./util/configparser.y" { struct config_view* s; @@ -2713,10 +2715,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2717 "util/configparser.c" +#line 2719 "util/configparser.c" break; - case 239: + case 240: #line 331 "./util/configparser.y" { struct config_auth* s; @@ -2733,10 +2735,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2737 "util/configparser.c" +#line 2739 "util/configparser.c" break; - case 250: + case 251: #line 355 "./util/configparser.y" { uint8_t* bitlist; @@ -2754,10 +2756,10 @@ yyreduce: } } -#line 2758 "util/configparser.c" +#line 2760 "util/configparser.c" break; - case 251: + case 252: #line 374 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); @@ -2773,20 +2775,20 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2777 "util/configparser.c" +#line 2779 "util/configparser.c" break; - case 252: + case 253: #line 391 "./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 2787 "util/configparser.c" +#line 2789 "util/configparser.c" break; - case 253: + case 254: #line 399 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); @@ -2795,20 +2797,20 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2799 "util/configparser.c" +#line 2801 "util/configparser.c" break; - case 254: + case 255: #line 409 "./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 2809 "util/configparser.c" +#line 2811 "util/configparser.c" break; - case 255: + case 256: #line 417 "./util/configparser.y" { struct config_auth* s; @@ -2825,10 +2827,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2829 "util/configparser.c" +#line 2831 "util/configparser.c" break; - case 268: + case 269: #line 440 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); @@ -2837,10 +2839,10 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2841 "util/configparser.c" +#line 2843 "util/configparser.c" break; - case 269: + case 270: #line 449 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); @@ -2849,10 +2851,10 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2853 "util/configparser.c" +#line 2855 "util/configparser.c" break; - case 270: + case 271: #line 458 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); @@ -2863,10 +2865,10 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2867 "util/configparser.c" +#line 2869 "util/configparser.c" break; - case 271: + case 272: #line 469 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); @@ -2875,10 +2877,10 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2879 "util/configparser.c" +#line 2881 "util/configparser.c" break; - case 272: + case 273: #line 478 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); @@ -2887,10 +2889,10 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2891 "util/configparser.c" +#line 2893 "util/configparser.c" break; - case 273: + case 274: #line 487 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); @@ -2899,10 +2901,10 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2903 "util/configparser.c" +#line 2905 "util/configparser.c" break; - case 274: + case 275: #line 496 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); @@ -2913,10 +2915,10 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2917 "util/configparser.c" +#line 2919 "util/configparser.c" break; - case 275: + case 276: #line 507 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); @@ -2925,10 +2927,10 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2929 "util/configparser.c" +#line 2931 "util/configparser.c" break; - case 276: + case 277: #line 516 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -2940,10 +2942,10 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2944 "util/configparser.c" +#line 2946 "util/configparser.c" break; - case 277: + case 278: #line 528 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -2956,10 +2958,10 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2960 "util/configparser.c" +#line 2962 "util/configparser.c" break; - case 278: + case 279: #line 542 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -2974,10 +2976,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2978 "util/configparser.c" +#line 2980 "util/configparser.c" break; - case 279: + case 280: #line 557 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -2988,10 +2990,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2992 "util/configparser.c" +#line 2994 "util/configparser.c" break; - case 280: + case 281: #line 568 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -3008,10 +3010,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3012 "util/configparser.c" +#line 3014 "util/configparser.c" break; - case 281: + case 282: #line 585 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -3028,10 +3030,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3032 "util/configparser.c" +#line 3034 "util/configparser.c" break; - case 282: + case 283: #line 602 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -3048,10 +3050,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3052 "util/configparser.c" +#line 3054 "util/configparser.c" break; - case 283: + case 284: #line 619 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -3068,10 +3070,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3072 "util/configparser.c" +#line 3074 "util/configparser.c" break; - case 284: + case 285: #line 636 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -3086,10 +3088,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3090 "util/configparser.c" +#line 3092 "util/configparser.c" break; - case 285: + case 286: #line 651 "./util/configparser.y" { #ifdef CLIENT_SUBNET @@ -3104,10 +3106,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3108 "util/configparser.c" +#line 3110 "util/configparser.c" break; - case 286: + case 287: #line 666 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); @@ -3120,10 +3122,10 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3124 "util/configparser.c" +#line 3126 "util/configparser.c" break; - case 287: + case 288: #line 679 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); @@ -3138,10 +3140,10 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3142 "util/configparser.c" +#line 3144 "util/configparser.c" break; - case 288: + case 289: #line 694 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); @@ -3150,10 +3152,10 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3154 "util/configparser.c" +#line 3156 "util/configparser.c" break; - case 289: + case 290: #line 703 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); @@ -3162,10 +3164,10 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3166 "util/configparser.c" +#line 3168 "util/configparser.c" break; - case 290: + case 291: #line 712 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); @@ -3174,10 +3176,10 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3178 "util/configparser.c" +#line 3180 "util/configparser.c" break; - case 291: + case 292: #line 721 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); @@ -3186,10 +3188,10 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3190 "util/configparser.c" +#line 3192 "util/configparser.c" break; - case 292: + case 293: #line 730 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); @@ -3198,10 +3200,10 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3202 "util/configparser.c" +#line 3204 "util/configparser.c" break; - case 293: + case 294: #line 739 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); @@ -3210,10 +3212,10 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3214 "util/configparser.c" +#line 3216 "util/configparser.c" break; - case 294: + case 295: #line 748 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); @@ -3222,10 +3224,10 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3226 "util/configparser.c" +#line 3228 "util/configparser.c" break; - case 295: + case 296: #line 757 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); @@ -3234,10 +3236,10 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" +#line 3240 "util/configparser.c" break; - case 296: + case 297: #line 766 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); @@ -3246,10 +3248,10 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" +#line 3252 "util/configparser.c" break; - case 297: + case 298: #line 775 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); @@ -3258,11 +3260,23 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" +#line 3264 "util/configparser.c" break; - case 298: + case 299: #line 784 "./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 3276 "util/configparser.c" + break; + + case 300: +#line 793 "./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) @@ -3270,11 +3284,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3274 "util/configparser.c" +#line 3288 "util/configparser.c" break; - case 299: -#line 793 "./util/configparser.y" + case 301: +#line 802 "./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) @@ -3282,11 +3296,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3286 "util/configparser.c" +#line 3300 "util/configparser.c" break; - case 300: -#line 802 "./util/configparser.y" + case 302: +#line 811 "./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) @@ -3294,11 +3308,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3298 "util/configparser.c" +#line 3312 "util/configparser.c" break; - case 301: -#line 811 "./util/configparser.y" + case 303: +#line 820 "./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) @@ -3310,11 +3324,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3314 "util/configparser.c" +#line 3328 "util/configparser.c" break; - case 302: -#line 824 "./util/configparser.y" + case 304: +#line 833 "./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) @@ -3322,11 +3336,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3326 "util/configparser.c" +#line 3340 "util/configparser.c" break; - case 303: -#line 833 "./util/configparser.y" + case 305: +#line 842 "./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) @@ -3338,11 +3352,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3342 "util/configparser.c" +#line 3356 "util/configparser.c" break; - case 304: -#line 846 "./util/configparser.y" + case 306: +#line 855 "./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) @@ -3350,11 +3364,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3354 "util/configparser.c" +#line 3368 "util/configparser.c" break; - case 305: -#line 855 "./util/configparser.y" + case 307: +#line 864 "./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) @@ -3362,11 +3376,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3366 "util/configparser.c" +#line 3380 "util/configparser.c" break; - case 306: -#line 864 "./util/configparser.y" + case 308: +#line 873 "./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) @@ -3374,31 +3388,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" +#line 3392 "util/configparser.c" break; - case 307: -#line 873 "./util/configparser.y" + case 309: +#line 882 "./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 3388 "util/configparser.c" +#line 3402 "util/configparser.c" break; - case 308: -#line 880 "./util/configparser.y" + case 310: +#line 889 "./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 3398 "util/configparser.c" +#line 3412 "util/configparser.c" break; - case 309: -#line 887 "./util/configparser.y" + case 311: +#line 896 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3406,21 +3420,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3410 "util/configparser.c" +#line 3424 "util/configparser.c" break; - case 310: -#line 896 "./util/configparser.y" + case 312: +#line 905 "./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 3420 "util/configparser.c" +#line 3434 "util/configparser.c" break; - case 311: -#line 903 "./util/configparser.y" + case 313: +#line 912 "./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) @@ -3428,53 +3442,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3432 "util/configparser.c" +#line 3446 "util/configparser.c" break; - case 312: -#line 912 "./util/configparser.y" + case 314: +#line 921 "./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 3443 "util/configparser.c" +#line 3457 "util/configparser.c" break; - case 313: -#line 920 "./util/configparser.y" + case 315: +#line 929 "./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 3453 "util/configparser.c" +#line 3467 "util/configparser.c" break; - case 314: -#line 927 "./util/configparser.y" + case 316: +#line 936 "./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 3463 "util/configparser.c" +#line 3477 "util/configparser.c" break; - case 315: -#line 934 "./util/configparser.y" + case 317: +#line 943 "./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 3474 "util/configparser.c" +#line 3488 "util/configparser.c" break; - case 316: -#line 942 "./util/configparser.y" + case 318: +#line 951 "./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) @@ -3482,11 +3496,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3486 "util/configparser.c" +#line 3500 "util/configparser.c" break; - case 317: -#line 951 "./util/configparser.y" + case 319: +#line 960 "./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) @@ -3494,11 +3508,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3498 "util/configparser.c" +#line 3512 "util/configparser.c" break; - case 318: -#line 960 "./util/configparser.y" + case 320: +#line 969 "./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) @@ -3511,11 +3525,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3515 "util/configparser.c" +#line 3529 "util/configparser.c" break; - case 319: -#line 974 "./util/configparser.y" + case 321: +#line 983 "./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) @@ -3523,11 +3537,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3527 "util/configparser.c" +#line 3541 "util/configparser.c" break; - case 320: -#line 983 "./util/configparser.y" + case 322: +#line 992 "./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) @@ -3535,11 +3549,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3539 "util/configparser.c" +#line 3553 "util/configparser.c" break; - case 321: -#line 992 "./util/configparser.y" + case 323: +#line 1001 "./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) @@ -3547,11 +3561,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3551 "util/configparser.c" +#line 3565 "util/configparser.c" break; - case 322: -#line 1001 "./util/configparser.y" + case 324: +#line 1010 "./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) @@ -3559,11 +3573,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3563 "util/configparser.c" +#line 3577 "util/configparser.c" break; - case 323: -#line 1010 "./util/configparser.y" + case 325: +#line 1019 "./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) @@ -3571,11 +3585,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3575 "util/configparser.c" +#line 3589 "util/configparser.c" break; - case 324: -#line 1019 "./util/configparser.y" + case 326: +#line 1028 "./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) @@ -3583,31 +3597,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" +#line 3601 "util/configparser.c" break; - case 325: -#line 1028 "./util/configparser.y" + case 327: +#line 1037 "./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 3597 "util/configparser.c" +#line 3611 "util/configparser.c" break; - case 326: -#line 1035 "./util/configparser.y" + case 328: +#line 1044 "./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 3607 "util/configparser.c" +#line 3621 "util/configparser.c" break; - case 327: -#line 1042 "./util/configparser.y" + case 329: +#line 1051 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3632,105 +3646,105 @@ yyreduce: } } } -#line 3636 "util/configparser.c" +#line 3650 "util/configparser.c" break; - case 328: -#line 1068 "./util/configparser.y" + case 330: +#line 1077 "./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 3647 "util/configparser.c" +#line 3661 "util/configparser.c" break; - case 329: -#line 1076 "./util/configparser.y" + case 331: +#line 1085 "./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 3657 "util/configparser.c" +#line 3671 "util/configparser.c" break; - case 330: -#line 1083 "./util/configparser.y" + case 332: +#line 1092 "./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 3667 "util/configparser.c" +#line 3681 "util/configparser.c" break; - case 331: -#line 1090 "./util/configparser.y" + case 333: +#line 1099 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3677 "util/configparser.c" +#line 3691 "util/configparser.c" break; - case 332: -#line 1097 "./util/configparser.y" + case 334: +#line 1106 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3687 "util/configparser.c" +#line 3701 "util/configparser.c" break; - case 333: -#line 1104 "./util/configparser.y" + case 335: +#line 1113 "./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 3698 "util/configparser.c" +#line 3712 "util/configparser.c" break; - case 334: -#line 1112 "./util/configparser.y" + case 336: +#line 1121 "./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 3709 "util/configparser.c" +#line 3723 "util/configparser.c" break; - case 335: -#line 1120 "./util/configparser.y" + case 337: +#line 1129 "./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 3720 "util/configparser.c" +#line 3734 "util/configparser.c" break; - case 336: -#line 1128 "./util/configparser.y" + case 338: +#line 1137 "./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 3730 "util/configparser.c" +#line 3744 "util/configparser.c" break; - case 337: -#line 1135 "./util/configparser.y" + case 339: +#line 1144 "./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) @@ -3740,11 +3754,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3744 "util/configparser.c" +#line 3758 "util/configparser.c" break; - case 338: -#line 1146 "./util/configparser.y" + case 340: +#line 1155 "./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) @@ -3754,21 +3768,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3758 "util/configparser.c" +#line 3772 "util/configparser.c" break; - case 339: -#line 1157 "./util/configparser.y" + case 341: +#line 1166 "./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 3768 "util/configparser.c" +#line 3782 "util/configparser.c" break; - case 340: -#line 1164 "./util/configparser.y" + case 342: +#line 1173 "./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) @@ -3776,11 +3790,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3780 "util/configparser.c" +#line 3794 "util/configparser.c" break; - case 341: -#line 1173 "./util/configparser.y" + case 343: +#line 1182 "./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) @@ -3788,11 +3802,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3792 "util/configparser.c" +#line 3806 "util/configparser.c" break; - case 342: -#line 1182 "./util/configparser.y" + case 344: +#line 1191 "./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) @@ -3800,53 +3814,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3804 "util/configparser.c" +#line 3818 "util/configparser.c" break; - case 343: -#line 1191 "./util/configparser.y" + case 345: +#line 1200 "./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 3814 "util/configparser.c" +#line 3828 "util/configparser.c" break; - case 344: -#line 1198 "./util/configparser.y" + case 346: +#line 1207 "./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 3824 "util/configparser.c" +#line 3838 "util/configparser.c" break; - case 345: -#line 1205 "./util/configparser.y" + case 347: +#line 1214 "./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 3835 "util/configparser.c" +#line 3849 "util/configparser.c" break; - case 346: -#line 1213 "./util/configparser.y" + case 348: +#line 1222 "./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 3846 "util/configparser.c" +#line 3860 "util/configparser.c" break; - case 347: -#line 1221 "./util/configparser.y" + case 349: +#line 1230 "./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) @@ -3855,11 +3869,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3859 "util/configparser.c" +#line 3873 "util/configparser.c" break; - case 348: -#line 1231 "./util/configparser.y" + case 350: +#line 1240 "./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) @@ -3868,11 +3882,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3872 "util/configparser.c" +#line 3886 "util/configparser.c" break; - case 349: -#line 1241 "./util/configparser.y" + case 351: +#line 1250 "./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) @@ -3881,22 +3895,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3885 "util/configparser.c" +#line 3899 "util/configparser.c" break; - case 350: -#line 1251 "./util/configparser.y" + case 352: +#line 1260 "./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 3896 "util/configparser.c" +#line 3910 "util/configparser.c" break; - case 351: -#line 1259 "./util/configparser.y" + case 353: +#line 1268 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3908,11 +3922,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3912 "util/configparser.c" +#line 3926 "util/configparser.c" break; - case 352: -#line 1272 "./util/configparser.y" + case 354: +#line 1281 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3922,22 +3936,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3926 "util/configparser.c" +#line 3940 "util/configparser.c" break; - case 353: -#line 1283 "./util/configparser.y" + case 355: +#line 1292 "./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 3937 "util/configparser.c" +#line 3951 "util/configparser.c" break; - case 354: -#line 1291 "./util/configparser.y" + case 356: +#line 1300 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3949,11 +3963,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3953 "util/configparser.c" +#line 3967 "util/configparser.c" break; - case 355: -#line 1304 "./util/configparser.y" + case 357: +#line 1313 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3961,11 +3975,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3965 "util/configparser.c" +#line 3979 "util/configparser.c" break; - case 356: -#line 1313 "./util/configparser.y" + case 358: +#line 1322 "./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) @@ -3973,11 +3987,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3977 "util/configparser.c" +#line 3991 "util/configparser.c" break; - case 357: -#line 1322 "./util/configparser.y" + case 359: +#line 1331 "./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) @@ -3985,11 +3999,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3989 "util/configparser.c" +#line 4003 "util/configparser.c" break; - case 358: -#line 1331 "./util/configparser.y" + case 360: +#line 1340 "./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) @@ -3998,11 +4012,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4002 "util/configparser.c" +#line 4016 "util/configparser.c" break; - case 359: -#line 1341 "./util/configparser.y" + case 361: +#line 1350 "./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) @@ -4011,22 +4025,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4015 "util/configparser.c" +#line 4029 "util/configparser.c" break; - case 360: -#line 1351 "./util/configparser.y" + case 362: +#line 1360 "./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 4026 "util/configparser.c" +#line 4040 "util/configparser.c" break; - case 361: -#line 1359 "./util/configparser.y" + case 363: +#line 1368 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4038,11 +4052,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" +#line 4056 "util/configparser.c" break; - case 362: -#line 1372 "./util/configparser.y" + case 364: +#line 1381 "./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) @@ -4050,22 +4064,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" +#line 4068 "util/configparser.c" break; - case 363: -#line 1381 "./util/configparser.y" + case 365: +#line 1390 "./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 4065 "util/configparser.c" +#line 4079 "util/configparser.c" break; - case 364: -#line 1389 "./util/configparser.y" + case 366: +#line 1398 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4073,22 +4087,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4077 "util/configparser.c" +#line 4091 "util/configparser.c" break; - case 365: -#line 1398 "./util/configparser.y" + case 367: +#line 1407 "./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 4088 "util/configparser.c" +#line 4102 "util/configparser.c" break; - case 366: -#line 1406 "./util/configparser.y" + case 368: +#line 1415 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4100,11 +4114,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4104 "util/configparser.c" +#line 4118 "util/configparser.c" break; - case 367: -#line 1419 "./util/configparser.y" + case 369: +#line 1428 "./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) @@ -4112,21 +4126,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4116 "util/configparser.c" +#line 4130 "util/configparser.c" break; - case 368: -#line 1428 "./util/configparser.y" + case 370: +#line 1437 "./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 4126 "util/configparser.c" +#line 4140 "util/configparser.c" break; - case 369: -#line 1435 "./util/configparser.y" + case 371: +#line 1444 "./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) @@ -4135,11 +4149,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4139 "util/configparser.c" +#line 4153 "util/configparser.c" break; - case 370: -#line 1445 "./util/configparser.y" + case 372: +#line 1454 "./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) @@ -4148,11 +4162,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4152 "util/configparser.c" +#line 4166 "util/configparser.c" break; - case 371: -#line 1455 "./util/configparser.y" + case 373: +#line 1464 "./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) @@ -4161,11 +4175,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4165 "util/configparser.c" +#line 4179 "util/configparser.c" break; - case 372: -#line 1465 "./util/configparser.y" + case 374: +#line 1474 "./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) @@ -4174,11 +4188,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4178 "util/configparser.c" +#line 4192 "util/configparser.c" break; - case 373: -#line 1475 "./util/configparser.y" + case 375: +#line 1484 "./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) @@ -4187,11 +4201,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4191 "util/configparser.c" +#line 4205 "util/configparser.c" break; - case 374: -#line 1485 "./util/configparser.y" + case 376: +#line 1494 "./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) @@ -4200,11 +4214,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4204 "util/configparser.c" +#line 4218 "util/configparser.c" break; - case 375: -#line 1495 "./util/configparser.y" + case 377: +#line 1504 "./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) @@ -4213,11 +4227,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4217 "util/configparser.c" +#line 4231 "util/configparser.c" break; - case 376: -#line 1505 "./util/configparser.y" + case 378: +#line 1514 "./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) @@ -4226,41 +4240,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" +#line 4244 "util/configparser.c" break; - case 377: -#line 1515 "./util/configparser.y" + case 379: +#line 1524 "./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 4240 "util/configparser.c" +#line 4254 "util/configparser.c" break; - case 378: -#line 1522 "./util/configparser.y" + case 380: +#line 1531 "./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 4250 "util/configparser.c" +#line 4264 "util/configparser.c" break; - case 379: -#line 1529 "./util/configparser.y" + case 381: +#line 1538 "./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 4260 "util/configparser.c" +#line 4274 "util/configparser.c" break; - case 380: -#line 1536 "./util/configparser.y" + case 382: +#line 1545 "./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) @@ -4268,11 +4282,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4272 "util/configparser.c" +#line 4286 "util/configparser.c" break; - case 381: -#line 1545 "./util/configparser.y" + case 383: +#line 1554 "./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) @@ -4280,11 +4294,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4284 "util/configparser.c" +#line 4298 "util/configparser.c" break; - case 382: -#line 1554 "./util/configparser.y" + case 384: +#line 1563 "./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) @@ -4292,11 +4306,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4296 "util/configparser.c" +#line 4310 "util/configparser.c" break; - case 383: -#line 1563 "./util/configparser.y" + case 385: +#line 1572 "./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) @@ -4304,21 +4318,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4308 "util/configparser.c" +#line 4322 "util/configparser.c" break; - case 384: -#line 1572 "./util/configparser.y" + case 386: +#line 1581 "./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 4318 "util/configparser.c" +#line 4332 "util/configparser.c" break; - case 385: -#line 1579 "./util/configparser.y" + case 387: +#line 1588 "./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) @@ -4327,11 +4341,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4331 "util/configparser.c" +#line 4345 "util/configparser.c" break; - case 386: -#line 1589 "./util/configparser.y" + case 388: +#line 1598 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4350,21 +4364,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4354 "util/configparser.c" +#line 4368 "util/configparser.c" break; - case 387: -#line 1609 "./util/configparser.y" + case 389: +#line 1618 "./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 4364 "util/configparser.c" +#line 4378 "util/configparser.c" break; - case 388: -#line 1616 "./util/configparser.y" + case 390: +#line 1625 "./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) { @@ -4381,11 +4395,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4399 "util/configparser.c" break; - case 389: -#line 1634 "./util/configparser.y" + case 391: +#line 1643 "./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) { @@ -4397,11 +4411,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4401 "util/configparser.c" +#line 4415 "util/configparser.c" break; - case 390: -#line 1647 "./util/configparser.y" + case 392: +#line 1656 "./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) { @@ -4413,11 +4427,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4417 "util/configparser.c" +#line 4431 "util/configparser.c" break; - case 391: -#line 1660 "./util/configparser.y" + case 393: +#line 1669 "./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) @@ -4425,11 +4439,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4429 "util/configparser.c" +#line 4443 "util/configparser.c" break; - case 392: -#line 1669 "./util/configparser.y" + case 394: +#line 1678 "./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) @@ -4437,11 +4451,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4441 "util/configparser.c" +#line 4455 "util/configparser.c" break; - case 393: -#line 1678 "./util/configparser.y" + case 395: +#line 1687 "./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) @@ -4449,11 +4463,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4453 "util/configparser.c" +#line 4467 "util/configparser.c" break; - case 394: -#line 1687 "./util/configparser.y" + case 396: +#line 1696 "./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) @@ -4461,11 +4475,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4465 "util/configparser.c" +#line 4479 "util/configparser.c" break; - case 395: -#line 1696 "./util/configparser.y" + case 397: +#line 1705 "./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) @@ -4474,11 +4488,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4478 "util/configparser.c" +#line 4492 "util/configparser.c" break; - case 396: -#line 1706 "./util/configparser.y" + case 398: +#line 1715 "./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) @@ -4487,11 +4501,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4491 "util/configparser.c" +#line 4505 "util/configparser.c" break; - case 397: -#line 1716 "./util/configparser.y" + case 399: +#line 1725 "./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) @@ -4501,11 +4515,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4505 "util/configparser.c" +#line 4519 "util/configparser.c" break; - case 398: -#line 1727 "./util/configparser.y" + case 400: +#line 1736 "./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) @@ -4513,11 +4527,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4517 "util/configparser.c" +#line 4531 "util/configparser.c" break; - case 399: -#line 1736 "./util/configparser.y" + case 401: +#line 1745 "./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) @@ -4525,11 +4539,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4529 "util/configparser.c" +#line 4543 "util/configparser.c" break; - case 400: -#line 1745 "./util/configparser.y" + case 402: +#line 1754 "./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) @@ -4537,11 +4551,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4541 "util/configparser.c" +#line 4555 "util/configparser.c" break; - case 401: -#line 1754 "./util/configparser.y" + case 403: +#line 1763 "./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) @@ -4549,11 +4563,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4553 "util/configparser.c" +#line 4567 "util/configparser.c" break; - case 402: -#line 1763 "./util/configparser.y" + case 404: +#line 1772 "./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) @@ -4561,11 +4575,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4565 "util/configparser.c" +#line 4579 "util/configparser.c" break; - case 403: -#line 1772 "./util/configparser.y" + case 405: +#line 1781 "./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) @@ -4573,11 +4587,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4577 "util/configparser.c" +#line 4591 "util/configparser.c" break; - case 404: -#line 1781 "./util/configparser.y" + case 406: +#line 1790 "./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) @@ -4589,11 +4603,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4593 "util/configparser.c" +#line 4607 "util/configparser.c" break; - case 405: -#line 1794 "./util/configparser.y" + case 407: +#line 1803 "./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) @@ -4605,11 +4619,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4609 "util/configparser.c" +#line 4623 "util/configparser.c" break; - case 406: -#line 1807 "./util/configparser.y" + case 408: +#line 1816 "./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) @@ -4617,21 +4631,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4621 "util/configparser.c" +#line 4635 "util/configparser.c" break; - case 407: -#line 1816 "./util/configparser.y" + case 409: +#line 1825 "./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 4631 "util/configparser.c" +#line 4645 "util/configparser.c" break; - case 408: -#line 1823 "./util/configparser.y" + case 410: +#line 1832 "./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) @@ -4639,11 +4653,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4643 "util/configparser.c" +#line 4657 "util/configparser.c" break; - case 409: -#line 1832 "./util/configparser.y" + case 411: +#line 1841 "./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) @@ -4651,11 +4665,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4655 "util/configparser.c" +#line 4669 "util/configparser.c" break; - case 410: -#line 1841 "./util/configparser.y" + case 412: +#line 1850 "./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) @@ -4663,11 +4677,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4667 "util/configparser.c" +#line 4681 "util/configparser.c" break; - case 411: -#line 1850 "./util/configparser.y" + case 413: +#line 1859 "./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) @@ -4676,22 +4690,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4680 "util/configparser.c" +#line 4694 "util/configparser.c" break; - case 412: -#line 1859 "./util/configparser.y" + case 414: +#line 1868 "./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 4691 "util/configparser.c" +#line 4705 "util/configparser.c" break; - case 413: -#line 1867 "./util/configparser.y" + case 415: +#line 1876 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4703,22 +4717,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4707 "util/configparser.c" +#line 4721 "util/configparser.c" break; - case 414: -#line 1880 "./util/configparser.y" + case 416: +#line 1889 "./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 4718 "util/configparser.c" +#line 4732 "util/configparser.c" break; - case 415: -#line 1888 "./util/configparser.y" + case 417: +#line 1897 "./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 && @@ -4758,21 +4772,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4762 "util/configparser.c" +#line 4776 "util/configparser.c" break; - case 416: -#line 1929 "./util/configparser.y" + case 418: +#line 1938 "./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 4772 "util/configparser.c" +#line 4786 "util/configparser.c" break; - case 417: -#line 1936 "./util/configparser.y" + case 419: +#line 1945 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4786,11 +4800,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4790 "util/configparser.c" +#line 4804 "util/configparser.c" break; - case 418: -#line 1951 "./util/configparser.y" + case 420: +#line 1960 "./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) @@ -4799,11 +4813,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4803 "util/configparser.c" +#line 4817 "util/configparser.c" break; - case 419: -#line 1961 "./util/configparser.y" + case 421: +#line 1970 "./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) @@ -4812,41 +4826,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4816 "util/configparser.c" +#line 4830 "util/configparser.c" break; - case 420: -#line 1971 "./util/configparser.y" + case 422: +#line 1980 "./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 4826 "util/configparser.c" +#line 4840 "util/configparser.c" break; - case 421: -#line 1978 "./util/configparser.y" + case 423: +#line 1987 "./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 4836 "util/configparser.c" +#line 4850 "util/configparser.c" break; - case 422: -#line 1985 "./util/configparser.y" + case 424: +#line 1994 "./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 4846 "util/configparser.c" +#line 4860 "util/configparser.c" break; - case 423: -#line 1992 "./util/configparser.y" + case 425: +#line 2001 "./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) @@ -4854,22 +4868,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4858 "util/configparser.c" +#line 4872 "util/configparser.c" break; - case 424: -#line 2001 "./util/configparser.y" + case 426: +#line 2010 "./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 4869 "util/configparser.c" +#line 4883 "util/configparser.c" break; - case 425: -#line 2009 "./util/configparser.y" + case 427: +#line 2018 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4882,11 +4896,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4886 "util/configparser.c" +#line 4900 "util/configparser.c" break; - case 426: -#line 2023 "./util/configparser.y" + case 428: +#line 2032 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4906,11 +4920,11 @@ yyreduce: } } } -#line 4910 "util/configparser.c" +#line 4924 "util/configparser.c" break; - case 427: -#line 2044 "./util/configparser.y" + case 429: +#line 2053 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4930,11 +4944,11 @@ yyreduce: } } } -#line 4934 "util/configparser.c" +#line 4948 "util/configparser.c" break; - case 428: -#line 2065 "./util/configparser.y" + case 430: +#line 2074 "./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, @@ -4945,11 +4959,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4949 "util/configparser.c" +#line 4963 "util/configparser.c" break; - case 429: -#line 2077 "./util/configparser.y" + case 431: +#line 2086 "./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, @@ -4960,11 +4974,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4964 "util/configparser.c" +#line 4978 "util/configparser.c" break; - case 430: -#line 2089 "./util/configparser.y" + case 432: +#line 2098 "./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, @@ -4975,11 +4989,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4979 "util/configparser.c" +#line 4993 "util/configparser.c" break; - case 431: -#line 2101 "./util/configparser.y" + case 433: +#line 2110 "./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, @@ -4987,11 +5001,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4991 "util/configparser.c" +#line 5005 "util/configparser.c" break; - case 432: -#line 2110 "./util/configparser.y" + case 434: +#line 2119 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5011,11 +5025,11 @@ yyreduce: } } } -#line 5015 "util/configparser.c" +#line 5029 "util/configparser.c" break; - case 433: -#line 2131 "./util/configparser.y" + case 435: +#line 2140 "./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) @@ -5023,11 +5037,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5027 "util/configparser.c" +#line 5041 "util/configparser.c" break; - case 434: -#line 2141 "./util/configparser.y" + case 436: +#line 2150 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5035,33 +5049,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5039 "util/configparser.c" +#line 5053 "util/configparser.c" break; - case 435: -#line 2150 "./util/configparser.y" + case 437: +#line 2159 "./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 5050 "util/configparser.c" +#line 5064 "util/configparser.c" break; - case 436: -#line 2158 "./util/configparser.y" + case 438: +#line 2167 "./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 5061 "util/configparser.c" +#line 5075 "util/configparser.c" break; - case 437: -#line 2166 "./util/configparser.y" + case 439: +#line 2175 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5073,11 +5087,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5077 "util/configparser.c" +#line 5091 "util/configparser.c" break; - case 438: -#line 2179 "./util/configparser.y" + case 440: +#line 2188 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5089,11 +5103,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5093 "util/configparser.c" +#line 5107 "util/configparser.c" break; - case 439: -#line 2192 "./util/configparser.y" + case 441: +#line 2201 "./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) { @@ -5107,11 +5121,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5111 "util/configparser.c" +#line 5125 "util/configparser.c" break; - case 440: -#line 2207 "./util/configparser.y" + case 442: +#line 2216 "./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) { @@ -5125,11 +5139,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5129 "util/configparser.c" +#line 5143 "util/configparser.c" break; - case 441: -#line 2222 "./util/configparser.y" + case 443: +#line 2231 "./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) @@ -5137,11 +5151,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5141 "util/configparser.c" +#line 5155 "util/configparser.c" break; - case 442: -#line 2231 "./util/configparser.y" + case 444: +#line 2240 "./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) @@ -5149,20 +5163,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5153 "util/configparser.c" +#line 5167 "util/configparser.c" break; - case 443: -#line 2240 "./util/configparser.y" + case 445: +#line 2249 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5162 "util/configparser.c" +#line 5176 "util/configparser.c" break; - case 444: -#line 2246 "./util/configparser.y" + case 446: +#line 2255 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5170,11 +5184,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5174 "util/configparser.c" +#line 5188 "util/configparser.c" break; - case 445: -#line 2255 "./util/configparser.y" + case 447: +#line 2264 "./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) @@ -5182,11 +5196,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5186 "util/configparser.c" +#line 5200 "util/configparser.c" break; - case 446: -#line 2264 "./util/configparser.y" + case 448: +#line 2273 "./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) @@ -5195,11 +5209,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5199 "util/configparser.c" +#line 5213 "util/configparser.c" break; - case 447: -#line 2274 "./util/configparser.y" + case 449: +#line 2283 "./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) @@ -5208,11 +5222,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5212 "util/configparser.c" +#line 5226 "util/configparser.c" break; - case 448: -#line 2284 "./util/configparser.y" + case 450: +#line 2293 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5224,11 +5238,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5228 "util/configparser.c" +#line 5242 "util/configparser.c" break; - case 449: -#line 2297 "./util/configparser.y" + case 451: +#line 2306 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5240,11 +5254,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5244 "util/configparser.c" +#line 5258 "util/configparser.c" break; - case 450: -#line 2310 "./util/configparser.y" + case 452: +#line 2319 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5255,11 +5269,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5259 "util/configparser.c" +#line 5273 "util/configparser.c" break; - case 451: -#line 2322 "./util/configparser.y" + case 453: +#line 2331 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5272,11 +5286,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5276 "util/configparser.c" +#line 5290 "util/configparser.c" break; - case 452: -#line 2336 "./util/configparser.y" + case 454: +#line 2345 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5287,11 +5301,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5291 "util/configparser.c" +#line 5305 "util/configparser.c" break; - case 453: -#line 2348 "./util/configparser.y" + case 455: +#line 2357 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5304,11 +5318,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5308 "util/configparser.c" +#line 5322 "util/configparser.c" break; - case 454: -#line 2362 "./util/configparser.y" + case 456: +#line 2371 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5317,31 +5331,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5321 "util/configparser.c" +#line 5335 "util/configparser.c" break; - case 455: -#line 2372 "./util/configparser.y" + case 457: +#line 2381 "./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 5331 "util/configparser.c" +#line 5345 "util/configparser.c" break; - case 456: -#line 2379 "./util/configparser.y" + case 458: +#line 2388 "./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 5341 "util/configparser.c" +#line 5355 "util/configparser.c" break; - case 457: -#line 2386 "./util/configparser.y" + case 459: +#line 2395 "./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) @@ -5349,11 +5363,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5353 "util/configparser.c" +#line 5367 "util/configparser.c" break; - case 458: -#line 2395 "./util/configparser.y" + case 460: +#line 2404 "./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) @@ -5361,11 +5375,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5365 "util/configparser.c" +#line 5379 "util/configparser.c" break; - case 459: -#line 2404 "./util/configparser.y" + case 461: +#line 2413 "./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) @@ -5374,11 +5388,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5378 "util/configparser.c" +#line 5392 "util/configparser.c" break; - case 460: -#line 2414 "./util/configparser.y" + case 462: +#line 2423 "./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) @@ -5387,11 +5401,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5391 "util/configparser.c" +#line 5405 "util/configparser.c" break; - case 461: -#line 2424 "./util/configparser.y" + case 463: +#line 2433 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5400,31 +5414,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5404 "util/configparser.c" +#line 5418 "util/configparser.c" break; - case 462: -#line 2434 "./util/configparser.y" + case 464: +#line 2443 "./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 5414 "util/configparser.c" +#line 5428 "util/configparser.c" break; - case 463: -#line 2441 "./util/configparser.y" + case 465: +#line 2450 "./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 5424 "util/configparser.c" +#line 5438 "util/configparser.c" break; - case 464: -#line 2448 "./util/configparser.y" + case 466: +#line 2457 "./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) @@ -5432,11 +5446,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5436 "util/configparser.c" +#line 5450 "util/configparser.c" break; - case 465: -#line 2457 "./util/configparser.y" + case 467: +#line 2466 "./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) @@ -5444,11 +5458,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5448 "util/configparser.c" +#line 5462 "util/configparser.c" break; - case 466: -#line 2466 "./util/configparser.y" + case 468: +#line 2475 "./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) @@ -5457,11 +5471,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5461 "util/configparser.c" +#line 5475 "util/configparser.c" break; - case 467: -#line 2476 "./util/configparser.y" + case 469: +#line 2485 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5470,52 +5484,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5474 "util/configparser.c" +#line 5488 "util/configparser.c" break; - case 468: -#line 2486 "./util/configparser.y" + case 470: +#line 2495 "./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 5484 "util/configparser.c" +#line 5498 "util/configparser.c" break; - case 469: -#line 2493 "./util/configparser.y" + case 471: +#line 2502 "./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 5494 "util/configparser.c" +#line 5508 "util/configparser.c" break; - case 470: -#line 2500 "./util/configparser.y" + case 472: +#line 2509 "./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 5504 "util/configparser.c" +#line 5518 "util/configparser.c" break; - case 471: -#line 2507 "./util/configparser.y" + case 473: +#line 2516 "./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 5515 "util/configparser.c" +#line 5529 "util/configparser.c" break; - case 472: -#line 2515 "./util/configparser.y" + case 474: +#line 2524 "./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) @@ -5524,11 +5538,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5528 "util/configparser.c" +#line 5542 "util/configparser.c" break; - case 473: -#line 2525 "./util/configparser.y" + case 475: +#line 2534 "./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) @@ -5537,11 +5551,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5541 "util/configparser.c" +#line 5555 "util/configparser.c" break; - case 474: -#line 2535 "./util/configparser.y" + case 476: +#line 2544 "./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) @@ -5550,11 +5564,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5554 "util/configparser.c" +#line 5568 "util/configparser.c" break; - case 475: -#line 2545 "./util/configparser.y" + case 477: +#line 2554 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5563,11 +5577,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5567 "util/configparser.c" +#line 5581 "util/configparser.c" break; - case 476: -#line 2555 "./util/configparser.y" + case 478: +#line 2564 "./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 && @@ -5605,11 +5619,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5609 "util/configparser.c" +#line 5623 "util/configparser.c" break; - case 477: -#line 2594 "./util/configparser.y" + case 479: +#line 2603 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5618,33 +5632,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5622 "util/configparser.c" +#line 5636 "util/configparser.c" break; - case 478: -#line 2604 "./util/configparser.y" + case 480: +#line 2613 "./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 5633 "util/configparser.c" +#line 5647 "util/configparser.c" break; - case 479: -#line 2612 "./util/configparser.y" + case 481: +#line 2621 "./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 5644 "util/configparser.c" +#line 5658 "util/configparser.c" break; - case 480: -#line 2620 "./util/configparser.y" + case 482: +#line 2629 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5658,11 +5672,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5662 "util/configparser.c" +#line 5676 "util/configparser.c" break; - case 481: -#line 2635 "./util/configparser.y" + case 483: +#line 2644 "./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) @@ -5670,19 +5684,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5674 "util/configparser.c" +#line 5688 "util/configparser.c" break; - case 482: -#line 2644 "./util/configparser.y" + case 484: +#line 2653 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5682 "util/configparser.c" +#line 5696 "util/configparser.c" break; - case 493: -#line 2655 "./util/configparser.y" + case 495: +#line 2664 "./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) @@ -5691,11 +5705,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5695 "util/configparser.c" +#line 5709 "util/configparser.c" break; - case 494: -#line 2665 "./util/configparser.y" + case 496: +#line 2674 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5703,79 +5717,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5707 "util/configparser.c" +#line 5721 "util/configparser.c" break; - case 495: -#line 2674 "./util/configparser.y" + case 497: +#line 2683 "./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 5717 "util/configparser.c" +#line 5731 "util/configparser.c" break; - case 496: -#line 2681 "./util/configparser.y" + case 498: +#line 2690 "./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 5727 "util/configparser.c" +#line 5741 "util/configparser.c" break; - case 497: -#line 2688 "./util/configparser.y" + case 499: +#line 2697 "./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 5737 "util/configparser.c" +#line 5751 "util/configparser.c" break; - case 498: -#line 2695 "./util/configparser.y" + case 500: +#line 2704 "./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 5747 "util/configparser.c" +#line 5761 "util/configparser.c" break; - case 499: -#line 2702 "./util/configparser.y" + case 501: +#line 2711 "./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 5757 "util/configparser.c" +#line 5771 "util/configparser.c" break; - case 500: -#line 2709 "./util/configparser.y" + case 502: +#line 2718 "./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 5767 "util/configparser.c" +#line 5781 "util/configparser.c" break; - case 501: -#line 2716 "./util/configparser.y" + case 503: +#line 2725 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5775 "util/configparser.c" +#line 5789 "util/configparser.c" break; - case 516: -#line 2733 "./util/configparser.y" + case 518: +#line 2742 "./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) @@ -5783,21 +5797,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5787 "util/configparser.c" +#line 5801 "util/configparser.c" break; - case 517: -#line 2742 "./util/configparser.y" + case 519: +#line 2751 "./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 5797 "util/configparser.c" +#line 5811 "util/configparser.c" break; - case 518: -#line 2749 "./util/configparser.y" + case 520: +#line 2758 "./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) @@ -5805,11 +5819,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5809 "util/configparser.c" +#line 5823 "util/configparser.c" break; - case 519: -#line 2758 "./util/configparser.y" + case 521: +#line 2767 "./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) @@ -5817,31 +5831,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5821 "util/configparser.c" +#line 5835 "util/configparser.c" break; - case 520: -#line 2767 "./util/configparser.y" + case 522: +#line 2776 "./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 5831 "util/configparser.c" +#line 5845 "util/configparser.c" break; - case 521: -#line 2774 "./util/configparser.y" + case 523: +#line 2783 "./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 5841 "util/configparser.c" +#line 5855 "util/configparser.c" break; - case 522: -#line 2781 "./util/configparser.y" + case 524: +#line 2790 "./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) @@ -5850,11 +5864,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5854 "util/configparser.c" +#line 5868 "util/configparser.c" break; - case 523: -#line 2791 "./util/configparser.y" + case 525: +#line 2800 "./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) @@ -5863,11 +5877,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5867 "util/configparser.c" +#line 5881 "util/configparser.c" break; - case 524: -#line 2801 "./util/configparser.y" + case 526: +#line 2810 "./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) @@ -5876,11 +5890,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5880 "util/configparser.c" +#line 5894 "util/configparser.c" break; - case 525: -#line 2811 "./util/configparser.y" + case 527: +#line 2820 "./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) @@ -5889,11 +5903,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5893 "util/configparser.c" +#line 5907 "util/configparser.c" break; - case 526: -#line 2821 "./util/configparser.y" + case 528: +#line 2830 "./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) @@ -5902,11 +5916,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5906 "util/configparser.c" +#line 5920 "util/configparser.c" break; - case 527: -#line 2831 "./util/configparser.y" + case 529: +#line 2840 "./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) @@ -5915,29 +5929,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5919 "util/configparser.c" +#line 5933 "util/configparser.c" break; - case 528: -#line 2841 "./util/configparser.y" + case 530: +#line 2850 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 5927 "util/configparser.c" +#line 5941 "util/configparser.c" break; - case 532: -#line 2850 "./util/configparser.y" + case 534: +#line 2859 "./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 5937 "util/configparser.c" +#line 5951 "util/configparser.c" break; - case 533: -#line 2856 "./util/configparser.y" + case 535: +#line 2865 "./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) @@ -5946,21 +5960,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5950 "util/configparser.c" +#line 5964 "util/configparser.c" break; - case 534: -#line 2866 "./util/configparser.y" + case 536: +#line 2875 "./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 5960 "util/configparser.c" +#line 5974 "util/configparser.c" break; - case 535: -#line 2873 "./util/configparser.y" + case 537: +#line 2882 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5968,30 +5982,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5972 "util/configparser.c" +#line 5986 "util/configparser.c" break; - case 536: -#line 2882 "./util/configparser.y" + case 538: +#line 2891 "./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 5983 "util/configparser.c" +#line 5997 "util/configparser.c" break; - case 537: -#line 2890 "./util/configparser.y" + case 539: +#line 2899 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5991 "util/configparser.c" +#line 6005 "util/configparser.c" break; - case 550: -#line 2906 "./util/configparser.y" + case 552: +#line 2915 "./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) @@ -5999,11 +6013,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6003 "util/configparser.c" +#line 6017 "util/configparser.c" break; - case 551: -#line 2916 "./util/configparser.y" + case 553: +#line 2925 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6011,21 +6025,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6015 "util/configparser.c" +#line 6029 "util/configparser.c" break; - case 552: -#line 2925 "./util/configparser.y" + case 554: +#line 2934 "./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 6025 "util/configparser.c" +#line 6039 "util/configparser.c" break; - case 553: -#line 2932 "./util/configparser.y" + case 555: +#line 2941 "./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))) @@ -6033,21 +6047,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6037 "util/configparser.c" +#line 6051 "util/configparser.c" break; - case 554: -#line 2941 "./util/configparser.y" + case 556: +#line 2950 "./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 6047 "util/configparser.c" +#line 6061 "util/configparser.c" break; - case 555: -#line 2948 "./util/configparser.y" + case 557: +#line 2957 "./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))) @@ -6055,22 +6069,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6059 "util/configparser.c" +#line 6073 "util/configparser.c" break; - case 556: -#line 2957 "./util/configparser.y" + case 558: +#line 2966 "./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 6070 "util/configparser.c" +#line 6084 "util/configparser.c" break; - case 557: -#line 2965 "./util/configparser.y" + case 559: +#line 2974 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6082,22 +6096,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6086 "util/configparser.c" +#line 6100 "util/configparser.c" break; - case 558: -#line 2978 "./util/configparser.y" + case 560: +#line 2987 "./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 6097 "util/configparser.c" +#line 6111 "util/configparser.c" break; - case 559: -#line 2986 "./util/configparser.y" + case 561: +#line 2995 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6109,19 +6123,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6113 "util/configparser.c" +#line 6127 "util/configparser.c" break; - case 560: -#line 2999 "./util/configparser.y" + case 562: +#line 3008 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6121 "util/configparser.c" +#line 6135 "util/configparser.c" break; - case 568: -#line 3009 "./util/configparser.y" + case 570: +#line 3018 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6132,11 +6146,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6136 "util/configparser.c" +#line 6150 "util/configparser.c" break; - case 569: -#line 3021 "./util/configparser.y" + case 571: +#line 3030 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6147,11 +6161,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6151 "util/configparser.c" +#line 6165 "util/configparser.c" break; - case 570: -#line 3033 "./util/configparser.y" + case 572: +#line 3042 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6162,11 +6176,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6166 "util/configparser.c" +#line 6180 "util/configparser.c" break; - case 571: -#line 3045 "./util/configparser.y" + case 573: +#line 3054 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6180,11 +6194,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6184 "util/configparser.c" +#line 6198 "util/configparser.c" break; - case 572: -#line 3060 "./util/configparser.y" + case 574: +#line 3069 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6196,11 +6210,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6200 "util/configparser.c" +#line 6214 "util/configparser.c" break; - case 573: -#line 3073 "./util/configparser.y" + case 575: +#line 3082 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6210,19 +6224,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6214 "util/configparser.c" +#line 6228 "util/configparser.c" break; - case 574: -#line 3084 "./util/configparser.y" + case 576: +#line 3093 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6222 "util/configparser.c" +#line 6236 "util/configparser.c" break; - case 579: -#line 3093 "./util/configparser.y" + case 581: +#line 3102 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6236,11 +6250,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6240 "util/configparser.c" +#line 6254 "util/configparser.c" break; - case 580: -#line 3108 "./util/configparser.y" + case 582: +#line 3117 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6254,11 +6268,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6258 "util/configparser.c" +#line 6272 "util/configparser.c" break; -#line 6262 "util/configparser.c" +#line 6276 "util/configparser.c" default: break; } @@ -6490,7 +6504,7 @@ yyreturn: #endif return yyresult; } -#line 3122 "./util/configparser.y" +#line 3131 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 4d7e6b12f..919bdadf6 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -63,267 +63,268 @@ extern int yydebug; VAR_PORT = 269, VAR_OUTGOING_RANGE = 270, VAR_INTERFACE = 271, - VAR_DO_IP4 = 272, - VAR_DO_IP6 = 273, - VAR_PREFER_IP6 = 274, - VAR_DO_UDP = 275, - VAR_DO_TCP = 276, - VAR_TCP_MSS = 277, - VAR_OUTGOING_TCP_MSS = 278, - VAR_TCP_IDLE_TIMEOUT = 279, - VAR_EDNS_TCP_KEEPALIVE = 280, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 281, - VAR_CHROOT = 282, - VAR_USERNAME = 283, - VAR_DIRECTORY = 284, - VAR_LOGFILE = 285, - VAR_PIDFILE = 286, - VAR_MSG_CACHE_SIZE = 287, - VAR_MSG_CACHE_SLABS = 288, - VAR_NUM_QUERIES_PER_THREAD = 289, - VAR_RRSET_CACHE_SIZE = 290, - VAR_RRSET_CACHE_SLABS = 291, - VAR_OUTGOING_NUM_TCP = 292, - VAR_INFRA_HOST_TTL = 293, - VAR_INFRA_LAME_TTL = 294, - VAR_INFRA_CACHE_SLABS = 295, - VAR_INFRA_CACHE_NUMHOSTS = 296, - VAR_INFRA_CACHE_LAME_SIZE = 297, - VAR_NAME = 298, - VAR_STUB_ZONE = 299, - VAR_STUB_HOST = 300, - VAR_STUB_ADDR = 301, - VAR_TARGET_FETCH_POLICY = 302, - VAR_HARDEN_SHORT_BUFSIZE = 303, - VAR_HARDEN_LARGE_QUERIES = 304, - VAR_FORWARD_ZONE = 305, - VAR_FORWARD_HOST = 306, - VAR_FORWARD_ADDR = 307, - VAR_DO_NOT_QUERY_ADDRESS = 308, - VAR_HIDE_IDENTITY = 309, - VAR_HIDE_VERSION = 310, - VAR_IDENTITY = 311, - VAR_VERSION = 312, - VAR_HARDEN_GLUE = 313, - VAR_MODULE_CONF = 314, - VAR_TRUST_ANCHOR_FILE = 315, - VAR_TRUST_ANCHOR = 316, - VAR_VAL_OVERRIDE_DATE = 317, - VAR_BOGUS_TTL = 318, - VAR_VAL_CLEAN_ADDITIONAL = 319, - VAR_VAL_PERMISSIVE_MODE = 320, - VAR_INCOMING_NUM_TCP = 321, - VAR_MSG_BUFFER_SIZE = 322, - VAR_KEY_CACHE_SIZE = 323, - VAR_KEY_CACHE_SLABS = 324, - VAR_TRUSTED_KEYS_FILE = 325, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 326, - VAR_USE_SYSLOG = 327, - VAR_OUTGOING_INTERFACE = 328, - VAR_ROOT_HINTS = 329, - VAR_DO_NOT_QUERY_LOCALHOST = 330, - VAR_CACHE_MAX_TTL = 331, - VAR_HARDEN_DNSSEC_STRIPPED = 332, - VAR_ACCESS_CONTROL = 333, - VAR_LOCAL_ZONE = 334, - VAR_LOCAL_DATA = 335, - VAR_INTERFACE_AUTOMATIC = 336, - VAR_STATISTICS_INTERVAL = 337, - VAR_DO_DAEMONIZE = 338, - VAR_USE_CAPS_FOR_ID = 339, - VAR_STATISTICS_CUMULATIVE = 340, - VAR_OUTGOING_PORT_PERMIT = 341, - VAR_OUTGOING_PORT_AVOID = 342, - VAR_DLV_ANCHOR_FILE = 343, - VAR_DLV_ANCHOR = 344, - VAR_NEG_CACHE_SIZE = 345, - VAR_HARDEN_REFERRAL_PATH = 346, - VAR_PRIVATE_ADDRESS = 347, - VAR_PRIVATE_DOMAIN = 348, - VAR_REMOTE_CONTROL = 349, - VAR_CONTROL_ENABLE = 350, - VAR_CONTROL_INTERFACE = 351, - VAR_CONTROL_PORT = 352, - VAR_SERVER_KEY_FILE = 353, - VAR_SERVER_CERT_FILE = 354, - VAR_CONTROL_KEY_FILE = 355, - VAR_CONTROL_CERT_FILE = 356, - VAR_CONTROL_USE_CERT = 357, - VAR_EXTENDED_STATISTICS = 358, - VAR_LOCAL_DATA_PTR = 359, - VAR_JOSTLE_TIMEOUT = 360, - VAR_STUB_PRIME = 361, - VAR_UNWANTED_REPLY_THRESHOLD = 362, - VAR_LOG_TIME_ASCII = 363, - VAR_DOMAIN_INSECURE = 364, - VAR_PYTHON = 365, - VAR_PYTHON_SCRIPT = 366, - VAR_VAL_SIG_SKEW_MIN = 367, - VAR_VAL_SIG_SKEW_MAX = 368, - VAR_CACHE_MIN_TTL = 369, - VAR_VAL_LOG_LEVEL = 370, - VAR_AUTO_TRUST_ANCHOR_FILE = 371, - VAR_KEEP_MISSING = 372, - VAR_ADD_HOLDDOWN = 373, - VAR_DEL_HOLDDOWN = 374, - VAR_SO_RCVBUF = 375, - VAR_EDNS_BUFFER_SIZE = 376, - VAR_PREFETCH = 377, - VAR_PREFETCH_KEY = 378, - VAR_SO_SNDBUF = 379, - VAR_SO_REUSEPORT = 380, - VAR_HARDEN_BELOW_NXDOMAIN = 381, - VAR_IGNORE_CD_FLAG = 382, - VAR_LOG_QUERIES = 383, - VAR_LOG_REPLIES = 384, - VAR_LOG_LOCAL_ACTIONS = 385, - VAR_TCP_UPSTREAM = 386, - VAR_SSL_UPSTREAM = 387, - VAR_SSL_SERVICE_KEY = 388, - VAR_SSL_SERVICE_PEM = 389, - VAR_SSL_PORT = 390, - VAR_FORWARD_FIRST = 391, - VAR_STUB_SSL_UPSTREAM = 392, - VAR_FORWARD_SSL_UPSTREAM = 393, - VAR_TLS_CERT_BUNDLE = 394, - VAR_STUB_FIRST = 395, - VAR_MINIMAL_RESPONSES = 396, - VAR_RRSET_ROUNDROBIN = 397, - VAR_MAX_UDP_SIZE = 398, - VAR_DELAY_CLOSE = 399, - VAR_UNBLOCK_LAN_ZONES = 400, - VAR_INSECURE_LAN_ZONES = 401, - VAR_INFRA_CACHE_MIN_RTT = 402, - VAR_DNS64_PREFIX = 403, - VAR_DNS64_SYNTHALL = 404, - VAR_DNS64_IGNORE_AAAA = 405, - VAR_DNSTAP = 406, - VAR_DNSTAP_ENABLE = 407, - VAR_DNSTAP_SOCKET_PATH = 408, - VAR_DNSTAP_SEND_IDENTITY = 409, - VAR_DNSTAP_SEND_VERSION = 410, - VAR_DNSTAP_IDENTITY = 411, - VAR_DNSTAP_VERSION = 412, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 413, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 414, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 415, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 416, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 417, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 418, - VAR_RESPONSE_IP_TAG = 419, - VAR_RESPONSE_IP = 420, - VAR_RESPONSE_IP_DATA = 421, - VAR_HARDEN_ALGO_DOWNGRADE = 422, - VAR_IP_TRANSPARENT = 423, - VAR_DISABLE_DNSSEC_LAME_CHECK = 424, - VAR_IP_RATELIMIT = 425, - VAR_IP_RATELIMIT_SLABS = 426, - VAR_IP_RATELIMIT_SIZE = 427, - VAR_RATELIMIT = 428, - VAR_RATELIMIT_SLABS = 429, - VAR_RATELIMIT_SIZE = 430, - VAR_RATELIMIT_FOR_DOMAIN = 431, - VAR_RATELIMIT_BELOW_DOMAIN = 432, - VAR_IP_RATELIMIT_FACTOR = 433, - VAR_RATELIMIT_FACTOR = 434, - VAR_SEND_CLIENT_SUBNET = 435, - VAR_CLIENT_SUBNET_ZONE = 436, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 437, - VAR_CLIENT_SUBNET_OPCODE = 438, - VAR_MAX_CLIENT_SUBNET_IPV4 = 439, - VAR_MAX_CLIENT_SUBNET_IPV6 = 440, - VAR_MIN_CLIENT_SUBNET_IPV4 = 441, - VAR_MIN_CLIENT_SUBNET_IPV6 = 442, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 443, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 444, - VAR_CAPS_WHITELIST = 445, - VAR_CACHE_MAX_NEGATIVE_TTL = 446, - VAR_PERMIT_SMALL_HOLDDOWN = 447, - VAR_QNAME_MINIMISATION = 448, - VAR_QNAME_MINIMISATION_STRICT = 449, - VAR_IP_FREEBIND = 450, - VAR_DEFINE_TAG = 451, - VAR_LOCAL_ZONE_TAG = 452, - VAR_ACCESS_CONTROL_TAG = 453, - VAR_LOCAL_ZONE_OVERRIDE = 454, - VAR_ACCESS_CONTROL_TAG_ACTION = 455, - VAR_ACCESS_CONTROL_TAG_DATA = 456, - VAR_VIEW = 457, - VAR_ACCESS_CONTROL_VIEW = 458, - VAR_VIEW_FIRST = 459, - VAR_SERVE_EXPIRED = 460, - VAR_SERVE_EXPIRED_TTL = 461, - VAR_SERVE_EXPIRED_TTL_RESET = 462, - VAR_SERVE_EXPIRED_REPLY_TTL = 463, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 464, - VAR_FAKE_DSA = 465, - VAR_FAKE_SHA1 = 466, - VAR_LOG_IDENTITY = 467, - VAR_HIDE_TRUSTANCHOR = 468, - VAR_TRUST_ANCHOR_SIGNALING = 469, - VAR_AGGRESSIVE_NSEC = 470, - VAR_USE_SYSTEMD = 471, - VAR_SHM_ENABLE = 472, - VAR_SHM_KEY = 473, - VAR_ROOT_KEY_SENTINEL = 474, - VAR_DNSCRYPT = 475, - VAR_DNSCRYPT_ENABLE = 476, - VAR_DNSCRYPT_PORT = 477, - VAR_DNSCRYPT_PROVIDER = 478, - VAR_DNSCRYPT_SECRET_KEY = 479, - VAR_DNSCRYPT_PROVIDER_CERT = 480, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 481, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 482, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 483, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 484, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 485, - VAR_IPSECMOD_ENABLED = 486, - VAR_IPSECMOD_HOOK = 487, - VAR_IPSECMOD_IGNORE_BOGUS = 488, - VAR_IPSECMOD_MAX_TTL = 489, - VAR_IPSECMOD_WHITELIST = 490, - VAR_IPSECMOD_STRICT = 491, - VAR_CACHEDB = 492, - VAR_CACHEDB_BACKEND = 493, - VAR_CACHEDB_SECRETSEED = 494, - VAR_CACHEDB_REDISHOST = 495, - VAR_CACHEDB_REDISPORT = 496, - VAR_CACHEDB_REDISTIMEOUT = 497, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 498, - VAR_FOR_UPSTREAM = 499, - VAR_AUTH_ZONE = 500, - VAR_ZONEFILE = 501, - VAR_MASTER = 502, - VAR_URL = 503, - VAR_FOR_DOWNSTREAM = 504, - VAR_FALLBACK_ENABLED = 505, - VAR_TLS_ADDITIONAL_PORT = 506, - VAR_LOW_RTT = 507, - VAR_LOW_RTT_PERMIL = 508, - VAR_FAST_SERVER_PERMIL = 509, - VAR_FAST_SERVER_NUM = 510, - VAR_ALLOW_NOTIFY = 511, - VAR_TLS_WIN_CERT = 512, - VAR_TCP_CONNECTION_LIMIT = 513, - VAR_FORWARD_NO_CACHE = 514, - VAR_STUB_NO_CACHE = 515, - VAR_LOG_SERVFAIL = 516, - VAR_DENY_ANY = 517, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 518, - VAR_LOG_TAG_QUERYREPLY = 519, - VAR_STREAM_WAIT_SIZE = 520, - VAR_TLS_CIPHERS = 521, - VAR_TLS_CIPHERSUITES = 522, - VAR_IPSET = 523, - VAR_IPSET_NAME_V4 = 524, - VAR_IPSET_NAME_V6 = 525, - VAR_TLS_SESSION_TICKET_KEYS = 526, - VAR_RPZ = 527, - VAR_TAGS = 528, - VAR_RPZ_ACTION_OVERRIDE = 529, - VAR_RPZ_CNAME_OVERRIDE = 530, - VAR_RPZ_LOG = 531, - VAR_RPZ_LOG_NAME = 532 + VAR_PREFER_IP4 = 272, + VAR_DO_IP4 = 273, + VAR_DO_IP6 = 274, + VAR_PREFER_IP6 = 275, + VAR_DO_UDP = 276, + VAR_DO_TCP = 277, + VAR_TCP_MSS = 278, + VAR_OUTGOING_TCP_MSS = 279, + VAR_TCP_IDLE_TIMEOUT = 280, + VAR_EDNS_TCP_KEEPALIVE = 281, + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, + VAR_CHROOT = 283, + VAR_USERNAME = 284, + VAR_DIRECTORY = 285, + VAR_LOGFILE = 286, + VAR_PIDFILE = 287, + VAR_MSG_CACHE_SIZE = 288, + VAR_MSG_CACHE_SLABS = 289, + VAR_NUM_QUERIES_PER_THREAD = 290, + VAR_RRSET_CACHE_SIZE = 291, + VAR_RRSET_CACHE_SLABS = 292, + VAR_OUTGOING_NUM_TCP = 293, + VAR_INFRA_HOST_TTL = 294, + VAR_INFRA_LAME_TTL = 295, + VAR_INFRA_CACHE_SLABS = 296, + VAR_INFRA_CACHE_NUMHOSTS = 297, + VAR_INFRA_CACHE_LAME_SIZE = 298, + VAR_NAME = 299, + VAR_STUB_ZONE = 300, + VAR_STUB_HOST = 301, + VAR_STUB_ADDR = 302, + VAR_TARGET_FETCH_POLICY = 303, + VAR_HARDEN_SHORT_BUFSIZE = 304, + VAR_HARDEN_LARGE_QUERIES = 305, + VAR_FORWARD_ZONE = 306, + VAR_FORWARD_HOST = 307, + VAR_FORWARD_ADDR = 308, + VAR_DO_NOT_QUERY_ADDRESS = 309, + VAR_HIDE_IDENTITY = 310, + VAR_HIDE_VERSION = 311, + VAR_IDENTITY = 312, + VAR_VERSION = 313, + VAR_HARDEN_GLUE = 314, + VAR_MODULE_CONF = 315, + VAR_TRUST_ANCHOR_FILE = 316, + VAR_TRUST_ANCHOR = 317, + VAR_VAL_OVERRIDE_DATE = 318, + VAR_BOGUS_TTL = 319, + VAR_VAL_CLEAN_ADDITIONAL = 320, + VAR_VAL_PERMISSIVE_MODE = 321, + VAR_INCOMING_NUM_TCP = 322, + VAR_MSG_BUFFER_SIZE = 323, + VAR_KEY_CACHE_SIZE = 324, + VAR_KEY_CACHE_SLABS = 325, + VAR_TRUSTED_KEYS_FILE = 326, + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, + VAR_USE_SYSLOG = 328, + VAR_OUTGOING_INTERFACE = 329, + VAR_ROOT_HINTS = 330, + VAR_DO_NOT_QUERY_LOCALHOST = 331, + VAR_CACHE_MAX_TTL = 332, + VAR_HARDEN_DNSSEC_STRIPPED = 333, + VAR_ACCESS_CONTROL = 334, + VAR_LOCAL_ZONE = 335, + VAR_LOCAL_DATA = 336, + VAR_INTERFACE_AUTOMATIC = 337, + VAR_STATISTICS_INTERVAL = 338, + VAR_DO_DAEMONIZE = 339, + VAR_USE_CAPS_FOR_ID = 340, + VAR_STATISTICS_CUMULATIVE = 341, + VAR_OUTGOING_PORT_PERMIT = 342, + VAR_OUTGOING_PORT_AVOID = 343, + VAR_DLV_ANCHOR_FILE = 344, + VAR_DLV_ANCHOR = 345, + VAR_NEG_CACHE_SIZE = 346, + VAR_HARDEN_REFERRAL_PATH = 347, + VAR_PRIVATE_ADDRESS = 348, + VAR_PRIVATE_DOMAIN = 349, + VAR_REMOTE_CONTROL = 350, + VAR_CONTROL_ENABLE = 351, + VAR_CONTROL_INTERFACE = 352, + VAR_CONTROL_PORT = 353, + VAR_SERVER_KEY_FILE = 354, + VAR_SERVER_CERT_FILE = 355, + VAR_CONTROL_KEY_FILE = 356, + VAR_CONTROL_CERT_FILE = 357, + VAR_CONTROL_USE_CERT = 358, + VAR_EXTENDED_STATISTICS = 359, + VAR_LOCAL_DATA_PTR = 360, + VAR_JOSTLE_TIMEOUT = 361, + VAR_STUB_PRIME = 362, + VAR_UNWANTED_REPLY_THRESHOLD = 363, + VAR_LOG_TIME_ASCII = 364, + VAR_DOMAIN_INSECURE = 365, + VAR_PYTHON = 366, + VAR_PYTHON_SCRIPT = 367, + VAR_VAL_SIG_SKEW_MIN = 368, + VAR_VAL_SIG_SKEW_MAX = 369, + VAR_CACHE_MIN_TTL = 370, + VAR_VAL_LOG_LEVEL = 371, + VAR_AUTO_TRUST_ANCHOR_FILE = 372, + VAR_KEEP_MISSING = 373, + VAR_ADD_HOLDDOWN = 374, + VAR_DEL_HOLDDOWN = 375, + VAR_SO_RCVBUF = 376, + VAR_EDNS_BUFFER_SIZE = 377, + VAR_PREFETCH = 378, + VAR_PREFETCH_KEY = 379, + VAR_SO_SNDBUF = 380, + VAR_SO_REUSEPORT = 381, + VAR_HARDEN_BELOW_NXDOMAIN = 382, + VAR_IGNORE_CD_FLAG = 383, + VAR_LOG_QUERIES = 384, + VAR_LOG_REPLIES = 385, + VAR_LOG_LOCAL_ACTIONS = 386, + VAR_TCP_UPSTREAM = 387, + VAR_SSL_UPSTREAM = 388, + VAR_SSL_SERVICE_KEY = 389, + VAR_SSL_SERVICE_PEM = 390, + VAR_SSL_PORT = 391, + VAR_FORWARD_FIRST = 392, + VAR_STUB_SSL_UPSTREAM = 393, + VAR_FORWARD_SSL_UPSTREAM = 394, + VAR_TLS_CERT_BUNDLE = 395, + VAR_STUB_FIRST = 396, + VAR_MINIMAL_RESPONSES = 397, + VAR_RRSET_ROUNDROBIN = 398, + VAR_MAX_UDP_SIZE = 399, + VAR_DELAY_CLOSE = 400, + VAR_UNBLOCK_LAN_ZONES = 401, + VAR_INSECURE_LAN_ZONES = 402, + VAR_INFRA_CACHE_MIN_RTT = 403, + VAR_DNS64_PREFIX = 404, + VAR_DNS64_SYNTHALL = 405, + VAR_DNS64_IGNORE_AAAA = 406, + VAR_DNSTAP = 407, + VAR_DNSTAP_ENABLE = 408, + VAR_DNSTAP_SOCKET_PATH = 409, + VAR_DNSTAP_SEND_IDENTITY = 410, + VAR_DNSTAP_SEND_VERSION = 411, + VAR_DNSTAP_IDENTITY = 412, + VAR_DNSTAP_VERSION = 413, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 414, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 415, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 416, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 417, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 418, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 419, + VAR_RESPONSE_IP_TAG = 420, + VAR_RESPONSE_IP = 421, + VAR_RESPONSE_IP_DATA = 422, + VAR_HARDEN_ALGO_DOWNGRADE = 423, + VAR_IP_TRANSPARENT = 424, + VAR_DISABLE_DNSSEC_LAME_CHECK = 425, + VAR_IP_RATELIMIT = 426, + VAR_IP_RATELIMIT_SLABS = 427, + VAR_IP_RATELIMIT_SIZE = 428, + VAR_RATELIMIT = 429, + VAR_RATELIMIT_SLABS = 430, + VAR_RATELIMIT_SIZE = 431, + VAR_RATELIMIT_FOR_DOMAIN = 432, + VAR_RATELIMIT_BELOW_DOMAIN = 433, + VAR_IP_RATELIMIT_FACTOR = 434, + VAR_RATELIMIT_FACTOR = 435, + VAR_SEND_CLIENT_SUBNET = 436, + VAR_CLIENT_SUBNET_ZONE = 437, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 438, + VAR_CLIENT_SUBNET_OPCODE = 439, + VAR_MAX_CLIENT_SUBNET_IPV4 = 440, + VAR_MAX_CLIENT_SUBNET_IPV6 = 441, + VAR_MIN_CLIENT_SUBNET_IPV4 = 442, + VAR_MIN_CLIENT_SUBNET_IPV6 = 443, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 444, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 445, + VAR_CAPS_WHITELIST = 446, + VAR_CACHE_MAX_NEGATIVE_TTL = 447, + VAR_PERMIT_SMALL_HOLDDOWN = 448, + VAR_QNAME_MINIMISATION = 449, + VAR_QNAME_MINIMISATION_STRICT = 450, + VAR_IP_FREEBIND = 451, + VAR_DEFINE_TAG = 452, + VAR_LOCAL_ZONE_TAG = 453, + VAR_ACCESS_CONTROL_TAG = 454, + VAR_LOCAL_ZONE_OVERRIDE = 455, + VAR_ACCESS_CONTROL_TAG_ACTION = 456, + VAR_ACCESS_CONTROL_TAG_DATA = 457, + VAR_VIEW = 458, + VAR_ACCESS_CONTROL_VIEW = 459, + VAR_VIEW_FIRST = 460, + VAR_SERVE_EXPIRED = 461, + VAR_SERVE_EXPIRED_TTL = 462, + VAR_SERVE_EXPIRED_TTL_RESET = 463, + VAR_SERVE_EXPIRED_REPLY_TTL = 464, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 465, + VAR_FAKE_DSA = 466, + VAR_FAKE_SHA1 = 467, + VAR_LOG_IDENTITY = 468, + VAR_HIDE_TRUSTANCHOR = 469, + VAR_TRUST_ANCHOR_SIGNALING = 470, + VAR_AGGRESSIVE_NSEC = 471, + VAR_USE_SYSTEMD = 472, + VAR_SHM_ENABLE = 473, + VAR_SHM_KEY = 474, + VAR_ROOT_KEY_SENTINEL = 475, + VAR_DNSCRYPT = 476, + VAR_DNSCRYPT_ENABLE = 477, + VAR_DNSCRYPT_PORT = 478, + VAR_DNSCRYPT_PROVIDER = 479, + VAR_DNSCRYPT_SECRET_KEY = 480, + VAR_DNSCRYPT_PROVIDER_CERT = 481, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 482, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 483, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 484, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 485, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 486, + VAR_IPSECMOD_ENABLED = 487, + VAR_IPSECMOD_HOOK = 488, + VAR_IPSECMOD_IGNORE_BOGUS = 489, + VAR_IPSECMOD_MAX_TTL = 490, + VAR_IPSECMOD_WHITELIST = 491, + VAR_IPSECMOD_STRICT = 492, + VAR_CACHEDB = 493, + VAR_CACHEDB_BACKEND = 494, + VAR_CACHEDB_SECRETSEED = 495, + VAR_CACHEDB_REDISHOST = 496, + VAR_CACHEDB_REDISPORT = 497, + VAR_CACHEDB_REDISTIMEOUT = 498, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 499, + VAR_FOR_UPSTREAM = 500, + VAR_AUTH_ZONE = 501, + VAR_ZONEFILE = 502, + VAR_MASTER = 503, + VAR_URL = 504, + VAR_FOR_DOWNSTREAM = 505, + VAR_FALLBACK_ENABLED = 506, + VAR_TLS_ADDITIONAL_PORT = 507, + VAR_LOW_RTT = 508, + VAR_LOW_RTT_PERMIL = 509, + VAR_FAST_SERVER_PERMIL = 510, + VAR_FAST_SERVER_NUM = 511, + VAR_ALLOW_NOTIFY = 512, + VAR_TLS_WIN_CERT = 513, + VAR_TCP_CONNECTION_LIMIT = 514, + VAR_FORWARD_NO_CACHE = 515, + VAR_STUB_NO_CACHE = 516, + VAR_LOG_SERVFAIL = 517, + VAR_DENY_ANY = 518, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 519, + VAR_LOG_TAG_QUERYREPLY = 520, + VAR_STREAM_WAIT_SIZE = 521, + VAR_TLS_CIPHERS = 522, + VAR_TLS_CIPHERSUITES = 523, + VAR_IPSET = 524, + VAR_IPSET_NAME_V4 = 525, + VAR_IPSET_NAME_V6 = 526, + VAR_TLS_SESSION_TICKET_KEYS = 527, + VAR_RPZ = 528, + VAR_TAGS = 529, + VAR_RPZ_ACTION_OVERRIDE = 530, + VAR_RPZ_CNAME_OVERRIDE = 531, + VAR_RPZ_LOG = 532, + VAR_RPZ_LOG_NAME = 533 }; #endif /* Tokens. */ @@ -341,267 +342,268 @@ extern int yydebug; #define VAR_PORT 269 #define VAR_OUTGOING_RANGE 270 #define VAR_INTERFACE 271 -#define VAR_DO_IP4 272 -#define VAR_DO_IP6 273 -#define VAR_PREFER_IP6 274 -#define VAR_DO_UDP 275 -#define VAR_DO_TCP 276 -#define VAR_TCP_MSS 277 -#define VAR_OUTGOING_TCP_MSS 278 -#define VAR_TCP_IDLE_TIMEOUT 279 -#define VAR_EDNS_TCP_KEEPALIVE 280 -#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 281 -#define VAR_CHROOT 282 -#define VAR_USERNAME 283 -#define VAR_DIRECTORY 284 -#define VAR_LOGFILE 285 -#define VAR_PIDFILE 286 -#define VAR_MSG_CACHE_SIZE 287 -#define VAR_MSG_CACHE_SLABS 288 -#define VAR_NUM_QUERIES_PER_THREAD 289 -#define VAR_RRSET_CACHE_SIZE 290 -#define VAR_RRSET_CACHE_SLABS 291 -#define VAR_OUTGOING_NUM_TCP 292 -#define VAR_INFRA_HOST_TTL 293 -#define VAR_INFRA_LAME_TTL 294 -#define VAR_INFRA_CACHE_SLABS 295 -#define VAR_INFRA_CACHE_NUMHOSTS 296 -#define VAR_INFRA_CACHE_LAME_SIZE 297 -#define VAR_NAME 298 -#define VAR_STUB_ZONE 299 -#define VAR_STUB_HOST 300 -#define VAR_STUB_ADDR 301 -#define VAR_TARGET_FETCH_POLICY 302 -#define VAR_HARDEN_SHORT_BUFSIZE 303 -#define VAR_HARDEN_LARGE_QUERIES 304 -#define VAR_FORWARD_ZONE 305 -#define VAR_FORWARD_HOST 306 -#define VAR_FORWARD_ADDR 307 -#define VAR_DO_NOT_QUERY_ADDRESS 308 -#define VAR_HIDE_IDENTITY 309 -#define VAR_HIDE_VERSION 310 -#define VAR_IDENTITY 311 -#define VAR_VERSION 312 -#define VAR_HARDEN_GLUE 313 -#define VAR_MODULE_CONF 314 -#define VAR_TRUST_ANCHOR_FILE 315 -#define VAR_TRUST_ANCHOR 316 -#define VAR_VAL_OVERRIDE_DATE 317 -#define VAR_BOGUS_TTL 318 -#define VAR_VAL_CLEAN_ADDITIONAL 319 -#define VAR_VAL_PERMISSIVE_MODE 320 -#define VAR_INCOMING_NUM_TCP 321 -#define VAR_MSG_BUFFER_SIZE 322 -#define VAR_KEY_CACHE_SIZE 323 -#define VAR_KEY_CACHE_SLABS 324 -#define VAR_TRUSTED_KEYS_FILE 325 -#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 326 -#define VAR_USE_SYSLOG 327 -#define VAR_OUTGOING_INTERFACE 328 -#define VAR_ROOT_HINTS 329 -#define VAR_DO_NOT_QUERY_LOCALHOST 330 -#define VAR_CACHE_MAX_TTL 331 -#define VAR_HARDEN_DNSSEC_STRIPPED 332 -#define VAR_ACCESS_CONTROL 333 -#define VAR_LOCAL_ZONE 334 -#define VAR_LOCAL_DATA 335 -#define VAR_INTERFACE_AUTOMATIC 336 -#define VAR_STATISTICS_INTERVAL 337 -#define VAR_DO_DAEMONIZE 338 -#define VAR_USE_CAPS_FOR_ID 339 -#define VAR_STATISTICS_CUMULATIVE 340 -#define VAR_OUTGOING_PORT_PERMIT 341 -#define VAR_OUTGOING_PORT_AVOID 342 -#define VAR_DLV_ANCHOR_FILE 343 -#define VAR_DLV_ANCHOR 344 -#define VAR_NEG_CACHE_SIZE 345 -#define VAR_HARDEN_REFERRAL_PATH 346 -#define VAR_PRIVATE_ADDRESS 347 -#define VAR_PRIVATE_DOMAIN 348 -#define VAR_REMOTE_CONTROL 349 -#define VAR_CONTROL_ENABLE 350 -#define VAR_CONTROL_INTERFACE 351 -#define VAR_CONTROL_PORT 352 -#define VAR_SERVER_KEY_FILE 353 -#define VAR_SERVER_CERT_FILE 354 -#define VAR_CONTROL_KEY_FILE 355 -#define VAR_CONTROL_CERT_FILE 356 -#define VAR_CONTROL_USE_CERT 357 -#define VAR_EXTENDED_STATISTICS 358 -#define VAR_LOCAL_DATA_PTR 359 -#define VAR_JOSTLE_TIMEOUT 360 -#define VAR_STUB_PRIME 361 -#define VAR_UNWANTED_REPLY_THRESHOLD 362 -#define VAR_LOG_TIME_ASCII 363 -#define VAR_DOMAIN_INSECURE 364 -#define VAR_PYTHON 365 -#define VAR_PYTHON_SCRIPT 366 -#define VAR_VAL_SIG_SKEW_MIN 367 -#define VAR_VAL_SIG_SKEW_MAX 368 -#define VAR_CACHE_MIN_TTL 369 -#define VAR_VAL_LOG_LEVEL 370 -#define VAR_AUTO_TRUST_ANCHOR_FILE 371 -#define VAR_KEEP_MISSING 372 -#define VAR_ADD_HOLDDOWN 373 -#define VAR_DEL_HOLDDOWN 374 -#define VAR_SO_RCVBUF 375 -#define VAR_EDNS_BUFFER_SIZE 376 -#define VAR_PREFETCH 377 -#define VAR_PREFETCH_KEY 378 -#define VAR_SO_SNDBUF 379 -#define VAR_SO_REUSEPORT 380 -#define VAR_HARDEN_BELOW_NXDOMAIN 381 -#define VAR_IGNORE_CD_FLAG 382 -#define VAR_LOG_QUERIES 383 -#define VAR_LOG_REPLIES 384 -#define VAR_LOG_LOCAL_ACTIONS 385 -#define VAR_TCP_UPSTREAM 386 -#define VAR_SSL_UPSTREAM 387 -#define VAR_SSL_SERVICE_KEY 388 -#define VAR_SSL_SERVICE_PEM 389 -#define VAR_SSL_PORT 390 -#define VAR_FORWARD_FIRST 391 -#define VAR_STUB_SSL_UPSTREAM 392 -#define VAR_FORWARD_SSL_UPSTREAM 393 -#define VAR_TLS_CERT_BUNDLE 394 -#define VAR_STUB_FIRST 395 -#define VAR_MINIMAL_RESPONSES 396 -#define VAR_RRSET_ROUNDROBIN 397 -#define VAR_MAX_UDP_SIZE 398 -#define VAR_DELAY_CLOSE 399 -#define VAR_UNBLOCK_LAN_ZONES 400 -#define VAR_INSECURE_LAN_ZONES 401 -#define VAR_INFRA_CACHE_MIN_RTT 402 -#define VAR_DNS64_PREFIX 403 -#define VAR_DNS64_SYNTHALL 404 -#define VAR_DNS64_IGNORE_AAAA 405 -#define VAR_DNSTAP 406 -#define VAR_DNSTAP_ENABLE 407 -#define VAR_DNSTAP_SOCKET_PATH 408 -#define VAR_DNSTAP_SEND_IDENTITY 409 -#define VAR_DNSTAP_SEND_VERSION 410 -#define VAR_DNSTAP_IDENTITY 411 -#define VAR_DNSTAP_VERSION 412 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 413 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 414 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 415 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 416 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 417 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 418 -#define VAR_RESPONSE_IP_TAG 419 -#define VAR_RESPONSE_IP 420 -#define VAR_RESPONSE_IP_DATA 421 -#define VAR_HARDEN_ALGO_DOWNGRADE 422 -#define VAR_IP_TRANSPARENT 423 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 424 -#define VAR_IP_RATELIMIT 425 -#define VAR_IP_RATELIMIT_SLABS 426 -#define VAR_IP_RATELIMIT_SIZE 427 -#define VAR_RATELIMIT 428 -#define VAR_RATELIMIT_SLABS 429 -#define VAR_RATELIMIT_SIZE 430 -#define VAR_RATELIMIT_FOR_DOMAIN 431 -#define VAR_RATELIMIT_BELOW_DOMAIN 432 -#define VAR_IP_RATELIMIT_FACTOR 433 -#define VAR_RATELIMIT_FACTOR 434 -#define VAR_SEND_CLIENT_SUBNET 435 -#define VAR_CLIENT_SUBNET_ZONE 436 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 437 -#define VAR_CLIENT_SUBNET_OPCODE 438 -#define VAR_MAX_CLIENT_SUBNET_IPV4 439 -#define VAR_MAX_CLIENT_SUBNET_IPV6 440 -#define VAR_MIN_CLIENT_SUBNET_IPV4 441 -#define VAR_MIN_CLIENT_SUBNET_IPV6 442 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 443 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 444 -#define VAR_CAPS_WHITELIST 445 -#define VAR_CACHE_MAX_NEGATIVE_TTL 446 -#define VAR_PERMIT_SMALL_HOLDDOWN 447 -#define VAR_QNAME_MINIMISATION 448 -#define VAR_QNAME_MINIMISATION_STRICT 449 -#define VAR_IP_FREEBIND 450 -#define VAR_DEFINE_TAG 451 -#define VAR_LOCAL_ZONE_TAG 452 -#define VAR_ACCESS_CONTROL_TAG 453 -#define VAR_LOCAL_ZONE_OVERRIDE 454 -#define VAR_ACCESS_CONTROL_TAG_ACTION 455 -#define VAR_ACCESS_CONTROL_TAG_DATA 456 -#define VAR_VIEW 457 -#define VAR_ACCESS_CONTROL_VIEW 458 -#define VAR_VIEW_FIRST 459 -#define VAR_SERVE_EXPIRED 460 -#define VAR_SERVE_EXPIRED_TTL 461 -#define VAR_SERVE_EXPIRED_TTL_RESET 462 -#define VAR_SERVE_EXPIRED_REPLY_TTL 463 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 464 -#define VAR_FAKE_DSA 465 -#define VAR_FAKE_SHA1 466 -#define VAR_LOG_IDENTITY 467 -#define VAR_HIDE_TRUSTANCHOR 468 -#define VAR_TRUST_ANCHOR_SIGNALING 469 -#define VAR_AGGRESSIVE_NSEC 470 -#define VAR_USE_SYSTEMD 471 -#define VAR_SHM_ENABLE 472 -#define VAR_SHM_KEY 473 -#define VAR_ROOT_KEY_SENTINEL 474 -#define VAR_DNSCRYPT 475 -#define VAR_DNSCRYPT_ENABLE 476 -#define VAR_DNSCRYPT_PORT 477 -#define VAR_DNSCRYPT_PROVIDER 478 -#define VAR_DNSCRYPT_SECRET_KEY 479 -#define VAR_DNSCRYPT_PROVIDER_CERT 480 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 481 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 482 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 483 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 484 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 485 -#define VAR_IPSECMOD_ENABLED 486 -#define VAR_IPSECMOD_HOOK 487 -#define VAR_IPSECMOD_IGNORE_BOGUS 488 -#define VAR_IPSECMOD_MAX_TTL 489 -#define VAR_IPSECMOD_WHITELIST 490 -#define VAR_IPSECMOD_STRICT 491 -#define VAR_CACHEDB 492 -#define VAR_CACHEDB_BACKEND 493 -#define VAR_CACHEDB_SECRETSEED 494 -#define VAR_CACHEDB_REDISHOST 495 -#define VAR_CACHEDB_REDISPORT 496 -#define VAR_CACHEDB_REDISTIMEOUT 497 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 498 -#define VAR_FOR_UPSTREAM 499 -#define VAR_AUTH_ZONE 500 -#define VAR_ZONEFILE 501 -#define VAR_MASTER 502 -#define VAR_URL 503 -#define VAR_FOR_DOWNSTREAM 504 -#define VAR_FALLBACK_ENABLED 505 -#define VAR_TLS_ADDITIONAL_PORT 506 -#define VAR_LOW_RTT 507 -#define VAR_LOW_RTT_PERMIL 508 -#define VAR_FAST_SERVER_PERMIL 509 -#define VAR_FAST_SERVER_NUM 510 -#define VAR_ALLOW_NOTIFY 511 -#define VAR_TLS_WIN_CERT 512 -#define VAR_TCP_CONNECTION_LIMIT 513 -#define VAR_FORWARD_NO_CACHE 514 -#define VAR_STUB_NO_CACHE 515 -#define VAR_LOG_SERVFAIL 516 -#define VAR_DENY_ANY 517 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 518 -#define VAR_LOG_TAG_QUERYREPLY 519 -#define VAR_STREAM_WAIT_SIZE 520 -#define VAR_TLS_CIPHERS 521 -#define VAR_TLS_CIPHERSUITES 522 -#define VAR_IPSET 523 -#define VAR_IPSET_NAME_V4 524 -#define VAR_IPSET_NAME_V6 525 -#define VAR_TLS_SESSION_TICKET_KEYS 526 -#define VAR_RPZ 527 -#define VAR_TAGS 528 -#define VAR_RPZ_ACTION_OVERRIDE 529 -#define VAR_RPZ_CNAME_OVERRIDE 530 -#define VAR_RPZ_LOG 531 -#define VAR_RPZ_LOG_NAME 532 +#define VAR_PREFER_IP4 272 +#define VAR_DO_IP4 273 +#define VAR_DO_IP6 274 +#define VAR_PREFER_IP6 275 +#define VAR_DO_UDP 276 +#define VAR_DO_TCP 277 +#define VAR_TCP_MSS 278 +#define VAR_OUTGOING_TCP_MSS 279 +#define VAR_TCP_IDLE_TIMEOUT 280 +#define VAR_EDNS_TCP_KEEPALIVE 281 +#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 282 +#define VAR_CHROOT 283 +#define VAR_USERNAME 284 +#define VAR_DIRECTORY 285 +#define VAR_LOGFILE 286 +#define VAR_PIDFILE 287 +#define VAR_MSG_CACHE_SIZE 288 +#define VAR_MSG_CACHE_SLABS 289 +#define VAR_NUM_QUERIES_PER_THREAD 290 +#define VAR_RRSET_CACHE_SIZE 291 +#define VAR_RRSET_CACHE_SLABS 292 +#define VAR_OUTGOING_NUM_TCP 293 +#define VAR_INFRA_HOST_TTL 294 +#define VAR_INFRA_LAME_TTL 295 +#define VAR_INFRA_CACHE_SLABS 296 +#define VAR_INFRA_CACHE_NUMHOSTS 297 +#define VAR_INFRA_CACHE_LAME_SIZE 298 +#define VAR_NAME 299 +#define VAR_STUB_ZONE 300 +#define VAR_STUB_HOST 301 +#define VAR_STUB_ADDR 302 +#define VAR_TARGET_FETCH_POLICY 303 +#define VAR_HARDEN_SHORT_BUFSIZE 304 +#define VAR_HARDEN_LARGE_QUERIES 305 +#define VAR_FORWARD_ZONE 306 +#define VAR_FORWARD_HOST 307 +#define VAR_FORWARD_ADDR 308 +#define VAR_DO_NOT_QUERY_ADDRESS 309 +#define VAR_HIDE_IDENTITY 310 +#define VAR_HIDE_VERSION 311 +#define VAR_IDENTITY 312 +#define VAR_VERSION 313 +#define VAR_HARDEN_GLUE 314 +#define VAR_MODULE_CONF 315 +#define VAR_TRUST_ANCHOR_FILE 316 +#define VAR_TRUST_ANCHOR 317 +#define VAR_VAL_OVERRIDE_DATE 318 +#define VAR_BOGUS_TTL 319 +#define VAR_VAL_CLEAN_ADDITIONAL 320 +#define VAR_VAL_PERMISSIVE_MODE 321 +#define VAR_INCOMING_NUM_TCP 322 +#define VAR_MSG_BUFFER_SIZE 323 +#define VAR_KEY_CACHE_SIZE 324 +#define VAR_KEY_CACHE_SLABS 325 +#define VAR_TRUSTED_KEYS_FILE 326 +#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 327 +#define VAR_USE_SYSLOG 328 +#define VAR_OUTGOING_INTERFACE 329 +#define VAR_ROOT_HINTS 330 +#define VAR_DO_NOT_QUERY_LOCALHOST 331 +#define VAR_CACHE_MAX_TTL 332 +#define VAR_HARDEN_DNSSEC_STRIPPED 333 +#define VAR_ACCESS_CONTROL 334 +#define VAR_LOCAL_ZONE 335 +#define VAR_LOCAL_DATA 336 +#define VAR_INTERFACE_AUTOMATIC 337 +#define VAR_STATISTICS_INTERVAL 338 +#define VAR_DO_DAEMONIZE 339 +#define VAR_USE_CAPS_FOR_ID 340 +#define VAR_STATISTICS_CUMULATIVE 341 +#define VAR_OUTGOING_PORT_PERMIT 342 +#define VAR_OUTGOING_PORT_AVOID 343 +#define VAR_DLV_ANCHOR_FILE 344 +#define VAR_DLV_ANCHOR 345 +#define VAR_NEG_CACHE_SIZE 346 +#define VAR_HARDEN_REFERRAL_PATH 347 +#define VAR_PRIVATE_ADDRESS 348 +#define VAR_PRIVATE_DOMAIN 349 +#define VAR_REMOTE_CONTROL 350 +#define VAR_CONTROL_ENABLE 351 +#define VAR_CONTROL_INTERFACE 352 +#define VAR_CONTROL_PORT 353 +#define VAR_SERVER_KEY_FILE 354 +#define VAR_SERVER_CERT_FILE 355 +#define VAR_CONTROL_KEY_FILE 356 +#define VAR_CONTROL_CERT_FILE 357 +#define VAR_CONTROL_USE_CERT 358 +#define VAR_EXTENDED_STATISTICS 359 +#define VAR_LOCAL_DATA_PTR 360 +#define VAR_JOSTLE_TIMEOUT 361 +#define VAR_STUB_PRIME 362 +#define VAR_UNWANTED_REPLY_THRESHOLD 363 +#define VAR_LOG_TIME_ASCII 364 +#define VAR_DOMAIN_INSECURE 365 +#define VAR_PYTHON 366 +#define VAR_PYTHON_SCRIPT 367 +#define VAR_VAL_SIG_SKEW_MIN 368 +#define VAR_VAL_SIG_SKEW_MAX 369 +#define VAR_CACHE_MIN_TTL 370 +#define VAR_VAL_LOG_LEVEL 371 +#define VAR_AUTO_TRUST_ANCHOR_FILE 372 +#define VAR_KEEP_MISSING 373 +#define VAR_ADD_HOLDDOWN 374 +#define VAR_DEL_HOLDDOWN 375 +#define VAR_SO_RCVBUF 376 +#define VAR_EDNS_BUFFER_SIZE 377 +#define VAR_PREFETCH 378 +#define VAR_PREFETCH_KEY 379 +#define VAR_SO_SNDBUF 380 +#define VAR_SO_REUSEPORT 381 +#define VAR_HARDEN_BELOW_NXDOMAIN 382 +#define VAR_IGNORE_CD_FLAG 383 +#define VAR_LOG_QUERIES 384 +#define VAR_LOG_REPLIES 385 +#define VAR_LOG_LOCAL_ACTIONS 386 +#define VAR_TCP_UPSTREAM 387 +#define VAR_SSL_UPSTREAM 388 +#define VAR_SSL_SERVICE_KEY 389 +#define VAR_SSL_SERVICE_PEM 390 +#define VAR_SSL_PORT 391 +#define VAR_FORWARD_FIRST 392 +#define VAR_STUB_SSL_UPSTREAM 393 +#define VAR_FORWARD_SSL_UPSTREAM 394 +#define VAR_TLS_CERT_BUNDLE 395 +#define VAR_STUB_FIRST 396 +#define VAR_MINIMAL_RESPONSES 397 +#define VAR_RRSET_ROUNDROBIN 398 +#define VAR_MAX_UDP_SIZE 399 +#define VAR_DELAY_CLOSE 400 +#define VAR_UNBLOCK_LAN_ZONES 401 +#define VAR_INSECURE_LAN_ZONES 402 +#define VAR_INFRA_CACHE_MIN_RTT 403 +#define VAR_DNS64_PREFIX 404 +#define VAR_DNS64_SYNTHALL 405 +#define VAR_DNS64_IGNORE_AAAA 406 +#define VAR_DNSTAP 407 +#define VAR_DNSTAP_ENABLE 408 +#define VAR_DNSTAP_SOCKET_PATH 409 +#define VAR_DNSTAP_SEND_IDENTITY 410 +#define VAR_DNSTAP_SEND_VERSION 411 +#define VAR_DNSTAP_IDENTITY 412 +#define VAR_DNSTAP_VERSION 413 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 414 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 415 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 416 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 417 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 418 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 419 +#define VAR_RESPONSE_IP_TAG 420 +#define VAR_RESPONSE_IP 421 +#define VAR_RESPONSE_IP_DATA 422 +#define VAR_HARDEN_ALGO_DOWNGRADE 423 +#define VAR_IP_TRANSPARENT 424 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 425 +#define VAR_IP_RATELIMIT 426 +#define VAR_IP_RATELIMIT_SLABS 427 +#define VAR_IP_RATELIMIT_SIZE 428 +#define VAR_RATELIMIT 429 +#define VAR_RATELIMIT_SLABS 430 +#define VAR_RATELIMIT_SIZE 431 +#define VAR_RATELIMIT_FOR_DOMAIN 432 +#define VAR_RATELIMIT_BELOW_DOMAIN 433 +#define VAR_IP_RATELIMIT_FACTOR 434 +#define VAR_RATELIMIT_FACTOR 435 +#define VAR_SEND_CLIENT_SUBNET 436 +#define VAR_CLIENT_SUBNET_ZONE 437 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 438 +#define VAR_CLIENT_SUBNET_OPCODE 439 +#define VAR_MAX_CLIENT_SUBNET_IPV4 440 +#define VAR_MAX_CLIENT_SUBNET_IPV6 441 +#define VAR_MIN_CLIENT_SUBNET_IPV4 442 +#define VAR_MIN_CLIENT_SUBNET_IPV6 443 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 444 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 445 +#define VAR_CAPS_WHITELIST 446 +#define VAR_CACHE_MAX_NEGATIVE_TTL 447 +#define VAR_PERMIT_SMALL_HOLDDOWN 448 +#define VAR_QNAME_MINIMISATION 449 +#define VAR_QNAME_MINIMISATION_STRICT 450 +#define VAR_IP_FREEBIND 451 +#define VAR_DEFINE_TAG 452 +#define VAR_LOCAL_ZONE_TAG 453 +#define VAR_ACCESS_CONTROL_TAG 454 +#define VAR_LOCAL_ZONE_OVERRIDE 455 +#define VAR_ACCESS_CONTROL_TAG_ACTION 456 +#define VAR_ACCESS_CONTROL_TAG_DATA 457 +#define VAR_VIEW 458 +#define VAR_ACCESS_CONTROL_VIEW 459 +#define VAR_VIEW_FIRST 460 +#define VAR_SERVE_EXPIRED 461 +#define VAR_SERVE_EXPIRED_TTL 462 +#define VAR_SERVE_EXPIRED_TTL_RESET 463 +#define VAR_SERVE_EXPIRED_REPLY_TTL 464 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 465 +#define VAR_FAKE_DSA 466 +#define VAR_FAKE_SHA1 467 +#define VAR_LOG_IDENTITY 468 +#define VAR_HIDE_TRUSTANCHOR 469 +#define VAR_TRUST_ANCHOR_SIGNALING 470 +#define VAR_AGGRESSIVE_NSEC 471 +#define VAR_USE_SYSTEMD 472 +#define VAR_SHM_ENABLE 473 +#define VAR_SHM_KEY 474 +#define VAR_ROOT_KEY_SENTINEL 475 +#define VAR_DNSCRYPT 476 +#define VAR_DNSCRYPT_ENABLE 477 +#define VAR_DNSCRYPT_PORT 478 +#define VAR_DNSCRYPT_PROVIDER 479 +#define VAR_DNSCRYPT_SECRET_KEY 480 +#define VAR_DNSCRYPT_PROVIDER_CERT 481 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 482 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 483 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 484 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 485 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 486 +#define VAR_IPSECMOD_ENABLED 487 +#define VAR_IPSECMOD_HOOK 488 +#define VAR_IPSECMOD_IGNORE_BOGUS 489 +#define VAR_IPSECMOD_MAX_TTL 490 +#define VAR_IPSECMOD_WHITELIST 491 +#define VAR_IPSECMOD_STRICT 492 +#define VAR_CACHEDB 493 +#define VAR_CACHEDB_BACKEND 494 +#define VAR_CACHEDB_SECRETSEED 495 +#define VAR_CACHEDB_REDISHOST 496 +#define VAR_CACHEDB_REDISPORT 497 +#define VAR_CACHEDB_REDISTIMEOUT 498 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 499 +#define VAR_FOR_UPSTREAM 500 +#define VAR_AUTH_ZONE 501 +#define VAR_ZONEFILE 502 +#define VAR_MASTER 503 +#define VAR_URL 504 +#define VAR_FOR_DOWNSTREAM 505 +#define VAR_FALLBACK_ENABLED 506 +#define VAR_TLS_ADDITIONAL_PORT 507 +#define VAR_LOW_RTT 508 +#define VAR_LOW_RTT_PERMIL 509 +#define VAR_FAST_SERVER_PERMIL 510 +#define VAR_FAST_SERVER_NUM 511 +#define VAR_ALLOW_NOTIFY 512 +#define VAR_TLS_WIN_CERT 513 +#define VAR_TCP_CONNECTION_LIMIT 514 +#define VAR_FORWARD_NO_CACHE 515 +#define VAR_STUB_NO_CACHE 516 +#define VAR_LOG_SERVFAIL 517 +#define VAR_DENY_ANY 518 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 519 +#define VAR_LOG_TAG_QUERYREPLY 520 +#define VAR_STREAM_WAIT_SIZE 521 +#define VAR_TLS_CIPHERS 522 +#define VAR_TLS_CIPHERSUITES 523 +#define VAR_IPSET 524 +#define VAR_IPSET_NAME_V4 525 +#define VAR_IPSET_NAME_V6 526 +#define VAR_TLS_SESSION_TICKET_KEYS 527 +#define VAR_RPZ 528 +#define VAR_TAGS 529 +#define VAR_RPZ_ACTION_OVERRIDE 530 +#define VAR_RPZ_CNAME_OVERRIDE 531 +#define VAR_RPZ_LOG 532 +#define VAR_RPZ_LOG_NAME 533 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -611,7 +613,7 @@ union YYSTYPE char* str; -#line 615 "util/configparser.h" +#line 617 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 798f4a972..af6cfc683 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -70,7 +70,7 @@ extern struct config_parser_state* cfg_parser; %token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR %token STRING_ARG %token VAR_SERVER VAR_VERBOSITY VAR_NUM_THREADS VAR_PORT -%token VAR_OUTGOING_RANGE VAR_INTERFACE +%token VAR_OUTGOING_RANGE VAR_INTERFACE VAR_PREFER_IP4 %token VAR_DO_IP4 VAR_DO_IP6 VAR_PREFER_IP6 VAR_DO_UDP VAR_DO_TCP %token VAR_TCP_MSS VAR_OUTGOING_TCP_MSS VAR_TCP_IDLE_TIMEOUT %token VAR_EDNS_TCP_KEEPALIVE VAR_EDNS_TCP_KEEPALIVE_TIMEOUT @@ -191,7 +191,7 @@ contents_server: contents_server content_server | ; content_server: server_num_threads | server_verbosity | server_port | server_outgoing_range | server_do_ip4 | - server_do_ip6 | server_prefer_ip6 | + server_do_ip6 | server_prefer_ip4 | server_prefer_ip6 | server_do_udp | server_do_tcp | server_tcp_mss | server_outgoing_tcp_mss | server_tcp_idle_timeout | server_tcp_keepalive | server_tcp_keepalive_timeout | @@ -780,6 +780,15 @@ server_do_tcp: VAR_DO_TCP STRING_ARG free($2); } ; +server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG + { + OUTYY(("P(server_prefer_ip4:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefer_ip4 = (strcmp($2, "yes")==0); + free($2); + } + ; server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG { OUTYY(("P(server_prefer_ip6:%s)\n", $2)); From de35486fb7df1aa00dfb0d3de457f7c2bc1d2489 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 25 Feb 2020 09:58:32 +0100 Subject: [PATCH 106/235] Documentation for prefer-ip4, Issue #165. --- doc/example.conf.in | 3 +++ doc/unbound.conf.5.in | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/doc/example.conf.in b/doc/example.conf.in index 4ce9348c2..30a767d62 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -70,6 +70,9 @@ server: # Set this to yes to prefer ipv6 upstream servers over ipv4. # prefer-ip6: no + # Prefer ipv4 upstream servers, even if ipv6 is available. + # prefer-ip4: no + # number of ports to allocate per thread, determines the size of the # port range that can be open simultaneously. About double the # num-queries-per-thread, or, use as many as the OS will allow you. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index aef2e977f..541a93688 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -381,6 +381,13 @@ IPv6 to the internet nameservers. With this option you can disable the ipv6 transport for sending DNS traffic, it does not impact the contents of the DNS traffic, which may have ip4 and ip6 addresses in it. .TP +.B prefer\-ip4: \fI +If enabled, prefer IPv4 transport for sending DNS queries to internet +nameservers. Default is no. Useful if the IPv6 netblock the server has, +the entire /64 of that is not owned by one operator and the reputation of +the netblock /64 is an issue, using IPv4 then uses the IPv4 filters that +the upstream servers have. +.TP .B prefer\-ip6: \fI If enabled, prefer IPv6 transport for sending DNS queries to internet nameservers. Default is no. From 58b7e732b839f46b20d940d1ed062b7e7bddc8a0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 26 Feb 2020 12:05:38 +0100 Subject: [PATCH 107/235] Fixup dtstream.h file description comment. And for dtstream.c too. --- dnstap/dtstream.c | 2 +- dnstap/dtstream.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 27a3d570c..8c51729be 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1,5 +1,5 @@ /* - * dnstap/dtstream.c - Frame Streams implementation for unbound DNSTAP + * dnstap/dtstream.h - Frame Streams thread for unbound DNSTAP * * Copyright (c) 2020, NLnet Labs. All rights reserved. * diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index bb6cebbe6..1359af7a9 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -1,5 +1,5 @@ /* - * dnstap/dtstream.h - Frame Streams implementation for unbound DNSTAP + * dnstap/dtstream.h - Frame Streams thread for unbound DNSTAP * * Copyright (c) 2020, NLnet Labs. All rights reserved. * From 6a51e9e037549339fadfac5a68526c51f8fc88c0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 26 Feb 2020 12:14:52 +0100 Subject: [PATCH 108/235] Add dnstap io callbacks to fptr whitelist event. --- dnstap/dtstream.c | 10 +++++----- dnstap/dtstream.h | 15 +++++++++++++++ util/fptr_wlist.c | 10 ++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 8c51729be..744e6acde 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -463,7 +463,7 @@ static int dtio_find_msg(struct dt_io_thread* dtio) } /** callback for the dnstap reconnect, to start reconnecting to output */ -static void dtio_reconnect_timeout_cb(int ATTR_UNUSED(fd), +void dtio_reconnect_timeout_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; @@ -1146,7 +1146,7 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, #endif /* HAVE_SSL */ /** callback for the dnstap events, to write to the output */ -static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) +void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; int i; @@ -1210,7 +1210,7 @@ static void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) } /** callback for the dnstap commandpipe, to stop the dnstap IO */ -static void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) +void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; uint8_t cmd; @@ -1349,7 +1349,7 @@ static int dtio_control_stop_send(struct stop_flush_info* info) return 1; } -static void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), +void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg) { struct stop_flush_info* info = (struct stop_flush_info*)arg; @@ -1360,7 +1360,7 @@ static void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), dtio_stop_flush_exit(info); } -static void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) +void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct stop_flush_info* info = (struct stop_flush_info*)arg; struct dt_io_thread* dtio = info->dtio; diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 1359af7a9..5bf84757a 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -281,4 +281,19 @@ int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr, */ void dt_io_thread_stop(struct dt_io_thread* dtio); +/** callback for the dnstap reconnect, to start reconnecting to output */ +void dtio_reconnect_timeout_cb(int fd, short bits, void* arg); + +/** callback for the dnstap events, to write to the output */ +void dtio_output_cb(int fd, short bits, void* arg); + +/** callback for the dnstap commandpipe, to stop the dnstap IO */ +void dtio_cmd_cb(int fd, short bits, void* arg); + +/** callback for the timer when the thread stops and wants to finish up */ +void dtio_stop_timer_cb(int fd, short bits, void* arg); + +/** callback for the output when the thread stops and wants to finish up */ +void dtio_stop_ev_cb(int fd, short bits, void* arg); + #endif /* DTSTREAM_H */ diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 84d41cc84..cf07a7aff 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -93,6 +93,9 @@ #ifdef USE_IPSET #include "ipset/ipset.h" #endif +#ifdef USE_DNSTAP +#include "dnstap/dtstream.h" +#endif int fptr_whitelist_comm_point(comm_point_callback_type *fptr) @@ -168,6 +171,13 @@ fptr_whitelist_event(void (*fptr)(int, short, void *)) else if(fptr == &tube_handle_signal) return 1; else if(fptr == &comm_base_handle_slow_accept) return 1; else if(fptr == &comm_point_http_handle_callback) return 1; +#ifdef USE_DNSTAP + else if(fptr == &dtio_output_cb) return 1; + else if(fptr == &dtio_cmd_cb) return 1; + else if(fptr == &dtio_reconnect_timeout_cb) return 1; + else if(fptr == &dtio_stop_timer_cb) return 1; + else if(fptr == &dtio_stop_ev_cb) return 1; +#endif #ifdef UB_ON_WINDOWS else if(fptr == &worker_win_stop_cb) return 1; #endif From e24d7c64a8e13160d3fee2c6fe9f9cbf952fcc3b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 26 Feb 2020 12:21:42 +0100 Subject: [PATCH 109/235] Dnstap io, note that it creates a thread when possible. --- doc/unbound.conf.5.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 7b48e2eaf..a9c109e60 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2116,6 +2116,10 @@ re-establish a new connection later. This option defaults to 100 milliseconds. .SS DNSTAP Logging Options DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. +This starts an extra thread (when compiled with threading) that writes +the log information to the destination. If unbound is compiled without +threading it does not spawn a thread, but connects per-process to the +destination. .TP .B dnstap-enable: \fI If dnstap is enabled. Default no. If yes, it connects to the dnstap server From 5aa8ae510ed0b69cdb6daf8aca1fe00c1d625d82 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 26 Feb 2020 13:11:27 +0100 Subject: [PATCH 110/235] Fix spelling of dtstream.c --- dnstap/dtstream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 744e6acde..67ad72d61 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1,5 +1,5 @@ /* - * dnstap/dtstream.h - Frame Streams thread for unbound DNSTAP + * dnstap/dtstream.c - Frame Streams thread for unbound DNSTAP * * Copyright (c) 2020, NLnet Labs. All rights reserved. * From f46904919828fb01f3cba88d6a5f13f3d8d7e660 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 26 Feb 2020 14:32:14 +0100 Subject: [PATCH 111/235] - iana portlist updated. --- doc/Changelog | 3 +++ util/iana_ports.inc | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 620d627f8..25a4322ee 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +26 February 2020: Wouter + - iana portlist updated. + 25 February 2020: Wouter - Fix #165: Add prefer-ip4: yesno config option to prefer ipv4 for using ipv4 filters, because the hosts ip6 netblock /64 is not owned diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 3b8afe54e..b26677efb 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -4539,6 +4539,7 @@ 6850, 6868, 6888, +6924, 6935, 6936, 6946, From 348e246b66666642746d0bac72ca25958248a807 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 27 Feb 2020 15:08:10 +0100 Subject: [PATCH 112/235] - Fix #169: Fix warning for daemon/remote.c output may be truncated from snprintf. --- daemon/remote.c | 2 +- doc/Changelog | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/daemon/remote.c b/daemon/remote.c index 1782a39ca..f4b7298cb 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -907,7 +907,7 @@ static int print_ext(RES* ssl, struct ub_stats_info* s) { int i; - char nm[16]; + char nm[32]; const sldns_rr_descriptor* desc; const sldns_lookup_table* lt; /* TYPE */ diff --git a/doc/Changelog b/doc/Changelog index 25a4322ee..7bb8e5104 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +27 February 2020: Wouter + - Fix #169: Fix warning for daemon/remote.c output may be truncated + from snprintf. + 26 February 2020: Wouter - iana portlist updated. From 57bbbfc0e6d9884316933410994cce97b0f739a8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 27 Feb 2020 15:22:35 +0100 Subject: [PATCH 113/235] - Fix #170: Fix gcc undefined sanitizer signed integer overflow warning in signature expiry RFC1982 serial number arithmetic. --- doc/Changelog | 2 ++ validator/val_sigcrypt.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 7bb8e5104..407c0d34d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 27 February 2020: Wouter - Fix #169: Fix warning for daemon/remote.c output may be truncated from snprintf. + - Fix #170: Fix gcc undefined sanitizer signed integer overflow + warning in signature expiry RFC1982 serial number arithmetic. 26 February 2020: Wouter - iana portlist updated. diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index 33d206de8..de730f681 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -1343,7 +1343,7 @@ adjust_ttl(struct val_env* ve, uint32_t unow, if(ve->date_override) { now = ve->date_override; } else now = (int32_t)unow; - expittl = expi - now; + expittl = (int32_t)((uint32_t)expi - (uint32_t)now); /* so now: * d->ttl: rrset ttl read from message or cache. May be reduced From 6f4818ebcbfc91705c34b354c21cff450759889e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 27 Feb 2020 15:43:27 +0100 Subject: [PATCH 114/235] - Fix more undefined sanitizer issues, in respip copy_rrset null dname, and in the client_info_compare routine for null memcmp. --- doc/Changelog | 2 ++ respip/respip.c | 14 ++++++++++---- services/mesh.c | 26 +++++++++++++++++++------- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 407c0d34d..68fd123be 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,8 @@ from snprintf. - Fix #170: Fix gcc undefined sanitizer signed integer overflow warning in signature expiry RFC1982 serial number arithmetic. + - Fix more undefined sanitizer issues, in respip copy_rrset null + dname, and in the client_info_compare routine for null memcmp. 26 February 2020: Wouter - iana portlist updated. diff --git a/respip/respip.c b/respip/respip.c index f504f5579..c496653c4 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -502,10 +502,16 @@ copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region) ck->entry.hash = key->entry.hash; ck->entry.key = ck; ck->rk = key->rk; - ck->rk.dname = regional_alloc_init(region, key->rk.dname, - key->rk.dname_len); - if(!ck->rk.dname) - return NULL; + if(key->rk.dname) { + ck->rk.dname = regional_alloc_init(region, key->rk.dname, + key->rk.dname_len); + if(!ck->rk.dname) + return NULL; + ck->rk.dname_len = key->rk.dname_len; + } else { + ck->rk.dname = NULL; + ck->rk.dname_len = 0; + } if((unsigned)data->count >= 0xffff00U) return NULL; /* guard against integer overflow in dsize */ diff --git a/services/mesh.c b/services/mesh.c index 9114ef4c4..09c51a2be 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -159,16 +159,28 @@ client_info_compare(const struct respip_client_info* ci_a, return 1; if(ci_a->taglen != ci_b->taglen) return (ci_a->taglen < ci_b->taglen) ? -1 : 1; - cmp = memcmp(ci_a->taglist, ci_b->taglist, ci_a->taglen); - if(cmp != 0) - return cmp; + if(ci_a->taglist && !ci_b->taglist) + return -1; + if(!ci_a->taglist && ci_b->taglist) + return 1; + if(ci_a->taglist && ci_b->taglist) { + cmp = memcmp(ci_a->taglist, ci_b->taglist, ci_a->taglen); + if(cmp != 0) + return cmp; + } if(ci_a->tag_actions_size != ci_b->tag_actions_size) return (ci_a->tag_actions_size < ci_b->tag_actions_size) ? -1 : 1; - cmp = memcmp(ci_a->tag_actions, ci_b->tag_actions, - ci_a->tag_actions_size); - if(cmp != 0) - return cmp; + if(ci_a->tag_actions && !ci_b->tag_actions) + return -1; + if(!ci_a->tag_actions && ci_b->tag_actions) + return 1; + if(ci_a->tag_actions && ci_b->tag_actions) { + cmp = memcmp(ci_a->tag_actions, ci_b->tag_actions, + ci_a->tag_actions_size); + if(cmp != 0) + return cmp; + } if(ci_a->tag_datas != ci_b->tag_datas) return ci_a->tag_datas < ci_b->tag_datas ? -1 : 1; if(ci_a->view != ci_b->view) From 2d6e0d8eea51d1934d1035c37bca8201b83e2a91 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 27 Feb 2020 10:08:49 -0500 Subject: [PATCH 115/235] Add additional compilers and platforms to Travis testing --- .travis.yml | 81 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 76 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 45a7cb153..4726af38f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,9 @@ -sudo: false language: c -compiler: - - gcc +sudo: false + +git: + depth: 5 + addons: apt: packages: @@ -9,8 +11,77 @@ addons: - libevent-dev - libexpat-dev - clang + +jobs: + include: + - os: linux + name: GCC on Linux, Amd64 + compiler: gcc + arch: amd64 + - os: linux + name: Clang on Linux, Amd64 + compiler: clang + arch: amd64 + - os: linux + name: UBsan, GCC on Linux, Amd64 + compiler: gcc + arch: amd64 + dist: bionic + env: TEST_UBSAN=yes + - os: linux + name: UBsan, Clang on Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: TEST_UBSAN=yes + - os: linux + name: Asan, GCC on Linux, Amd64 + compiler: gcc + arch: amd64 + dist: bionic + env: TEST_ASAN=yes + - os: linux + name: Asan, Clang on Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: TEST_ASAN=yes + - os: osx + name: Clang on OS X, Amd64 + compiler: clang + arch: amd64 + - os: linux + name: GCC on Linux, Aarch64 + compiler: gcc + arch: arm64 + dist: bionic + - os: linux + name: Clang on Linux, Aarch64 + compiler: clang + arch: arm64 + dist: bionic + - os: linux + name: GCC on Linux, PowerPC64 + compiler: gcc + arch: ppc64le + dist: bionic + - os: linux + name: Clang on Linux, PowerPC64 + compiler: clang + arch: ppc64le + dist: bionic + script: - - ./configure --enable-debug --disable-flto - - make + - | + if [ "$TEST_UBSAN" = "yes" ]; then + export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover" + ./configure + elif [ "$TEST_ASAN" = "yes" ]; then + export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" + ./configure + else + ./configure --enable-debug --disable-flto + fi + - make -j 2 - make test - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) From f03245c362ffc78d522f4d8143448575a3e80bca Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 27 Feb 2020 16:28:36 +0100 Subject: [PATCH 116/235] Document log check functions. --- util/netevent.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/util/netevent.h b/util/netevent.h index 60824fc42..bb2cd1e53 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -783,11 +783,22 @@ void comm_base_handle_slow_accept(int fd, short event, void* arg); void comm_point_tcp_win_bio_cb(struct comm_point* c, void* ssl); #endif -/** see if errno for tcp connect has to be logged or not. This uses errno */ +/** + * See if errno for tcp connect has to be logged or not. This uses errno + * @param addr: apart from checking errno, the addr is checked for ip4mapped + * and broadcast type, hence passed. + * @param addrlen: length of the addr parameter. + * @return true if it needs to be logged. + */ int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen); #ifdef HAVE_SSL -/** true if the ssl handshake error has to be squelched from the logs */ +/** + * True if the ssl handshake error has to be squelched from the logs + * @param err: the error returned by the openssl routine, ERR_get_error. + * This is a packed structure with elements that are examined. + * @return true if the error is squelched (not logged). + */ int squelch_err_ssl_handshake(unsigned long err); #endif From e382b884d387cb29201c8327ac668baeda18190f Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 27 Feb 2020 10:52:58 -0500 Subject: [PATCH 117/235] Use Brew to install OpenSSL on OS X --- .travis.yml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4726af38f..607e440d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,10 @@ jobs: name: Clang on Linux, Amd64 compiler: clang arch: amd64 + - os: osx + name: Clang on OS X, Amd64 + compiler: clang + arch: amd64 - os: linux name: UBsan, GCC on Linux, Amd64 compiler: gcc @@ -46,10 +50,6 @@ jobs: arch: amd64 dist: bionic env: TEST_ASAN=yes - - os: osx - name: Clang on OS X, Amd64 - compiler: clang - arch: amd64 - os: linux name: GCC on Linux, Aarch64 compiler: gcc @@ -71,6 +71,13 @@ jobs: arch: ppc64le dist: bionic +before_install: + - | + if [ "$TRAVIS_OS_NAME" = "osx" ]; then + brew update + brew install openssl + fi + script: - | if [ "$TEST_UBSAN" = "yes" ]; then From 398e2601454ec26e91a2d5119739545b4eb66054 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 27 Feb 2020 16:57:24 +0100 Subject: [PATCH 118/235] Fixup ssl authentication not available with check for it. --- dnstap/dtstream.c | 2 ++ util/net_help.c | 13 +++++++++++++ util/net_help.h | 7 +++++++ 3 files changed, 22 insertions(+) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 67ad72d61..29fc5ee59 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -302,6 +302,8 @@ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) log_err("dnstap setup: malloc failure"); return 0; } + if(!check_auth_name_for_ssl(dtio->tls_server_name)) + return 0; } if(cfg->dnstap_tls_client_key_file && cfg->dnstap_tls_client_key_file[0]) { diff --git a/util/net_help.c b/util/net_help.c index 898ebc900..cc1ca7ec5 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1217,6 +1217,19 @@ void* outgoing_ssl_fd(void* sslctx, int fd) #endif } +int check_auth_name_for_ssl(char* auth_name) +{ + if(!auth_name) return 1; +#ifdef HAVE_SSL +#if !defined(HAVE_SSL_SET1_HOST) && !defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) + log_err("the query has an auth_name %s, but libssl has no call to " + "perform TLS authentication. Remove that name from config " + "or upgrade the ssl crypto library.", auth_name); +#endif +#endif + return 1; +} + /** set the authname on an SSL structure, SSL* ssl */ int set_auth_name_on_ssl(void* ssl, char* auth_name) { diff --git a/util/net_help.h b/util/net_help.h index 6df9f9b39..d9ee37ad0 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -442,6 +442,13 @@ void* incoming_ssl_fd(void* sslctx, int fd); */ void* outgoing_ssl_fd(void* sslctx, int fd); +/** + * check if authname SSL functionality is available, false if not + * @param auth_name: the name for the remote server, used for error print. + * @return false if SSL functionality to check the SSL name is not available. + */ +int check_auth_name_for_ssl(char* auth_name); + /** * set auth name on SSL for verification * @param ssl: SSL* to set From 6476a11189fc253c434897395ab43a20da235b26 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Thu, 27 Feb 2020 18:11:25 +0100 Subject: [PATCH 119/235] - Provide openssl location for osx travis build. --- .travis.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 607e440d5..4b0f1da53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,13 +71,6 @@ jobs: arch: ppc64le dist: bionic -before_install: - - | - if [ "$TRAVIS_OS_NAME" = "osx" ]; then - brew update - brew install openssl - fi - script: - | if [ "$TEST_UBSAN" = "yes" ]; then @@ -86,6 +79,8 @@ script: elif [ "$TEST_ASAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" ./configure + elif [ "$TRAVIS_OS_NAME" = "osx" ]; then + ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/ else ./configure --enable-debug --disable-flto fi From 9efe85fb4c040062af7192b6fb7de46795d02758 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Thu, 27 Feb 2020 18:13:22 +0100 Subject: [PATCH 120/235] - Merge PR #171: Add additional compilers and platforms to Travis testing, by noloader. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 68fd123be..0cdbe710d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +27 February 2020: George + - Merge PR #171: Add additional compilers and platforms to Travis + testing, by noloader. + 27 February 2020: Wouter - Fix #169: Fix warning for daemon/remote.c output may be truncated from snprintf. From 1cb1e90f53f507812d4200b95eb2722d609a43c3 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 27 Feb 2020 12:56:20 -0500 Subject: [PATCH 121/235] Add IBM s390x arch for testing I believe this is a big-endian platform, so it is nice to have for insurance --- .travis.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4b0f1da53..ab2c05f28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,10 +70,20 @@ jobs: compiler: clang arch: ppc64le dist: bionic + - os: linux + name: GCC on Linux, s390x + compiler: gcc + arch: s390x + dist: bionic + - os: linux + name: Clang on Linux, s390x + compiler: clang + arch: s390x + dist: bionic script: - | - if [ "$TEST_UBSAN" = "yes" ]; then + if [ "$TEST_UBSAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover" ./configure elif [ "$TEST_ASAN" = "yes" ]; then From 8fbb03de5eaaa15238f83b594e2c4691a4dc8bac Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 27 Feb 2020 19:10:05 -0500 Subject: [PATCH 122/235] Update makedist.sh Use the latest config.guess and config.sub Use SHA-256 for release signing --- makedist.sh | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/makedist.sh b/makedist.sh index f538f8d02..c3bfcaad3 100755 --- a/makedist.sh +++ b/makedist.sh @@ -464,6 +464,20 @@ rm -rf .git || error_cleanup "Failed to remove .git tracking information" info "Adding libtool utils (libtoolize)." libtoolize -c --install || libtoolize -c || error_cleanup "Libtoolize failed." +# https://www.gnu.org/software/gettext/manual/html_node/config_002eguess.html +info "Updating config.guess and config.sub" +wget -O config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' +wget -O config.sub 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' +chmod a+x config.guess config.sub + +# Remove quarantine bit on Apple platforms +if [ `uname -s | grep -i -c darwin` -ne 0 ]; then + if [ -n `command -v xattr` ]; then + xattr -d com.apple.quarantine config.guess + xattr -d com.apple.quarantine config.sub + fi +fi + info "Building configure script (autoreconf)." autoreconf || error_cleanup "Autoconf failed." @@ -542,9 +556,8 @@ cleanup storehash unbound-$version.tar.gz echo "create unbound-$version.tar.gz.asc with:" -echo " gpg --armor --detach-sign unbound-$version.tar.gz" -echo " gpg --armor --detach-sign unbound-$version.zip" -echo " gpg --armor --detach-sign unbound_setup_$version.exe" +echo " gpg --armor --detach-sign --digest-algo SHA256 unbound-$version.tar.gz" +echo " gpg --armor --detach-sign --digest-algo SHA256 unbound-$version.zip" +echo " gpg --armor --detach-sign --digest-algo SHA256 unbound_setup_$version.exe" info "Unbound distribution created successfully." - From 5b61afd38c7dd7a0368a526ab8dab0bf2fb90039 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 08:11:11 +0100 Subject: [PATCH 123/235] Return 0 when ssl authentication is not available --- util/net_help.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/net_help.c b/util/net_help.c index cc1ca7ec5..2a392781d 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1220,14 +1220,14 @@ void* outgoing_ssl_fd(void* sslctx, int fd) int check_auth_name_for_ssl(char* auth_name) { if(!auth_name) return 1; -#ifdef HAVE_SSL -#if !defined(HAVE_SSL_SET1_HOST) && !defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) +#if defined(HAVE_SSL) && !defined(HAVE_SSL_SET1_HOST) && !defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) log_err("the query has an auth_name %s, but libssl has no call to " "perform TLS authentication. Remove that name from config " "or upgrade the ssl crypto library.", auth_name); -#endif -#endif + return 0; +#else return 1; +#endif } /** set the authname on an SSL structure, SSL* ssl */ From 85c4e5883189f96e549113ae579d0f671b6799a5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 08:36:44 +0100 Subject: [PATCH 124/235] dnstap debug tool, document string change more clearly. --- dnstap/unbound-dnstap-socket.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 0605d4d7c..f7974f319 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -474,8 +474,11 @@ static char* q_of_msg(ProtobufCBinaryData message) if(sldns_wire2str_rrquestion_buf(message.data+12, message.len-12, buf, sizeof(buf)) != 0) { /* remove trailing newline, tabs to spaces */ + /* remove the newline: */ if(buf[0] != 0) buf[strlen(buf)-1]=0; + /* remove first tab (before type) */ if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' '; + /* remove second tab (before class) */ if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' '; return strdup(buf); } From b63032b4dd7660c0e9bd8eac6f9ba8aac4baf94b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 08:55:10 +0100 Subject: [PATCH 125/235] dnstap io, fixup fptr_wlist for unbound_dnstap_socket tool. --- Makefile.in | 2 +- daemon/worker.c | 15 +++ dnstap/dtstream.h | 6 + dnstap/unbound-dnstap-socket.c | 221 ++++++++++++++++++++++++++++++++- libunbound/libworker.c | 16 +++ smallapp/worker_cb.c | 16 +++ util/fptr_wlist.c | 2 + 7 files changed, 271 insertions(+), 7 deletions(-) diff --git a/Makefile.in b/Makefile.in index 2636ed4d2..4373dd66a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -235,7 +235,7 @@ IPSET_SRC=@IPSET_SRC@ IPSET_OBJ=@IPSET_OBJ@ DNSTAP_SOCKET_SRC=dnstap/unbound-dnstap-socket.c DNSTAP_SOCKET_OBJ=unbound-dnstap-socket.lo -DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) worker_cb.lo $(COMMON_OBJ) \ +DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) $(COMMON_OBJ) \ $(COMPAT_OBJ) $(SLDNS_OBJ) LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c diff --git a/daemon/worker.c b/daemon/worker.c index 56002039b..cec6bcd66 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -2124,3 +2124,18 @@ int codeline_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) return 0; } +#ifdef USE_DNSTAP +void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), + void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif + +#ifdef USE_DNSTAP +void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), + void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 5bf84757a..4bb027d5b 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -296,4 +296,10 @@ void dtio_stop_timer_cb(int fd, short bits, void* arg); /** callback for the output when the thread stops and wants to finish up */ void dtio_stop_ev_cb(int fd, short bits, void* arg); +/** callback for unbound-dnstap-socket */ +void dtio_tap_callback(int fd, short bits, void* arg); + +/** callback for unbound-dnstap-socket */ +void dtio_mainfdcallback(int fd, short bits, void* arg); + #endif /* DTSTREAM_H */ diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index f7974f319..f7d713b53 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -940,7 +940,7 @@ static int tap_handshake(struct tap_data* data) #endif /* HAVE_SSL */ /** callback for dnstap listener */ -static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) +void dtio_tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_data* data = (struct tap_data*)arg; if(verbosity>=3) log_info("tap callback"); @@ -1037,7 +1037,7 @@ static void tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) } /** callback for main listening file descriptor */ -void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) +void dtio_mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_socket* tap_sock = (struct tap_socket*)arg; struct main_tap_data* maindata = (struct main_tap_data*) @@ -1114,7 +1114,7 @@ void mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) if(!data->ssl) fatal_exit("could not SSL_new"); } data->ev = ub_event_new(maindata->base, s, UB_EV_READ | UB_EV_PERSIST, - &tap_callback, data); + &dtio_tap_callback, data); if(!data->ev) fatal_exit("could not ub_event_new"); if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add"); } @@ -1126,7 +1126,7 @@ static void setup_local_list(struct main_tap_data* maindata, struct config_strlist* item; for(item = local_list->first; item; item = item->next) { struct tap_socket* s; - s = tap_socket_new_local(item->str, &mainfdcallback, + s = tap_socket_new_local(item->str, &dtio_mainfdcallback, maindata); if(!s) fatal_exit("out of memory"); if(!tap_socket_list_insert(&maindata->acceptlist, s)) @@ -1141,7 +1141,7 @@ static void setup_tcp_list(struct main_tap_data* maindata, struct config_strlist* item; for(item = tcp_list->first; item; item = item->next) { struct tap_socket* s; - s = tap_socket_new_tcpaccept(item->str, &mainfdcallback, + s = tap_socket_new_tcpaccept(item->str, &dtio_mainfdcallback, maindata); if(!s) fatal_exit("out of memory"); if(!tap_socket_list_insert(&maindata->acceptlist, s)) @@ -1157,7 +1157,7 @@ static void setup_tls_list(struct main_tap_data* maindata, struct config_strlist* item; for(item = tls_list->first; item; item = item->next) { struct tap_socket* s; - s = tap_socket_new_tlsaccept(item->str, &mainfdcallback, + s = tap_socket_new_tlsaccept(item->str, &dtio_mainfdcallback, maindata, server_key, server_cert, verifypem); if(!s) fatal_exit("out of memory"); if(!tap_socket_list_insert(&maindata->acceptlist, s)) @@ -1351,3 +1351,212 @@ int main(int argc, char** argv) #endif return 0; } + +/***--- definitions to make fptr_wlist work. ---***/ +/* These are callbacks, similar to smallapp callbacks, except the debug + * tool callbacks are not in it */ +struct tube; +struct query_info; +#include "util/data/packed_rrset.h" + +void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), + uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), + int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +int worker_handle_request(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(repinfo)) +{ + log_assert(0); + return 0; +} + +int worker_handle_reply(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(reply_info)) +{ + log_assert(0); + return 0; +} + +int worker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(reply_info)) +{ + log_assert(0); + return 0; +} + +int remote_accept_callback(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(repinfo)) +{ + log_assert(0); + return 0; +} + +int remote_control_callback(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(repinfo)) +{ + log_assert(0); + return 0; +} + +void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +struct outbound_entry* worker_send_query( + struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), + int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), + int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), + socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), + size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), + char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) +{ + log_assert(0); + return 0; +} + +#ifdef UB_ON_WINDOWS +void +worker_win_stop_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* + ATTR_UNUSED(arg)) { + log_assert(0); +} + +void +wsvc_cron_cb(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif /* UB_ON_WINDOWS */ + +void +worker_alloc_cleanup(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +struct outbound_entry* libworker_send_query( + struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), + int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), + int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), + socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), + size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), + char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) +{ + log_assert(0); + return 0; +} + +int libworker_handle_reply(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(reply_info)) +{ + log_assert(0); + return 0; +} + +int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), + void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), + struct comm_reply* ATTR_UNUSED(reply_info)) +{ + log_assert(0); + return 0; +} + +void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), + uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), + int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +void libworker_fg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), + struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), + char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) +{ + log_assert(0); +} + +void libworker_bg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), + struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), + char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) +{ + log_assert(0); +} + +void libworker_event_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), + struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), + char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) +{ + log_assert(0); +} + +int context_query_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) +{ + log_assert(0); + return 0; +} + +void worker_stat_timer_cb(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +void worker_probe_timer_cb(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +void worker_start_accept(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +void worker_stop_accept(void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} + +/** keep track of lock id in lock-verify application */ +struct order_id { + /** the thread id that created it */ + int thr; + /** the instance number of creation */ + int instance; +}; + +int order_lock_cmp(const void* e1, const void* e2) +{ + const struct order_id* o1 = e1; + const struct order_id* o2 = e2; + if(o1->thr < o2->thr) return -1; + if(o1->thr > o2->thr) return 1; + if(o1->instance < o2->instance) return -1; + if(o1->instance > o2->instance) return 1; + return 0; +} + +int +codeline_cmp(const void* a, const void* b) +{ + return strcmp(a, b); +} + +int replay_var_compare(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) +{ + log_assert(0); + return 0; +} + +void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 6cb97ff1f..0ed778903 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -1047,3 +1047,19 @@ wsvc_cron_cb(void* ATTR_UNUSED(arg)) log_assert(0); } #endif /* UB_ON_WINDOWS */ + +#ifdef USE_DNSTAP +void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), + void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif + +#ifdef USE_DNSTAP +void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), + void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif diff --git a/smallapp/worker_cb.c b/smallapp/worker_cb.c index 6c3bd0049..78d921a3c 100644 --- a/smallapp/worker_cb.c +++ b/smallapp/worker_cb.c @@ -248,3 +248,19 @@ void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg)) { log_assert(0); } + +#ifdef USE_DNSTAP +void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), + void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif + +#ifdef USE_DNSTAP +void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), + void* ATTR_UNUSED(arg)) +{ + log_assert(0); +} +#endif diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index cf07a7aff..b124e7169 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -177,6 +177,8 @@ fptr_whitelist_event(void (*fptr)(int, short, void *)) else if(fptr == &dtio_reconnect_timeout_cb) return 1; else if(fptr == &dtio_stop_timer_cb) return 1; else if(fptr == &dtio_stop_ev_cb) return 1; + else if(fptr == &dtio_tap_callback) return 1; + else if(fptr == &dtio_mainfdcallback) return 1; #endif #ifdef UB_ON_WINDOWS else if(fptr == &worker_win_stop_cb) return 1; From 065506d1a8d8200cd96c1fe128d463e07693f04f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 09:11:10 +0100 Subject: [PATCH 126/235] dnstap io, use sldns_str_print to print to string. --- dnstap/dnstap_fstrm.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/dnstap/dnstap_fstrm.c b/dnstap/dnstap_fstrm.c index 4d4cb835e..55105ade5 100644 --- a/dnstap/dnstap_fstrm.c +++ b/dnstap/dnstap_fstrm.c @@ -44,6 +44,7 @@ #include "config.h" #include "dnstap/dnstap_fstrm.h" #include "sldns/sbuffer.h" +#include "sldns/wire2str.h" void* fstrm_create_control_frame_start(char* contenttype, size_t* len) { @@ -145,7 +146,8 @@ char* fstrm_describe_control(void* pkt, size_t len) { uint32_t frametype = 0; char buf[512]; - size_t at = 0, remain; + char* str = buf; + size_t remain, slen = sizeof(buf); uint8_t* pos; buf[0]=0; @@ -156,18 +158,17 @@ char* fstrm_describe_control(void* pkt, size_t len) } frametype = sldns_read_uint32(pkt); if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) { - at+=snprintf(buf+at, sizeof(buf)-at, "accept"); + sldns_str_print(&str, &slen, "accept"); } else if(frametype == FSTRM_CONTROL_FRAME_START) { - at+=snprintf(buf+at, sizeof(buf)-at, "start"); + sldns_str_print(&str, &slen, "start"); } else if(frametype == FSTRM_CONTROL_FRAME_STOP) { - at+=snprintf(buf+at, sizeof(buf)-at, "stop"); + sldns_str_print(&str, &slen, "stop"); } else if(frametype == FSTRM_CONTROL_FRAME_READY) { - at+=snprintf(buf+at, sizeof(buf)-at, "ready"); + sldns_str_print(&str, &slen, "ready"); } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) { - at+=snprintf(buf+at, sizeof(buf)-at, "finish"); + sldns_str_print(&str, &slen, "finish"); } else { - at+=snprintf(buf+at, sizeof(buf)-at, "type%d", - (int)frametype); + sldns_str_print(&str, &slen, "type%d", (int)frametype); } /* show the content type options */ @@ -177,18 +178,22 @@ char* fstrm_describe_control(void* pkt, size_t len) uint32_t field_type = sldns_read_uint32(pos); uint32_t field_len = sldns_read_uint32(pos+4); if(remain < field_len) { - at+=snprintf(buf+at, sizeof(buf)-at, "malformed_field"); + sldns_str_print(&str, &slen, "malformed_field"); break; } if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { - at+=snprintf(buf+at, sizeof(buf)-at, " content-type("); - if(at+field_len < sizeof(buf)) { - memmove(buf+at, pos+8, field_len); - at += field_len; + char tempf[512]; + sldns_str_print(&str, &slen, " content-type("); + if(field_len < sizeof(tempf)-1) { + memmove(tempf, pos+8, field_len); + tempf[field_len] = 0; + sldns_str_print(&str, &slen, "%s", tempf); + } else { + sldns_str_print(&str, &slen, ""); } - at+=snprintf(buf+at, sizeof(buf)-at, ")"); + sldns_str_print(&str, &slen, ")"); } else { - at+=snprintf(buf+at, sizeof(buf)-at, + sldns_str_print(&str, &slen, " field(type %u, length %u)", (unsigned int)field_type, (unsigned int)field_len); @@ -197,7 +202,7 @@ char* fstrm_describe_control(void* pkt, size_t len) remain -= (8 + field_len); } if(remain > 0) - snprintf(buf+at, sizeof(buf)-at, " trailing-bytes" + sldns_str_print(&str, &slen, " trailing-bytes" "(length %u)", (unsigned int)remain); return strdup(buf); } From e856908696ba04f5254cbdb83c9745b95bd4fd2c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 09:17:02 +0100 Subject: [PATCH 127/235] dnstap io, free alloced resource on fail path. --- dnstap/dnstap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index cd4c070f2..cc5449dff 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -249,6 +249,8 @@ dt_init(struct dt_env *env) } if(!dt_io_thread_register_queue(env->dtio, env->msgqueue)) { log_err("malloc failure"); + dt_msg_queue_delete(env->msgqueue); + env->msgqueue = NULL; return 0; } return 1; From 49622dd51a6de81ab8ed0e19ca639102cc3763c1 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 09:19:53 +0100 Subject: [PATCH 128/235] dnstap io, fix uniform error message for no dnstap-socket-path. --- dnstap/dtstream.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 29fc5ee59..fe02cc2aa 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -265,9 +265,8 @@ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) if(dtio->upstream_is_unix) { if(!cfg->dnstap_socket_path || cfg->dnstap_socket_path[0]==0) { - log_err("dnstap setup failed, because dnstap is " - "enabled, but no dnstap-ip and no " - "dnstap-socket-path are given"); + log_err("dnstap setup: no dnstap-socket-path for " + "socket connect"); return 0; } free(dtio->socket_path); From ed5a9ed1b12378f31b099b9722a39beda8099283 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 09:22:15 +0100 Subject: [PATCH 129/235] dnstap io, fix for review comment. --- dnstap/dtstream.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index fe02cc2aa..2d55d197f 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1681,12 +1681,12 @@ static void dtio_open_output(struct dt_io_thread* dtio) dtio_reconnect_enable(dtio); return; } - } - if(dtio->upstream_is_tls) { - if(!dtio_setup_ssl(dtio)) { - dtio_close_fd(dtio); - dtio_reconnect_enable(dtio); - return; + if(dtio->upstream_is_tls) { + if(!dtio_setup_ssl(dtio)) { + dtio_close_fd(dtio); + dtio_reconnect_enable(dtio); + return; + } } } dtio->check_nb_connect = 1; From d68c1e29b6cd4cdefedc5fdfb9adf15a16e553ea Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 10:15:57 +0100 Subject: [PATCH 130/235] Changelog note for PR #173. - Merge PR #173: updated makedist.sh for config.guess and config.sub and sha256 digest for gpg, by noloader. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 0cdbe710d..48762bc00 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +28 February 2020: Wouter + - Merge PR #173: updated makedist.sh for config.guess and + config.sub and sha256 digest for gpg, by noloader. + 27 February 2020: George - Merge PR #171: Add additional compilers and platforms to Travis testing, by noloader. From d5544a0f13e25de9d1f62bcfe0926216788f5f94 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 11:09:45 +0100 Subject: [PATCH 131/235] dnstap io, cast void unused return value. --- dnstap/dnstap_fstrm.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/dnstap/dnstap_fstrm.c b/dnstap/dnstap_fstrm.c index 55105ade5..cce16e2e4 100644 --- a/dnstap/dnstap_fstrm.c +++ b/dnstap/dnstap_fstrm.c @@ -158,17 +158,17 @@ char* fstrm_describe_control(void* pkt, size_t len) } frametype = sldns_read_uint32(pkt); if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) { - sldns_str_print(&str, &slen, "accept"); + (void)sldns_str_print(&str, &slen, "accept"); } else if(frametype == FSTRM_CONTROL_FRAME_START) { - sldns_str_print(&str, &slen, "start"); + (void)sldns_str_print(&str, &slen, "start"); } else if(frametype == FSTRM_CONTROL_FRAME_STOP) { - sldns_str_print(&str, &slen, "stop"); + (void)sldns_str_print(&str, &slen, "stop"); } else if(frametype == FSTRM_CONTROL_FRAME_READY) { - sldns_str_print(&str, &slen, "ready"); + (void)sldns_str_print(&str, &slen, "ready"); } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) { - sldns_str_print(&str, &slen, "finish"); + (void)sldns_str_print(&str, &slen, "finish"); } else { - sldns_str_print(&str, &slen, "type%d", (int)frametype); + (void)sldns_str_print(&str, &slen, "type%d", (int)frametype); } /* show the content type options */ @@ -178,22 +178,22 @@ char* fstrm_describe_control(void* pkt, size_t len) uint32_t field_type = sldns_read_uint32(pos); uint32_t field_len = sldns_read_uint32(pos+4); if(remain < field_len) { - sldns_str_print(&str, &slen, "malformed_field"); + (void)sldns_str_print(&str, &slen, "malformed_field"); break; } if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { char tempf[512]; - sldns_str_print(&str, &slen, " content-type("); + (void)sldns_str_print(&str, &slen, " content-type("); if(field_len < sizeof(tempf)-1) { memmove(tempf, pos+8, field_len); tempf[field_len] = 0; - sldns_str_print(&str, &slen, "%s", tempf); + (void)sldns_str_print(&str, &slen, "%s", tempf); } else { - sldns_str_print(&str, &slen, ""); + (void)sldns_str_print(&str, &slen, ""); } - sldns_str_print(&str, &slen, ")"); + (void)sldns_str_print(&str, &slen, ")"); } else { - sldns_str_print(&str, &slen, + (void)sldns_str_print(&str, &slen, " field(type %u, length %u)", (unsigned int)field_type, (unsigned int)field_len); @@ -202,7 +202,7 @@ char* fstrm_describe_control(void* pkt, size_t len) remain -= (8 + field_len); } if(remain > 0) - sldns_str_print(&str, &slen, " trailing-bytes" + (void)sldns_str_print(&str, &slen, " trailing-bytes" "(length %u)", (unsigned int)remain); return strdup(buf); } From e13dfc743d6864cff6ae909cbc1026b1b666c888 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 11:10:12 +0100 Subject: [PATCH 132/235] For incoming ssl context with verifypem != NULL, we can set SSL_VERIFY_FAIL_IF_NO_PEER_CERT that can reject client connections without peer cert during the handshake, which is nicer than just a connection drop to the client (when we then check for no peer certificate afterwards). --- util/net_help.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/net_help.c b/util/net_help.c index 2a392781d..8f75da07f 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -996,7 +996,7 @@ void* listen_sslctx_create(char* key, char* pem, char* verifypem) } SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file( verifypem)); - SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); } return ctx; #else From 8f1cb41725770be169d01f82668a06a84f38614e Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 28 Feb 2020 11:42:17 +0100 Subject: [PATCH 133/235] Merge PR #172: Add IBM s390x arch for testing, by noloader. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 48762bc00..a1c364143 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +28 February 2020: Ralph + - Merge PR #172: Add IBM s390x arch for testing, by noloader. + 28 February 2020: Wouter - Merge PR #173: updated makedist.sh for config.guess and config.sub and sha256 digest for gpg, by noloader. From 93189d3083e9ca7373ac4cbba1a3f1e75c25dc1c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 28 Feb 2020 15:23:54 +0100 Subject: [PATCH 134/235] Changelog note for PR #164 and text for release explanation. - Merge PR #164: Framestreams, this branch implements dnstap unidirectional connectivity in unbound. This has a number of new features. The dependency on libfstrm is removed. The fstrm protocol code resides in dnstap/dnstap_fstrm.h and dnstap/dnstap_fstrm.c. This contains a brief definition of what unbound needs. The make unbound-dnstap-socket builds a debug tool, unbound-dnstap-socket. It can listen, accept multiple DNSTAP streams and print information. Commandline options control it. Unbound can reconnect if the unix domain socket file socket is closed. This uses exponential backoff after which it uses a one second timer to throttle cpu down. There is also support to use TCP and TLS for connecting to the log server. There are new config options to turn them on, in the dnstap section in the man page and example config file. dnstap-ip with IP address of server for TCP or TLS use. dnstap-tls to turn on TLS. And dnstap-tls-server-name, dnstap-tls-cert-bundle, dnstap-tls-client-key-file and dnstap-tls-client-cert-file to configure the certificates for server authentication and client authentication, or leave at "" to not use that. --- doc/Changelog | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index a1c364143..b25fd357b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,29 @@ 28 February 2020: Wouter - Merge PR #173: updated makedist.sh for config.guess and config.sub and sha256 digest for gpg, by noloader. + - Merge PR #164: Framestreams, this branch implements dnstap + unidirectional connectivity in unbound. This has a number of + new features. + + The dependency on libfstrm is removed. The fstrm protocol code + resides in dnstap/dnstap_fstrm.h and dnstap/dnstap_fstrm.c. This + contains a brief definition of what unbound needs. + + The make unbound-dnstap-socket builds a debug tool, + unbound-dnstap-socket. It can listen, accept multiple DNSTAP + streams and print information. Commandline options control it. + + Unbound can reconnect if the unix domain socket file socket is + closed. This uses exponential backoff after which it uses a + one second timer to throttle cpu down. There is also support + to use TCP and TLS for connecting to the log server. There + are new config options to turn them on, in the dnstap section + in the man page and example config file. dnstap-ip with IP + address of server for TCP or TLS use. dnstap-tls to turn + on TLS. And dnstap-tls-server-name, dnstap-tls-cert-bundle, + dnstap-tls-client-key-file and dnstap-tls-client-cert-file + to configure the certificates for server authentication and + client authentication, or leave at "" to not use that. 27 February 2020: George - Merge PR #171: Add additional compilers and platforms to Travis From f5f83bc025fb00b777387a627a0575399d5f5478 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 29 Feb 2020 13:11:29 -0500 Subject: [PATCH 135/235] Fix link error when OpenSSL is configured with no-engine (GH #175) --- configure.ac | 2 +- testcode/unitmain.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 187966bf7..14b144b7f 100644 --- a/configure.ac +++ b/configure.ac @@ -822,7 +822,7 @@ else AC_MSG_RESULT([no]) fi AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h],,, [AC_INCLUDES_DEFAULT]) -AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback]) +AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback]) # these check_funcs need -lssl BAKLIBS="$LIBS" diff --git a/testcode/unitmain.c b/testcode/unitmain.c index e8e7a44c7..10d8e6b21 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -917,7 +917,9 @@ main(int argc, char* argv[]) # ifdef HAVE_EVP_CLEANUP EVP_cleanup(); # endif +# ifdef HAVE_ENGINE_CLEANUP ENGINE_cleanup(); +# endif CONF_modules_free(); # endif # ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA From 05041f9cff863e8838cc0b4bf52dc249c8ad4d0f Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 29 Feb 2020 00:21:04 -0500 Subject: [PATCH 136/235] Add Android to Travis testing. --- .travis.yml | 90 +++++++++++++++++- README-Travis.md | 157 ++++++++++++++++++++++++++++++ android/15-android.conf | 185 ++++++++++++++++++++++++++++++++++++ android/install_expat.sh | 55 +++++++++++ android/install_ndk.sh | 64 +++++++++++++ android/install_openssl.sh | 49 ++++++++++ android/setenv_android.sh | 190 +++++++++++++++++++++++++++++++++++++ 7 files changed, 787 insertions(+), 3 deletions(-) create mode 100644 README-Travis.md create mode 100644 android/15-android.conf create mode 100755 android/install_expat.sh create mode 100755 android/install_ndk.sh create mode 100755 android/install_openssl.sh create mode 100755 android/setenv_android.sh diff --git a/.travis.yml b/.travis.yml index ab2c05f28..61c13f6d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -80,6 +80,58 @@ jobs: compiler: clang arch: s390x dist: bionic + - os: linux + name: Android armv7a, Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: + - TEST_ANDROID=yes + - AUTOTOOLS_HOST=armv7a-linux-androideabi + - OPENSSL_HOST=android-arm + - ANDROID_CPU=armv7a + - ANDROID_API=23 + - ANDROID_SDK_ROOT="$HOME/android-sdk" + - ANDROID_NDK_ROOT="$HOME/android-ndk" + - os: linux + name: Android aarch64, Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: + - TEST_ANDROID=yes + - AUTOTOOLS_HOST=aarch64-linux-android + - OPENSSL_HOST=android-arm64 + - ANDROID_CPU=aarch64 + - ANDROID_API=23 + - ANDROID_SDK_ROOT="$HOME/android-sdk" + - ANDROID_NDK_ROOT="$HOME/android-ndk" + - os: linux + name: Android x86, Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: + - TEST_ANDROID=yes + - AUTOTOOLS_HOST=i686-linux-android + - OPENSSL_HOST=android-x86 + - ANDROID_CPU=x86 + - ANDROID_API=23 + - ANDROID_SDK_ROOT="$HOME/android-sdk" + - ANDROID_NDK_ROOT="$HOME/android-ndk" + - os: linux + name: Android x86_64, Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: + - TEST_ANDROID=yes + - AUTOTOOLS_HOST=x86_64-linux-android + - OPENSSL_HOST=android-x86_64 + - ANDROID_CPU=x86_64 + - ANDROID_API=23 + - ANDROID_SDK_ROOT="$HOME/android-sdk" + - ANDROID_NDK_ROOT="$HOME/android-ndk" script: - | @@ -89,11 +141,43 @@ script: elif [ "$TEST_ASAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" ./configure + elif [ "$TEST_ANDROID" = "yes" ]; then + export AUTOTOOLS_BUILD="$(./config.guess)" + if ! ./android/install_ndk.sh ; then + echo "Failed to install Android SDK and NDK" + exit 1 + fi + if ! source ./android/setenv_android.sh "$ANDROID_CPU"; then + echo "Failed to set Android environment" + exit 1 + fi + if ! ./android/install_openssl.sh; then + echo "Failed to build and install OpenSSL" + exit 1 + fi + if ! ./android/install_expat.sh; then + echo "Failed to build and install Expat" + exit 1 + fi + if ! ./configure \ + --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --prefix="$ANDROID_SYSROOT" \ + --with-ssl="$ANDROID_SYSROOT" --disable-gost \ + --with-libexpat="$ANDROID_SYSROOT"; + then + echo "Failed to configure Unbound" + exit 1 + fi + if ! make -j 2; then + echo "Failed to build Unbound" + exit 1 + fi + exit 0 elif [ "$TRAVIS_OS_NAME" = "osx" ]; then ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/ else ./configure --enable-debug --disable-flto fi - - make -j 2 - - make test - - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) + if ! make -j 2; then exit 1; fi + if ! make test; then exit 1; fi + (cd testdata/clang-analysis.tdir; bash clang-analysis.test) diff --git a/README-Travis.md b/README-Travis.md new file mode 100644 index 000000000..4978e5282 --- /dev/null +++ b/README-Travis.md @@ -0,0 +1,157 @@ +# Travis Testing + +Unbound 1.11 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware. + +Android is tested on armv7a, aarch64, x86 and x86_64. Mips and Mips64 is no longer supported under current NDKs. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Due to Android NDK directory structure, the switch from GCC to Clang, and the tool names, the script will only work with NDK-r19 and above. And in the future it will likely break when the Android NDK team changes the directory structure and tools again (it happens every 2 or 3 years). + +The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys. + +## Typical recipe + +A typical recipe tests Clang and GCC on various hardware. The hardware includes AMD64, Aarch64, PowerPC and s390x. PowerPC is a little-endian platform, and s390x is a big-endian platform. There are pairs of recipes that are similar to the following. + +``` +- os: linux + name: GCC on Linux, Aarch64 + compiler: gcc + arch: arm64 + dist: bionic +- os: linux + name: Clang on Linux, Aarch64 + compiler: clang + arch: arm64 + dist: bionic +``` + +OS X provides a single recipe to test Clang. GCC is not tested because GCC is an alias for Clang. + +## Sanitizer builds + +Two sanitizer builds are tested using Clang and GCC, for a total of four builds. The first sanitizer is Undefined Behavior sanitizer (UBsan), and the second is Address sanitizer (Asan). The sanitizers are only run on AMD64 hardware. Note the environment includes `TEST_UBSAN=yes` or `TEST_ASAN=yes` for the sanitizer builds. + +The recipes are similar to the following. + +``` +- os: linux + name: UBsan, GCC on Linux, Amd64 + compiler: gcc + arch: amd64 + dist: bionic + env: TEST_UBSAN=yes +- os: linux + name: UBsan, Clang on Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: TEST_UBSAN=yes +``` + +When the Travis script encounters a sanitizer it uses different `CFLAGS` and configuration string. + +``` +if [ "$TEST_UBSAN" = "yes" ]; then + export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover" + ./configure +elif [ "$TEST_ASAN" = "yes" ]; then + export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" + ./configure +... +``` + +## Android builds + +Android builds test compiles under armv7a, aarch64, x86 and x86_64. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The steps below detail the pieces of the Android recipes. + +The first step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks botch this step, and use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). + +Unbound exports the variables in the Travis configuration script for the Android recipe: + +``` +export ANDROID_SDK_ROOT="$HOME/android-sdk" +export ANDROID_NDK_ROOT="$HOME/android-ndk" +``` + +The second step installs the NDK and SDK. This step is handled in by the script `android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. + +The third step sets the cross-compile environment using the script `android/setenv_android.sh`. The script is `sourced` so the variables set in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. + +`setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `setenv_android.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. + +``` +- os: linux + name: Android aarch64, Linux, Amd64 + compiler: clang + arch: amd64 + dist: bionic + env: + - TEST_ANDROID=yes + - AUTOTOOLS_HOST=aarch64-linux-android + - OPENSSL_CPU=arm64 + - ANDROID_CPU=arm64-v8a + - ANDROID_API=23 +``` + +The `setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. + +``` +armv8a|aarch64|arm64|arm64-v8a) + CC="aarch64-linux-android$ANDROID_API-clang" + CXX="aarch64-linux-android$ANDROID_API-clang++" + LD="aarch64-linux-android-ld" + AS="aarch64-linux-android-as" + AR="aarch64-linux-android-ar" + RANLIB="aarch64-linux-android-ranlib" + STRIP="aarch64-linux-android-strip" + + CFLAGS="-funwind-tables -fexceptions" + CXXFLAGS="-funwind-tables -fexceptions -frtti" +``` + +Finally, once all the variables are set the Travis script cross-compiles OpenSSL and Expat, and then configures and builds Unbound. The recipe looks as follows. + +``` +elif [ "$TEST_ANDROID" = "yes" ]; then + # AUTOTOOLS_HOST is set in the job + export AUTOTOOLS_BUILD="$(./config.guess)" + if ! ./android/install_ndk.sh ; then + echo "Failed to install Android SDK and NDK" + exit 1 + fi + if ! source ./android/setenv_android.sh "$ANDROID_CPU"; then + echo "Failed to set Android environment" + exit 1 + fi + if ! ./android/install_openssl.sh; then + echo "Failed to build and install OpenSSL" + exit 1 + fi + if ! ./android/install_expat.sh; then + echo "Failed to build and install Expat" + exit 1 + fi + if ! ./configure \ + --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --prefix="$ANDROID_SYSROOT" \ + --with-ssl="$ANDROID_SYSROOT" --disable-gost \ + --with-libexpat="$ANDROID_SYSROOT"; + then + echo "Failed to configure Unbound" + exit 1 + fi + if ! make -j 2; then + echo "Failed to build Unbound" + exit 1 + fi +``` + +Unbound only smoke tests a build using a compile and link. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. + +Note the `--prefix="$ANDROID_SYSROOT"` used by OpenSSL, Expat and Unbound. This makes it easy to find libraries and headers because `CFLAGS` and `CXXFLAGS` already use `--sysroot="$ANDROID_SYSROOT"`. By performing a `make install` and installing into `$ANDROID_SYSROOT`, all the libraries needed by Unbound are present without extra flags or searching. + +## Android flags + +`android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. The flags are not arbitrary; they are taken from the `ndk-build` tool. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. + +`CXXFLAGS` includes `-fexceptions` because exceptions are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS—SUPPORT.html` in the NDK docs. + +To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-samples](https://github.com/android/ndk-samples/tree/master/hello-jni) and build the `hello-jni` project. Use the `V=1` flag to see the full compiler output. diff --git a/android/15-android.conf b/android/15-android.conf new file mode 100644 index 000000000..a4a840eb5 --- /dev/null +++ b/android/15-android.conf @@ -0,0 +1,185 @@ +#### Android... +# +# See NOTES.ANDROID for details, and don't miss platform-specific +# comments below... + +{ + use File::Spec::Functions; + + my $android_ndk = {}; + my %triplet = ( + arm => "arm-linux-androideabi", + armeabi => "arm-linux-androideabi", + armv7a => "arm-linux-androideabi", + arm64 => "aarch64-linux-android", + x86 => "i686-linux-android", + x86_64 => "x86_64-linux-android" + ); + + sub android_ndk { + unless (%$android_ndk) { + if ($now_printing =~ m|^android|) { + return $android_ndk = { bn_ops => "BN_AUTO" }; + } + + my $ndk_var; + my $ndk; + foreach (qw(ANDROID_NDK_ROOT)) { + $ndk_var = $_; + $ndk = $ENV{$ndk_var}; + last if defined $ndk; + } + die "\$ANDROID_NDK_ROOT is not defined" if (!$ndk); + if (!-d "$ndk/platforms" && !-f "$ndk/AndroidVersion.txt") { + # $ndk/platforms is traditional "all-inclusive" NDK, while + # $ndk/AndroidVersion.txt is so-called standalone toolchain + # tailored for specific target down to API level. + die "\$ANDROID_NDK_ROOT=$ndk is invalid"; + } + $ndk = canonpath($ndk); + + my $ndkver = undef; + + if (open my $fh, "<$ndk/source.properties") { + local $_; + while(<$fh>) { + if (m|Pkg\.Revision\s*=\s*([0-9]+)|) { + $ndkver = $1; + last; + } + } + close $fh; + } + + my ($sysroot, $api, $arch); + + $config{target} =~ m|[^-]+-([^-]+)$|; # split on dash + $arch = $1; + + if ($arch = "armeabi") { + $arch = "arm"; + } + + if (-f "$ndk/AndroidVersion.txt") { + $sysroot = "$ndk/sysroot"; + } else { + $api = "*"; + + # see if user passed -D__ANDROID_API__=N + foreach (@{$useradd{CPPDEFINES}}, @{$user{CPPFLAGS}}) { + if (m|__ANDROID_API__=([0-9]+)|) { + $api = $1; + last; + } + } + + # list available platforms (numerically) + my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1; + $b =~ m/-([0-9]+)$/; $aa <=> $1; + } glob("$ndk/platforms/android-$api"); + die "no $ndk/platforms/android-$api" if ($#platforms < 0); + + $sysroot = "@platforms[$#platforms]/arch-$arch"; + $sysroot =~ m|/android-([0-9]+)/arch-$arch|; + $api = $1; + } + die "no sysroot=$sysroot" if (!-d $sysroot); + + my $triarch = $triplet{$arch}; + my $cflags; + my $cppflags; + + # see if there is NDK clang on $PATH, "universal" or "standalone" + if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { + my $host=$1; + # harmonize with gcc default + my $arm = $ndkver > 16 ? "armv7a" : "armv5te"; + (my $tridefault = $triarch) =~ s/^arm-/$arm-/; + (my $tritools = $triarch) =~ s/(?:x|i6)86(_64)?-.*/x86$1/; + $cflags .= " -target $tridefault "; + $user{CC} = "clang" if ($user{CC} !~ m|clang|); + $user{CROSS_COMPILE} = undef; + if (which("llvm-ar") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { + $user{AR} = "llvm-ar"; + $user{ARFLAGS} = [ "rs" ]; + $user{RANLIB} = ":"; + } + } elsif (-f "$ndk/AndroidVersion.txt") { #"standalone toolchain" + my $cc = $user{CC} // "clang"; + # One can probably argue that both clang and gcc should be + # probed, but support for "standalone toolchain" was added + # *after* announcement that gcc is being phased out, so + # favouring clang is considered adequate. Those who insist + # have option to enforce test for gcc with CC=gcc. + if (which("$triarch-$cc") !~ m|^$ndk|) { + die "no NDK $triarch-$cc on \$PATH"; + } + $user{CC} = $cc; + $user{CROSS_COMPILE} = "$triarch-"; + } elsif ($user{CC} eq "clang") { + die "no NDK clang on \$PATH"; + } else { + if (which("$triarch-gcc") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) { + die "no NDK $triarch-gcc on \$PATH"; + } + $cflags .= " -mandroid"; + $user{CROSS_COMPILE} = "$triarch-"; + } + + if (!-d "$sysroot/usr/include") { + my $incroot = "$ndk/sysroot/usr/include"; + die "no $incroot" if (!-d $incroot); + die "no $incroot/$triarch" if (!-d "$incroot/$triarch"); + $incroot =~ s|^$ndk/||; + $cppflags = "-D__ANDROID_API__=$api"; + } + + $sysroot =~ s|^$ndk/||; + $android_ndk = { + cppflags => $cppflags, + bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG" + : "BN_LLONG", + }; + } + + return $android_ndk; + } +} + +my %targets = ( + "android" => { + inherit_from => [ "linux-generic32" ], + template => 1, + ################################################################ + # Special note about -pie. The underlying reason is that + # Lollipop refuses to run non-PIE. But what about older systems + # and NDKs? -fPIC was never problem, so the only concern is -pie. + cflags => add(sub { android_ndk()->{cflags} }), + cppflags => add(sub { android_ndk()->{cppflags} }), + cxxflags => add(sub { android_ndk()->{cflags} }), + bn_ops => sub { android_ndk()->{bn_ops} }, + bin_cflags => "-pie", + enable => [ ], + }, + "android-arm" => { + inherit_from => [ "android", asm("armv4_asm") ], + bn_ops => add("RC4_CHAR"), + }, + "android-arm64" => { + inherit_from => [ "android", asm("aarch64_asm") ], + bn_ops => add("RC4_CHAR"), + perlasm_scheme => "linux64", + }, + + "android-x86" => { + inherit_from => [ "android", asm("x86_asm") ], + CFLAGS => add(picker(release => "-fomit-frame-pointer")), + bn_ops => add("RC4_INT"), + perlasm_scheme => "android", + }, + "android-x86_64" => { + inherit_from => [ "android", asm("x86_64_asm") ], + bn_ops => add("RC4_INT"), + perlasm_scheme => "elf", + }, +); diff --git a/android/install_expat.sh b/android/install_expat.sh new file mode 100755 index 000000000..fa6575973 --- /dev/null +++ b/android/install_expat.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# install android deps +sudo apt-get -qq update +sudo apt-get -qq install --no-install-recommends curl tar + +echo "Downloading Expat" +if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz; +then + echo "Failed to download Expat" + exit 1 +fi + +echo "Unpacking Expat" +rm -rf ./expat-2.2.9 +if ! tar -xf expat-2.2.9.tar.gz; +then + echo "Failed to unpack Expat" + exit 1 +fi + +cd expat-2.2.9 || exit 1 + +echo "Configuring Expat" +if ! ./configure --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" --prefix="$ANDROID_SYSROOT"; then + echo "Error: Failed to configure Expat" + exit 1 +fi + +# Cleanup warnings, https://github.com/libexpat/libexpat/issues/383 +echo "Fixing Makefiles..." +(IFS="" find "$PWD" -name 'Makefile' -print | while read -r file +do + cp -p "$file" "$file.fixed" + sed 's|-Wduplicated-cond ||g; s|-Wduplicated-branches ||g; s|-Wlogical-op ||g' "$file" > "$file.fixed" + mv "$file.fixed" "$file" + + cp -p "$file" "$file.fixed" + sed 's|-Wrestrict ||g; s|-Wjump-misses-init ||g; s|-Wmisleading-indentation ||g' "$file" > "$file.fixed" + mv "$file.fixed" "$file" +done) + +echo "Building Expat" +if ! make; then + echo "Failed to build Expat" + exit 1 +fi + +echo "Installing Expat" +if ! make install; then + echo "Failed to install Expat" + exit 1 +fi + +exit 0 diff --git a/android/install_ndk.sh b/android/install_ndk.sh new file mode 100755 index 000000000..5a16f78a7 --- /dev/null +++ b/android/install_ndk.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +# install android deps +sudo apt-get -qq update +sudo apt-get -qq install --no-install-recommends curl openjdk-8-jdk zip unzip + +if [ -z "$ANDROID_SDK_ROOT" ]; then + echo "ERROR: ANDROID_SDK_ROOT is not a valid path. Please set it." + echo "SDK root is $ANDROID_SDK_ROOT" + exit 1 +fi + +if [ -z "$ANDROID_NDK_ROOT" ]; then + echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it." + echo "NDK root is $ANDROID_NDK_ROOT" + exit 1 +fi + +echo "Using ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT" +echo "Using ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" + +echo "Downloading SDK" +if ! curl -L -k -s -o "$HOME/android-sdk.zip" https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip; +then + echo "Failed to download SDK" + exit 1 +fi + +echo "Downloading NDK" +if ! curl -L -k -s -o "$HOME/android-ndk.zip" https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip; +then + echo "Failed to download NDK" + exit 1 +fi + +echo "Unpacking SDK to $ANDROID_SDK_ROOT" +if ! unzip -qq "$HOME/android-sdk.zip" -d "$ANDROID_SDK_ROOT"; +then + echo "Failed to unpack SDK" + exit 1 +fi + +echo "Unpacking NDK to $ANDROID_NDK_ROOT" +if ! unzip -qq "$HOME/android-ndk.zip" -d "$HOME"; +then + echo "Failed to unpack NDK" + exit 1 +fi + +if ! mv "$HOME/android-ndk-r20b" "$ANDROID_NDK_ROOT"; +then + echo "Failed to move $HOME/android-ndk-r20b to $ANDROID_NDK_ROOT" + exit 1 +fi + +rm -f "$HOME/android-sdk.zip" +rm -f "$HOME/android-ndk.zip" + +# https://stackoverflow.com/a/47028911/608639 +touch "$ANDROID_SDK_ROOT/repositories.cfg" + +echo "Finished installing SDK and NDK" + +exit 0 diff --git a/android/install_openssl.sh b/android/install_openssl.sh new file mode 100755 index 000000000..0377cc9fa --- /dev/null +++ b/android/install_openssl.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# install android deps +sudo apt-get -qq update +sudo apt-get -qq install --no-install-recommends curl tar perl + +echo "Downloading OpenSSL" +if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz; +then + echo "Failed to download OpenSSL" + exit 1 +fi + +echo "Unpacking OpenSSL" +rm -rf ./openssl-1.1.1d +if ! tar -xf openssl-1.1.1d.tar.gz; +then + echo "Failed to unpack OpenSSL" + exit 1 +fi + +cd openssl-1.1.1d || exit 1 + +# Damn OpenSSL devs... They just make the shit up as they go... +if ! cp ../android/15-android.conf Configurations/; then + echo "Failed to copy OpenSSL Android config" + exit 1 +fi + +echo "Configuring OpenSSL" +if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine shared \ + "$CFLAGS" --prefix="$ANDROID_SYSROOT" --openssldir="$ANDROID_SYSROOT"; then + echo "Failed to configure OpenSSL" + exit 1 +fi + +echo "Building OpenSSL" +if ! make; then + echo "Failed to build OpenSSL" + exit 1 +fi + +echo "Installing OpenSSL" +if ! make install_sw; then + echo "Failed to install OpenSSL" + exit 1 +fi + +exit 0 diff --git a/android/setenv_android.sh b/android/setenv_android.sh new file mode 100755 index 000000000..915753ee0 --- /dev/null +++ b/android/setenv_android.sh @@ -0,0 +1,190 @@ +#!/usr/bin/env bash + +# Error checking +if [ ! -d "$ANDROID_NDK_ROOT" ]; then + echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it." + echo "NDK root is $ANDROID_NDK_ROOT" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +##################################################################### + +# Need to set THIS_HOST to darwin-x86_64, linux-x86_64, +# windows-x86_64 or windows. + +if [[ "$(uname -s | grep -i -c darwin)" -ne 0 ]]; then + THIS_HOST=darwin-x86_64 +elif [[ "$(uname -s | grep -i -c linux)" -ne 0 ]]; then + THIS_HOST=linux-x86_64 +else + echo "ERROR: Unknown host" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +AOSP_TOOLCHAIN_ROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST" +AOSP_TOOLCHAIN_PATH="$AOSP_TOOLCHAIN_ROOT/bin" +AOSP_SYSROOT="$AOSP_TOOLCHAIN_ROOT/sysroot" + +# Error checking +if [ ! -d "$AOSP_TOOLCHAIN_ROOT" ]; then + echo "ERROR: AOSP_TOOLCHAIN_ROOT is not a valid path. Please set it." + echo "Root is $AOSP_TOOLCHAIN_ROOT" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -d "$AOSP_TOOLCHAIN_PATH" ]; then + echo "ERROR: AOSP_TOOLCHAIN_PATH is not a valid path. Please set it." + echo "Path is $AOSP_TOOLCHAIN_PATH" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -d "$AOSP_SYSROOT" ]; then + echo "ERROR: AOSP_SYSROOT is not a valid path. Please set it." + echo "Path is $AOSP_SYSROOT" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +##################################################################### + +if [ "$#" -lt 1 ]; then + AOSP_ARCH=armeabi-v7a +else + AOSP_ARCH=$(tr '[:upper:]' '[:upper:]' <<< "$1") +fi + +# https://developer.android.com/ndk/guides/abis.html +case "$AOSP_ARCH" in + armeabi|armv7a|armv7-a|armeabi-v7a) + CC="armv7a-linux-androideabi$ANDROID_API-clang" + CXX="armv7a-linux-androideabi$ANDROID_API-clang++" + LD="arm-linux-androideabi-ld" + AS="arm-linux-androideabi-as" + AR="arm-linux-androideabi-ar" + RANLIB="arm-linux-androideabi-ranlib" + STRIP="arm-linux-androideabi-strip" + + CFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions" + CXXFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions -frtti" + ;; + + armv8|armv8a|aarch64|arm64|arm64-v8a) + CC="aarch64-linux-android$ANDROID_API-clang" + CXX="aarch64-linux-android$ANDROID_API-clang++" + LD="aarch64-linux-android-ld" + AS="aarch64-linux-android-as" + AR="aarch64-linux-android-ar" + RANLIB="aarch64-linux-android-ranlib" + STRIP="aarch64-linux-android-strip" + + CFLAGS="-funwind-tables -fexceptions" + CXXFLAGS="-funwind-tables -fexceptions -frtti" + ;; + + x86) + CC="i686-linux-android$ANDROID_API-clang" + CXX="i686-linux-android$ANDROID_API-clang++" + LD="i686-linux-android-ld" + AS="i686-linux-android-as" + AR="i686-linux-android-ar" + RANLIB="i686-linux-android-ranlib" + STRIP="i686-linux-android-strip" + + CFLAGS="-mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions" + CXXFLAGS="-mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions -frtti" + ;; + + x86_64|x64) + CC="x86_64-linux-android$ANDROID_API-clang" + CXX="x86_64-linux-android$ANDROID_API-clang++" + LD="x86_64-linux-android-ld" + AS="x86_64-linux-android-as" + AR="x86_64-linux-android-ar" + RANLIB="x86_64-linux-android-ranlib" + STRIP="x86_64-linux-android-strip" + + CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions" + CXXFLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions -frtti" + ;; + + *) + echo "ERROR: Unknown architecture $1" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 + ;; + +esac + +##################################################################### + +# Error checking +if [ ! -e "$AOSP_TOOLCHAIN_PATH/$CC" ]; then + echo "ERROR: Failed to find Android clang. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$AOSP_TOOLCHAIN_PATH/$CXX" ]; then + echo "ERROR: Failed to find Android clang++. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$AOSP_TOOLCHAIN_PATH/$RANLIB" ]; then + echo "ERROR: Failed to find Android ranlib. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$AOSP_TOOLCHAIN_PATH/$AR" ]; then + echo "ERROR: Failed to find Android ar. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$AOSP_TOOLCHAIN_PATH/$AS" ]; then + echo "ERROR: Failed to find Android as. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$AOSP_TOOLCHAIN_PATH/$LD" ]; then + echo "ERROR: Failed to find Android ld. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +##################################################################### + +# Only modify/export PATH if AOSP_TOOLCHAIN_PATH good +if [ -d "$AOSP_TOOLCHAIN_PATH" ]; then + # And only modify PATH if AOSP_TOOLCHAIN_PATH is not present + LEN=${#AOSP_TOOLCHAIN_PATH} + SUBSTR=${PATH:0:$LEN} + if [ "$SUBSTR" != "$AOSP_TOOLCHAIN_PATH" ]; then + export PATH="$AOSP_TOOLCHAIN_PATH:$PATH" + fi +fi + +##################################################################### + +export CPP CC CXX LD AS AR RANLIB STRIP +export ANDROID_SYSROOT="$AOSP_SYSROOT" +export CFLAGS="-D__ANDROID_API__=$ANDROID_API $CFLAGS --sysroot=$AOSP_SYSROOT" +export CXXFLAGS="-D__ANDROID_API__=$ANDROID_API $CXXFLAGS --sysroot=$AOSP_SYSROOT" + +##################################################################### + +echo "AOSP_TOOLCHAIN_PATH: $AOSP_TOOLCHAIN_PATH" + +echo "CC: $CC" +echo "CXX: $CXX" +echo "LD: $LD" +echo "AS: $AS" +echo "AR: $AR" + +echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" + +echo "CFLAGS: $CFLAGS" +echo "CXXFLAGS: $CXXFLAGS" + +[ "$0" = "${BASH_SOURCE[0]}" ] && exit 0 || return 0 From c5897dc058e89dfdc02ee6ca06ade2f8370de70c Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 2 Mar 2020 11:52:33 +0100 Subject: [PATCH 137/235] - Fix compiler warning in dns64/dns64.c. --- dns64/dns64.c | 2 +- doc/Changelog | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dns64/dns64.c b/dns64/dns64.c index 1a569059a..5c70119a5 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -227,7 +227,7 @@ ipv4_to_ptr(uint32_t ipv4, char ptr[], size_t nm_len) static const char IPV4_PTR_SUFFIX[] = "\07in-addr\04arpa"; int i; char* c = ptr; - log_assert(nm_len == MAX_PTR_QNAME_IPV4); + log_assert(nm_len == MAX_PTR_QNAME_IPV4); (void)nm_len; for (i = 0; i < 4; ++i) { *c = uitoa((unsigned int)(ipv4 % 256), c + 1); diff --git a/doc/Changelog b/doc/Changelog index b25fd357b..970cbcf15 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +2 March 2020: George + - Fix compiler warning in dns64/dns64.c + 28 February 2020: Ralph - Merge PR #172: Add IBM s390x arch for testing, by noloader. From d4dcdba07e77676a332219dd6bfa0b1f7b005388 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 2 Mar 2020 12:27:45 +0100 Subject: [PATCH 138/235] Cleanup nettle_ecc_point when verifying for ... ... ECDSA256 with libnettle --- validator/val_secalgo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 8f17c53e8..3dbbe9ac9 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -1746,6 +1746,7 @@ _verify_nettle_ecdsa(sldns_buffer* buf, unsigned int digest_size, unsigned char* res &= nettle_ecdsa_verify (&pubkey, SHA256_DIGEST_SIZE, digest, &signature); mpz_clear(x); mpz_clear(y); + nettle_ecc_point_clear(&pubkey); break; } case SHA384_DIGEST_SIZE: From 4207b58700ccb41f1e7fb959120aef4da87c246d Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 2 Mar 2020 13:33:34 +0100 Subject: [PATCH 139/235] - Fix #177: dnstap does not build on macOS. --- dnstap/dtstream.c | 2 +- doc/Changelog | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 2d55d197f..bb862d441 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1579,7 +1579,7 @@ static int dtio_open_output_local(struct dt_io_thread* dtio) memset(&s, 0, sizeof(s)); #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN /* this member exists on BSDs, not Linux */ - s.sun_len = (unsigned)sizeof(usock); + s.sun_len = (unsigned)sizeof(s); #endif s.sun_family = AF_LOCAL; /* length is 92-108, 104 on FreeBSD */ diff --git a/doc/Changelog b/doc/Changelog index 970cbcf15..27f6a66f0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,9 @@ 2 March 2020: George - Fix compiler warning in dns64/dns64.c +2 March 2020: Wouter + - Fix #177: dnstap does not build on macOS. + 28 February 2020: Ralph - Merge PR #172: Add IBM s390x arch for testing, by noloader. From 90040b24cebd78ca478c6ec64d6e9d87a0d42d8f Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 2 Mar 2020 14:06:10 +0100 Subject: [PATCH 140/235] - Fix link error when OpenSSL is configured with no-engine, thanks noloader. --- config.h.in | 3 +++ configure | 26 +++++++++++++++++++------- daemon/daemon.c | 2 +- doc/Changelog | 4 ++++ testcode/unitmain.c | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/config.h.in b/config.h.in index 78d47fedc..11332b82f 100644 --- a/config.h.in +++ b/config.h.in @@ -176,6 +176,9 @@ /* Define to 1 if you have the `endservent' function. */ #undef HAVE_ENDSERVENT +/* Define to 1 if you have the `ENGINE_cleanup' function. */ +#undef HAVE_ENGINE_CLEANUP + /* Define to 1 if you have the `ERR_free_strings' function. */ #undef HAVE_ERR_FREE_STRINGS diff --git a/configure b/configure index 87f9799ae..bc414a67a 100755 --- a/configure +++ b/configure @@ -804,6 +804,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -950,6 +951,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1202,6 +1204,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1339,7 +1350,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1492,6 +1503,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -15648,7 +15660,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15694,7 +15706,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15718,7 +15730,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15763,7 +15775,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15787,7 +15799,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18272,7 +18284,7 @@ fi done -for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback +for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/daemon/daemon.c b/daemon/daemon.c index 1e1dfd002..5d4279259 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -781,7 +781,7 @@ daemon_delete(struct daemon* daemon) # endif # ifdef HAVE_OPENSSL_CONFIG EVP_cleanup(); -# if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) +# if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP) ENGINE_cleanup(); # endif CONF_modules_free(); diff --git a/doc/Changelog b/doc/Changelog index 970cbcf15..175b0bab8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +2 March 2020: Ralph + - Fix link error when OpenSSL is configured with no-engine, + thanks noloader. + 2 March 2020: George - Fix compiler warning in dns64/dns64.c diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 10d8e6b21..eb35e7c21 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -917,7 +917,7 @@ main(int argc, char* argv[]) # ifdef HAVE_EVP_CLEANUP EVP_cleanup(); # endif -# ifdef HAVE_ENGINE_CLEANUP +# if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP) ENGINE_cleanup(); # endif CONF_modules_free(); From 868ce6372de02b3b9e1d748a14df974410d37bbd Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 2 Mar 2020 14:13:20 +0100 Subject: [PATCH 141/235] - Add github reference in changelog (Fix #175, Merge PR #176) --- doc/Changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 175b0bab8..3dfda659c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,6 @@ 2 March 2020: Ralph - - Fix link error when OpenSSL is configured with no-engine, - thanks noloader. + - Fix #175, Merge PR #176: fix link error when OpenSSL is configured + with no-engine, thanks noloader. 2 March 2020: George - Fix compiler warning in dns64/dns64.c From f4eaf6c0ff2c181fe127d29789c57ba60ac5f731 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 2 Mar 2020 15:09:07 +0100 Subject: [PATCH 142/235] - Merge PR #174: Add Android to Travis testing, by noloader. - Move android build scripts to contrib/ and allow android tests to fail. --- .travis.yml | 22 +++++++++++++++---- README-Travis.md | 18 +++++++-------- {android => contrib/android}/15-android.conf | 0 {android => contrib/android}/install_expat.sh | 0 {android => contrib/android}/install_ndk.sh | 0 .../android}/install_openssl.sh | 2 +- .../android}/setenv_android.sh | 0 doc/Changelog | 2 ++ 8 files changed, 30 insertions(+), 14 deletions(-) rename {android => contrib/android}/15-android.conf (100%) rename {android => contrib/android}/install_expat.sh (100%) rename {android => contrib/android}/install_ndk.sh (100%) rename {android => contrib/android}/install_openssl.sh (94%) rename {android => contrib/android}/setenv_android.sh (100%) diff --git a/.travis.yml b/.travis.yml index 61c13f6d5..5fe4735a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -133,6 +133,20 @@ jobs: - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" + allow_failures: + - os: linux + arch: amd64 + name: Android armv7a, Linux, Amd64 + - os: linux + arch: amd64 + name: Android aarch64, Linux, Amd64 + - os: linux + arch: amd64 + name: Android x86, Linux, Amd64 + - os: linux + arch: amd64 + name: Android x86_64, Linux, Amd64 + script: - | if [ "$TEST_UBSAN" = "yes" ]; then @@ -143,19 +157,19 @@ script: ./configure elif [ "$TEST_ANDROID" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" - if ! ./android/install_ndk.sh ; then + if ! ./contrib/android/install_ndk.sh ; then echo "Failed to install Android SDK and NDK" exit 1 fi - if ! source ./android/setenv_android.sh "$ANDROID_CPU"; then + if ! source ./contrib/android/setenv_android.sh "$ANDROID_CPU"; then echo "Failed to set Android environment" exit 1 fi - if ! ./android/install_openssl.sh; then + if ! ./contrib/android/install_openssl.sh; then echo "Failed to build and install OpenSSL" exit 1 fi - if ! ./android/install_expat.sh; then + if ! ./contrib/android/install_expat.sh; then echo "Failed to build and install Expat" exit 1 fi diff --git a/README-Travis.md b/README-Travis.md index 4978e5282..631a4a45b 100644 --- a/README-Travis.md +++ b/README-Travis.md @@ -71,11 +71,11 @@ export ANDROID_SDK_ROOT="$HOME/android-sdk" export ANDROID_NDK_ROOT="$HOME/android-ndk" ``` -The second step installs the NDK and SDK. This step is handled in by the script `android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. +The second step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. -The third step sets the cross-compile environment using the script `android/setenv_android.sh`. The script is `sourced` so the variables set in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. +The third step sets the cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables set in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. -`setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `setenv_android.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. +`contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. ``` - os: linux @@ -91,7 +91,7 @@ The third step sets the cross-compile environment using the script `android/sete - ANDROID_API=23 ``` -The `setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. +The `contrib/android/setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. ``` armv8a|aarch64|arm64|arm64-v8a) @@ -113,19 +113,19 @@ Finally, once all the variables are set the Travis script cross-compiles OpenSSL elif [ "$TEST_ANDROID" = "yes" ]; then # AUTOTOOLS_HOST is set in the job export AUTOTOOLS_BUILD="$(./config.guess)" - if ! ./android/install_ndk.sh ; then + if ! ./contrib/android/install_ndk.sh ; then echo "Failed to install Android SDK and NDK" exit 1 fi - if ! source ./android/setenv_android.sh "$ANDROID_CPU"; then + if ! source ./contrib/android/setenv_android.sh "$ANDROID_CPU"; then echo "Failed to set Android environment" exit 1 fi - if ! ./android/install_openssl.sh; then + if ! ./contrib/android/install_openssl.sh; then echo "Failed to build and install OpenSSL" exit 1 fi - if ! ./android/install_expat.sh; then + if ! ./contrib/android/install_expat.sh; then echo "Failed to build and install Expat" exit 1 fi @@ -150,7 +150,7 @@ Note the `--prefix="$ANDROID_SYSROOT"` used by OpenSSL, Expat and Unbound. This ## Android flags -`android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. The flags are not arbitrary; they are taken from the `ndk-build` tool. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. +`contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. The flags are not arbitrary; they are taken from the `ndk-build` tool. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. `CXXFLAGS` includes `-fexceptions` because exceptions are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS—SUPPORT.html` in the NDK docs. diff --git a/android/15-android.conf b/contrib/android/15-android.conf similarity index 100% rename from android/15-android.conf rename to contrib/android/15-android.conf diff --git a/android/install_expat.sh b/contrib/android/install_expat.sh similarity index 100% rename from android/install_expat.sh rename to contrib/android/install_expat.sh diff --git a/android/install_ndk.sh b/contrib/android/install_ndk.sh similarity index 100% rename from android/install_ndk.sh rename to contrib/android/install_ndk.sh diff --git a/android/install_openssl.sh b/contrib/android/install_openssl.sh similarity index 94% rename from android/install_openssl.sh rename to contrib/android/install_openssl.sh index 0377cc9fa..64d87e313 100755 --- a/android/install_openssl.sh +++ b/contrib/android/install_openssl.sh @@ -22,7 +22,7 @@ fi cd openssl-1.1.1d || exit 1 # Damn OpenSSL devs... They just make the shit up as they go... -if ! cp ../android/15-android.conf Configurations/; then +if ! cp ../contrib/android/15-android.conf Configurations/; then echo "Failed to copy OpenSSL Android config" exit 1 fi diff --git a/android/setenv_android.sh b/contrib/android/setenv_android.sh similarity index 100% rename from android/setenv_android.sh rename to contrib/android/setenv_android.sh diff --git a/doc/Changelog b/doc/Changelog index 5cf0ac716..232bf40f3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,8 @@ 2 March 2020: George - Fix compiler warning in dns64/dns64.c + - Merge PR #174: Add Android to Travis testing, by noloader. + - Move android build scripts to contrib/ and allow android tests to fail. 2 March 2020: Wouter - Fix #177: dnstap does not build on macOS. From 0c51af0fb41ad7337b1c2c492317d11c84107521 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 2 Mar 2020 16:12:51 +0100 Subject: [PATCH 143/235] - Make contrib/android/install_openssl.sh Code of Conduct compliant. --- contrib/android/install_openssl.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/contrib/android/install_openssl.sh b/contrib/android/install_openssl.sh index 64d87e313..58a00d21a 100755 --- a/contrib/android/install_openssl.sh +++ b/contrib/android/install_openssl.sh @@ -21,7 +21,6 @@ fi cd openssl-1.1.1d || exit 1 -# Damn OpenSSL devs... They just make the shit up as they go... if ! cp ../contrib/android/15-android.conf Configurations/; then echo "Failed to copy OpenSSL Android config" exit 1 From 114d650d32dba6f371ba9abe41e01ebee3cd8a7b Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 3 Mar 2020 18:29:11 +0100 Subject: [PATCH 144/235] - Upgrade config.guess(2020-01-01) and config.sub(2020-01-01). --- config.guess | 875 ++++++++++------ config.sub | 2786 ++++++++++++++++++++++++------------------------- doc/Changelog | 3 + 3 files changed, 1921 insertions(+), 1743 deletions(-) diff --git a/config.guess b/config.guess index 7ea49fadc..45001cfec 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ -#!/usr/bin/sh +#! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2016 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2016-10-02' +timestamp='2020-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2016-10-02' # 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 . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,7 +27,7 @@ timestamp='2016-10-02' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -39,7 +39,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2016 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,8 +84,6 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 - # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a @@ -96,34 +94,40 @@ trap 'exit 1' 1 2 15 # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi @@ -132,14 +136,14 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + set_cc_for_build + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc @@ -149,13 +153,20 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -169,30 +180,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-unknown + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -208,10 +219,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release @@ -219,45 +230,60 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" + echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in @@ -310,28 +336,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -343,7 +360,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -370,19 +387,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. @@ -395,13 +412,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in @@ -410,25 +427,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -439,44 +456,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -485,23 +502,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -527,17 +544,17 @@ EOF AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -554,7 +571,7 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id @@ -566,14 +583,14 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -584,7 +601,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else @@ -598,7 +615,7 @@ EOF exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -607,18 +624,18 @@ EOF IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -633,28 +650,28 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in + case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in + case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if [ "$HP_ARCH" = "" ]; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -687,13 +704,13 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = hppa2.0w ] + if [ "$HP_ARCH" = hppa2.0w ] then - eval $set_cc_for_build + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -712,15 +729,15 @@ EOF HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -745,11 +762,11 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -758,7 +775,7 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -766,9 +783,9 @@ EOF exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -793,130 +810,123 @@ EOF echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -927,140 +937,168 @@ EOF esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1074,34 +1112,34 @@ EOF # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) @@ -1111,12 +1149,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1126,9 +1164,9 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1148,9 +1186,9 @@ EOF exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1170,9 +1208,9 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1181,28 +1219,28 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1213,7 +1251,7 @@ EOF *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1233,23 +1271,23 @@ EOF exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1268,60 +1306,68 @@ EOF echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux${UNAME_RELEASE} + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` @@ -1329,19 +1375,25 @@ EOF UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1350,18 +1402,19 @@ EOF echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. + # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1382,14 +1435,14 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1398,32 +1451,184 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/config.sub b/config.sub index ba15a57a5..f02d43ad5 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ -#!/usr/bin/sh +#! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2016 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2016-09-05' +timestamp='2020-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2016-09-05' # 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 . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ timestamp='2016-09-05' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2016 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,12 +89,12 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -110,1242 +110,1164 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 ;; - -bluegene*) - os=-cnk + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ + | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + os=linux-android + ;; + *) + basic_machine=$field1-$field2 + os=$field3 + ;; + esac ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + os= + ;; + *) + basic_machine=$field1 + os=$field2 + ;; + esac + ;; + esac ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + os=bsd + ;; + a29khif) + basic_machine=a29k-amd + os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=scout + ;; + alliant) + basic_machine=fx80-alliant + os= + ;; + altos | altos3068) + basic_machine=m68k-altos + os= + ;; + am29k) + basic_machine=a29k-none + os=bsd + ;; + amdahl) + basic_machine=580-amdahl + os=sysv + ;; + amiga) + basic_machine=m68k-unknown + os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=bsd + ;; + aros) + basic_machine=i386-pc + os=aros + ;; + aux) + basic_machine=m68k-apple + os=aux + ;; + balance) + basic_machine=ns32k-sequent + os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=linux + ;; + cegcc) + basic_machine=arm-unknown + os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=bsd + ;; + convex-c2) + basic_machine=c2-convex + os=bsd + ;; + convex-c32) + basic_machine=c32-convex + os=bsd + ;; + convex-c34) + basic_machine=c34-convex + os=bsd + ;; + convex-c38) + basic_machine=c38-convex + os=bsd + ;; + cray) + basic_machine=j90-cray + os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + os= + ;; + da30) + basic_machine=m68k-da30 + os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + os= + ;; + delta88) + basic_machine=m88k-motorola + os=sysv3 + ;; + dicos) + basic_machine=i686-pc + os=dicos + ;; + djgpp) + basic_machine=i586-pc + os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=ose + ;; + gmicro) + basic_machine=tron-gmicro + os=sysv + ;; + go32) + basic_machine=i386-pc + os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=hms + ;; + harris) + basic_machine=m88k-harris + os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=proelf + ;; + i386mach) + basic_machine=i386-mach + os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=sysv + ;; + merlin) + basic_machine=ns32k-utek + os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + os=coff + ;; + morphos) + basic_machine=powerpc-unknown + os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=moxiebox + ;; + msdos) + basic_machine=i386-pc + os=msdos + ;; + msys) + basic_machine=i686-pc + os=msys + ;; + mvs) + basic_machine=i370-ibm + os=mvs + ;; + nacl) + basic_machine=le32-unknown + os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=newsos + ;; + news1000) + basic_machine=m68030-sony + os=newsos + ;; + necv70) + basic_machine=v70-nec + os=sysv + ;; + nh3000) + basic_machine=m68k-harris + os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=cxux + ;; + nindy960) + basic_machine=i960-intel + os=nindy + ;; + mon960) + basic_machine=i960-intel + os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=ose + ;; + os68k) + basic_machine=m68k-none + os=os68k + ;; + paragon) + basic_machine=i860-intel + os=osf + ;; + parisc) + basic_machine=hppa-unknown + os=linux + ;; + pw32) + basic_machine=i586-unknown + os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=rdos + ;; + rdos32) + basic_machine=i386-pc + os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=coff + ;; + sa29200) + basic_machine=a29k-amd + os=udi + ;; + sei) + basic_machine=mips-sei + os=seiux + ;; + sequent) + basic_machine=i386-sequent + os= + ;; + sps7) + basic_machine=m68k-bull + os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + os= + ;; + stratus) + basic_machine=i860-stratus + os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + os= + ;; + sun2os3) + basic_machine=m68000-sun + os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + os= + ;; + sun3os3) + basic_machine=m68k-sun + os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + os= + ;; + sun4os3) + basic_machine=sparc-sun + os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + os= + ;; + sv1) + basic_machine=sv1-cray + os=unicos + ;; + symmetry) + basic_machine=i386-sequent + os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=unicos + ;; + t90) + basic_machine=t90-cray + os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + os=tpf + ;; + udi29k) + basic_machine=a29k-amd + os=udi + ;; + ultra3) + basic_machine=a29k-nyu + os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=none + ;; + vaxv) + basic_machine=vax-dec + os=sysv + ;; + vms) + basic_machine=vax-dec + os=vms + ;; + vsta) + basic_machine=i386-pc + os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=vxworks + ;; + xbox) + basic_machine=i686-pc + os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + os=unicos + ;; + *) + basic_machine=$1 + os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - c54x) - basic_machine=tic54x-unknown + op50n) + cpu=hppa1.1 + vendor=oki ;; - c55x) - basic_machine=tic55x-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - c6x) - basic_machine=tic6x-unknown + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + os=${os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + os=${os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $os in + irix*) + ;; + *) + os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + os=nextstep2 + ;; + *) + os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + os=${os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + os=proelf + ;; + none) + cpu=none + vendor=none ;; leon|leon[3-9]) - basic_machine=sparc-$basic_machine + cpu=sparc + vendor=$basic_machine ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - strongarm | thumb | xscale) - basic_machine=arm-unknown + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 + cpu=$basic_machine + vendor=pc ;; + # These rules are duplicated from below for sake of the special case above; + # i.e. things that normalized to x86 arches should also default to "pc" pc98) - basic_machine=i386-pc + cpu=i386 + vendor=pc ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + x64 | amd64) + cpu=x86_64 + vendor=pc ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc +esac + +unset -v basic_machine + +# Decode basic machines in the full and proper CPU-Company form. +case $cpu-$vendor in + # Here we handle the default manufacturer of certain CPU types in canonical form. It is in + # some cases the only manufacturer, in others, it is the most popular. + craynv-unknown) + vendor=cray + os=${os:-unicosmp} ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + c90-unknown | c90-cray) + vendor=cray + os=${os:-unicos} ;; - pentium4) - basic_machine=i786-pc + fx80-unknown) + vendor=alliant ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + romp-unknown) + vendor=ibm ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + mmix-unknown) + vendor=knuth ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + microblaze-unknown | microblazeel-unknown) + vendor=xilinx ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + rs6000-unknown) + vendor=ibm ;; - pn) - basic_machine=pn-gould + vax-unknown) + vendor=dec ;; - power) basic_machine=power-ibm + pdp11-unknown) + vendor=dec ;; - ppc | ppcbe) basic_machine=powerpc-unknown + we32k-unknown) + vendor=att ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + cydra-unknown) + vendor=cydrome ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown + i370-ibm*) + vendor=ibm ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + orion-unknown) + vendor=highlevel ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell ;; -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + os=${os:-bosx} ;; - op50n) - basic_machine=hppa1.1-oki + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 ;; - op60c) - basic_machine=hppa1.1-oki + blackfin-*) + cpu=bfin + os=linux ;; - romp) - basic_machine=romp-ibm + c54x-*) + cpu=tic54x ;; - mmix) - basic_machine=mmix-knuth + c55x-*) + cpu=tic55x ;; - rs6000) - basic_machine=rs6000-ibm + c6x-*) + cpu=tic6x ;; - vax) - basic_machine=vax-dec + e500v[12]-*) + cpu=powerpc + os=$os"spe" ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown + mips3*-*) + cpu=mips64 ;; - pdp11) - basic_machine=pdp11-dec + ms1-*) + cpu=mt ;; - we32k) - basic_machine=we32k-att + m68knommu-*) + cpu=m68k + os=linux ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun + openrisc-*) + cpu=or32 ;; - cydra) - basic_machine=cydra-cydrome + parisc-*) + cpu=hppa + os=linux ;; - orion) - basic_machine=orion-highlevel + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 ;; - orion105) - basic_machine=clipper-highlevel + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple + pentium4-*) + cpu=i786 ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. + pc98-*) + cpu=i386 ;; + ppc-* | ppcbe-*) + cpu=powerpc + ;; + ppcle-* | powerpclittle-*) + cpu=powerpcle + ;; + ppc64-*) + cpu=powerpc64 + ;; + ppc64le-* | powerpc64little-*) + cpu=powerpc64le + ;; + sb1-*) + cpu=mipsisa64sb1 + ;; + sb1el-*) + cpu=mipsisa64sb1el + ;; + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + ;; + spur-*) + cpu=spur + ;; + strongarm-* | thumb-*) + cpu=arm + ;; + tx39-*) + cpu=mipstx39 + ;; + tx39el-*) + cpu=mipstx39el + ;; + x64-*) + cpu=x86_64 + ;; + xscale-* | xscalee[bl]-*) + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + ;; + + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + os=${os:-elf} + ;; + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis + ;; + cris-* | etrax*-*) + cpu=cris + vendor=axis + ;; + crx-*) + os=${os:-elf} + ;; + neo-tandem) + cpu=neo + vendor=tandem + ;; + nse-tandem) + cpu=nse + vendor=tandem + ;; + nsr-tandem) + cpu=nsr + vendor=tandem + ;; + nsv-tandem) + cpu=nsv + vendor=tandem + ;; + nsx-tandem) + cpu=nsx + vendor=tandem + ;; + s390-*) + cpu=s390 + vendor=ibm + ;; + s390x-*) + cpu=s390x + vendor=ibm + ;; + tile*-*) + os=${os:-linux-gnu} + ;; + *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv64 \ + | rl78 | romp | rs6000 | rx \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1353,200 +1275,244 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if [ x$os != x ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux + # First match some system type aliases that might get confused + # with valid system types. + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux ;; - -solaris1 | -solaris1.*) + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; - -solaris) - os=-solaris2 + solaris) + os=solaris2 ;; - -svr4*) - os=-sysv4 + unixware*) + os=sysv4.2uw ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) + gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # es1800 is here to avoid being matched by es* (a different OS) + es1800*) + os=ose + ;; + # Some version numbers need modification + chorusos*) + os=chorusos + ;; + isc) + os=isc2.2 + ;; + sco6) + os=sco5v6 + ;; + sco5) + os=sco3.2v5 + ;; + sco4) + os=sco3.2v4 + ;; + sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + ;; + sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + scout) + # Don't match below + ;; + sco*) + os=sco3.2v2 + ;; + psos*) + os=psos + ;; + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* | -sortix* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix*) + # Each alternative MUST end in a * to match a version number. + # sysv* is not here because it comes later, after sysvr4. + gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | kopensolaris* | plan9* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | knetbsd* | mirbsd* | netbsd* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ + | linux-newlib* | linux-musl* | linux-uclibc* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* \ + | morphos* | superux* | rtmk* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix) # Remember, each alternative MUST END IN *, to match a version number. ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) + qnx*) + case $cpu in + x86 | i*86) ;; *) - os=-nto$os + os=nto-$os ;; esac ;; - -nto-qnx*) + hiux*) + os=hiuxwe2 ;; - -nto*) + nto-qnx*) + ;; + nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + sim | xray | os68k* | v88r* \ + | windows* | osx | abug | netware* | os9* \ + | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` + linux-dietlibc) + os=linux-dietlibc ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) + linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` + lynx*178) + os=lynxos178 ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` + lynx*5) + os=lynxos5 ;; - -opened*) - os=-openedition + lynx*) + os=lynxos ;; - -os400*) - os=-os400 + mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` ;; - -wince*) - os=-wince + opened*) + os=openedition ;; - -osfrose*) - os=-osfrose + os400*) + os=os400 ;; - -osf*) - os=-osf + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; - -utek*) - os=-bsd + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; - -dynix*) - os=-bsd + wince*) + os=wince ;; - -acis*) - os=-aos + utek*) + os=bsd ;; - -atheos*) - os=-atheos + dynix*) + os=bsd ;; - -syllable*) - os=-syllable + acis*) + os=aos ;; - -386bsd) - os=-bsd + atheos*) + os=atheos ;; - -ctix* | -uts*) - os=-sysv + syllable*) + os=syllable ;; - -nova*) - os=-rtmk-nova + 386bsd) + os=bsd ;; - -ns2 ) - os=-nextstep2 + ctix* | uts*) + os=sysv ;; - -nsk*) - os=-nsk + nova*) + os=rtmk-nova + ;; + ns2) + os=nextstep2 ;; # Preserve the version number of sinix5. - -sinix5.*) + sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; - -sinix*) - os=-sysv4 + sinix*) + os=sysv4 ;; - -tpf*) - os=-tpf + tpf*) + os=tpf ;; - -triton*) - os=-sysv3 + triton*) + os=sysv3 ;; - -oss*) - os=-sysv3 + oss*) + os=sysv3 ;; - -svr4) - os=-sysv4 + svr4*) + os=sysv4 ;; - -svr3) - os=-sysv3 + svr3) + os=sysv3 ;; - -sysvr4) - os=-sysv4 + sysvr4) + os=sysv4 ;; - # This must come after -sysvr4. - -sysv*) + # This must come after sysvr4. + sysv*) ;; - -ose*) - os=-ose + ose*) + os=ose ;; - -es1800*) - os=-ose + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint ;; - -xenix) - os=-xenix + zvmoe) + os=zvmoe ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint + dicos*) + os=dicos ;; - -aros*) - os=-aros + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $cpu in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac ;; - -zvmoe) - os=-zvmoe + nacl*) ;; - -dicos*) - os=-dicos + ios) ;; - -nacl*) + none) ;; - -ios) - ;; - -none) + *-eabi) ;; *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac @@ -1562,261 +1528,265 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + os=linux ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 + ;; + pru-*) + os=elf ;; *-be) - os=-beos - ;; - *-haiku) - os=-haiku + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs + os=luna ;; *-next) - os=-nextstep3 + os=nextstep + ;; + *-sequent) + os=ptx + ;; + *-crds) + os=unos + ;; + *-ns) + os=genix + ;; + i370-*) + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) +case $vendor in + unknown) case $os in - -riscix*) + riscix*) vendor=acorn ;; - -sunos*) + sunos*) vendor=sun ;; - -cnk*|-aix*) + cnk*|-aix*) vendor=ibm ;; - -beos*) + beos*) vendor=be ;; - -hpux*) + hpux*) vendor=hp ;; - -mpeix*) + mpeix*) vendor=hp ;; - -hiux*) + hiux*) vendor=hitachi ;; - -unos*) + unos*) vendor=crds ;; - -dgux*) + dgux*) vendor=dg ;; - -luna*) + luna*) vendor=omron ;; - -genix*) + genix*) vendor=ns ;; - -mvs* | -opened*) + clix*) + vendor=intergraph + ;; + mvs* | opened*) vendor=ibm ;; - -os400*) + os400*) vendor=ibm ;; - -ptx*) + ptx*) vendor=sequent ;; - -tpf*) + tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + vxsim* | vxworks* | windiss*) vendor=wrs ;; - -aux*) + aux*) vendor=apple ;; - -hms*) + hms*) vendor=hitachi ;; - -mpw* | -macos*) + mpw* | macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) vendor=atari ;; - -vos*) + vos*) vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$cpu-$vendor-$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/doc/Changelog b/doc/Changelog index 232bf40f3..324757cb0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +3 March 2020: George + - Upgrade config.guess(2020-01-01) and config.sub(2020-01-01). + 2 March 2020: Ralph - Fix #175, Merge PR #176: fix link error when OpenSSL is configured with no-engine, thanks noloader. From fc2d2459af580a228fdb4846f5061c60a45c29ce Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 3 Mar 2020 14:01:06 -0500 Subject: [PATCH 145/235] Avoid calling exit in Travis script The Travis docs state it should not be done. Blame Jeffrey Walton. Sorry about that. --- .travis.yml | 48 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5fe4735a5..41c4b0380 100644 --- a/.travis.yml +++ b/.travis.yml @@ -147,51 +147,41 @@ jobs: arch: amd64 name: Android x86_64, Linux, Amd64 +# The Travis docs say to avoid calling exit in the script. It leads to +# some code duplication to avoid failures in cross-compiles. Also see +# https://docs.travis-ci.com/user/job-lifecycle/ in the Travis docs. script: - | if [ "$TEST_UBSAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover" ./configure + make -j 2 + make test elif [ "$TEST_ASAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" ./configure + make -j 2 + make test elif [ "$TEST_ANDROID" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" - if ! ./contrib/android/install_ndk.sh ; then - echo "Failed to install Android SDK and NDK" - exit 1 - fi - if ! source ./contrib/android/setenv_android.sh "$ANDROID_CPU"; then - echo "Failed to set Android environment" - exit 1 - fi - if ! ./contrib/android/install_openssl.sh; then - echo "Failed to build and install OpenSSL" - exit 1 - fi - if ! ./contrib/android/install_expat.sh; then - echo "Failed to build and install Expat" - exit 1 - fi - if ! ./configure \ + ./contrib/android/install_ndk.sh + source ./contrib/android/setenv_android.sh "$ANDROID_CPU" + ./contrib/android/install_openssl.sh + ./contrib/android/install_expat.sh + ./configure \ --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ --prefix="$ANDROID_SYSROOT" \ --with-ssl="$ANDROID_SYSROOT" --disable-gost \ --with-libexpat="$ANDROID_SYSROOT"; - then - echo "Failed to configure Unbound" - exit 1 - fi - if ! make -j 2; then - echo "Failed to build Unbound" - exit 1 - fi - exit 0 + make -j 2 elif [ "$TRAVIS_OS_NAME" = "osx" ]; then ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/ + make -j 2 + make test + (cd testdata/clang-analysis.tdir; bash clang-analysis.test) else ./configure --enable-debug --disable-flto + make -j 2 + make test + (cd testdata/clang-analysis.tdir; bash clang-analysis.test) fi - if ! make -j 2; then exit 1; fi - if ! make test; then exit 1; fi - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) From a53c452f25a793abf86feb812f28001741983f91 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 3 Mar 2020 16:25:25 -0500 Subject: [PATCH 146/235] Test OpenSSL -pie changes See https://github.com/openssl/openssl/issues/11237 --- contrib/android/15-android.conf | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/contrib/android/15-android.conf b/contrib/android/15-android.conf index a4a840eb5..5e132e816 100644 --- a/contrib/android/15-android.conf +++ b/contrib/android/15-android.conf @@ -9,8 +9,6 @@ my $android_ndk = {}; my %triplet = ( arm => "arm-linux-androideabi", - armeabi => "arm-linux-androideabi", - armv7a => "arm-linux-androideabi", arm64 => "aarch64-linux-android", x86 => "i686-linux-android", x86_64 => "x86_64-linux-android" @@ -150,15 +148,12 @@ my %targets = ( "android" => { inherit_from => [ "linux-generic32" ], template => 1, - ################################################################ - # Special note about -pie. The underlying reason is that - # Lollipop refuses to run non-PIE. But what about older systems - # and NDKs? -fPIC was never problem, so the only concern is -pie. cflags => add(sub { android_ndk()->{cflags} }), cppflags => add(sub { android_ndk()->{cppflags} }), cxxflags => add(sub { android_ndk()->{cflags} }), bn_ops => sub { android_ndk()->{bn_ops} }, - bin_cflags => "-pie", + bin_cflags => "-fPIE", + bin_lflags => "-pie", enable => [ ], }, "android-arm" => { From 779d65208e622e247d6c49564f2fd398781041ae Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 4 Mar 2020 08:18:00 +0100 Subject: [PATCH 147/235] Changelog note for PR#180 . - Merge PR#180 from noloader: Avoid calling exit in Travis script. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 324757cb0..06144bd39 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +4 March 2020: Wouter + - Merge PR#180 from noloader: Avoid calling exit in Travis script. + 3 March 2020: George - Upgrade config.guess(2020-01-01) and config.sub(2020-01-01). From a1b2261b7b60a4b09958a5ed787096f9c5c5dc02 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 4 Mar 2020 10:24:47 +0100 Subject: [PATCH 148/235] - Merge PR #180 from noloader: Avoid calling exit in Travis script. --- doc/Changelog | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 06144bd39..a2e389445 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,8 @@ +4 March 2020: George + - Merge PR #181 from noloader: Fix OpenSSL -pie warning on Android. + 4 March 2020: Wouter - - Merge PR#180 from noloader: Avoid calling exit in Travis script. + - Merge PR #180 from noloader: Avoid calling exit in Travis script. 3 March 2020: George - Upgrade config.guess(2020-01-01) and config.sub(2020-01-01). From cd6bb00f2c525c8d87695a45f9a9e5ef7a29683c Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 4 Mar 2020 12:02:10 +0100 Subject: [PATCH 149/235] - Update README-Travis.md (from PR #179), by Jeffrey Walton. --- README-Travis.md | 95 ++++++++++++++++++++++++++---------------------- doc/Changelog | 3 ++ 2 files changed, 55 insertions(+), 43 deletions(-) diff --git a/README-Travis.md b/README-Travis.md index 631a4a45b..9e6818a35 100644 --- a/README-Travis.md +++ b/README-Travis.md @@ -1,8 +1,8 @@ # Travis Testing -Unbound 1.11 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware. +Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware. -Android is tested on armv7a, aarch64, x86 and x86_64. Mips and Mips64 is no longer supported under current NDKs. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Due to Android NDK directory structure, the switch from GCC to Clang, and the tool names, the script will only work with NDK-r19 and above. And in the future it will likely break when the Android NDK team changes the directory structure and tools again (it happens every 2 or 3 years). +Android is tested on armv7a, aarch64, x86 and x86_64. Mips and Mips64 is no longer supported under current NDKs. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys. @@ -60,7 +60,9 @@ elif [ "$TEST_ASAN" = "yes" ]; then ## Android builds -Android builds test compiles under armv7a, aarch64, x86 and x86_64. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The steps below detail the pieces of the Android recipes. +Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The steps below detail the pieces of the Android recipes. + +### ANDROID_NDK_ROOT The first step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks botch this step, and use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). @@ -71,9 +73,15 @@ export ANDROID_SDK_ROOT="$HOME/android-sdk" export ANDROID_NDK_ROOT="$HOME/android-ndk" ``` +### NDK installation + The second step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. -The third step sets the cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables set in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. +If you are working from a developer machine you probably already have a NDK and SDK installed. + +### Android environment + +The third step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. `contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. @@ -86,8 +94,8 @@ The third step sets the cross-compile environment using the script `contrib/andr env: - TEST_ANDROID=yes - AUTOTOOLS_HOST=aarch64-linux-android - - OPENSSL_CPU=arm64 - - ANDROID_CPU=arm64-v8a + - OPENSSL_HOST=android-arm64 + - ANDROID_CPU=aarch64 - ANDROID_API=23 ``` @@ -107,51 +115,52 @@ armv8a|aarch64|arm64|arm64-v8a) CXXFLAGS="-funwind-tables -fexceptions -frtti" ``` -Finally, once all the variables are set the Travis script cross-compiles OpenSSL and Expat, and then configures and builds Unbound. The recipe looks as follows. +### OpenSSL and Expat + +OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_SYSROOT"` so the output artifacts are placed in the sysroot `$ANDROID_SYSROOT/usr/lib` directory. (Also see *Developer Workstation* section below). + +OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound and with NDK-r19 and above. + +OpenSSL is configured with `no-engine`. If you want to include OpenSSL engines then edit `contrib/android/install_openssl.sh` and remove the config option. + +### Android build + +Once all the variables are set and OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. ``` elif [ "$TEST_ANDROID" = "yes" ]; then - # AUTOTOOLS_HOST is set in the job export AUTOTOOLS_BUILD="$(./config.guess)" - if ! ./contrib/android/install_ndk.sh ; then - echo "Failed to install Android SDK and NDK" - exit 1 - fi - if ! source ./contrib/android/setenv_android.sh "$ANDROID_CPU"; then - echo "Failed to set Android environment" - exit 1 - fi - if ! ./contrib/android/install_openssl.sh; then - echo "Failed to build and install OpenSSL" - exit 1 - fi - if ! ./contrib/android/install_expat.sh; then - echo "Failed to build and install Expat" - exit 1 - fi - if ! ./configure \ - --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ - --prefix="$ANDROID_SYSROOT" \ - --with-ssl="$ANDROID_SYSROOT" --disable-gost \ - --with-libexpat="$ANDROID_SYSROOT"; - then - echo "Failed to configure Unbound" - exit 1 - fi - if ! make -j 2; then - echo "Failed to build Unbound" - exit 1 - fi + ./contrib/android/install_ndk.sh + source ./contrib/android/setenv_android.sh "$ANDROID_CPU" + ./contrib/android/install_openssl.sh + ./contrib/android/install_expat.sh + ./configure \ + --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --prefix="$ANDROID_SYSROOT" \ + --with-ssl="$ANDROID_SYSROOT" --disable-gost \ + --with-libexpat="$ANDROID_SYSROOT"; + make -j 2 ``` -Unbound only smoke tests a build using a compile and link. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. +Travis only smoke tests an Android build using a compile and link. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. -Note the `--prefix="$ANDROID_SYSROOT"` used by OpenSSL, Expat and Unbound. This makes it easy to find libraries and headers because `CFLAGS` and `CXXFLAGS` already use `--sysroot="$ANDROID_SYSROOT"`. By performing a `make install` and installing into `$ANDROID_SYSROOT`, all the libraries needed by Unbound are present without extra flags or searching. +Note the `--prefix="$ANDROID_SYSROOT"` used by OpenSSL, Expat and Unbound. This is a hack that makes it easy to find libraries and headers because `CFLAGS` and `CXXFLAGS` already use `--sysroot="$ANDROID_SYSROOT"`. By performing a `make install` and installing into `$ANDROID_SYSROOT`, all the libraries needed by Unbound are present without extra flags or searching. (Also see *Developer Workstation* section below). -## Android flags +### Android flags -`contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. The flags are not arbitrary; they are taken from the `ndk-build` tool. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. +`contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. The flags are not arbitrary, and they are taken from the `ndk-build` tool. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. -`CXXFLAGS` includes `-fexceptions` because exceptions are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS—SUPPORT.html` in the NDK docs. +`CXXFLAGS` includes `-fexceptions` and `-frtti` because exceptions and runtime type info are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS—SUPPORT.html` in the NDK docs. -To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-samples](https://github.com/android/ndk-samples/tree/master/hello-jni) and build the `hello-jni` project. Use the `V=1` flag to see the full compiler output. +To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-samples](https://github.com/android/ndk-samples/tree/master/hello-jni) and build the `hello-jni` project. Use the `V=1` flag to see the full compiler output from `ndk-build`. + +### Developer workstation + +If you are setting up a developer workstation then `--prefix="$ANDROID_SYSROOT"` trick will not work. It will not work on a workstation because a previous install gets overwritten by the next install in `$ANDROID_SYSROOT/usr/lib`. In practice OpenSSL and Expat need to be installed in an architecture specific location. The sysroot-based locations are listed below. + +* `$ANDROID_SYSROOT/usr/lib/aarch64-linux-android/` +* `$ANDROID_SYSROOT/usr/lib/arm-linux-androideabi/` +* `$ANDROID_SYSROOT/usr/lib/i686-linux-android/` +* `$ANDROID_SYSROOT/usr/lib/x86_64-linux-android/` + +A second concern is the OpenSSL header files. At least two different defines are used in the OpenSSL headers based on the architecture. The first pair of defines are `RC4_CHAR` and `RC4_INT`. The second pair of defines are `SIXTY_FOUR_BIT_LONG` and `BN_LLONG`. As with libraries, a previous install gets overwritten by the next install in `$ANDROID_SYSROOT/usr/include`. To work around the problem see [Build Multiarch OpenSSL on OS X](https://stackoverflow.com/q/25530429) on Stack Overflow. Though it is a MacOS question, the same applies to Android in this situation. diff --git a/doc/Changelog b/doc/Changelog index a2e389445..ef6aa0aa9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +4 March 2020: Ralph + - Update README-Travis.md (from PR #179), by Jeffrey Walton. + 4 March 2020: George - Merge PR #181 from noloader: Fix OpenSSL -pie warning on Android. From 135fdd58396b1d7da07fa0659df87340a144cef5 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Wed, 4 Mar 2020 12:03:20 -0500 Subject: [PATCH 150/235] Add iOS testing to Travis --- .travis.yml | 76 +++++++++- README-Travis.md | 132 ++++++++++++++--- contrib/android/install_expat.sh | 8 +- contrib/android/install_ndk.sh | 4 - contrib/android/install_openssl.sh | 6 +- contrib/android/install_tools.sh | 6 + contrib/android/setenv_android.sh | 32 ++--- contrib/ios/15-ios.conf | 41 ++++++ contrib/ios/install_expat.sh | 56 ++++++++ contrib/ios/install_openssl.sh | 44 ++++++ contrib/ios/install_tools.sh | 7 + contrib/ios/setenv_ios.sh | 221 +++++++++++++++++++++++++++++ 12 files changed, 572 insertions(+), 61 deletions(-) create mode 100755 contrib/android/install_tools.sh create mode 100644 contrib/ios/15-ios.conf create mode 100755 contrib/ios/install_expat.sh create mode 100755 contrib/ios/install_openssl.sh create mode 100755 contrib/ios/install_tools.sh create mode 100755 contrib/ios/setenv_ios.sh diff --git a/.travis.yml b/.travis.yml index 41c4b0380..31df4f6ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,4 @@ language: c -sudo: false git: depth: 5 @@ -80,6 +79,48 @@ jobs: compiler: clang arch: s390x dist: bionic + - os: osx + osx_image: xcode10 + name: Apple iPhone, OS X, Amd64 + compiler: clang + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=armv7-apple-ios + - OPENSSL_HOST=ios-cross + - IOS_SDK=iPhoneOS + - IOS_CPU=armv7s + - IOS_PREFIX="$HOME/iPhoneOS-$IOS_CPU" + - os: osx + osx_image: xcode10 + name: Apple iPad, OS X, Amd64 + compiler: clang + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=aarch64-apple-ios + - OPENSSL_HOST=ios64-cross + - IOS_SDK=iPhoneOS + - IOS_CPU=arm64 + - IOS_PREFIX="$HOME/iPhoneOS-$IOS_CPU" + - os: osx + osx_image: xcode10 + name: Apple TV, OS X, Amd64 + compiler: clang + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=aarch64-apple-ios + - OPENSSL_HOST=ios64-cross + - IOS_SDK=AppleTVOS + - IOS_PREFIX="$HOME/AppleTVOS" + - os: osx + osx_image: xcode10 + name: Apple Watch, OS X, Amd64 + compiler: clang + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=armv7-apple-ios + - OPENSSL_HOST=ios-cross + - IOS_SDK=WatchOS + - IOS_PREFIX="$HOME/WatchOS" - os: linux name: Android armv7a, Linux, Amd64 compiler: clang @@ -91,6 +132,7 @@ jobs: - OPENSSL_HOST=android-arm - ANDROID_CPU=armv7a - ANDROID_API=23 + - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" - os: linux @@ -104,6 +146,7 @@ jobs: - OPENSSL_HOST=android-arm64 - ANDROID_CPU=aarch64 - ANDROID_API=23 + - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" - os: linux @@ -117,6 +160,7 @@ jobs: - OPENSSL_HOST=android-x86 - ANDROID_CPU=x86 - ANDROID_API=23 + - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" - os: linux @@ -130,10 +174,15 @@ jobs: - OPENSSL_HOST=android-x86_64 - ANDROID_CPU=x86_64 - ANDROID_API=23 + - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" allow_failures: + - os: osx + name: Apple TV, OS X, Amd64 + - os: osx + name: Apple Watch, OS X, Amd64 - os: linux arch: amd64 name: Android armv7a, Linux, Amd64 @@ -162,18 +211,35 @@ script: ./configure make -j 2 make test + elif [ "$TEST_IOS" = "yes" ]; then + export AUTOTOOLS_BUILD="$(./config.guess)" + export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" + source ./contrib/ios/setenv_ios.sh + ./contrib/ios/install_tools.sh + ./contrib/ios/install_openssl.sh + ./contrib/ios/install_expat.sh + ./configure \ + --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --prefix="$IOS_PREFIX" \ + --with-ssl="$IOS_PREFIX" --disable-gost \ + --with-libexpat="$IOS_PREFIX"; + make -j 2 + make install elif [ "$TEST_ANDROID" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" + export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh - source ./contrib/android/setenv_android.sh "$ANDROID_CPU" + source ./contrib/android/setenv_android.sh + ./contrib/android/install_tools.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ - --prefix="$ANDROID_SYSROOT" \ - --with-ssl="$ANDROID_SYSROOT" --disable-gost \ - --with-libexpat="$ANDROID_SYSROOT"; + --prefix="$ANDROID_PREFIX" \ + --with-ssl="$ANDROID_PREFIX" --disable-gost \ + --with-libexpat="$ANDROID_PREFIX"; make -j 2 + make install elif [ "$TRAVIS_OS_NAME" = "osx" ]; then ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/ make -j 2 diff --git a/README-Travis.md b/README-Travis.md index 9e6818a35..8f3a906bf 100644 --- a/README-Travis.md +++ b/README-Travis.md @@ -1,8 +1,10 @@ # Travis Testing -Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware. +Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, iOS, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware. -Android is tested on armv7a, aarch64, x86 and x86_64. Mips and Mips64 is no longer supported under current NDKs. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. +Android is tested on armv7a, aarch64, x86 and x86_64. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Mips and Mips64 are not tested because they are no longer supported under current NDKs. + +iOS is tested for iPhoneOS, WatchOS and AppleTVOS. The testing uses Xcode 10.0 on OS X 10.13. The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys. @@ -52,15 +54,19 @@ When the Travis script encounters a sanitizer it uses different `CFLAGS` and con if [ "$TEST_UBSAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover" ./configure + make -j 2 + make test elif [ "$TEST_ASAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" ./configure + make -j 2 + make test ... ``` ## Android builds -Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The steps below detail the pieces of the Android recipes. +Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the Android recipes. ### ANDROID_NDK_ROOT @@ -115,52 +121,136 @@ armv8a|aarch64|arm64|arm64-v8a) CXXFLAGS="-funwind-tables -fexceptions -frtti" ``` +### Tool installation + +The fourth step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java. + +If you are working from a developer machine you probably already have the necessary tools installed. + ### OpenSSL and Expat -OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_SYSROOT"` so the output artifacts are placed in the sysroot `$ANDROID_SYSROOT/usr/lib` directory. (Also see *Developer Workstation* section below). +The fifth step builds OpenSSL and Expat. OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_PREFIX"` so the headers are placed in `$ANDROID_PREFIX/include` directory, and the libraries are placed in the `$ANDROID_PREFIX/lib` directory. -OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound and with NDK-r19 and above. +`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. A typical `PKG_CONFIG_PATH` is `$HOME/android23-armv7a/lib/pkgconfig`. + +OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound, with NDK-r19 and above, and a properly set environment. OpenSSL is configured with `no-engine`. If you want to include OpenSSL engines then edit `contrib/android/install_openssl.sh` and remove the config option. ### Android build -Once all the variables are set and OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. +Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. ``` elif [ "$TEST_ANDROID" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" + export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh - source ./contrib/android/setenv_android.sh "$ANDROID_CPU" + source ./contrib/android/setenv_android.sh + ./contrib/android/install_tools.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ - --prefix="$ANDROID_SYSROOT" \ - --with-ssl="$ANDROID_SYSROOT" --disable-gost \ - --with-libexpat="$ANDROID_SYSROOT"; + --prefix="$ANDROID_PREFIX" \ + --with-ssl="$ANDROID_PREFIX" --disable-gost \ + --with-libexpat="$ANDROID_PREFIX"; make -j 2 + make install ``` Travis only smoke tests an Android build using a compile and link. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. -Note the `--prefix="$ANDROID_SYSROOT"` used by OpenSSL, Expat and Unbound. This is a hack that makes it easy to find libraries and headers because `CFLAGS` and `CXXFLAGS` already use `--sysroot="$ANDROID_SYSROOT"`. By performing a `make install` and installing into `$ANDROID_SYSROOT`, all the libraries needed by Unbound are present without extra flags or searching. (Also see *Developer Workstation* section below). - ### Android flags -`contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. The flags are not arbitrary, and they are taken from the `ndk-build` tool. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. +`contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. They are taken from `ndk-build`, so we consider them the official flag set. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. -`CXXFLAGS` includes `-fexceptions` and `-frtti` because exceptions and runtime type info are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS—SUPPORT.html` in the NDK docs. +`CXXFLAGS` includes `-fexceptions` and `-frtti` because exceptions and runtime type info are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS-SUPPORT.html` in the NDK docs. To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-samples](https://github.com/android/ndk-samples/tree/master/hello-jni) and build the `hello-jni` project. Use the `V=1` flag to see the full compiler output from `ndk-build`. -### Developer workstation +## iOS builds -If you are setting up a developer workstation then `--prefix="$ANDROID_SYSROOT"` trick will not work. It will not work on a workstation because a previous install gets overwritten by the next install in `$ANDROID_SYSROOT/usr/lib`. In practice OpenSSL and Expat need to be installed in an architecture specific location. The sysroot-based locations are listed below. +Travis tests iOS builds for the armv7a. armv7s and aarch64 architectures for iPhoneOS, iPhoneOS, AppleTV and WatchOS.iPhone OS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. -* `$ANDROID_SYSROOT/usr/lib/aarch64-linux-android/` -* `$ANDROID_SYSROOT/usr/lib/arm-linux-androideabi/` -* `$ANDROID_SYSROOT/usr/lib/i686-linux-android/` -* `$ANDROID_SYSROOT/usr/lib/x86_64-linux-android/` +### iOS environment -A second concern is the OpenSSL header files. At least two different defines are used in the OpenSSL headers based on the architecture. The first pair of defines are `RC4_CHAR` and `RC4_INT`. The second pair of defines are `SIXTY_FOUR_BIT_LONG` and `BN_LLONG`. As with libraries, a previous install gets overwritten by the next install in `$ANDROID_SYSROOT/usr/include`. To work around the problem see [Build Multiarch OpenSSL on OS X](https://stackoverflow.com/q/25530429) on Stack Overflow. Though it is a MacOS question, the same applies to Android in this situation. +The first step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`. + +`contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. + +``` +os: osx +osx_image: xcode10 +name: Apple iPhone, OS X, Amd64 +compiler: clang +env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=armv7-apple-ios + - OPENSSL_HOST=ios-cross + - IOS_SDK=iPhoneOS + - IOS_CPU=armv7s +``` + +The `contrib/ios/setenv_ios.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. + +``` +iphone|iphoneos) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default armv7. Also allowed armv7a, armv7s, arm64 + if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi + + CFLAGS="-arch $IOS_CPU -mios-version-min=6" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=6" +``` + +### Tool installation + +The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. + +If you are working from a developer machine you probably already have the necessary tools installed. + +### OpenSSL and Expat + +The third step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. + +`IOS_PREFIX` is the value `$HOME/iPhoneOS-$IOS_CPU`, `$HOME/AppleTVOS` or `$HOME/WatchOS`. So the libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. A typical `PKG_CONFIG_PATH` is `$HOME/iPhoneOS-armv7s/lib/pkgconfig`. + +OpenSSL also uses a custom configuration file called `15-ios.conf`. It is a copy of the OpenSSL's project file and located at `contrib/ios/15-ios.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The changes mean Unbound's `15-ios.conf` will only work with Unbound and a properly set environment. + +OpenSSL is configured with `no-engine`. Engines require dynamic loading so engines are disabled permanently in the script. + +### iOS build + +Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. + +``` +elif [ "$TEST_IOS" = "yes" ]; then + export AUTOTOOLS_BUILD="$(./config.guess)" + export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" + source ./contrib/ios/setenv_ios.sh + ./contrib/ios/install_tools.sh + ./contrib/ios/install_openssl.sh + ./contrib/ios/install_expat.sh + ./configure \ + --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --prefix="$IOS_PREFIX" \ + --with-ssl="$IOS_PREFIX" --disable-gost \ + --with-libexpat="$IOS_PREFIX"; + make -j 2 + make install +``` + +Travis only smoke tests an iOS build using a compile and link. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them. + +### iOS flags + +`contrib/ios/setenv_ios.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. They are taken from Xcode, so we consider them the official flag set. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. diff --git a/contrib/android/install_expat.sh b/contrib/android/install_expat.sh index fa6575973..ffb22322c 100755 --- a/contrib/android/install_expat.sh +++ b/contrib/android/install_expat.sh @@ -1,9 +1,5 @@ #!/usr/bin/env bash -# install android deps -sudo apt-get -qq update -sudo apt-get -qq install --no-install-recommends curl tar - echo "Downloading Expat" if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz; then @@ -22,13 +18,13 @@ fi cd expat-2.2.9 || exit 1 echo "Configuring Expat" -if ! ./configure --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" --prefix="$ANDROID_SYSROOT"; then +if ! ./configure --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" --prefix="$ANDROID_PREFIX"; then echo "Error: Failed to configure Expat" exit 1 fi # Cleanup warnings, https://github.com/libexpat/libexpat/issues/383 -echo "Fixing Makefiles..." +echo "Fixing Makefiles" (IFS="" find "$PWD" -name 'Makefile' -print | while read -r file do cp -p "$file" "$file.fixed" diff --git a/contrib/android/install_ndk.sh b/contrib/android/install_ndk.sh index 5a16f78a7..6e07b5d6c 100755 --- a/contrib/android/install_ndk.sh +++ b/contrib/android/install_ndk.sh @@ -1,9 +1,5 @@ #!/usr/bin/env bash -# install android deps -sudo apt-get -qq update -sudo apt-get -qq install --no-install-recommends curl openjdk-8-jdk zip unzip - if [ -z "$ANDROID_SDK_ROOT" ]; then echo "ERROR: ANDROID_SDK_ROOT is not a valid path. Please set it." echo "SDK root is $ANDROID_SDK_ROOT" diff --git a/contrib/android/install_openssl.sh b/contrib/android/install_openssl.sh index 58a00d21a..5a6ff13e5 100755 --- a/contrib/android/install_openssl.sh +++ b/contrib/android/install_openssl.sh @@ -1,9 +1,5 @@ #!/usr/bin/env bash -# install android deps -sudo apt-get -qq update -sudo apt-get -qq install --no-install-recommends curl tar perl - echo "Downloading OpenSSL" if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz; then @@ -28,7 +24,7 @@ fi echo "Configuring OpenSSL" if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine shared \ - "$CFLAGS" --prefix="$ANDROID_SYSROOT" --openssldir="$ANDROID_SYSROOT"; then + "$CFLAGS" --prefix="$ANDROID_PREFIX" --openssldir="$ANDROID_PREFIX"; then echo "Failed to configure OpenSSL" exit 1 fi diff --git a/contrib/android/install_tools.sh b/contrib/android/install_tools.sh new file mode 100755 index 000000000..6bf2a7eba --- /dev/null +++ b/contrib/android/install_tools.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# This step should install tools needed for all packages - OpenSSL, Expat and Unbound +echo "Updating tools" +sudo apt-get -qq update +sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkgconfig diff --git a/contrib/android/setenv_android.sh b/contrib/android/setenv_android.sh index 915753ee0..d87a8f3e3 100755 --- a/contrib/android/setenv_android.sh +++ b/contrib/android/setenv_android.sh @@ -48,14 +48,10 @@ fi ##################################################################### -if [ "$#" -lt 1 ]; then - AOSP_ARCH=armeabi-v7a -else - AOSP_ARCH=$(tr '[:upper:]' '[:upper:]' <<< "$1") -fi +AOSP_CPU=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU") # https://developer.android.com/ndk/guides/abis.html -case "$AOSP_ARCH" in +case "$AOSP_CPU" in armeabi|armv7a|armv7-a|armeabi-v7a) CC="armv7a-linux-androideabi$ANDROID_API-clang" CXX="armv7a-linux-androideabi$ANDROID_API-clang++" @@ -109,7 +105,7 @@ case "$AOSP_ARCH" in ;; *) - echo "ERROR: Unknown architecture $1" + echo "ERROR: Unknown architecture $ANDROID_CPU" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 ;; @@ -155,14 +151,10 @@ fi ##################################################################### -# Only modify/export PATH if AOSP_TOOLCHAIN_PATH good -if [ -d "$AOSP_TOOLCHAIN_PATH" ]; then - # And only modify PATH if AOSP_TOOLCHAIN_PATH is not present - LEN=${#AOSP_TOOLCHAIN_PATH} - SUBSTR=${PATH:0:$LEN} - if [ "$SUBSTR" != "$AOSP_TOOLCHAIN_PATH" ]; then - export PATH="$AOSP_TOOLCHAIN_PATH:$PATH" - fi +LENGTH=${#AOSP_TOOLCHAIN_PATH} +SUBSTR=${PATH:0:$LENGTH} +if [ "$SUBSTR" != "$AOSP_TOOLCHAIN_PATH" ]; then + export PATH="$AOSP_TOOLCHAIN_PATH:$PATH" fi ##################################################################### @@ -176,11 +168,11 @@ export CXXFLAGS="-D__ANDROID_API__=$ANDROID_API $CXXFLAGS --sysroot=$AOSP_SYSROO echo "AOSP_TOOLCHAIN_PATH: $AOSP_TOOLCHAIN_PATH" -echo "CC: $CC" -echo "CXX: $CXX" -echo "LD: $LD" -echo "AS: $AS" -echo "AR: $AR" +echo "CC: $(command -v "$CC")" +echo "CXX: $(command -v "$CXX")" +echo "LD: $(command -v "$LD")" +echo "AS: $(command -v "$AS")" +echo "AR: $(command -v "$AR")" echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" diff --git a/contrib/ios/15-ios.conf b/contrib/ios/15-ios.conf new file mode 100644 index 000000000..b611210fe --- /dev/null +++ b/contrib/ios/15-ios.conf @@ -0,0 +1,41 @@ +#### iPhoneOS/iOS +# +# It takes recent enough Xcode to use following two targets. It shouldn't +# be a problem by now, but if they don't work, original targets below +# that depend on manual definition of environment variables should still +# work... +# +my %targets = ( + "ios-common" => { + template => 1, + inherit_from => [ "darwin-common" ], + sys_id => "iOS", + disable => [ "engine", "async" ], + }, + "ios-xcrun" => { + inherit_from => [ "ios-common", asm("armv4_asm") ], + perlasm_scheme => "ios32", + }, + "ios64-xcrun" => { + inherit_from => [ "ios-common", asm("aarch64_asm") ], + #bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", + perlasm_scheme => "ios64", + }, + "iossimulator-xcrun" => { + inherit_from => [ "ios-common" ], + }, + + "iphoneos-cross" => { + inherit_from => [ "ios-common" ], + cflags => add("-Wall -fno-common"), + }, + "ios-cross" => { + inherit_from => [ "ios-xcrun" ], + cflags => add("-Wall -fno-common"), + }, + "ios64-cross" => { + inherit_from => [ "ios64-xcrun" ], + cppflags => add("-DSIXTY_FOUR_BIT_LONG -DRC4_CHAR"), + cflags => add("-Wall -fno-common"), + }, +); diff --git a/contrib/ios/install_expat.sh b/contrib/ios/install_expat.sh new file mode 100755 index 000000000..9471b5aff --- /dev/null +++ b/contrib/ios/install_expat.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +echo "Downloading Expat" +if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz; +then + echo "Failed to download Expat" + exit 1 +fi + +echo "Unpacking Expat" +rm -rf ./expat-2.2.9 +if ! tar -xf expat-2.2.9.tar.gz; +then + echo "Failed to unpack Expat" + exit 1 +fi + +cd expat-2.2.9 || exit 1 + +export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" + +echo "Configuring Expat" +if ! ./configure \ + --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --prefix="$IOS_PREFIX" ; then + echo "Error: Failed to configure Expat" + cat config.log + exit 1 +fi + +# Cleanup warnings, https://github.com/libexpat/libexpat/issues/383 +echo "Fixing Makefiles" +(IFS="" find "$PWD" -name 'Makefile' -print | while read -r file +do + cp -p "$file" "$file.fixed" + sed 's|-Wduplicated-cond ||g; s|-Wduplicated-branches ||g; s|-Wlogical-op ||g' "$file" > "$file.fixed" + mv "$file.fixed" "$file" + + cp -p "$file" "$file.fixed" + sed 's|-Wrestrict ||g; s|-Wjump-misses-init ||g; s|-Wmisleading-indentation ||g' "$file" > "$file.fixed" + mv "$file.fixed" "$file" +done) + +echo "Building Expat" +if ! make; then + echo "Failed to build Expat" + exit 1 +fi + +echo "Installing Expat" +if ! make install; then + echo "Failed to install Expat" + exit 1 +fi + +exit 0 diff --git a/contrib/ios/install_openssl.sh b/contrib/ios/install_openssl.sh new file mode 100755 index 000000000..3ca41269b --- /dev/null +++ b/contrib/ios/install_openssl.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +echo "Downloading OpenSSL" +if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz; +then + echo "Failed to download OpenSSL" + exit 1 +fi + +echo "Unpacking OpenSSL" +rm -rf ./openssl-1.1.1d +if ! tar -xf openssl-1.1.1d.tar.gz; +then + echo "Failed to unpack OpenSSL" + exit 1 +fi + +cd openssl-1.1.1d || exit 1 + +if ! cp ../contrib/ios/15-ios.conf Configurations/; then + echo "Failed to copy OpenSSL ios config" + exit 1 +fi + +echo "Configuring OpenSSL" +if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine \ + "$CFLAGS" --prefix="$IOS_PREFIX" --openssldir="$IOS_PREFIX"; then + echo "Failed to configure OpenSSL" + exit 1 +fi + +echo "Building OpenSSL" +if ! make; then + echo "Failed to build OpenSSL" + exit 1 +fi + +echo "Installing OpenSSL" +if ! make install_sw; then + echo "Failed to install OpenSSL" + exit 1 +fi + +exit 0 diff --git a/contrib/ios/install_tools.sh b/contrib/ios/install_tools.sh new file mode 100755 index 000000000..af633b758 --- /dev/null +++ b/contrib/ios/install_tools.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# This step should install tools needed for all packages - OpenSSL, Expat and Unbound +echo "Updating tools" +brew update 1>/dev/null +echo "Installing tools" +brew install autoconf automake libtool pkgconfig curl perl 1>/dev/null diff --git a/contrib/ios/setenv_ios.sh b/contrib/ios/setenv_ios.sh new file mode 100755 index 000000000..f03c1db3a --- /dev/null +++ b/contrib/ios/setenv_ios.sh @@ -0,0 +1,221 @@ +#!/usr/bin/env bash + +##################################################################### + +# Allow a user override? I think we should be doing this. The use case is: +# move /Applications/Xcode somewhere else for a side-by-side installation. +if [ -z "${XCODE_DEVELOPER-}" ]; then + XCODE_DEVELOPER=$(xcode-select -print-path 2>/dev/null) +fi + +if [ ! -d "$XCODE_DEVELOPER" ]; then + echo "ERROR: unable to find XCODE_DEVELOPER directory." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Default toolchain location +XCODE_TOOLCHAIN="$XCODE_DEVELOPER/usr/bin" + +if [ ! -d "$XCODE_TOOLCHAIN" ]; then + echo "ERROR: unable to find XCODE_TOOLCHAIN directory." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# XCODE_DEVELOPER_TOP is the top of the development tools tree +XCODE_DEVELOPER_TOP="$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform/Developer" + +if [ ! -d "$XCODE_DEVELOPER_TOP" ]; then + echo "ERROR: unable to find XCODE_DEVELOPER_TOP directory." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# IOS_TOOLCHAIN_PATH is the location of the actual compiler tools. +if [ -d "$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" ]; then + IOS_TOOLCHAIN_PATH="$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" +elif [ -d "$XCODE_DEVELOPER_TOP/usr/bin/" ]; then + IOS_TOOLCHAIN_PATH="$XCODE_DEVELOPER_TOP/usr/bin/" +fi + +if [ -z "$IOS_TOOLCHAIN_PATH" ] || [ ! -d "$IOS_TOOLCHAIN_PATH" ]; then + echo "ERROR: unable to find Xcode cross-compiler tools." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +##################################################################### + +# XCODE_SDK is the SDK name/version being used. Adjust the list as appropriate. +# For example, remove 4.3, 6.2, and 6.1 if they are not installed. We go back to +# the 1.0 SDKs because Apple WatchOS uses low numbers, like 2.0 and 2.1. +unset XCODE_SDK +for i in $(seq -f "%.1f" 30.0 -0.1 1.0) +do + if [ -d "$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform/Developer/SDKs/$IOS_SDK$i.sdk" ]; then + XCODE_SDK="$IOS_SDK$i.sdk" + break + fi +done + +# Error checking +if [ -z "$XCODE_SDK" ]; then + echo "ERROR: unable to find a SDK." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +IOS_SYSROOT="$XCODE_DEVELOPER_TOP/SDKs/$XCODE_SDK" + +if [ -z "$IOS_SYSROOT" ] || [ ! -d "$IOS_SYSROOT" ]; then + echo "ERROR: unable to find IOS_SYSROOT directory." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +##################################################################### + +XCODE_SDK=$(tr '[:upper:]' '[:lower:]' <<< "$IOS_SDK") + +case "$XCODE_SDK" in + iphone|iphoneos) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default armv7. Also allowed armv7a, armv7s, arm64 + if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi + + if [ "$IOS_CPU" = "arm64" ]; then + CFLAGS="-arch $IOS_CPU -mios-version-min=7" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=7" + else + CFLAGS="-arch $IOS_CPU -mios-version-min=6" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=6" + fi + ;; + + iphonesimulator) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default i386. + if [ -z "$IOS_CPU" ]; then IOS_CPU=i386; fi + + CFLAGS="-arch $IOS_CPU -mios-version-min=5" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=5" + ;; + + watch|watchos|applewatch) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default armv7. Also allowed armv7a, armv7s + if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi + + CFLAGS="-arch $IOS_CPU -mios-version-min=7" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=7" + ;; + + watchsimulator|watchossimulator) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default i386. + if [ -z "$IOS_CPU" ]; then IOS_CPU=i386; fi + + CFLAGS="-arch $IOS_CPU" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++" + ;; + + appletv|appletvos) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default arm64. + if [ -z "$IOS_CPU" ]; then IOS_CPU=arm64; fi + + CFLAGS="-arch $IOS_CPU" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++" + ;; + + appletvsimulator|appletvossimulator) + CPP="cpp" + CC="clang" + CXX="clang++" + LD="ld" + AS="as" + AR="ar" + RANLIB="ranlib" + STRIP="strip" + + # Default x86_64, + if [ -z "$IOS_CPU" ]; then IOS_CPU=x86_64; fi + + CFLAGS="-arch $IOS_CPU" + CXXFLAGS="-arch $IOS_CPU -stdlib=libc++" + ;; + + *) + echo "ERROR: Unknown architecture $IOS_SDK" + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 + ;; + +esac + +##################################################################### + +TOOLCHAIN_PATH="$IOS_TOOLCHAIN_PATH:$XCODE_TOOLCHAIN" +LENGTH=${#TOOLCHAIN_PATH} +SUBSTR=${PATH:0:$LENGTH} +if [ "$SUBSTR" != "$TOOLCHAIN_PATH" ]; then + export PATH="$TOOLCHAIN_PATH":"$PATH" +fi + +##################################################################### + +export CPP CC CXX LD AS AR RANLIB STRIP +export IOS_SYSROOT +export CFLAGS="$CFLAGS --sysroot=$IOS_SYSROOT" +export CXXFLAGS="$CXXFLAGS --sysroot=$IOS_SYSROOT" + +##################################################################### + +echo "IOS_TOOLCHAIN_PATH: $IOS_TOOLCHAIN_PATH" + +echo "CC: $(command -v "$CC")" +echo "CXX: $(command -v "$CXX")" +echo "LD: $(command -v "$LD")" +echo "AS: $(command -v "$AS")" +echo "AR: $(command -v "$AR")" + +echo "IOS_SYSROOT: $IOS_SYSROOT" + +echo "CFLAGS: $CFLAGS" +echo "CXXFLAGS: $CXXFLAGS" + +[ "$0" = "${BASH_SOURCE[0]}" ] && exit 0 || return 0 From b8540e1e70b75b9d8edc9438711ab2a49c22d97c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 5 Mar 2020 17:02:20 +0100 Subject: [PATCH 151/235] Changelog note for #184. - Fix PR #184 from noloader: Add iOS testing to Travis. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ef6aa0aa9..f865f0944 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +5 March 2020: Wouter + - Fix PR #184 from noloader: Add iOS testing to Travis. + 4 March 2020: Ralph - Update README-Travis.md (from PR #179), by Jeffrey Walton. From 93c92eeabb409da463ecaf6d76b0bf1abcd27631 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 5 Mar 2020 17:03:28 +0100 Subject: [PATCH 152/235] Fix changelog note, it is #182, not #184. --- doc/Changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index f865f0944..b34377c4e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,5 @@ 5 March 2020: Wouter - - Fix PR #184 from noloader: Add iOS testing to Travis. + - Fix PR #182 from noloader: Add iOS testing to Travis. 4 March 2020: Ralph - Update README-Travis.md (from PR #179), by Jeffrey Walton. From 171740222c9d0a3e296f1b227d5e039ed725d538 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 5 Mar 2020 14:53:08 -0500 Subject: [PATCH 153/235] Fix unrecognized 'echo -n' option on OS X Also see https://github.com/NLnetLabs/unbound/issues/183. This PR also updates a few typos in README-Travis.md, and expands the discussion of PKG_CONFIG_PATH for those who are not familiar with it. --- Makefile.in | 2 +- README-Travis.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile.in b/Makefile.in index 4373dd66a..51a13836b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -320,7 +320,7 @@ longcheck: longtest test: unittest$(EXEEXT) testbound$(EXEEXT) ./unittest$(EXEEXT) ./testbound$(EXEEXT) -s - for x in $(srcdir)/testdata/*.rpl; do echo -n "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done + for x in $(srcdir)/testdata/*.rpl; do printf "%s" "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done @echo test OK longtest: tests diff --git a/README-Travis.md b/README-Travis.md index 8f3a906bf..fc4b505e4 100644 --- a/README-Travis.md +++ b/README-Travis.md @@ -131,7 +131,7 @@ If you are working from a developer machine you probably already have the necess The fifth step builds OpenSSL and Expat. OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_PREFIX"` so the headers are placed in `$ANDROID_PREFIX/include` directory, and the libraries are placed in the `$ANDROID_PREFIX/lib` directory. -`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. A typical `PKG_CONFIG_PATH` is `$HOME/android23-armv7a/lib/pkgconfig`. +`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system library's headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound, with NDK-r19 and above, and a properly set environment. @@ -171,7 +171,7 @@ To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-sample ## iOS builds -Travis tests iOS builds for the armv7a. armv7s and aarch64 architectures for iPhoneOS, iPhoneOS, AppleTV and WatchOS.iPhone OS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. +Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. ### iOS environment @@ -222,11 +222,11 @@ If you are working from a developer machine you probably already have the necess The third step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. -`IOS_PREFIX` is the value `$HOME/iPhoneOS-$IOS_CPU`, `$HOME/AppleTVOS` or `$HOME/WatchOS`. So the libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. A typical `PKG_CONFIG_PATH` is `$HOME/iPhoneOS-armv7s/lib/pkgconfig`. +`IOS_PREFIX` is the value `$HOME/iPhoneOS-$IOS_CPU`, `$HOME/AppleTVOS` or `$HOME/WatchOS`. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system library's headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-ios.conf`. It is a copy of the OpenSSL's project file and located at `contrib/ios/15-ios.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The changes mean Unbound's `15-ios.conf` will only work with Unbound and a properly set environment. -OpenSSL is configured with `no-engine`. Engines require dynamic loading so engines are disabled permanently in the script. +OpenSSL is configured with `no-engine`. Engines require dynamic loading so engines are disabled permanently in `15-ios.conf`. ### iOS build From 730aa097f8eec6ab8f3f036256a311d9911221d2 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 6 Mar 2020 11:59:13 +0100 Subject: [PATCH 154/235] - Changelog note for PR #186: Fix unrecognized 'echo -n' option on OS X, by noloader. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index b34377c4e..1a339494c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +6 March 2020: George + - Merge PR #186, fix #183: Fix unrecognized 'echo -n' option on OS X, by + noloader + 5 March 2020: Wouter - Fix PR #182 from noloader: Add iOS testing to Travis. From 6ab0db6e25b53584b8938f7b71f54780601305ad Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Wed, 11 Mar 2020 03:35:28 -0400 Subject: [PATCH 155/235] Fix NetBSD compile (GH #189) --- util/mini_event.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util/mini_event.h b/util/mini_event.h index 204894d97..1734ca574 100644 --- a/util/mini_event.h +++ b/util/mini_event.h @@ -54,6 +54,8 @@ #if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK) +#include + #ifndef HAVE_EVENT_BASE_FREE #define HAVE_EVENT_BASE_FREE #endif From 39c18add575f8f116be17575fcb35717a0c932a6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 11 Mar 2020 08:39:48 +0100 Subject: [PATCH 156/235] Fix #188: unbound-control.c:882:6: error: 'execlp' is unavailable: not available on tvOS --- configure.ac | 3 +++ smallapp/unbound-control.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/configure.ac b/configure.ac index 14b144b7f..0b92480eb 100644 --- a/configure.ac +++ b/configure.ac @@ -399,6 +399,9 @@ PKG_PROG_PKG_CONFIG # Checks for header files. AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h],,, [AC_INCLUDES_DEFAULT]) +# Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH +AC_CHECK_HEADERS([TargetConditionals.h]) + # check for types. # Using own tests for int64* because autoconf builtin only give 32bit. AC_CHECK_TYPE(int8_t, signed char) diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 4843a9b31..ce13ad392 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -74,6 +74,10 @@ #include #endif +#ifdef HAVE_TARGETCONDITIONAL_H +#include +#endif + static void usage(void) ATTR_NORETURN; static void ssl_err(const char* s) ATTR_NORETURN; static void ssl_path_err(const char* s, const char *path) ATTR_NORETURN; @@ -879,11 +883,16 @@ int main(int argc, char* argv[]) if(argc == 0) usage(); if(argc >= 1 && strcmp(argv[0], "start")==0) { +#if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH) + fatal_exit("could not exec unbound: %s", + strerror(ENOSYS)); +#else if(execlp("unbound", "unbound", "-c", cfgfile, (char*)NULL) < 0) { fatal_exit("could not exec unbound: %s", strerror(errno)); } +#endif } if(argc >= 1 && strcmp(argv[0], "stats_shm")==0) { print_stats_shm(cfgfile); From 50bc60458650f4e26df0668ae9141135b9eb351b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 11 Mar 2020 08:41:56 +0100 Subject: [PATCH 157/235] Changelog for #188 and configure script created. Removed unneeded whitespace. --- config.h.in | 3 +++ configure | 38 ++++++++++++++++++++------------------ configure.ac | 2 +- doc/Changelog | 4 ++++ 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/config.h.in b/config.h.in index 11332b82f..daad19726 100644 --- a/config.h.in +++ b/config.h.in @@ -593,6 +593,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_TARGETCONDITIONALS_H + /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H diff --git a/configure b/configure index bc414a67a..cabfd55e1 100755 --- a/configure +++ b/configure @@ -804,7 +804,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -951,7 +950,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1204,15 +1202,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1350,7 +1339,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1503,7 +1492,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -14740,6 +14728,20 @@ fi done +# Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH +for ac_header in TargetConditionals.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "TargetConditionals.h" "ac_cv_header_TargetConditionals_h" "$ac_includes_default" +if test "x$ac_cv_header_TargetConditionals_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TARGETCONDITIONALS_H 1 +_ACEOF + +fi + +done + + # check for types. # Using own tests for int64* because autoconf builtin only give 32bit. ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" @@ -15660,7 +15662,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15706,7 +15708,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15730,7 +15732,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15775,7 +15777,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15799,7 +15801,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; diff --git a/configure.ac b/configure.ac index 0b92480eb..aa2eb47e1 100644 --- a/configure.ac +++ b/configure.ac @@ -399,7 +399,7 @@ PKG_PROG_PKG_CONFIG # Checks for header files. AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h],,, [AC_INCLUDES_DEFAULT]) -# Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH +# Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH AC_CHECK_HEADERS([TargetConditionals.h]) # check for types. diff --git a/doc/Changelog b/doc/Changelog index 1a339494c..c9b5de932 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +11 March 2020: Wouter + - Fix #188: unbound-control.c:882:6: error: 'execlp' is + unavailable: not available on tvOS. + 6 March 2020: George - Merge PR #186, fix #183: Fix unrecognized 'echo -n' option on OS X, by noloader From 67b4ab2c9011d9a209c87b27565596740be8de0a Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 11 Mar 2020 11:50:38 +0100 Subject: [PATCH 158/235] - Changelog entry for (Fix #189, Merge PR #190). --- doc/Changelog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index c9b5de932..f6e1ce1b3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +11 March 2020: George + - Fix #189: mini_event.h:142:17: error: field 'ev_timeout' has incomplete + type, by noloader. + - Changelog entry for (Fix #189, Merge PR #190). + 11 March 2020: Wouter - Fix #188: unbound-control.c:882:6: error: 'execlp' is unavailable: not available on tvOS. From 28e6c86e618985a9359da4af77370b9dad3295ae Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 11 Mar 2020 17:37:50 +0100 Subject: [PATCH 159/235] - Add check to make sure RPZ records are subdomain of configured zone origin. --- doc/Changelog | 4 ++++ services/authzone.c | 6 +++--- services/rpz.c | 14 +++++++++++--- services/rpz.h | 3 ++- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index f6e1ce1b3..becded77e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +11 March 2020: Ralph + - Add check to make sure RPZ records are subdomains of configured + zone origin. + 11 March 2020: George - Fix #189: mini_event.h:142:17: error: field 'ev_timeout' has incomplete type, by noloader. diff --git a/services/authzone.c b/services/authzone.c index 34170abaf..c5803757a 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1178,9 +1178,9 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, return 0; } if(z->rpz) { - if(!(rpz_insert_rr(z->rpz, z->namelen, dname, dname_len, - rr_type, rr_class, rr_ttl, rdata, rdatalen, rr, - rr_len))) + if(!(rpz_insert_rr(z->rpz, z->name, z->namelen, dname, + dname_len, rr_type, rr_class, rr_ttl, rdata, rdatalen, + rr, rr_len))) return 0; } return 1; diff --git a/services/rpz.c b/services/rpz.c index 643b20c91..efb7ad5a8 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -586,7 +586,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, } int -rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, +rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len) { @@ -596,9 +596,17 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, enum rpz_action a; uint8_t* policydname; - log_assert(dnamelen >= aznamelen); - if(!(policydname = calloc(1, (dnamelen-aznamelen)+1))) + if(!dname_subdomain_c(dname, azname)) { + log_err("RPZ: name of record to insert into RPZ is not a " + "subdomain of the configured name of the RPZ zone"); return 0; + } + + log_assert(dnamelen >= aznamelen); + if(!(policydname = calloc(1, (dnamelen-aznamelen)+1))) { + log_err("malloc error while inserting RPZ RR"); + return 0; + } a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, diff --git a/services/rpz.h b/services/rpz.h index 676a4f2a8..a404350d3 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -105,6 +105,7 @@ struct rpz { /** * Create policy from RR and add to this RPZ. * @param r: the rpz to add the policy to. + * @param azname: dname of the auth-zone * @param aznamelen: the length of the auth-zone name * @param dname: dname of the RR * @param dnamelen: length of the dname @@ -117,7 +118,7 @@ struct rpz { * @param rr_len: the length of the complete RR * @return: 0 on error */ -int rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, +int rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len); From 59fe18895428f1e3b09b0adea3972bc5a56ae9d8 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 12 Mar 2020 10:49:24 +0100 Subject: [PATCH 160/235] - Fix compile of test tools without protobuf. --- dnstap/unbound-dnstap-socket.c | 18 ++++++++++++++++++ doc/Changelog | 3 +++ 2 files changed, 21 insertions(+) diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index f7d713b53..97ed7a087 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -61,8 +61,10 @@ #include "services/listen_dnsport.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" +#ifdef USE_DNSTAP #include #include "dnstap/dnstap.pb-c.h" +#endif /* USE_DNSTAP */ #include "util/config_file.h" /** listen backlog on TCP connections for dnstap logs */ @@ -406,6 +408,7 @@ static int tap_socket_list_addevs(struct tap_socket_list* list, return 1; } +#ifdef USE_DNSTAP /** log control frame contents */ static void log_control_frame(uint8_t* pkt, size_t len) { @@ -633,6 +636,7 @@ static void log_data_frame(uint8_t* pkt, size_t len) fflush(stdout); dnstap__dnstap__free_unpacked(d, NULL); } +#endif /* USE_DNSTAP */ /** receive bytes from fd, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ @@ -768,6 +772,7 @@ void tap_data_free(struct tap_data* data) * returns 0 on error */ static int reply_with_accept(int fd) { +#ifdef USE_DNSTAP /* len includes the escape and framelength */ size_t len = 0; void* acceptframe = fstrm_create_control_frame_accept( @@ -794,12 +799,18 @@ static int reply_with_accept(int fd) fd_set_nonblock(fd); free(acceptframe); return 1; +#else + log_err("no dnstap compiled, no reply"); + (void)fd; + return 0; +#endif } /** reply with FINISH control frame to bidirectional client, * returns 0 on error */ static int reply_with_finish(int fd) { +#ifdef USE_DNSTAP size_t len = 0; void* finishframe = fstrm_create_control_frame_finish(&len); if(!finishframe) { @@ -823,6 +834,11 @@ static int reply_with_finish(int fd) fd_set_nonblock(fd); free(finishframe); return 1; +#else + log_err("no dnstap compiled, no reply"); + (void)fd; + return 0; +#endif } #ifdef HAVE_SSL @@ -1007,9 +1023,11 @@ void dtio_tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) /* we are done with a frame */ if(verbosity>=3) log_info("received %sframe len %d", (data->control_frame?"control ":""), (int)data->len); +#ifdef USE_DNSTAP if(data->control_frame) log_control_frame(data->frame, data->len); else log_data_frame(data->frame, data->len); +#endif if(data->len >= 4 && sldns_read_uint32(data->frame) == FSTRM_CONTROL_FRAME_READY) { diff --git a/doc/Changelog b/doc/Changelog index becded77e..ea8eeb528 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +12 March 2020: Wouter + - Fix compile of test tools without protobuf. + 11 March 2020: Ralph - Add check to make sure RPZ records are subdomains of configured zone origin. From e4268663e63ef57ce3d76e2674fed902a33b1dea Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 16 Mar 2020 09:44:38 +0100 Subject: [PATCH 161/235] - Fix #192: In the unbound-checkconf tool, the module config of dns64 subnetcache respip validator iterator is whitelisted, it was reported it seems to work. --- doc/Changelog | 5 +++++ smallapp/unbound-checkconf.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ea8eeb528..08582e3d7 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +16 March 2020: Wouter + - Fix #192: In the unbound-checkconf tool, the module config of + dns64 subnetcache respip validator iterator is whitelisted, it was + reported it seems to work. + 12 March 2020: Wouter - Fix compile of test tools without protobuf. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 34902f363..685f75b39 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -600,6 +600,8 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "respip subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "dns64 subnetcache respip iterator") != 0 + && strcmp(cfg->module_conf, "dns64 subnetcache respip validator iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(CLIENT_SUBNET) && strcmp(cfg->module_conf, "python subnetcache iterator") != 0 From 20dbd6339eee7038a1cc91321565ddd3acbbbe03 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 17 Mar 2020 06:32:13 -0400 Subject: [PATCH 162/235] Sync with upstream --- .travis.yml | 85 +++++-- contrib/android/install_openssl.sh | 2 +- contrib/android/install_tools.sh | 2 +- contrib/ios/15-ios.conf | 4 +- contrib/ios/install_openssl.sh | 12 +- contrib/ios/install_tools.sh | 2 +- contrib/ios/openssl.patch | 48 ++++ contrib/ios/setenv_ios.sh | 341 +++++++++++++++++------------ daemon/unbound.c | 8 + libunbound/libworker.c | 8 + smallapp/unbound-control.c | 8 +- 11 files changed, 346 insertions(+), 174 deletions(-) create mode 100644 contrib/ios/openssl.patch diff --git a/.travis.yml b/.travis.yml index 31df4f6ee..a22bbb8d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,12 @@ addons: - libevent-dev - libexpat-dev - clang + homebrew: + packages: + - openssl + - libevent + - expat + update: true jobs: include: @@ -25,6 +31,7 @@ jobs: name: Clang on OS X, Amd64 compiler: clang arch: amd64 + env: TEST_OSX=yes - os: linux name: UBsan, GCC on Linux, Amd64 compiler: gcc @@ -81,7 +88,7 @@ jobs: dist: bionic - os: osx osx_image: xcode10 - name: Apple iPhone, OS X, Amd64 + name: Apple iPhone on iOS, armv7 compiler: clang env: - TEST_IOS=yes @@ -89,10 +96,10 @@ jobs: - OPENSSL_HOST=ios-cross - IOS_SDK=iPhoneOS - IOS_CPU=armv7s - - IOS_PREFIX="$HOME/iPhoneOS-$IOS_CPU" + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - os: osx osx_image: xcode10 - name: Apple iPad, OS X, Amd64 + name: Apple iPhone on iOS, arm64 compiler: clang env: - TEST_IOS=yes @@ -100,27 +107,69 @@ jobs: - OPENSSL_HOST=ios64-cross - IOS_SDK=iPhoneOS - IOS_CPU=arm64 - - IOS_PREFIX="$HOME/iPhoneOS-$IOS_CPU" + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - os: osx osx_image: xcode10 - name: Apple TV, OS X, Amd64 + name: Apple TV on iOS, arm64 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=aarch64-apple-ios - OPENSSL_HOST=ios64-cross - IOS_SDK=AppleTVOS - - IOS_PREFIX="$HOME/AppleTVOS" + - IOS_CPU=arm64 + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - os: osx osx_image: xcode10 - name: Apple Watch, OS X, Amd64 + name: Apple Watch on iOS, armv7 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=armv7-apple-ios - OPENSSL_HOST=ios-cross - IOS_SDK=WatchOS - - IOS_PREFIX="$HOME/WatchOS" + - IOS_CPU=armv7k + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" + - os: osx + osx_image: xcode10 + name: iPhoneSimulator on OS X, i386 + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=i386-apple-ios + - OPENSSL_HOST=iphoneos-cross + - IOS_CPU=i386 + - IOS_SDK=iPhoneSimulator + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" + - os: osx + osx_image: xcode10 + name: iPhoneSimulator on OS X, x86_64 + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=x86_64-apple-ios + - OPENSSL_HOST=iphoneos-cross + - IOS_CPU=x86_64 + - IOS_SDK=iPhoneSimulator + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" + - os: osx + osx_image: xcode10 + name: AppleTVSimulator on OS X, x86_64 + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=x86_64-apple-ios + - OPENSSL_HOST=iphoneos-cross + - IOS_CPU=x86_64 + - IOS_SDK=AppleTVSimulator + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" + - os: osx + osx_image: xcode10 + name: WatchSimulator on OS X, i386 + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=i386-apple-ios + - OPENSSL_HOST=iphoneos-cross + - IOS_CPU=i386 + - IOS_SDK=WatchSimulator + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - os: linux name: Android armv7a, Linux, Amd64 compiler: clang @@ -179,23 +228,23 @@ jobs: - ANDROID_NDK_ROOT="$HOME/android-ndk" allow_failures: - - os: osx - name: Apple TV, OS X, Amd64 - - os: osx - name: Apple Watch, OS X, Amd64 - os: linux - arch: amd64 name: Android armv7a, Linux, Amd64 - os: linux - arch: amd64 name: Android aarch64, Linux, Amd64 - os: linux - arch: amd64 name: Android x86, Linux, Amd64 - os: linux - arch: amd64 name: Android x86_64, Linux, Amd64 +before_script: + - | + if [ "$TEST_ANDROID" = "yes" ]; then + ./contrib/android/install_tools.sh + elif [ "$TEST_IOS" = "yes" ]; then + ./contrib/ios/install_tools.sh + fi + # The Travis docs say to avoid calling exit in the script. It leads to # some code duplication to avoid failures in cross-compiles. Also see # https://docs.travis-ci.com/user/job-lifecycle/ in the Travis docs. @@ -215,7 +264,6 @@ script: export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" source ./contrib/ios/setenv_ios.sh - ./contrib/ios/install_tools.sh ./contrib/ios/install_openssl.sh ./contrib/ios/install_expat.sh ./configure \ @@ -230,7 +278,6 @@ script: export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh source ./contrib/android/setenv_android.sh - ./contrib/android/install_tools.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ @@ -240,7 +287,7 @@ script: --with-libexpat="$ANDROID_PREFIX"; make -j 2 make install - elif [ "$TRAVIS_OS_NAME" = "osx" ]; then + elif [ "$TEST_OSX" = "yes" ]; then ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/ make -j 2 make test diff --git a/contrib/android/install_openssl.sh b/contrib/android/install_openssl.sh index 5a6ff13e5..e4fb87266 100755 --- a/contrib/android/install_openssl.sh +++ b/contrib/android/install_openssl.sh @@ -24,7 +24,7 @@ fi echo "Configuring OpenSSL" if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine shared \ - "$CFLAGS" --prefix="$ANDROID_PREFIX" --openssldir="$ANDROID_PREFIX"; then + --prefix="$ANDROID_PREFIX" --openssldir="$ANDROID_PREFIX"; then echo "Failed to configure OpenSSL" exit 1 fi diff --git a/contrib/android/install_tools.sh b/contrib/android/install_tools.sh index 6bf2a7eba..0f595a0bc 100755 --- a/contrib/android/install_tools.sh +++ b/contrib/android/install_tools.sh @@ -3,4 +3,4 @@ # This step should install tools needed for all packages - OpenSSL, Expat and Unbound echo "Updating tools" sudo apt-get -qq update -sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkgconfig +sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkg-config diff --git a/contrib/ios/15-ios.conf b/contrib/ios/15-ios.conf index b611210fe..364ed6ebf 100644 --- a/contrib/ios/15-ios.conf +++ b/contrib/ios/15-ios.conf @@ -14,11 +14,12 @@ my %targets = ( }, "ios-xcrun" => { inherit_from => [ "ios-common", asm("armv4_asm") ], + bn_ops => [ "BN_LLONG", "RC4_CHAR" ], perlasm_scheme => "ios32", }, "ios64-xcrun" => { inherit_from => [ "ios-common", asm("aarch64_asm") ], - #bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", + bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ], perlasm_scheme => "ios64", }, "iossimulator-xcrun" => { @@ -35,7 +36,6 @@ my %targets = ( }, "ios64-cross" => { inherit_from => [ "ios64-xcrun" ], - cppflags => add("-DSIXTY_FOUR_BIT_LONG -DRC4_CHAR"), cflags => add("-Wall -fno-common"), }, ); diff --git a/contrib/ios/install_openssl.sh b/contrib/ios/install_openssl.sh index 3ca41269b..31e65d64e 100755 --- a/contrib/ios/install_openssl.sh +++ b/contrib/ios/install_openssl.sh @@ -22,9 +22,17 @@ if ! cp ../contrib/ios/15-ios.conf Configurations/; then exit 1 fi +# OpenSSL 1.1.1d patch. OK to remove once OpenSSL version is bumped. +# ocsp.c:947:23: error: 'fork' is unavailable: not available on tvOS and watchOS. +# Also see https://github.com/openssl/openssl/issues/7607. +if ! patch -u -p0 < ../contrib/ios/openssl.patch; then + echo "Failed to patch OpenSSL" + exit 1 +fi + echo "Configuring OpenSSL" -if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine \ - "$CFLAGS" --prefix="$IOS_PREFIX" --openssldir="$IOS_PREFIX"; then +if ! ./Configure "$OPENSSL_HOST" -DNO_FORK no-comp no-asm no-hw no-engine no-tests no-unit-test \ + --prefix="$IOS_PREFIX" --openssldir="$IOS_PREFIX"; then echo "Failed to configure OpenSSL" exit 1 fi diff --git a/contrib/ios/install_tools.sh b/contrib/ios/install_tools.sh index af633b758..a59fc0eb7 100755 --- a/contrib/ios/install_tools.sh +++ b/contrib/ios/install_tools.sh @@ -4,4 +4,4 @@ echo "Updating tools" brew update 1>/dev/null echo "Installing tools" -brew install autoconf automake libtool pkgconfig curl perl 1>/dev/null +brew install autoconf automake libtool pkg-config curl perl 1>/dev/null diff --git a/contrib/ios/openssl.patch b/contrib/ios/openssl.patch new file mode 100644 index 000000000..58cef232c --- /dev/null +++ b/contrib/ios/openssl.patch @@ -0,0 +1,48 @@ +--- apps/speed.c ++++ apps/speed.c +@@ -99,6 +99,13 @@ + #endif + #include + ++/* fork() breaks AppleTVOS, WatchOS, AppleTVSimulator and WatchSimulator */ ++/* Users should configure with -DNO_FORK */ ++#if defined(NO_FORK) ++# undef HAVE_FORK ++# define HAVE_FORK 0 ++#endif ++ + #ifndef HAVE_FORK + # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_VXWORKS) + # define HAVE_FORK 0 +@@ -110,6 +117,7 @@ + #if HAVE_FORK + # undef NO_FORK + #else ++# undef NO_FORK + # define NO_FORK + #endif + +--- apps/ocsp.c ++++ apps/ocsp.c +@@ -36,6 +36,13 @@ + # include + # include + ++/* fork() breaks AppleTVOS, WatchOS, AppleTVSimulator and WatchSimulator */ ++/* Users should configure with -DNO_FORK */ ++#if defined(NO_FORK) ++# undef HAVE_FORK ++# define HAVE_FORK 0 ++#endif ++ + #ifndef HAVE_FORK + # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) + # define HAVE_FORK 0 +@@ -47,6 +54,7 @@ + #if HAVE_FORK + # undef NO_FORK + #else ++# undef NO_FORK + # define NO_FORK + #endif + diff --git a/contrib/ios/setenv_ios.sh b/contrib/ios/setenv_ios.sh index f03c1db3a..df433d17c 100755 --- a/contrib/ios/setenv_ios.sh +++ b/contrib/ios/setenv_ios.sh @@ -1,8 +1,145 @@ #!/usr/bin/env bash +# ==================================================================== +# Sets the cross compile environment for Xcode/iOS +# +# Based upon OpenSSL's setenv-ios.sh by TH, JW, and SM. +# Heavily modified by JWW for Crypto++. +# Modified by JWW for Unbound. +# ==================================================================== + +######################################### +##### Some validation ##### +######################################### + +# In the past we could mostly infer arch or cpu from the SDK (and +# mostly vice-versa). Nowadays we need it set for us because Apple +# platforms can be either 32-bit or 64-bit. + +if [ -z "$IOS_SDK" ]; then + echo "IOS_SDK is not set. Please set it" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + +if [ -z "$IOS_CPU" ]; then + echo "IOS_CPU is not set. Please set it" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + +# cryptest-ios.sh may run this script without sourcing. +if [ "$0" = "${BASH_SOURCE[0]}" ]; then + echo "setenv-ios.sh is usually sourced, but not this time." +fi + +######################################### +##### Small Fixups, if needed ##### +######################################### + +if [[ "$IOS_SDK" == "iPhone" ]]; then + IOS_SDK=iPhoneOS +fi + +if [[ "$IOS_SDK" == "iPhoneOSSimulator" ]]; then + IOS_SDK=iPhoneSimulator +fi + +if [[ "$IOS_SDK" == "TV" || "$IOS_SDK" == "AppleTV" ]]; then + IOS_SDK=AppleTVOS +fi + +if [[ "$IOS_SDK" == "Watch" || "$IOS_SDK" == "AppleWatch" ]]; then + IOS_SDK=WatchOS +fi + +if [[ "$IOS_CPU" == "aarch64" || "$IOS_CPU" == "armv8"* ]] ; then + IOS_CPU=arm64 +fi + +######################################## +##### Environment ##### +######################################## + +# The flags below were tested with Xcode 8 on Travis. If +# you use downlevel versions of Xcode, then you can push +# xxx-version-min=n lower. For example, Xcode 6 can use +# -miphoneos-version-min=5. + +# iPhones can be either 32-bit or 64-bit +if [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "armv7"* ]]; then + MIN_VER=-miphoneos-version-min=6 +elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "arm64" ]]; then + MIN_VER=-miphoneos-version-min=6 + +# Fixups for convenience +elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "i386" ]]; then + IOS_SDK=iPhoneSimulator + # MIN_VER=-miphoneos-version-min=6 + MIN_VER=-miphonesimulator-version-min=6 +elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "x86_64" ]]; then + IOS_SDK=iPhoneSimulator + # MIN_VER=-miphoneos-version-min=6 + MIN_VER=-miphonesimulator-version-min=6 + +# Simulator builds +elif [[ "$IOS_SDK" == "iPhoneSimulator" && "$IOS_CPU" == "i386" ]]; then + MIN_VER=-miphonesimulator-version-min=6 +elif [[ "$IOS_SDK" == "iPhoneSimulator" && "$IOS_CPU" == "x86_64" ]]; then + MIN_VER=-miphonesimulator-version-min=6 + +# Apple TV can be 32-bit Intel (1st gen), 32-bit ARM (2nd, 3rd gen) or 64-bit ARM (4th gen) +elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "i386" ]]; then + MIN_VER=-mappletvos-version-min=6 +elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "armv7"* ]]; then + MIN_VER=-mappletvos-version-min=6 +elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "arm64" ]]; then + MIN_VER=-mappletvos-version-min=6 + +# Simulator builds +elif [[ "$IOS_SDK" == "AppleTVSimulator" && "$IOS_CPU" == "i386" ]]; then + MIN_VER=-mappletvsimulator-version-min=6 +elif [[ "$IOS_SDK" == "AppleTVSimulator" && "$IOS_CPU" == "x86_64" ]]; then + MIN_VER=-mappletvsimulator-version-min=6 + +# Watch can be either 32-bit or 64-bit ARM. TODO: figure out which +# -mwatchos-version-min=n is needed for arm64. 9 is not enough. +elif [[ "$IOS_SDK" == "WatchOS" && "$IOS_CPU" == "armv7"* ]]; then + MIN_VER=-mwatchos-version-min=6 +elif [[ "$IOS_SDK" == "WatchOS" && "$IOS_CPU" == "arm64" ]]; then + MIN_VER=-mwatchos-version-min=10 + +# Simulator builds. TODO: figure out which -watchos-version-min=n +# is needed for arm64. 6 compiles and links, but is it correct? +elif [[ "$IOS_SDK" == "WatchSimulator" && "$IOS_CPU" == "i386" ]]; then + MIN_VER=-mwatchsimulator-version-min=6 +elif [[ "$IOS_SDK" == "WatchSimulator" && "$IOS_CPU" == "x86_64" ]]; then + MIN_VER=-mwatchsimulator-version-min=6 + +# And the final catch-all +else + echo "IOS_SDK and IOS_CPU are not valid. Please fix them" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + ##################################################################### -# Allow a user override? I think we should be doing this. The use case is: +# Xcode 6 and below cannot handle -miphonesimulator-version-min +# Fix it so the simulator will compile as expected. This trick +# may work on other SDKs, but it was not tested. + +if [ -n "$(command -v xcodebuild 2>/dev/null)" ]; then + # Output of xcodebuild is similar to "Xcode 6.2". The first cut gets + # the dotted decimal value. The second cut gets the major version. + XCODE_VERSION=$(xcodebuild -version 2>/dev/null | head -n 1 | cut -f2 -d" " | cut -f1 -d".") + if [ -z "$XCODE_VERSION" ]; then XCODE_VERSION=100; fi + + if [ "$XCODE_VERSION" -le 6 ]; then + MIN_VER="${MIN_VER//iphonesimulator/iphoneos}" + fi +fi + +##################################################################### + +# Allow a user override? I think we should be doing this. The use case is, # move /Applications/Xcode somewhere else for a side-by-side installation. if [ -z "${XCODE_DEVELOPER-}" ]; then XCODE_DEVELOPER=$(xcode-select -print-path 2>/dev/null) @@ -13,43 +150,34 @@ if [ ! -d "$XCODE_DEVELOPER" ]; then [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi -# Default toolchain location -XCODE_TOOLCHAIN="$XCODE_DEVELOPER/usr/bin" +# XCODE_DEVELOPER_SDK is the SDK location. +XCODE_DEVELOPER_SDK="$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform" -if [ ! -d "$XCODE_TOOLCHAIN" ]; then - echo "ERROR: unable to find XCODE_TOOLCHAIN directory." +if [ ! -d "$XCODE_DEVELOPER_SDK" ]; then + echo "ERROR: unable to find XCODE_DEVELOPER_SDK directory." + echo " Is the SDK supported by Xcode and installed?" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi -# XCODE_DEVELOPER_TOP is the top of the development tools tree -XCODE_DEVELOPER_TOP="$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform/Developer" - -if [ ! -d "$XCODE_DEVELOPER_TOP" ]; then - echo "ERROR: unable to find XCODE_DEVELOPER_TOP directory." - [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 -fi - -# IOS_TOOLCHAIN_PATH is the location of the actual compiler tools. +# XCODE_TOOLCHAIN is the location of the actual compiler tools. if [ -d "$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" ]; then - IOS_TOOLCHAIN_PATH="$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" -elif [ -d "$XCODE_DEVELOPER_TOP/usr/bin/" ]; then - IOS_TOOLCHAIN_PATH="$XCODE_DEVELOPER_TOP/usr/bin/" + XCODE_TOOLCHAIN="$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" +elif [ -d "$XCODE_DEVELOPER_SDK/Developer/usr/bin/" ]; then + XCODE_TOOLCHAIN="$XCODE_DEVELOPER_SDK/Developer/usr/bin/" fi -if [ -z "$IOS_TOOLCHAIN_PATH" ] || [ ! -d "$IOS_TOOLCHAIN_PATH" ]; then +if [ -z "$XCODE_TOOLCHAIN" ] || [ ! -d "$XCODE_TOOLCHAIN" ]; then echo "ERROR: unable to find Xcode cross-compiler tools." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi -##################################################################### - -# XCODE_SDK is the SDK name/version being used. Adjust the list as appropriate. +# XCODE_SDK is the SDK name/version being used - adjust the list as appropriate. # For example, remove 4.3, 6.2, and 6.1 if they are not installed. We go back to # the 1.0 SDKs because Apple WatchOS uses low numbers, like 2.0 and 2.1. -unset XCODE_SDK +XCODE_SDK= for i in $(seq -f "%.1f" 30.0 -0.1 1.0) do - if [ -d "$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform/Developer/SDKs/$IOS_SDK$i.sdk" ]; then + if [ -d "$XCODE_DEVELOPER_SDK/Developer/SDKs/$IOS_SDK$i.sdk" ]; then XCODE_SDK="$IOS_SDK$i.sdk" break fi @@ -61,7 +189,7 @@ if [ -z "$XCODE_SDK" ]; then [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi -IOS_SYSROOT="$XCODE_DEVELOPER_TOP/SDKs/$XCODE_SDK" +IOS_SYSROOT="$XCODE_DEVELOPER_SDK/Developer/SDKs/$XCODE_SDK" if [ -z "$IOS_SYSROOT" ] || [ ! -d "$IOS_SYSROOT" ]; then echo "ERROR: unable to find IOS_SYSROOT directory." @@ -70,143 +198,67 @@ fi ##################################################################### -XCODE_SDK=$(tr '[:upper:]' '[:lower:]' <<< "$IOS_SDK") +# We want to set AR=libtool and ARFLAGS="-static -o", +# but I am not sure Autotools can handle it. +CPP=cpp; CC=clang; CXX=clang++; LD=ld +AS=as; AR=ar; RANLIB=ranlib; STRIP=strip -case "$XCODE_SDK" in - iphone|iphoneos) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default armv7. Also allowed armv7a, armv7s, arm64 - if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi - - if [ "$IOS_CPU" = "arm64" ]; then - CFLAGS="-arch $IOS_CPU -mios-version-min=7" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=7" - else - CFLAGS="-arch $IOS_CPU -mios-version-min=6" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=6" - fi - ;; - - iphonesimulator) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default i386. - if [ -z "$IOS_CPU" ]; then IOS_CPU=i386; fi - - CFLAGS="-arch $IOS_CPU -mios-version-min=5" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=5" - ;; - - watch|watchos|applewatch) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default armv7. Also allowed armv7a, armv7s - if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi - - CFLAGS="-arch $IOS_CPU -mios-version-min=7" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=7" - ;; - - watchsimulator|watchossimulator) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default i386. - if [ -z "$IOS_CPU" ]; then IOS_CPU=i386; fi - - CFLAGS="-arch $IOS_CPU" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++" - ;; - - appletv|appletvos) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default arm64. - if [ -z "$IOS_CPU" ]; then IOS_CPU=arm64; fi - - CFLAGS="-arch $IOS_CPU" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++" - ;; - - appletvsimulator|appletvossimulator) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default x86_64, - if [ -z "$IOS_CPU" ]; then IOS_CPU=x86_64; fi - - CFLAGS="-arch $IOS_CPU" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++" - ;; - - *) - echo "ERROR: Unknown architecture $IOS_SDK" +# Error checking +if [ ! -e "$XCODE_TOOLCHAIN/$CC" ]; then + echo "ERROR: Failed to find iOS clang. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 - ;; +fi -esac +# Error checking +if [ ! -e "$XCODE_TOOLCHAIN/$CXX" ]; then + echo "ERROR: Failed to find iOS clang++. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$XCODE_TOOLCHAIN/$RANLIB" ]; then + echo "ERROR: Failed to find iOS ranlib. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$XCODE_TOOLCHAIN/$AR" ]; then + echo "ERROR: Failed to find iOS ar. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$XCODE_TOOLCHAIN/$AS" ]; then + echo "ERROR: Failed to find iOS as. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi + +# Error checking +if [ ! -e "$XCODE_TOOLCHAIN/$LD" ]; then + echo "ERROR: Failed to find iOS ld. Please edit this script." + [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 +fi ##################################################################### -TOOLCHAIN_PATH="$IOS_TOOLCHAIN_PATH:$XCODE_TOOLCHAIN" -LENGTH=${#TOOLCHAIN_PATH} +LENGTH=${#XCODE_TOOLCHAIN} SUBSTR=${PATH:0:$LENGTH} -if [ "$SUBSTR" != "$TOOLCHAIN_PATH" ]; then - export PATH="$TOOLCHAIN_PATH":"$PATH" +if [ "$SUBSTR" != "$XCODE_TOOLCHAIN" ]; then + export PATH="$XCODE_TOOLCHAIN":"$PATH" fi ##################################################################### export CPP CC CXX LD AS AR RANLIB STRIP export IOS_SYSROOT -export CFLAGS="$CFLAGS --sysroot=$IOS_SYSROOT" -export CXXFLAGS="$CXXFLAGS --sysroot=$IOS_SYSROOT" +export CFLAGS="-arch $IOS_CPU $MIN_VER --sysroot=$IOS_SYSROOT" +export CXXFLAGS="-arch $IOS_CPU $MIN_VER -stdlib-libc++ --sysroot=$IOS_SYSROOT" ##################################################################### -echo "IOS_TOOLCHAIN_PATH: $IOS_TOOLCHAIN_PATH" +echo "XCODE_TOOLCHAIN: $XCODE_TOOLCHAIN" +echo "CPP: $(command -v "$CPP")" echo "CC: $(command -v "$CC")" echo "CXX: $(command -v "$CXX")" echo "LD: $(command -v "$LD")" @@ -215,6 +267,7 @@ echo "AR: $(command -v "$AR")" echo "IOS_SYSROOT: $IOS_SYSROOT" +echo "CPPFLAGS: $CPPFLAGS" echo "CFLAGS: $CFLAGS" echo "CXXFLAGS: $CXXFLAGS" diff --git a/daemon/unbound.c b/daemon/unbound.c index af76fc84f..ceb3da6f5 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -88,6 +88,14 @@ # include "nss.h" #endif +#ifdef HAVE_TARGETCONDITIONALS_H +#include +#endif + +#if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH) +#undef HAVE_FORK +#endif + /** print build options. */ static void print_build_options(void) diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 0ed778903..66ea7c3ba 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -74,6 +74,14 @@ #include "sldns/sbuffer.h" #include "sldns/str2wire.h" +#ifdef HAVE_TARGETCONDITIONALS_H +#include +#endif + +#if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH) +#undef HAVE_FORK +#endif + /** handle new query command for bg worker */ static void handle_newq(struct libworker* w, uint8_t* buf, uint32_t len); diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index ce13ad392..4e5ce1e4b 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -74,8 +74,8 @@ #include #endif -#ifdef HAVE_TARGETCONDITIONAL_H -#include +#ifdef HAVE_TARGETCONDITIONALS_H +#include #endif static void usage(void) ATTR_NORETURN; @@ -884,8 +884,8 @@ int main(int argc, char* argv[]) usage(); if(argc >= 1 && strcmp(argv[0], "start")==0) { #if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH) - fatal_exit("could not exec unbound: %s", - strerror(ENOSYS)); + fatal_exit("could not exec unbound: %s", + strerror(ENOSYS)); #else if(execlp("unbound", "unbound", "-c", cfgfile, (char*)NULL) < 0) { From dafe849c5b0a7910bedaaccd1afd7c2803cfdcb8 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 17 Mar 2020 06:46:18 -0400 Subject: [PATCH 163/235] Add libevent testing to Travis --- .travis.yml | 71 ++++++++++++++++++++++++++------ configure.ac | 31 +++++++------- contrib/android/install_tools.sh | 2 +- testcode/unitmain.c | 4 ++ 4 files changed, 80 insertions(+), 28 deletions(-) diff --git a/.travis.yml b/.travis.yml index 31df4f6ee..4cc3dd8c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,11 @@ addons: - libevent-dev - libexpat-dev - clang + homebrew: + packages: + - openssl + - libevent + update: true jobs: include: @@ -17,68 +22,109 @@ jobs: name: GCC on Linux, Amd64 compiler: gcc arch: amd64 + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, Amd64 compiler: clang arch: amd64 + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: osx name: Clang on OS X, Amd64 compiler: clang arch: amd64 + env: + - CONFIG_OPTS="--enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/" + - os: linux + name: Libevent, GCC on Linux, Amd64 + compiler: gcc + arch: amd64 + env: + - TEST_LIBEVENT=yes + - CONFIG_OPTS="--with-libevent" + - os: linux + name: Libevent, Clang on Linux, Amd64 + compiler: clang + arch: amd64 + - TEST_LIBEVENT=yes + - CONFIG_OPTS="--with-libevent" + - os: osx + name: Libevent, Clang on OS X, Amd64 + compiler: clang + arch: amd64 + - TEST_LIBEVENT=yes + - CONFIG_OPTS="--with-ssl=/usr/local/opt/openssl/ --with-libevent=/usr/local/opt/libevent/" - os: linux name: UBsan, GCC on Linux, Amd64 compiler: gcc arch: amd64 dist: bionic - env: TEST_UBSAN=yes + env: + - TEST_UBSAN=yes - os: linux name: UBsan, Clang on Linux, Amd64 compiler: clang arch: amd64 dist: bionic - env: TEST_UBSAN=yes + env: + - TEST_UBSAN=yes - os: linux name: Asan, GCC on Linux, Amd64 compiler: gcc arch: amd64 dist: bionic - env: TEST_ASAN=yes + env: + - TEST_ASAN=yes - os: linux name: Asan, Clang on Linux, Amd64 compiler: clang arch: amd64 dist: bionic - env: TEST_ASAN=yes + env: + - TEST_ASAN=yes - os: linux name: GCC on Linux, Aarch64 compiler: gcc arch: arm64 dist: bionic + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, Aarch64 compiler: clang arch: arm64 dist: bionic + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: GCC on Linux, PowerPC64 compiler: gcc arch: ppc64le dist: bionic + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, PowerPC64 compiler: clang arch: ppc64le dist: bionic + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: GCC on Linux, s390x compiler: gcc arch: s390x dist: bionic + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, s390x compiler: clang arch: s390x dist: bionic + env: + - CONFIG_OPTS="--enable-debug --disable-flto" - os: osx osx_image: xcode10 name: Apple iPhone, OS X, Amd64 @@ -196,6 +242,14 @@ jobs: arch: amd64 name: Android x86_64, Linux, Amd64 +before_script: + - | + if [ "$TEST_ANDROID" = "yes" ]; then + ./contrib/android/install_tools.sh + elif [ "$TEST_IOS" = "yes" ]; then + ./contrib/ios/install_tools.sh + fi + # The Travis docs say to avoid calling exit in the script. It leads to # some code duplication to avoid failures in cross-compiles. Also see # https://docs.travis-ci.com/user/job-lifecycle/ in the Travis docs. @@ -215,7 +269,6 @@ script: export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" source ./contrib/ios/setenv_ios.sh - ./contrib/ios/install_tools.sh ./contrib/ios/install_openssl.sh ./contrib/ios/install_expat.sh ./configure \ @@ -230,7 +283,6 @@ script: export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh source ./contrib/android/setenv_android.sh - ./contrib/android/install_tools.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ @@ -240,13 +292,8 @@ script: --with-libexpat="$ANDROID_PREFIX"; make -j 2 make install - elif [ "$TRAVIS_OS_NAME" = "osx" ]; then - ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/ - make -j 2 - make test - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) else - ./configure --enable-debug --disable-flto + ./configure ${CONFIG_OPTS} make -j 2 make test (cd testdata/clang-analysis.tdir; bash clang-analysis.test) diff --git a/configure.ac b/configure.ac index aa2eb47e1..eee15fcd1 100644 --- a/configure.ac +++ b/configure.ac @@ -1218,28 +1218,29 @@ esac # check for libevent AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname], [use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]), - [ ],[ withval="no" ]) -if test x_$withval = x_yes -o x_$withval != x_no; then + [ ],[ with_libevent="no" ]) +if test "x_$with_libevent" != x_no; then + AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent]) AC_MSG_CHECKING(for libevent) - if test x_$withval = x_ -o x_$withval = x_yes; then - withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" + if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then + with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi - for dir in $withval; do + for dir in $with_libevent; do thedir="$dir" if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then found_libevent="yes" - dnl assume /usr is in default path. - if test "$thedir" != "/usr"; then - CPPFLAGS="$CPPFLAGS -I$thedir/include" - fi - break; - fi + dnl assume /usr is in default path. + if test "$thedir" != "/usr"; then + CPPFLAGS="$CPPFLAGS -I$thedir/include" + fi + break; + fi done if test x_$found_libevent != x_yes; then if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then # libevent source directory - AC_MSG_RESULT(found in $thedir) - CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" + AC_MSG_RESULT(found in $thedir) + CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" BAK_LDFLAGS_SET="1" BAK_LDFLAGS="$LDFLAGS" # remove evdns from linking @@ -1252,10 +1253,10 @@ if test x_$withval = x_yes -o x_$withval != x_no; then cp $ev_files_o build/libevent cp $ev_files_lo build/libevent cp $ev_files_libso build/libevent/.libs - LATE_LDFLAGS="build/libevent/*.lo -lm" + LATE_LDFLAGS="build/libevent/*.lo -lm" LDFLAGS="build/libevent/*.o $LDFLAGS -lm" else - AC_MSG_ERROR([Cannot find the libevent library in $withval + AC_MSG_ERROR([Cannot find the libevent library in $with_libevent You can restart ./configure --with-libevent=no to use a builtin alternative. Please note that this alternative is not as capable as libevent when using large outgoing port ranges. ]) diff --git a/contrib/android/install_tools.sh b/contrib/android/install_tools.sh index 6bf2a7eba..0f595a0bc 100755 --- a/contrib/android/install_tools.sh +++ b/contrib/android/install_tools.sh @@ -3,4 +3,4 @@ # This step should install tools needed for all packages - OpenSSL, Expat and Unbound echo "Updating tools" sudo apt-get -qq update -sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkgconfig +sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkg-config diff --git a/testcode/unitmain.c b/testcode/unitmain.c index eb35e7c21..4fc7e508b 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -867,7 +867,11 @@ main(int argc, char* argv[]) printf("\tperforms unit tests.\n"); return 1; } +#ifdef USE_LIBEVENT + printf("Start of %s+libevent unit test.\n", PACKAGE_STRING); +#else printf("Start of %s unit test.\n", PACKAGE_STRING); +#endif #ifdef HAVE_SSL # ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); From acfa55713c44f2aeb718b3946260da9f7b4933cc Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 19 Mar 2020 10:55:39 +0100 Subject: [PATCH 164/235] - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 08582e3d7..1183db3f4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +19 March 2020: Ralph + - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton. + 16 March 2020: Wouter - Fix #192: In the unbound-checkconf tool, the module config of dns64 subnetcache respip validator iterator is whitelisted, it was From 2c03028fa3dbdd7c4523a25ef7464f699fd4af1a Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 19 Mar 2020 14:00:33 +0100 Subject: [PATCH 165/235] - Fix #158: open tls-session-ticket-keys as binary, for Windows. By Daisuke HIGASHI. --- doc/Changelog | 2 ++ util/net_help.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 1183db3f4..2466f16f5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 19 March 2020: Ralph - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton. + - Fix #158: open tls-session-ticket-keys as binary, for Windows. By + Daisuke HIGASHI. 16 March 2020: Wouter - Fix #192: In the unbound-checkconf tool, the module config of diff --git a/util/net_help.c b/util/net_help.c index 8f75da07f..135d33427 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1362,7 +1362,7 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses if(!data) return 0; - f = fopen(p->str, "r"); + f = fopen(p->str, "rb"); if(!f) { log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); free(data); From 4504dd3737fb9fbf6590c9be905ab4d85fcada25 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 19 Mar 2020 17:34:46 +0100 Subject: [PATCH 166/235] - Log warning when using outgoing-port-permit and outgoing-port-avoid while explicit port randomisation is disabled. --- util/config_file.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/util/config_file.c b/util/config_file.c index 394cf17f3..814d9f436 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1530,6 +1530,11 @@ int cfg_mark_ports(const char* str, int allow, int* avail, int num) { char* mid = strchr(str, '-'); +#ifdef DISABLE_EXPLICIT_PORT_RANDOMISATION + log_warn("Explicit port randomisation disabled, ignoring " + "outgoing-port-permit and outgoing-port-avoid configuration " + "options"); +#endif if(!mid) { int port = atoi(str); if(port == 0 && strcmp(str, "0") != 0) { From d0ee8c1cbd2139c0174dbc5c787bb54956f3a682 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 19 Mar 2020 17:37:27 +0100 Subject: [PATCH 167/235] Add changelog entries for PR#134. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 2466f16f5..a72ff1b2d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,10 @@ - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton. - Fix #158: open tls-session-ticket-keys as binary, for Windows. By Daisuke HIGASHI. + - Merge PR#134, Allow the kernel to provide random source ports. By + Florian Obser. + - Log warning when using outgoing-port-permit and outgoing-port-avoid + while explicit port randomisation is disabled. 16 March 2020: Wouter - Fix #192: In the unbound-checkconf tool, the module config of From 5f7d73ae8830356b3ac8cec390db5d5419f7a21c Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 19 Mar 2020 17:59:08 +0100 Subject: [PATCH 168/235] - Merge PR#194: Add libevent testing to Travis, by Jeffrey Walton. --- doc/Changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/Changelog b/doc/Changelog index a72ff1b2d..7de99f1e4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,7 @@ Florian Obser. - Log warning when using outgoing-port-permit and outgoing-port-avoid while explicit port randomisation is disabled. + - Merge PR#194: Add libevent testing to Travis, by Jeffrey Walton. 16 March 2020: Wouter - Fix #192: In the unbound-checkconf tool, the module config of From 7fa2b19389e27dd989fe629fa4a9145a3239d6d1 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 19 Mar 2020 18:11:22 +0100 Subject: [PATCH 169/235] - Fix .travis.yml error, missing 'env' option. --- .travis.yml | 2 ++ doc/Changelog | 1 + 2 files changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9c6c1ac29..37ea672b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,12 +49,14 @@ jobs: name: Libevent, Clang on Linux, Amd64 compiler: clang arch: amd64 + env: - TEST_LIBEVENT=yes - CONFIG_OPTS="--with-libevent" - os: osx name: Libevent, Clang on OS X, Amd64 compiler: clang arch: amd64 + env: - TEST_OSX=yes - TEST_LIBEVENT=yes - CONFIG_OPTS="--with-ssl=/usr/local/opt/openssl/ --with-libevent=/usr/local/opt/libevent/" diff --git a/doc/Changelog b/doc/Changelog index 7de99f1e4..49c075bd7 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,7 @@ - Log warning when using outgoing-port-permit and outgoing-port-avoid while explicit port randomisation is disabled. - Merge PR#194: Add libevent testing to Travis, by Jeffrey Walton. + - Fix .travis.yml error, missing 'env' option. 16 March 2020: Wouter - Fix #192: In the unbound-checkconf tool, the module config of From bdd245ff7d5a1caae9c8e3e66d425a65ba49351d Mon Sep 17 00:00:00 2001 From: Florian Obser Date: Fri, 20 Mar 2020 11:44:38 +0100 Subject: [PATCH 170/235] Make log_ident_revert_to_default() a proper prototype. Pointed out by clang with -Wstrict-prototypes. --- util/log.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/log.h b/util/log.h index 098a850a5..29a1ba380 100644 --- a/util/log.h +++ b/util/log.h @@ -121,7 +121,7 @@ void log_ident_set_default(const char* id); /** * Revert identity to print, back to the recorded default value. */ -void log_ident_revert_to_default(); +void log_ident_revert_to_default(void); /** * Set identity to print if there is an identity, otherwise From 1a81965748d742259af7c87e77da080db3329449 Mon Sep 17 00:00:00 2001 From: Florian Obser Date: Fri, 20 Mar 2020 11:53:13 +0100 Subject: [PATCH 171/235] Declare lz_enter_rr_into_zone() static, it's only used in this file. Pointed out by clang with -Wmissing-prototypes --- services/localzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/localzone.c b/services/localzone.c index 18407832f..6aaf0c055 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -518,7 +518,7 @@ local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, } /** enter data RR into auth zone */ -int +static int lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) { uint8_t* nm; From e8aab3f3f4f84765e5495bb69e6ad34860e41bf0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 20 Mar 2020 11:54:57 +0100 Subject: [PATCH 172/235] Changelog note for #197. - Merge PR #197 from fobser: Make log_ident_revert_to_default() a proper prototype. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 49c075bd7..85358350f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +20 March 2020: Wouter + - Merge PR #197 from fobser: Make log_ident_revert_to_default() a + proper prototype. + 19 March 2020: Ralph - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton. - Fix #158: open tls-session-ticket-keys as binary, for Windows. By From ce7fd591c6a41f0ae11f7160565cd3ac495dc548 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 20 Mar 2020 13:06:43 +0100 Subject: [PATCH 173/235] - Changelog note for PR #198: Declare lz_enter_rr_into_zone() static, it's only used in this file, by fobser. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 85358350f..a63b311b8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +20 March 2020: George + - Merge PR #198 from fobser: Declare lz_enter_rr_into_zone() static, it's + only used in this file. + 20 March 2020: Wouter - Merge PR #197 from fobser: Make log_ident_revert_to_default() a proper prototype. From cca5cfc88ff84fa8d6e5c619f3f31aa21bb33b5f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 23 Mar 2020 17:26:06 +0100 Subject: [PATCH 174/235] - Fix compile on Solaris for unbound-checkconf. --- doc/Changelog | 3 +++ smallapp/unbound-checkconf.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index a63b311b8..0551486bc 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +23 March 2020: Wouter + - Fix compile on Solaris for unbound-checkconf. + 20 March 2020: George - Merge PR #198 from fobser: Declare lz_enter_rr_into_zone() static, it's only used in this file. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 685f75b39..3fc638cae 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -705,7 +705,7 @@ check_auth(struct config_file* cfg) { int is_rpz = 0; struct auth_zones* az = auth_zones_create(); - if(!az || !auth_zones_apply_cfg(az, cfg, 0i, &is_rpz)) { + if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); From c0118410a2194751e0d191c92ba02c100112192d Mon Sep 17 00:00:00 2001 From: Yaroslav K Date: Wed, 4 Mar 2020 11:02:16 -0800 Subject: [PATCH 175/235] add ip-dscp configuration option for setting IP DiffServ codepoint (DSCP, previously TOS) on sockets --- doc/unbound.conf.5.in | 6 + testdata/04-checkconf.tdir/bad.dscp | 5 + testdata/04-checkconf.tdir/good.all | 4 + testdata/04-checkconf.tdir/good.min | 7 + util/config_file.c | 2 + util/config_file.h | 2 + util/configlexer.c | 5072 +++++++++--------- util/configlexer.lex | 1 + util/configparser.c | 7584 ++++++++++++++------------- util/configparser.h | 849 ++- util/configparser.y | 16 + 11 files changed, 6803 insertions(+), 6745 deletions(-) create mode 100644 testdata/04-checkconf.tdir/bad.dscp create mode 100644 testdata/04-checkconf.tdir/good.min diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 43159666d..b3a96df93 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -323,6 +323,12 @@ IP addresses that are nonlocal or do not exist, like when the network interface or IP address is down. Exists only on Linux, where the similar ip\-transparent option is also available. .TP +.B ip-dscp: \fI +The value of the Differentiated Services Codepoint (DSCP) in the +differentiated services field (DS) of the outgoing IP packet headers. +The field replaces the outdated IPv4 Type-Of-Service field and the +IPV6 traffic class field. +.TP .B rrset\-cache\-size: \fI Number of bytes size of the RRset cache. Default is 4 megabytes. A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes diff --git a/testdata/04-checkconf.tdir/bad.dscp b/testdata/04-checkconf.tdir/bad.dscp new file mode 100644 index 000000000..5491c79fe --- /dev/null +++ b/testdata/04-checkconf.tdir/bad.dscp @@ -0,0 +1,5 @@ +include: "good.min" + +server: + # an abnormal value for the option + ip-dscp: 500 diff --git a/testdata/04-checkconf.tdir/good.all b/testdata/04-checkconf.tdir/good.all index 33ebaf014..d564f983c 100644 --- a/testdata/04-checkconf.tdir/good.all +++ b/testdata/04-checkconf.tdir/good.all @@ -220,6 +220,10 @@ server: # more slabs reduce lock contention, but fragment memory usage. key-cache-slabs: 4 + # the value of the Differentiated Services Codepoint (DSCP) + # in the differentiated services field (DS) of the outgoing + # IP packets + ip-dscp: 5 # Stub zones. # Create entries like below, to make all queries for 'example.com' and diff --git a/testdata/04-checkconf.tdir/good.min b/testdata/04-checkconf.tdir/good.min new file mode 100644 index 000000000..4b71c45f7 --- /dev/null +++ b/testdata/04-checkconf.tdir/good.min @@ -0,0 +1,7 @@ +# the minimal passing config - include in your bad.x to verify that +# it is your option which triggers failure +server: + chroot: "" + username: "" + directory: "." + pidfile: "" diff --git a/util/config_file.c b/util/config_file.c index 814d9f436..ef3a3912c 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -186,6 +186,7 @@ config_create(void) cfg->so_reuseport = REUSEPORT_DEFAULT; cfg->ip_transparent = 0; cfg->ip_freebind = 0; + cfg->ip_dscp = 0; cfg->num_ifs = 0; cfg->ifs = NULL; cfg->num_out_ifs = 0; @@ -923,6 +924,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "so-reuseport", so_reuseport) else O_YNO(opt, "ip-transparent", ip_transparent) else O_YNO(opt, "ip-freebind", ip_freebind) + else O_DEC(opt, "ip-dscp", ip_dscp) else O_MEM(opt, "rrset-cache-size", rrset_cache_size) else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs) else O_YNO(opt, "prefetch-key", prefetch_key) diff --git a/util/config_file.h b/util/config_file.h index bd6e884eb..49c9610ce 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -188,6 +188,8 @@ struct config_file { int ip_transparent; /** IP_FREEBIND socket option request on port 53 sockets */ int ip_freebind; + /** IP_TOS socket option requested on port 53 sockets */ + int ip_dscp; /** number of interfaces to open. If 0 default all interfaces. */ int num_ifs; diff --git a/util/configlexer.c b/util/configlexer.c index 601cd78bf..2037992d4 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -9,8 +9,8 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 4 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -48,6 +48,7 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -55,6 +56,7 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -85,61 +87,63 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif -#ifndef SIZE_MAX -#define SIZE_MAX (~(size_t)0) -#endif - -#endif /* ! C99 */ - #endif /* ! FLEXINT_H */ -/* begin standard C++ headers. */ +#ifdef __cplusplus -/* TODO: this is always defined, so inline it */ +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST #define yyconst const - -#if defined(__GNUC__) && __GNUC__ >= 3 -#define yynoreturn __attribute__((__noreturn__)) #else -#define yynoreturn +#define yyconst #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. +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. */ -#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned 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_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. @@ -156,16 +160,15 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE; typedef size_t yy_size_t; #endif -extern int yyleng; +extern yy_size_t 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) \ @@ -180,6 +183,7 @@ extern FILE *yyin, *yyout; YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) + #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE @@ -194,12 +198,12 @@ struct yy_buffer_state /* Size of input buffer in bytes, not including room for EOB * characters. */ - int yy_buf_size; + yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t 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 @@ -222,7 +226,7 @@ struct yy_buffer_state 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. */ @@ -250,7 +254,7 @@ 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. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< 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 @@ -261,6 +265,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ #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. */ @@ -268,11 +273,11 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* 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; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ -static char *yy_c_buf_p = NULL; +static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ @@ -281,68 +286,71 @@ static int yy_start = 0; /* start state number */ */ 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 ); +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 ) +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); -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 ); +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) -void *yyalloc ( yy_size_t ); -void *yyrealloc ( void *, yy_size_t ); -void yyfree ( void * ); +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t 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_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_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 unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; 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 ); +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 yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. @@ -350,12 +358,13 @@ static void yynoreturn yy_fatal_error ( const char* msg ); #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ (yytext_ptr) -= (yy_more_len); \ - yyleng = (int) (yy_cp - (yytext_ptr)); \ + yyleng = (yy_size_t) (yy_cp - (yytext_ptr)); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 309 -#define YY_END_OF_BUFFER 310 + +#define YY_NUM_RULES 310 +#define YY_END_OF_BUFFER 311 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,346 +372,346 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3044] = +static yyconst flex_int16_t yy_accept[3049] = { 0, - 1, 1, 291, 291, 295, 295, 299, 299, 303, 303, - 1, 1, 310, 307, 1, 289, 289, 308, 2, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 291, 292, 292, 293, 308, 295, 296, 296, - 297, 308, 302, 299, 300, 300, 301, 308, 303, 304, - 304, 305, 308, 306, 290, 2, 294, 308, 306, 307, - 0, 1, 2, 2, 2, 2, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 1, 1, 292, 292, 296, 296, 300, 300, 304, 304, + 1, 1, 311, 308, 1, 290, 290, 309, 2, 309, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 292, 293, 293, 294, 309, 296, 297, 297, + 298, 309, 303, 300, 301, 301, 302, 309, 304, 305, + 305, 306, 309, 307, 291, 2, 295, 309, 307, 308, + 0, 1, 2, 2, 2, 2, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 291, 0, 295, 0, 302, 0, 299, 303, 0, 306, - 0, 2, 2, 306, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 292, 0, 296, 0, 303, 0, 300, 304, 0, 307, + 0, 2, 2, 307, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 306, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 307, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 113, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 121, 307, 307, 307, 307, - 307, 307, 307, 306, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 114, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 122, 308, 308, 308, + 308, 308, 308, 308, 307, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 97, 307, - 307, 307, 307, 307, 307, 8, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 114, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 126, 307, 306, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 98, 308, 308, 308, 308, 308, 308, 8, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 115, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 127, 308, 307, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 284, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 285, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 306, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 55, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 223, 307, 14, 15, 307, 19, 18, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 307, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 56, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 224, 308, 14, 15, 308, 19, + 18, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 120, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 207, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 3, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 121, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 208, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 3, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 306, 307, 307, 307, 307, 307, 307, - 307, 279, 307, 307, 278, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 298, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 307, 308, 308, + 308, 308, 308, 308, 308, 280, 308, 308, 279, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 299, 308, 308, 308, 308, 308, + 308, 308, 55, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 58, 307, 253, 307, 307, 307, - 307, 307, 307, 307, 307, 285, 286, 307, 307, 307, - 307, 307, 59, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 117, 307, - 307, 307, 307, 307, 307, 307, 307, 196, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 21, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 145, 307, 307, 298, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 59, + 308, 254, 308, 308, 308, 308, 308, 308, 308, 308, + 286, 287, 308, 308, 308, 308, 308, 60, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 118, 308, 308, 308, 308, 308, 308, + 308, 308, 197, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 21, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 95, 307, 307, 307, 307, 307, 307, 307, 261, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 168, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 144, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 146, 308, 308, 299, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 96, 308, 308, 308, 308, + 308, 308, 308, 262, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 169, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 145, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 94, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 32, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 33, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 56, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 119, 307, - 307, 307, 307, 307, 112, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 57, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 95, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 32, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 33, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 57, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 120, 308, 308, 308, 308, 308, 113, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 226, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 169, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 46, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 58, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 227, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 170, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 46, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 244, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 50, 307, 51, 307, 307, 307, 307, 307, 98, 307, - 99, 307, 307, 307, 307, 96, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 7, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 216, 307, 307, 307, 307, 147, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 245, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 50, 308, 51, 308, 308, + 308, 308, 308, 99, 308, 100, 308, 308, 308, 308, + 97, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 7, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 217, 308, 308, + 308, 308, 148, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 227, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 47, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 188, 307, 187, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 16, 17, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 60, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 228, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 47, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 189, 308, + 188, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 16, 17, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 195, 307, - 307, 307, 307, 307, 307, 101, 307, 100, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 179, 307, - 307, 307, 307, 307, 307, 307, 307, 127, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 79, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 61, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 196, 308, 308, 308, 308, 308, 308, + 102, 308, 101, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 180, 308, 308, 308, 308, 308, 308, + 308, 308, 128, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 80, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 83, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 54, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 182, 183, 307, 307, 307, 255, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 6, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 259, 307, 307, 307, 307, 307, 307, 280, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 84, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 54, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 183, 184, 308, 308, + 308, 256, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 6, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 260, 308, 308, 308, 308, + 308, 308, 281, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 42, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 44, 307, 307, 307, 307, 307, 307, 307, 307, - 175, 307, 307, 307, 122, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 200, 307, 176, 307, 307, - 307, 213, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 45, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 124, 106, 307, 107, 307, 307, 307, 105, 307, - 307, 307, 307, 307, 307, 307, 307, 142, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 42, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 44, 308, 308, 308, + 308, 308, 308, 308, 308, 176, 308, 308, 308, 123, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 201, 308, 177, 308, 308, 308, 214, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 45, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 125, 107, 308, 108, + 308, 308, 308, 106, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 243, - 307, 307, 307, 307, 307, 307, 307, 307, 177, 307, - 307, 307, 307, 307, 180, 307, 186, 307, 307, 307, - 307, 307, 212, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 93, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 118, 307, 307, 307, 307, - 307, 307, 52, 307, 307, 307, 26, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 20, 307, 307, 307, - 307, 307, 307, 27, 36, 307, 152, 307, 307, 307, + 308, 308, 143, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 244, 308, 308, 308, 308, 308, + 308, 308, 308, 178, 308, 308, 308, 308, 308, 181, + 308, 187, 308, 308, 308, 308, 308, 213, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 94, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 119, 308, 308, 308, 308, 308, 308, 52, 308, 308, + 308, 26, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 20, 308, 308, 308, 308, 308, 308, 27, 36, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 68, 70, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 263, 307, 307, 307, 224, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 108, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 141, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 274, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 153, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 69, 71, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 264, 308, 308, 308, + 225, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 109, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 142, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 275, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 146, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 206, 307, 307, 307, - 307, 307, 307, 307, 307, 283, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 163, 307, 307, - 307, 307, 307, 307, 307, 307, 102, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 158, 307, 170, 307, - 307, 307, 307, 307, 130, 307, 307, 307, 307, 307, - 89, 307, 307, 307, 307, 198, 307, 307, 307, 307, - 307, 307, 214, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 147, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 207, 308, 308, 308, 308, 308, 308, 308, 308, + 284, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 164, 308, 308, 308, 308, 308, 308, 308, + 308, 103, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 159, 308, 171, 308, 308, 308, 308, 308, 131, + 308, 308, 308, 308, 308, 90, 308, 308, 308, 308, + 199, 308, 308, 308, 308, 308, 308, 215, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 235, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 123, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 162, - 307, 307, 307, 307, 307, 71, 72, 307, 307, 307, - 307, 307, 53, 307, 307, 307, 307, 307, 78, 171, - 307, 189, 307, 217, 307, 307, 181, 256, 307, 307, - 307, 307, 307, 64, 307, 173, 307, 307, 307, 307, - 307, 9, 307, 307, 307, 92, 307, 307, 307, 307, - 248, 307, 307, 307, 197, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 236, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 124, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 163, 308, 308, 308, 308, 308, + 72, 73, 308, 308, 308, 308, 308, 53, 308, 308, + 308, 308, 308, 79, 172, 308, 190, 308, 218, 308, + 308, 182, 257, 308, 308, 308, 308, 308, 65, 308, + 174, 308, 308, 308, 308, 308, 9, 308, 308, 308, + 93, 308, 308, 308, 308, 249, 308, 308, 308, 198, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 161, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 148, 307, 262, 307, 307, - 307, 307, 234, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 208, 307, 307, 307, 307, 254, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 277, 307, 172, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 162, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 149, 308, 263, 308, 308, 308, 308, 235, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 209, + 308, 308, 308, 308, 255, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 278, - 307, 307, 307, 307, 63, 65, 307, 307, 307, 307, - 307, 307, 307, 91, 307, 307, 307, 307, 246, 307, - 307, 307, 258, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 202, 34, 28, 30, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 35, 307, 29, - 31, 307, 307, 307, 307, 307, 307, 307, 307, 88, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 204, 201, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 62, 307, 307, 125, + 308, 173, 308, 308, 308, 308, 308, 308, 308, 64, + 66, 308, 308, 308, 308, 308, 308, 308, 92, 308, + 308, 308, 308, 247, 308, 308, 308, 259, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 203, + 34, 28, 30, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 35, 308, 29, 31, 308, 308, 308, 308, + 308, 308, 308, 308, 89, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 205, 202, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 109, 307, 307, 307, 307, 307, 307, 307, 307, - 143, 13, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 272, 307, 275, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 12, 307, 307, 22, 307, 307, - 307, 252, 307, 307, 307, 260, 307, 307, 307, 66, - 307, 210, 307, 307, 307, 307, 203, 307, 307, 61, - 307, 307, 307, 307, 23, 307, 43, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 157, - 156, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 205, 199, 307, 215, 307, 307, 264, 307, 307, 307, + 308, 63, 308, 308, 126, 308, 110, 308, 308, 308, + 308, 308, 308, 308, 308, 144, 13, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 273, 308, 276, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 12, + 308, 308, 22, 308, 308, 308, 253, 308, 308, 308, + 261, 308, 308, 308, 67, 308, 211, 308, 308, 308, + 308, 204, 308, 308, 62, 308, 308, 308, 308, 23, + 308, 43, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 158, 157, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 206, 200, 308, 216, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 73, 307, 307, 307, 247, 307, - 307, 307, 307, 185, 307, 307, 307, 307, 209, 307, - 307, 307, 307, 307, 307, 307, 307, 281, 282, 154, - 307, 307, 67, 307, 307, 307, 307, 164, 307, 307, - 103, 104, 307, 307, 307, 307, 149, 307, 151, 307, - 190, 307, 307, 307, 307, 155, 307, 307, 218, 307, - 307, 307, 307, 307, 307, 307, 132, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 225, 307, + 308, 265, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 74, + 308, 308, 308, 248, 308, 308, 308, 308, 186, 308, + 308, 308, 308, 210, 308, 308, 308, 308, 308, 308, + 308, 308, 282, 283, 155, 308, 308, 68, 308, 308, + 308, 308, 165, 308, 308, 104, 105, 308, 308, 308, + 308, 150, 308, 152, 308, 191, 308, 308, 308, 308, + 156, 308, 308, 219, 308, 308, 308, 308, 308, 308, + 308, 133, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 24, 307, 257, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 191, 307, 307, 245, 307, 276, 307, 184, 307, 307, - 307, 307, 48, 307, 307, 307, 307, 4, 307, 307, - 307, 116, 131, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 221, 37, 38, 307, 307, 307, 307, 307, 307, - 307, 265, 307, 307, 307, 307, 307, 307, 233, 307, - 307, 307, 307, 307, 307, 307, 194, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 76, 307, 49, 251, + 308, 308, 308, 226, 308, 308, 308, 308, 308, 308, + 308, 24, 308, 258, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 192, 308, 308, 246, 308, + 277, 308, 185, 308, 308, 308, 308, 48, 308, 308, + 308, 308, 4, 308, 308, 308, 117, 132, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 222, 37, 38, 308, + 308, 308, 308, 308, 308, 308, 266, 308, 308, 308, + 308, 308, 308, 234, 308, 308, 308, 308, 308, 308, + 308, 195, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 222, 307, 307, 307, 307, 11, 307, 307, 307, - 307, 307, 115, 307, 307, 307, 307, 192, 80, 307, - 40, 307, 307, 307, 307, 307, 307, 307, 307, 160, - 307, 307, 307, 307, 307, 134, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 232, 307, 307, 307, 307, - 128, 307, 307, 110, 111, 307, 307, 307, 82, 86, - 81, 307, 74, 307, 307, 307, 307, 307, 10, 307, - 307, 307, 249, 307, 307, 307, 307, 288, 39, 307, - 307, 307, 307, 307, 159, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 308, 77, 308, 49, 252, 308, 223, 308, 308, 308, + 308, 11, 308, 308, 308, 308, 308, 116, 308, 308, + 308, 308, 193, 81, 308, 40, 308, 308, 308, 308, + 308, 308, 308, 308, 161, 308, 308, 308, 308, 308, + 135, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 233, 308, 308, 308, 308, 129, 308, 308, 111, 112, + 308, 308, 308, 83, 87, 82, 308, 75, 308, 308, + 308, 308, 308, 10, 308, 308, 308, 250, 308, 308, + 308, 308, 289, 39, 308, 308, 308, 308, 308, 160, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 307, 307, 307, 307, 307, 307, 307, 87, 85, 307, - 75, 273, 307, 307, 307, 307, 307, 307, 307, 178, - 307, 307, 307, 307, 307, 193, 307, 307, 307, 307, - 307, 307, 307, 307, 150, 69, 307, 307, 307, 307, - 307, 266, 307, 307, 307, 307, 307, 307, 307, 229, - 307, 307, 228, 129, 307, 84, 135, 136, 139, 140, - 137, 138, 77, 307, 250, 307, 307, 307, 307, 153, - 307, 307, 307, 307, 307, 220, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 166, 165, 41, 307, 307, 307, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 88, 86, 308, 76, 274, 308, 308, 308, + 308, 308, 308, 308, 179, 308, 308, 308, 308, 308, + 194, 308, 308, 308, 308, 308, 308, 308, 308, 151, + 70, 308, 308, 308, 308, 308, 267, 308, 308, 308, + 308, 308, 308, 308, 230, 308, 308, 229, 130, 308, + 85, 136, 137, 140, 141, 138, 139, 78, 308, 251, + 308, 308, 308, 308, 154, 308, 308, 308, 308, 308, + 221, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 167, 166, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 90, 307, 219, 307, 242, 270, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 5, 307, - 307, 211, 307, 307, 271, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 230, 25, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 231, 307, - 307, 307, 133, 307, 307, 307, 307, 307, 307, 307, - 307, 167, 307, 174, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 267, 307, 307, 307, 307, 307, 307, + 41, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 91, 308, 220, 308, 243, + 271, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 5, 308, 308, 212, 308, 308, 272, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 231, + 25, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 232, 308, 308, 308, 134, 308, 308, + 308, 308, 308, 308, 308, 308, 168, 308, 175, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 268, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 287, 307, 307, 238, 307, 307, 307, 307, 307, - 268, 307, 307, 307, 307, 307, 307, 269, 307, 307, - 307, 236, 307, 239, 240, 307, 307, 307, 307, 307, - 237, 241, 0 + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 288, 308, 308, 239, + 308, 308, 308, 308, 308, 269, 308, 308, 308, 308, + 308, 308, 270, 308, 308, 308, 237, 308, 240, 241, + 308, 308, 308, 308, 308, 238, 242, 0 } ; -static const YY_CHAR yy_ec[256] = +static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, @@ -734,7 +743,7 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[41] = +static yyconst flex_int32_t yy_meta[41] = { 0, 1, 2, 3, 4, 5, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, @@ -742,15 +751,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3058] = +static yyconst flex_int16_t yy_base[3063] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 3212, 2720, 81, 5927, 5927, 5927, 96, 52, + 90, 112, 2327, 1999, 81, 5940, 5940, 5940, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 2544, 5927, 5927, 5927, 107, 2459, 5927, 5927, - 5927, 165, 2157, 2047, 5927, 5927, 5927, 211, 1913, 5927, - 5927, 5927, 180, 1568, 5927, 217, 5927, 221, 168, 1529, + 189, 152, 1735, 5940, 5940, 5940, 107, 1527, 5940, 5940, + 5940, 165, 1302, 1259, 5940, 5940, 5940, 211, 1131, 5940, + 5940, 5940, 180, 948, 5940, 217, 5940, 221, 168, 767, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -759,670 +768,672 @@ static const flex_int16_t yy_base[3058] = 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, - 1432, 379, 1075, 381, 915, 388, 450, 365, 392, 278, + 723, 379, 595, 381, 503, 388, 450, 365, 392, 278, 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, - 453, 454, 446, 455, 456, 458, 461, 462, 463, 472, - 465, 473, 484, 479, 488, 492, 475, 493, 496, 491, + 453, 454, 446, 455, 456, 458, 461, 462, 477, 464, + 465, 463, 486, 472, 488, 490, 487, 498, 499, 475, - 503, 499, 506, 507, 502, 498, 508, 510, 513, 515, - 516, 518, 517, 520, 521, 523, 525, 533, 535, 526, - 534, 528, 547, 542, 549, 546, 548, 552, 551, 555, - 563, 564, 556, 565, 567, 568, 571, 574, 583, 584, - 585, 569, 576, 586, 580, 588, 589, 590, 591, 600, - 603, 602, 605, 612, 593, 611, 613, 615, 616, 617, - 626, 618, 628, 622, 635, 619, 633, 638, 627, 636, - 641, 645, 646, 653, 640, 656, 657, 658, 660, 661, - 663, 671, 666, 667, 648, 670, 672, 674, 675, 676, - 678, 687, 679, 689, 682, 690, 695, 691, 710, 699, + 506, 504, 511, 516, 512, 489, 514, 501, 517, 491, + 518, 515, 522, 524, 525, 529, 530, 537, 534, 535, + 538, 532, 547, 543, 552, 544, 551, 555, 548, 558, + 566, 569, 549, 576, 559, 572, 573, 578, 581, 585, + 582, 580, 583, 590, 587, 589, 591, 593, 592, 600, + 610, 607, 608, 620, 609, 605, 616, 617, 618, 596, + 628, 627, 623, 632, 638, 629, 636, 639, 641, 643, + 642, 644, 646, 656, 649, 659, 652, 666, 661, 667, + 664, 676, 651, 662, 672, 673, 674, 678, 677, 679, + 684, 687, 688, 690, 691, 685, 698, 696, 700, 713, - 700, 701, 702, 711, 704, 712, 713, 726, 731, 721, - 732, 733, 735, 737, 740, 748, 739, 746, 743, 750, - 752, 753, 762, 758, 5927, 757, 760, 773, 766, 774, - 775, 776, 781, 782, 763, 789, 787, 788, 792, 814, - 796, 798, 794, 803, 806, 5927, 804, 808, 838, 810, - 812, 832, 828, 824, 827, 829, 839, 836, 849, 842, - 847, 851, 862, 858, 859, 860, 861, 864, 863, 877, - 872, 870, 799, 874, 889, 875, 882, 886, 887, 892, - 893, 894, 897, 899, 902, 903, 895, 904, 905, 908, - 913, 914, 916, 917, 927, 929, 921, 940, 918, 935, + 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, + 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, + 756, 757, 761, 768, 769, 5940, 760, 773, 771, 774, + 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, + 825, 791, 801, 804, 814, 795, 5940, 815, 807, 849, + 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, + 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, + 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, + 893, 895, 902, 905, 904, 908, 916, 909, 915, 917, + 921, 922, 925, 927, 929, 923, 926, 933, 950, 931, - 942, 943, 937, 944, 947, 950, 951, 952, 953, 961, - 958, 959, 963, 964, 966, 967, 970, 972, 973, 975, - 977, 979, 978, 985, 988, 981, 994, 989, 5927, 996, - 998, 999, 1000, 1001, 1003, 5927, 1004, 1005, 1006, 1014, - 1017, 1016, 1013, 1023, 1027, 1028, 1029, 1030, 1039, 1012, - 1041, 1040, 1036, 1042, 1046, 1048, 1049, 1051, 1052, 1054, - 1055, 1057, 1060, 1077, 5927, 1061, 1064, 1062, 1063, 1070, - 1080, 1089, 1072, 1090, 1088, 1065, 1105, 1092, 1106, 1100, - 1101, 1111, 1102, 1113, 1107, 1116, 1115, 1117, 1118, 1119, - 1120, 1125, 1126, 1131, 5927, 1133, 1134, 1145, 1135, 1143, + 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, + 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, + 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, + 5940, 1007, 1009, 1011, 1012, 1013, 1010, 5940, 1014, 1015, + 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, + 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, + 1061, 1064, 1065, 1068, 1070, 1088, 5940, 1071, 1077, 1080, + 1079, 1085, 1082, 1090, 1097, 1100, 1093, 1106, 1116, 1103, + 1117, 1111, 1113, 1072, 1118, 1122, 1124, 1125, 1126, 1127, + 1128, 1130, 1129, 1132, 1140, 1136, 5940, 1144, 1145, 1154, - 1132, 1146, 1148, 1149, 1150, 1152, 1153, 1156, 1162, 1172, - 1157, 1174, 1159, 1170, 1175, 1176, 1177, 1178, 1179, 1180, - 1193, 1184, 1186, 1200, 1207, 1203, 1205, 1212, 1190, 1210, - 1209, 1208, 1215, 1216, 1217, 1218, 1220, 1221, 1230, 1228, - 1226, 1229, 1231, 1242, 1233, 1235, 1240, 1237, 1245, 1247, - 1253, 1254, 1250, 1256, 5927, 1263, 1260, 1267, 1262, 1268, - 1272, 1274, 1261, 1276, 1278, 1280, 1281, 1282, 1284, 1287, - 1289, 1290, 1291, 1292, 1301, 1297, 1307, 1314, 1313, 1315, - 1299, 1305, 1324, 1321, 1328, 1327, 1329, 1337, 1325, 1332, - 1323, 1339, 1335, 1340, 1341, 1344, 1347, 1350, 1352, 1359, + 1147, 1152, 1156, 1157, 1158, 1160, 1161, 1163, 1162, 1166, + 1169, 1183, 1170, 1185, 1172, 1186, 1180, 1181, 1187, 1188, + 1190, 1195, 1203, 1200, 1205, 1208, 1216, 1215, 1218, 1225, + 1201, 1220, 1193, 1212, 1221, 1224, 1228, 1226, 1232, 1230, + 1241, 1236, 1237, 1238, 1239, 1248, 1245, 1244, 1253, 1246, + 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5940, 1280, 1269, + 1276, 1277, 1282, 1283, 1284, 1285, 1288, 813, 1291, 1290, + 1292, 1294, 1296, 1297, 1298, 1299, 1307, 1315, 1311, 1310, + 1323, 1322, 1324, 1300, 1326, 1333, 1330, 1334, 1336, 1332, + 1344, 1341, 1342, 1331, 1352, 1345, 1347, 1348, 1349, 1357, - 1351, 1356, 1366, 1367, 1358, 1369, 1362, 1372, 1373, 1375, - 1376, 1377, 1378, 1385, 1380, 1386, 1382, 1387, 1388, 1389, - 1392, 1390, 1407, 1399, 1400, 1403, 1409, 1410, 1411, 1415, - 1416, 1417, 1418, 1419, 1420, 1423, 1424, 1183, 1425, 1440, - 1426, 1430, 1438, 1441, 1447, 1446, 1450, 1454, 1444, 1456, - 1457, 1458, 1460, 1461, 1465, 1464, 1471, 1468, 1474, 1476, - 1478, 1477, 1480, 1484, 1487, 1481, 5927, 1488, 1495, 1494, - 1496, 1497, 1499, 1501, 1508, 1503, 1505, 1504, 1506, 1510, - 1532, 5927, 1513, 5927, 5927, 1516, 5927, 5927, 1517, 1515, - 1518, 1523, 1535, 1538, 1298, 1525, 1542, 1520, 1553, 1557, + 1359, 1360, 1367, 1362, 1365, 1377, 1372, 1368, 1379, 1375, + 1380, 1383, 1384, 1385, 1386, 1387, 1395, 1388, 1390, 1391, + 1396, 1397, 1398, 1400, 1404, 1414, 1409, 1410, 1413, 1416, + 1420, 1418, 1421, 1425, 1426, 1427, 1428, 1429, 1434, 1431, + 1440, 1433, 1448, 1439, 1441, 1449, 1452, 1456, 1457, 1458, + 1465, 1454, 1466, 1467, 1468, 1469, 1471, 1474, 1477, 1481, + 1475, 1484, 1486, 1488, 1487, 1491, 1494, 1497, 1498, 5940, + 1492, 1505, 1500, 1506, 1504, 1509, 1512, 1519, 1514, 1517, + 1515, 1518, 1521, 1544, 5940, 1523, 5940, 5940, 1525, 5940, + 5940, 1526, 1531, 1529, 1528, 1539, 1546, 1548, 1536, 1551, - 1545, 1546, 1548, 1549, 1560, 1571, 1555, 1572, 1565, 1577, - 1579, 1582, 1581, 1587, 1583, 1588, 1590, 1591, 1593, 1592, - 1596, 1598, 1601, 1602, 1599, 1604, 1605, 1614, 1618, 1610, - 1625, 5927, 1621, 1628, 1635, 1631, 1638, 1630, 1634, 1637, - 1642, 1644, 1639, 1646, 1648, 1649, 1650, 1652, 1654, 1657, - 1661, 1658, 5927, 1659, 1662, 1667, 1666, 1670, 1674, 1606, - 1660, 1678, 1676, 1692, 1680, 1682, 1683, 1684, 1688, 1695, - 5927, 1694, 1700, 1690, 1703, 1701, 1704, 1705, 1707, 1710, - 1709, 1713, 1715, 1714, 1716, 1723, 1728, 1721, 1720, 1726, - 1738, 1727, 1742, 1746, 1731, 1734, 1748, 1749, 1750, 1752, + 1550, 1558, 1571, 1555, 1561, 1562, 1567, 1574, 1569, 1579, + 1584, 1576, 1587, 1593, 1594, 1595, 1602, 1603, 1596, 1599, + 1606, 1604, 1607, 1609, 1611, 1613, 1615, 1619, 1614, 1621, + 1616, 1631, 1622, 1635, 1642, 5940, 1639, 1643, 1646, 1645, + 1653, 1648, 1649, 1652, 1657, 1659, 1654, 1661, 1663, 1623, + 1664, 1666, 1667, 1669, 1678, 1670, 5940, 1671, 1673, 1681, + 1675, 1685, 1687, 1690, 1674, 1691, 1693, 1702, 1694, 1697, + 1698, 1705, 1557, 1707, 5940, 1709, 1716, 1703, 1708, 1719, + 1721, 1722, 1723, 1726, 1720, 1725, 1727, 1732, 1728, 1736, + 1734, 1737, 1733, 1739, 1738, 1751, 1754, 1756, 1757, 1758, - 1753, 1755, 1760, 1759, 1762, 1758, 1767, 1769, 1776, 1764, - 1765, 1766, 1779, 1781, 1790, 1786, 1787, 1788, 1797, 1792, - 1794, 1795, 1798, 1807, 1796, 1804, 1809, 1799, 1802, 1814, - 1815, 5927, 1816, 1817, 5927, 1818, 1820, 1842, 1823, 1825, - 1828, 1827, 1830, 1832, 1833, 1835, 1839, 1846, 1862, 1850, - 1865, 1837, 1867, 1854, 1868, 1857, 1859, 1870, 1877, 1885, - 1892, 1875, 1893, 1895, 1876, 1878, 1887, 1906, 1890, 1891, - 1894, 1899, 1900, 1904, 1910, 1903, 1915, 1916, 1922, 1919, - 5927, 1930, 1928, 1927, 1929, 1939, 1936, 1937, 1938, 1940, - 1943, 1950, 1945, 1948, 1952, 1951, 1955, 1953, 1958, 1963, + 1760, 1761, 1762, 1763, 1764, 1766, 1774, 1770, 1778, 1771, + 1779, 1781, 1788, 1776, 1787, 1789, 1790, 1796, 1804, 1800, + 1801, 1793, 1808, 1805, 1810, 1812, 1813, 1815, 1816, 1817, + 1822, 1820, 1824, 1827, 1826, 5940, 1828, 1829, 5940, 1833, + 1834, 1856, 1835, 1837, 1839, 1847, 1838, 1858, 1849, 1857, + 1868, 1860, 1876, 1866, 1878, 1869, 1881, 1879, 1883, 1885, + 1887, 1889, 1892, 1901, 1906, 1851, 1902, 1910, 1890, 1905, + 1893, 1925, 1907, 1909, 1913, 1916, 1917, 1915, 1840, 1921, + 1922, 1923, 1930, 1932, 5940, 1940, 1943, 1937, 1947, 1954, + 1950, 1938, 5940, 1949, 1952, 1953, 1965, 1962, 1963, 1967, - 1965, 1960, 1961, 1968, 5927, 1964, 5927, 1975, 1976, 1979, - 1977, 1981, 1982, 1983, 1985, 5927, 5927, 1987, 1984, 1994, - 2006, 2001, 5927, 1986, 2009, 2011, 2004, 2005, 2010, 2013, - 2016, 2017, 2024, 2020, 2027, 2022, 2023, 2025, 5927, 2033, - 2026, 2038, 2041, 2034, 2044, 2048, 2042, 5927, 2045, 2052, - 2055, 2062, 2058, 2060, 2059, 2063, 2064, 2067, 2070, 2071, - 2072, 2073, 2080, 2082, 2078, 2079, 2087, 2094, 5927, 2081, - 2090, 2101, 2093, 2097, 2100, 2102, 2103, 2104, 2105, 2106, - 2112, 2113, 2114, 2122, 2124, 2119, 2115, 2127, 2123, 2129, - 2128, 2135, 2132, 2136, 2137, 2138, 5927, 2139, 2147, 124, + 1964, 1966, 1968, 1973, 1970, 1974, 1975, 1976, 1992, 5940, + 1978, 5940, 1977, 1987, 1989, 1990, 1995, 1996, 1997, 1998, + 5940, 5940, 2000, 2001, 2014, 2012, 2009, 5940, 2016, 2024, + 2025, 2017, 2019, 2021, 2027, 2030, 2031, 2034, 2035, 2042, + 2037, 2039, 2040, 5940, 2047, 2038, 2048, 2051, 2049, 2057, + 2058, 2060, 5940, 2061, 2064, 2068, 2075, 2071, 2073, 2066, + 2076, 2077, 2081, 2083, 2085, 2086, 2087, 2094, 2096, 2092, + 2093, 2101, 2109, 5940, 2095, 2091, 2110, 2107, 2115, 2108, + 2116, 2118, 2119, 2120, 2121, 2124, 2126, 2127, 2134, 2135, + 2130, 2139, 2141, 2131, 2133, 2137, 2152, 2143, 2151, 2153, - 2141, 2144, 2148, 2149, 2152, 2165, 2151, 2168, 2172, 2169, - 2173, 2176, 2153, 2170, 2177, 2178, 2179, 2180, 2185, 2183, - 5927, 2189, 2190, 2191, 2186, 2197, 2192, 2194, 5927, 2195, - 2206, 2215, 2216, 2205, 2217, 2207, 2218, 2221, 2222, 2224, - 2228, 2229, 2225, 5927, 2232, 2234, 2237, 2235, 2241, 2245, - 2238, 2248, 2250, 2251, 2252, 2253, 2254, 2257, 2256, 2258, - 2259, 2260, 2267, 2271, 2272, 2274, 5927, 2284, 2262, 2273, - 2280, 2285, 2286, 2294, 2287, 2289, 2295, 2296, 2309, 2299, - 2301, 2311, 2315, 2302, 2304, 2325, 2321, 2324, 2330, 2320, - 2333, 2335, 2323, 2327, 2337, 2336, 2339, 2347, 2342, 2354, + 2154, 5940, 2155, 2157, 124, 2159, 2162, 2158, 2163, 2166, + 2165, 2167, 2182, 2184, 2180, 2169, 2181, 2183, 2188, 2189, + 2190, 2191, 2192, 2193, 2195, 5940, 2201, 2198, 2203, 2196, + 2207, 2204, 2215, 5940, 2216, 2218, 2226, 2228, 2219, 2206, + 2222, 2227, 2230, 2232, 2236, 2238, 2240, 2242, 5940, 2247, + 2244, 2248, 2250, 2252, 2254, 2256, 2259, 2260, 2262, 2264, + 2263, 2266, 2267, 2268, 2269, 2271, 2277, 2280, 2272, 2282, + 2284, 5940, 2291, 2286, 2288, 2294, 2298, 2297, 2305, 2301, + 2307, 2306, 2310, 2322, 2312, 2308, 2324, 2315, 2323, 2329, + 2332, 2334, 2337, 2343, 2333, 2346, 2348, 2336, 2340, 2350, - 2355, 2352, 2358, 2350, 2371, 2376, 2367, 5927, 2365, 2375, - 2363, 2377, 2385, 2380, 2382, 2383, 2389, 2388, 2391, 2392, - 2399, 2394, 2396, 2400, 2403, 2401, 2409, 2405, 2411, 2412, - 2420, 2413, 2422, 2351, 5927, 2424, 2425, 2416, 2429, 2432, - 2426, 2434, 2439, 2437, 2441, 2443, 2445, 2447, 2448, 2449, - 2450, 2452, 2454, 2453, 5927, 2457, 2458, 2463, 2465, 2466, - 2472, 2475, 2478, 2476, 2482, 2483, 2484, 2485, 5927, 2492, - 2493, 2490, 2494, 2496, 2497, 2499, 2502, 2503, 5927, 2504, - 2506, 2513, 2514, 2509, 5927, 2517, 2512, 2518, 2519, 2520, - 2521, 2527, 2522, 2525, 2530, 2535, 2537, 2533, 2541, 5927, + 2349, 2352, 2360, 2355, 2367, 2368, 2365, 2371, 2363, 2384, + 2389, 2380, 5940, 2378, 2388, 2376, 2390, 2398, 2393, 2395, + 2396, 2402, 2401, 2404, 2405, 2412, 2407, 2409, 2413, 2416, + 2414, 2422, 2418, 2424, 2425, 2433, 2426, 2435, 2364, 5940, + 2437, 2438, 2429, 2442, 2445, 2439, 2447, 2452, 2450, 2454, + 2456, 2458, 2460, 2461, 2462, 2463, 2465, 2467, 2466, 5940, + 2470, 2471, 2476, 2478, 2479, 2485, 2488, 2491, 2489, 2495, + 2496, 2497, 2498, 5940, 2505, 2506, 2503, 2507, 2509, 2510, + 2512, 2515, 2516, 5940, 2517, 2519, 2526, 2527, 2522, 5940, + 2530, 2525, 2531, 2532, 2533, 2534, 2540, 2535, 2538, 2543, - 2543, 2553, 2545, 2549, 2551, 2554, 2555, 2557, 2561, 2565, - 2560, 5927, 2577, 2576, 2573, 2587, 2564, 2578, 2579, 2585, - 2582, 2588, 2589, 5927, 2591, 2592, 2594, 2595, 2598, 2599, - 2601, 2613, 2603, 2606, 2608, 2611, 2614, 2616, 2618, 2621, - 2619, 2627, 2630, 2631, 2633, 2634, 2636, 2637, 2644, 2647, - 2649, 2651, 5927, 2654, 2655, 2656, 2643, 2646, 2658, 2662, - 2663, 2666, 2667, 2671, 2668, 2670, 2678, 2680, 2681, 2683, - 2685, 2687, 2688, 2690, 2691, 2692, 2693, 2700, 2698, 2696, - 2705, 2702, 2707, 2714, 2709, 2715, 2716, 2717, 2718, 2719, - 2723, 2724, 2726, 2727, 2731, 2742, 2743, 2733, 2744, 2745, + 2548, 2550, 2546, 2554, 5940, 2556, 2566, 2558, 2562, 2564, + 2567, 2568, 2570, 2574, 2578, 2573, 5940, 2590, 2589, 2586, + 2600, 2577, 2591, 2592, 2598, 2595, 2601, 2602, 5940, 2604, + 2605, 2607, 2608, 2611, 2612, 2614, 2626, 2616, 2619, 2621, + 2624, 2627, 2629, 2631, 2634, 2632, 2640, 2643, 2644, 2646, + 2647, 2649, 2650, 2657, 2660, 2662, 2664, 5940, 2667, 2668, + 2669, 2656, 2659, 2671, 2675, 2676, 2679, 2680, 2684, 2681, + 2683, 2691, 2693, 2694, 2696, 2698, 2700, 2701, 2703, 2704, + 2705, 2706, 2713, 2711, 2709, 2718, 2715, 2720, 2727, 2722, + 2728, 2729, 2730, 2731, 2732, 2736, 2737, 2739, 2740, 2744, - 2746, 2747, 5927, 2750, 2752, 2751, 2756, 2761, 2758, 2768, - 2764, 2765, 2769, 2773, 2776, 2770, 2775, 2781, 2788, 2784, - 5927, 2785, 5927, 2786, 2787, 2794, 2797, 2789, 5927, 2799, - 5927, 2802, 2811, 2796, 2800, 5927, 2814, 2804, 2806, 2818, - 2808, 2813, 2820, 2821, 2822, 2827, 2825, 2829, 2830, 2831, - 2833, 2835, 2837, 2841, 2846, 2848, 2838, 2849, 2840, 2854, - 2857, 2851, 2859, 5927, 2867, 2860, 2863, 2868, 2869, 2871, - 2872, 2874, 2875, 2880, 2876, 2881, 2882, 2889, 2892, 2890, - 2893, 2904, 5927, 2894, 2906, 2899, 2901, 5927, 2909, 2903, - 2910, 2915, 2912, 2917, 2919, 2920, 2921, 2924, 2925, 2937, + 2755, 2756, 2746, 2757, 2758, 2759, 2760, 5940, 2763, 2765, + 2764, 2769, 2774, 2771, 2781, 2777, 2778, 2782, 2786, 2789, + 2783, 2788, 2794, 2801, 2797, 5940, 2798, 5940, 2799, 2800, + 2807, 2810, 2802, 5940, 2812, 5940, 2815, 2824, 2809, 2813, + 5940, 2827, 2817, 2819, 2831, 2821, 2826, 2833, 2834, 2835, + 2840, 2838, 2842, 2843, 2844, 2846, 2848, 2850, 2854, 2859, + 2861, 2851, 2862, 2853, 2867, 2870, 2864, 2872, 5940, 2880, + 2873, 2876, 2881, 2882, 2884, 2885, 2887, 2888, 2893, 2889, + 2894, 2895, 2902, 2905, 2903, 2906, 2917, 5940, 2907, 2919, + 2912, 2914, 5940, 2922, 2916, 2923, 2928, 2925, 2930, 2932, - 2938, 2928, 2939, 5927, 2941, 2944, 2929, 2948, 2952, 2956, - 2930, 2959, 2953, 2957, 2963, 2964, 2965, 2966, 2967, 2974, - 2975, 2972, 2979, 2971, 2978, 2981, 2985, 2987, 2988, 2989, - 2992, 2993, 2991, 2997, 3001, 2996, 2998, 2999, 3000, 5927, - 3012, 3002, 3014, 3023, 3015, 3017, 3004, 3020, 3025, 3026, - 3029, 3033, 3027, 5927, 3032, 5927, 3035, 3037, 3049, 3051, - 3044, 3039, 3055, 3054, 3046, 3061, 3062, 3063, 3064, 3065, - 3066, 3069, 3070, 3076, 3077, 3073, 3074, 3078, 3084, 3086, - 3087, 3089, 5927, 5927, 3090, 3092, 3095, 3093, 3097, 3099, - 3107, 3105, 3098, 3111, 3112, 3119, 5927, 3120, 3121, 3123, + 2933, 2934, 2937, 2938, 2950, 2951, 2941, 2952, 5940, 2954, + 2957, 2942, 2961, 2965, 2969, 2943, 2972, 2966, 2970, 2976, + 2977, 2978, 2979, 2980, 2987, 2988, 2985, 2992, 2984, 2991, + 2994, 2998, 3000, 3001, 3002, 3005, 3006, 3004, 3010, 3014, + 3009, 3011, 3012, 3013, 5940, 3025, 3015, 3027, 3036, 3028, + 3030, 3017, 3033, 3038, 3039, 3042, 3046, 3040, 5940, 3045, + 5940, 3048, 3050, 3062, 3064, 3057, 3052, 3068, 3067, 3059, + 3074, 3075, 3076, 3077, 3078, 3079, 3082, 3083, 3089, 3090, + 3086, 3087, 3091, 3097, 3099, 3100, 3102, 5940, 5940, 3103, + 3105, 3108, 3106, 3110, 3112, 3120, 3118, 3111, 3124, 3125, - 3124, 3131, 3126, 3128, 3139, 3135, 3143, 3141, 5927, 3138, - 3142, 3152, 3148, 3150, 3155, 5927, 3154, 5927, 3151, 3157, - 3160, 3163, 3164, 3165, 3166, 3167, 3174, 3175, 3185, 3171, - 3182, 3183, 3186, 3187, 3194, 3189, 3190, 3191, 5927, 3193, - 3196, 3199, 3207, 3208, 3210, 3214, 3197, 5927, 3204, 3218, - 3221, 3222, 3224, 3226, 3227, 3228, 3230, 3232, 3229, 3231, - 3239, 3237, 3236, 3246, 3256, 3247, 3258, 5927, 3259, 3253, - 3266, 3268, 3261, 3263, 3269, 3270, 3271, 3274, 3276, 3275, - 3277, 3279, 3281, 3278, 3288, 3282, 3295, 3284, 3298, 3304, - 3305, 3285, 3301, 3308, 3309, 3312, 3311, 3315, 3318, 3322, + 3132, 5940, 3133, 3134, 3136, 3137, 3144, 3139, 3141, 3152, + 3148, 3156, 3154, 5940, 3151, 3155, 3165, 3161, 3163, 3168, + 5940, 3167, 5940, 3164, 3170, 3173, 3176, 3177, 3178, 3179, + 3180, 3187, 3188, 3198, 3184, 3195, 3196, 3199, 3200, 3207, + 3202, 3203, 3204, 5940, 3206, 3209, 3212, 3220, 3221, 3223, + 3227, 3210, 5940, 3217, 3231, 3234, 3235, 3237, 3239, 3240, + 3241, 3243, 3245, 3242, 3244, 3252, 3250, 3249, 3259, 3269, + 3260, 3271, 5940, 3272, 3266, 3279, 3281, 3274, 3276, 3282, + 3283, 3284, 3287, 3289, 3288, 3290, 3292, 3294, 3291, 3301, + 3295, 3308, 3297, 3311, 3317, 3318, 3298, 3314, 3321, 3322, - 3319, 3331, 3332, 3323, 3326, 3335, 3336, 3343, 3338, 5927, - 3348, 3328, 3351, 3349, 3350, 3355, 3356, 3358, 3359, 3360, - 3361, 3368, 3363, 5927, 3370, 3365, 3375, 3376, 3367, 3390, - 3385, 3366, 3388, 3392, 3389, 3395, 3393, 3397, 3398, 3401, - 3402, 5927, 5927, 3404, 3405, 3407, 5927, 3408, 3406, 3418, - 3411, 3414, 3421, 3238, 3420, 3423, 3424, 3426, 3428, 5927, - 3432, 3439, 3431, 3434, 3446, 3448, 3454, 3438, 3447, 3445, - 3450, 3455, 3457, 3458, 3459, 3461, 3470, 3463, 3466, 3468, - 5927, 3471, 3473, 3474, 3478, 3475, 3482, 5927, 3480, 3486, - 3487, 3489, 3501, 3492, 3502, 3504, 3484, 3506, 3507, 3509, + 3325, 3324, 3328, 3331, 3335, 3332, 3344, 3345, 3336, 3339, + 3348, 3349, 3356, 3351, 5940, 3361, 3341, 3364, 3362, 3363, + 3368, 3369, 3371, 3372, 3373, 3374, 3381, 3376, 5940, 3383, + 3378, 3388, 3389, 3380, 3403, 3398, 3379, 3401, 3405, 3402, + 3408, 3406, 3410, 3411, 3414, 3415, 5940, 5940, 3417, 3418, + 3420, 5940, 3421, 3419, 3431, 3424, 3427, 3434, 3251, 3433, + 3436, 3437, 3439, 3441, 5940, 3445, 3452, 3444, 3447, 3459, + 3461, 3467, 3451, 3460, 3458, 3463, 3468, 3470, 3471, 3472, + 3474, 3483, 3476, 3479, 3481, 5940, 3484, 3486, 3487, 3491, + 3488, 3495, 5940, 3493, 3499, 3500, 3502, 3514, 3505, 3515, - 3508, 3510, 3517, 3512, 3516, 3523, 3524, 3515, 5927, 3529, - 3531, 3532, 3534, 3536, 3545, 3543, 3546, 3541, 3548, 3549, - 3556, 5927, 3551, 3554, 3557, 3555, 3565, 3560, 3568, 3564, - 5927, 3566, 3570, 3572, 5927, 3571, 3583, 3586, 3588, 3573, - 3581, 3590, 3592, 3594, 3595, 5927, 3598, 5927, 3599, 3579, - 3605, 5927, 3601, 3607, 3609, 3611, 3608, 3615, 3616, 3623, - 3612, 3618, 3624, 3625, 3626, 3628, 3635, 3631, 3634, 3636, - 3637, 5927, 3638, 3640, 3646, 3647, 3652, 3641, 3645, 3657, - 3656, 5927, 5927, 3660, 5927, 3664, 3663, 3665, 5927, 3668, - 3670, 3677, 3672, 3673, 3676, 3686, 3680, 5927, 3675, 3687, + 3517, 3497, 3519, 3520, 3522, 3521, 3523, 3530, 3525, 3529, + 3536, 3537, 3528, 5940, 3542, 3544, 3545, 3547, 3549, 3558, + 3556, 3559, 3554, 3561, 3562, 3569, 5940, 3564, 3567, 3570, + 3568, 3578, 3573, 3581, 3577, 5940, 3579, 3583, 3585, 5940, + 3584, 3596, 3599, 3601, 3586, 3594, 3603, 3605, 3607, 3608, + 5940, 3611, 5940, 3612, 3592, 3618, 5940, 3614, 3620, 3622, + 3624, 3621, 3628, 3629, 3636, 3625, 3631, 3637, 3638, 3639, + 3641, 3648, 3644, 3647, 3649, 3650, 5940, 3651, 3653, 3659, + 3660, 3665, 3654, 3658, 3670, 3669, 5940, 5940, 3673, 5940, + 3677, 3676, 3678, 5940, 3681, 3683, 3690, 3685, 3686, 3689, - 3690, 3692, 3693, 3694, 3696, 3697, 3695, 3698, 3699, 5927, - 3700, 3703, 3711, 3704, 3712, 3716, 3723, 3717, 5927, 3724, - 3725, 3726, 3730, 3731, 5927, 3733, 5927, 3734, 3736, 3739, - 3741, 3740, 5927, 3746, 3747, 3750, 3753, 3755, 3754, 3757, - 3758, 3764, 3765, 3772, 3768, 3767, 3769, 5927, 3770, 3774, - 3776, 3783, 3771, 3778, 3787, 3790, 3791, 3792, 3797, 3794, - 3801, 3803, 3805, 3807, 3799, 5927, 3809, 3811, 3810, 3825, - 3820, 3815, 5927, 3816, 3830, 3832, 5927, 3823, 3822, 3834, - 3839, 3826, 3833, 3840, 3841, 3845, 5927, 3846, 3847, 3848, - 3849, 3852, 3853, 5927, 5927, 3861, 5927, 3863, 3850, 3864, + 3699, 3693, 5940, 3688, 3700, 3703, 3705, 3706, 3707, 3709, + 3710, 3708, 3711, 3712, 5940, 3713, 3716, 3724, 3717, 3725, + 3729, 3736, 3730, 5940, 3737, 3738, 3739, 3743, 3744, 5940, + 3746, 5940, 3747, 3749, 3752, 3754, 3753, 5940, 3759, 3760, + 3763, 3766, 3768, 3767, 3770, 3771, 3777, 3778, 3785, 3781, + 3780, 3782, 5940, 3783, 3787, 3789, 3796, 3784, 3791, 3800, + 3803, 3804, 3805, 3810, 3807, 3814, 3816, 3818, 3820, 3812, + 5940, 3822, 3824, 3823, 3838, 3833, 3828, 5940, 3829, 3843, + 3845, 5940, 3836, 3835, 3847, 3852, 3839, 3846, 3853, 3854, + 3858, 5940, 3859, 3860, 3861, 3862, 3865, 3866, 5940, 5940, - 3865, 3866, 3872, 3871, 3875, 3877, 3874, 3878, 3885, 3886, - 3895, 3898, 3902, 3897, 3901, 3887, 5927, 5927, 3904, 3905, - 3908, 3911, 3912, 3914, 3915, 3922, 3918, 3924, 3928, 3929, - 3936, 5927, 3935, 3921, 3938, 5927, 3919, 3932, 3940, 3943, - 3945, 3946, 3949, 3947, 3948, 3951, 3955, 3952, 3957, 3961, - 3959, 3962, 3960, 3970, 3968, 3969, 3977, 5927, 3978, 3971, - 3980, 3982, 3983, 3984, 3988, 3989, 3991, 5927, 3993, 3995, - 3997, 3998, 3992, 4002, 4013, 4017, 4019, 4010, 4020, 4021, - 4023, 4027, 4024, 5927, 4031, 4028, 4030, 4034, 4038, 4040, - 4041, 4043, 4044, 4052, 4049, 4053, 4055, 4057, 4045, 4061, + 3874, 5940, 3876, 3863, 3877, 3878, 3879, 3885, 3884, 3888, + 3890, 3887, 3891, 3898, 3899, 3908, 3911, 3915, 3910, 3914, + 3900, 5940, 5940, 3917, 3918, 3921, 3924, 3925, 3927, 3928, + 3935, 3931, 3937, 3941, 3942, 3949, 5940, 3948, 3934, 3951, + 5940, 3932, 3945, 3953, 3956, 3958, 3959, 3962, 3960, 3961, + 3964, 3968, 3965, 3970, 3974, 3972, 3975, 3973, 3983, 3981, + 3982, 3990, 5940, 3991, 3984, 3993, 3995, 3996, 3997, 4001, + 4002, 4004, 5940, 4006, 4008, 4010, 4011, 4005, 4015, 4026, + 4030, 4032, 4023, 4033, 4034, 4036, 4040, 4037, 5940, 4044, + 4041, 4043, 4047, 4051, 4053, 4054, 4056, 4057, 4065, 4062, - 4063, 4047, 5927, 4067, 4069, 4065, 4074, 4071, 4075, 4076, - 4082, 4086, 4078, 4080, 4087, 4091, 5927, 4088, 4092, 4094, - 4096, 4102, 4093, 4099, 4103, 5927, 4105, 4107, 4110, 4111, - 4113, 4116, 4119, 4120, 4123, 4122, 4126, 5927, 4128, 4130, - 4133, 4136, 4137, 4139, 4142, 4141, 5927, 4143, 4149, 4151, - 4158, 4153, 4162, 4159, 4163, 4155, 4157, 4169, 4173, 4175, - 4176, 4177, 4165, 4187, 4189, 4188, 5927, 4171, 5927, 4190, - 4193, 4201, 4196, 4178, 5927, 4202, 4203, 4207, 4208, 4204, - 5927, 4209, 4210, 4212, 4216, 5927, 4211, 4215, 4217, 4222, - 4225, 4229, 5927, 4232, 4233, 4235, 4244, 4245, 4242, 4243, + 4066, 4068, 4070, 4058, 4074, 4076, 4060, 5940, 4080, 4082, + 4078, 4087, 4084, 4088, 4089, 4095, 4099, 4091, 4093, 4100, + 4104, 5940, 4101, 4105, 4107, 4109, 4115, 4106, 4112, 4116, + 5940, 4118, 4120, 4123, 4124, 4126, 4129, 4132, 4133, 4136, + 4135, 4139, 5940, 4141, 4143, 4146, 4149, 4150, 4152, 4155, + 4154, 5940, 4156, 4162, 4164, 4171, 4166, 4175, 4172, 4176, + 4168, 4170, 4182, 4186, 4188, 4189, 4190, 4178, 4200, 4202, + 4201, 5940, 4184, 5940, 4203, 4206, 4214, 4209, 4191, 5940, + 4215, 4216, 4220, 4221, 4217, 5940, 4222, 4223, 4225, 4229, + 5940, 4224, 4228, 4230, 4235, 4238, 4242, 5940, 4245, 4246, - 4246, 4248, 4249, 4250, 4251, 4259, 4254, 4256, 5927, 4258, - 4264, 4266, 4270, 4271, 4272, 4273, 4279, 4274, 5927, 4276, - 4282, 4283, 4284, 4285, 4286, 4288, 4296, 4291, 4294, 5927, - 4295, 4299, 4307, 3996, 4308, 5927, 5927, 4300, 4315, 4317, - 4305, 4318, 5927, 4309, 4327, 4322, 4324, 4326, 5927, 5927, - 4329, 5927, 4325, 5927, 4330, 4332, 5927, 5927, 4333, 4336, - 4337, 4340, 4347, 5927, 4350, 5927, 4357, 4352, 4339, 4341, - 4354, 5927, 4356, 4358, 4361, 5927, 4364, 4371, 4366, 4367, - 5927, 4369, 4372, 4374, 5927, 4376, 4379, 4380, 4381, 4386, - 4383, 4387, 4390, 4393, 4394, 4396, 4397, 4398, 4409, 4411, + 4248, 4257, 4258, 4255, 4256, 4259, 4261, 4262, 4263, 4264, + 4272, 4267, 4269, 5940, 4271, 4277, 4279, 4283, 4284, 4285, + 4286, 4292, 4287, 5940, 4289, 4295, 4296, 4297, 4298, 4299, + 4301, 4309, 4304, 4307, 5940, 4308, 4312, 4320, 4009, 4321, + 5940, 5940, 4313, 4328, 4330, 4318, 4331, 5940, 4322, 4340, + 4335, 4337, 4339, 5940, 5940, 4342, 5940, 4338, 5940, 4343, + 4345, 5940, 5940, 4346, 4349, 4350, 4353, 4360, 5940, 4363, + 5940, 4370, 4365, 4352, 4354, 4367, 5940, 4369, 4371, 4374, + 5940, 4377, 4384, 4379, 4380, 5940, 4382, 4385, 4387, 5940, + 4389, 4392, 4393, 4394, 4399, 4396, 4400, 4403, 4406, 4407, - 4413, 4415, 4416, 4400, 4419, 4420, 4422, 4425, 4426, 4427, - 4429, 4431, 4432, 4434, 4436, 4439, 4440, 4441, 4442, 4443, - 4444, 4446, 4453, 4456, 4458, 4457, 4459, 4461, 4460, 4462, - 4464, 4468, 4470, 4471, 5927, 4469, 4472, 4475, 4402, 4478, - 4488, 4490, 4481, 4497, 4499, 5927, 4501, 5927, 4503, 4489, - 4505, 4491, 5927, 4506, 4509, 4508, 4511, 4512, 4513, 4515, - 4514, 4518, 4519, 4522, 5927, 4525, 4520, 4529, 4540, 5927, - 4532, 4544, 4528, 4535, 4545, 4547, 4548, 4549, 4554, 4550, - 4556, 4558, 4565, 4560, 4561, 4563, 4568, 4551, 4564, 4572, - 4579, 4575, 4583, 4587, 5927, 4580, 5927, 4588, 4589, 4590, + 4409, 4410, 4411, 4422, 4424, 4426, 4428, 4429, 4413, 4432, + 4433, 4435, 4438, 4439, 4440, 4442, 4444, 4445, 4447, 4449, + 4452, 4453, 4454, 4455, 4456, 4457, 4459, 4466, 4469, 4471, + 4470, 4472, 4474, 4473, 4475, 4477, 4481, 4483, 4484, 5940, + 4482, 4485, 4488, 4415, 4491, 4501, 4503, 4494, 4510, 4512, + 5940, 4514, 5940, 4516, 4502, 4518, 4504, 5940, 4519, 4522, + 4521, 4524, 4525, 4526, 4528, 4527, 4531, 4532, 4535, 5940, + 4538, 4533, 4542, 4553, 5940, 4545, 4557, 4541, 4548, 4558, + 4560, 4561, 4562, 4567, 4563, 4569, 4571, 4578, 4573, 4574, + 4576, 4581, 4564, 4577, 4585, 4592, 4588, 4596, 4600, 5940, - 4591, 4593, 4592, 4594, 5927, 5927, 4595, 4600, 4605, 4601, - 4596, 4607, 4617, 5927, 4609, 4618, 4620, 4610, 5927, 4625, - 4626, 4628, 5927, 4629, 4630, 4631, 4633, 4634, 4637, 4638, - 4640, 4642, 4644, 4648, 5927, 5927, 5927, 5927, 4650, 4652, - 4655, 4657, 4659, 4660, 4662, 4664, 4661, 5927, 4666, 5927, - 5927, 4668, 4675, 4667, 4677, 4678, 4679, 4683, 4685, 5927, - 4684, 4689, 4690, 4687, 4697, 4701, 4703, 4704, 4688, 4705, - 4713, 4711, 4714, 4712, 4717, 4719, 4721, 5927, 5927, 4724, - 4726, 4728, 4735, 4733, 4736, 4745, 4740, 4742, 4743, 4746, - 4748, 4730, 4755, 4759, 4757, 4754, 5927, 4758, 4764, 5927, + 4593, 5940, 4601, 4602, 4603, 4604, 4606, 4605, 4607, 5940, + 5940, 4608, 4613, 4618, 4614, 4609, 4620, 4630, 5940, 4622, + 4631, 4633, 4623, 5940, 4638, 4639, 4641, 5940, 4642, 4643, + 4644, 4646, 4647, 4650, 4651, 4653, 4655, 4657, 4661, 5940, + 5940, 5940, 5940, 4663, 4665, 4668, 4670, 4672, 4673, 4675, + 4677, 4674, 5940, 4679, 5940, 5940, 4681, 4688, 4680, 4690, + 4691, 4692, 4696, 4698, 5940, 4697, 4702, 4703, 4700, 4710, + 4714, 4716, 4717, 4701, 4718, 4726, 4724, 4727, 4725, 4730, + 4732, 4734, 5940, 5940, 4737, 4739, 4741, 4748, 4746, 4749, + 4758, 4753, 4755, 4756, 4759, 4761, 4743, 4768, 4772, 4770, - 4760, 5927, 4765, 4768, 4732, 4769, 4771, 4774, 4775, 4777, - 5927, 5927, 4778, 4779, 4781, 4785, 4787, 4789, 4788, 4791, - 4792, 5927, 4793, 5927, 4794, 4801, 4796, 4802, 4810, 4813, - 4815, 4817, 4812, 4818, 5927, 4819, 4821, 5927, 4822, 4824, - 4825, 5927, 4829, 4832, 4836, 5927, 4842, 4833, 4839, 5927, - 4846, 5927, 4843, 4847, 4848, 4855, 5927, 4850, 4856, 5927, - 4859, 4862, 4864, 4853, 5927, 4851, 5927, 4865, 4872, 4873, - 4876, 4868, 4878, 4879, 4880, 4881, 4888, 4887, 4889, 5927, - 5927, 4897, 4884, 4890, 4894, 4899, 4906, 4901, 4904, 4903, - 5927, 5927, 4911, 5927, 4909, 4912, 5927, 4913, 4918, 4919, + 4767, 5940, 4771, 4777, 5940, 4773, 5940, 4778, 4781, 4745, + 4782, 4784, 4787, 4788, 4790, 5940, 5940, 4791, 4792, 4794, + 4798, 4800, 4802, 4801, 4804, 4805, 5940, 4806, 5940, 4807, + 4814, 4809, 4815, 4823, 4826, 4828, 4830, 4825, 4831, 5940, + 4832, 4834, 5940, 4835, 4837, 4838, 5940, 4842, 4845, 4849, + 5940, 4855, 4846, 4852, 5940, 4859, 5940, 4856, 4860, 4861, + 4868, 5940, 4863, 4869, 5940, 4872, 4875, 4877, 4866, 5940, + 4864, 5940, 4878, 4885, 4886, 4889, 4881, 4891, 4892, 4893, + 4894, 4901, 4900, 4902, 5940, 5940, 4910, 4897, 4903, 4907, + 4912, 4919, 4914, 4917, 4916, 5940, 5940, 4924, 5940, 4922, - 4920, 4922, 4923, 4927, 4929, 4930, 4931, 4932, 4933, 4939, - 4951, 4935, 4949, 4955, 4957, 4959, 4961, 4953, 4963, 4964, - 4965, 4966, 4967, 4970, 5927, 4972, 4973, 4974, 5927, 4978, - 4979, 4981, 4983, 5927, 4994, 4989, 4995, 4996, 5927, 4982, - 5002, 4999, 4997, 5007, 5014, 5010, 5009, 5927, 5927, 5927, - 5011, 5020, 5927, 5025, 5012, 5015, 5017, 5927, 5021, 5027, - 5927, 5927, 5028, 5029, 5031, 5042, 5927, 5032, 5927, 5033, - 5927, 5041, 5043, 5049, 5047, 5927, 5052, 5058, 5927, 5061, - 5064, 5066, 5067, 5055, 5068, 5069, 5927, 5077, 5073, 5079, - 5081, 5070, 5072, 5085, 5082, 5089, 5086, 5092, 5927, 5094, + 4925, 5940, 4926, 4931, 4932, 4933, 4935, 4936, 4940, 4942, + 4943, 4944, 4945, 4946, 4952, 4964, 4948, 4962, 4968, 4970, + 4972, 4974, 4966, 4976, 4977, 4978, 4979, 4980, 4983, 5940, + 4985, 4986, 4987, 5940, 4991, 4992, 4994, 4996, 5940, 5007, + 5002, 5008, 5009, 5940, 4995, 5015, 5012, 5010, 5020, 5027, + 5023, 5022, 5940, 5940, 5940, 5024, 5033, 5940, 5038, 5025, + 5028, 5030, 5940, 5034, 5040, 5940, 5940, 5041, 5042, 5044, + 5055, 5940, 5045, 5940, 5046, 5940, 5054, 5056, 5062, 5060, + 5940, 5065, 5071, 5940, 5074, 5077, 5079, 5080, 5068, 5081, + 5082, 5940, 5090, 5086, 5092, 5094, 5083, 5085, 5098, 5095, - 5096, 5097, 5103, 5095, 5105, 5099, 5927, 5107, 5927, 5108, - 5109, 5112, 5115, 5110, 5113, 5037, 5118, 5117, 5128, 5125, - 5927, 5130, 5134, 5927, 5131, 5927, 5136, 5927, 5137, 5138, - 5139, 5140, 5927, 5142, 5146, 5147, 5148, 5927, 5149, 5151, - 5157, 5927, 5927, 5158, 5168, 5159, 5160, 5172, 5174, 5161, - 5176, 5169, 5177, 5163, 5185, 5184, 5187, 5188, 5190, 5191, - 5192, 5927, 5927, 5927, 5197, 5196, 5204, 5201, 5202, 5212, - 5207, 5927, 5210, 5213, 5211, 5220, 5217, 5222, 5927, 5219, - 5223, 5224, 5226, 5228, 5229, 5233, 5927, 5237, 5244, 5240, - 5232, 5247, 5251, 5254, 5256, 5257, 5927, 5259, 5927, 5927, + 5102, 5099, 5105, 5940, 5107, 5109, 5110, 5116, 5108, 5118, + 5112, 5940, 5120, 5940, 5121, 5122, 5125, 5128, 5123, 5126, + 5050, 5131, 5130, 5141, 5138, 5940, 5143, 5147, 5940, 5144, + 5940, 5149, 5940, 5150, 5151, 5152, 5153, 5940, 5155, 5159, + 5160, 5161, 5940, 5162, 5164, 5170, 5940, 5940, 5171, 5181, + 5172, 5173, 5185, 5187, 5174, 5189, 5182, 5190, 5176, 5198, + 5197, 5200, 5201, 5203, 5204, 5205, 5940, 5940, 5940, 5210, + 5209, 5217, 5214, 5215, 5225, 5220, 5940, 5223, 5226, 5224, + 5233, 5230, 5235, 5940, 5232, 5236, 5237, 5239, 5241, 5242, + 5246, 5940, 5250, 5257, 5253, 5245, 5260, 5264, 5267, 5269, - 5260, 5927, 5261, 5263, 5264, 5265, 5927, 5268, 5270, 5269, - 5271, 5273, 5927, 5281, 5274, 5276, 5277, 5927, 5927, 5288, - 5927, 5291, 5292, 5293, 5302, 5298, 5300, 5304, 5301, 5927, - 5299, 5305, 5309, 5311, 5312, 5927, 5313, 5315, 5316, 5317, - 5320, 5324, 5326, 5327, 5328, 5927, 5330, 5322, 5345, 5341, - 5927, 5329, 5347, 5927, 5927, 5332, 5351, 5352, 5927, 5927, - 5927, 5354, 5927, 5358, 5364, 5368, 5372, 5355, 5927, 5374, - 5363, 5371, 5927, 5367, 5375, 5377, 5379, 5927, 5927, 5376, - 5383, 5380, 5388, 5389, 5927, 5391, 5393, 5398, 5406, 5408, - 5396, 5410, 5412, 5419, 5392, 5400, 5414, 5416, 5417, 5423, + 5270, 5940, 5272, 5940, 5940, 5273, 5940, 5274, 5276, 5277, + 5278, 5940, 5281, 5283, 5282, 5284, 5286, 5940, 5294, 5287, + 5289, 5290, 5940, 5940, 5301, 5940, 5304, 5305, 5306, 5315, + 5311, 5313, 5317, 5314, 5940, 5312, 5318, 5322, 5324, 5325, + 5940, 5326, 5328, 5329, 5330, 5333, 5337, 5339, 5340, 5341, + 5940, 5343, 5335, 5358, 5354, 5940, 5342, 5360, 5940, 5940, + 5345, 5364, 5365, 5940, 5940, 5940, 5367, 5940, 5371, 5377, + 5381, 5385, 5368, 5940, 5387, 5376, 5384, 5940, 5380, 5388, + 5390, 5392, 5940, 5940, 5389, 5396, 5393, 5401, 5402, 5940, + 5404, 5406, 5411, 5419, 5421, 5409, 5423, 5425, 5432, 5405, - 5420, 5427, 5436, 5432, 5434, 5441, 5442, 5927, 5927, 5444, - 5927, 5927, 5446, 5449, 5451, 5453, 5455, 5457, 5459, 5927, - 5394, 5461, 5462, 5463, 5464, 5927, 5466, 5468, 5465, 5469, - 5474, 5472, 5476, 5478, 5927, 5927, 5470, 5487, 5479, 5492, - 5481, 5927, 5494, 5489, 5495, 5496, 5498, 5500, 5503, 5927, - 5502, 5504, 5927, 5927, 5506, 5927, 5927, 5927, 5927, 5927, - 5927, 5927, 5927, 5507, 5927, 5511, 5515, 5523, 5526, 5927, - 5512, 5520, 5431, 5516, 5527, 5927, 5528, 5531, 5532, 5538, - 5530, 5533, 5539, 5543, 5546, 5544, 5547, 5548, 5549, 5553, - 5550, 5554, 5556, 5927, 5927, 5927, 5555, 5557, 5567, 5559, + 5413, 5427, 5429, 5430, 5436, 5433, 5440, 5449, 5445, 5447, + 5454, 5455, 5940, 5940, 5457, 5940, 5940, 5459, 5462, 5464, + 5466, 5468, 5470, 5472, 5940, 5407, 5474, 5475, 5476, 5477, + 5940, 5479, 5481, 5478, 5482, 5487, 5485, 5489, 5491, 5940, + 5940, 5483, 5500, 5492, 5505, 5494, 5940, 5507, 5502, 5508, + 5509, 5511, 5513, 5516, 5940, 5515, 5517, 5940, 5940, 5519, + 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5520, 5940, + 5524, 5528, 5536, 5539, 5940, 5525, 5533, 5444, 5529, 5540, + 5940, 5541, 5544, 5545, 5551, 5543, 5546, 5552, 5556, 5559, + 5557, 5560, 5561, 5562, 5566, 5563, 5567, 5569, 5940, 5940, - 5576, 5578, 5581, 5583, 5570, 5573, 5584, 5585, 5586, 5588, - 5592, 5600, 5595, 5596, 5597, 5598, 5604, 5599, 5601, 5606, - 5927, 5610, 5927, 5611, 5927, 5927, 5616, 5621, 5619, 5612, - 5623, 5630, 5626, 5628, 5632, 5633, 5635, 5637, 5927, 5639, - 5642, 5927, 5643, 5644, 5927, 5645, 5647, 5649, 5646, 5650, - 5653, 5656, 5664, 5655, 5927, 5927, 5658, 5666, 5667, 5671, - 5674, 5681, 5676, 5680, 5682, 5683, 5673, 5695, 5927, 5691, - 5693, 5697, 5927, 5699, 5694, 5700, 5701, 5702, 5710, 5705, - 5706, 5927, 5708, 5927, 5712, 5714, 5717, 5715, 5716, 5718, - 5727, 5725, 5729, 5927, 5732, 5736, 5733, 5738, 5740, 5743, + 5940, 5568, 5570, 5580, 5572, 5589, 5591, 5594, 5596, 5583, + 5586, 5597, 5598, 5599, 5601, 5605, 5613, 5608, 5609, 5610, + 5611, 5617, 5612, 5614, 5619, 5940, 5623, 5940, 5624, 5940, + 5940, 5629, 5634, 5632, 5625, 5636, 5643, 5639, 5641, 5645, + 5646, 5648, 5650, 5940, 5652, 5655, 5940, 5656, 5657, 5940, + 5658, 5660, 5662, 5659, 5663, 5666, 5669, 5677, 5668, 5940, + 5940, 5671, 5679, 5680, 5684, 5687, 5694, 5689, 5693, 5695, + 5696, 5686, 5708, 5940, 5704, 5706, 5710, 5940, 5712, 5707, + 5713, 5714, 5715, 5723, 5718, 5719, 5940, 5721, 5940, 5725, + 5727, 5730, 5728, 5729, 5731, 5740, 5738, 5742, 5940, 5745, - 5744, 5745, 5747, 5749, 5753, 5757, 5759, 5760, 5750, 5763, - 5761, 5927, 5771, 5762, 5927, 5772, 5773, 5765, 5774, 5775, - 5927, 5783, 5779, 5785, 5786, 5789, 5790, 5927, 5792, 5795, - 5796, 5927, 5800, 5927, 5927, 5801, 5799, 5802, 5808, 5810, - 5927, 5927, 5927, 5835, 5842, 5849, 5856, 5863, 88, 5870, - 5877, 5884, 5891, 5898, 5905, 5912, 5919 + 5749, 5746, 5751, 5753, 5756, 5757, 5758, 5760, 5762, 5766, + 5770, 5772, 5773, 5763, 5776, 5774, 5940, 5784, 5775, 5940, + 5785, 5786, 5778, 5787, 5788, 5940, 5796, 5792, 5798, 5799, + 5802, 5803, 5940, 5805, 5808, 5809, 5940, 5813, 5940, 5940, + 5814, 5812, 5815, 5821, 5823, 5940, 5940, 5940, 5848, 5855, + 5862, 5869, 5876, 88, 5883, 5890, 5897, 5904, 5911, 5918, + 5925, 5932 } ; -static const flex_int16_t yy_def[3058] = +static yyconst flex_int16_t yy_def[3063] = { 0, - 3043, 1, 3044, 3044, 3045, 3045, 3046, 3046, 3047, 3047, - 3048, 3048, 3043, 3049, 3043, 3043, 3043, 3043, 3050, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3051, 3043, 3043, 3043, 3051, 3052, 3043, 3043, - 3043, 3052, 3053, 3043, 3043, 3043, 3043, 3053, 3054, 3043, - 3043, 3043, 3054, 3055, 3043, 3056, 3043, 3055, 3055, 3049, - 3049, 3043, 3057, 3050, 3057, 3050, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3048, 1, 3049, 3049, 3050, 3050, 3051, 3051, 3052, 3052, + 3053, 3053, 3048, 3054, 3048, 3048, 3048, 3048, 3055, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3056, 3048, 3048, 3048, 3056, 3057, 3048, 3048, + 3048, 3057, 3058, 3048, 3048, 3048, 3048, 3058, 3059, 3048, + 3048, 3048, 3059, 3060, 3048, 3061, 3048, 3060, 3060, 3054, + 3054, 3048, 3062, 3055, 3062, 3055, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3051, 3051, 3052, 3052, 3053, 3053, 3043, 3054, 3054, 3055, - 3055, 3056, 3056, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3056, 3056, 3057, 3057, 3058, 3058, 3048, 3059, 3059, 3060, + 3060, 3061, 3061, 3060, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3055, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3060, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3043, 3043, 3049, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3060, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3048, 3054, 3048, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3060, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3055, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3048, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3043, 3049, 3043, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3048, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3043, 3049, 3043, 3049, 3049, 3049, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3043, - 3049, 3043, 3049, 3043, 3049, 3049, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3048, 3048, 3054, 3048, 3054, 3048, 3054, + 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3043, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3048, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3048, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3043, - 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3043, 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, + 3054, 3048, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3048, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3048, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3043, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3043, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, - 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3048, 3048, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3048, 3048, 3054, 3054, 3054, + 3054, 3048, 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3043, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3043, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, + 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3043, 3043, - 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, + 3054, 3048, 3054, 3048, 3048, 3054, 3048, 3054, 3054, 3054, + 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3048, 3048, 3054, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3048, + 3054, 3054, 3054, 3048, 3048, 3048, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3043, 3043, 3049, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3043, 3043, 3049, 3049, 3049, 3049, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3048, 3054, 3048, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3048, 3054, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3054, 3048, + 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3043, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3048, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3043, 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, - 3043, 3043, 0, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043 + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, + 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, + 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3048, 3048, + 3054, 3054, 3054, 3054, 3054, 3048, 3048, 0, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048 } ; -static const flex_int16_t yy_nxt[5968] = +static yyconst flex_int16_t yy_nxt[5981] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1475,614 +1486,615 @@ static const flex_int16_t yy_nxt[5968] = 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, - 281, 71, 282, 283, 71, 71, 71, 290, 71, 288, - 289, 285, 291, 284, 286, 71, 71, 280, 71, 287, - 294, 297, 71, 298, 292, 299, 293, 71, 295, 301, + 281, 71, 282, 283, 71, 71, 71, 71, 71, 288, + 289, 285, 295, 284, 286, 71, 299, 280, 71, 287, + 71, 290, 297, 298, 291, 300, 292, 302, 296, 71, - 303, 71, 296, 304, 71, 71, 71, 300, 302, 71, - 307, 71, 71, 309, 310, 71, 71, 308, 305, 71, - 71, 71, 311, 71, 312, 306, 71, 313, 71, 71, - 71, 71, 315, 71, 71, 319, 71, 317, 71, 71, - 324, 71, 320, 314, 318, 325, 71, 71, 71, 321, - 316, 328, 322, 326, 330, 71, 333, 327, 323, 71, - 71, 71, 71, 329, 71, 71, 335, 336, 71, 71, - 339, 340, 342, 331, 332, 338, 71, 71, 71, 334, - 71, 71, 71, 337, 71, 345, 346, 71, 341, 71, - 347, 349, 343, 71, 353, 344, 71, 71, 71, 151, + 71, 71, 71, 71, 71, 304, 305, 301, 293, 307, + 294, 71, 71, 308, 71, 313, 146, 71, 310, 71, + 303, 306, 309, 311, 71, 71, 317, 71, 71, 71, + 71, 71, 312, 314, 315, 71, 316, 71, 71, 318, + 320, 319, 71, 71, 325, 71, 321, 71, 71, 326, + 71, 71, 327, 322, 331, 329, 71, 71, 323, 334, + 71, 71, 71, 324, 71, 71, 328, 330, 71, 336, + 337, 71, 71, 340, 332, 333, 341, 335, 339, 71, + 338, 342, 71, 343, 344, 71, 71, 346, 348, 71, + 347, 71, 350, 71, 71, 71, 71, 351, 71, 345, - 350, 71, 71, 71, 71, 352, 71, 360, 358, 356, - 361, 354, 355, 71, 348, 71, 71, 351, 71, 364, - 362, 365, 357, 363, 71, 71, 71, 359, 71, 71, - 71, 71, 71, 371, 372, 71, 374, 369, 366, 71, - 71, 71, 368, 373, 367, 375, 71, 377, 71, 71, - 376, 71, 378, 71, 71, 370, 379, 381, 71, 71, - 384, 71, 382, 386, 380, 388, 71, 385, 383, 71, - 71, 71, 387, 71, 71, 391, 71, 389, 393, 71, - 71, 392, 396, 71, 71, 71, 398, 71, 71, 71, - 399, 71, 71, 401, 390, 71, 397, 408, 395, 394, + 71, 354, 71, 151, 71, 71, 71, 361, 144, 71, + 357, 359, 349, 71, 352, 355, 353, 362, 71, 356, + 71, 71, 71, 71, 358, 363, 364, 365, 360, 71, + 71, 71, 367, 71, 371, 372, 71, 366, 374, 370, + 71, 71, 71, 373, 369, 71, 375, 368, 376, 71, + 378, 71, 71, 379, 71, 71, 71, 71, 382, 71, + 377, 383, 71, 385, 71, 71, 387, 388, 384, 71, + 380, 381, 71, 389, 71, 71, 386, 71, 390, 71, + 71, 392, 393, 394, 395, 71, 71, 71, 399, 71, + 71, 71, 71, 396, 400, 391, 402, 71, 71, 398, - 71, 403, 71, 71, 71, 405, 400, 407, 71, 402, - 404, 409, 71, 71, 71, 71, 410, 71, 420, 419, - 421, 417, 406, 71, 71, 71, 71, 423, 426, 427, - 424, 418, 411, 428, 71, 412, 422, 425, 429, 71, - 413, 414, 415, 416, 71, 71, 71, 430, 71, 436, - 71, 431, 71, 71, 432, 434, 71, 435, 437, 71, - 433, 71, 438, 71, 440, 71, 71, 439, 441, 445, - 71, 71, 446, 71, 447, 71, 71, 463, 450, 71, - 451, 444, 442, 448, 452, 443, 71, 71, 71, 71, - 449, 455, 453, 456, 71, 71, 464, 458, 454, 465, + 71, 71, 405, 71, 71, 410, 397, 407, 401, 71, + 409, 71, 411, 71, 71, 71, 403, 71, 404, 438, + 71, 406, 421, 419, 408, 412, 71, 71, 71, 71, + 422, 425, 423, 420, 430, 413, 142, 71, 414, 431, + 71, 71, 426, 415, 416, 417, 418, 71, 424, 427, + 71, 71, 428, 429, 432, 71, 71, 71, 433, 71, + 440, 434, 435, 71, 436, 437, 71, 71, 439, 71, + 71, 442, 441, 71, 71, 447, 71, 465, 453, 443, + 71, 71, 71, 448, 71, 449, 71, 71, 444, 446, + 445, 452, 454, 451, 450, 71, 71, 71, 71, 457, - 71, 71, 71, 457, 462, 71, 466, 71, 467, 71, - 459, 71, 71, 460, 468, 461, 71, 71, 469, 71, - 482, 71, 479, 71, 517, 71, 470, 71, 471, 477, - 472, 480, 478, 481, 493, 484, 483, 151, 492, 494, - 71, 71, 71, 473, 495, 71, 474, 496, 475, 71, - 476, 71, 71, 485, 486, 71, 502, 499, 497, 498, - 71, 500, 71, 487, 71, 488, 489, 490, 501, 506, - 491, 71, 71, 71, 71, 71, 71, 71, 505, 507, - 504, 503, 512, 71, 514, 71, 515, 71, 71, 511, - 71, 513, 509, 510, 508, 71, 519, 523, 524, 71, + 455, 458, 71, 466, 71, 460, 456, 464, 71, 71, + 71, 459, 467, 71, 71, 468, 71, 71, 461, 469, + 71, 462, 483, 463, 479, 470, 71, 71, 71, 471, + 71, 484, 481, 732, 486, 480, 71, 472, 71, 473, + 71, 474, 482, 71, 71, 494, 496, 485, 151, 495, + 498, 497, 71, 71, 475, 500, 71, 476, 501, 477, + 504, 478, 71, 71, 487, 488, 71, 71, 71, 499, + 71, 71, 502, 71, 489, 503, 490, 491, 492, 505, + 508, 493, 507, 71, 71, 71, 71, 506, 513, 514, + 509, 511, 516, 510, 71, 517, 71, 71, 71, 71, - 71, 518, 71, 516, 522, 71, 71, 71, 71, 534, - 71, 521, 71, 520, 529, 71, 71, 71, 71, 531, - 532, 71, 526, 527, 528, 525, 71, 71, 146, 71, - 71, 71, 530, 536, 71, 533, 535, 537, 540, 543, - 71, 539, 71, 546, 538, 544, 545, 547, 71, 541, - 71, 542, 548, 71, 549, 71, 71, 71, 553, 550, - 71, 551, 555, 71, 71, 71, 71, 558, 559, 556, - 552, 71, 71, 554, 71, 560, 71, 71, 557, 71, - 71, 565, 563, 71, 564, 71, 71, 561, 71, 566, - 71, 71, 71, 571, 71, 567, 572, 562, 71, 574, + 515, 521, 71, 512, 71, 71, 71, 71, 71, 519, + 524, 525, 526, 520, 71, 71, 518, 71, 71, 531, + 523, 71, 71, 536, 528, 533, 527, 522, 71, 71, + 71, 529, 530, 534, 71, 71, 71, 532, 71, 71, + 71, 546, 71, 547, 71, 538, 71, 537, 535, 542, + 539, 545, 541, 540, 71, 548, 71, 549, 71, 553, + 543, 151, 544, 71, 551, 550, 71, 71, 71, 556, + 552, 71, 554, 71, 555, 558, 71, 71, 559, 71, + 561, 562, 71, 71, 557, 71, 563, 71, 71, 71, + 560, 71, 568, 566, 567, 71, 71, 71, 564, 71, - 570, 71, 71, 573, 569, 568, 575, 71, 577, 71, - 579, 71, 71, 71, 71, 576, 71, 71, 71, 71, - 581, 589, 582, 591, 578, 71, 71, 71, 584, 71, - 71, 592, 580, 588, 583, 585, 71, 586, 587, 590, - 71, 71, 71, 71, 596, 600, 599, 602, 594, 71, - 593, 595, 71, 71, 71, 71, 597, 601, 598, 71, - 605, 71, 71, 604, 71, 71, 608, 71, 71, 609, - 71, 603, 611, 71, 71, 71, 71, 71, 71, 625, - 610, 606, 607, 71, 612, 71, 614, 634, 144, 613, - 71, 615, 624, 71, 623, 626, 616, 628, 617, 627, + 569, 71, 71, 71, 574, 71, 565, 570, 578, 575, + 71, 573, 71, 577, 576, 572, 571, 71, 580, 71, + 71, 582, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 579, 584, 592, 585, 587, 594, 71, 593, 71, + 71, 581, 71, 583, 591, 588, 586, 589, 590, 71, + 71, 596, 71, 71, 595, 599, 71, 602, 597, 71, + 603, 598, 604, 71, 605, 71, 71, 600, 71, 71, + 71, 601, 71, 608, 71, 71, 611, 71, 71, 607, + 612, 71, 614, 71, 71, 71, 644, 610, 606, 613, + 71, 609, 71, 71, 615, 71, 617, 628, 71, 631, - 631, 71, 71, 71, 618, 71, 619, 629, 632, 620, - 621, 630, 635, 71, 71, 71, 622, 633, 71, 71, - 71, 637, 638, 636, 71, 641, 71, 643, 71, 71, - 71, 71, 71, 71, 640, 644, 639, 649, 71, 71, - 642, 645, 650, 646, 71, 71, 71, 151, 71, 647, - 653, 655, 656, 648, 652, 654, 71, 651, 71, 71, - 657, 71, 71, 71, 659, 71, 71, 663, 665, 71, - 71, 658, 71, 660, 667, 71, 661, 666, 664, 668, - 662, 670, 669, 71, 671, 71, 672, 71, 71, 71, - 71, 71, 71, 71, 676, 675, 71, 71, 684, 71, + 616, 71, 618, 71, 626, 627, 71, 619, 632, 620, + 71, 629, 633, 71, 630, 621, 71, 622, 635, 71, + 623, 624, 636, 638, 71, 634, 71, 625, 637, 71, + 71, 71, 640, 641, 639, 71, 646, 71, 71, 71, + 71, 71, 71, 71, 149, 71, 643, 642, 652, 71, + 648, 653, 647, 71, 649, 656, 645, 71, 151, 650, + 71, 659, 658, 651, 654, 71, 657, 71, 655, 71, + 71, 71, 660, 71, 71, 71, 71, 668, 666, 71, + 661, 670, 71, 71, 663, 71, 664, 669, 662, 667, + 671, 665, 673, 71, 71, 672, 71, 674, 71, 71, - 681, 677, 673, 71, 674, 682, 71, 807, 678, 680, - 683, 679, 685, 71, 686, 687, 71, 688, 71, 689, - 71, 71, 71, 71, 690, 71, 691, 692, 71, 71, - 71, 71, 695, 71, 71, 696, 694, 700, 699, 71, - 693, 71, 71, 71, 71, 701, 71, 703, 71, 705, - 71, 706, 698, 71, 697, 71, 708, 702, 71, 712, - 71, 709, 707, 71, 704, 710, 71, 71, 711, 71, - 718, 714, 715, 71, 71, 71, 71, 716, 713, 721, - 71, 71, 719, 720, 717, 71, 723, 71, 724, 71, - 726, 71, 725, 71, 71, 71, 732, 71, 728, 730, + 71, 71, 675, 71, 679, 678, 71, 676, 71, 677, + 684, 695, 680, 71, 71, 685, 71, 687, 71, 681, + 688, 71, 682, 689, 683, 71, 686, 690, 71, 71, + 691, 71, 692, 71, 71, 693, 694, 71, 71, 71, + 698, 71, 697, 71, 696, 71, 699, 702, 703, 71, + 71, 71, 71, 704, 71, 708, 706, 71, 71, 71, + 147, 71, 700, 709, 701, 71, 71, 71, 705, 711, + 71, 710, 707, 71, 712, 71, 715, 714, 713, 71, + 71, 720, 71, 716, 718, 719, 717, 722, 721, 71, + 71, 723, 724, 71, 725, 71, 71, 71, 71, 728, - 71, 722, 71, 71, 71, 71, 729, 727, 738, 733, - 71, 71, 71, 736, 71, 731, 739, 737, 71, 735, - 71, 734, 864, 740, 741, 742, 71, 71, 71, 743, - 745, 747, 746, 744, 71, 749, 71, 71, 71, 748, - 71, 71, 71, 750, 752, 71, 758, 751, 71, 753, - 71, 754, 71, 71, 71, 756, 757, 71, 755, 761, - 71, 763, 760, 71, 71, 71, 767, 759, 765, 71, - 764, 71, 71, 770, 769, 71, 768, 762, 771, 71, - 71, 772, 71, 766, 774, 71, 71, 776, 71, 71, - 71, 71, 782, 71, 775, 71, 773, 783, 71, 71, + 727, 71, 729, 71, 71, 71, 736, 71, 734, 71, + 71, 71, 71, 71, 730, 146, 726, 733, 737, 731, + 71, 740, 742, 71, 71, 735, 744, 739, 71, 738, + 743, 749, 741, 745, 746, 71, 71, 71, 747, 71, + 751, 753, 748, 71, 71, 71, 71, 71, 752, 71, + 755, 756, 754, 750, 71, 71, 757, 71, 71, 762, + 71, 71, 71, 760, 761, 71, 765, 758, 759, 764, + 71, 767, 71, 71, 771, 71, 769, 763, 71, 768, + 71, 71, 766, 773, 774, 71, 776, 772, 71, 775, + 71, 770, 71, 71, 778, 780, 71, 71, 71, 71, - 71, 71, 71, 71, 777, 71, 778, 779, 784, 780, - 785, 781, 71, 71, 791, 786, 71, 789, 790, 787, - 71, 788, 71, 71, 71, 793, 792, 796, 71, 71, - 71, 71, 71, 71, 804, 794, 71, 71, 71, 71, - 805, 795, 797, 71, 798, 142, 803, 799, 800, 801, - 802, 71, 808, 71, 71, 810, 806, 71, 809, 71, - 71, 813, 811, 71, 812, 814, 815, 71, 816, 71, - 71, 71, 817, 71, 71, 818, 819, 71, 151, 820, - 825, 71, 822, 824, 71, 821, 823, 71, 826, 71, - 71, 71, 832, 71, 71, 827, 828, 71, 833, 835, + 71, 71, 786, 71, 71, 787, 777, 779, 71, 71, + 71, 71, 788, 71, 781, 782, 783, 71, 784, 789, + 785, 795, 71, 71, 790, 793, 71, 71, 791, 71, + 792, 71, 794, 71, 71, 797, 796, 800, 71, 71, + 71, 71, 71, 808, 71, 798, 71, 71, 799, 801, + 802, 809, 71, 71, 71, 807, 803, 804, 805, 806, + 812, 71, 71, 810, 811, 71, 813, 71, 814, 71, + 71, 71, 817, 815, 818, 816, 820, 819, 71, 71, + 71, 71, 71, 821, 71, 822, 823, 151, 71, 824, + 71, 826, 828, 829, 71, 825, 827, 71, 830, 71, - 71, 71, 838, 836, 829, 830, 834, 71, 71, 71, - 71, 831, 71, 840, 71, 844, 71, 71, 71, 71, - 837, 71, 841, 71, 845, 846, 71, 839, 71, 71, - 71, 71, 843, 71, 859, 847, 71, 842, 71, 858, - 861, 856, 71, 849, 848, 71, 857, 860, 71, 862, - 850, 71, 863, 867, 851, 71, 865, 852, 71, 71, - 868, 71, 71, 876, 853, 854, 71, 855, 71, 866, - 71, 869, 870, 71, 871, 882, 880, 872, 71, 878, - 877, 151, 873, 881, 71, 71, 883, 879, 874, 875, - 71, 885, 71, 884, 71, 71, 71, 886, 887, 888, + 71, 71, 831, 836, 71, 71, 832, 71, 837, 839, + 71, 71, 842, 71, 833, 834, 838, 71, 71, 71, + 840, 835, 71, 844, 841, 71, 848, 71, 71, 845, + 71, 71, 71, 843, 71, 849, 71, 850, 71, 71, + 144, 71, 71, 847, 71, 865, 851, 846, 862, 71, + 863, 860, 71, 866, 853, 861, 852, 71, 864, 71, + 867, 71, 854, 71, 71, 872, 855, 869, 71, 856, + 71, 71, 868, 880, 71, 71, 857, 858, 870, 859, + 71, 885, 71, 871, 71, 873, 874, 71, 875, 71, + 884, 876, 71, 882, 949, 881, 877, 71, 887, 886, - 71, 71, 889, 71, 71, 71, 71, 892, 890, 71, - 896, 71, 71, 895, 71, 71, 899, 71, 71, 71, - 891, 903, 905, 71, 893, 894, 897, 71, 898, 901, - 900, 71, 906, 934, 71, 909, 904, 907, 71, 908, - 902, 71, 910, 71, 71, 912, 913, 71, 71, 911, - 71, 71, 71, 914, 916, 71, 917, 71, 915, 71, - 918, 71, 71, 71, 923, 71, 920, 71, 926, 921, - 71, 71, 71, 71, 71, 71, 924, 919, 925, 71, - 71, 928, 922, 71, 929, 930, 932, 71, 931, 71, - 927, 71, 933, 71, 940, 71, 71, 71, 935, 938, + 71, 889, 878, 879, 888, 883, 71, 71, 71, 71, + 891, 890, 71, 892, 893, 71, 71, 71, 894, 71, + 71, 895, 71, 897, 71, 901, 71, 71, 71, 71, + 900, 896, 71, 904, 71, 71, 71, 898, 908, 899, + 909, 902, 903, 926, 71, 905, 906, 910, 71, 911, + 914, 907, 71, 915, 912, 71, 71, 913, 71, 71, + 917, 71, 71, 916, 918, 71, 71, 71, 919, 921, + 71, 922, 71, 920, 71, 923, 71, 71, 928, 71, + 71, 925, 71, 71, 71, 931, 71, 71, 71, 929, + 930, 71, 924, 933, 71, 934, 927, 936, 71, 935, - 936, 71, 937, 71, 939, 71, 943, 71, 71, 947, - 941, 945, 948, 71, 71, 942, 71, 71, 71, 946, - 71, 950, 71, 71, 949, 944, 71, 71, 71, 71, - 961, 956, 958, 71, 71, 951, 71, 952, 953, 71, - 71, 71, 954, 955, 71, 959, 963, 71, 960, 957, - 962, 71, 964, 965, 967, 71, 971, 966, 969, 71, - 968, 71, 71, 71, 970, 71, 71, 978, 71, 980, - 973, 71, 71, 71, 982, 71, 983, 71, 71, 71, - 71, 972, 71, 974, 988, 976, 979, 975, 977, 71, - 986, 981, 71, 984, 71, 990, 985, 991, 987, 71, + 71, 937, 932, 71, 71, 938, 71, 71, 945, 943, + 71, 71, 940, 941, 944, 71, 71, 939, 71, 942, + 71, 71, 71, 950, 952, 946, 955, 948, 953, 71, + 947, 951, 71, 71, 71, 71, 71, 954, 71, 71, + 71, 71, 961, 966, 963, 71, 71, 71, 142, 71, + 71, 71, 71, 956, 957, 958, 967, 971, 959, 960, + 965, 962, 968, 964, 71, 969, 970, 71, 974, 71, + 71, 71, 973, 71, 71, 71, 71, 71, 972, 71, + 976, 983, 978, 71, 71, 985, 987, 71, 988, 71, + 975, 71, 71, 977, 71, 979, 981, 984, 980, 982, - 71, 71, 992, 71, 995, 71, 997, 71, 71, 71, - 71, 71, 71, 989, 994, 71, 999, 71, 993, 1000, - 151, 1002, 71, 1003, 1001, 996, 998, 71, 71, 71, - 71, 71, 1006, 71, 1004, 1005, 71, 1018, 71, 1021, - 71, 71, 1019, 71, 1009, 71, 71, 1007, 71, 1023, - 71, 1010, 71, 1008, 1011, 71, 1020, 1026, 1012, 71, - 1013, 1024, 1025, 71, 1014, 1033, 1015, 71, 1022, 1028, - 71, 1016, 71, 1027, 1029, 71, 1017, 1030, 71, 1036, - 71, 71, 1031, 71, 1038, 1034, 1037, 1044, 71, 71, - 71, 71, 1042, 1039, 1032, 1035, 1041, 1040, 71, 1043, + 71, 71, 71, 71, 986, 989, 71, 993, 990, 71, + 995, 996, 991, 71, 71, 1000, 997, 71, 71, 999, + 992, 71, 1002, 71, 994, 71, 71, 1005, 151, 71, + 71, 1004, 998, 71, 1007, 71, 1008, 71, 1001, 71, + 71, 71, 71, 1003, 1006, 1011, 71, 71, 71, 1023, + 71, 71, 71, 71, 1024, 1009, 1014, 1010, 1012, 1026, + 71, 1068, 71, 1049, 71, 1013, 1015, 1025, 1016, 71, + 71, 71, 1017, 71, 1018, 1028, 1027, 1029, 1019, 71, + 1020, 71, 71, 1033, 1030, 1021, 1031, 1032, 1034, 71, + 1022, 71, 71, 1035, 71, 1036, 71, 1038, 71, 1039, - 71, 1045, 1046, 71, 71, 71, 71, 71, 71, 1058, - 1048, 1047, 71, 71, 1061, 1057, 71, 71, 1049, 71, - 1050, 1059, 1062, 71, 1060, 1051, 149, 1052, 71, 71, - 1064, 1063, 71, 1053, 1067, 71, 1068, 1069, 1054, 1055, - 71, 71, 71, 71, 1070, 1056, 1073, 1065, 1066, 71, - 71, 71, 71, 71, 1074, 1072, 71, 1079, 71, 1071, - 1076, 71, 1077, 71, 71, 71, 71, 1080, 71, 1075, - 1082, 71, 1078, 71, 71, 1091, 71, 71, 71, 1089, - 1081, 71, 1084, 1086, 1083, 1087, 1085, 1088, 71, 71, - 71, 1090, 71, 1092, 71, 71, 71, 71, 71, 71, + 71, 1042, 71, 71, 1041, 71, 71, 1037, 1047, 1040, + 1050, 1046, 1043, 1048, 71, 71, 1045, 1051, 71, 71, + 71, 1044, 71, 71, 1054, 1052, 71, 1063, 71, 71, + 71, 1066, 1062, 1067, 71, 71, 71, 1053, 71, 1055, + 1064, 1065, 1072, 71, 1056, 71, 1057, 1074, 1069, 1073, + 71, 71, 1058, 71, 1070, 1071, 71, 1059, 1060, 1075, + 71, 1078, 71, 71, 1061, 71, 71, 71, 1079, 1076, + 1080, 1081, 1084, 1077, 1082, 71, 71, 71, 71, 71, + 71, 71, 1083, 71, 1085, 1087, 71, 71, 71, 71, + 71, 71, 1092, 1089, 1094, 1086, 1093, 1088, 1091, 1096, - 71, 1099, 1093, 1100, 1096, 1101, 1102, 71, 1103, 1094, - 1098, 1095, 1097, 1104, 71, 1106, 1107, 71, 71, 71, - 1111, 1108, 71, 71, 71, 1109, 71, 1105, 1110, 71, - 71, 1117, 1112, 71, 1119, 71, 71, 71, 71, 71, - 71, 1121, 1115, 1113, 1114, 1116, 71, 71, 147, 1123, - 1120, 71, 1122, 1118, 71, 71, 1125, 71, 71, 1126, - 1124, 71, 1128, 1127, 1131, 71, 1129, 1130, 71, 1134, - 1135, 71, 71, 71, 1133, 71, 71, 71, 1139, 1138, - 71, 1132, 1136, 71, 71, 71, 71, 1145, 1143, 1146, - 1137, 71, 71, 71, 71, 71, 1147, 1148, 1140, 1144, + 71, 1090, 71, 71, 1098, 71, 1095, 1097, 71, 71, + 71, 71, 71, 71, 71, 1104, 1105, 1101, 1106, 1109, + 1099, 1100, 71, 1107, 1103, 71, 1102, 71, 1108, 71, + 71, 1112, 71, 1116, 71, 1110, 1113, 71, 71, 1114, + 71, 1122, 1115, 71, 71, 1111, 1117, 71, 71, 1124, + 71, 71, 71, 71, 1118, 71, 1120, 1126, 1119, 1121, + 71, 71, 71, 1128, 71, 1125, 1130, 1127, 1123, 1131, + 71, 71, 1129, 71, 71, 1133, 1134, 71, 1132, 71, + 1136, 71, 1139, 1140, 71, 1135, 71, 1138, 71, 71, + 71, 1144, 1143, 1137, 71, 1141, 71, 1142, 71, 71, - 71, 1150, 1141, 71, 1142, 1149, 71, 71, 1153, 1155, - 71, 1154, 1151, 71, 71, 71, 71, 71, 71, 71, - 1159, 1160, 1156, 1152, 1157, 71, 71, 71, 71, 1165, - 1161, 1166, 71, 1168, 1158, 71, 71, 71, 1163, 1169, - 71, 71, 71, 1162, 1173, 71, 1164, 1167, 71, 71, - 71, 71, 71, 1172, 71, 1170, 1171, 71, 1175, 1179, - 71, 71, 71, 1174, 71, 71, 71, 1183, 1180, 1176, - 146, 1178, 1181, 1182, 1184, 1187, 1177, 1185, 71, 1188, - 1192, 71, 71, 71, 1186, 71, 71, 1189, 1190, 71, - 71, 71, 71, 71, 1191, 1194, 71, 1193, 71, 71, + 71, 1150, 1148, 1151, 71, 71, 71, 71, 71, 71, + 1152, 1153, 1145, 1149, 71, 1146, 1155, 1158, 1147, 1154, + 71, 71, 71, 71, 1157, 1159, 1156, 1160, 71, 71, + 1161, 71, 71, 71, 71, 1164, 1165, 71, 1162, 71, + 71, 1170, 1171, 71, 71, 1166, 71, 71, 71, 1163, + 71, 1168, 71, 1174, 71, 1167, 71, 1173, 1172, 1169, + 1176, 1178, 1177, 1175, 71, 71, 71, 71, 71, 1184, + 71, 71, 71, 1180, 1179, 71, 71, 1190, 71, 71, + 71, 1188, 71, 1187, 1195, 1181, 1185, 1183, 1189, 1192, + 1186, 1193, 1182, 71, 71, 71, 71, 71, 1194, 1196, - 1197, 1200, 71, 71, 71, 71, 1195, 71, 71, 1210, - 71, 1196, 1206, 1198, 1203, 1199, 1204, 1201, 71, 71, - 71, 1207, 1202, 1208, 1211, 1205, 1209, 1212, 71, 71, - 71, 71, 1214, 1215, 71, 71, 1213, 71, 71, 1216, - 1219, 71, 71, 1218, 1224, 71, 1221, 71, 71, 1217, - 71, 71, 1225, 1222, 71, 1226, 1220, 1223, 71, 1228, - 1230, 71, 1229, 71, 71, 71, 71, 71, 1227, 71, - 71, 71, 71, 71, 1236, 71, 1231, 1234, 1232, 1241, - 71, 1235, 1237, 1233, 71, 71, 71, 71, 1238, 1247, - 1240, 1246, 1239, 71, 1248, 1242, 1245, 71, 71, 71, + 1191, 71, 71, 71, 71, 71, 71, 1199, 71, 71, + 1197, 71, 1202, 1205, 71, 1198, 71, 71, 1200, 71, + 71, 1203, 1220, 1201, 1208, 1206, 1209, 1204, 71, 71, + 1215, 71, 71, 1211, 1207, 71, 1216, 1210, 1217, 71, + 71, 71, 1212, 71, 1213, 71, 1219, 1214, 1218, 71, + 1224, 71, 1223, 71, 1221, 71, 1226, 71, 1222, 1229, + 71, 71, 1230, 71, 1227, 71, 1231, 71, 1225, 71, + 1233, 1234, 71, 71, 1228, 71, 71, 71, 1235, 71, + 71, 71, 71, 1232, 71, 71, 1241, 1236, 1237, 1239, + 71, 1240, 1242, 71, 1238, 71, 1246, 71, 1251, 71, - 71, 1252, 71, 1250, 1243, 1244, 1253, 71, 71, 71, - 1257, 1251, 71, 1249, 71, 71, 1255, 71, 1266, 1254, - 1268, 1256, 71, 1265, 71, 1264, 1269, 1258, 71, 1267, - 1259, 1260, 1270, 71, 71, 1261, 71, 71, 71, 1271, - 71, 1262, 1272, 71, 1273, 1263, 71, 1275, 71, 71, - 71, 1276, 71, 1277, 1274, 71, 1278, 1282, 1279, 1280, - 71, 1285, 1286, 71, 71, 71, 1324, 71, 71, 1281, - 1287, 71, 1289, 1284, 1283, 1288, 71, 1290, 71, 1291, - 71, 1292, 1298, 1293, 71, 1294, 1295, 1296, 71, 71, - 71, 1297, 1302, 71, 1300, 71, 71, 1303, 71, 1301, + 1243, 71, 1245, 1244, 71, 1248, 1250, 71, 1247, 1253, + 71, 71, 1257, 1252, 71, 1249, 1255, 1258, 71, 71, + 71, 71, 1256, 71, 1262, 71, 3048, 1254, 71, 1272, + 1270, 1271, 1261, 1259, 1260, 71, 71, 71, 1269, 1275, + 1263, 1273, 71, 1264, 1265, 71, 71, 71, 1266, 71, + 71, 1274, 1276, 71, 1267, 1277, 71, 1278, 1268, 71, + 1280, 71, 71, 71, 1281, 71, 1282, 1279, 71, 1283, + 1287, 1284, 1285, 71, 1290, 1291, 71, 71, 71, 1329, + 71, 71, 1286, 1292, 71, 1294, 1289, 1288, 1293, 71, + 1295, 71, 1296, 71, 1297, 1303, 1298, 71, 1299, 1300, - 1305, 71, 71, 1299, 71, 71, 1311, 71, 1312, 71, - 1306, 1307, 71, 71, 71, 1304, 71, 1313, 71, 1310, - 1308, 1315, 71, 1309, 71, 71, 71, 1314, 1316, 71, - 1320, 1317, 1321, 71, 1323, 71, 1318, 71, 71, 71, - 1325, 1322, 71, 1326, 1329, 71, 1331, 71, 1327, 1319, - 71, 1328, 71, 1332, 71, 1333, 71, 1336, 71, 1330, - 71, 71, 71, 71, 1338, 71, 71, 71, 1340, 1342, - 71, 71, 144, 1344, 1341, 1334, 71, 1335, 71, 71, - 1337, 1346, 1339, 1347, 1343, 71, 1345, 1348, 71, 71, - 1349, 71, 1351, 1350, 1352, 71, 71, 71, 71, 1357, + 1301, 71, 71, 71, 1302, 1307, 71, 1305, 71, 71, + 1308, 71, 1306, 1310, 71, 71, 1304, 71, 71, 1316, + 71, 1317, 71, 1311, 1312, 71, 71, 71, 1309, 71, + 1318, 71, 1315, 1313, 1320, 71, 1314, 71, 71, 71, + 1319, 1321, 71, 1325, 1322, 1326, 71, 1328, 71, 1323, + 71, 71, 71, 1330, 1327, 71, 1331, 1334, 71, 1336, + 71, 1332, 1324, 71, 1333, 71, 1337, 71, 1338, 71, + 1341, 71, 1335, 71, 71, 71, 71, 1343, 71, 71, + 71, 1345, 1347, 71, 71, 3048, 1349, 1346, 1339, 71, + 1340, 71, 71, 1342, 1351, 1344, 1352, 1348, 71, 1350, - 1358, 1360, 1354, 71, 1355, 71, 71, 71, 1359, 71, - 71, 1356, 71, 1353, 1364, 71, 71, 71, 1361, 71, - 1368, 1369, 71, 1363, 1371, 71, 71, 71, 1370, 1362, - 71, 71, 71, 71, 71, 71, 1365, 1366, 71, 1372, - 71, 1378, 1367, 71, 1375, 1373, 71, 1376, 71, 1383, - 71, 1374, 1377, 1382, 71, 1379, 71, 142, 71, 1385, - 1387, 1381, 71, 1380, 71, 1388, 71, 71, 71, 1384, - 71, 1390, 1391, 71, 71, 1386, 1389, 71, 71, 1396, - 1398, 1392, 1397, 1393, 1400, 1394, 71, 1399, 1395, 71, - 71, 71, 71, 1401, 1403, 71, 1405, 1402, 71, 1404, + 1353, 71, 71, 1354, 71, 1356, 1355, 1357, 71, 71, + 71, 71, 1362, 1363, 1365, 1359, 71, 1360, 71, 71, + 71, 1364, 71, 71, 1361, 71, 1358, 1369, 71, 71, + 71, 1366, 71, 1373, 1374, 71, 1368, 1376, 71, 71, + 71, 1375, 1367, 71, 71, 71, 71, 71, 71, 1370, + 1371, 71, 1377, 71, 1383, 1372, 71, 1380, 1378, 71, + 1381, 71, 1388, 71, 1379, 1382, 1387, 71, 1384, 71, + 3048, 71, 1390, 1392, 1386, 71, 1385, 71, 1393, 71, + 71, 71, 1389, 71, 1395, 1396, 71, 71, 1391, 1394, + 71, 71, 1401, 1403, 1397, 1402, 1398, 1405, 1399, 71, - 71, 71, 71, 1408, 71, 71, 1410, 71, 71, 1415, - 1407, 71, 71, 1409, 71, 1416, 71, 1406, 1412, 71, - 1419, 71, 1411, 1413, 71, 1414, 71, 71, 1420, 71, - 1417, 71, 71, 1418, 71, 1422, 1426, 1428, 1421, 1423, - 71, 1427, 1424, 71, 71, 1431, 71, 71, 1425, 71, - 71, 1436, 1430, 1433, 1437, 1435, 71, 71, 1429, 71, - 71, 1432, 71, 1438, 71, 1439, 1440, 71, 71, 71, - 1434, 71, 1441, 1444, 1443, 71, 71, 1447, 1442, 71, - 71, 71, 1446, 71, 71, 1453, 1445, 1455, 1449, 1450, - 1454, 71, 1456, 71, 71, 1451, 71, 1458, 71, 1448, + 1404, 1400, 71, 71, 71, 71, 1406, 1408, 71, 1410, + 1407, 71, 1409, 71, 71, 71, 1413, 71, 71, 1415, + 71, 71, 1420, 1412, 71, 71, 1414, 71, 1421, 71, + 1411, 1417, 71, 1424, 71, 1416, 1418, 71, 1419, 71, + 71, 1425, 71, 1422, 71, 71, 1423, 71, 1427, 1431, + 1433, 1426, 1428, 71, 1432, 1429, 71, 71, 1436, 71, + 71, 1430, 71, 71, 1441, 1435, 1438, 1442, 1440, 71, + 71, 1434, 71, 71, 1437, 71, 1443, 71, 1444, 1445, + 71, 71, 71, 1439, 71, 1446, 1449, 1448, 71, 71, + 1452, 1447, 71, 71, 71, 1451, 71, 71, 1458, 1450, - 71, 71, 1452, 71, 71, 71, 71, 1466, 1462, 71, - 1461, 71, 1469, 71, 1457, 71, 1467, 1459, 71, 1460, - 71, 1472, 71, 1463, 1465, 1464, 1471, 71, 71, 71, - 71, 71, 71, 71, 1470, 1468, 71, 71, 1480, 71, - 71, 1473, 1481, 1483, 71, 1477, 71, 1474, 1475, 1476, - 1486, 1479, 1482, 1478, 1484, 71, 71, 71, 71, 71, - 71, 1485, 1490, 71, 71, 71, 1491, 1488, 1493, 71, - 1487, 71, 1489, 1497, 71, 1499, 1498, 71, 71, 1492, - 1494, 71, 71, 71, 1495, 1496, 71, 1502, 71, 71, - 1503, 1501, 1500, 1504, 71, 1508, 1509, 71, 71, 71, + 1460, 1454, 1455, 1459, 71, 1461, 71, 71, 1456, 71, + 1463, 71, 1453, 71, 71, 1457, 71, 71, 71, 71, + 1471, 1467, 71, 1466, 71, 1474, 71, 1462, 71, 1472, + 1464, 71, 1465, 71, 1477, 71, 1468, 1470, 1469, 1476, + 71, 71, 71, 71, 71, 71, 3048, 1475, 1473, 71, + 71, 1485, 71, 71, 1478, 1486, 1488, 71, 1482, 71, + 1479, 1480, 1481, 1491, 1484, 1487, 1483, 1489, 71, 71, + 71, 71, 71, 71, 1490, 1495, 71, 71, 71, 1496, + 1493, 1498, 71, 1492, 71, 1494, 1502, 71, 1504, 1503, + 71, 71, 1497, 1499, 71, 71, 71, 1500, 1501, 71, - 71, 71, 71, 1505, 1514, 1512, 1506, 71, 1513, 71, - 71, 1516, 71, 71, 1507, 71, 1510, 71, 1517, 71, - 1511, 71, 1515, 1518, 71, 1519, 71, 71, 1523, 1520, - 1521, 71, 1524, 71, 71, 71, 1525, 1522, 71, 1528, - 71, 1530, 71, 71, 71, 1534, 71, 1526, 71, 1529, - 71, 71, 1527, 71, 71, 1537, 1531, 1532, 1539, 71, - 1535, 71, 71, 1542, 71, 1540, 1536, 71, 1533, 1538, - 71, 1541, 71, 71, 1545, 1543, 71, 1547, 1544, 1548, - 71, 71, 71, 1546, 71, 71, 1555, 71, 71, 71, - 1550, 1549, 1556, 71, 71, 71, 1553, 1564, 1559, 1560, + 1507, 71, 71, 1508, 1506, 1505, 1509, 71, 1513, 1514, + 71, 71, 71, 71, 71, 71, 1510, 1519, 1517, 1511, + 71, 1518, 71, 71, 1521, 71, 71, 1512, 71, 1515, + 71, 1522, 71, 1516, 71, 1520, 1523, 71, 1524, 71, + 71, 1528, 1525, 1526, 71, 1529, 71, 71, 71, 1530, + 1527, 71, 1533, 71, 1535, 71, 71, 71, 1539, 71, + 1531, 71, 1534, 71, 71, 1532, 71, 71, 1542, 1536, + 1537, 1544, 71, 1540, 71, 71, 1547, 71, 1545, 1541, + 71, 1538, 1543, 71, 1546, 71, 71, 1550, 1548, 71, + 1552, 1549, 1553, 71, 71, 71, 1551, 71, 71, 1560, - 1551, 1552, 71, 71, 1562, 71, 71, 71, 1557, 1554, - 1563, 1566, 71, 1558, 71, 1561, 71, 71, 1568, 71, - 1570, 1567, 71, 71, 1573, 71, 1565, 1571, 71, 1574, - 71, 1569, 71, 71, 71, 1579, 1578, 71, 71, 1575, - 1572, 71, 71, 71, 1595, 1585, 1586, 1577, 1576, 1580, - 71, 71, 71, 1582, 71, 1587, 1583, 71, 1581, 1593, - 1597, 71, 1590, 1589, 1592, 71, 71, 1591, 1584, 71, - 71, 1588, 71, 1596, 1594, 1598, 71, 71, 71, 71, - 71, 1604, 1605, 1603, 71, 71, 1607, 71, 71, 1599, - 1606, 71, 71, 1610, 71, 1600, 1609, 1601, 71, 1602, + 71, 71, 71, 1555, 1554, 1561, 71, 71, 71, 1558, + 1569, 1564, 1565, 1556, 1557, 71, 71, 1567, 71, 71, + 71, 1562, 1559, 1568, 1571, 71, 1563, 71, 1566, 71, + 71, 1573, 71, 1575, 1572, 71, 71, 1578, 71, 1570, + 1576, 71, 1579, 71, 1574, 71, 71, 71, 1584, 1583, + 71, 71, 1580, 1577, 71, 71, 71, 1600, 1590, 1591, + 1582, 1581, 1585, 71, 71, 71, 1587, 71, 1592, 1588, + 71, 1586, 1598, 1602, 71, 1595, 1594, 1597, 71, 71, + 1596, 1589, 71, 71, 1593, 71, 1601, 1599, 1603, 71, + 71, 71, 71, 71, 1609, 1610, 1608, 71, 71, 1612, - 71, 71, 71, 1611, 71, 71, 71, 1608, 1619, 71, - 71, 71, 71, 71, 71, 71, 1617, 71, 1612, 1615, - 1616, 1613, 1614, 1618, 1624, 71, 1622, 71, 71, 1620, - 71, 1621, 1626, 71, 1623, 1625, 71, 1627, 71, 71, - 71, 1630, 71, 1628, 1629, 71, 71, 1632, 71, 1634, - 71, 1631, 71, 1641, 1633, 1635, 1637, 71, 1636, 71, - 1638, 1642, 71, 1643, 71, 1639, 1647, 71, 71, 1644, - 1645, 1646, 1648, 1640, 71, 71, 71, 71, 71, 71, - 1650, 1651, 71, 71, 1659, 1660, 71, 71, 1654, 71, - 71, 71, 1656, 1649, 1653, 1657, 1652, 71, 1658, 71, + 71, 71, 1604, 1611, 71, 71, 1615, 71, 1605, 1614, + 1606, 71, 1607, 71, 71, 71, 1616, 71, 71, 71, + 1613, 1624, 71, 71, 71, 71, 71, 71, 71, 1622, + 71, 1617, 1620, 1621, 1618, 1619, 1623, 1629, 71, 1627, + 71, 71, 1625, 71, 1626, 1631, 71, 1628, 1630, 71, + 1632, 71, 71, 71, 1635, 71, 1633, 1634, 71, 71, + 1637, 71, 1639, 71, 1636, 71, 1646, 1638, 1640, 1642, + 71, 1641, 71, 1643, 1647, 71, 1648, 71, 1644, 1652, + 71, 71, 1649, 1650, 1651, 1653, 1645, 71, 71, 71, + 71, 71, 71, 1655, 1656, 71, 71, 1664, 1665, 71, - 71, 1655, 71, 71, 1662, 71, 71, 1661, 71, 1669, - 71, 71, 71, 1664, 1666, 1663, 1665, 1672, 71, 1671, - 71, 1673, 1670, 1668, 71, 71, 1680, 1675, 1667, 1677, - 1676, 1681, 71, 71, 71, 1674, 71, 71, 1686, 71, - 1688, 71, 1685, 1679, 71, 1678, 1689, 1682, 71, 1683, - 1691, 71, 71, 1690, 71, 71, 71, 1687, 1684, 1695, - 1692, 71, 1699, 71, 71, 71, 1697, 71, 71, 1694, - 71, 1693, 1698, 71, 1696, 1700, 71, 71, 71, 71, - 71, 1703, 1711, 1701, 71, 1704, 1709, 71, 71, 1702, - 1705, 1706, 1712, 1707, 1708, 71, 71, 1713, 71, 71, + 71, 1659, 71, 71, 71, 1661, 1654, 1658, 1662, 1657, + 71, 1663, 71, 71, 1660, 71, 71, 1667, 71, 71, + 1666, 71, 1674, 71, 71, 71, 1669, 1671, 1668, 1670, + 1677, 71, 1676, 71, 1678, 1675, 1673, 71, 71, 1685, + 1680, 1672, 1682, 1681, 1686, 71, 71, 71, 1679, 71, + 71, 1691, 71, 1693, 71, 1690, 1684, 71, 1683, 1694, + 1687, 71, 1688, 1696, 71, 71, 1695, 71, 71, 71, + 1692, 1689, 1700, 1697, 71, 1704, 71, 71, 71, 1702, + 71, 71, 1699, 71, 1698, 1703, 71, 1701, 1705, 71, + 71, 71, 71, 71, 1708, 1716, 1706, 71, 1709, 1714, - 71, 1718, 71, 71, 71, 1722, 71, 71, 1710, 71, - 71, 3043, 71, 1717, 1715, 1714, 1724, 71, 1716, 1720, - 71, 71, 1721, 71, 1719, 1725, 1726, 71, 1727, 1723, - 1731, 71, 1730, 1729, 71, 71, 1728, 71, 1735, 71, - 71, 71, 71, 71, 71, 71, 1742, 1733, 1737, 71, - 71, 71, 71, 1732, 1736, 1738, 1734, 1739, 1836, 71, - 71, 1740, 1743, 1747, 1741, 1745, 71, 1744, 1746, 71, - 1748, 71, 71, 1751, 71, 1750, 71, 1749, 1754, 71, - 1752, 71, 71, 71, 71, 1755, 1753, 71, 71, 71, - 71, 71, 71, 1760, 71, 71, 1764, 71, 71, 1761, + 71, 71, 1707, 1710, 1711, 1717, 1712, 1713, 71, 71, + 1718, 71, 71, 71, 1723, 71, 71, 71, 1727, 71, + 71, 1715, 71, 71, 3048, 71, 1722, 1720, 1719, 1729, + 71, 1721, 1725, 71, 71, 1726, 71, 1724, 1730, 1731, + 71, 1732, 1728, 1736, 71, 1735, 1734, 71, 71, 1733, + 71, 1740, 71, 71, 71, 71, 71, 71, 71, 1747, + 1738, 1742, 71, 71, 71, 71, 1737, 1741, 1743, 1739, + 1744, 1841, 71, 71, 1745, 1748, 1752, 1746, 1750, 71, + 1749, 1751, 71, 1753, 71, 71, 1756, 71, 1755, 71, + 1754, 1759, 71, 1757, 71, 71, 71, 71, 1760, 1758, - 3043, 71, 1770, 1756, 1762, 1758, 1757, 1759, 71, 1763, - 1765, 71, 1773, 1768, 71, 1767, 1772, 71, 71, 1774, - 1769, 71, 71, 1766, 71, 71, 1771, 1778, 71, 1781, - 1782, 71, 71, 1775, 1783, 71, 71, 1776, 1779, 71, - 1780, 71, 1777, 1785, 71, 71, 1786, 1789, 71, 71, - 1791, 71, 1784, 1790, 1792, 1793, 71, 1787, 1795, 1794, - 1788, 71, 71, 71, 71, 1800, 1797, 1798, 71, 71, - 1799, 71, 71, 71, 71, 1807, 71, 1809, 71, 71, - 71, 71, 1810, 71, 1801, 1802, 1803, 1796, 71, 71, - 1812, 1804, 1811, 1805, 1806, 1814, 1808, 1815, 71, 1817, + 71, 71, 71, 71, 71, 71, 1765, 71, 71, 1769, + 71, 71, 1766, 3048, 71, 1775, 1761, 1767, 1763, 1762, + 1764, 71, 1768, 1770, 71, 1778, 1773, 71, 1772, 1777, + 71, 71, 1779, 1774, 71, 71, 1771, 71, 71, 1776, + 1783, 71, 1786, 1787, 71, 71, 1780, 1788, 71, 71, + 1781, 1784, 71, 1785, 71, 1782, 1790, 71, 71, 1791, + 1794, 71, 71, 1796, 71, 1789, 1795, 1797, 1798, 71, + 1792, 1800, 1799, 1793, 71, 71, 71, 71, 1805, 1802, + 1803, 71, 71, 1804, 71, 71, 71, 71, 1812, 71, + 1814, 71, 71, 71, 71, 1815, 71, 1806, 1807, 1808, - 1813, 71, 71, 71, 1819, 71, 71, 1816, 71, 1821, - 71, 71, 1824, 1825, 71, 71, 1827, 71, 71, 71, - 71, 71, 1818, 1833, 71, 1832, 1822, 71, 1820, 1829, - 1830, 71, 1823, 71, 71, 1826, 71, 71, 1839, 71, - 1831, 71, 1837, 1828, 71, 71, 1843, 71, 1834, 1835, - 1842, 71, 71, 1846, 1845, 1847, 1849, 1841, 71, 71, - 71, 71, 1838, 71, 1844, 1840, 1848, 71, 71, 1850, - 71, 71, 71, 1854, 71, 1857, 71, 1858, 1851, 71, - 1853, 71, 1852, 71, 71, 1861, 71, 71, 71, 1855, - 1866, 71, 1865, 71, 1860, 71, 1859, 71, 1856, 71, + 1801, 71, 71, 1817, 1809, 1816, 1810, 1811, 1819, 1813, + 1820, 71, 1822, 1818, 71, 71, 71, 1824, 71, 71, + 1821, 71, 1826, 71, 71, 1829, 1830, 71, 71, 1832, + 71, 71, 71, 71, 71, 1823, 1838, 71, 1837, 1827, + 71, 1825, 1834, 1835, 71, 1828, 71, 71, 1831, 71, + 71, 1844, 71, 1836, 71, 1842, 1833, 71, 71, 1848, + 71, 1839, 1840, 1847, 71, 71, 1851, 1850, 1852, 1854, + 1846, 71, 71, 71, 71, 1843, 71, 1849, 1845, 1853, + 71, 71, 1855, 71, 71, 71, 1859, 71, 1862, 71, + 1863, 1856, 71, 1858, 71, 1857, 71, 71, 1866, 71, - 71, 1862, 71, 1870, 1863, 71, 1871, 1867, 1864, 1874, - 1868, 1872, 1869, 1873, 71, 71, 1877, 71, 1878, 71, - 71, 71, 71, 71, 1884, 71, 1875, 1881, 71, 71, - 71, 1876, 1889, 1879, 1886, 1887, 71, 71, 1888, 1880, - 1885, 1882, 71, 1883, 71, 71, 1894, 71, 1895, 71, - 1898, 1890, 1896, 1899, 71, 1891, 71, 1897, 71, 71, - 1892, 71, 71, 1903, 71, 1893, 1901, 71, 71, 71, - 71, 1905, 1908, 71, 1902, 1910, 1904, 71, 71, 71, - 1900, 71, 1906, 71, 71, 71, 71, 1915, 1920, 1911, - 1914, 1912, 71, 1907, 71, 1909, 71, 1916, 1917, 71, + 71, 71, 1860, 1871, 71, 1870, 71, 1865, 71, 1864, + 71, 1861, 71, 71, 1867, 71, 1875, 1868, 71, 1876, + 1872, 1869, 1879, 1873, 1877, 1874, 1878, 71, 71, 1882, + 71, 1883, 71, 71, 71, 71, 71, 1889, 71, 1880, + 1886, 71, 71, 71, 1881, 1894, 1884, 1891, 1892, 71, + 71, 1893, 1885, 1890, 1887, 71, 1888, 71, 71, 1899, + 71, 1900, 71, 1903, 1895, 1901, 1904, 71, 1896, 71, + 1902, 71, 71, 1897, 71, 71, 1908, 71, 1898, 1906, + 71, 71, 71, 71, 1910, 1913, 71, 1907, 1915, 1909, + 71, 71, 71, 1905, 71, 1911, 71, 71, 71, 71, - 1918, 71, 1913, 71, 1927, 71, 1919, 71, 71, 1921, - 1922, 71, 71, 1923, 71, 1926, 1925, 1924, 71, 1928, - 71, 71, 71, 1932, 71, 71, 1929, 1931, 71, 71, - 1933, 71, 1930, 1934, 1935, 1936, 71, 71, 71, 71, - 1938, 71, 1943, 1941, 71, 1937, 1942, 71, 71, 71, - 71, 71, 1948, 71, 71, 1939, 1945, 1940, 71, 71, - 71, 1952, 1944, 1949, 1947, 71, 1954, 1946, 1951, 71, - 71, 1950, 1958, 71, 1953, 1956, 71, 71, 71, 1955, - 1959, 71, 1957, 71, 1964, 71, 71, 1966, 71, 71, - 71, 1967, 1960, 71, 1961, 1970, 1962, 1963, 1968, 71, + 1920, 1925, 1916, 1919, 1917, 71, 1912, 71, 1914, 71, + 1921, 1922, 71, 1923, 71, 1918, 71, 1932, 71, 1924, + 71, 71, 1926, 1927, 71, 71, 1928, 71, 1931, 1930, + 1929, 71, 1933, 71, 71, 71, 1937, 71, 71, 1934, + 1936, 71, 71, 1938, 71, 1935, 1939, 1940, 1941, 71, + 71, 71, 71, 1943, 71, 1948, 1946, 71, 1942, 1947, + 71, 71, 71, 71, 71, 1953, 71, 71, 1944, 1950, + 1945, 71, 71, 71, 1957, 1949, 1954, 1952, 71, 1959, + 1951, 1956, 71, 71, 1955, 1963, 71, 1958, 1961, 71, + 71, 71, 1960, 1964, 71, 1962, 71, 1969, 71, 71, - 71, 1969, 1965, 71, 1972, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 1973, 3043, 71, 71, 1980, 1975, - 1971, 1976, 1977, 1984, 71, 71, 1979, 1974, 1983, 71, - 71, 1981, 1987, 1982, 1978, 1985, 71, 71, 71, 71, - 1991, 1988, 1990, 71, 71, 1986, 71, 71, 1993, 71, - 1989, 1994, 71, 71, 71, 1995, 1999, 1992, 1997, 71, - 71, 2001, 2003, 71, 1998, 1996, 71, 71, 71, 2006, - 71, 71, 2000, 2005, 2002, 2007, 2008, 71, 71, 2011, - 71, 71, 71, 71, 71, 71, 2012, 71, 2017, 71, - 2014, 71, 2004, 2013, 2021, 2009, 71, 2018, 2010, 2019, + 1971, 71, 71, 71, 1972, 1965, 71, 1966, 1975, 1967, + 1968, 1973, 71, 71, 1974, 1970, 71, 1977, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 1978, 3048, 71, + 71, 1985, 1980, 1976, 1981, 1982, 1989, 71, 71, 1984, + 1979, 1988, 71, 71, 1986, 1992, 1987, 1983, 1990, 71, + 71, 71, 71, 1996, 1993, 1995, 71, 71, 1991, 71, + 71, 1998, 71, 1994, 1999, 71, 71, 71, 2000, 2004, + 1997, 2002, 71, 71, 2006, 2008, 71, 2003, 2001, 71, + 71, 71, 2011, 71, 71, 2005, 2010, 2007, 2012, 2013, + 71, 71, 2016, 71, 71, 71, 71, 71, 71, 2017, - 71, 2016, 2015, 71, 71, 71, 2023, 71, 2022, 2026, - 71, 2020, 71, 2024, 71, 2028, 71, 2029, 71, 2027, - 71, 2025, 71, 71, 71, 2031, 2035, 2030, 71, 71, - 2032, 2033, 2037, 71, 2034, 71, 71, 2038, 71, 71, - 2040, 2041, 2039, 71, 2036, 71, 71, 71, 2042, 2044, - 2043, 2047, 71, 71, 71, 2045, 2046, 2048, 71, 71, - 71, 71, 71, 71, 2049, 71, 71, 2056, 2051, 2050, - 2057, 2053, 2054, 2052, 71, 2058, 71, 71, 71, 71, - 2059, 2055, 2061, 2067, 71, 71, 2062, 71, 71, 2069, - 71, 71, 2063, 2060, 2066, 2071, 2064, 2068, 71, 71, + 71, 2022, 71, 2019, 71, 2009, 2018, 2026, 2014, 71, + 2023, 2015, 2024, 71, 2021, 2020, 71, 71, 71, 2028, + 71, 2027, 2031, 71, 2025, 71, 2029, 71, 2033, 71, + 2034, 71, 2032, 71, 2030, 71, 71, 71, 2036, 2040, + 2035, 71, 71, 2037, 2038, 2042, 71, 2039, 71, 71, + 2043, 71, 71, 2045, 2046, 2044, 71, 2041, 71, 71, + 71, 2047, 2049, 2048, 2052, 71, 71, 71, 2050, 2051, + 2053, 71, 71, 71, 71, 71, 71, 2054, 71, 71, + 2061, 2056, 2055, 2062, 2058, 2059, 2057, 71, 2063, 71, + 71, 71, 71, 2064, 2060, 2066, 2072, 71, 71, 2067, - 71, 3043, 2074, 2072, 2065, 2076, 2070, 2075, 71, 2077, - 71, 71, 2073, 2078, 71, 71, 2081, 71, 71, 2082, - 2080, 71, 2079, 2086, 71, 71, 2087, 71, 71, 2090, - 2085, 71, 71, 2083, 71, 71, 2091, 71, 2092, 2088, - 2093, 71, 71, 2095, 2084, 71, 2089, 2094, 71, 71, - 2100, 71, 2096, 71, 2097, 2098, 71, 2099, 71, 71, - 71, 71, 71, 2103, 71, 71, 2107, 2109, 71, 2110, - 71, 2102, 71, 71, 71, 71, 2101, 2104, 2105, 2112, - 2106, 71, 71, 71, 71, 2111, 2108, 2114, 2116, 2119, - 71, 71, 2115, 71, 2117, 71, 71, 71, 2113, 2120, + 71, 71, 2074, 71, 71, 2068, 2065, 2071, 2076, 2069, + 2073, 71, 71, 71, 3048, 2079, 2077, 2070, 2081, 2075, + 2080, 71, 2082, 71, 71, 2078, 2083, 71, 71, 2086, + 71, 71, 2087, 2085, 71, 2084, 2091, 71, 71, 2092, + 71, 71, 2095, 2090, 71, 71, 2088, 71, 71, 2096, + 71, 2097, 2093, 2098, 71, 71, 2100, 2089, 71, 2094, + 2099, 71, 71, 2105, 71, 2101, 71, 2102, 2103, 71, + 2104, 71, 71, 71, 71, 71, 2108, 71, 71, 2112, + 2114, 71, 2115, 71, 2107, 71, 71, 71, 71, 2106, + 2109, 2110, 2117, 2111, 71, 71, 71, 71, 2116, 2113, - 2118, 71, 71, 2121, 71, 71, 71, 2130, 71, 71, - 71, 71, 2122, 2131, 2127, 71, 2125, 2285, 2123, 2133, - 2124, 2129, 2126, 71, 2132, 2128, 71, 2135, 2134, 2136, - 71, 2137, 71, 71, 71, 2140, 71, 71, 2138, 2143, - 71, 71, 2144, 71, 71, 2141, 2139, 71, 2142, 2145, - 2149, 71, 2150, 71, 71, 2152, 71, 71, 71, 2148, - 71, 2146, 71, 2147, 2154, 71, 71, 2157, 71, 2158, - 71, 2156, 2159, 2151, 71, 2153, 71, 2155, 71, 2162, - 71, 2164, 71, 2160, 71, 2163, 2166, 71, 71, 71, - 2161, 71, 2169, 71, 2168, 71, 2170, 2165, 2172, 71, + 2119, 2121, 2124, 71, 71, 2120, 71, 2122, 71, 71, + 71, 2118, 2125, 2123, 71, 71, 2126, 71, 71, 71, + 2135, 71, 71, 71, 71, 2127, 2136, 2132, 71, 2130, + 2290, 2128, 2138, 2129, 2134, 2131, 71, 2137, 2133, 71, + 2140, 2139, 2141, 71, 2142, 71, 71, 71, 2145, 71, + 71, 2143, 2148, 71, 71, 2149, 71, 71, 2146, 2144, + 71, 2147, 2150, 2154, 71, 2155, 71, 71, 2157, 71, + 71, 71, 2153, 71, 2151, 71, 2152, 2159, 71, 71, + 2162, 71, 2163, 71, 2161, 2164, 2156, 71, 2158, 71, + 2160, 71, 2167, 71, 2169, 71, 2165, 71, 2168, 2171, - 71, 71, 2167, 2176, 71, 71, 71, 71, 2174, 71, - 2173, 2171, 71, 2180, 2181, 71, 71, 2185, 71, 2175, - 71, 2177, 2179, 71, 71, 2182, 71, 2183, 2178, 71, - 2187, 2184, 71, 71, 2192, 71, 71, 2194, 2188, 71, - 2186, 71, 2195, 71, 2189, 2193, 71, 2190, 2199, 71, - 71, 2200, 71, 2198, 71, 71, 71, 2196, 2191, 2197, - 2204, 2206, 71, 2202, 71, 2209, 71, 2207, 71, 2211, - 71, 71, 71, 2203, 2201, 71, 71, 2212, 71, 2208, - 2205, 2213, 71, 2215, 71, 2216, 71, 2210, 71, 71, - 71, 71, 2221, 2214, 2222, 2217, 2223, 2218, 2219, 2220, + 71, 71, 71, 2166, 71, 2174, 71, 2173, 71, 2175, + 2170, 2177, 71, 71, 71, 2172, 2181, 71, 71, 71, + 71, 2179, 71, 2178, 2176, 71, 2185, 2186, 71, 71, + 2190, 71, 2180, 71, 2182, 2184, 71, 71, 2187, 71, + 2188, 2183, 71, 2192, 2189, 71, 71, 2197, 71, 71, + 2199, 2193, 71, 2191, 71, 2200, 71, 2194, 2198, 71, + 2195, 2204, 71, 71, 2205, 71, 2203, 71, 71, 71, + 2201, 2196, 2202, 2209, 2211, 71, 2207, 71, 2214, 71, + 2212, 71, 2216, 71, 71, 71, 2208, 2206, 71, 71, + 2217, 71, 2213, 2210, 2218, 71, 2220, 71, 2221, 71, - 71, 71, 71, 71, 2225, 2224, 71, 2227, 2228, 71, - 2229, 2231, 2226, 2232, 71, 71, 71, 71, 2230, 2235, - 71, 71, 71, 71, 71, 71, 2237, 2242, 71, 71, - 71, 2233, 2234, 2243, 2238, 71, 2236, 2246, 71, 2239, - 2240, 2241, 71, 2247, 2248, 71, 71, 2245, 71, 2249, - 2244, 2251, 2252, 2250, 2253, 71, 71, 71, 71, 71, - 2255, 71, 71, 71, 71, 2259, 2260, 71, 3043, 71, - 2254, 71, 71, 2256, 2262, 2263, 2257, 71, 2265, 71, - 2264, 2261, 2258, 71, 71, 71, 71, 71, 2266, 71, - 2269, 2270, 71, 2267, 2272, 71, 71, 71, 71, 71, + 2215, 71, 71, 71, 71, 2226, 2219, 2227, 2222, 2228, + 2223, 2224, 2225, 71, 71, 71, 71, 2230, 2229, 71, + 2232, 2233, 71, 2234, 2236, 2231, 2237, 71, 71, 71, + 71, 2235, 2240, 71, 71, 71, 71, 71, 71, 2242, + 2247, 71, 71, 71, 2238, 2239, 2248, 2243, 71, 2241, + 2251, 71, 2244, 2245, 2246, 71, 2252, 2253, 71, 71, + 2250, 71, 2254, 2249, 2256, 2257, 2255, 2258, 71, 71, + 71, 71, 71, 2260, 71, 71, 71, 71, 2264, 2265, + 71, 3048, 71, 2259, 71, 71, 2261, 2267, 2268, 2262, + 71, 2270, 71, 2269, 2266, 2263, 71, 71, 71, 71, - 2271, 71, 2276, 2279, 71, 2268, 2278, 71, 71, 71, - 2280, 2275, 71, 71, 2284, 2273, 2274, 2283, 71, 2277, - 71, 71, 71, 2286, 2282, 2281, 2292, 2287, 71, 2288, - 71, 71, 2291, 2289, 2293, 71, 2295, 71, 71, 71, - 71, 2297, 71, 71, 2290, 71, 71, 2294, 2296, 71, - 71, 2301, 71, 71, 71, 2303, 2298, 2299, 2304, 2305, - 71, 2300, 2306, 71, 2307, 71, 2308, 71, 2309, 71, - 71, 71, 2311, 2314, 71, 2302, 2310, 71, 2316, 71, - 71, 2319, 71, 2313, 71, 71, 2315, 71, 2312, 71, - 2322, 2323, 71, 71, 71, 2318, 71, 2317, 2324, 71, + 71, 2271, 71, 2274, 2275, 71, 2272, 2277, 71, 71, + 71, 71, 71, 2276, 71, 2281, 2284, 71, 2273, 2283, + 71, 71, 71, 2285, 2280, 71, 71, 2289, 2278, 2279, + 2288, 71, 2282, 71, 71, 71, 2291, 2287, 2286, 2297, + 2292, 71, 2293, 71, 71, 2296, 2294, 2298, 71, 2300, + 71, 71, 71, 71, 2302, 71, 71, 2295, 71, 71, + 2299, 2301, 71, 71, 2306, 71, 71, 71, 2308, 2303, + 2304, 2309, 2310, 71, 2305, 2311, 71, 2312, 71, 2313, + 71, 2314, 71, 71, 71, 2316, 2319, 71, 2307, 2315, + 71, 2321, 71, 71, 2324, 71, 2318, 71, 71, 2320, - 71, 2327, 2328, 71, 2320, 2321, 71, 71, 2326, 71, - 71, 71, 2325, 71, 2332, 71, 2334, 2329, 2374, 2331, - 2330, 2335, 71, 2336, 71, 2337, 71, 2338, 71, 71, - 2333, 2340, 71, 71, 2342, 71, 2343, 2341, 71, 71, - 71, 2339, 71, 2348, 71, 71, 2350, 71, 2351, 71, - 2344, 2345, 71, 71, 71, 71, 71, 71, 2347, 71, - 2346, 2354, 2357, 2352, 2349, 2353, 71, 2355, 2360, 71, - 71, 71, 71, 71, 71, 71, 2356, 71, 2367, 2358, - 2361, 71, 71, 71, 71, 71, 2359, 2364, 71, 2366, - 2368, 71, 2363, 2378, 71, 3043, 2362, 2365, 2369, 2370, + 71, 2317, 71, 2327, 2328, 71, 71, 71, 2323, 71, + 2322, 2329, 71, 71, 2332, 2333, 71, 2325, 2326, 71, + 71, 2331, 71, 71, 71, 2330, 71, 2337, 71, 2339, + 2334, 2379, 2336, 2335, 2340, 71, 2341, 71, 2342, 71, + 2343, 71, 71, 2338, 2345, 71, 71, 2347, 71, 2348, + 2346, 71, 71, 71, 2344, 71, 2353, 71, 71, 2355, + 71, 2356, 71, 2349, 2350, 71, 71, 71, 71, 71, + 71, 2352, 71, 2351, 2359, 2362, 2357, 2354, 2358, 71, + 2360, 2365, 71, 71, 71, 71, 71, 71, 71, 2361, + 71, 2372, 2363, 2366, 71, 71, 71, 71, 71, 2364, - 2371, 71, 71, 71, 71, 2375, 2376, 2372, 2377, 2379, - 71, 2373, 71, 2380, 71, 2381, 71, 2382, 71, 71, - 2383, 71, 71, 2385, 71, 71, 71, 71, 71, 2384, - 2392, 71, 71, 71, 2390, 71, 2396, 2397, 71, 2386, - 2387, 71, 71, 2388, 2389, 71, 2391, 2393, 71, 2394, - 2395, 2399, 2400, 71, 2401, 2398, 2402, 71, 71, 2403, - 71, 71, 71, 71, 71, 2405, 2404, 71, 2411, 71, - 2412, 71, 2413, 71, 71, 2406, 71, 71, 71, 2407, - 2408, 71, 2410, 2409, 2418, 71, 2417, 2422, 71, 2415, - 2420, 2414, 71, 71, 2421, 2416, 71, 2419, 2423, 2424, + 2369, 71, 2371, 2373, 71, 2368, 2383, 71, 3048, 2367, + 2370, 2374, 2375, 2376, 71, 71, 71, 71, 2380, 2381, + 2377, 2382, 2384, 71, 2378, 71, 2385, 71, 2386, 71, + 2387, 71, 71, 2388, 71, 71, 2390, 71, 71, 71, + 71, 71, 2389, 2397, 71, 71, 71, 2395, 71, 2401, + 2402, 71, 2391, 2392, 71, 71, 2393, 2394, 71, 2396, + 2398, 71, 2399, 2400, 2404, 2405, 71, 2406, 2403, 2407, + 71, 71, 2408, 71, 71, 71, 71, 71, 2410, 2409, + 71, 2416, 71, 2417, 71, 2418, 71, 71, 2411, 71, + 71, 71, 2412, 2413, 71, 2415, 2414, 2423, 71, 2422, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 2426, 2430, 2425, 71, 71, 2428, 2434, 2435, 71, 2438, - 71, 2427, 71, 71, 2429, 2431, 2432, 2437, 2433, 2436, - 71, 71, 2442, 71, 2439, 2441, 2443, 2440, 71, 71, - 2446, 71, 71, 71, 71, 2450, 71, 71, 2449, 2452, - 71, 71, 2448, 71, 2447, 71, 2453, 71, 2444, 2445, - 2457, 71, 2454, 71, 2458, 71, 2451, 2460, 71, 2456, - 71, 2455, 71, 71, 71, 71, 2465, 71, 2467, 71, - 71, 71, 2463, 2461, 2464, 2462, 2468, 2459, 71, 2466, - 71, 71, 71, 2469, 2470, 2471, 71, 71, 71, 2472, + 2427, 71, 2420, 2425, 2419, 71, 71, 2426, 2421, 71, + 2424, 2428, 2429, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 2431, 2435, 2430, 71, 71, 2433, 2439, + 2440, 71, 2443, 71, 2432, 71, 71, 2434, 2436, 2437, + 2442, 2438, 2441, 71, 71, 2447, 71, 2444, 2446, 2448, + 2445, 71, 71, 2451, 71, 71, 71, 71, 2455, 71, + 71, 2454, 2457, 71, 71, 2453, 71, 2452, 71, 2458, + 71, 2449, 2450, 2462, 71, 2459, 71, 2463, 71, 2456, + 2465, 71, 2461, 71, 2460, 71, 71, 71, 71, 2470, + 71, 2472, 71, 71, 71, 2468, 2466, 2469, 2467, 2473, - 71, 71, 71, 71, 3043, 2474, 2475, 2477, 2478, 2480, - 71, 2473, 2476, 2481, 71, 2479, 71, 71, 71, 2484, - 2486, 3043, 2483, 2482, 71, 71, 71, 71, 2488, 2487, - 71, 2491, 71, 2492, 71, 2490, 2485, 71, 2494, 71, - 2489, 71, 2496, 71, 2495, 71, 71, 2497, 71, 71, - 2493, 2498, 2500, 71, 2499, 71, 71, 2501, 71, 71, - 2502, 71, 2507, 2516, 2506, 2503, 2508, 71, 71, 2505, - 71, 71, 71, 71, 2504, 2509, 2511, 71, 71, 2510, - 2512, 71, 71, 2514, 71, 2513, 2515, 71, 71, 2520, - 71, 71, 71, 2518, 71, 2517, 2519, 2525, 71, 2521, + 2464, 71, 2471, 71, 71, 71, 2474, 2475, 2476, 71, + 71, 71, 2477, 71, 71, 71, 71, 3048, 2479, 2480, + 2482, 2483, 2485, 71, 2478, 2481, 2486, 71, 2484, 71, + 71, 71, 2489, 2491, 3048, 2488, 2487, 71, 71, 71, + 71, 2493, 2492, 71, 2496, 71, 2497, 71, 2495, 2490, + 71, 2499, 71, 2494, 71, 2501, 71, 2500, 71, 71, + 2502, 71, 71, 2498, 2503, 2505, 71, 2504, 71, 71, + 2506, 71, 71, 2507, 71, 2512, 2521, 2511, 2508, 2513, + 71, 71, 2510, 71, 71, 71, 71, 2509, 2514, 2516, + 71, 71, 2515, 2517, 71, 71, 2519, 71, 2518, 2520, - 71, 71, 71, 2529, 71, 71, 71, 71, 2534, 71, - 2522, 2527, 2523, 2524, 71, 71, 2528, 2536, 2533, 2526, - 2537, 2531, 2538, 71, 2530, 71, 71, 2532, 71, 2539, - 71, 71, 71, 2540, 71, 71, 2541, 71, 71, 2544, - 2535, 2542, 71, 2547, 2548, 71, 71, 2543, 2549, 71, - 2551, 2545, 71, 2546, 2550, 71, 71, 2552, 2553, 71, - 71, 71, 2557, 71, 71, 2555, 71, 2558, 71, 71, - 2560, 2561, 71, 2556, 2562, 71, 2554, 71, 71, 2564, - 2563, 71, 2565, 2559, 2567, 71, 71, 2568, 2569, 71, - 2571, 71, 71, 71, 71, 2575, 2570, 71, 2566, 2576, + 71, 71, 2525, 71, 71, 71, 2523, 71, 2522, 2524, + 2530, 71, 2526, 71, 71, 71, 2534, 71, 71, 71, + 71, 2539, 71, 2527, 2532, 2528, 2529, 71, 71, 2533, + 2541, 2538, 2531, 2542, 2536, 2543, 71, 2535, 71, 71, + 2537, 71, 2544, 71, 71, 71, 2545, 71, 71, 2546, + 71, 71, 2549, 2540, 2547, 71, 2552, 2553, 71, 71, + 2548, 2554, 71, 2556, 2550, 71, 2551, 2555, 71, 71, + 2557, 2558, 71, 71, 71, 2562, 71, 71, 2560, 71, + 2563, 71, 71, 2565, 2566, 71, 2561, 2567, 71, 2559, + 71, 71, 2569, 2568, 71, 2570, 2564, 2572, 71, 71, - 71, 71, 71, 71, 2578, 2572, 2577, 71, 2574, 2579, - 71, 2573, 71, 2584, 71, 2587, 71, 71, 2583, 71, - 2580, 2586, 71, 2581, 71, 71, 71, 2582, 2590, 2588, - 2589, 71, 71, 71, 2592, 71, 71, 3043, 2595, 2585, - 71, 2599, 71, 71, 71, 71, 71, 2601, 71, 2593, - 2594, 2591, 71, 2596, 2598, 2602, 2597, 2600, 2606, 2603, - 2605, 2609, 71, 2607, 71, 2604, 71, 2608, 71, 2610, - 71, 2611, 71, 2612, 71, 2613, 71, 71, 71, 71, - 71, 2615, 2614, 71, 2621, 71, 71, 71, 2618, 2622, - 2624, 71, 71, 2626, 71, 71, 71, 2616, 3043, 2625, + 2573, 2574, 71, 2576, 71, 71, 71, 71, 2580, 2575, + 71, 2571, 2581, 71, 71, 71, 71, 2583, 2577, 2582, + 71, 2579, 2584, 71, 2578, 71, 2589, 71, 2592, 71, + 71, 2588, 71, 2585, 2591, 71, 2586, 71, 71, 71, + 2587, 2595, 2593, 2594, 71, 71, 71, 2597, 71, 71, + 3048, 2600, 2590, 71, 2604, 71, 71, 71, 71, 71, + 2606, 71, 2598, 2599, 2596, 71, 2601, 2603, 2607, 2602, + 2605, 2611, 2608, 2610, 2614, 71, 2612, 71, 2609, 71, + 2613, 71, 2615, 71, 2616, 71, 2617, 71, 2618, 71, + 71, 71, 71, 71, 2620, 2619, 71, 2626, 71, 71, - 2619, 2627, 71, 2620, 2617, 2623, 2628, 71, 71, 71, - 71, 2629, 71, 2632, 2633, 71, 2634, 2630, 2631, 2635, - 71, 2637, 71, 71, 71, 71, 2638, 71, 71, 2641, - 71, 2640, 2642, 71, 71, 2636, 2639, 2643, 71, 2644, - 71, 71, 71, 2647, 71, 71, 71, 3043, 2646, 2652, - 71, 2650, 2648, 2645, 71, 71, 71, 2653, 2694, 2655, - 71, 2656, 71, 2657, 2651, 71, 2649, 2654, 71, 2658, - 2659, 71, 2660, 2662, 71, 2661, 2663, 71, 2664, 71, - 71, 71, 71, 71, 2669, 71, 71, 2668, 2666, 2665, - 71, 2670, 71, 2672, 71, 71, 2677, 2671, 71, 71, + 71, 2623, 2627, 2629, 71, 71, 2631, 71, 71, 71, + 2621, 3048, 2630, 2624, 2632, 71, 2625, 2622, 2628, 2633, + 71, 71, 71, 71, 2634, 71, 2637, 2638, 71, 2639, + 2635, 2636, 2640, 71, 2642, 71, 71, 71, 71, 2643, + 71, 71, 2646, 71, 2645, 2647, 71, 71, 2641, 2644, + 2648, 71, 2649, 71, 71, 71, 2652, 71, 71, 71, + 3048, 2651, 2657, 71, 2655, 2653, 2650, 71, 71, 71, + 2658, 2699, 2660, 71, 2661, 71, 2662, 2656, 71, 2654, + 2659, 71, 2663, 2664, 71, 2665, 2667, 71, 2666, 2668, + 71, 2669, 71, 71, 71, 71, 71, 2674, 71, 71, - 2667, 2673, 71, 2675, 2679, 71, 2674, 71, 71, 71, - 71, 2680, 71, 2676, 2681, 2682, 71, 2683, 71, 2687, - 71, 71, 71, 71, 2678, 71, 71, 2684, 71, 2690, - 71, 71, 2686, 2685, 2688, 2689, 2695, 2691, 71, 2692, - 2697, 71, 2699, 71, 71, 2693, 2700, 71, 2702, 71, - 71, 71, 71, 71, 2707, 71, 2696, 2698, 2706, 71, - 71, 71, 71, 2711, 71, 2701, 2703, 2704, 2705, 2713, - 71, 71, 71, 71, 71, 2715, 71, 2716, 2712, 2708, - 2710, 71, 71, 2709, 2718, 71, 2719, 71, 2721, 71, - 71, 2714, 2726, 2723, 2720, 2717, 2725, 71, 71, 2724, + 2673, 2671, 2670, 71, 2675, 71, 2677, 71, 71, 2682, + 2676, 71, 71, 2672, 2678, 71, 2680, 2684, 71, 2679, + 71, 71, 71, 71, 2685, 71, 2681, 2686, 2687, 71, + 2688, 71, 2692, 71, 71, 71, 71, 2683, 71, 71, + 2689, 71, 2695, 71, 71, 2691, 2690, 2693, 2694, 2700, + 2696, 71, 2697, 2702, 71, 2704, 71, 71, 2698, 2705, + 71, 2707, 71, 71, 71, 71, 71, 2712, 71, 2701, + 2703, 2711, 71, 71, 71, 71, 2716, 71, 2706, 2708, + 2709, 2710, 2718, 71, 71, 71, 71, 71, 2720, 71, + 2721, 2717, 2713, 2715, 71, 71, 2714, 2723, 71, 2724, - 71, 71, 2730, 71, 71, 71, 2732, 2731, 2722, 71, - 71, 2735, 2728, 2736, 71, 71, 2727, 71, 2737, 2738, - 71, 2729, 2733, 71, 71, 71, 71, 2743, 2740, 2734, - 71, 2741, 71, 71, 2746, 71, 71, 71, 2739, 71, - 2751, 71, 71, 2742, 2747, 71, 71, 2744, 2745, 2754, - 71, 3043, 2750, 71, 2748, 2753, 2755, 71, 2756, 2757, - 71, 2752, 2749, 2759, 71, 2758, 2760, 71, 2761, 71, - 71, 2763, 71, 71, 71, 2762, 71, 71, 71, 2768, - 2769, 71, 71, 71, 71, 2773, 71, 71, 2774, 71, - 71, 3043, 2764, 2772, 71, 2777, 2765, 2770, 2766, 2767, + 71, 2726, 71, 71, 2719, 2731, 2728, 2725, 2722, 2730, + 71, 71, 2729, 71, 71, 2735, 71, 71, 71, 2737, + 2736, 2727, 71, 71, 2740, 2733, 2741, 71, 71, 2732, + 71, 2742, 2743, 71, 2734, 2738, 71, 71, 71, 71, + 2748, 2745, 2739, 71, 2746, 71, 71, 2751, 71, 71, + 71, 2744, 71, 2756, 71, 71, 2747, 2752, 71, 71, + 2749, 2750, 2759, 71, 3048, 2755, 71, 2753, 2758, 2760, + 71, 2761, 2762, 71, 2757, 2754, 2764, 71, 2763, 2765, + 71, 2766, 71, 71, 2768, 71, 71, 71, 2767, 71, + 71, 71, 2773, 2774, 71, 71, 71, 71, 2778, 71, - 2778, 71, 2771, 2779, 71, 71, 71, 2775, 2776, 2782, - 2780, 71, 71, 71, 71, 71, 2785, 71, 71, 2786, - 2781, 2784, 71, 2783, 71, 71, 71, 2789, 71, 71, - 71, 2791, 2787, 71, 2792, 71, 2790, 71, 2788, 71, - 71, 71, 71, 71, 2808, 71, 2801, 2793, 2802, 2794, - 2795, 2796, 2804, 2797, 71, 2803, 2798, 2799, 71, 2805, - 71, 2800, 2806, 2809, 71, 71, 2811, 71, 71, 2810, - 2812, 71, 2819, 2807, 2813, 2814, 71, 71, 2815, 2816, - 71, 71, 2817, 2818, 71, 71, 2820, 71, 71, 71, - 71, 2826, 71, 71, 2821, 2825, 71, 2829, 2822, 2843, + 71, 2779, 71, 71, 3048, 2769, 2777, 71, 2782, 2770, + 2775, 2771, 2772, 2783, 71, 2776, 2784, 71, 71, 71, + 2780, 2781, 2787, 2785, 71, 71, 71, 71, 71, 2790, + 71, 71, 2791, 2786, 2789, 71, 2788, 71, 71, 71, + 2794, 71, 71, 71, 2796, 2792, 71, 2797, 71, 2795, + 71, 2793, 71, 71, 71, 71, 71, 2813, 71, 2806, + 2798, 2807, 2799, 2800, 2801, 2809, 2802, 71, 2808, 2803, + 2804, 71, 2810, 71, 2805, 2811, 2814, 71, 71, 2816, + 71, 71, 2815, 2817, 71, 2824, 2812, 2818, 2819, 71, + 71, 2820, 2821, 71, 71, 2822, 2823, 71, 71, 2825, - 2823, 71, 71, 2828, 71, 71, 71, 71, 2824, 71, - 2830, 71, 2834, 71, 2827, 2833, 2864, 2831, 2835, 71, - 2836, 71, 2832, 71, 2837, 71, 2841, 71, 2838, 71, - 71, 2842, 71, 71, 2839, 2847, 71, 2840, 2844, 2850, - 71, 2848, 2845, 2851, 71, 71, 2853, 71, 2899, 71, - 2846, 2852, 2849, 2854, 71, 71, 2856, 71, 2857, 71, - 2855, 2858, 71, 2859, 71, 2860, 71, 2861, 71, 2862, - 71, 2863, 71, 2865, 71, 71, 71, 71, 71, 71, - 2870, 71, 71, 71, 2866, 71, 2874, 71, 2867, 71, - 2876, 71, 71, 2871, 71, 2872, 2883, 2868, 2869, 2873, + 71, 71, 71, 71, 2831, 71, 71, 2826, 2830, 71, + 2834, 2827, 2848, 2828, 71, 71, 2833, 71, 71, 71, + 71, 2829, 71, 2835, 71, 2839, 71, 2832, 2838, 2869, + 2836, 2840, 71, 2841, 71, 2837, 71, 2842, 71, 2846, + 71, 2843, 71, 71, 2847, 71, 71, 2844, 2852, 71, + 2845, 2849, 2855, 71, 2853, 2850, 2856, 71, 71, 2858, + 71, 2904, 71, 2851, 2857, 2854, 2859, 71, 71, 2861, + 71, 2862, 71, 2860, 2863, 71, 2864, 71, 2865, 71, + 2866, 71, 2867, 71, 2868, 71, 2870, 71, 71, 71, + 71, 71, 71, 2875, 71, 71, 71, 2871, 71, 2879, - 71, 2877, 71, 2878, 2875, 71, 2880, 71, 71, 71, - 2882, 71, 2881, 71, 2885, 71, 71, 71, 2879, 71, - 71, 2889, 2884, 2892, 71, 71, 2890, 2894, 71, 71, - 2886, 2887, 2888, 71, 2891, 2895, 71, 2893, 2896, 71, - 71, 71, 2898, 71, 71, 71, 71, 2907, 2897, 2900, - 2904, 71, 71, 2905, 2901, 2903, 71, 71, 2906, 71, - 71, 71, 71, 71, 2902, 2908, 71, 71, 71, 71, - 71, 2914, 71, 2911, 2918, 2909, 2913, 2910, 2915, 2921, - 71, 2922, 2919, 71, 2916, 2912, 71, 2917, 2923, 71, - 2920, 71, 2924, 2925, 71, 2926, 71, 71, 71, 71, + 71, 2872, 71, 2881, 71, 71, 2876, 71, 2877, 2888, + 2873, 2874, 2878, 71, 2882, 71, 2883, 2880, 71, 2885, + 71, 71, 71, 2887, 71, 2886, 71, 2890, 71, 71, + 71, 2884, 71, 71, 2894, 2889, 2897, 71, 71, 2895, + 2899, 71, 71, 2891, 2892, 2893, 71, 2896, 2900, 71, + 2898, 2901, 71, 71, 71, 2903, 71, 71, 71, 71, + 2912, 2902, 2905, 2909, 71, 71, 2910, 2906, 2908, 71, + 71, 2911, 71, 71, 71, 71, 71, 2907, 2913, 71, + 71, 71, 71, 71, 2919, 71, 2916, 2923, 2914, 2918, + 2915, 2920, 2926, 71, 2927, 2924, 71, 2921, 2917, 71, - 2929, 71, 2927, 2930, 2931, 71, 2928, 2934, 71, 71, - 71, 71, 71, 71, 71, 2937, 2939, 71, 2942, 71, - 2933, 2936, 2935, 71, 71, 71, 2932, 2940, 2945, 71, - 2949, 2938, 71, 2941, 71, 2946, 71, 2950, 2943, 71, - 2947, 71, 2944, 71, 2948, 71, 71, 2955, 71, 2956, - 71, 2954, 71, 2951, 2952, 71, 71, 71, 71, 71, - 71, 2960, 71, 71, 2953, 2962, 71, 2969, 71, 71, - 2959, 71, 2964, 2957, 2967, 2958, 2965, 71, 2961, 71, - 71, 2963, 2968, 2973, 71, 2966, 71, 71, 2975, 71, - 2976, 2970, 2974, 71, 71, 71, 71, 2971, 2977, 2972, + 2922, 2928, 71, 2925, 71, 2929, 2930, 71, 2931, 71, + 71, 71, 71, 2934, 71, 2932, 2935, 2936, 71, 2933, + 2939, 71, 71, 71, 71, 71, 71, 71, 2942, 2944, + 71, 2947, 71, 2938, 2941, 2940, 71, 71, 71, 2937, + 2945, 2950, 71, 2954, 2943, 71, 2946, 71, 2951, 71, + 2955, 2948, 71, 2952, 71, 2949, 71, 2953, 71, 71, + 2960, 71, 2961, 71, 2959, 71, 2956, 2957, 71, 71, + 71, 71, 71, 71, 2965, 71, 71, 2958, 2967, 71, + 2974, 71, 71, 2964, 71, 2969, 2962, 2972, 2963, 2970, + 71, 2966, 71, 71, 2968, 2973, 2978, 71, 2971, 71, - 2978, 2979, 2981, 2982, 71, 2980, 71, 71, 71, 2984, - 71, 2983, 71, 71, 71, 71, 2985, 2990, 71, 71, - 2987, 71, 2993, 71, 2994, 71, 2986, 71, 71, 71, - 71, 71, 2992, 2988, 2989, 2997, 2995, 2991, 71, 2996, - 71, 3001, 71, 3002, 3000, 71, 71, 2998, 2999, 71, - 3005, 71, 3007, 71, 3008, 3003, 71, 71, 71, 3012, - 71, 3009, 71, 71, 3010, 3006, 71, 3013, 3014, 3015, - 71, 3004, 71, 71, 71, 71, 71, 3011, 71, 3016, - 3017, 3019, 3018, 3021, 71, 71, 71, 71, 71, 3027, - 3023, 3024, 71, 3020, 3022, 3028, 71, 3025, 71, 71, + 71, 2980, 71, 2981, 2975, 2979, 71, 71, 71, 71, + 2976, 2982, 2977, 2983, 2984, 2986, 2987, 71, 2985, 71, + 71, 71, 2989, 71, 2988, 71, 71, 71, 71, 2990, + 2995, 71, 71, 2992, 71, 2998, 71, 2999, 71, 2991, + 71, 71, 71, 71, 71, 2997, 2993, 2994, 3002, 3000, + 2996, 71, 3001, 71, 3006, 71, 3007, 3005, 71, 71, + 3003, 3004, 71, 3010, 71, 3012, 71, 3013, 3008, 71, + 71, 71, 3017, 71, 3014, 71, 71, 3015, 3011, 71, + 3018, 3019, 3020, 71, 3009, 71, 71, 71, 71, 71, + 3016, 71, 3021, 3022, 3024, 3023, 3026, 71, 71, 71, - 3031, 3032, 71, 71, 3034, 71, 3026, 3035, 71, 71, - 3033, 3029, 71, 71, 71, 71, 3036, 3030, 3037, 3038, - 3041, 71, 3042, 71, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3039, 3043, 3043, 3040, 43, 43, 43, 43, 43, - 43, 43, 48, 48, 48, 48, 48, 48, 48, 53, - 53, 53, 53, 53, 53, 53, 59, 59, 59, 59, - 59, 59, 59, 64, 64, 64, 64, 64, 64, 64, - 74, 74, 3043, 74, 74, 74, 74, 141, 141, 3043, - 3043, 3043, 141, 141, 143, 143, 3043, 3043, 143, 3043, - 143, 145, 3043, 3043, 3043, 3043, 3043, 145, 148, 148, + 71, 71, 3032, 3028, 3029, 71, 3025, 3027, 3033, 71, + 3030, 71, 71, 3036, 3037, 71, 71, 3039, 71, 3031, + 3040, 71, 71, 3038, 3034, 71, 71, 71, 71, 3041, + 3035, 3042, 3043, 3046, 71, 3047, 71, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3044, 3048, 3048, 3045, 43, 43, + 43, 43, 43, 43, 43, 48, 48, 48, 48, 48, + 48, 48, 53, 53, 53, 53, 53, 53, 53, 59, + 59, 59, 59, 59, 59, 59, 64, 64, 64, 64, + 64, 64, 64, 74, 74, 3048, 74, 74, 74, 74, + 141, 141, 3048, 3048, 3048, 141, 141, 143, 143, 3048, - 3043, 3043, 3043, 148, 148, 150, 3043, 3043, 3043, 3043, - 3043, 150, 152, 152, 3043, 152, 152, 152, 152, 75, - 75, 3043, 75, 75, 75, 75, 13, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043 + 3048, 143, 3048, 143, 145, 3048, 3048, 3048, 3048, 3048, + 145, 148, 148, 3048, 3048, 3048, 148, 148, 150, 3048, + 3048, 3048, 3048, 3048, 150, 152, 152, 3048, 152, 152, + 152, 152, 75, 75, 3048, 75, 75, 75, 75, 13, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 } ; -static const flex_int16_t yy_chk[5968] = +static yyconst flex_int16_t yy_chk[5981] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2092,13 +2104,13 @@ static const flex_int16_t yy_chk[5968] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3049, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3054, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1000, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 1005, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, @@ -2135,611 +2147,612 @@ static const flex_int16_t yy_chk[5968] = 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, - 181, 186, 182, 183, 187, 188, 189, 189, 191, 187, - 188, 185, 189, 184, 185, 190, 192, 180, 197, 186, - 190, 193, 194, 194, 189, 195, 189, 193, 191, 196, + 181, 186, 182, 183, 187, 188, 192, 190, 191, 187, + 188, 185, 190, 184, 185, 194, 194, 180, 200, 186, + 189, 189, 192, 193, 189, 195, 189, 196, 191, 193, - 198, 195, 192, 199, 200, 196, 198, 195, 197, 199, - 201, 206, 202, 203, 204, 205, 201, 202, 199, 203, - 204, 207, 205, 208, 206, 200, 209, 207, 210, 211, - 213, 212, 209, 214, 215, 213, 216, 211, 217, 220, - 218, 222, 214, 208, 212, 218, 218, 221, 219, 215, - 210, 221, 216, 219, 223, 224, 225, 220, 217, 226, - 223, 227, 225, 222, 229, 228, 227, 228, 230, 233, - 231, 232, 234, 224, 224, 230, 231, 232, 234, 226, - 235, 236, 242, 229, 237, 237, 238, 238, 233, 243, - 239, 240, 235, 245, 243, 236, 239, 240, 241, 244, + 197, 195, 206, 196, 210, 198, 199, 195, 189, 200, + 189, 198, 199, 201, 208, 206, 145, 202, 203, 201, + 197, 199, 202, 204, 203, 205, 210, 207, 212, 204, + 209, 211, 205, 207, 208, 213, 209, 214, 215, 211, + 213, 212, 216, 217, 218, 222, 214, 219, 220, 218, + 218, 221, 219, 215, 223, 221, 224, 226, 216, 225, + 223, 229, 233, 217, 227, 225, 220, 222, 228, 227, + 228, 230, 235, 231, 224, 224, 232, 226, 230, 231, + 229, 233, 232, 234, 235, 236, 237, 237, 239, 234, + 238, 238, 240, 242, 239, 241, 243, 241, 240, 236, - 241, 246, 247, 248, 249, 242, 255, 250, 248, 246, - 251, 244, 245, 250, 239, 252, 251, 241, 253, 254, - 252, 255, 247, 253, 256, 254, 257, 249, 258, 259, - 260, 262, 266, 261, 262, 264, 264, 259, 256, 261, - 269, 263, 258, 263, 257, 265, 267, 267, 265, 270, - 266, 268, 268, 275, 271, 260, 269, 271, 272, 273, - 274, 285, 272, 276, 270, 278, 274, 275, 273, 276, - 277, 278, 277, 279, 280, 280, 281, 279, 282, 283, - 284, 281, 285, 286, 282, 287, 287, 288, 289, 290, - 288, 291, 293, 290, 279, 295, 286, 296, 284, 283, + 245, 243, 246, 244, 247, 249, 248, 250, 143, 260, + 246, 248, 239, 250, 241, 244, 242, 251, 256, 245, + 252, 253, 255, 251, 247, 252, 253, 254, 249, 257, + 258, 259, 256, 254, 260, 261, 263, 255, 263, 259, + 262, 261, 266, 262, 258, 264, 264, 257, 265, 267, + 267, 265, 268, 268, 269, 271, 270, 272, 271, 273, + 266, 272, 275, 274, 283, 277, 276, 277, 273, 274, + 269, 270, 276, 278, 279, 284, 275, 281, 279, 278, + 280, 280, 281, 282, 283, 285, 286, 287, 287, 282, + 289, 288, 290, 284, 288, 279, 290, 291, 296, 286, - 292, 292, 294, 296, 298, 294, 289, 295, 297, 291, - 293, 297, 300, 301, 302, 303, 298, 305, 303, 302, - 303, 300, 294, 299, 304, 306, 307, 304, 307, 307, - 305, 301, 299, 308, 310, 299, 303, 306, 308, 308, - 299, 299, 299, 299, 309, 311, 312, 309, 313, 314, - 314, 310, 317, 315, 310, 312, 319, 313, 315, 318, - 311, 316, 316, 320, 318, 321, 322, 317, 319, 323, - 326, 324, 324, 327, 324, 323, 335, 335, 327, 329, - 328, 322, 320, 324, 329, 321, 328, 330, 331, 332, - 326, 331, 330, 331, 333, 334, 336, 333, 330, 337, + 292, 293, 293, 294, 295, 297, 285, 295, 289, 298, + 296, 297, 298, 299, 301, 302, 291, 303, 292, 315, + 315, 294, 303, 301, 295, 299, 300, 304, 305, 306, + 304, 305, 304, 302, 309, 300, 141, 307, 300, 309, + 309, 311, 306, 300, 300, 300, 300, 312, 304, 307, + 308, 310, 308, 308, 310, 313, 314, 318, 311, 317, + 317, 311, 312, 316, 313, 314, 319, 320, 316, 321, + 322, 319, 318, 327, 323, 324, 336, 336, 329, 320, + 70, 324, 325, 325, 329, 325, 328, 330, 321, 323, + 322, 328, 330, 327, 325, 331, 332, 333, 335, 332, - 337, 338, 336, 332, 334, 339, 338, 343, 339, 341, - 333, 342, 373, 333, 339, 333, 344, 347, 339, 345, - 347, 348, 343, 350, 373, 351, 339, 340, 340, 341, - 340, 344, 342, 345, 351, 348, 347, 354, 350, 352, - 355, 353, 356, 340, 352, 352, 340, 353, 340, 358, - 340, 349, 357, 349, 349, 360, 359, 356, 354, 355, - 361, 357, 359, 349, 362, 349, 349, 349, 358, 363, - 349, 364, 365, 366, 367, 363, 369, 368, 362, 363, - 361, 360, 368, 372, 370, 371, 371, 374, 376, 367, - 370, 369, 365, 366, 364, 377, 375, 379, 379, 378, + 331, 332, 334, 337, 342, 334, 331, 335, 346, 337, + 339, 333, 338, 338, 343, 339, 340, 344, 334, 340, + 349, 334, 346, 334, 342, 340, 568, 345, 348, 340, + 351, 348, 344, 568, 349, 343, 356, 340, 341, 341, + 352, 341, 345, 357, 354, 351, 353, 348, 355, 352, + 354, 353, 353, 361, 341, 356, 359, 341, 357, 341, + 360, 341, 350, 358, 350, 350, 360, 362, 363, 355, + 365, 366, 358, 368, 350, 359, 350, 350, 350, 361, + 364, 350, 363, 367, 369, 370, 364, 362, 368, 369, + 364, 366, 371, 365, 372, 372, 373, 374, 371, 375, - 379, 374, 375, 372, 378, 380, 381, 382, 387, 387, - 383, 377, 384, 376, 384, 385, 386, 388, 389, 385, - 386, 390, 381, 382, 383, 380, 391, 392, 145, 393, - 394, 399, 384, 389, 397, 386, 388, 390, 393, 394, - 395, 392, 396, 397, 391, 395, 396, 398, 400, 393, - 403, 393, 399, 398, 400, 401, 402, 404, 404, 401, - 405, 402, 406, 406, 407, 408, 409, 409, 410, 407, - 403, 411, 412, 405, 410, 411, 413, 414, 408, 415, - 416, 416, 414, 417, 415, 418, 419, 412, 420, 416, - 421, 423, 422, 421, 426, 417, 422, 413, 424, 424, + 370, 376, 377, 367, 378, 379, 381, 376, 382, 374, + 379, 380, 380, 375, 380, 383, 373, 385, 384, 385, + 378, 386, 388, 388, 382, 386, 381, 377, 389, 387, + 390, 383, 384, 387, 391, 392, 396, 385, 393, 397, + 394, 396, 395, 397, 400, 390, 398, 389, 387, 394, + 391, 395, 393, 392, 405, 398, 403, 399, 401, 403, + 394, 64, 394, 399, 401, 400, 402, 404, 406, 406, + 402, 407, 404, 409, 405, 408, 408, 410, 409, 411, + 411, 412, 413, 414, 407, 415, 413, 412, 416, 417, + 410, 418, 418, 416, 417, 419, 420, 421, 414, 422, - 420, 425, 428, 423, 419, 418, 425, 427, 427, 430, - 430, 431, 432, 433, 434, 426, 435, 437, 438, 439, - 432, 440, 433, 442, 428, 450, 443, 440, 435, 442, - 441, 443, 431, 439, 434, 437, 444, 437, 438, 441, - 445, 446, 447, 448, 446, 450, 449, 452, 445, 453, - 444, 445, 449, 452, 451, 454, 447, 451, 448, 455, - 454, 456, 457, 453, 458, 459, 457, 460, 461, 458, - 462, 452, 460, 463, 466, 468, 469, 467, 476, 468, - 459, 455, 456, 470, 461, 473, 463, 476, 143, 462, - 464, 464, 467, 471, 466, 469, 464, 471, 464, 470, + 418, 423, 425, 427, 423, 424, 415, 419, 427, 424, + 428, 422, 426, 426, 425, 421, 420, 429, 429, 430, + 432, 432, 433, 437, 434, 435, 436, 439, 440, 443, + 441, 428, 434, 442, 435, 437, 444, 446, 443, 442, + 452, 430, 444, 433, 441, 439, 436, 439, 440, 445, + 447, 446, 448, 449, 445, 448, 450, 451, 447, 453, + 452, 447, 453, 451, 454, 455, 458, 449, 456, 457, + 454, 450, 459, 456, 461, 460, 459, 462, 463, 455, + 460, 464, 462, 465, 468, 484, 484, 458, 454, 461, + 469, 457, 471, 470, 463, 473, 465, 470, 472, 473, - 473, 475, 472, 474, 464, 478, 464, 472, 474, 464, - 464, 472, 477, 480, 481, 483, 464, 475, 477, 479, - 485, 478, 479, 477, 482, 482, 484, 484, 487, 486, - 488, 489, 490, 491, 481, 485, 480, 490, 492, 493, - 483, 486, 491, 487, 494, 501, 496, 497, 499, 488, - 494, 497, 498, 489, 493, 496, 500, 492, 498, 502, - 499, 503, 504, 505, 501, 506, 507, 505, 507, 508, - 511, 500, 513, 502, 509, 509, 503, 508, 506, 510, - 504, 512, 511, 514, 513, 510, 514, 512, 515, 516, - 517, 518, 519, 520, 518, 517, 638, 522, 523, 523, + 464, 466, 466, 474, 468, 469, 477, 466, 474, 466, + 475, 471, 474, 476, 472, 466, 480, 466, 476, 478, + 466, 466, 477, 479, 482, 475, 483, 466, 478, 479, + 481, 485, 480, 481, 479, 486, 486, 487, 488, 489, + 490, 491, 493, 492, 59, 494, 483, 482, 492, 496, + 488, 493, 487, 495, 489, 496, 485, 498, 499, 490, + 501, 500, 499, 491, 494, 502, 498, 500, 495, 503, + 504, 505, 501, 506, 507, 509, 508, 509, 507, 510, + 502, 511, 511, 513, 504, 515, 505, 510, 503, 508, + 512, 506, 514, 517, 518, 513, 512, 515, 514, 516, - 521, 519, 515, 529, 516, 521, 521, 638, 519, 520, - 522, 519, 524, 524, 525, 526, 526, 527, 527, 528, - 525, 532, 531, 530, 529, 528, 530, 531, 533, 534, - 535, 536, 534, 537, 538, 535, 533, 539, 538, 541, - 532, 540, 542, 539, 543, 540, 545, 542, 546, 544, - 548, 545, 537, 547, 536, 544, 547, 541, 549, 549, - 550, 547, 546, 553, 543, 547, 551, 552, 548, 554, - 556, 551, 552, 557, 563, 559, 556, 553, 550, 559, - 558, 560, 557, 558, 554, 561, 560, 562, 561, 564, - 563, 565, 562, 566, 567, 568, 569, 569, 565, 567, + 519, 520, 516, 521, 520, 519, 533, 517, 522, 518, + 523, 533, 521, 524, 531, 523, 523, 525, 525, 521, + 526, 526, 521, 527, 522, 534, 524, 528, 528, 527, + 529, 529, 530, 532, 535, 531, 532, 536, 530, 538, + 536, 537, 535, 540, 534, 539, 537, 540, 541, 542, + 543, 544, 545, 542, 541, 546, 544, 548, 547, 550, + 54, 546, 538, 547, 539, 552, 549, 556, 543, 549, + 553, 548, 545, 557, 549, 551, 551, 550, 549, 554, + 555, 556, 560, 552, 554, 555, 553, 559, 557, 561, + 562, 560, 561, 559, 562, 563, 564, 565, 566, 564, - 570, 559, 571, 572, 573, 574, 566, 564, 575, 570, - 576, 695, 581, 573, 575, 568, 576, 574, 582, 572, - 577, 571, 695, 577, 578, 578, 579, 578, 580, 579, - 581, 583, 582, 580, 584, 585, 591, 583, 589, 584, - 586, 585, 587, 586, 588, 590, 592, 587, 593, 588, - 588, 589, 592, 594, 595, 591, 591, 596, 590, 595, - 597, 597, 594, 598, 601, 599, 600, 593, 599, 602, - 598, 605, 600, 603, 602, 607, 601, 596, 603, 603, - 604, 604, 606, 599, 606, 608, 609, 608, 610, 611, - 612, 613, 614, 615, 607, 617, 605, 615, 614, 616, + 563, 567, 565, 570, 569, 571, 572, 572, 570, 573, + 574, 575, 576, 584, 566, 53, 562, 569, 573, 567, + 577, 576, 578, 580, 579, 571, 580, 575, 578, 574, + 579, 584, 577, 581, 581, 582, 581, 583, 582, 585, + 586, 588, 583, 587, 594, 590, 586, 588, 587, 589, + 590, 591, 589, 585, 592, 593, 591, 591, 596, 595, + 597, 598, 599, 594, 594, 595, 598, 592, 593, 597, + 600, 600, 601, 602, 603, 604, 602, 596, 605, 601, + 603, 608, 599, 605, 606, 607, 607, 604, 610, 606, + 606, 602, 609, 611, 609, 611, 612, 613, 614, 615, - 618, 619, 620, 622, 609, 621, 610, 611, 616, 612, - 617, 613, 624, 625, 623, 618, 626, 621, 622, 619, - 623, 620, 627, 628, 629, 625, 624, 628, 630, 631, - 632, 633, 634, 635, 635, 626, 636, 637, 639, 641, - 636, 627, 629, 642, 630, 141, 634, 631, 632, 632, - 633, 643, 639, 640, 644, 641, 637, 649, 640, 646, - 645, 644, 642, 647, 643, 645, 646, 648, 647, 650, - 651, 652, 648, 653, 654, 649, 650, 656, 655, 651, - 656, 658, 653, 655, 657, 652, 654, 659, 657, 660, - 662, 661, 663, 663, 666, 658, 659, 664, 664, 665, + 616, 618, 617, 619, 620, 618, 608, 610, 617, 621, + 622, 623, 619, 624, 612, 613, 614, 625, 615, 620, + 616, 626, 627, 628, 621, 624, 629, 626, 622, 630, + 623, 632, 625, 631, 633, 628, 627, 631, 634, 635, + 636, 637, 638, 638, 640, 629, 642, 639, 630, 632, + 633, 639, 644, 641, 645, 637, 634, 635, 635, 636, + 642, 643, 646, 640, 641, 647, 643, 652, 644, 648, + 649, 650, 647, 645, 648, 646, 650, 649, 651, 653, + 654, 655, 656, 651, 657, 652, 653, 658, 661, 654, + 659, 656, 658, 659, 660, 655, 657, 662, 660, 663, - 665, 668, 669, 666, 660, 661, 664, 670, 669, 671, - 672, 662, 673, 671, 674, 675, 676, 678, 677, 679, - 668, 675, 672, 680, 676, 677, 683, 670, 690, 686, - 689, 691, 674, 698, 690, 678, 692, 673, 696, 689, - 692, 683, 70, 680, 679, 681, 686, 691, 693, 693, - 681, 694, 694, 698, 681, 697, 696, 681, 701, 702, - 699, 703, 704, 701, 681, 681, 699, 681, 707, 697, - 700, 700, 700, 705, 700, 707, 705, 700, 709, 703, - 702, 64, 700, 706, 706, 708, 708, 704, 700, 700, - 710, 710, 711, 709, 713, 712, 715, 711, 712, 713, + 665, 664, 661, 666, 666, 671, 662, 667, 667, 668, + 668, 669, 672, 673, 663, 664, 667, 675, 672, 674, + 669, 665, 676, 674, 671, 677, 678, 679, 681, 675, + 680, 682, 678, 673, 683, 679, 686, 680, 689, 692, + 48, 695, 694, 677, 693, 695, 681, 676, 692, 699, + 693, 686, 696, 696, 683, 689, 682, 684, 694, 697, + 697, 698, 684, 701, 700, 702, 684, 699, 704, 684, + 773, 702, 698, 704, 705, 706, 684, 684, 700, 684, + 707, 709, 709, 701, 703, 703, 703, 708, 703, 712, + 708, 703, 710, 706, 773, 705, 703, 711, 711, 710, - 714, 716, 714, 717, 718, 720, 719, 717, 715, 721, - 721, 722, 725, 720, 723, 724, 724, 726, 727, 760, - 716, 728, 730, 730, 718, 719, 722, 728, 723, 726, - 725, 729, 731, 760, 733, 734, 729, 731, 731, 733, - 727, 734, 735, 738, 736, 737, 738, 739, 735, 736, - 740, 737, 743, 739, 741, 741, 742, 742, 740, 744, - 743, 745, 746, 747, 748, 748, 745, 749, 751, 746, - 750, 752, 754, 761, 751, 755, 749, 744, 750, 757, - 756, 754, 747, 758, 755, 756, 758, 759, 757, 763, - 752, 762, 759, 765, 765, 766, 767, 768, 761, 764, + 713, 713, 703, 703, 712, 707, 714, 715, 716, 719, + 715, 714, 720, 716, 717, 717, 718, 722, 718, 721, + 723, 719, 724, 721, 725, 725, 726, 729, 727, 731, + 724, 720, 728, 728, 730, 733, 750, 722, 732, 723, + 733, 726, 727, 750, 732, 729, 730, 734, 734, 735, + 738, 731, 737, 739, 735, 735, 738, 737, 740, 739, + 741, 742, 743, 740, 742, 744, 741, 747, 743, 745, + 745, 746, 746, 744, 748, 747, 749, 751, 752, 752, + 753, 749, 754, 756, 758, 755, 759, 765, 761, 753, + 754, 755, 748, 758, 760, 759, 751, 761, 762, 760, - 762, 769, 763, 774, 764, 764, 768, 772, 770, 772, - 766, 770, 773, 773, 776, 767, 775, 777, 778, 770, - 779, 775, 781, 780, 774, 769, 782, 784, 783, 785, - 786, 781, 783, 789, 788, 776, 786, 777, 778, 790, - 792, 787, 779, 780, 795, 784, 788, 796, 785, 782, - 787, 791, 789, 790, 792, 793, 796, 791, 794, 794, - 793, 797, 798, 799, 795, 800, 801, 803, 802, 805, - 798, 806, 804, 803, 807, 805, 808, 810, 811, 812, - 807, 797, 808, 799, 812, 801, 804, 800, 802, 809, - 811, 806, 813, 809, 814, 814, 810, 815, 811, 816, + 763, 762, 756, 764, 766, 763, 767, 769, 769, 768, + 770, 771, 765, 766, 768, 768, 778, 764, 772, 767, + 774, 779, 776, 774, 776, 770, 779, 772, 777, 777, + 771, 774, 780, 785, 781, 782, 783, 778, 786, 784, + 787, 789, 785, 790, 787, 788, 793, 791, 43, 790, + 792, 795, 794, 780, 781, 782, 791, 795, 783, 784, + 789, 786, 792, 788, 796, 793, 794, 797, 798, 798, + 799, 800, 797, 801, 802, 803, 804, 805, 796, 806, + 800, 807, 802, 808, 810, 809, 811, 807, 812, 814, + 799, 809, 811, 801, 812, 803, 805, 808, 804, 806, - 817, 818, 816, 815, 819, 820, 821, 821, 822, 825, - 819, 823, 828, 813, 818, 829, 823, 826, 817, 824, - 824, 826, 827, 827, 825, 820, 822, 830, 831, 833, - 834, 836, 830, 837, 828, 829, 839, 839, 840, 842, - 842, 841, 840, 843, 834, 844, 845, 831, 846, 844, - 852, 836, 847, 833, 837, 838, 841, 847, 838, 848, - 838, 845, 846, 850, 838, 852, 838, 854, 843, 849, - 856, 838, 857, 848, 849, 849, 838, 850, 851, 854, - 853, 855, 851, 858, 856, 853, 855, 862, 862, 865, - 859, 866, 860, 857, 851, 853, 859, 858, 860, 861, + 815, 813, 816, 817, 810, 813, 822, 816, 814, 818, + 818, 819, 815, 820, 821, 823, 820, 819, 824, 822, + 815, 823, 825, 825, 817, 826, 827, 828, 828, 829, + 830, 827, 821, 832, 830, 831, 831, 833, 824, 835, + 834, 837, 838, 826, 829, 834, 840, 841, 843, 843, + 844, 847, 845, 879, 844, 832, 838, 833, 835, 846, + 846, 879, 849, 866, 866, 837, 840, 845, 841, 842, + 850, 848, 842, 852, 842, 848, 847, 849, 842, 854, + 842, 851, 856, 853, 850, 842, 851, 852, 853, 853, + 842, 855, 858, 854, 857, 855, 859, 856, 860, 857, - 867, 863, 864, 869, 870, 861, 863, 871, 864, 870, - 866, 865, 872, 873, 873, 869, 876, 874, 867, 868, - 868, 871, 874, 875, 872, 868, 59, 868, 877, 878, - 876, 875, 880, 868, 879, 879, 880, 882, 868, 868, - 884, 883, 885, 882, 883, 868, 886, 877, 878, 887, - 888, 889, 886, 890, 887, 885, 891, 892, 893, 884, - 889, 894, 890, 892, 896, 895, 898, 893, 897, 888, - 895, 899, 891, 902, 903, 904, 900, 906, 901, 902, - 894, 904, 897, 899, 896, 900, 898, 901, 908, 909, - 911, 903, 910, 906, 912, 913, 914, 919, 915, 924, + 861, 859, 862, 869, 858, 863, 871, 855, 864, 857, + 867, 863, 860, 865, 864, 867, 862, 868, 870, 865, + 873, 861, 874, 868, 871, 869, 875, 874, 878, 876, + 877, 877, 873, 878, 880, 881, 882, 870, 872, 872, + 875, 876, 883, 883, 872, 884, 872, 886, 880, 884, + 888, 892, 872, 886, 881, 882, 887, 872, 872, 887, + 889, 890, 894, 891, 872, 895, 896, 890, 891, 888, + 892, 894, 897, 889, 895, 898, 899, 901, 897, 902, + 900, 903, 896, 905, 898, 900, 904, 906, 907, 908, + 913, 911, 905, 902, 907, 899, 906, 901, 904, 909, - 918, 914, 908, 915, 911, 918, 919, 920, 920, 909, - 913, 910, 912, 921, 922, 924, 925, 927, 928, 921, - 927, 925, 925, 929, 926, 926, 930, 922, 926, 931, - 932, 933, 928, 934, 935, 936, 937, 933, 938, 941, - 935, 937, 931, 929, 930, 932, 940, 944, 54, 940, - 936, 942, 938, 934, 943, 947, 942, 945, 949, 943, - 941, 946, 945, 944, 949, 950, 946, 947, 951, 952, - 953, 953, 955, 954, 951, 952, 956, 957, 957, 956, - 958, 950, 954, 959, 960, 961, 962, 963, 961, 964, - 955, 965, 966, 963, 970, 964, 965, 966, 958, 962, + 914, 903, 915, 916, 913, 909, 908, 911, 917, 918, + 919, 920, 14, 923, 924, 919, 920, 916, 923, 926, + 914, 915, 927, 924, 918, 926, 917, 925, 925, 929, + 932, 930, 933, 932, 934, 927, 930, 930, 931, 931, + 935, 938, 931, 936, 937, 929, 933, 938, 939, 940, + 941, 946, 942, 943, 934, 940, 936, 942, 935, 937, + 945, 947, 949, 945, 948, 941, 947, 943, 939, 948, + 950, 951, 946, 952, 954, 950, 951, 955, 949, 960, + 954, 956, 957, 958, 958, 952, 959, 956, 957, 961, + 962, 962, 961, 955, 963, 959, 964, 960, 965, 966, - 967, 968, 959, 971, 960, 967, 973, 968, 972, 974, - 974, 973, 970, 975, 972, 976, 977, 978, 979, 980, - 978, 979, 975, 971, 976, 981, 982, 983, 987, 984, - 980, 985, 986, 987, 977, 984, 989, 985, 982, 988, - 988, 991, 990, 981, 992, 993, 983, 986, 992, 994, - 995, 996, 998, 991, 1001, 989, 990, 1002, 994, 999, - 999, 1003, 1004, 993, 1007, 1005, 1013, 1004, 1001, 995, - 53, 998, 1002, 1003, 1005, 1008, 996, 1006, 1006, 1009, - 1013, 1008, 1010, 1014, 1007, 1009, 1011, 1010, 1011, 1012, - 1015, 1016, 1017, 1018, 1012, 1015, 1020, 1014, 1019, 1025, + 967, 968, 966, 969, 976, 970, 971, 968, 975, 969, + 970, 971, 963, 967, 972, 964, 973, 977, 965, 972, + 978, 980, 973, 977, 976, 978, 975, 979, 979, 981, + 980, 982, 983, 984, 985, 983, 984, 986, 981, 987, + 988, 989, 990, 991, 994, 985, 995, 989, 990, 982, + 996, 987, 992, 993, 993, 986, 998, 992, 991, 988, + 995, 997, 996, 994, 999, 997, 1000, 1001, 1003, 1004, + 1004, 1008, 1006, 999, 998, 1007, 1009, 1011, 1011, 1010, + 1012, 1009, 1016, 1008, 1016, 1000, 1006, 1003, 1010, 1013, + 1007, 1014, 1001, 1015, 1017, 1013, 1018, 1014, 1015, 1017, - 1018, 1022, 1022, 1023, 1024, 1027, 1016, 1028, 1030, 1030, - 1026, 1017, 1028, 1019, 1025, 1020, 1026, 1023, 1034, 1031, - 1036, 1028, 1024, 1028, 1031, 1027, 1028, 1032, 1032, 1033, - 1035, 1037, 1034, 1035, 1038, 1039, 1033, 1040, 1043, 1036, - 1039, 1041, 1042, 1038, 1045, 1045, 1041, 1046, 1048, 1037, - 1047, 1051, 1046, 1042, 1049, 1047, 1040, 1043, 1050, 1049, - 1051, 1052, 1050, 1053, 1054, 1055, 1056, 1057, 1048, 1059, - 1058, 1060, 1061, 1062, 1057, 1069, 1052, 1055, 1053, 1062, - 1063, 1056, 1058, 1054, 1064, 1065, 1070, 1066, 1059, 1069, - 1061, 1068, 1060, 1071, 1070, 1063, 1066, 1068, 1072, 1073, + 1012, 1019, 1020, 1021, 1022, 1023, 1024, 1020, 1025, 1030, + 1018, 1028, 1023, 1027, 1027, 1019, 1029, 1032, 1021, 1040, + 1031, 1024, 1040, 1022, 1030, 1028, 1031, 1025, 1033, 1035, + 1035, 1036, 1039, 1033, 1029, 1041, 1036, 1032, 1037, 1037, + 1042, 1038, 1033, 1043, 1033, 1044, 1039, 1033, 1038, 1045, + 1044, 1046, 1043, 1047, 1041, 1048, 1046, 1051, 1042, 1050, + 1050, 1052, 1051, 1053, 1047, 1054, 1052, 1055, 1045, 1056, + 1054, 1055, 1057, 1058, 1048, 1059, 1061, 1060, 1056, 1062, + 1063, 1064, 1065, 1053, 1066, 1069, 1062, 1057, 1058, 1060, + 1067, 1061, 1063, 1068, 1059, 1070, 1067, 1071, 1073, 1074, - 1075, 1074, 1076, 1072, 1064, 1065, 1074, 1074, 1077, 1078, - 1078, 1073, 1080, 1071, 1081, 1084, 1076, 1085, 1082, 1075, - 1084, 1077, 1079, 1081, 1082, 1080, 1085, 1079, 1083, 1083, - 1079, 1079, 1086, 1090, 1087, 1079, 1093, 1088, 1086, 1087, - 1094, 1079, 1088, 1089, 1089, 1079, 1091, 1091, 1092, 1096, - 1095, 1092, 1097, 1092, 1090, 1099, 1093, 1097, 1094, 1095, - 1098, 1100, 1101, 1104, 1134, 1102, 1134, 1100, 1101, 1096, - 1102, 1103, 1104, 1099, 1098, 1103, 1111, 1104, 1109, 1104, - 1107, 1104, 1109, 1104, 1105, 1105, 1106, 1106, 1110, 1106, - 1112, 1107, 1113, 1114, 1111, 1115, 1116, 1113, 1113, 1112, + 1064, 1075, 1066, 1065, 1073, 1069, 1071, 1076, 1068, 1075, + 1078, 1077, 1079, 1074, 1080, 1070, 1077, 1079, 1079, 1082, + 1081, 1086, 1078, 1083, 1083, 1085, 13, 1076, 1088, 1088, + 1086, 1087, 1082, 1080, 1081, 1084, 1089, 1087, 1085, 1091, + 1084, 1089, 1090, 1084, 1084, 1091, 1095, 1092, 1084, 1098, + 1093, 1090, 1092, 1099, 1084, 1093, 1094, 1094, 1084, 1096, + 1096, 1097, 1101, 1100, 1097, 1102, 1097, 1095, 1104, 1098, + 1102, 1099, 1100, 1103, 1105, 1106, 1109, 1139, 1107, 1139, + 1105, 1106, 1101, 1107, 1108, 1109, 1104, 1103, 1108, 1116, + 1109, 1114, 1109, 1112, 1109, 1114, 1109, 1110, 1110, 1111, - 1115, 1118, 1117, 1110, 1119, 1120, 1121, 1122, 1122, 1123, - 1116, 1117, 1121, 1124, 1126, 1114, 1125, 1123, 1128, 1120, - 1118, 1125, 1127, 1119, 1129, 1130, 1132, 1124, 1126, 1138, - 1130, 1127, 1131, 1131, 1133, 1133, 1128, 1136, 1137, 1141, - 1136, 1132, 1139, 1137, 1140, 1140, 1142, 1142, 1138, 1129, - 1144, 1139, 1143, 1143, 1145, 1144, 1146, 1147, 1147, 1141, - 1148, 1149, 1150, 1151, 1149, 1152, 1154, 1153, 1151, 1153, - 1156, 1157, 48, 1156, 1152, 1145, 1158, 1146, 1159, 1160, - 1148, 1158, 1150, 1159, 1154, 1161, 1157, 1160, 1162, 1164, - 1161, 1163, 1163, 1162, 1164, 1165, 1166, 1167, 1168, 1170, + 1111, 1115, 1111, 1117, 1112, 1118, 1119, 1116, 1120, 1121, + 1118, 1118, 1117, 1120, 1123, 1122, 1115, 1124, 1125, 1126, + 1127, 1127, 1128, 1121, 1122, 1126, 1129, 1131, 1119, 1130, + 1128, 1133, 1125, 1123, 1130, 1132, 1124, 1134, 1135, 1137, + 1129, 1131, 1143, 1135, 1132, 1136, 1136, 1138, 1138, 1133, + 1141, 1142, 1146, 1141, 1137, 1144, 1142, 1145, 1145, 1147, + 1147, 1143, 1134, 1149, 1144, 1148, 1148, 1150, 1149, 1151, + 1152, 1152, 1146, 1153, 1154, 1155, 1156, 1154, 1157, 1159, + 1158, 1156, 1158, 1161, 1162, 0, 1161, 1157, 1150, 1163, + 1151, 1164, 1165, 1153, 1163, 1155, 1164, 1159, 1166, 1162, - 1171, 1173, 1166, 1172, 1167, 1170, 1171, 1173, 1172, 1174, - 1175, 1168, 1176, 1165, 1177, 1177, 1178, 1180, 1174, 1181, - 1182, 1183, 1184, 1176, 1186, 1187, 1182, 1183, 1184, 1175, - 1186, 1188, 1189, 1190, 1191, 1193, 1178, 1180, 1194, 1187, - 1192, 1192, 1181, 1195, 1189, 1187, 1198, 1190, 1196, 1197, - 1197, 1188, 1191, 1196, 1199, 1193, 1201, 43, 1203, 1199, - 1202, 1195, 1204, 1194, 1205, 1202, 1202, 1206, 1207, 1198, - 1208, 1204, 1205, 1211, 1209, 1201, 1203, 1217, 1210, 1209, - 1210, 1206, 1209, 1207, 1213, 1208, 1215, 1211, 1208, 1214, - 1213, 1218, 1219, 1214, 1216, 1221, 1217, 1215, 1220, 1216, + 1165, 1167, 1169, 1166, 1168, 1168, 1167, 1169, 1170, 1171, + 1172, 1173, 1175, 1176, 1178, 1171, 1177, 1172, 1175, 1176, + 1178, 1177, 1179, 1180, 1173, 1181, 1170, 1182, 1182, 1183, + 1185, 1179, 1186, 1187, 1188, 1189, 1181, 1191, 1192, 1187, + 1188, 1189, 1180, 1191, 1193, 1194, 1195, 1196, 1198, 1183, + 1185, 1199, 1192, 1197, 1197, 1186, 1200, 1194, 1192, 1203, + 1195, 1201, 1202, 1202, 1193, 1196, 1201, 1204, 1198, 1206, + 0, 1208, 1204, 1207, 1200, 1209, 1199, 1210, 1207, 1207, + 1211, 1212, 1203, 1213, 1209, 1210, 1216, 1214, 1206, 1208, + 1222, 1215, 1214, 1215, 1211, 1214, 1212, 1218, 1213, 1220, - 1216, 1222, 1223, 1220, 1225, 1226, 1222, 1227, 1228, 1228, - 1219, 1229, 1230, 1221, 1231, 1229, 1233, 1218, 1225, 1234, - 1232, 1235, 1223, 1226, 1236, 1227, 1232, 1237, 1233, 1238, - 1230, 1239, 1241, 1231, 1240, 1235, 1239, 1241, 1234, 1236, - 1242, 1240, 1237, 1243, 1244, 1244, 1245, 1246, 1238, 1247, - 1248, 1249, 1243, 1246, 1250, 1248, 1257, 1249, 1242, 1258, - 1250, 1245, 1251, 1251, 1252, 1252, 1254, 1254, 1255, 1256, - 1247, 1259, 1255, 1258, 1257, 1260, 1261, 1261, 1256, 1262, - 1263, 1265, 1260, 1266, 1264, 1267, 1259, 1268, 1263, 1264, - 1267, 1267, 1268, 1268, 1269, 1265, 1270, 1270, 1271, 1262, + 1216, 1213, 1219, 1218, 1223, 1224, 1219, 1221, 1226, 1222, + 1220, 1225, 1221, 1221, 1227, 1228, 1225, 1230, 1231, 1227, + 1232, 1233, 1233, 1224, 1234, 1235, 1226, 1236, 1234, 1238, + 1223, 1230, 1239, 1237, 1240, 1228, 1231, 1241, 1232, 1237, + 1242, 1238, 1243, 1235, 1244, 1246, 1236, 1245, 1240, 1244, + 1246, 1239, 1241, 1247, 1245, 1242, 1248, 1249, 1249, 1250, + 1251, 1243, 1252, 1253, 1254, 1248, 1251, 1255, 1253, 1262, + 1254, 1247, 1263, 1255, 1250, 1256, 1256, 1257, 1257, 1259, + 1259, 1260, 1261, 1252, 1264, 1260, 1263, 1262, 1265, 1266, + 1266, 1261, 1267, 1268, 1270, 1265, 1271, 1269, 1272, 1264, - 1272, 1273, 1266, 1274, 1275, 1276, 1277, 1278, 1274, 1280, - 1273, 1279, 1281, 1278, 1269, 1282, 1279, 1271, 1281, 1272, - 1283, 1284, 1285, 1275, 1277, 1276, 1283, 1284, 1286, 1287, - 1288, 1289, 1290, 14, 1282, 1280, 1291, 1292, 1292, 1293, - 1294, 1285, 1293, 1295, 1295, 1289, 1298, 1286, 1287, 1288, - 1298, 1291, 1294, 1290, 1296, 1296, 1297, 1299, 1300, 1301, - 1302, 1297, 1302, 1304, 1306, 1305, 1302, 1300, 1304, 1307, - 1299, 1309, 1301, 1308, 1308, 1310, 1309, 1311, 1312, 1302, - 1305, 1310, 1313, 1316, 1306, 1307, 1314, 1313, 1317, 1315, - 1314, 1312, 1311, 1315, 1318, 1319, 1320, 1320, 1322, 1324, + 1273, 1268, 1269, 1272, 1272, 1273, 1273, 1274, 1270, 1275, + 1275, 1276, 1267, 1277, 1278, 1271, 1279, 1280, 1281, 1282, + 1283, 1279, 1285, 1278, 1284, 1286, 1283, 1274, 1287, 1284, + 1276, 1286, 1277, 1288, 1289, 1290, 1280, 1282, 1281, 1288, + 1289, 1291, 1292, 1293, 1294, 1295, 0, 1287, 1285, 1296, + 1297, 1297, 1298, 1299, 1290, 1298, 1300, 1300, 1294, 1303, + 1291, 1292, 1293, 1303, 1296, 1299, 1295, 1301, 1301, 1302, + 1304, 1305, 1306, 1307, 1302, 1307, 1309, 1311, 1310, 1307, + 1305, 1309, 1312, 1304, 1314, 1306, 1313, 1313, 1315, 1314, + 1316, 1317, 1307, 1310, 1315, 1318, 1321, 1311, 1312, 1319, - 1325, 1319, 1328, 1316, 1327, 1325, 1317, 1326, 1326, 1334, - 1327, 1330, 1330, 1335, 1318, 1332, 1322, 1338, 1332, 1339, - 1324, 1341, 1328, 1333, 1333, 1334, 1342, 1337, 1339, 1335, - 1337, 1340, 1340, 1343, 1344, 1345, 1341, 1338, 1347, 1344, - 1346, 1346, 1348, 1349, 1350, 1350, 1351, 1342, 1352, 1345, - 1353, 1357, 1343, 1359, 1354, 1353, 1347, 1348, 1355, 1355, - 1351, 1356, 1358, 1358, 1362, 1356, 1352, 1360, 1349, 1354, - 1361, 1357, 1363, 1366, 1361, 1359, 1367, 1363, 1360, 1365, - 1365, 1368, 1369, 1362, 1370, 1371, 1371, 1372, 1373, 1375, - 1367, 1366, 1372, 1374, 1376, 1377, 1369, 1380, 1375, 1376, + 1318, 1322, 1320, 1319, 1317, 1316, 1320, 1323, 1324, 1325, + 1325, 1327, 1329, 1330, 1324, 1333, 1321, 1332, 1330, 1322, + 1331, 1331, 1339, 1332, 1335, 1335, 1340, 1323, 1337, 1327, + 1343, 1337, 1344, 1329, 1346, 1333, 1338, 1338, 1339, 1347, + 1342, 1344, 1340, 1342, 1345, 1345, 1348, 1349, 1350, 1346, + 1343, 1352, 1349, 1351, 1351, 1353, 1354, 1355, 1355, 1356, + 1347, 1357, 1350, 1358, 1362, 1348, 1364, 1359, 1358, 1352, + 1353, 1360, 1360, 1356, 1361, 1363, 1363, 1367, 1361, 1357, + 1365, 1354, 1359, 1366, 1362, 1368, 1371, 1366, 1364, 1372, + 1368, 1365, 1370, 1370, 1373, 1374, 1367, 1375, 1376, 1376, - 1368, 1368, 1378, 1380, 1378, 1379, 1381, 1384, 1373, 1370, - 1379, 1382, 1386, 1374, 1387, 1377, 1390, 1382, 1385, 1385, - 1387, 1384, 1389, 1391, 1391, 1393, 1381, 1389, 1392, 1392, - 1394, 1386, 1395, 1396, 1397, 1397, 1396, 1398, 1399, 1393, - 1390, 1402, 1407, 1411, 1411, 1401, 1402, 1395, 1394, 1398, - 1400, 1401, 1403, 1400, 1405, 1403, 1400, 1406, 1399, 1409, - 1413, 1408, 1406, 1405, 1408, 1409, 1413, 1407, 1400, 1410, - 1414, 1403, 1412, 1412, 1410, 1414, 1415, 1416, 1417, 1418, - 1419, 1420, 1421, 1419, 1424, 1422, 1423, 1420, 1421, 1415, - 1422, 1425, 1423, 1426, 1426, 1416, 1425, 1417, 1427, 1418, + 1377, 1378, 1380, 1372, 1371, 1377, 1379, 1381, 1382, 1374, + 1385, 1380, 1381, 1373, 1373, 1383, 1385, 1383, 1384, 1386, + 1389, 1378, 1375, 1384, 1387, 1391, 1379, 1392, 1382, 1395, + 1387, 1390, 1390, 1392, 1389, 1394, 1396, 1396, 1398, 1386, + 1394, 1397, 1397, 1399, 1391, 1400, 1401, 1402, 1402, 1401, + 1403, 1404, 1398, 1395, 1407, 1412, 1416, 1416, 1406, 1407, + 1400, 1399, 1403, 1405, 1406, 1408, 1405, 1410, 1408, 1405, + 1411, 1404, 1414, 1418, 1413, 1411, 1410, 1413, 1414, 1418, + 1412, 1405, 1415, 1419, 1408, 1417, 1417, 1415, 1419, 1420, + 1421, 1422, 1423, 1424, 1425, 1426, 1424, 1429, 1427, 1428, - 1428, 1429, 1430, 1427, 1433, 1431, 1432, 1424, 1435, 1436, - 1434, 1437, 1438, 1439, 1435, 1442, 1433, 1447, 1428, 1431, - 1432, 1429, 1430, 1434, 1441, 1441, 1438, 1443, 1445, 1436, - 1446, 1437, 1443, 1448, 1439, 1442, 1444, 1444, 1449, 1450, - 1453, 1447, 1451, 1445, 1446, 1455, 1452, 1449, 1457, 1451, - 1458, 1448, 1462, 1458, 1450, 1452, 1453, 1461, 1452, 1465, - 1455, 1459, 1459, 1460, 1460, 1455, 1464, 1464, 1463, 1461, - 1462, 1463, 1465, 1457, 1466, 1467, 1468, 1469, 1470, 1471, - 1467, 1468, 1472, 1473, 1475, 1476, 1476, 1477, 1471, 1474, - 1475, 1478, 1473, 1466, 1470, 1473, 1469, 1479, 1474, 1480, + 1425, 1426, 1420, 1427, 1430, 1428, 1431, 1431, 1421, 1430, + 1422, 1432, 1423, 1433, 1434, 1435, 1432, 1438, 1436, 1437, + 1429, 1440, 1441, 1439, 1442, 1443, 1444, 1440, 1447, 1438, + 1452, 1433, 1436, 1437, 1434, 1435, 1439, 1446, 1446, 1443, + 1448, 1450, 1441, 1451, 1442, 1448, 1453, 1444, 1447, 1449, + 1449, 1454, 1455, 1458, 1452, 1456, 1450, 1451, 1460, 1457, + 1454, 1462, 1456, 1463, 1453, 1467, 1463, 1455, 1457, 1458, + 1466, 1457, 1470, 1460, 1464, 1464, 1465, 1465, 1460, 1469, + 1469, 1468, 1466, 1467, 1468, 1470, 1462, 1471, 1472, 1473, + 1474, 1475, 1476, 1472, 1473, 1477, 1478, 1480, 1481, 1481, - 1481, 1472, 1482, 1485, 1478, 1486, 1488, 1477, 1487, 1487, - 1489, 1493, 1490, 1480, 1482, 1479, 1481, 1490, 1492, 1489, - 1491, 1491, 1488, 1486, 1494, 1495, 1496, 1492, 1485, 1493, - 1492, 1496, 1496, 1498, 1499, 1491, 1500, 1501, 1502, 1503, - 1504, 1504, 1501, 1495, 1502, 1494, 1505, 1498, 1506, 1499, - 1507, 1510, 1505, 1506, 1508, 1511, 1507, 1503, 1500, 1512, - 1508, 1513, 1515, 1514, 1519, 1512, 1514, 1517, 1515, 1511, - 1520, 1510, 1514, 1521, 1513, 1517, 1522, 1523, 1524, 1525, - 1526, 1521, 1528, 1519, 1530, 1522, 1527, 1527, 1528, 1520, - 1523, 1524, 1529, 1525, 1526, 1531, 1532, 1530, 1529, 1533, + 1482, 1476, 1479, 1480, 1483, 1478, 1471, 1475, 1478, 1474, + 1484, 1479, 1485, 1486, 1477, 1487, 1490, 1483, 1491, 1493, + 1482, 1492, 1492, 1494, 1498, 1495, 1485, 1487, 1484, 1486, + 1495, 1497, 1494, 1496, 1496, 1493, 1491, 1499, 1500, 1501, + 1497, 1490, 1498, 1497, 1501, 1501, 1503, 1504, 1496, 1505, + 1506, 1507, 1508, 1509, 1509, 1506, 1500, 1507, 1499, 1510, + 1503, 1511, 1504, 1512, 1515, 1510, 1511, 1513, 1516, 1512, + 1508, 1505, 1517, 1513, 1518, 1520, 1519, 1524, 1517, 1519, + 1522, 1520, 1516, 1525, 1515, 1519, 1526, 1518, 1522, 1527, + 1528, 1529, 1530, 1531, 1526, 1533, 1524, 1535, 1527, 1532, - 1534, 1535, 1536, 1537, 1538, 1540, 1540, 1535, 1527, 1541, - 1547, 13, 1542, 1534, 1532, 1531, 1542, 1549, 1533, 1537, - 1543, 1544, 1538, 1545, 1536, 1543, 1544, 1546, 1545, 1541, - 1550, 1550, 1549, 1547, 1551, 1552, 1546, 1553, 1554, 1554, - 1555, 1556, 1559, 1557, 1560, 1558, 1561, 1552, 1556, 1563, - 1562, 1654, 1561, 1551, 1555, 1557, 1553, 1558, 1654, 1564, - 1566, 1559, 1562, 1566, 1560, 1564, 1570, 1563, 1565, 1565, - 1567, 1567, 1569, 1571, 1573, 1570, 1574, 1569, 1574, 1571, - 1572, 1572, 1575, 1576, 1577, 1575, 1573, 1578, 1580, 1579, - 1581, 1584, 1582, 1580, 1583, 1586, 1584, 1588, 1592, 1581, + 1532, 1533, 1525, 1528, 1529, 1534, 1530, 1531, 1536, 1537, + 1535, 1534, 1538, 1539, 1540, 1541, 1542, 1543, 1545, 1545, + 1540, 1532, 1546, 1552, 0, 1547, 1539, 1537, 1536, 1547, + 1554, 1538, 1542, 1548, 1549, 1543, 1550, 1541, 1548, 1549, + 1551, 1550, 1546, 1555, 1555, 1554, 1552, 1556, 1557, 1551, + 1558, 1559, 1559, 1560, 1561, 1564, 1562, 1565, 1563, 1566, + 1557, 1561, 1568, 1567, 1659, 1566, 1556, 1560, 1562, 1558, + 1563, 1659, 1569, 1571, 1564, 1567, 1571, 1565, 1569, 1575, + 1568, 1570, 1570, 1572, 1572, 1574, 1576, 1578, 1575, 1579, + 1574, 1579, 1576, 1577, 1577, 1580, 1581, 1582, 1580, 1578, - 0, 1585, 1588, 1576, 1582, 1578, 1577, 1579, 1587, 1583, - 1585, 1589, 1591, 1587, 1593, 1586, 1590, 1590, 1591, 1592, - 1587, 1594, 1595, 1585, 1597, 1596, 1589, 1596, 1598, 1598, - 1599, 1599, 1601, 1593, 1600, 1600, 1604, 1594, 1597, 1605, - 1597, 1612, 1595, 1602, 1602, 1603, 1603, 1606, 1606, 1607, - 1608, 1609, 1601, 1607, 1609, 1611, 1608, 1604, 1613, 1612, - 1605, 1611, 1614, 1615, 1613, 1618, 1615, 1616, 1616, 1617, - 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1625, 1626, 1632, - 1629, 1622, 1625, 1625, 1619, 1619, 1619, 1614, 1627, 1628, - 1627, 1619, 1626, 1620, 1621, 1629, 1623, 1630, 1631, 1632, + 1583, 1585, 1584, 1586, 1589, 1587, 1585, 1588, 1591, 1589, + 1593, 1597, 1586, 0, 1590, 1593, 1581, 1587, 1583, 1582, + 1584, 1592, 1588, 1590, 1594, 1596, 1592, 1598, 1591, 1595, + 1595, 1596, 1597, 1592, 1599, 1600, 1590, 1602, 1601, 1594, + 1601, 1603, 1603, 1604, 1604, 1606, 1598, 1605, 1605, 1609, + 1599, 1602, 1610, 1602, 1617, 1600, 1607, 1607, 1608, 1608, + 1611, 1611, 1612, 1613, 1614, 1606, 1612, 1614, 1616, 1613, + 1609, 1618, 1617, 1610, 1616, 1619, 1620, 1618, 1623, 1620, + 1621, 1621, 1622, 1622, 1623, 1624, 1625, 1626, 1627, 1628, + 1630, 1631, 1637, 1634, 1627, 1630, 1630, 1624, 1624, 1624, - 1628, 1633, 1635, 1630, 1634, 1634, 1637, 1631, 1636, 1636, - 1638, 1639, 1639, 1640, 1640, 1641, 1644, 1644, 1645, 1649, - 1646, 1648, 1633, 1651, 1651, 1650, 1637, 1652, 1635, 1646, - 1648, 1650, 1638, 1655, 1653, 1641, 1656, 1657, 1657, 1658, - 1649, 1659, 1655, 1645, 1663, 1661, 1662, 1664, 1652, 1653, - 1661, 1668, 1662, 1665, 1664, 1666, 1668, 1659, 1670, 1665, - 1669, 1666, 1656, 1671, 1663, 1658, 1667, 1667, 1672, 1669, - 1673, 1674, 1675, 1673, 1676, 1676, 1678, 1677, 1670, 1679, - 1672, 1680, 1671, 1677, 1682, 1680, 1683, 1684, 1686, 1674, - 1685, 1685, 1684, 1689, 1679, 1687, 1678, 1697, 1675, 1690, + 1619, 1632, 1633, 1632, 1624, 1631, 1625, 1626, 1634, 1628, + 1635, 1636, 1637, 1633, 1638, 1640, 1635, 1639, 1639, 1642, + 1636, 1641, 1641, 1643, 1644, 1644, 1645, 1645, 1646, 1649, + 1649, 1650, 1654, 1651, 1653, 1638, 1656, 1656, 1655, 1642, + 1657, 1640, 1651, 1653, 1655, 1643, 1660, 1658, 1646, 1661, + 1662, 1662, 1663, 1654, 1664, 1660, 1650, 1668, 1666, 1667, + 1669, 1657, 1658, 1666, 1673, 1667, 1670, 1669, 1671, 1673, + 1664, 1675, 1670, 1674, 1671, 1661, 1676, 1668, 1663, 1672, + 1672, 1677, 1674, 1678, 1679, 1680, 1678, 1681, 1681, 1683, + 1682, 1675, 1684, 1677, 1685, 1676, 1682, 1687, 1685, 1688, - 1691, 1680, 1692, 1690, 1682, 1694, 1691, 1686, 1683, 1694, - 1687, 1692, 1689, 1693, 1693, 1695, 1696, 1696, 1697, 1698, - 1699, 1701, 1700, 1702, 1703, 1704, 1695, 1700, 1708, 1705, - 1703, 1695, 1708, 1698, 1705, 1706, 1706, 1707, 1707, 1699, - 1704, 1701, 1710, 1702, 1711, 1712, 1713, 1713, 1714, 1714, - 1716, 1710, 1715, 1717, 1718, 1711, 1716, 1715, 1715, 1717, - 1711, 1719, 1720, 1721, 1723, 1712, 1719, 1724, 1726, 1721, - 1725, 1724, 1727, 1728, 1720, 1729, 1723, 1730, 1727, 1732, - 1718, 1729, 1725, 1733, 1736, 1734, 1740, 1736, 1741, 1730, - 1734, 1732, 1750, 1726, 1741, 1728, 1737, 1737, 1738, 1738, + 1689, 1691, 1679, 1690, 1690, 1689, 1694, 1684, 1692, 1683, + 1702, 1680, 1695, 1696, 1685, 1697, 1695, 1687, 1699, 1696, + 1691, 1688, 1699, 1692, 1697, 1694, 1698, 1698, 1700, 1701, + 1701, 1702, 1703, 1704, 1706, 1705, 1707, 1708, 1709, 1700, + 1705, 1713, 1710, 1708, 1700, 1713, 1703, 1710, 1711, 1711, + 1712, 1712, 1704, 1709, 1706, 1715, 1707, 1716, 1717, 1718, + 1718, 1719, 1719, 1721, 1715, 1720, 1722, 1723, 1716, 1721, + 1720, 1720, 1722, 1716, 1724, 1725, 1726, 1728, 1717, 1724, + 1729, 1731, 1726, 1730, 1729, 1732, 1733, 1725, 1734, 1728, + 1735, 1732, 1737, 1723, 1734, 1730, 1738, 1741, 1739, 1745, - 1739, 1739, 1733, 1742, 1750, 1743, 1740, 1744, 1745, 1742, - 1743, 1747, 1749, 1744, 1753, 1749, 1747, 1745, 1751, 1751, - 1754, 1757, 1755, 1756, 1756, 1761, 1753, 1755, 1758, 1759, - 1757, 1762, 1754, 1758, 1759, 1760, 1760, 1763, 1764, 1765, - 1762, 1766, 1767, 1765, 1768, 1761, 1766, 1769, 1767, 1770, - 1771, 1773, 1773, 1774, 1778, 1763, 1769, 1764, 1779, 1775, - 1776, 1776, 1768, 1773, 1771, 1777, 1778, 1770, 1775, 1781, - 1780, 1774, 1784, 1784, 1777, 1780, 1787, 1786, 1788, 1779, - 1786, 1790, 1781, 1791, 1792, 1793, 1794, 1794, 1799, 1795, - 1792, 1795, 1787, 1797, 1788, 1799, 1790, 1791, 1796, 1796, + 1741, 1746, 1735, 1739, 1737, 1755, 1731, 1746, 1733, 1742, + 1742, 1743, 1743, 1744, 1744, 1738, 1747, 1755, 1748, 1745, + 1749, 1750, 1747, 1748, 1752, 1754, 1749, 1758, 1754, 1752, + 1750, 1756, 1756, 1759, 1762, 1760, 1761, 1761, 1766, 1758, + 1760, 1763, 1764, 1762, 1767, 1759, 1763, 1764, 1765, 1765, + 1768, 1769, 1770, 1767, 1771, 1772, 1770, 1773, 1766, 1771, + 1774, 1772, 1775, 1776, 1778, 1778, 1779, 1783, 1768, 1774, + 1769, 1784, 1780, 1781, 1781, 1773, 1778, 1776, 1782, 1783, + 1775, 1780, 1786, 1785, 1779, 1789, 1789, 1782, 1785, 1792, + 1791, 1793, 1784, 1791, 1795, 1786, 1796, 1797, 1798, 1799, - 1800, 1797, 1793, 1801, 1801, 1802, 1803, 1804, 1807, 1805, - 1806, 1808, 1809, 1811, 1802, 0, 1812, 1814, 1809, 1804, - 1800, 1805, 1806, 1813, 1813, 1815, 1808, 1803, 1812, 1816, - 1818, 1809, 1816, 1811, 1807, 1814, 1817, 1820, 1821, 1822, - 1821, 1817, 1820, 1823, 1824, 1815, 1826, 1828, 1823, 1829, - 1818, 1824, 1830, 1832, 1831, 1826, 1831, 1822, 1829, 1834, - 1835, 1834, 1836, 1836, 1830, 1828, 1837, 1839, 1838, 1839, - 1840, 1841, 1832, 1838, 1835, 1840, 1841, 1842, 1843, 1844, - 1846, 1845, 1847, 1849, 1853, 1844, 1845, 1850, 1851, 1851, - 1847, 1854, 1837, 1846, 1855, 1842, 1852, 1852, 1843, 1853, + 1799, 1804, 1800, 1797, 1800, 1792, 1802, 1793, 1804, 1795, + 1796, 1801, 1801, 1805, 1802, 1798, 1806, 1806, 1807, 1808, + 1809, 1812, 1810, 1811, 1813, 1814, 1816, 1807, 0, 1817, + 1819, 1814, 1809, 1805, 1810, 1811, 1818, 1818, 1820, 1813, + 1808, 1817, 1821, 1823, 1814, 1821, 1816, 1812, 1819, 1822, + 1825, 1826, 1827, 1826, 1822, 1825, 1828, 1829, 1820, 1831, + 1833, 1828, 1834, 1823, 1829, 1835, 1837, 1836, 1831, 1836, + 1827, 1834, 1839, 1840, 1839, 1841, 1841, 1835, 1833, 1842, + 1844, 1843, 1844, 1845, 1846, 1837, 1843, 1840, 1845, 1846, + 1847, 1848, 1849, 1851, 1850, 1852, 1854, 1858, 1849, 1850, - 1855, 1850, 1849, 1856, 1857, 1858, 1857, 1860, 1856, 1859, - 1859, 1854, 1865, 1858, 1861, 1861, 1862, 1862, 1863, 1860, - 1864, 1858, 1867, 1869, 1868, 1864, 1868, 1863, 1872, 1874, - 1865, 1867, 1870, 1871, 1867, 1879, 1878, 1870, 1870, 1882, - 1872, 1874, 1871, 1875, 1869, 1876, 1883, 1880, 1875, 1878, - 1876, 1881, 1881, 1884, 1885, 1879, 1880, 1882, 1886, 1888, - 1889, 1890, 1891, 1899, 1883, 1892, 1893, 1891, 1885, 1884, - 1892, 1888, 1889, 1886, 1896, 1893, 1898, 1900, 1901, 1902, - 1896, 1890, 1898, 1904, 1904, 1903, 1899, 1907, 1905, 1906, - 1906, 1908, 1900, 1896, 1903, 1908, 1901, 1905, 1909, 1910, + 1855, 1856, 1856, 1852, 1859, 1842, 1851, 1860, 1847, 1857, + 1857, 1848, 1858, 1860, 1855, 1854, 1861, 1862, 1863, 1862, + 1865, 1861, 1864, 1864, 1859, 1870, 1863, 1866, 1866, 1867, + 1867, 1868, 1865, 1869, 1863, 1872, 1874, 1873, 1869, 1873, + 1868, 1877, 1879, 1870, 1872, 1875, 1876, 1872, 1884, 1883, + 1875, 1875, 1887, 1877, 1879, 1876, 1880, 1874, 1881, 1888, + 1885, 1880, 1883, 1881, 1886, 1886, 1889, 1890, 1884, 1885, + 1887, 1891, 1893, 1894, 1895, 1896, 1904, 1888, 1897, 1898, + 1896, 1890, 1889, 1897, 1893, 1894, 1891, 1901, 1898, 1903, + 1905, 1906, 1907, 1901, 1895, 1903, 1909, 1909, 1908, 1904, - 1916, 0, 1911, 1909, 1902, 1912, 1907, 1911, 1911, 1913, - 1914, 1912, 1910, 1914, 1915, 1913, 1919, 1919, 1920, 1920, - 1916, 1921, 1915, 1922, 1922, 1923, 1923, 1924, 1925, 1926, - 1921, 1927, 1937, 1920, 1934, 1926, 1927, 1928, 1928, 1924, - 1929, 1929, 1930, 1931, 1920, 1938, 1925, 1930, 1933, 1931, - 1938, 1935, 1933, 1939, 1934, 1935, 1940, 1937, 1941, 1942, - 1944, 1945, 1943, 1941, 1946, 1948, 1945, 1947, 1947, 1948, - 1949, 1940, 1951, 1953, 1950, 1952, 1939, 1942, 1943, 1950, - 1944, 1955, 1956, 1954, 1960, 1949, 1946, 1952, 1954, 1957, - 1957, 1959, 1953, 1961, 1955, 1962, 1963, 1964, 1951, 1959, + 1912, 1910, 1911, 1911, 1913, 1905, 1901, 1908, 1913, 1906, + 1910, 1914, 1915, 1921, 0, 1916, 1914, 1907, 1917, 1912, + 1916, 1916, 1918, 1919, 1917, 1915, 1919, 1920, 1918, 1924, + 1924, 1925, 1925, 1921, 1926, 1920, 1927, 1927, 1928, 1928, + 1929, 1930, 1931, 1926, 1932, 1942, 1925, 1939, 1931, 1932, + 1933, 1933, 1929, 1934, 1934, 1935, 1936, 1925, 1943, 1930, + 1935, 1938, 1936, 1943, 1940, 1938, 1944, 1939, 1940, 1945, + 1942, 1946, 1947, 1949, 1950, 1948, 1946, 1951, 1953, 1950, + 1952, 1952, 1953, 1954, 1945, 1956, 1958, 1955, 1957, 1944, + 1947, 1948, 1955, 1949, 1960, 1961, 1959, 1965, 1954, 1951, - 1956, 1965, 1966, 1960, 1967, 1973, 1969, 1970, 1970, 2134, - 1971, 1972, 1961, 1971, 1966, 1974, 1964, 2134, 1962, 1973, - 1963, 1969, 1965, 1978, 1972, 1967, 1975, 1975, 1974, 1976, - 1976, 1977, 1977, 1979, 1980, 1980, 1981, 1983, 1978, 1982, - 1982, 1986, 1983, 1987, 1985, 1981, 1979, 1988, 1981, 1985, - 1989, 1989, 1990, 1990, 1991, 1992, 1992, 1993, 1999, 1988, - 2002, 1986, 1995, 1987, 1994, 1994, 1996, 1997, 1997, 1998, - 1998, 1996, 1999, 1991, 2000, 1993, 2001, 1995, 2006, 2002, - 2004, 2005, 2005, 2000, 2008, 2004, 2007, 2007, 2009, 2010, - 2001, 2013, 2010, 2014, 2009, 2011, 2011, 2006, 2012, 2012, + 1957, 1959, 1962, 1962, 1964, 1958, 1966, 1960, 1967, 1968, + 1969, 1956, 1964, 1961, 1970, 1971, 1965, 1972, 1978, 1974, + 1975, 1975, 2139, 1976, 1977, 1966, 1976, 1971, 1979, 1969, + 2139, 1967, 1978, 1968, 1974, 1970, 1983, 1977, 1972, 1980, + 1980, 1979, 1981, 1981, 1982, 1982, 1984, 1985, 1985, 1986, + 1988, 1983, 1987, 1987, 1991, 1988, 1992, 1990, 1986, 1984, + 1993, 1986, 1990, 1994, 1994, 1995, 1995, 1996, 1997, 1997, + 1998, 2004, 1993, 2007, 1991, 2000, 1992, 1999, 1999, 2001, + 2002, 2002, 2003, 2003, 2001, 2004, 1996, 2005, 1998, 2006, + 2000, 2011, 2007, 2009, 2010, 2010, 2005, 2013, 2009, 2012, - 2015, 2018, 2008, 2016, 2016, 2019, 2023, 2020, 2014, 2021, - 2013, 2011, 2024, 2021, 2022, 2022, 2025, 2027, 2027, 2015, - 2028, 2018, 2020, 2029, 2030, 2023, 2031, 2024, 2019, 2032, - 2029, 2025, 2033, 2034, 2034, 2036, 2035, 2036, 2030, 2037, - 2028, 2039, 2037, 2040, 2031, 2035, 2041, 2032, 2040, 2042, - 2043, 2041, 2044, 2039, 2046, 2045, 2048, 2037, 2033, 2037, - 2045, 2048, 2049, 2043, 2050, 2051, 2052, 2049, 2056, 2053, - 2057, 2051, 2054, 2044, 2042, 2053, 2055, 2054, 2063, 2050, - 2046, 2055, 2058, 2057, 2068, 2058, 2059, 2052, 2060, 2061, - 2062, 2074, 2063, 2056, 2064, 2059, 2065, 2060, 2061, 2062, + 2012, 2014, 2015, 2006, 2018, 2015, 2019, 2014, 2016, 2016, + 2011, 2017, 2017, 2020, 2023, 2013, 2021, 2021, 2024, 2028, + 2025, 2019, 2026, 2018, 2016, 2029, 2026, 2027, 2027, 2030, + 2032, 2032, 2020, 2033, 2023, 2025, 2034, 2035, 2028, 2036, + 2029, 2024, 2037, 2034, 2030, 2038, 2039, 2039, 2041, 2040, + 2041, 2035, 2042, 2033, 2044, 2042, 2045, 2036, 2040, 2046, + 2037, 2045, 2047, 2048, 2046, 2049, 2044, 2051, 2050, 2053, + 2042, 2038, 2042, 2050, 2053, 2054, 2048, 2055, 2056, 2057, + 2054, 2061, 2058, 2062, 2056, 2059, 2049, 2047, 2058, 2060, + 2059, 2068, 2055, 2051, 2060, 2063, 2062, 2073, 2063, 2064, - 2064, 2066, 2065, 2070, 2068, 2066, 2071, 2071, 2072, 2073, - 2073, 2074, 2070, 2074, 2072, 2076, 2077, 2080, 2073, 2078, - 2078, 2079, 2082, 2083, 2087, 2084, 2080, 2087, 2088, 2085, - 2089, 2076, 2077, 2088, 2082, 2090, 2079, 2091, 2091, 2083, - 2084, 2085, 2092, 2092, 2094, 2094, 2095, 2090, 2096, 2095, - 2089, 2097, 2098, 2096, 2099, 2099, 2100, 2097, 2098, 2101, - 2101, 2102, 2103, 2104, 2105, 2105, 2106, 2107, 0, 2108, - 2100, 2110, 2106, 2102, 2108, 2110, 2103, 2111, 2112, 2112, - 2111, 2107, 2104, 2113, 2114, 2115, 2116, 2118, 2113, 2120, - 2116, 2117, 2117, 2114, 2120, 2121, 2122, 2123, 2124, 2125, + 2057, 2065, 2066, 2067, 2079, 2068, 2061, 2069, 2064, 2070, + 2065, 2066, 2067, 2069, 2071, 2070, 2075, 2073, 2071, 2076, + 2076, 2077, 2078, 2078, 2079, 2075, 2079, 2077, 2081, 2082, + 2085, 2078, 2083, 2083, 2084, 2087, 2088, 2092, 2089, 2085, + 2092, 2093, 2090, 2094, 2081, 2082, 2093, 2087, 2095, 2084, + 2096, 2096, 2088, 2089, 2090, 2097, 2097, 2099, 2099, 2100, + 2095, 2101, 2100, 2094, 2102, 2103, 2101, 2104, 2104, 2105, + 2102, 2103, 2106, 2106, 2107, 2108, 2109, 2110, 2110, 2111, + 2112, 0, 2113, 2105, 2115, 2111, 2107, 2113, 2115, 2108, + 2116, 2117, 2117, 2116, 2112, 2109, 2118, 2119, 2120, 2121, - 2118, 2126, 2124, 2127, 2128, 2115, 2126, 2129, 2131, 2127, - 2128, 2123, 2132, 2138, 2133, 2121, 2122, 2132, 2141, 2125, - 2133, 2135, 2144, 2135, 2131, 2129, 2144, 2138, 2139, 2139, - 2140, 2142, 2142, 2140, 2145, 2146, 2147, 2147, 2153, 2148, - 2145, 2151, 2151, 2155, 2141, 2156, 2159, 2146, 2148, 2160, - 2161, 2159, 2169, 2162, 2170, 2161, 2153, 2155, 2162, 2163, - 2163, 2156, 2165, 2165, 2167, 2168, 2168, 2171, 2169, 2173, - 2167, 2174, 2171, 2175, 2175, 2160, 2170, 2177, 2178, 2179, - 2180, 2182, 2182, 2174, 2178, 2183, 2177, 2184, 2173, 2186, - 2186, 2187, 2187, 2188, 2189, 2180, 2191, 2179, 2188, 2190, + 2123, 2118, 2125, 2121, 2122, 2122, 2119, 2125, 2126, 2127, + 2128, 2129, 2130, 2123, 2131, 2129, 2132, 2133, 2120, 2131, + 2134, 2136, 2132, 2133, 2128, 2137, 2143, 2138, 2126, 2127, + 2137, 2146, 2130, 2138, 2140, 2149, 2140, 2136, 2134, 2149, + 2143, 2144, 2144, 2145, 2147, 2147, 2145, 2150, 2151, 2152, + 2152, 2158, 2153, 2150, 2156, 2156, 2160, 2146, 2161, 2164, + 2151, 2153, 2165, 2166, 2164, 2174, 2167, 2175, 2166, 2158, + 2160, 2167, 2168, 2168, 2161, 2170, 2170, 2172, 2173, 2173, + 2176, 2174, 2178, 2172, 2179, 2176, 2180, 2180, 2165, 2175, + 2182, 2183, 2184, 2185, 2187, 2187, 2179, 2183, 2188, 2182, - 2192, 2191, 2192, 2193, 2183, 2184, 2194, 2195, 2190, 2196, - 2197, 2198, 2189, 2204, 2196, 2239, 2198, 2193, 2239, 2195, - 2194, 2199, 2199, 2200, 2200, 2201, 2201, 2202, 2202, 2203, - 2197, 2204, 2205, 2206, 2206, 2207, 2207, 2205, 2208, 2209, - 2210, 2203, 2211, 2212, 2212, 2213, 2214, 2214, 2215, 2215, - 2208, 2209, 2216, 2217, 2218, 2219, 2220, 2221, 2211, 2222, - 2210, 2218, 2221, 2216, 2213, 2217, 2223, 2219, 2224, 2224, - 2226, 2225, 2227, 2229, 2228, 2230, 2220, 2231, 2231, 2222, - 2225, 2232, 2236, 2233, 2234, 2237, 2223, 2228, 2238, 2230, - 2232, 2240, 2227, 2243, 2243, 0, 2226, 2229, 2233, 2234, + 2189, 2178, 2191, 2191, 2192, 2192, 2193, 2194, 2185, 2196, + 2184, 2193, 2195, 2197, 2196, 2197, 2198, 2188, 2189, 2199, + 2200, 2195, 2201, 2202, 2203, 2194, 2209, 2201, 2244, 2203, + 2198, 2244, 2200, 2199, 2204, 2204, 2205, 2205, 2206, 2206, + 2207, 2207, 2208, 2202, 2209, 2210, 2211, 2211, 2212, 2212, + 2210, 2213, 2214, 2215, 2208, 2216, 2217, 2217, 2218, 2219, + 2219, 2220, 2220, 2213, 2214, 2221, 2222, 2223, 2224, 2225, + 2226, 2216, 2227, 2215, 2223, 2226, 2221, 2218, 2222, 2228, + 2224, 2229, 2229, 2231, 2230, 2232, 2234, 2233, 2235, 2225, + 2236, 2236, 2227, 2230, 2237, 2241, 2238, 2239, 2242, 2228, - 2236, 2241, 2250, 2242, 2252, 2240, 2241, 2237, 2242, 2244, - 2244, 2238, 2245, 2245, 2247, 2247, 2249, 2249, 2251, 2254, - 2250, 2256, 2255, 2252, 2257, 2258, 2259, 2261, 2260, 2251, - 2260, 2262, 2263, 2267, 2258, 2264, 2264, 2266, 2266, 2254, - 2255, 2273, 2268, 2256, 2257, 2271, 2259, 2261, 2274, 2262, - 2263, 2268, 2269, 2269, 2271, 2267, 2272, 2272, 2275, 2273, - 2276, 2277, 2278, 2280, 2288, 2275, 2274, 2279, 2281, 2281, - 2282, 2282, 2283, 2284, 2285, 2276, 2286, 2289, 2283, 2277, - 2278, 2287, 2280, 2279, 2288, 2290, 2287, 2292, 2292, 2285, - 2290, 2284, 2291, 2296, 2291, 2286, 2293, 2289, 2293, 2294, + 2233, 2243, 2235, 2237, 2245, 2232, 2248, 2248, 0, 2231, + 2234, 2238, 2239, 2241, 2246, 2255, 2247, 2257, 2245, 2246, + 2242, 2247, 2249, 2249, 2243, 2250, 2250, 2252, 2252, 2254, + 2254, 2256, 2259, 2255, 2261, 2260, 2257, 2262, 2263, 2264, + 2266, 2265, 2256, 2265, 2267, 2268, 2272, 2263, 2269, 2269, + 2271, 2271, 2259, 2260, 2278, 2273, 2261, 2262, 2276, 2264, + 2266, 2279, 2267, 2268, 2273, 2274, 2274, 2276, 2272, 2277, + 2277, 2280, 2278, 2281, 2282, 2283, 2285, 2293, 2280, 2279, + 2284, 2286, 2286, 2287, 2287, 2288, 2289, 2290, 2281, 2291, + 2294, 2288, 2282, 2283, 2292, 2285, 2284, 2293, 2295, 2292, - 2294, 2298, 2299, 2300, 2301, 2303, 2302, 2304, 2307, 2311, - 2298, 2302, 2296, 2308, 2310, 2300, 2308, 2309, 2309, 2312, - 2312, 2299, 2315, 2318, 2301, 2303, 2304, 2311, 2307, 2310, - 2313, 2316, 2317, 2317, 2313, 2316, 2318, 2315, 2320, 2321, - 2322, 2322, 2324, 2325, 2326, 2327, 2327, 2328, 2326, 2329, - 2329, 2330, 2325, 2331, 2324, 2332, 2330, 2333, 2320, 2321, - 2334, 2334, 2331, 2339, 2339, 2340, 2328, 2341, 2341, 2333, - 2342, 2332, 2343, 2344, 2347, 2345, 2346, 2346, 2349, 2349, - 2354, 2352, 2344, 2342, 2345, 2343, 2352, 2340, 2353, 2347, - 2355, 2356, 2357, 2353, 2354, 2355, 2358, 2361, 2359, 2356, + 2297, 2297, 2290, 2295, 2289, 2296, 2301, 2296, 2291, 2298, + 2294, 2298, 2299, 2299, 2303, 2304, 2305, 2306, 2308, 2307, + 2309, 2312, 2316, 2303, 2307, 2301, 2313, 2315, 2305, 2313, + 2314, 2314, 2317, 2317, 2304, 2320, 2323, 2306, 2308, 2309, + 2316, 2312, 2315, 2318, 2321, 2322, 2322, 2318, 2321, 2323, + 2320, 2325, 2326, 2327, 2327, 2329, 2330, 2331, 2332, 2332, + 2333, 2331, 2334, 2334, 2335, 2330, 2336, 2329, 2337, 2335, + 2338, 2325, 2326, 2339, 2339, 2336, 2344, 2344, 2345, 2333, + 2346, 2346, 2338, 2347, 2337, 2348, 2349, 2352, 2350, 2351, + 2351, 2354, 2354, 2359, 2357, 2349, 2347, 2350, 2348, 2357, - 2364, 2369, 2362, 2363, 0, 2358, 2359, 2362, 2363, 2365, - 2365, 2357, 2361, 2366, 2366, 2364, 2367, 2368, 2370, 2369, - 2371, 0, 2368, 2367, 2372, 2374, 2371, 2373, 2373, 2372, - 2375, 2376, 2376, 2377, 2377, 2375, 2370, 2380, 2381, 2381, - 2374, 2382, 2383, 2392, 2382, 2405, 2384, 2383, 2383, 2385, - 2380, 2384, 2386, 2387, 2385, 2388, 2389, 2387, 2386, 2390, - 2388, 2391, 2393, 2405, 2392, 2389, 2394, 2396, 2393, 2391, - 2395, 2398, 2394, 2401, 2390, 2395, 2398, 2399, 2403, 2396, - 2399, 2404, 2406, 2403, 2407, 2401, 2404, 2408, 2409, 2409, - 2410, 2413, 2414, 2407, 2415, 2406, 2408, 2416, 2416, 2410, + 2345, 2358, 2352, 2360, 2361, 2362, 2358, 2359, 2360, 2363, + 2366, 2364, 2361, 2369, 2374, 2367, 2368, 0, 2363, 2364, + 2367, 2368, 2370, 2370, 2362, 2366, 2371, 2371, 2369, 2372, + 2373, 2375, 2374, 2376, 0, 2373, 2372, 2377, 2379, 2376, + 2378, 2378, 2377, 2380, 2381, 2381, 2382, 2382, 2380, 2375, + 2385, 2386, 2386, 2379, 2387, 2388, 2397, 2387, 2410, 2389, + 2388, 2388, 2390, 2385, 2389, 2391, 2392, 2390, 2393, 2394, + 2392, 2391, 2395, 2393, 2396, 2398, 2410, 2397, 2394, 2399, + 2401, 2398, 2396, 2400, 2403, 2399, 2406, 2395, 2400, 2403, + 2404, 2408, 2401, 2404, 2409, 2411, 2408, 2412, 2406, 2409, - 2417, 2419, 2418, 2420, 2420, 2421, 2423, 2425, 2427, 2427, - 2413, 2418, 2414, 2415, 2426, 2428, 2419, 2429, 2426, 2417, - 2430, 2423, 2431, 2429, 2421, 2433, 2430, 2425, 2431, 2432, - 2432, 2434, 2436, 2433, 2437, 2439, 2434, 2440, 2441, 2439, - 2428, 2436, 2443, 2443, 2444, 2444, 2448, 2437, 2445, 2445, - 2448, 2440, 2449, 2441, 2447, 2447, 2453, 2449, 2451, 2451, - 2454, 2455, 2456, 2458, 2466, 2454, 2464, 2456, 2456, 2459, - 2459, 2461, 2461, 2455, 2462, 2462, 2453, 2463, 2468, 2464, - 2463, 2472, 2466, 2458, 2469, 2469, 2470, 2470, 2471, 2471, - 2473, 2473, 2474, 2475, 2476, 2477, 2472, 2483, 2468, 2478, + 2413, 2414, 2414, 2415, 2418, 2419, 2412, 2420, 2411, 2413, + 2421, 2421, 2415, 2422, 2424, 2423, 2425, 2425, 2426, 2428, + 2430, 2432, 2432, 2418, 2423, 2419, 2420, 2431, 2433, 2424, + 2434, 2431, 2422, 2435, 2428, 2436, 2434, 2426, 2438, 2435, + 2430, 2436, 2437, 2437, 2439, 2441, 2438, 2442, 2444, 2439, + 2445, 2446, 2444, 2433, 2441, 2448, 2448, 2449, 2449, 2453, + 2442, 2450, 2450, 2453, 2445, 2454, 2446, 2452, 2452, 2458, + 2454, 2456, 2456, 2459, 2460, 2461, 2463, 2471, 2459, 2469, + 2461, 2461, 2464, 2464, 2466, 2466, 2460, 2467, 2467, 2458, + 2468, 2473, 2469, 2468, 2477, 2471, 2463, 2474, 2474, 2475, - 2478, 2477, 2479, 2484, 2482, 2474, 2479, 2485, 2476, 2482, - 2482, 2475, 2486, 2487, 2488, 2490, 2490, 2489, 2486, 2487, - 2483, 2489, 2495, 2484, 2493, 2496, 2498, 2485, 2496, 2493, - 2495, 2499, 2500, 2501, 2499, 2502, 2503, 0, 2501, 2488, - 2504, 2505, 2505, 2506, 2507, 2508, 2509, 2507, 2512, 2500, - 2500, 2498, 2510, 2502, 2504, 2507, 2503, 2506, 2511, 2508, - 2510, 2513, 2513, 2511, 2511, 2509, 2518, 2512, 2514, 2514, - 2515, 2515, 2516, 2516, 2517, 2517, 2519, 2520, 2521, 2522, - 2523, 2519, 2518, 2524, 2526, 2526, 2527, 2528, 2522, 2527, - 2530, 2530, 2531, 2532, 2532, 2540, 2533, 2520, 0, 2531, + 2475, 2476, 2476, 2478, 2478, 2479, 2480, 2481, 2482, 2477, + 2488, 2473, 2483, 2483, 2482, 2484, 2489, 2487, 2479, 2484, + 2490, 2481, 2487, 2487, 2480, 2491, 2492, 2493, 2495, 2495, + 2494, 2491, 2492, 2488, 2494, 2500, 2489, 2498, 2501, 2503, + 2490, 2501, 2498, 2500, 2504, 2505, 2506, 2504, 2507, 2508, + 0, 2506, 2493, 2509, 2510, 2510, 2511, 2512, 2513, 2514, + 2512, 2517, 2505, 2505, 2503, 2515, 2507, 2509, 2512, 2508, + 2511, 2516, 2513, 2515, 2518, 2518, 2516, 2516, 2514, 2523, + 2517, 2519, 2519, 2520, 2520, 2521, 2521, 2522, 2522, 2524, + 2525, 2526, 2527, 2528, 2524, 2523, 2529, 2531, 2531, 2532, - 2523, 2533, 2536, 2524, 2521, 2528, 2535, 2535, 2537, 2538, - 2543, 2536, 2542, 2540, 2541, 2541, 2542, 2537, 2538, 2543, - 2544, 2545, 2547, 2546, 2551, 2555, 2545, 2545, 2556, 2551, - 2557, 2547, 2552, 2552, 2559, 2544, 2546, 2554, 2554, 2555, - 2560, 2563, 2564, 2559, 2565, 2568, 2570, 0, 2557, 2566, - 2616, 2564, 2560, 2556, 2572, 2566, 2573, 2568, 2616, 2572, - 2575, 2573, 2574, 2574, 2565, 2577, 2563, 2570, 2584, 2575, - 2577, 2578, 2578, 2580, 2580, 2578, 2581, 2581, 2582, 2582, - 2583, 2585, 2586, 2592, 2588, 2593, 2589, 2586, 2584, 2583, - 2588, 2589, 2590, 2591, 2591, 2595, 2596, 2590, 2594, 2597, + 2533, 2527, 2532, 2535, 2535, 2536, 2537, 2537, 2545, 2538, + 2525, 0, 2536, 2528, 2538, 2541, 2529, 2526, 2533, 2540, + 2540, 2542, 2543, 2548, 2541, 2547, 2545, 2546, 2546, 2547, + 2542, 2543, 2548, 2549, 2550, 2552, 2551, 2556, 2560, 2550, + 2550, 2561, 2556, 2562, 2552, 2557, 2557, 2564, 2549, 2551, + 2559, 2559, 2560, 2565, 2568, 2569, 2564, 2570, 2573, 2575, + 0, 2562, 2571, 2621, 2569, 2565, 2561, 2577, 2571, 2578, + 2573, 2621, 2577, 2580, 2578, 2579, 2579, 2570, 2582, 2568, + 2575, 2589, 2580, 2582, 2583, 2583, 2585, 2585, 2583, 2586, + 2586, 2587, 2587, 2588, 2590, 2591, 2597, 2593, 2598, 2594, - 2585, 2592, 2596, 2594, 2598, 2598, 2593, 2600, 2604, 2601, - 2602, 2600, 2606, 2595, 2601, 2602, 2603, 2603, 2605, 2608, - 2608, 2610, 2611, 2614, 2597, 2612, 2615, 2604, 2613, 2612, - 2618, 2617, 2606, 2605, 2610, 2611, 2617, 2613, 2620, 2614, - 2619, 2619, 2622, 2622, 2625, 2615, 2623, 2623, 2627, 2627, - 2629, 2630, 2631, 2632, 2634, 2634, 2618, 2620, 2632, 2635, - 2636, 2637, 2639, 2639, 2640, 2625, 2629, 2630, 2631, 2641, - 2641, 2644, 2646, 2647, 2650, 2645, 2654, 2646, 2640, 2635, - 2637, 2645, 2652, 2636, 2648, 2648, 2649, 2649, 2651, 2651, - 2653, 2644, 2655, 2652, 2650, 2647, 2654, 2656, 2655, 2653, + 2591, 2589, 2588, 2593, 2594, 2595, 2596, 2596, 2600, 2601, + 2595, 2599, 2602, 2590, 2597, 2601, 2599, 2603, 2603, 2598, + 2605, 2609, 2606, 2607, 2605, 2611, 2600, 2606, 2607, 2608, + 2608, 2610, 2613, 2613, 2615, 2616, 2619, 2602, 2617, 2620, + 2609, 2618, 2617, 2623, 2622, 2611, 2610, 2615, 2616, 2622, + 2618, 2625, 2619, 2624, 2624, 2627, 2627, 2630, 2620, 2628, + 2628, 2632, 2632, 2634, 2635, 2636, 2637, 2639, 2639, 2623, + 2625, 2637, 2640, 2641, 2642, 2644, 2644, 2645, 2630, 2634, + 2635, 2636, 2646, 2646, 2649, 2651, 2652, 2655, 2650, 2659, + 2651, 2645, 2640, 2642, 2650, 2657, 2641, 2653, 2653, 2654, - 2657, 2658, 2659, 2659, 2660, 2661, 2661, 2660, 2651, 2666, - 2665, 2667, 2657, 2668, 2668, 2669, 2656, 2667, 2669, 2670, - 2671, 2658, 2665, 2673, 2675, 2670, 2674, 2676, 2673, 2666, - 2677, 2674, 2680, 2676, 2678, 2678, 2681, 2682, 2671, 2683, - 2684, 2684, 2685, 2675, 2680, 2691, 2686, 2677, 2677, 2688, - 2688, 0, 2683, 2690, 2681, 2686, 2689, 2689, 2690, 2691, - 2692, 2685, 2682, 2693, 2693, 2692, 2694, 2694, 2695, 2695, - 2696, 2698, 2698, 2701, 2703, 2696, 2704, 2705, 2706, 2706, - 2708, 2708, 2710, 2709, 2711, 2712, 2712, 2715, 2714, 2716, - 2717, 0, 2701, 2711, 2714, 2717, 2703, 2709, 2704, 2705, + 2654, 2656, 2656, 2658, 2649, 2660, 2657, 2655, 2652, 2659, + 2661, 2660, 2658, 2662, 2663, 2664, 2664, 2665, 2666, 2666, + 2665, 2656, 2671, 2670, 2672, 2662, 2673, 2673, 2674, 2661, + 2672, 2674, 2675, 2676, 2663, 2670, 2678, 2680, 2675, 2679, + 2681, 2678, 2671, 2682, 2679, 2685, 2681, 2683, 2683, 2686, + 2687, 2676, 2688, 2689, 2689, 2690, 2680, 2685, 2696, 2691, + 2682, 2682, 2693, 2693, 0, 2688, 2695, 2686, 2691, 2694, + 2694, 2695, 2696, 2697, 2690, 2687, 2698, 2698, 2697, 2699, + 2699, 2700, 2700, 2701, 2703, 2703, 2706, 2708, 2701, 2709, + 2710, 2711, 2711, 2713, 2713, 2715, 2714, 2716, 2717, 2717, - 2720, 2720, 2710, 2722, 2722, 2723, 2724, 2715, 2716, 2725, - 2723, 2726, 2731, 2727, 2729, 2725, 2728, 2728, 2732, 2729, - 2724, 2727, 2733, 2726, 2734, 2735, 2737, 2733, 2738, 2739, - 2740, 2735, 2731, 2741, 2737, 2748, 2734, 2742, 2732, 2743, - 2744, 2745, 2752, 2747, 2756, 2756, 2745, 2738, 2747, 2739, - 2740, 2741, 2749, 2742, 2750, 2748, 2743, 2743, 2749, 2750, - 2753, 2744, 2752, 2757, 2757, 2758, 2762, 2762, 2768, 2758, - 2764, 2764, 2768, 2753, 2765, 2765, 2771, 2765, 2766, 2766, - 2774, 2766, 2767, 2767, 2772, 2767, 2770, 2770, 2775, 2780, - 2776, 2777, 2777, 2782, 2771, 2776, 2781, 2782, 2772, 2795, + 2720, 2719, 2721, 2722, 0, 2706, 2716, 2719, 2722, 2708, + 2714, 2709, 2710, 2725, 2725, 2715, 2727, 2727, 2728, 2729, + 2720, 2721, 2730, 2728, 2731, 2736, 2732, 2734, 2730, 2733, + 2733, 2737, 2734, 2729, 2732, 2738, 2731, 2739, 2740, 2742, + 2738, 2743, 2744, 2745, 2740, 2736, 2746, 2742, 2753, 2739, + 2747, 2737, 2748, 2749, 2750, 2757, 2752, 2761, 2761, 2750, + 2743, 2752, 2744, 2745, 2746, 2754, 2747, 2755, 2753, 2748, + 2748, 2754, 2755, 2758, 2749, 2757, 2762, 2762, 2763, 2767, + 2767, 2773, 2763, 2769, 2769, 2773, 2758, 2770, 2770, 2776, + 2770, 2771, 2771, 2779, 2771, 2772, 2772, 2777, 2772, 2775, - 2774, 2783, 2784, 2781, 2786, 2795, 2787, 2821, 2775, 2791, - 2783, 2788, 2788, 2796, 2780, 2787, 2821, 2784, 2789, 2789, - 2790, 2790, 2786, 2792, 2791, 2793, 2794, 2797, 2792, 2798, - 2799, 2794, 2794, 2801, 2793, 2799, 2800, 2793, 2796, 2802, - 2802, 2800, 2797, 2803, 2873, 2804, 2805, 2805, 2873, 2803, - 2798, 2804, 2801, 2806, 2806, 2807, 2810, 2810, 2813, 2813, - 2807, 2814, 2814, 2815, 2815, 2816, 2816, 2817, 2817, 2818, - 2818, 2819, 2819, 2822, 2822, 2823, 2824, 2825, 2829, 2827, - 2828, 2828, 2830, 2837, 2823, 2832, 2832, 2831, 2824, 2833, - 2834, 2834, 2839, 2829, 2841, 2830, 2844, 2825, 2827, 2831, + 2775, 2780, 2785, 2781, 2782, 2782, 2787, 2776, 2781, 2786, + 2787, 2777, 2800, 2779, 2788, 2789, 2786, 2791, 2800, 2792, + 2826, 2780, 2796, 2788, 2793, 2793, 2801, 2785, 2792, 2826, + 2789, 2794, 2794, 2795, 2795, 2791, 2797, 2796, 2798, 2799, + 2802, 2797, 2803, 2804, 2799, 2799, 2806, 2798, 2804, 2805, + 2798, 2801, 2807, 2807, 2805, 2802, 2808, 2878, 2809, 2810, + 2810, 2878, 2808, 2803, 2809, 2806, 2811, 2811, 2812, 2815, + 2815, 2818, 2818, 2812, 2819, 2819, 2820, 2820, 2821, 2821, + 2822, 2822, 2823, 2823, 2824, 2824, 2827, 2827, 2828, 2829, + 2830, 2834, 2832, 2833, 2833, 2835, 2842, 2828, 2837, 2837, - 2838, 2837, 2844, 2838, 2833, 2840, 2840, 2843, 2845, 2846, - 2843, 2847, 2841, 2848, 2846, 2851, 2849, 2852, 2839, 2855, - 2864, 2851, 2845, 2864, 2866, 2871, 2852, 2867, 2867, 2874, - 2847, 2848, 2849, 2872, 2855, 2868, 2868, 2866, 2869, 2869, - 2875, 2877, 2872, 2881, 2878, 2879, 2882, 2882, 2871, 2874, - 2879, 2880, 2883, 2880, 2875, 2878, 2884, 2886, 2881, 2885, - 2887, 2888, 2889, 2891, 2877, 2883, 2890, 2892, 2897, 2893, - 2898, 2889, 2900, 2886, 2893, 2884, 2888, 2885, 2890, 2899, - 2899, 2900, 2897, 2905, 2891, 2887, 2906, 2892, 2901, 2901, - 2898, 2902, 2902, 2903, 2903, 2904, 2904, 2907, 2908, 2909, + 2836, 2829, 2838, 2839, 2839, 2844, 2834, 2846, 2835, 2849, + 2830, 2832, 2836, 2843, 2842, 2849, 2843, 2838, 2845, 2845, + 2848, 2850, 2851, 2848, 2852, 2846, 2853, 2851, 2856, 2854, + 2857, 2844, 2860, 2869, 2856, 2850, 2869, 2871, 2876, 2857, + 2872, 2872, 2879, 2852, 2853, 2854, 2877, 2860, 2873, 2873, + 2871, 2874, 2874, 2880, 2882, 2877, 2886, 2883, 2884, 2887, + 2887, 2876, 2879, 2884, 2885, 2888, 2885, 2880, 2883, 2889, + 2891, 2886, 2890, 2892, 2893, 2894, 2896, 2882, 2888, 2895, + 2897, 2902, 2898, 2903, 2894, 2905, 2891, 2898, 2889, 2893, + 2890, 2895, 2904, 2904, 2905, 2902, 2910, 2896, 2892, 2911, - 2907, 2910, 2905, 2908, 2909, 2911, 2906, 2912, 2913, 2914, - 2915, 2916, 2918, 2912, 2919, 2915, 2917, 2917, 2920, 2920, - 2911, 2914, 2913, 2922, 2924, 2930, 2910, 2918, 2927, 2927, - 2931, 2916, 2929, 2919, 2928, 2928, 2931, 2932, 2922, 2933, - 2929, 2934, 2924, 2932, 2930, 2935, 2936, 2937, 2937, 2938, - 2938, 2936, 2940, 2933, 2934, 2941, 2943, 2944, 2946, 2949, - 2947, 2944, 2948, 2950, 2935, 2947, 2951, 2954, 2954, 2952, - 2943, 2957, 2949, 2940, 2952, 2941, 2950, 2953, 2946, 2958, - 2959, 2948, 2953, 2960, 2960, 2951, 2967, 2961, 2962, 2963, - 2963, 2957, 2961, 2964, 2962, 2965, 2966, 2958, 2964, 2959, + 2897, 2906, 2906, 2903, 2907, 2907, 2908, 2908, 2909, 2909, + 2912, 2913, 2914, 2912, 2915, 2910, 2913, 2914, 2916, 2911, + 2917, 2918, 2919, 2920, 2921, 2923, 2917, 2924, 2920, 2922, + 2922, 2925, 2925, 2916, 2919, 2918, 2927, 2929, 2935, 2915, + 2923, 2932, 2932, 2936, 2921, 2934, 2924, 2933, 2933, 2936, + 2937, 2927, 2938, 2934, 2939, 2929, 2937, 2935, 2940, 2941, + 2942, 2942, 2943, 2943, 2941, 2945, 2938, 2939, 2946, 2948, + 2949, 2951, 2954, 2952, 2949, 2953, 2955, 2940, 2952, 2956, + 2959, 2959, 2957, 2948, 2962, 2954, 2945, 2957, 2946, 2955, + 2958, 2951, 2963, 2964, 2953, 2958, 2965, 2965, 2956, 2972, - 2965, 2966, 2968, 2970, 2970, 2967, 2971, 2975, 2968, 2972, - 2972, 2971, 2974, 2976, 2977, 2978, 2974, 2979, 2980, 2981, - 2976, 2983, 2983, 2979, 2985, 2985, 2975, 2986, 2988, 2989, - 2987, 2990, 2981, 2977, 2978, 2987, 2986, 2980, 2992, 2986, - 2991, 2991, 2993, 2992, 2990, 2995, 2997, 2988, 2989, 2996, - 2996, 2998, 2998, 2999, 2999, 2993, 3000, 3001, 3002, 3003, - 3003, 3000, 3004, 3009, 3001, 2997, 3005, 3004, 3005, 3006, - 3006, 2995, 3007, 3008, 3011, 3014, 3010, 3002, 3018, 3007, - 3008, 3010, 3009, 3013, 3013, 3016, 3017, 3019, 3020, 3020, - 3016, 3017, 3023, 3011, 3014, 3022, 3022, 3018, 3024, 3025, + 2966, 2967, 2968, 2968, 2962, 2966, 2969, 2967, 2970, 2971, + 2963, 2969, 2964, 2970, 2971, 2973, 2975, 2975, 2972, 2976, + 2980, 2973, 2977, 2977, 2976, 2979, 2981, 2982, 2983, 2979, + 2984, 2985, 2986, 2981, 2988, 2988, 2984, 2990, 2990, 2980, + 2991, 2993, 2994, 2992, 2995, 2986, 2982, 2983, 2992, 2991, + 2985, 2997, 2991, 2996, 2996, 2998, 2997, 2995, 3000, 3002, + 2993, 2994, 3001, 3001, 3003, 3003, 3004, 3004, 2998, 3005, + 3006, 3007, 3008, 3008, 3005, 3009, 3014, 3006, 3002, 3010, + 3009, 3010, 3011, 3011, 3000, 3012, 3013, 3016, 3019, 3015, + 3007, 3023, 3012, 3013, 3015, 3014, 3018, 3018, 3021, 3022, - 3025, 3026, 3026, 3027, 3029, 3029, 3019, 3030, 3030, 3031, - 3027, 3023, 3037, 3033, 3036, 3038, 3031, 3024, 3033, 3036, - 3039, 3039, 3040, 3040, 0, 0, 0, 0, 0, 0, - 0, 3037, 0, 0, 3038, 3044, 3044, 3044, 3044, 3044, - 3044, 3044, 3045, 3045, 3045, 3045, 3045, 3045, 3045, 3046, - 3046, 3046, 3046, 3046, 3046, 3046, 3047, 3047, 3047, 3047, - 3047, 3047, 3047, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3050, 3050, 0, 3050, 3050, 3050, 3050, 3051, 3051, 0, - 0, 0, 3051, 3051, 3052, 3052, 0, 0, 3052, 0, - 3052, 3053, 0, 0, 0, 0, 0, 3053, 3054, 3054, + 3024, 3025, 3025, 3021, 3022, 3028, 3016, 3019, 3027, 3027, + 3023, 3029, 3030, 3030, 3031, 3031, 3032, 3034, 3034, 3024, + 3035, 3035, 3036, 3032, 3028, 3042, 3038, 3041, 3043, 3036, + 3029, 3038, 3041, 3044, 3044, 3045, 3045, 0, 0, 0, + 0, 0, 0, 0, 3042, 0, 0, 3043, 3049, 3049, + 3049, 3049, 3049, 3049, 3049, 3050, 3050, 3050, 3050, 3050, + 3050, 3050, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3052, + 3052, 3052, 3052, 3052, 3052, 3052, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3055, 3055, 0, 3055, 3055, 3055, 3055, + 3056, 3056, 0, 0, 0, 3056, 3056, 3057, 3057, 0, - 0, 0, 0, 3054, 3054, 3055, 0, 0, 0, 0, - 0, 3055, 3056, 3056, 0, 3056, 3056, 3056, 3056, 3057, - 3057, 0, 3057, 3057, 3057, 3057, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043 + 0, 3057, 0, 3057, 3058, 0, 0, 0, 0, 0, + 3058, 3059, 3059, 0, 0, 0, 3059, 3059, 3060, 0, + 0, 0, 0, 0, 3060, 3061, 3061, 0, 3061, 3061, + 3061, 3061, 3062, 3062, 0, 3062, 3062, 3062, 3062, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, + 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 } ; static yy_state_type yy_last_accepting_state; @@ -2864,7 +2877,7 @@ static void config_start_include(const char* filename) config_include_stack = s; cfg_parser->filename = nm; cfg_parser->line = 1; - yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE)); + yy_switch_to_buffer(yy_create_buffer(input,YY_BUF_SIZE)); } static void config_start_include_glob(const char* filename) @@ -2933,12 +2946,11 @@ static void config_end_include(void) #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_current_buffer = yy_create_buffer(yyin,YY_BUF_SIZE ); \ yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \ } #endif -#line 2939 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2947,9 +2959,8 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2948 "" -#line 2950 "" +#line 2962 "" #define INITIAL 0 #define quotedstring 1 @@ -2970,36 +2981,36 @@ static void config_end_include(void) #define YY_EXTRA_TYPE void * #endif -static int yy_init_globals ( void ); +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 yylex_destroy (void ); -int yyget_debug ( void ); +int yyget_debug (void ); -void yyset_debug ( int debug_flag ); +void yyset_debug (int debug_flag ); -YY_EXTRA_TYPE yyget_extra ( void ); +YY_EXTRA_TYPE yyget_extra (void ); -void yyset_extra ( YY_EXTRA_TYPE user_defined ); +void yyset_extra (YY_EXTRA_TYPE user_defined ); -FILE *yyget_in ( void ); +FILE *yyget_in (void ); -void yyset_in ( FILE * _in_str ); +void yyset_in (FILE * in_str ); -FILE *yyget_out ( void ); +FILE *yyget_out (void ); -void yyset_out ( FILE * _out_str ); +void yyset_out (FILE * out_str ); - int yyget_leng ( void ); +yy_size_t yyget_leng (void ); -char *yyget_text ( void ); +char *yyget_text (void ); -int yyget_lineno ( void ); +int yyget_lineno (void ); -void yyset_lineno ( int _line_number ); +void yyset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. @@ -3007,41 +3018,33 @@ void yyset_lineno ( int _line_number ); #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int yywrap ( void ); +extern "C" int yywrap (void ); #else -extern int yywrap ( void ); +extern int yywrap (void ); #endif #endif -#ifndef YY_NO_UNPUT - -#endif - #ifndef yytext_ptr -static void yy_flex_strncpy ( char *, const char *, int ); +static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen ( const char * ); +static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT + #ifdef __cplusplus -static int yyinput ( void ); +static int yyinput (void ); #else -static int input ( void ); +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. */ @@ -3049,7 +3052,7 @@ static int input ( void ); /* 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) +#define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -3060,7 +3063,7 @@ static int input ( void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - int n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -3073,7 +3076,7 @@ static int input ( void ); else \ { \ errno=0; \ - while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ @@ -3128,7 +3131,7 @@ extern int yylex (void); /* Code executed at the end of each rule. */ #ifndef YY_BREAK -#define YY_BREAK /*LINTED*/break; +#define YY_BREAK break; #endif #define YY_RULE_SETUP \ @@ -3138,10 +3141,14 @@ extern int yylex (void); */ YY_DECL { - yy_state_type yy_current_state; - char *yy_cp, *yy_bp; - int yy_act; + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; +#line 204 "./util/configlexer.lex" + +#line 3149 "" + if ( !(yy_init) ) { (yy_init) = 1; @@ -3162,23 +3169,18 @@ YY_DECL if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE ); + yy_create_buffer(yyin,YY_BUF_SIZE ); } - yy_load_buffer_state( ); + yy_load_buffer_state( ); } - { -#line 204 "./util/configlexer.lex" - -#line 3172 "" - - while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + while ( 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_len) = (yy_c_buf_p) - (yytext_ptr); (yy_more_flag) = 0; } yy_cp = (yy_c_buf_p); @@ -3195,7 +3197,7 @@ YY_DECL yy_match: do { - YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + register 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; @@ -3204,13 +3206,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3044 ) - yy_c = yy_meta[yy_c]; + if ( yy_current_state >= 3049 ) + yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5927 ); + while ( yy_base[yy_current_state] != 5940 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3510,247 +3512,247 @@ YY_RULE_SETUP case 55: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_DSCP) } YY_BREAK case 56: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 57: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 58: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 59: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 60: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 61: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 62: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 63: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 64: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 65: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 66: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 67: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 68: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 69: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 70: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 71: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 72: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 73: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 74: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 75: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 76: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 77: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 78: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 79: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 80: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 81: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 82: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 83: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 84: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 85: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 86: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 87: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 88: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 89: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 90: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 91: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 92: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 93: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 94: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 95: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 96: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 97: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 98: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 99: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 100: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 101: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 102: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 103: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 104: YY_RULE_SETUP @@ -3760,32 +3762,32 @@ YY_RULE_SETUP case 105: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 106: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 107: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 108: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 109: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 110: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 111: YY_RULE_SETUP @@ -3795,731 +3797,731 @@ YY_RULE_SETUP case 112: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 113: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 114: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 115: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 116: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 117: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 118: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 119: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 120: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 121: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 122: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 123: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 124: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 125: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 126: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 127: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 128: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 129: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 130: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 131: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 132: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 133: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 134: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 135: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 136: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 137: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 138: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 139: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 140: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 141: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 142: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 143: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 144: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 145: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 146: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 147: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 148: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 149: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 153: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 154: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 155: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 156: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 157: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 158: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 159: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 160: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 161: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 162: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 163: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 164: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 165: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 166: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 167: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 168: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 169: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 170: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 171: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 172: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 173: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 174: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 175: YY_RULE_SETUP -#line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 382 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 176: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 177: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 231: YY_RULE_SETUP -#line 440 "./util/configlexer.lex" +#line 439 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 232: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 441 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 233: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 234: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 235: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 236: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 237: YY_RULE_SETUP -#line 448 "./util/configlexer.lex" +#line 447 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 238: YY_RULE_SETUP -#line 450 "./util/configlexer.lex" +#line 449 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 239: YY_RULE_SETUP -#line 452 "./util/configlexer.lex" +#line 451 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 240: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" +#line 453 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 456 "./util/configlexer.lex" +#line 455 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 457 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 244: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 245: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 246: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 256: YY_RULE_SETUP @@ -4534,195 +4536,200 @@ YY_RULE_SETUP case 258: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 259: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 260: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 269: YY_RULE_SETUP -#line 486 "./util/configlexer.lex" +#line 485 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 270: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 487 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 271: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 272: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 273: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 289: -/* rule 289 can match eol */ YY_RULE_SETUP #line 507 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 290: +/* rule 290 can match eol */ +YY_RULE_SETUP +#line 508 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 290: +case 291: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" +#line 511 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 511 "./util/configlexer.lex" +#line 512 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 291: -YY_RULE_SETUP -#line 516 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 292: -/* rule 292 can match eol */ YY_RULE_SETUP #line 517 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 293: +/* rule 293 can match eol */ +YY_RULE_SETUP +#line 518 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 293: +case 294: YY_RULE_SETUP -#line 519 "./util/configlexer.lex" +#line 520 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4735,34 +4742,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 294: +case 295: YY_RULE_SETUP -#line 531 "./util/configlexer.lex" +#line 532 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 532 "./util/configlexer.lex" +#line 533 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 295: -YY_RULE_SETUP -#line 537 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 296: -/* rule 296 can match eol */ YY_RULE_SETUP #line 538 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 297: +/* rule 297 can match eol */ +YY_RULE_SETUP +#line 539 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 297: +case 298: YY_RULE_SETUP -#line 540 "./util/configlexer.lex" +#line 541 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4775,38 +4782,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 298: +case 299: YY_RULE_SETUP -#line 552 "./util/configlexer.lex" +#line 553 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 554 "./util/configlexer.lex" +#line 555 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 299: -YY_RULE_SETUP -#line 558 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 300: -/* rule 300 can match eol */ YY_RULE_SETUP #line 559 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 301: +/* rule 301 can match eol */ YY_RULE_SETUP #line 560 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 302: YY_RULE_SETUP #line 561 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 303: +YY_RULE_SETUP +#line 562 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4814,27 +4821,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 566 "./util/configlexer.lex" +#line 567 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 303: -YY_RULE_SETUP -#line 570 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 304: -/* rule 304 can match eol */ YY_RULE_SETUP #line 571 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 305: +/* rule 305 can match eol */ +YY_RULE_SETUP +#line 572 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 305: +case 306: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 574 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4844,7 +4851,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 579 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4856,33 +4863,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 306: +case 307: YY_RULE_SETUP -#line 590 "./util/configlexer.lex" +#line 591 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 307: +case 308: YY_RULE_SETUP -#line 594 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 308: +case 309: YY_RULE_SETUP -#line 598 "./util/configlexer.lex" +#line 599 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 309: +case 310: YY_RULE_SETUP -#line 602 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4883 "" +#line 4891 "" case YY_END_OF_BUFFER: { @@ -4958,7 +4965,7 @@ ECHO; { (yy_did_buffer_switch_on_eof) = 0; - if ( yywrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up @@ -5011,7 +5018,6 @@ ECHO; "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 @@ -5023,9 +5029,9 @@ ECHO; */ 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; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -5054,7 +5060,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -5067,21 +5073,21 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t 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; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; 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; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -5090,12 +5096,11 @@ static int yy_get_next_buffer (void) 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) ); + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ - b->yy_ch_buf = NULL; + b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( @@ -5123,7 +5128,7 @@ static int yy_get_next_buffer (void) if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); + yyrestart(yyin ); } else @@ -5137,15 +5142,12 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if ((yy_size_t) ((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 ); + yy_size_t 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,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; @@ -5161,14 +5163,14 @@ static int yy_get_next_buffer (void) static yy_state_type yy_get_previous_state (void) { - yy_state_type yy_current_state; - char *yy_cp; + register yy_state_type yy_current_state; + register 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); + register 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; @@ -5177,10 +5179,10 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3044 ) - yy_c = yy_meta[yy_c]; + if ( yy_current_state >= 3049 ) + yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; @@ -5193,10 +5195,10 @@ static int yy_get_next_buffer (void) */ 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); + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); - YY_CHAR yy_c = 1; + register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -5205,19 +5207,15 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3044 ) - yy_c = yy_meta[yy_c]; + if ( yy_current_state >= 3049 ) + yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3043); + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 3048); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } -#ifndef YY_NO_UNPUT - -#endif - #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) @@ -5242,7 +5240,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -5259,13 +5257,13 @@ static int yy_get_next_buffer (void) */ /* Reset buffer status. */ - yyrestart( yyin ); + yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( yywrap( ) ) + if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) @@ -5303,11 +5301,11 @@ static int yy_get_next_buffer (void) if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE ); + yy_create_buffer(yyin,YY_BUF_SIZE ); } - yy_init_buffer( YY_CURRENT_BUFFER, input_file ); - yy_load_buffer_state( ); + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); } /** Switch to a different input buffer. @@ -5335,7 +5333,7 @@ static int yy_get_next_buffer (void) } YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag @@ -5363,7 +5361,7 @@ static void yy_load_buffer_state (void) { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); @@ -5372,13 +5370,13 @@ static void yy_load_buffer_state (void) /* 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) ); + b->yy_ch_buf = (char *) yyalloc(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 ); + yy_init_buffer(b,file ); return b; } @@ -5397,11 +5395,15 @@ static void yy_load_buffer_state (void) YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - yyfree( (void *) b->yy_ch_buf ); + yyfree((void *) b->yy_ch_buf ); - yyfree( (void *) b ); + yyfree((void *) b ); } +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + /* 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. @@ -5411,7 +5413,7 @@ static void yy_load_buffer_state (void) { int oerrno = errno; - yy_flush_buffer( b ); + yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; @@ -5454,7 +5456,7 @@ static void yy_load_buffer_state (void) b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); + yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes @@ -5485,7 +5487,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } @@ -5504,7 +5506,7 @@ void yypop_buffer_state (void) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -5522,15 +5524,15 @@ static void yyensure_buffer_stack (void) * 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... */ + num_to_alloc = 1; (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; @@ -5539,7 +5541,7 @@ static void yyensure_buffer_stack (void) 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 */; + int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc @@ -5559,7 +5561,7 @@ static void yyensure_buffer_stack (void) * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { @@ -5569,23 +5571,23 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) 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; + return 0; - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + 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_size = 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_input_file = 0; 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 ); + yy_switch_to_buffer(b ); return b; } @@ -5598,29 +5600,28 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) * @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 ) +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { - return yy_scan_bytes( yystr, (int) strlen(yystr) ); + return yy_scan_bytes(yystr,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. + * @param bytes the byte buffer to scan + * @param 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 yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; - yy_size_t n; - int i; + yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc( n ); + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); @@ -5629,7 +5630,7 @@ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = yy_scan_buffer( buf, n ); + b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); @@ -5645,9 +5646,9 @@ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) #define YY_EXIT_FAILURE 2 #endif -static void yynoreturn yy_fatal_error (const char* msg ) +static void yy_fatal_error (yyconst char* msg ) { - fprintf( stderr, "%s\n", msg ); + (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -5675,7 +5676,7 @@ static void yynoreturn yy_fatal_error (const char* msg ) */ int yyget_lineno (void) { - + return yylineno; } @@ -5698,7 +5699,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } @@ -5713,29 +5714,29 @@ char *yyget_text (void) } /** Set the current line number. - * @param _line_number line number + * @param line_number * */ -void yyset_lineno (int _line_number ) +void yyset_lineno (int line_number ) { - yylineno = _line_number; + yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. - * @param _in_str A readable stream. + * @param in_str A readable stream. * * @see yy_switch_to_buffer */ -void yyset_in (FILE * _in_str ) +void yyset_in (FILE * in_str ) { - yyin = _in_str ; + yyin = in_str ; } -void yyset_out (FILE * _out_str ) +void yyset_out (FILE * out_str ) { - yyout = _out_str ; + yyout = out_str ; } int yyget_debug (void) @@ -5743,9 +5744,9 @@ int yyget_debug (void) return yy_flex_debug; } -void yyset_debug (int _bdebug ) +void yyset_debug (int bdebug ) { - yy_flex_debug = _bdebug ; + yy_flex_debug = bdebug ; } static int yy_init_globals (void) @@ -5754,10 +5755,10 @@ static int yy_init_globals (void) * This function is called from yylex_destroy(), so don't allocate here. */ - (yy_buffer_stack) = NULL; + (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = NULL; + (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; @@ -5766,8 +5767,8 @@ static int yy_init_globals (void) yyin = stdin; yyout = stdout; #else - yyin = NULL; - yyout = NULL; + yyin = (FILE *) 0; + yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by @@ -5782,7 +5783,7 @@ int yylex_destroy (void) /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } @@ -5803,19 +5804,18 @@ int yylex_destroy (void) */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, const char * s2, int n ) +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { - - int i; + register 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 ) +static int yy_flex_strlen (yyconst char * s ) { - int n; + register int n; for ( n = 0; s[n]; ++n ) ; @@ -5825,12 +5825,11 @@ static int yy_flex_strlen (const char * s ) void *yyalloc (yy_size_t size ) { - return malloc(size); + return (void *) 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 @@ -5838,16 +5837,17 @@ void *yyrealloc (void * ptr, yy_size_t size ) * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ - return realloc(ptr, size); + return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" -#line 602 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" + diff --git a/util/configlexer.lex b/util/configlexer.lex index 1d7a38681..e4baf13f9 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -259,6 +259,7 @@ so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) } so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) } ip-transparent{COLON} { YDVAR(1, VAR_IP_TRANSPARENT) } ip-freebind{COLON} { YDVAR(1, VAR_IP_FREEBIND) } +ip-dscp{COLON} { YDVAR(1, VAR_IP_DSCP) } chroot{COLON} { YDVAR(1, VAR_CHROOT) } username{COLON} { YDVAR(1, VAR_USERNAME) } directory{COLON} { YDVAR(1, VAR_DIRECTORY) } diff --git a/util/configparser.c b/util/configparser.c index 6d792c698..5938b1940 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,14 +1,14 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ -/* Bison implementation for Yacc-like parsers in C +/* Skeleton implementation for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify + 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. + the Free Software Foundation; either version 2, 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 @@ -16,7 +16,9 @@ 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 . */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -41,14 +43,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -56,367 +55,301 @@ /* Pure parsers. */ #define YYPURE 0 -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 +/* Using locations. */ +#define YYLSP_NEEDED 0 - -/* First part of user prologue. */ -#line 38 "./util/configparser.y" - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "util/configyyrename.h" -#include "util/config_file.h" -#include "util/net_help.h" - -int ub_c_lex(void); -void ub_c_error(const char *message); - -static void validate_respip_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 99 "util/configparser.c" - -# 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 - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Use api.header.include to #include this header - instead of duplicating it here. */ -#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 type. */ +/* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - enum yytokentype - { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_SERVER = 266, - VAR_VERBOSITY = 267, - VAR_NUM_THREADS = 268, - VAR_PORT = 269, - VAR_OUTGOING_RANGE = 270, - VAR_INTERFACE = 271, - VAR_PREFER_IP4 = 272, - VAR_DO_IP4 = 273, - VAR_DO_IP6 = 274, - VAR_PREFER_IP6 = 275, - VAR_DO_UDP = 276, - VAR_DO_TCP = 277, - VAR_TCP_MSS = 278, - VAR_OUTGOING_TCP_MSS = 279, - VAR_TCP_IDLE_TIMEOUT = 280, - VAR_EDNS_TCP_KEEPALIVE = 281, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, - VAR_CHROOT = 283, - VAR_USERNAME = 284, - VAR_DIRECTORY = 285, - VAR_LOGFILE = 286, - VAR_PIDFILE = 287, - VAR_MSG_CACHE_SIZE = 288, - VAR_MSG_CACHE_SLABS = 289, - VAR_NUM_QUERIES_PER_THREAD = 290, - VAR_RRSET_CACHE_SIZE = 291, - VAR_RRSET_CACHE_SLABS = 292, - VAR_OUTGOING_NUM_TCP = 293, - VAR_INFRA_HOST_TTL = 294, - VAR_INFRA_LAME_TTL = 295, - VAR_INFRA_CACHE_SLABS = 296, - VAR_INFRA_CACHE_NUMHOSTS = 297, - VAR_INFRA_CACHE_LAME_SIZE = 298, - VAR_NAME = 299, - VAR_STUB_ZONE = 300, - VAR_STUB_HOST = 301, - VAR_STUB_ADDR = 302, - VAR_TARGET_FETCH_POLICY = 303, - VAR_HARDEN_SHORT_BUFSIZE = 304, - VAR_HARDEN_LARGE_QUERIES = 305, - VAR_FORWARD_ZONE = 306, - VAR_FORWARD_HOST = 307, - VAR_FORWARD_ADDR = 308, - VAR_DO_NOT_QUERY_ADDRESS = 309, - VAR_HIDE_IDENTITY = 310, - VAR_HIDE_VERSION = 311, - VAR_IDENTITY = 312, - VAR_VERSION = 313, - VAR_HARDEN_GLUE = 314, - VAR_MODULE_CONF = 315, - VAR_TRUST_ANCHOR_FILE = 316, - VAR_TRUST_ANCHOR = 317, - VAR_VAL_OVERRIDE_DATE = 318, - VAR_BOGUS_TTL = 319, - VAR_VAL_CLEAN_ADDITIONAL = 320, - VAR_VAL_PERMISSIVE_MODE = 321, - VAR_INCOMING_NUM_TCP = 322, - VAR_MSG_BUFFER_SIZE = 323, - VAR_KEY_CACHE_SIZE = 324, - VAR_KEY_CACHE_SLABS = 325, - VAR_TRUSTED_KEYS_FILE = 326, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, - VAR_USE_SYSLOG = 328, - VAR_OUTGOING_INTERFACE = 329, - VAR_ROOT_HINTS = 330, - VAR_DO_NOT_QUERY_LOCALHOST = 331, - VAR_CACHE_MAX_TTL = 332, - VAR_HARDEN_DNSSEC_STRIPPED = 333, - VAR_ACCESS_CONTROL = 334, - VAR_LOCAL_ZONE = 335, - VAR_LOCAL_DATA = 336, - VAR_INTERFACE_AUTOMATIC = 337, - VAR_STATISTICS_INTERVAL = 338, - VAR_DO_DAEMONIZE = 339, - VAR_USE_CAPS_FOR_ID = 340, - VAR_STATISTICS_CUMULATIVE = 341, - VAR_OUTGOING_PORT_PERMIT = 342, - VAR_OUTGOING_PORT_AVOID = 343, - VAR_DLV_ANCHOR_FILE = 344, - VAR_DLV_ANCHOR = 345, - VAR_NEG_CACHE_SIZE = 346, - VAR_HARDEN_REFERRAL_PATH = 347, - VAR_PRIVATE_ADDRESS = 348, - VAR_PRIVATE_DOMAIN = 349, - VAR_REMOTE_CONTROL = 350, - VAR_CONTROL_ENABLE = 351, - VAR_CONTROL_INTERFACE = 352, - VAR_CONTROL_PORT = 353, - VAR_SERVER_KEY_FILE = 354, - VAR_SERVER_CERT_FILE = 355, - VAR_CONTROL_KEY_FILE = 356, - VAR_CONTROL_CERT_FILE = 357, - VAR_CONTROL_USE_CERT = 358, - VAR_EXTENDED_STATISTICS = 359, - VAR_LOCAL_DATA_PTR = 360, - VAR_JOSTLE_TIMEOUT = 361, - VAR_STUB_PRIME = 362, - VAR_UNWANTED_REPLY_THRESHOLD = 363, - VAR_LOG_TIME_ASCII = 364, - VAR_DOMAIN_INSECURE = 365, - VAR_PYTHON = 366, - VAR_PYTHON_SCRIPT = 367, - VAR_VAL_SIG_SKEW_MIN = 368, - VAR_VAL_SIG_SKEW_MAX = 369, - VAR_CACHE_MIN_TTL = 370, - VAR_VAL_LOG_LEVEL = 371, - VAR_AUTO_TRUST_ANCHOR_FILE = 372, - VAR_KEEP_MISSING = 373, - VAR_ADD_HOLDDOWN = 374, - VAR_DEL_HOLDDOWN = 375, - VAR_SO_RCVBUF = 376, - VAR_EDNS_BUFFER_SIZE = 377, - VAR_PREFETCH = 378, - VAR_PREFETCH_KEY = 379, - VAR_SO_SNDBUF = 380, - VAR_SO_REUSEPORT = 381, - VAR_HARDEN_BELOW_NXDOMAIN = 382, - VAR_IGNORE_CD_FLAG = 383, - VAR_LOG_QUERIES = 384, - VAR_LOG_REPLIES = 385, - VAR_LOG_LOCAL_ACTIONS = 386, - VAR_TCP_UPSTREAM = 387, - VAR_SSL_UPSTREAM = 388, - VAR_SSL_SERVICE_KEY = 389, - VAR_SSL_SERVICE_PEM = 390, - VAR_SSL_PORT = 391, - VAR_FORWARD_FIRST = 392, - VAR_STUB_SSL_UPSTREAM = 393, - VAR_FORWARD_SSL_UPSTREAM = 394, - VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_DISABLE_DNSSEC_LAME_CHECK = 431, - VAR_IP_RATELIMIT = 432, - VAR_IP_RATELIMIT_SLABS = 433, - VAR_IP_RATELIMIT_SIZE = 434, - VAR_RATELIMIT = 435, - VAR_RATELIMIT_SLABS = 436, - VAR_RATELIMIT_SIZE = 437, - VAR_RATELIMIT_FOR_DOMAIN = 438, - VAR_RATELIMIT_BELOW_DOMAIN = 439, - VAR_IP_RATELIMIT_FACTOR = 440, - VAR_RATELIMIT_FACTOR = 441, - VAR_SEND_CLIENT_SUBNET = 442, - VAR_CLIENT_SUBNET_ZONE = 443, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 444, - VAR_CLIENT_SUBNET_OPCODE = 445, - VAR_MAX_CLIENT_SUBNET_IPV4 = 446, - VAR_MAX_CLIENT_SUBNET_IPV6 = 447, - VAR_MIN_CLIENT_SUBNET_IPV4 = 448, - VAR_MIN_CLIENT_SUBNET_IPV6 = 449, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 451, - VAR_CAPS_WHITELIST = 452, - VAR_CACHE_MAX_NEGATIVE_TTL = 453, - VAR_PERMIT_SMALL_HOLDDOWN = 454, - VAR_QNAME_MINIMISATION = 455, - VAR_QNAME_MINIMISATION_STRICT = 456, - VAR_IP_FREEBIND = 457, - VAR_DEFINE_TAG = 458, - VAR_LOCAL_ZONE_TAG = 459, - VAR_ACCESS_CONTROL_TAG = 460, - VAR_LOCAL_ZONE_OVERRIDE = 461, - VAR_ACCESS_CONTROL_TAG_ACTION = 462, - VAR_ACCESS_CONTROL_TAG_DATA = 463, - VAR_VIEW = 464, - VAR_ACCESS_CONTROL_VIEW = 465, - VAR_VIEW_FIRST = 466, - VAR_SERVE_EXPIRED = 467, - VAR_SERVE_EXPIRED_TTL = 468, - VAR_SERVE_EXPIRED_TTL_RESET = 469, - VAR_SERVE_EXPIRED_REPLY_TTL = 470, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 471, - VAR_FAKE_DSA = 472, - VAR_FAKE_SHA1 = 473, - VAR_LOG_IDENTITY = 474, - VAR_HIDE_TRUSTANCHOR = 475, - VAR_TRUST_ANCHOR_SIGNALING = 476, - VAR_AGGRESSIVE_NSEC = 477, - VAR_USE_SYSTEMD = 478, - VAR_SHM_ENABLE = 479, - VAR_SHM_KEY = 480, - VAR_ROOT_KEY_SENTINEL = 481, - VAR_DNSCRYPT = 482, - VAR_DNSCRYPT_ENABLE = 483, - VAR_DNSCRYPT_PORT = 484, - VAR_DNSCRYPT_PROVIDER = 485, - VAR_DNSCRYPT_SECRET_KEY = 486, - VAR_DNSCRYPT_PROVIDER_CERT = 487, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 488, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 490, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 491, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 492, - VAR_IPSECMOD_ENABLED = 493, - VAR_IPSECMOD_HOOK = 494, - VAR_IPSECMOD_IGNORE_BOGUS = 495, - VAR_IPSECMOD_MAX_TTL = 496, - VAR_IPSECMOD_WHITELIST = 497, - VAR_IPSECMOD_STRICT = 498, - VAR_CACHEDB = 499, - VAR_CACHEDB_BACKEND = 500, - VAR_CACHEDB_SECRETSEED = 501, - VAR_CACHEDB_REDISHOST = 502, - VAR_CACHEDB_REDISPORT = 503, - VAR_CACHEDB_REDISTIMEOUT = 504, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 505, - VAR_FOR_UPSTREAM = 506, - VAR_AUTH_ZONE = 507, - VAR_ZONEFILE = 508, - VAR_MASTER = 509, - VAR_URL = 510, - VAR_FOR_DOWNSTREAM = 511, - VAR_FALLBACK_ENABLED = 512, - VAR_TLS_ADDITIONAL_PORT = 513, - VAR_LOW_RTT = 514, - VAR_LOW_RTT_PERMIL = 515, - VAR_FAST_SERVER_PERMIL = 516, - VAR_FAST_SERVER_NUM = 517, - VAR_ALLOW_NOTIFY = 518, - VAR_TLS_WIN_CERT = 519, - VAR_TCP_CONNECTION_LIMIT = 520, - VAR_FORWARD_NO_CACHE = 521, - VAR_STUB_NO_CACHE = 522, - VAR_LOG_SERVFAIL = 523, - VAR_DENY_ANY = 524, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 525, - VAR_LOG_TAG_QUERYREPLY = 526, - VAR_STREAM_WAIT_SIZE = 527, - VAR_TLS_CIPHERS = 528, - VAR_TLS_CIPHERSUITES = 529, - VAR_IPSET = 530, - VAR_IPSET_NAME_V4 = 531, - VAR_IPSET_NAME_V6 = 532, - VAR_TLS_SESSION_TICKET_KEYS = 533, - VAR_RPZ = 534, - VAR_TAGS = 535, - VAR_RPZ_ACTION_OVERRIDE = 536, - VAR_RPZ_CNAME_OVERRIDE = 537, - VAR_RPZ_LOG = 538, - VAR_RPZ_LOG_NAME = 539 - }; + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + SPACE = 258, + LETTER = 259, + NEWLINE = 260, + COMMENT = 261, + COLON = 262, + ANY = 263, + ZONESTR = 264, + STRING_ARG = 265, + VAR_SERVER = 266, + VAR_VERBOSITY = 267, + VAR_NUM_THREADS = 268, + VAR_PORT = 269, + VAR_OUTGOING_RANGE = 270, + VAR_INTERFACE = 271, + VAR_PREFER_IP4 = 272, + VAR_DO_IP4 = 273, + VAR_DO_IP6 = 274, + VAR_PREFER_IP6 = 275, + VAR_DO_UDP = 276, + VAR_DO_TCP = 277, + VAR_TCP_MSS = 278, + VAR_OUTGOING_TCP_MSS = 279, + VAR_TCP_IDLE_TIMEOUT = 280, + VAR_EDNS_TCP_KEEPALIVE = 281, + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, + VAR_CHROOT = 283, + VAR_USERNAME = 284, + VAR_DIRECTORY = 285, + VAR_LOGFILE = 286, + VAR_PIDFILE = 287, + VAR_MSG_CACHE_SIZE = 288, + VAR_MSG_CACHE_SLABS = 289, + VAR_NUM_QUERIES_PER_THREAD = 290, + VAR_RRSET_CACHE_SIZE = 291, + VAR_RRSET_CACHE_SLABS = 292, + VAR_OUTGOING_NUM_TCP = 293, + VAR_INFRA_HOST_TTL = 294, + VAR_INFRA_LAME_TTL = 295, + VAR_INFRA_CACHE_SLABS = 296, + VAR_INFRA_CACHE_NUMHOSTS = 297, + VAR_INFRA_CACHE_LAME_SIZE = 298, + VAR_NAME = 299, + VAR_STUB_ZONE = 300, + VAR_STUB_HOST = 301, + VAR_STUB_ADDR = 302, + VAR_TARGET_FETCH_POLICY = 303, + VAR_HARDEN_SHORT_BUFSIZE = 304, + VAR_HARDEN_LARGE_QUERIES = 305, + VAR_FORWARD_ZONE = 306, + VAR_FORWARD_HOST = 307, + VAR_FORWARD_ADDR = 308, + VAR_DO_NOT_QUERY_ADDRESS = 309, + VAR_HIDE_IDENTITY = 310, + VAR_HIDE_VERSION = 311, + VAR_IDENTITY = 312, + VAR_VERSION = 313, + VAR_HARDEN_GLUE = 314, + VAR_MODULE_CONF = 315, + VAR_TRUST_ANCHOR_FILE = 316, + VAR_TRUST_ANCHOR = 317, + VAR_VAL_OVERRIDE_DATE = 318, + VAR_BOGUS_TTL = 319, + VAR_VAL_CLEAN_ADDITIONAL = 320, + VAR_VAL_PERMISSIVE_MODE = 321, + VAR_INCOMING_NUM_TCP = 322, + VAR_MSG_BUFFER_SIZE = 323, + VAR_KEY_CACHE_SIZE = 324, + VAR_KEY_CACHE_SLABS = 325, + VAR_TRUSTED_KEYS_FILE = 326, + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, + VAR_USE_SYSLOG = 328, + VAR_OUTGOING_INTERFACE = 329, + VAR_ROOT_HINTS = 330, + VAR_DO_NOT_QUERY_LOCALHOST = 331, + VAR_CACHE_MAX_TTL = 332, + VAR_HARDEN_DNSSEC_STRIPPED = 333, + VAR_ACCESS_CONTROL = 334, + VAR_LOCAL_ZONE = 335, + VAR_LOCAL_DATA = 336, + VAR_INTERFACE_AUTOMATIC = 337, + VAR_STATISTICS_INTERVAL = 338, + VAR_DO_DAEMONIZE = 339, + VAR_USE_CAPS_FOR_ID = 340, + VAR_STATISTICS_CUMULATIVE = 341, + VAR_OUTGOING_PORT_PERMIT = 342, + VAR_OUTGOING_PORT_AVOID = 343, + VAR_DLV_ANCHOR_FILE = 344, + VAR_DLV_ANCHOR = 345, + VAR_NEG_CACHE_SIZE = 346, + VAR_HARDEN_REFERRAL_PATH = 347, + VAR_PRIVATE_ADDRESS = 348, + VAR_PRIVATE_DOMAIN = 349, + VAR_REMOTE_CONTROL = 350, + VAR_CONTROL_ENABLE = 351, + VAR_CONTROL_INTERFACE = 352, + VAR_CONTROL_PORT = 353, + VAR_SERVER_KEY_FILE = 354, + VAR_SERVER_CERT_FILE = 355, + VAR_CONTROL_KEY_FILE = 356, + VAR_CONTROL_CERT_FILE = 357, + VAR_CONTROL_USE_CERT = 358, + VAR_EXTENDED_STATISTICS = 359, + VAR_LOCAL_DATA_PTR = 360, + VAR_JOSTLE_TIMEOUT = 361, + VAR_STUB_PRIME = 362, + VAR_UNWANTED_REPLY_THRESHOLD = 363, + VAR_LOG_TIME_ASCII = 364, + VAR_DOMAIN_INSECURE = 365, + VAR_PYTHON = 366, + VAR_PYTHON_SCRIPT = 367, + VAR_VAL_SIG_SKEW_MIN = 368, + VAR_VAL_SIG_SKEW_MAX = 369, + VAR_CACHE_MIN_TTL = 370, + VAR_VAL_LOG_LEVEL = 371, + VAR_AUTO_TRUST_ANCHOR_FILE = 372, + VAR_KEEP_MISSING = 373, + VAR_ADD_HOLDDOWN = 374, + VAR_DEL_HOLDDOWN = 375, + VAR_SO_RCVBUF = 376, + VAR_EDNS_BUFFER_SIZE = 377, + VAR_PREFETCH = 378, + VAR_PREFETCH_KEY = 379, + VAR_SO_SNDBUF = 380, + VAR_SO_REUSEPORT = 381, + VAR_HARDEN_BELOW_NXDOMAIN = 382, + VAR_IGNORE_CD_FLAG = 383, + VAR_LOG_QUERIES = 384, + VAR_LOG_REPLIES = 385, + VAR_LOG_LOCAL_ACTIONS = 386, + VAR_TCP_UPSTREAM = 387, + VAR_SSL_UPSTREAM = 388, + VAR_SSL_SERVICE_KEY = 389, + VAR_SSL_SERVICE_PEM = 390, + VAR_SSL_PORT = 391, + VAR_FORWARD_FIRST = 392, + VAR_STUB_SSL_UPSTREAM = 393, + VAR_FORWARD_SSL_UPSTREAM = 394, + VAR_TLS_CERT_BUNDLE = 395, + VAR_STUB_FIRST = 396, + VAR_MINIMAL_RESPONSES = 397, + VAR_RRSET_ROUNDROBIN = 398, + VAR_MAX_UDP_SIZE = 399, + VAR_DELAY_CLOSE = 400, + VAR_UNBLOCK_LAN_ZONES = 401, + VAR_INSECURE_LAN_ZONES = 402, + VAR_INFRA_CACHE_MIN_RTT = 403, + VAR_DNS64_PREFIX = 404, + VAR_DNS64_SYNTHALL = 405, + VAR_DNS64_IGNORE_AAAA = 406, + VAR_DNSTAP = 407, + VAR_DNSTAP_ENABLE = 408, + VAR_DNSTAP_SOCKET_PATH = 409, + VAR_DNSTAP_IP = 410, + VAR_DNSTAP_TLS = 411, + VAR_DNSTAP_TLS_SERVER_NAME = 412, + VAR_DNSTAP_TLS_CERT_BUNDLE = 413, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, + VAR_DNSTAP_SEND_IDENTITY = 416, + VAR_DNSTAP_SEND_VERSION = 417, + VAR_DNSTAP_IDENTITY = 418, + VAR_DNSTAP_VERSION = 419, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, + VAR_RESPONSE_IP_TAG = 426, + VAR_RESPONSE_IP = 427, + VAR_RESPONSE_IP_DATA = 428, + VAR_HARDEN_ALGO_DOWNGRADE = 429, + VAR_IP_TRANSPARENT = 430, + VAR_IP_DSCP = 431, + VAR_DISABLE_DNSSEC_LAME_CHECK = 432, + VAR_IP_RATELIMIT = 433, + VAR_IP_RATELIMIT_SLABS = 434, + VAR_IP_RATELIMIT_SIZE = 435, + VAR_RATELIMIT = 436, + VAR_RATELIMIT_SLABS = 437, + VAR_RATELIMIT_SIZE = 438, + VAR_RATELIMIT_FOR_DOMAIN = 439, + VAR_RATELIMIT_BELOW_DOMAIN = 440, + VAR_IP_RATELIMIT_FACTOR = 441, + VAR_RATELIMIT_FACTOR = 442, + VAR_SEND_CLIENT_SUBNET = 443, + VAR_CLIENT_SUBNET_ZONE = 444, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, + VAR_CLIENT_SUBNET_OPCODE = 446, + VAR_MAX_CLIENT_SUBNET_IPV4 = 447, + VAR_MAX_CLIENT_SUBNET_IPV6 = 448, + VAR_MIN_CLIENT_SUBNET_IPV4 = 449, + VAR_MIN_CLIENT_SUBNET_IPV6 = 450, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, + VAR_CAPS_WHITELIST = 453, + VAR_CACHE_MAX_NEGATIVE_TTL = 454, + VAR_PERMIT_SMALL_HOLDDOWN = 455, + VAR_QNAME_MINIMISATION = 456, + VAR_QNAME_MINIMISATION_STRICT = 457, + VAR_IP_FREEBIND = 458, + VAR_DEFINE_TAG = 459, + VAR_LOCAL_ZONE_TAG = 460, + VAR_ACCESS_CONTROL_TAG = 461, + VAR_LOCAL_ZONE_OVERRIDE = 462, + VAR_ACCESS_CONTROL_TAG_ACTION = 463, + VAR_ACCESS_CONTROL_TAG_DATA = 464, + VAR_VIEW = 465, + VAR_ACCESS_CONTROL_VIEW = 466, + VAR_VIEW_FIRST = 467, + VAR_SERVE_EXPIRED = 468, + VAR_SERVE_EXPIRED_TTL = 469, + VAR_SERVE_EXPIRED_TTL_RESET = 470, + VAR_SERVE_EXPIRED_REPLY_TTL = 471, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, + VAR_FAKE_DSA = 473, + VAR_FAKE_SHA1 = 474, + VAR_LOG_IDENTITY = 475, + VAR_HIDE_TRUSTANCHOR = 476, + VAR_TRUST_ANCHOR_SIGNALING = 477, + VAR_AGGRESSIVE_NSEC = 478, + VAR_USE_SYSTEMD = 479, + VAR_SHM_ENABLE = 480, + VAR_SHM_KEY = 481, + VAR_ROOT_KEY_SENTINEL = 482, + VAR_DNSCRYPT = 483, + VAR_DNSCRYPT_ENABLE = 484, + VAR_DNSCRYPT_PORT = 485, + VAR_DNSCRYPT_PROVIDER = 486, + VAR_DNSCRYPT_SECRET_KEY = 487, + VAR_DNSCRYPT_PROVIDER_CERT = 488, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, + VAR_IPSECMOD_ENABLED = 494, + VAR_IPSECMOD_HOOK = 495, + VAR_IPSECMOD_IGNORE_BOGUS = 496, + VAR_IPSECMOD_MAX_TTL = 497, + VAR_IPSECMOD_WHITELIST = 498, + VAR_IPSECMOD_STRICT = 499, + VAR_CACHEDB = 500, + VAR_CACHEDB_BACKEND = 501, + VAR_CACHEDB_SECRETSEED = 502, + VAR_CACHEDB_REDISHOST = 503, + VAR_CACHEDB_REDISPORT = 504, + VAR_CACHEDB_REDISTIMEOUT = 505, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, + VAR_FOR_UPSTREAM = 507, + VAR_AUTH_ZONE = 508, + VAR_ZONEFILE = 509, + VAR_MASTER = 510, + VAR_URL = 511, + VAR_FOR_DOWNSTREAM = 512, + VAR_FALLBACK_ENABLED = 513, + VAR_TLS_ADDITIONAL_PORT = 514, + VAR_LOW_RTT = 515, + VAR_LOW_RTT_PERMIL = 516, + VAR_FAST_SERVER_PERMIL = 517, + VAR_FAST_SERVER_NUM = 518, + VAR_ALLOW_NOTIFY = 519, + VAR_TLS_WIN_CERT = 520, + VAR_TCP_CONNECTION_LIMIT = 521, + VAR_FORWARD_NO_CACHE = 522, + VAR_STUB_NO_CACHE = 523, + VAR_LOG_SERVFAIL = 524, + VAR_DENY_ANY = 525, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, + VAR_LOG_TAG_QUERYREPLY = 527, + VAR_STREAM_WAIT_SIZE = 528, + VAR_TLS_CIPHERS = 529, + VAR_TLS_CIPHERSUITES = 530, + VAR_IPSET = 531, + VAR_IPSET_NAME_V4 = 532, + VAR_IPSET_NAME_V6 = 533, + VAR_TLS_SESSION_TICKET_KEYS = 534, + VAR_RPZ = 535, + VAR_TAGS = 536, + VAR_RPZ_ACTION_OVERRIDE = 537, + VAR_RPZ_CNAME_OVERRIDE = 538, + VAR_RPZ_LOG = 539, + VAR_RPZ_LOG_NAME = 540 + }; #endif /* Tokens. */ #define SPACE 258 @@ -592,141 +525,191 @@ extern int yydebug; #define VAR_RESPONSE_IP_DATA 428 #define VAR_HARDEN_ALGO_DOWNGRADE 429 #define VAR_IP_TRANSPARENT 430 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 431 -#define VAR_IP_RATELIMIT 432 -#define VAR_IP_RATELIMIT_SLABS 433 -#define VAR_IP_RATELIMIT_SIZE 434 -#define VAR_RATELIMIT 435 -#define VAR_RATELIMIT_SLABS 436 -#define VAR_RATELIMIT_SIZE 437 -#define VAR_RATELIMIT_FOR_DOMAIN 438 -#define VAR_RATELIMIT_BELOW_DOMAIN 439 -#define VAR_IP_RATELIMIT_FACTOR 440 -#define VAR_RATELIMIT_FACTOR 441 -#define VAR_SEND_CLIENT_SUBNET 442 -#define VAR_CLIENT_SUBNET_ZONE 443 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444 -#define VAR_CLIENT_SUBNET_OPCODE 445 -#define VAR_MAX_CLIENT_SUBNET_IPV4 446 -#define VAR_MAX_CLIENT_SUBNET_IPV6 447 -#define VAR_MIN_CLIENT_SUBNET_IPV4 448 -#define VAR_MIN_CLIENT_SUBNET_IPV6 449 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 451 -#define VAR_CAPS_WHITELIST 452 -#define VAR_CACHE_MAX_NEGATIVE_TTL 453 -#define VAR_PERMIT_SMALL_HOLDDOWN 454 -#define VAR_QNAME_MINIMISATION 455 -#define VAR_QNAME_MINIMISATION_STRICT 456 -#define VAR_IP_FREEBIND 457 -#define VAR_DEFINE_TAG 458 -#define VAR_LOCAL_ZONE_TAG 459 -#define VAR_ACCESS_CONTROL_TAG 460 -#define VAR_LOCAL_ZONE_OVERRIDE 461 -#define VAR_ACCESS_CONTROL_TAG_ACTION 462 -#define VAR_ACCESS_CONTROL_TAG_DATA 463 -#define VAR_VIEW 464 -#define VAR_ACCESS_CONTROL_VIEW 465 -#define VAR_VIEW_FIRST 466 -#define VAR_SERVE_EXPIRED 467 -#define VAR_SERVE_EXPIRED_TTL 468 -#define VAR_SERVE_EXPIRED_TTL_RESET 469 -#define VAR_SERVE_EXPIRED_REPLY_TTL 470 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471 -#define VAR_FAKE_DSA 472 -#define VAR_FAKE_SHA1 473 -#define VAR_LOG_IDENTITY 474 -#define VAR_HIDE_TRUSTANCHOR 475 -#define VAR_TRUST_ANCHOR_SIGNALING 476 -#define VAR_AGGRESSIVE_NSEC 477 -#define VAR_USE_SYSTEMD 478 -#define VAR_SHM_ENABLE 479 -#define VAR_SHM_KEY 480 -#define VAR_ROOT_KEY_SENTINEL 481 -#define VAR_DNSCRYPT 482 -#define VAR_DNSCRYPT_ENABLE 483 -#define VAR_DNSCRYPT_PORT 484 -#define VAR_DNSCRYPT_PROVIDER 485 -#define VAR_DNSCRYPT_SECRET_KEY 486 -#define VAR_DNSCRYPT_PROVIDER_CERT 487 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492 -#define VAR_IPSECMOD_ENABLED 493 -#define VAR_IPSECMOD_HOOK 494 -#define VAR_IPSECMOD_IGNORE_BOGUS 495 -#define VAR_IPSECMOD_MAX_TTL 496 -#define VAR_IPSECMOD_WHITELIST 497 -#define VAR_IPSECMOD_STRICT 498 -#define VAR_CACHEDB 499 -#define VAR_CACHEDB_BACKEND 500 -#define VAR_CACHEDB_SECRETSEED 501 -#define VAR_CACHEDB_REDISHOST 502 -#define VAR_CACHEDB_REDISPORT 503 -#define VAR_CACHEDB_REDISTIMEOUT 504 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 505 -#define VAR_FOR_UPSTREAM 506 -#define VAR_AUTH_ZONE 507 -#define VAR_ZONEFILE 508 -#define VAR_MASTER 509 -#define VAR_URL 510 -#define VAR_FOR_DOWNSTREAM 511 -#define VAR_FALLBACK_ENABLED 512 -#define VAR_TLS_ADDITIONAL_PORT 513 -#define VAR_LOW_RTT 514 -#define VAR_LOW_RTT_PERMIL 515 -#define VAR_FAST_SERVER_PERMIL 516 -#define VAR_FAST_SERVER_NUM 517 -#define VAR_ALLOW_NOTIFY 518 -#define VAR_TLS_WIN_CERT 519 -#define VAR_TCP_CONNECTION_LIMIT 520 -#define VAR_FORWARD_NO_CACHE 521 -#define VAR_STUB_NO_CACHE 522 -#define VAR_LOG_SERVFAIL 523 -#define VAR_DENY_ANY 524 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 525 -#define VAR_LOG_TAG_QUERYREPLY 526 -#define VAR_STREAM_WAIT_SIZE 527 -#define VAR_TLS_CIPHERS 528 -#define VAR_TLS_CIPHERSUITES 529 -#define VAR_IPSET 530 -#define VAR_IPSET_NAME_V4 531 -#define VAR_IPSET_NAME_V6 532 -#define VAR_TLS_SESSION_TICKET_KEYS 533 -#define VAR_RPZ 534 -#define VAR_TAGS 535 -#define VAR_RPZ_ACTION_OVERRIDE 536 -#define VAR_RPZ_CNAME_OVERRIDE 537 -#define VAR_RPZ_LOG 538 -#define VAR_RPZ_LOG_NAME 539 +#define VAR_IP_DSCP 431 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 +#define VAR_IP_RATELIMIT 433 +#define VAR_IP_RATELIMIT_SLABS 434 +#define VAR_IP_RATELIMIT_SIZE 435 +#define VAR_RATELIMIT 436 +#define VAR_RATELIMIT_SLABS 437 +#define VAR_RATELIMIT_SIZE 438 +#define VAR_RATELIMIT_FOR_DOMAIN 439 +#define VAR_RATELIMIT_BELOW_DOMAIN 440 +#define VAR_IP_RATELIMIT_FACTOR 441 +#define VAR_RATELIMIT_FACTOR 442 +#define VAR_SEND_CLIENT_SUBNET 443 +#define VAR_CLIENT_SUBNET_ZONE 444 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 +#define VAR_CLIENT_SUBNET_OPCODE 446 +#define VAR_MAX_CLIENT_SUBNET_IPV4 447 +#define VAR_MAX_CLIENT_SUBNET_IPV6 448 +#define VAR_MIN_CLIENT_SUBNET_IPV4 449 +#define VAR_MIN_CLIENT_SUBNET_IPV6 450 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 +#define VAR_CAPS_WHITELIST 453 +#define VAR_CACHE_MAX_NEGATIVE_TTL 454 +#define VAR_PERMIT_SMALL_HOLDDOWN 455 +#define VAR_QNAME_MINIMISATION 456 +#define VAR_QNAME_MINIMISATION_STRICT 457 +#define VAR_IP_FREEBIND 458 +#define VAR_DEFINE_TAG 459 +#define VAR_LOCAL_ZONE_TAG 460 +#define VAR_ACCESS_CONTROL_TAG 461 +#define VAR_LOCAL_ZONE_OVERRIDE 462 +#define VAR_ACCESS_CONTROL_TAG_ACTION 463 +#define VAR_ACCESS_CONTROL_TAG_DATA 464 +#define VAR_VIEW 465 +#define VAR_ACCESS_CONTROL_VIEW 466 +#define VAR_VIEW_FIRST 467 +#define VAR_SERVE_EXPIRED 468 +#define VAR_SERVE_EXPIRED_TTL 469 +#define VAR_SERVE_EXPIRED_TTL_RESET 470 +#define VAR_SERVE_EXPIRED_REPLY_TTL 471 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 +#define VAR_FAKE_DSA 473 +#define VAR_FAKE_SHA1 474 +#define VAR_LOG_IDENTITY 475 +#define VAR_HIDE_TRUSTANCHOR 476 +#define VAR_TRUST_ANCHOR_SIGNALING 477 +#define VAR_AGGRESSIVE_NSEC 478 +#define VAR_USE_SYSTEMD 479 +#define VAR_SHM_ENABLE 480 +#define VAR_SHM_KEY 481 +#define VAR_ROOT_KEY_SENTINEL 482 +#define VAR_DNSCRYPT 483 +#define VAR_DNSCRYPT_ENABLE 484 +#define VAR_DNSCRYPT_PORT 485 +#define VAR_DNSCRYPT_PROVIDER 486 +#define VAR_DNSCRYPT_SECRET_KEY 487 +#define VAR_DNSCRYPT_PROVIDER_CERT 488 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 +#define VAR_IPSECMOD_ENABLED 494 +#define VAR_IPSECMOD_HOOK 495 +#define VAR_IPSECMOD_IGNORE_BOGUS 496 +#define VAR_IPSECMOD_MAX_TTL 497 +#define VAR_IPSECMOD_WHITELIST 498 +#define VAR_IPSECMOD_STRICT 499 +#define VAR_CACHEDB 500 +#define VAR_CACHEDB_BACKEND 501 +#define VAR_CACHEDB_SECRETSEED 502 +#define VAR_CACHEDB_REDISHOST 503 +#define VAR_CACHEDB_REDISPORT 504 +#define VAR_CACHEDB_REDISTIMEOUT 505 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 +#define VAR_FOR_UPSTREAM 507 +#define VAR_AUTH_ZONE 508 +#define VAR_ZONEFILE 509 +#define VAR_MASTER 510 +#define VAR_URL 511 +#define VAR_FOR_DOWNSTREAM 512 +#define VAR_FALLBACK_ENABLED 513 +#define VAR_TLS_ADDITIONAL_PORT 514 +#define VAR_LOW_RTT 515 +#define VAR_LOW_RTT_PERMIL 516 +#define VAR_FAST_SERVER_PERMIL 517 +#define VAR_FAST_SERVER_NUM 518 +#define VAR_ALLOW_NOTIFY 519 +#define VAR_TLS_WIN_CERT 520 +#define VAR_TCP_CONNECTION_LIMIT 521 +#define VAR_FORWARD_NO_CACHE 522 +#define VAR_STUB_NO_CACHE 523 +#define VAR_LOG_SERVFAIL 524 +#define VAR_DENY_ANY 525 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 +#define VAR_LOG_TAG_QUERYREPLY 527 +#define VAR_STREAM_WAIT_SIZE 528 +#define VAR_TLS_CIPHERS 529 +#define VAR_TLS_CIPHERSUITES 530 +#define VAR_IPSET 531 +#define VAR_IPSET_NAME_V4 532 +#define VAR_IPSET_NAME_V6 533 +#define VAR_TLS_SESSION_TICKET_KEYS 534 +#define VAR_RPZ 535 +#define VAR_TAGS 536 +#define VAR_RPZ_ACTION_OVERRIDE 537 +#define VAR_RPZ_CNAME_OVERRIDE 538 +#define VAR_RPZ_LOG 539 +#define VAR_RPZ_LOG_NAME 540 -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE -{ -#line 66 "./util/configparser.y" - char* str; -#line 714 "util/configparser.c" -}; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 +/* Copy the first part of user declarations. */ +#line 38 "./util/configparser.y" + +#include "config.h" + +#include +#include +#include +#include +#include + +#include "util/configyyrename.h" +#include "util/config_file.h" +#include "util/net_help.h" + +int ub_c_lex(void); +void ub_c_error(const char *message); + +static void validate_respip_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 -extern YYSTYPE yylval; -int yyparse (void); +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif -#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 66 "./util/configparser.y" +{ + char* str; +} +/* Line 193 of yacc.c. */ +#line 699 "util/configparser.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 712 "util/configparser.c" + #ifdef short # undef short #endif @@ -739,20 +722,23 @@ typedef unsigned char yytype_uint8; #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#else +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; +#else +typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else -typedef unsigned short yytype_uint16; +typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else -typedef short yytype_int16; +typedef short int yytype_int16; #endif #ifndef YYSIZE_T @@ -760,11 +746,12 @@ typedef short yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned +# define YYSIZE_T unsigned int # endif #endif @@ -774,60 +761,38 @@ typedef short yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ -# define YY_(Msgid) Msgid +# define YY_(msgid) msgid # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) +# define YYUSE(e) ((void) (e)) #else -# define YYUSE(E) /* empty */ +# define YYUSE(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") +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) #else -# define YY_INITIAL_VALUE(Value) Value +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; #endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END +{ + return i; +} #endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - - -#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -846,11 +811,11 @@ typedef short yytype_int16; # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # endif @@ -858,8 +823,8 @@ typedef short yytype_int16; # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (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 @@ -873,23 +838,25 @@ typedef short yytype_int16; # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ +# if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -899,14 +866,14 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; -}; + yytype_int16 yyss; + YYSTYPE yyvs; + }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -917,70 +884,64 @@ union yyalloc ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -# define YYCOPY_NEEDED 1 +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif /* 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 \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (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, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_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 604 +#define YYLAST 606 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 285 +#define YYNTOKENS 286 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 308 +#define YYNNTS 309 /* YYNRULES -- Number of rules. */ -#define YYNRULES 594 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 884 +#define YYNRULES 596 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 887 +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 539 +#define YYMAXUTOK 540 -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1036,77 +997,299 @@ static const yytype_uint16 yytranslate[] = 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 + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285 }; #if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 4, 7, 10, 13, 16, 19, 22, + 25, 28, 31, 34, 37, 40, 43, 45, 48, 49, + 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, + 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, + 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, + 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, + 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, + 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, + 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, + 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, + 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, + 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, + 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, + 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, + 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, + 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, + 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, + 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, + 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, + 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, + 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, + 431, 433, 435, 437, 440, 441, 443, 445, 447, 449, + 451, 453, 455, 457, 460, 461, 463, 465, 467, 469, + 471, 473, 475, 478, 479, 481, 483, 485, 487, 489, + 491, 493, 495, 498, 499, 501, 503, 505, 507, 509, + 511, 513, 515, 518, 521, 524, 527, 530, 532, 535, + 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, + 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, + 586, 589, 592, 595, 598, 601, 604, 607, 610, 613, + 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, + 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, + 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, + 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, + 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, + 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, + 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, + 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, + 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, + 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, + 916, 920, 923, 926, 929, 932, 935, 938, 941, 944, + 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, + 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, + 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, + 1038, 1042, 1046, 1051, 1056, 1061, 1065, 1069, 1072, 1075, + 1078, 1081, 1084, 1087, 1091, 1095, 1098, 1101, 1104, 1107, + 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, + 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, + 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, + 1200, 1204, 1208, 1212, 1215, 1218, 1221, 1223, 1226, 1227, + 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1246, 1249, + 1252, 1255, 1258, 1261, 1264, 1267, 1269, 1272, 1273, 1275, + 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, + 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1312, 1315, 1318, + 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, + 1351, 1354, 1357, 1360, 1363, 1365, 1368, 1369, 1371, 1374, + 1377, 1380, 1384, 1388, 1390, 1393, 1394, 1396, 1398, 1400, + 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1417, 1420, 1423, + 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1446, 1449, 1450, + 1452, 1454, 1456, 1458, 1460, 1463, 1466, 1469, 1472, 1475, + 1479, 1481, 1484, 1485, 1487, 1489, 1492 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 287, 0, -1, -1, 287, 288, -1, 289, 290, -1, + 292, 293, -1, 295, 296, -1, 560, 561, -1, 528, + 529, -1, 539, 540, -1, 298, 299, -1, 568, 569, + -1, 581, 582, -1, 590, 591, -1, 301, 302, -1, + 309, 310, -1, 11, -1, 290, 291, -1, -1, 312, + -1, 313, -1, 319, -1, 332, -1, 338, -1, 339, + -1, 342, -1, 343, -1, 340, -1, 341, -1, 344, + -1, 345, -1, 346, -1, 347, -1, 348, -1, 330, + -1, 370, -1, 371, -1, 372, -1, 373, -1, 374, + -1, 399, -1, 400, -1, 401, -1, 406, -1, 407, + -1, 335, -1, 408, -1, 409, -1, 412, -1, 410, + -1, 411, -1, 414, -1, 415, -1, 416, -1, 430, + -1, 385, -1, 386, -1, 388, -1, 389, -1, 417, + -1, 433, -1, 379, -1, 381, -1, 434, -1, 440, + -1, 441, -1, 442, -1, 336, -1, 398, -1, 458, + -1, 459, -1, 380, -1, 453, -1, 363, -1, 331, + -1, 375, -1, 431, -1, 437, -1, 418, -1, 432, + -1, 461, -1, 462, -1, 337, -1, 314, -1, 362, + -1, 422, -1, 315, -1, 333, -1, 334, -1, 376, + -1, 377, -1, 460, -1, 420, -1, 424, -1, 425, + -1, 316, -1, 463, -1, 402, -1, 429, -1, 364, + -1, 384, -1, 435, -1, 436, -1, 439, -1, 452, + -1, 378, -1, 454, -1, 455, -1, 456, -1, 390, + -1, 397, -1, 426, -1, 427, -1, 391, -1, 419, + -1, 444, -1, 365, -1, 366, -1, 349, -1, 351, + -1, 369, -1, 352, -1, 353, -1, 354, -1, 464, + -1, 465, -1, 467, -1, 392, -1, 403, -1, 404, + -1, 405, -1, 468, -1, 469, -1, 470, -1, 413, + -1, 421, -1, 393, -1, 479, -1, 480, -1, 395, + -1, 483, -1, 484, -1, 481, -1, 482, -1, 485, + -1, 486, -1, 488, -1, 487, -1, 320, -1, 321, + -1, 322, -1, 323, -1, 324, -1, 325, -1, 326, + -1, 327, -1, 328, -1, 329, -1, 423, -1, 438, + -1, 457, -1, 492, -1, 394, -1, 471, -1, 472, + -1, 564, -1, 473, -1, 476, -1, 474, -1, 475, + -1, 477, -1, 493, -1, 445, -1, 446, -1, 447, + -1, 448, -1, 449, -1, 450, -1, 565, -1, 361, + -1, 478, -1, 566, -1, 567, -1, 317, -1, 318, + -1, 451, -1, 387, -1, 382, -1, 383, -1, 494, + -1, 496, -1, 495, -1, 497, -1, 498, -1, 499, + -1, 350, -1, 443, -1, 355, -1, 357, -1, 489, + -1, 491, -1, 490, -1, 356, -1, 589, -1, 368, + -1, 428, -1, 466, -1, 367, -1, 396, -1, 358, + -1, 359, -1, 360, -1, 45, -1, 293, 294, -1, + -1, 500, -1, 501, -1, 502, -1, 506, -1, 503, + -1, 504, -1, 505, -1, 51, -1, 296, 297, -1, + -1, 507, -1, 508, -1, 509, -1, 510, -1, 511, + -1, 512, -1, 210, -1, 299, 300, -1, -1, 521, + -1, 522, -1, 525, -1, 527, -1, 523, -1, 524, + -1, 526, -1, 253, -1, 302, 303, -1, -1, 513, + -1, 514, -1, 515, -1, 516, -1, 518, -1, 519, + -1, 520, -1, 517, -1, 281, 10, -1, 282, 10, + -1, 283, 10, -1, 284, 10, -1, 285, 10, -1, + 280, -1, 310, 311, -1, -1, 513, -1, 514, -1, + 304, -1, 515, -1, 516, -1, 517, -1, 305, -1, + 306, -1, 307, -1, 308, -1, 13, 10, -1, 12, + 10, -1, 83, 10, -1, 86, 10, -1, 104, 10, + -1, 225, 10, -1, 226, 10, -1, 14, 10, -1, + 188, 10, -1, 189, 10, -1, 190, 10, -1, 191, + 10, -1, 192, 10, -1, 193, 10, -1, 194, 10, + -1, 195, 10, -1, 196, 10, -1, 197, 10, -1, + 16, 10, -1, 74, 10, -1, 15, 10, -1, 87, + 10, -1, 88, 10, -1, 38, 10, -1, 67, 10, + -1, 82, 10, -1, 18, 10, -1, 19, 10, -1, + 21, 10, -1, 22, 10, -1, 17, 10, -1, 20, + 10, -1, 23, 10, -1, 24, 10, -1, 25, 10, + -1, 26, 10, -1, 27, 10, -1, 132, 10, -1, + 251, 10, -1, 133, 10, -1, 134, 10, -1, 135, + 10, -1, 136, 10, -1, 140, 10, -1, 265, 10, + -1, 259, 10, -1, 274, 10, -1, 275, 10, -1, + 279, 10, -1, 224, 10, -1, 84, 10, -1, 73, + 10, -1, 109, 10, -1, 129, 10, -1, 130, 10, + -1, 272, 10, -1, 269, 10, -1, 131, 10, -1, + 28, 10, -1, 29, 10, -1, 30, 10, -1, 31, + 10, -1, 32, 10, -1, 75, 10, -1, 89, 10, + -1, 90, 10, -1, 117, 10, -1, 61, 10, -1, + 71, 10, -1, 62, 10, -1, 222, 10, -1, 227, + 10, -1, 110, 10, -1, 55, 10, -1, 56, 10, + -1, 221, 10, -1, 57, 10, -1, 58, 10, -1, + 121, 10, -1, 125, 10, -1, 126, 10, -1, 175, + 10, -1, 203, 10, -1, 176, 10, -1, 273, 10, + -1, 122, 10, -1, 68, 10, -1, 33, 10, -1, + 34, 10, -1, 35, 10, -1, 106, 10, -1, 145, + 10, -1, 146, 10, -1, 147, 10, -1, 36, 10, + -1, 37, 10, -1, 39, 10, -1, 40, 10, -1, + 42, 10, -1, 43, 10, -1, 41, 10, -1, 148, + 10, -1, 48, 10, -1, 49, 10, -1, 50, 10, + -1, 59, 10, -1, 78, 10, -1, 127, 10, -1, + 92, 10, -1, 174, 10, -1, 85, 10, -1, 198, + 10, -1, 93, 10, -1, 94, 10, -1, 123, 10, + -1, 124, 10, -1, 270, 10, -1, 108, 10, -1, + 54, 10, -1, 76, 10, -1, 79, 10, 10, -1, + 60, 10, -1, 63, 10, -1, 113, 10, -1, 114, + 10, -1, 77, 10, -1, 199, 10, -1, 115, 10, + -1, 64, 10, -1, 65, 10, -1, 66, 10, -1, + 223, 10, -1, 128, 10, -1, 213, 10, -1, 214, + 10, -1, 215, 10, -1, 216, 10, -1, 217, 10, + -1, 218, 10, -1, 219, 10, -1, 116, 10, -1, + 72, 10, -1, 119, 10, -1, 120, 10, -1, 118, + 10, -1, 200, 10, -1, 69, 10, -1, 70, 10, + -1, 91, 10, -1, 80, 10, 10, -1, 81, 10, + -1, 105, 10, -1, 142, 10, -1, 143, 10, -1, + 271, 10, -1, 144, 10, -1, 149, 10, -1, 150, + 10, -1, 151, 10, -1, 204, 10, -1, 205, 10, + 10, -1, 206, 10, 10, -1, 208, 10, 10, 10, + -1, 209, 10, 10, 10, -1, 207, 10, 10, 10, + -1, 211, 10, 10, -1, 171, 10, 10, -1, 178, + 10, -1, 181, 10, -1, 180, 10, -1, 183, 10, + -1, 179, 10, -1, 182, 10, -1, 184, 10, 10, + -1, 185, 10, 10, -1, 186, 10, -1, 187, 10, + -1, 260, 10, -1, 263, 10, -1, 262, 10, -1, + 201, 10, -1, 202, 10, -1, 239, 10, -1, 241, + 10, -1, 240, 10, -1, 242, 10, -1, 243, 10, + -1, 244, 10, -1, 44, 10, -1, 46, 10, -1, + 47, 10, -1, 141, 10, -1, 268, 10, -1, 138, + 10, -1, 107, 10, -1, 44, 10, -1, 52, 10, + -1, 53, 10, -1, 137, 10, -1, 267, 10, -1, + 139, 10, -1, 44, 10, -1, 254, 10, -1, 255, + 10, -1, 256, 10, -1, 264, 10, -1, 257, 10, + -1, 252, 10, -1, 258, 10, -1, 44, 10, -1, + 80, 10, 10, -1, 172, 10, 10, -1, 173, 10, + 10, -1, 81, 10, -1, 105, 10, -1, 212, 10, + -1, 95, -1, 529, 530, -1, -1, 531, -1, 533, + -1, 532, -1, 535, -1, 536, -1, 537, -1, 538, + -1, 534, -1, 96, 10, -1, 98, 10, -1, 97, + 10, -1, 103, 10, -1, 99, 10, -1, 100, 10, + -1, 101, 10, -1, 102, 10, -1, 152, -1, 540, + 541, -1, -1, 542, -1, 543, -1, 544, -1, 545, + -1, 546, -1, 547, -1, 548, -1, 549, -1, 550, + -1, 551, -1, 552, -1, 553, -1, 554, -1, 555, + -1, 556, -1, 557, -1, 558, -1, 559, -1, 153, + 10, -1, 154, 10, -1, 155, 10, -1, 156, 10, + -1, 157, 10, -1, 158, 10, -1, 159, 10, -1, + 160, 10, -1, 161, 10, -1, 162, 10, -1, 163, + 10, -1, 164, 10, -1, 165, 10, -1, 166, 10, + -1, 167, 10, -1, 168, 10, -1, 169, 10, -1, + 170, 10, -1, 111, -1, 561, 562, -1, -1, 563, + -1, 112, 10, -1, 177, 10, -1, 220, 10, -1, + 172, 10, 10, -1, 173, 10, 10, -1, 228, -1, + 569, 570, -1, -1, 571, -1, 572, -1, 573, -1, + 576, -1, 574, -1, 575, -1, 577, -1, 578, -1, + 579, -1, 580, -1, 229, 10, -1, 230, 10, -1, + 231, 10, -1, 233, 10, -1, 234, 10, -1, 232, + 10, -1, 235, 10, -1, 236, 10, -1, 237, 10, + -1, 238, 10, -1, 245, -1, 582, 583, -1, -1, + 584, -1, 585, -1, 586, -1, 587, -1, 588, -1, + 246, 10, -1, 247, 10, -1, 248, 10, -1, 249, + 10, -1, 250, 10, -1, 266, 10, 10, -1, 276, + -1, 591, 592, -1, -1, 593, -1, 594, -1, 277, + 10, -1, 278, 10, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 177, 177, 177, 178, 178, 179, 179, 180, 180, - 180, 181, 181, 182, 182, 183, 187, 192, 193, 194, - 194, 194, 195, 195, 196, 196, 196, 197, 197, 198, - 198, 198, 199, 199, 200, 200, 200, 201, 201, 201, - 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, - 207, 207, 208, 208, 209, 209, 210, 210, 210, 211, - 211, 211, 212, 212, 212, 213, 213, 214, 214, 215, - 215, 216, 216, 217, 217, 217, 218, 218, 219, 219, - 220, 220, 220, 221, 221, 222, 222, 223, 223, 224, - 224, 224, 225, 225, 226, 226, 227, 227, 228, 228, - 229, 229, 230, 230, 230, 231, 231, 232, 232, 232, - 233, 233, 233, 234, 234, 234, 235, 235, 235, 235, - 236, 237, 237, 237, 238, 238, 238, 239, 239, 240, - 240, 241, 241, 241, 242, 242, 243, 243, 243, 244, - 244, 245, 245, 246, 247, 247, 248, 248, 249, 249, - 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, - 255, 256, 256, 256, 257, 257, 258, 258, 259, 259, - 260, 260, 261, 261, 262, 262, 263, 263, 263, 264, - 264, 264, 265, 265, 265, 266, 266, 267, 268, 268, - 269, 269, 270, 270, 271, 271, 272, 272, 272, 273, - 273, 273, 274, 274, 274, 275, 275, 276, 276, 277, - 277, 279, 291, 292, 293, 293, 293, 293, 293, 294, - 294, 296, 308, 309, 310, 310, 310, 310, 311, 311, - 313, 327, 328, 329, 329, 329, 329, 330, 330, 330, - 332, 349, 350, 351, 351, 351, 351, 352, 352, 352, - 353, 356, 375, 392, 400, 410, 418, 435, 436, 437, - 437, 437, 437, 437, 438, 438, 438, 439, 439, 441, - 450, 459, 470, 479, 488, 497, 508, 517, 529, 543, - 558, 569, 586, 603, 620, 637, 652, 667, 680, 695, - 704, 713, 722, 731, 740, 749, 758, 767, 776, 785, - 794, 803, 812, 821, 834, 843, 856, 865, 874, 883, - 890, 897, 906, 913, 922, 930, 937, 944, 952, 961, - 970, 984, 993, 1002, 1011, 1020, 1029, 1038, 1045, 1052, - 1078, 1086, 1093, 1100, 1107, 1114, 1122, 1130, 1138, 1145, - 1156, 1167, 1174, 1183, 1192, 1201, 1208, 1215, 1223, 1231, - 1241, 1251, 1261, 1269, 1282, 1293, 1301, 1314, 1323, 1332, - 1341, 1351, 1361, 1369, 1382, 1391, 1399, 1408, 1416, 1429, - 1438, 1445, 1455, 1465, 1475, 1485, 1495, 1505, 1515, 1525, - 1532, 1539, 1546, 1555, 1564, 1573, 1582, 1589, 1599, 1619, - 1626, 1644, 1657, 1670, 1679, 1688, 1697, 1706, 1716, 1726, - 1737, 1746, 1755, 1764, 1773, 1782, 1791, 1804, 1817, 1826, - 1833, 1842, 1851, 1860, 1869, 1877, 1890, 1898, 1939, 1946, - 1961, 1971, 1981, 1988, 1995, 2002, 2011, 2019, 2033, 2054, - 2075, 2087, 2099, 2111, 2120, 2141, 2151, 2160, 2168, 2176, - 2189, 2202, 2217, 2232, 2241, 2250, 2256, 2265, 2274, 2284, - 2294, 2307, 2320, 2332, 2346, 2358, 2372, 2382, 2389, 2396, - 2405, 2414, 2424, 2434, 2444, 2451, 2458, 2467, 2476, 2486, - 2496, 2503, 2510, 2517, 2525, 2535, 2545, 2555, 2565, 2604, - 2614, 2622, 2630, 2645, 2654, 2659, 2660, 2661, 2661, 2661, - 2662, 2662, 2662, 2663, 2663, 2665, 2675, 2684, 2691, 2698, - 2705, 2712, 2719, 2726, 2731, 2732, 2733, 2733, 2734, 2734, - 2734, 2735, 2736, 2736, 2737, 2737, 2738, 2738, 2739, 2740, - 2741, 2742, 2743, 2744, 2746, 2755, 2762, 2769, 2778, 2785, - 2792, 2799, 2806, 2815, 2824, 2831, 2838, 2848, 2858, 2868, - 2878, 2888, 2898, 2903, 2904, 2905, 2907, 2913, 2923, 2930, - 2939, 2947, 2952, 2953, 2955, 2955, 2955, 2956, 2956, 2957, - 2958, 2959, 2960, 2961, 2963, 2973, 2982, 2989, 2998, 3005, - 3014, 3022, 3035, 3043, 3056, 3061, 3062, 3063, 3063, 3064, - 3064, 3064, 3066, 3078, 3090, 3102, 3117, 3130, 3141, 3146, - 3147, 3148, 3148, 3150, 3165 + 0, 178, 178, 178, 179, 179, 180, 180, 181, 181, + 181, 182, 182, 183, 183, 184, 188, 193, 194, 195, + 195, 195, 196, 196, 197, 197, 197, 198, 198, 199, + 199, 199, 200, 200, 201, 201, 201, 202, 202, 202, + 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, + 208, 208, 209, 209, 210, 210, 211, 211, 211, 212, + 212, 212, 213, 213, 213, 214, 214, 215, 215, 216, + 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, + 221, 221, 221, 222, 222, 223, 223, 224, 224, 225, + 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, + 230, 230, 231, 231, 231, 232, 232, 233, 233, 233, + 234, 234, 234, 235, 235, 235, 236, 236, 236, 236, + 237, 238, 238, 238, 239, 239, 239, 240, 240, 241, + 241, 242, 242, 242, 243, 243, 244, 244, 244, 245, + 246, 246, 247, 247, 248, 249, 249, 250, 250, 251, + 251, 252, 253, 253, 254, 254, 255, 255, 256, 256, + 257, 257, 258, 258, 258, 259, 259, 260, 260, 261, + 261, 262, 262, 263, 263, 264, 264, 265, 265, 265, + 266, 266, 266, 267, 267, 267, 268, 268, 269, 270, + 270, 271, 271, 272, 272, 273, 273, 274, 274, 274, + 275, 275, 275, 276, 276, 276, 277, 277, 278, 278, + 279, 279, 281, 293, 294, 295, 295, 295, 295, 295, + 296, 296, 298, 310, 311, 312, 312, 312, 312, 313, + 313, 315, 329, 330, 331, 331, 331, 331, 332, 332, + 332, 334, 351, 352, 353, 353, 353, 353, 354, 354, + 354, 355, 358, 377, 394, 402, 412, 420, 437, 438, + 439, 439, 439, 439, 439, 440, 440, 440, 441, 441, + 443, 452, 461, 472, 481, 490, 499, 510, 519, 531, + 545, 560, 571, 588, 605, 622, 639, 654, 669, 682, + 697, 706, 715, 724, 733, 742, 751, 760, 769, 778, + 787, 796, 805, 814, 823, 836, 845, 858, 867, 876, + 885, 892, 899, 908, 915, 924, 932, 939, 946, 954, + 963, 972, 986, 995, 1004, 1013, 1022, 1031, 1040, 1047, + 1054, 1080, 1088, 1095, 1102, 1109, 1116, 1124, 1132, 1140, + 1147, 1158, 1169, 1176, 1185, 1194, 1203, 1210, 1217, 1225, + 1233, 1243, 1253, 1263, 1277, 1285, 1298, 1309, 1317, 1330, + 1339, 1348, 1357, 1367, 1377, 1385, 1398, 1407, 1415, 1424, + 1432, 1445, 1454, 1461, 1471, 1481, 1491, 1501, 1511, 1521, + 1531, 1541, 1548, 1555, 1562, 1571, 1580, 1589, 1598, 1605, + 1615, 1635, 1642, 1660, 1673, 1686, 1695, 1704, 1713, 1722, + 1732, 1742, 1753, 1762, 1771, 1780, 1789, 1798, 1807, 1820, + 1833, 1842, 1849, 1858, 1867, 1876, 1885, 1893, 1906, 1914, + 1955, 1962, 1977, 1987, 1997, 2004, 2011, 2018, 2027, 2035, + 2049, 2070, 2091, 2103, 2115, 2127, 2136, 2157, 2167, 2176, + 2184, 2192, 2205, 2218, 2233, 2248, 2257, 2266, 2272, 2281, + 2290, 2300, 2310, 2323, 2336, 2348, 2362, 2374, 2388, 2398, + 2405, 2412, 2421, 2430, 2440, 2450, 2460, 2467, 2474, 2483, + 2492, 2502, 2512, 2519, 2526, 2533, 2541, 2551, 2561, 2571, + 2581, 2620, 2630, 2638, 2646, 2661, 2670, 2675, 2676, 2677, + 2677, 2677, 2678, 2678, 2678, 2679, 2679, 2681, 2691, 2700, + 2707, 2714, 2721, 2728, 2735, 2742, 2747, 2748, 2749, 2749, + 2750, 2750, 2750, 2751, 2752, 2752, 2753, 2753, 2754, 2754, + 2755, 2756, 2757, 2758, 2759, 2760, 2762, 2771, 2778, 2785, + 2794, 2801, 2808, 2815, 2822, 2831, 2840, 2847, 2854, 2864, + 2874, 2884, 2894, 2904, 2914, 2919, 2920, 2921, 2923, 2929, + 2939, 2946, 2955, 2963, 2968, 2969, 2971, 2971, 2971, 2972, + 2972, 2973, 2974, 2975, 2976, 2977, 2979, 2989, 2998, 3005, + 3014, 3021, 3030, 3038, 3051, 3059, 3072, 3077, 3078, 3079, + 3079, 3080, 3080, 3080, 3082, 3094, 3106, 3118, 3133, 3146, + 3157, 3162, 3163, 3164, 3164, 3166, 3181 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -1172,7 +1355,7 @@ static const char *const yytname[] = "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_DISABLE_DNSSEC_LAME_CHECK", + "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_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", @@ -1256,34 +1439,35 @@ static const char *const yytname[] = "server_domain_insecure", "server_hide_identity", "server_hide_version", "server_hide_trustanchor", "server_identity", "server_version", "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", - "server_ip_transparent", "server_ip_freebind", "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_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_target_fetch_policy", - "server_harden_short_bufsize", "server_harden_large_queries", - "server_harden_glue", "server_harden_dnssec_stripped", - "server_harden_below_nxdomain", "server_harden_referral_path", - "server_harden_algo_downgrade", "server_use_caps_for_id", - "server_caps_whitelist", "server_private_address", - "server_private_domain", "server_prefetch", "server_prefetch_key", - "server_deny_any", "server_unwanted_reply_threshold", - "server_do_not_query_address", "server_do_not_query_localhost", - "server_access_control", "server_module_conf", - "server_val_override_date", "server_val_sig_skew_min", - "server_val_sig_skew_max", "server_cache_max_ttl", - "server_cache_max_negative_ttl", "server_cache_min_ttl", - "server_bogus_ttl", "server_val_clean_additional", - "server_val_permissive_mode", "server_aggressive_nsec", - "server_ignore_cd_flag", "server_serve_expired", - "server_serve_expired_ttl", "server_serve_expired_ttl_reset", - "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout", - "server_fake_dsa", "server_fake_sha1", "server_val_log_level", + "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_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_target_fetch_policy", "server_harden_short_bufsize", + "server_harden_large_queries", "server_harden_glue", + "server_harden_dnssec_stripped", "server_harden_below_nxdomain", + "server_harden_referral_path", "server_harden_algo_downgrade", + "server_use_caps_for_id", "server_caps_whitelist", + "server_private_address", "server_private_domain", "server_prefetch", + "server_prefetch_key", "server_deny_any", + "server_unwanted_reply_threshold", "server_do_not_query_address", + "server_do_not_query_localhost", "server_access_control", + "server_module_conf", "server_val_override_date", + "server_val_sig_skew_min", "server_val_sig_skew_max", + "server_cache_max_ttl", "server_cache_max_negative_ttl", + "server_cache_min_ttl", "server_bogus_ttl", + "server_val_clean_additional", "server_val_permissive_mode", + "server_aggressive_nsec", "server_ignore_cd_flag", + "server_serve_expired", "server_serve_expired_ttl", + "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", + "server_serve_expired_client_timeout", "server_fake_dsa", + "server_fake_sha1", "server_val_log_level", "server_val_nsec3_keysize_iterations", "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", @@ -1340,13 +1524,13 @@ static const char *const yytname[] = "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", "redis_server_port", "redis_timeout", "server_tcp_connection_limit", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", - "ipset_name_v6", YY_NULLPTR + "ipset_name_v6", 0 }; #endif # ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@ -1377,541 +1561,40 @@ static const yytype_uint16 yytoknum[] = 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 + 535, 536, 537, 538, 539, 540 }; # endif -#define YYPACT_NINF -269 - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-269))) - -#define YYTABLE_NINF -1 - -#define yytable_value_is_error(Yytable_value) \ - 0 - - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - -269, 0, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 268, -42, - -37, -41, -21, -43, -44, -87, -106, -204, -228, -268, - 2, 3, 4, 12, 24, 25, 26, 27, 28, 31, - 32, 33, 34, 36, 37, 38, 39, 40, 50, 51, - 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 87, 88, 91, 93, 94, 95, 96, - 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 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, 203, 204, 205, - 206, 207, 208, 209, 211, 212, 213, 214, 216, 218, - 221, 233, 235, 236, 237, 238, 239, 240, 241, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 266, 267, 302, 303, 304, 305, 309, 310, 311, - 353, 354, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 355, 356, 357, 358, 359, - 360, 361, -269, -269, -269, -269, -269, -269, -269, -269, - 365, 369, 370, 395, 396, 397, -269, -269, -269, -269, - -269, -269, -269, 399, 410, 411, 412, 413, 414, 415, - -269, -269, -269, -269, -269, -269, -269, -269, 416, 417, - 418, 419, 420, 421, 422, 423, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 424, 425, 426, 427, 428, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, 467, 469, 485, 486, 487, 488, 489, 490, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 491, 492, - 493, 494, 495, 502, 503, 504, 505, 506, 507, 509, - 510, 511, 512, 513, 514, 515, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 518, -269, -269, 521, 524, - 525, 533, 534, 535, 537, 538, 539, 540, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, 541, - 542, 543, 544, 545, -269, -269, -269, -269, -269, -269, - 546, 547, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 548, 549, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, 550, 551, 552, -269, -269, -269, -269, -269, - -269, -269, -269, -269, 553, 554, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 555, 556, 557, 558, 559, - 560, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 561, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, 562, -269, -269, 563, 564, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, 565, 566, 567, -269, -269, -269, -269, - -269, -269, -269, -269 -}; - - /* 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_uint16 yydefact[] = -{ - 2, 0, 1, 16, 211, 221, 484, 542, 503, 230, - 551, 574, 240, 588, 256, 3, 18, 213, 223, 232, - 242, 258, 486, 505, 544, 553, 576, 590, 4, 5, - 6, 10, 14, 15, 8, 9, 7, 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, 17, 19, 20, 83, 86, 95, 182, 183, - 21, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 34, 74, 22, 87, 88, 45, 67, 82, 23, - 24, 27, 28, 25, 26, 29, 30, 31, 32, 33, - 118, 194, 119, 121, 122, 123, 196, 201, 197, 208, - 209, 210, 178, 84, 73, 99, 116, 117, 206, 203, - 120, 35, 36, 37, 38, 39, 75, 89, 90, 105, - 61, 71, 62, 186, 187, 100, 55, 56, 185, 57, - 58, 109, 113, 127, 136, 161, 207, 110, 68, 40, - 41, 42, 97, 128, 129, 130, 43, 44, 46, 47, - 49, 50, 48, 134, 51, 52, 53, 59, 78, 114, - 92, 135, 85, 157, 93, 94, 111, 112, 204, 98, - 54, 76, 79, 60, 63, 101, 102, 77, 158, 103, - 64, 65, 66, 195, 115, 171, 172, 173, 174, 175, - 176, 184, 104, 72, 106, 107, 108, 159, 69, 70, - 91, 80, 81, 96, 124, 125, 205, 126, 131, 132, - 133, 162, 163, 165, 167, 168, 166, 169, 179, 137, - 138, 141, 142, 139, 140, 143, 144, 146, 145, 198, - 200, 199, 160, 170, 188, 190, 189, 191, 192, 193, - 164, 177, 180, 181, 202, 0, 0, 0, 0, 0, - 0, 0, 212, 214, 215, 216, 218, 219, 220, 217, - 0, 0, 0, 0, 0, 0, 222, 224, 225, 226, - 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, - 231, 233, 234, 237, 238, 235, 239, 236, 0, 0, - 0, 0, 0, 0, 0, 0, 241, 243, 244, 245, - 246, 250, 247, 248, 249, 0, 0, 0, 0, 0, - 261, 265, 266, 267, 268, 257, 259, 260, 262, 263, - 264, 0, 0, 0, 0, 0, 0, 0, 0, 485, - 487, 489, 488, 494, 490, 491, 492, 493, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 504, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 543, 545, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 552, 554, - 555, 556, 558, 559, 557, 560, 561, 562, 563, 0, - 0, 0, 0, 0, 575, 577, 578, 579, 580, 581, - 0, 0, 589, 591, 592, 270, 269, 276, 289, 287, - 299, 295, 296, 300, 297, 298, 301, 302, 303, 304, - 305, 327, 328, 329, 330, 331, 355, 356, 357, 362, - 363, 292, 364, 365, 368, 366, 367, 370, 371, 372, - 386, 342, 343, 345, 346, 373, 389, 336, 338, 390, - 396, 397, 398, 293, 354, 414, 415, 337, 409, 320, - 288, 332, 387, 393, 374, 0, 0, 418, 294, 271, - 319, 378, 272, 290, 291, 333, 334, 416, 376, 380, - 381, 273, 419, 358, 385, 321, 341, 391, 392, 395, - 408, 335, 412, 410, 411, 347, 353, 382, 383, 348, - 349, 375, 400, 322, 323, 326, 306, 308, 309, 310, - 311, 312, 420, 421, 423, 359, 360, 361, 369, 424, - 425, 426, 0, 0, 0, 377, 350, 547, 435, 439, - 437, 436, 440, 438, 0, 0, 443, 444, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 379, 394, - 413, 448, 449, 351, 427, 0, 0, 0, 0, 0, - 0, 401, 402, 403, 404, 405, 406, 407, 548, 344, - 339, 399, 318, 274, 275, 340, 450, 452, 451, 453, - 454, 455, 307, 314, 445, 447, 446, 313, 0, 325, - 384, 422, 324, 352, 315, 316, 317, 456, 457, 458, - 462, 461, 459, 460, 463, 464, 465, 466, 468, 467, - 477, 0, 481, 482, 0, 0, 483, 469, 475, 470, - 471, 472, 474, 476, 473, 251, 252, 253, 254, 255, - 495, 497, 496, 499, 500, 501, 502, 498, 524, 525, - 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 546, 564, 565, 566, - 569, 567, 568, 570, 571, 572, 573, 582, 583, 584, - 585, 586, 593, 594, 388, 417, 434, 549, 550, 441, - 442, 428, 429, 0, 0, 0, 433, 587, 478, 479, - 480, 432, 430, 431 -}; - - /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -23, 568, 569, 570, - 571, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269 -}; - - /* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 15, 16, 28, 232, 17, 29, 432, 18, - 30, 446, 19, 31, 460, 20, 32, 476, 490, 491, - 492, 493, 494, 21, 33, 495, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 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, 433, 434, 435, 436, 437, 438, 439, - 447, 448, 449, 450, 451, 452, 477, 478, 479, 480, - 481, 482, 483, 484, 461, 462, 463, 464, 465, 466, - 467, 22, 34, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 23, 35, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 554, 24, 36, 556, 557, 420, 421, 422, - 423, 25, 37, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 26, 38, 584, 585, 586, 587, - 588, 589, 424, 27, 39, 592, 593, 594 -}; - - /* 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_uint16 yytable[] = -{ - 2, 468, 425, 453, 426, 427, 555, 440, 590, 591, - 496, 3, 595, 596, 597, 441, 442, 579, 580, 581, - 582, 583, 598, 468, 558, 559, 560, 561, 562, 563, - 564, 565, 566, 567, 599, 600, 601, 602, 603, 454, - 455, 604, 605, 606, 607, 4, 608, 609, 610, 611, - 612, 5, 501, 502, 503, 504, 505, 506, 507, 508, - 613, 614, 615, 616, 456, 428, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 627, 6, 429, 628, 629, 430, - 443, 630, 444, 631, 632, 633, 634, 635, 636, 637, - 638, 7, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 657, 457, 458, 658, 659, 660, 661, 662, 663, 664, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 8, 677, 678, 679, 680, 681, 682, 683, - 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, - 459, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, - 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, - 723, 724, 725, 726, 727, 728, 729, 730, 731, 9, - 470, 471, 472, 732, 733, 734, 735, 736, 737, 738, - 475, 739, 740, 741, 742, 431, 743, 10, 744, 445, - 469, 745, 470, 471, 472, 473, 474, 485, 486, 487, - 488, 489, 475, 746, 11, 747, 748, 749, 750, 751, - 752, 753, 12, 754, 755, 756, 757, 758, 759, 760, - 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, - 771, 772, 773, 774, 775, 13, 776, 777, 0, 14, - 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, 778, 779, 780, 781, 72, 73, 74, 782, - 783, 784, 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, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 116, 117, 118, 794, 119, 120, 121, 795, - 796, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 797, 798, 799, 146, 800, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, - 811, 812, 813, 814, 815, 816, 817, 818, 819, 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, 820, 195, 821, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 822, 823, 824, 825, 826, - 827, 828, 829, 830, 831, 832, 211, 212, 213, 214, - 215, 216, 833, 834, 835, 836, 837, 838, 217, 839, - 840, 841, 842, 843, 844, 845, 218, 219, 846, 220, - 221, 847, 222, 223, 848, 849, 224, 225, 226, 227, - 228, 229, 230, 850, 851, 852, 231, 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, 883, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 497, 498, 499, 500 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 44, 44, 44, 46, 47, 112, 44, 276, 277, - 33, 11, 10, 10, 10, 52, 53, 245, 246, 247, - 248, 249, 10, 44, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 10, 10, 10, 10, 10, 80, - 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, - 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, - 10, 10, 10, 10, 105, 107, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, - 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, - 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 172, 173, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 152, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 211, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 209, - 253, 254, 255, 10, 10, 10, 10, 10, 10, 10, - 263, 10, 10, 10, 10, 267, 10, 227, 10, 266, - 251, 10, 253, 254, 255, 256, 257, 280, 281, 282, - 283, 284, 263, 10, 244, 10, 10, 10, 10, 10, - 10, 10, 252, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 275, 10, 10, -1, 279, - 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, 10, 10, 10, 10, 48, 49, 50, 10, - 10, 10, 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, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 104, 105, 106, 10, 108, 109, 110, 10, - 10, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 10, 10, 10, 140, 10, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 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, 10, 210, 10, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 238, 239, 240, 241, - 242, 243, 10, 10, 10, 10, 10, 10, 250, 10, - 10, 10, 10, 10, 10, 10, 258, 259, 10, 261, - 262, 10, 264, 265, 10, 10, 268, 269, 270, 271, - 272, 273, 274, 10, 10, 10, 278, 10, 10, 10, - 10, 10, 10, 10, 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, 33, 33, 33, 33 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = -{ - 0, 286, 0, 11, 45, 51, 95, 111, 152, 209, - 227, 244, 252, 275, 279, 287, 288, 291, 294, 297, - 300, 308, 526, 537, 558, 566, 579, 588, 289, 292, - 295, 298, 301, 309, 527, 538, 559, 567, 580, 589, - 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, 48, 49, 50, 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, 104, 105, 106, 108, - 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 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, 210, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 238, 239, 240, 241, 242, 243, 250, 258, 259, - 261, 262, 264, 265, 268, 269, 270, 271, 272, 273, - 274, 278, 290, 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, - 562, 563, 564, 565, 587, 44, 46, 47, 107, 138, - 141, 267, 293, 498, 499, 500, 501, 502, 503, 504, - 44, 52, 53, 137, 139, 266, 296, 505, 506, 507, - 508, 509, 510, 44, 80, 81, 105, 172, 173, 211, - 299, 519, 520, 521, 522, 523, 524, 525, 44, 251, - 253, 254, 255, 256, 257, 263, 302, 511, 512, 513, - 514, 515, 516, 517, 518, 280, 281, 282, 283, 284, - 303, 304, 305, 306, 307, 310, 511, 512, 513, 514, - 515, 96, 97, 98, 99, 100, 101, 102, 103, 528, - 529, 530, 531, 532, 533, 534, 535, 536, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 112, 560, 561, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 245, - 246, 247, 248, 249, 581, 582, 583, 584, 585, 586, - 276, 277, 590, 591, 592, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 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. */ +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 285, 286, 286, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 288, 289, 289, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 291, 292, 292, 293, 293, 293, 293, 293, 293, - 293, 294, 295, 295, 296, 296, 296, 296, 296, 296, - 297, 298, 298, 299, 299, 299, 299, 299, 299, 299, - 300, 301, 301, 302, 302, 302, 302, 302, 302, 302, - 302, 303, 304, 305, 306, 307, 308, 309, 309, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 311, + 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, + 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, + 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, + 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, + 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 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, @@ -1933,21 +1616,21 @@ static const yytype_uint16 yyr1[] = 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, 527, 528, 528, 528, - 528, 528, 528, 528, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 538, 539, 539, 539, 539, - 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 539, 539, 539, 540, 541, 542, 543, 544, 545, + 522, 523, 524, 525, 526, 527, 528, 529, 529, 530, + 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, + 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, + 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 559, 560, 561, 562, 563, 564, - 565, 566, 567, 567, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 580, 581, 581, 581, - 581, 581, 582, 583, 584, 585, 586, 587, 588, 589, - 589, 590, 590, 591, 592 + 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, + 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 591, 592, 592, 593, 594 }; - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, @@ -1971,82 +1654,630 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 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, 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, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, - 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, - 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 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, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 2, 2, 2, 3, - 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 3, 1, 2, - 0, 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, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 1, 2, 0, 1, 1, 2, 2 }; +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, + 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, + 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, + 6, 10, 14, 15, 8, 9, 7, 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, 17, 19, 20, 83, 86, 95, 183, + 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, + 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, + 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, + 209, 210, 211, 179, 84, 73, 99, 116, 117, 207, + 204, 120, 35, 36, 37, 38, 39, 75, 89, 90, + 105, 61, 71, 62, 187, 188, 100, 55, 56, 186, + 57, 58, 109, 113, 127, 136, 162, 139, 208, 110, + 68, 40, 41, 42, 97, 128, 129, 130, 43, 44, + 46, 47, 49, 50, 48, 134, 51, 52, 53, 59, + 78, 114, 92, 135, 85, 158, 93, 94, 111, 112, + 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, + 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, + 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, + 69, 70, 91, 80, 81, 96, 124, 125, 206, 126, + 131, 132, 133, 163, 164, 166, 168, 169, 167, 170, + 180, 137, 138, 142, 143, 140, 141, 144, 145, 147, + 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, + 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, + 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, + 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, + 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, + 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, + 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, + 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, + 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, + 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, + 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, + 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, + 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, + 304, 305, 306, 328, 329, 330, 331, 332, 357, 358, + 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, + 373, 374, 388, 343, 344, 346, 347, 375, 391, 337, + 339, 392, 398, 399, 400, 294, 356, 416, 417, 338, + 411, 321, 289, 333, 389, 395, 376, 0, 0, 420, + 295, 272, 320, 380, 273, 291, 292, 334, 335, 418, + 378, 382, 383, 274, 421, 360, 387, 322, 342, 393, + 394, 397, 410, 336, 414, 412, 413, 348, 355, 384, + 385, 349, 350, 377, 402, 323, 324, 327, 307, 309, + 310, 311, 312, 313, 422, 423, 425, 361, 362, 363, + 371, 426, 427, 428, 0, 0, 0, 379, 351, 353, + 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, + 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 381, 396, 415, 450, 451, 352, 429, 0, 0, + 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, + 409, 550, 345, 340, 401, 319, 275, 276, 341, 452, + 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, + 314, 0, 326, 386, 424, 325, 354, 316, 317, 318, + 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, + 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, + 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, + 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, + 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, + 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, + 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, + 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, + 589, 480, 481, 482, 434, 432, 433 +}; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, + 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, + 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 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, 435, 436, 437, 438, 439, 440, + 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, + 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, + 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, + 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, + 589, 590, 591, 426, 27, 39, 594, 595, 596 +}; -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -270 +static const yytype_int16 yypact[] = +{ + -270, 0, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 269, -42, + -37, -41, -21, -43, -44, -87, -106, -205, -229, -269, + 2, 3, 4, 12, 24, 25, 26, 27, 28, 31, + 32, 33, 34, 36, 37, 38, 39, 40, 50, 51, + 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 87, 88, 91, 93, 94, 95, 96, + 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 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, 204, 205, + 206, 207, 208, 209, 210, 212, 213, 214, 215, 217, + 219, 222, 234, 236, 237, 238, 239, 240, 241, 242, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 267, 268, 303, 304, 305, 306, 310, 311, + 312, 354, 355, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, 356, 357, 358, + 359, 360, 361, 362, -270, -270, -270, -270, -270, -270, + -270, -270, 366, 370, 371, 396, 397, 398, -270, -270, + -270, -270, -270, -270, -270, 400, 411, 412, 413, 414, + 415, 416, -270, -270, -270, -270, -270, -270, -270, -270, + 417, 418, 419, 420, 421, 422, 423, 424, -270, -270, + -270, -270, -270, -270, -270, -270, -270, 425, 426, 427, + 428, 429, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, 469, 471, 487, 488, 489, 490, 491, + 492, -270, -270, -270, -270, -270, -270, -270, -270, -270, + 493, 494, 495, 496, 497, 504, 505, 506, 507, 508, + 509, 511, 512, 513, 514, 515, 516, 517, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, 520, -270, -270, + 523, 526, 527, 535, 536, 537, 539, 540, 541, 542, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, 543, 544, 545, 546, 547, -270, -270, -270, -270, + -270, -270, 548, 549, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, 550, 551, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, 552, 553, 554, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, 555, 556, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 557, 558, + 559, 560, 561, 562, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, 563, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, 564, -270, -270, 565, 566, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, 567, 568, 569, -270, + -270, -270, -270, -270, -270, -270, -270 +}; +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -23, 570, 571, + 572, 573, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint16 yytable[] = +{ + 2, 470, 427, 455, 428, 429, 557, 442, 592, 593, + 498, 3, 597, 598, 599, 443, 444, 581, 582, 583, + 584, 585, 600, 470, 560, 561, 562, 563, 564, 565, + 566, 567, 568, 569, 601, 602, 603, 604, 605, 456, + 457, 606, 607, 608, 609, 4, 610, 611, 612, 613, + 614, 5, 503, 504, 505, 506, 507, 508, 509, 510, + 615, 616, 617, 618, 458, 430, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 6, 431, 630, 631, 432, + 445, 632, 446, 633, 634, 635, 636, 637, 638, 639, + 640, 7, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 459, 460, 660, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 8, 679, 680, 681, 682, 683, 684, 685, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 461, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 9, 472, 473, 474, 735, 736, 737, 738, 739, 740, + 741, 477, 742, 743, 744, 745, 433, 746, 10, 747, + 447, 471, 748, 472, 473, 474, 475, 476, 487, 488, + 489, 490, 491, 477, 749, 11, 750, 751, 752, 753, + 754, 755, 756, 12, 757, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 13, 779, 780, 0, + 14, 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, 781, 782, 783, 784, 72, 73, 74, + 785, 786, 787, 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, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 116, 117, 118, 797, 119, 120, 121, + 798, 799, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 800, 801, 802, 146, + 803, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, + 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, 823, + 196, 824, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 212, 213, + 214, 215, 216, 217, 836, 837, 838, 839, 840, 841, + 218, 842, 843, 844, 845, 846, 847, 848, 219, 220, + 849, 221, 222, 850, 223, 224, 851, 852, 225, 226, + 227, 228, 229, 230, 231, 853, 854, 855, 232, 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, 883, 884, 885, 886, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 499, 500, 501, 502 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 44, 44, 44, 46, 47, 112, 44, 277, 278, + 33, 11, 10, 10, 10, 52, 53, 246, 247, 248, + 249, 250, 10, 44, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 10, 10, 10, 10, 10, 80, + 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, + 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, + 10, 10, 10, 10, 105, 107, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, + 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, + 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 172, 173, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 152, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 212, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 210, 254, 255, 256, 10, 10, 10, 10, 10, 10, + 10, 264, 10, 10, 10, 10, 268, 10, 228, 10, + 267, 252, 10, 254, 255, 256, 257, 258, 281, 282, + 283, 284, 285, 264, 10, 245, 10, 10, 10, 10, + 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 276, 10, 10, -1, + 280, 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, 10, 10, 10, 10, 48, 49, 50, + 10, 10, 10, 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, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 104, 105, 106, 10, 108, 109, 110, + 10, 10, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 10, 10, 10, 140, + 10, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 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, 10, + 211, 10, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, + 241, 242, 243, 244, 10, 10, 10, 10, 10, 10, + 251, 10, 10, 10, 10, 10, 10, 10, 259, 260, + 10, 262, 263, 10, 265, 266, 10, 10, 269, 270, + 271, 272, 273, 274, 275, 10, 10, 10, 279, 10, + 10, 10, 10, 10, 10, 10, 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, 33, 33, 33, 33 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint16 yystos[] = +{ + 0, 287, 0, 11, 45, 51, 95, 111, 152, 210, + 228, 245, 253, 276, 280, 288, 289, 292, 295, 298, + 301, 309, 528, 539, 560, 568, 581, 590, 290, 293, + 296, 299, 302, 310, 529, 540, 561, 569, 582, 591, + 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, 48, 49, 50, 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, 104, 105, 106, 108, + 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 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, 211, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 239, 240, 241, 242, 243, 244, 251, 259, + 260, 262, 263, 265, 266, 269, 270, 271, 272, 273, + 274, 275, 279, 291, 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, 564, 565, 566, 567, 589, 44, 46, 47, + 107, 138, 141, 268, 294, 500, 501, 502, 503, 504, + 505, 506, 44, 52, 53, 137, 139, 267, 297, 507, + 508, 509, 510, 511, 512, 44, 80, 81, 105, 172, + 173, 212, 300, 521, 522, 523, 524, 525, 526, 527, + 44, 252, 254, 255, 256, 257, 258, 264, 303, 513, + 514, 515, 516, 517, 518, 519, 520, 281, 282, 283, + 284, 285, 304, 305, 306, 307, 308, 311, 513, 514, + 515, 516, 517, 96, 97, 98, 99, 100, 101, 102, + 103, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 112, 562, 563, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 246, 247, 248, 249, 250, 583, 584, 585, 586, + 587, 588, 277, 278, 592, 593, 594, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab #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) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -2056,61 +2287,80 @@ static const yytype_uint8 yyr2[] = # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (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, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif { - FILE *yyoutput = yyo; - YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); # endif - YYUSE (yytype); + switch (yytype) + { + default: + break; + } } -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif { - YYFPRINTF (yyo, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - yy_symbol_value_print (yyo, yytype, yyvaluep); - YYFPRINTF (yyo, ")"); + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. @@ -2118,54 +2368,66 @@ yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) | TOP (included). | `------------------------------------------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif { YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif { - unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; + unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] - ); - YYFPRINTF (stderr, "\n"); + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule); \ -} while (0) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -2179,7 +2441,7 @@ int yydebug; /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -2194,6 +2456,7 @@ int yydebug; # define YYMAXDEPTH 10000 #endif + #if YYERROR_VERBOSE @@ -2202,8 +2465,15 @@ int yydebug; # define yystrlen strlen # else /* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@ -2219,8 +2489,16 @@ yystrlen (const char *yystr) # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif { char *yyd = yydest; const char *yys = yysrc; @@ -2250,245 +2528,242 @@ yytnamerr (char *yyres, const char *yystr) char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; - append: - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); + return yystpcpy (yyres, yystr) - yyres; } # endif -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; + int yyn = yypact[yystate]; - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - } - } - } +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - default: /* Avoid compiler warnings. */ - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); yysize = yysize1; - else - return 2; - } - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; } #endif /* YYERROR_VERBOSE */ + /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif { YYUSE (yyvaluep); + if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); - YY_IGNORE_MAYBE_UNINITIALIZED_END + switch (yytype) + { + + default: + break; + } } + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ - -/* The lookahead symbol. */ +/* The look-ahead symbol. */ int yychar; -/* The semantic value of the lookahead symbol. */ +/* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; + /* Number of syntax errors so far. */ int yynerrs; + /*----------. | yyparse. | `----------*/ +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) int yyparse (void) +#else +int +yyparse () + +#endif +#endif { - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - + + int yystate; int yyn; int yyresult; - /* Lookahead token as an internal (translated) token number. */ + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -2496,127 +2771,156 @@ yyparse (void) YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + goto yysetstate; - /*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | +| yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ -yynewstate: + 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++; - -/*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; + yysetstate: + *yyssp = yystate; 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. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYSIZE_T yysize = yyssp - yyss + 1; -# if defined yyoverflow +#ifdef 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. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; - /* 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 * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - yyss = yyss1; - yyvs = yyvs1; + + /* 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 * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; } -# else /* defined YYSTACK_RELOCATE */ +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (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); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif +#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; + YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - if (yystate == YYFINAL) - YYACCEPT; + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 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. */ + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) + if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a lookahead token if don't already have one. */ + /* Not known => get a look-ahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = yylex (); + yychar = YYLEX; } if (yychar <= YYEOF) @@ -2638,27 +2942,30 @@ yybackup: yyn = yytable[yyn]; if (yyn <= 0) { - if (yytable_value_is_error (yyn)) - goto yyerrlab; + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; yyn = -yyn; goto yyreduce; } + if (yyn == YYFINAL) + YYACCEPT; + /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the lookahead token. */ + /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token. */ - yychar = YYEMPTY; + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END + goto yynewstate; @@ -2673,14 +2980,14 @@ yydefault: /*-----------------------------. -| yyreduce -- do a reduction. | +| 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'. + `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -2693,16 +3000,15 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 188 "./util/configparser.y" + case 16: +#line 189 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2702 "util/configparser.c" break; - case 211: -#line 280 "./util/configparser.y" + case 212: +#line 282 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2713,11 +3019,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2717 "util/configparser.c" break; - case 221: -#line 297 "./util/configparser.y" + case 222: +#line 299 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2728,11 +3033,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2732 "util/configparser.c" break; - case 230: -#line 314 "./util/configparser.y" + case 231: +#line 316 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2745,11 +3049,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2749 "util/configparser.c" break; - case 240: -#line 333 "./util/configparser.y" + case 241: +#line 335 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2765,18 +3068,17 @@ yyreduce: } else yyerror("out of memory"); } -#line 2769 "util/configparser.c" break; - case 251: -#line 357 "./util/configparser.y" + case 252: +#line 359 "./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), + OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[(2) - (2)].str))); + bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(2) - (2)].str), &len); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); } @@ -2786,62 +3088,57 @@ yyreduce: } } -#line 2790 "util/configparser.c" - break; - - case 252: -#line 376 "./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 2809 "util/configparser.c" break; case 253: -#line 393 "./util/configparser.y" +#line 378 "./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); + OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "nxdomain")!=0 && strcmp((yyvsp[(2) - (2)].str), "nodata")!=0 && + strcmp((yyvsp[(2) - (2)].str), "passthru")!=0 && strcmp((yyvsp[(2) - (2)].str), "drop")!=0 && + strcmp((yyvsp[(2) - (2)].str), "cname")!=0 && strcmp((yyvsp[(2) - (2)].str), "disabled")!=0) { + yyerror("rpz-action-override action: expected nxdomain, " + "nodata, passthru, drop, cname or disabled"); + free((yyvsp[(2) - (2)].str)); + cfg_parser->cfg->auths->rpz_action_override = NULL; + } + else { + cfg_parser->cfg->auths->rpz_action_override = (yyvsp[(2) - (2)].str); + } } -#line 2819 "util/configparser.c" break; case 254: -#line 401 "./util/configparser.y" +#line 395 "./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)); + OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->auths->rpz_cname); + cfg_parser->cfg->auths->rpz_cname = (yyvsp[(2) - (2)].str); } -#line 2831 "util/configparser.c" break; case 255: -#line 411 "./util/configparser.y" +#line 403 "./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); + OUTYY(("P(rpz_log:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 2841 "util/configparser.c" break; case 256: -#line 419 "./util/configparser.y" +#line 413 "./util/configparser.y" + { + OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->auths->rpz_log_name); + cfg_parser->cfg->auths->rpz_log_name = (yyvsp[(2) - (2)].str); + } + break; + + case 257: +#line 421 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2857,292 +3154,273 @@ yyreduce: } else yyerror("out of memory"); } -#line 2861 "util/configparser.c" - break; - - case 269: -#line 442 "./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 2873 "util/configparser.c" break; case 270: -#line 451 "./util/configparser.y" +#line 444 "./util/configparser.y" { - OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) + OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->num_threads = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 2885 "util/configparser.c" break; case 271: -#line 460 "./util/configparser.y" +#line 453 "./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) + OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->verbosity = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 2899 "util/configparser.c" break; case 272: -#line 471 "./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 462 "./util/configparser.y" + { + OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) + cfg_parser->cfg->stat_interval = 0; + else if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else cfg_parser->cfg->stat_interval = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 2911 "util/configparser.c" break; case 273: -#line 480 "./util/configparser.y" +#line 473 "./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) + OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 2923 "util/configparser.c" break; case 274: -#line 489 "./util/configparser.y" +#line 482 "./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) + OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 2935 "util/configparser.c" break; case 275: -#line 498 "./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 491 "./util/configparser.y" + { + OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 2949 "util/configparser.c" break; case 276: -#line 509 "./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 500 "./util/configparser.y" + { + OUTYY(("P(server_shm_key:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) + cfg_parser->cfg->shm_key = 0; + else if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else cfg_parser->cfg->shm_key = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 2961 "util/configparser.c" break; case 277: -#line 518 "./util/configparser.y" +#line 511 "./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 + OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->port = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 2976 "util/configparser.c" break; case 278: -#line 530 "./util/configparser.y" +#line 520 "./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"); + OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[(2) - (2)].str))) + fatal_exit("out of memory adding client-subnet"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); #endif } -#line 2992 "util/configparser.c" break; case 279: -#line 544 "./util/configparser.y" +#line 532 "./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); + OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, + (yyvsp[(2) - (2)].str))) + fatal_exit("out of memory adding client-subnet-zone"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + free((yyvsp[(2) - (2)].str)); #endif - free((yyvsp[0].str)); } -#line 3010 "util/configparser.c" break; case 280: -#line 559 "./util/configparser.y" +#line 546 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->client_subnet_always_forward = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free((yyvsp[(2) - (2)].str)); + } + break; + + case 281: +#line 561 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[(2) - (2)].str))); OUTYY(("P(Deprecated option, ignoring)\n")); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3024 "util/configparser.c" - break; - - case 281: -#line 570 "./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 3044 "util/configparser.c" break; case 282: -#line 587 "./util/configparser.y" +#line 572 "./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)); + OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("IPv4 subnet length expected"); + else if (atoi((yyvsp[(2) - (2)].str)) > 32) + cfg_parser->cfg->max_client_subnet_ipv4 = 32; + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + cfg_parser->cfg->max_client_subnet_ipv4 = 0; + else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[(2) - (2)].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3064 "util/configparser.c" break; case 283: -#line 604 "./util/configparser.y" +#line 589 "./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)); + OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("Ipv6 subnet length expected"); + else if (atoi((yyvsp[(2) - (2)].str)) > 128) + cfg_parser->cfg->max_client_subnet_ipv6 = 128; + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + cfg_parser->cfg->max_client_subnet_ipv6 = 0; + else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[(2) - (2)].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3084 "util/configparser.c" break; case 284: -#line 621 "./util/configparser.y" +#line 606 "./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)); + OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("IPv4 subnet length expected"); + else if (atoi((yyvsp[(2) - (2)].str)) > 32) + cfg_parser->cfg->min_client_subnet_ipv4 = 32; + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + cfg_parser->cfg->min_client_subnet_ipv4 = 0; + else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[(2) - (2)].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3104 "util/configparser.c" break; case 285: -#line 638 "./util/configparser.y" +#line 623 "./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)); + OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("Ipv6 subnet length expected"); + else if (atoi((yyvsp[(2) - (2)].str)) > 128) + cfg_parser->cfg->min_client_subnet_ipv6 = 128; + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + cfg_parser->cfg->min_client_subnet_ipv6 = 0; + else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[(2) - (2)].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3122 "util/configparser.c" break; case 286: -#line 653 "./util/configparser.y" +#line 640 "./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)); + OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("IPv4 ECS tree size expected"); + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; + else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[(2) - (2)].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3140 "util/configparser.c" break; case 287: -#line 668 "./util/configparser.y" +#line 655 "./util/configparser.y" { - OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); + #ifdef CLIENT_SUBNET + OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("IPv6 ECS tree size expected"); + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; + else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[(2) - (2)].str)); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free((yyvsp[(2) - (2)].str)); + } + break; + + case 288: +#line 670 "./util/configparser.y" + { + OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].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, @@ -3150,15 +3428,14 @@ yyreduce: if(!cfg_parser->cfg->ifs) yyerror("out of memory"); else - cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); + cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[(2) - (2)].str); } -#line 3156 "util/configparser.c" break; - case 288: -#line 681 "./util/configparser.y" + case 289: +#line 683 "./util/configparser.y" { - OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].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( @@ -3168,496 +3445,455 @@ yyreduce: yyerror("out of memory"); else cfg_parser->cfg->out_ifs[ - cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); + cfg_parser->cfg->num_out_ifs++] = (yyvsp[(2) - (2)].str); } -#line 3174 "util/configparser.c" - break; - - case 289: -#line 696 "./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 3186 "util/configparser.c" break; case 290: -#line 705 "./util/configparser.y" +#line 698 "./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)); + OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3198 "util/configparser.c" break; case 291: -#line 714 "./util/configparser.y" +#line 707 "./util/configparser.y" { - OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); - if(!cfg_mark_ports((yyvsp[0].str), 0, + OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3210 "util/configparser.c" break; case 292: -#line 723 "./util/configparser.y" +#line 716 "./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)); + OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, + cfg_parser->cfg->outgoing_avail_ports, 65536)) + yyerror("port number or range (\"low-high\") expected"); + free((yyvsp[(2) - (2)].str)); } -#line 3222 "util/configparser.c" break; case 293: -#line 732 "./util/configparser.y" +#line 725 "./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) + OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3234 "util/configparser.c" break; case 294: -#line 741 "./util/configparser.y" +#line 734 "./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)); + OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3246 "util/configparser.c" break; case 295: -#line 750 "./util/configparser.y" +#line 743 "./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) + OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3258 "util/configparser.c" break; case 296: -#line 759 "./util/configparser.y" +#line 752 "./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) + OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3270 "util/configparser.c" break; case 297: -#line 768 "./util/configparser.y" +#line 761 "./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) + OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3282 "util/configparser.c" break; case 298: -#line 777 "./util/configparser.y" +#line 770 "./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) + OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->do_udp = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3294 "util/configparser.c" break; case 299: -#line 786 "./util/configparser.y" +#line 779 "./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) + OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3306 "util/configparser.c" break; case 300: -#line 795 "./util/configparser.y" +#line 788 "./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) + OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3318 "util/configparser.c" break; case 301: -#line 804 "./util/configparser.y" +#line 797 "./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)); + OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3330 "util/configparser.c" break; case 302: -#line 813 "./util/configparser.y" +#line 806 "./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)); + OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->tcp_mss = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3342 "util/configparser.c" break; case 303: -#line 822 "./util/configparser.y" +#line 815 "./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) + OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) 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)); + else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3358 "util/configparser.c" break; case 304: -#line 835 "./util/configparser.y" +#line 824 "./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)); + OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else if (atoi((yyvsp[(2) - (2)].str)) > 120000) + cfg_parser->cfg->tcp_idle_timeout = 120000; + else if (atoi((yyvsp[(2) - (2)].str)) < 1) + cfg_parser->cfg->tcp_idle_timeout = 1; + else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3370 "util/configparser.c" break; case 305: -#line 844 "./util/configparser.y" +#line 837 "./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)); + OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3386 "util/configparser.c" break; case 306: -#line 857 "./util/configparser.y" +#line 846 "./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)); + OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else if (atoi((yyvsp[(2) - (2)].str)) > 6553500) + cfg_parser->cfg->tcp_keepalive_timeout = 6553500; + else if (atoi((yyvsp[(2) - (2)].str)) < 1) + cfg_parser->cfg->tcp_keepalive_timeout = 0; + else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3398 "util/configparser.c" break; case 307: -#line 866 "./util/configparser.y" +#line 859 "./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) + OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3410 "util/configparser.c" break; case 308: -#line 875 "./util/configparser.y" +#line 868 "./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) + OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3422 "util/configparser.c" break; case 309: -#line 884 "./util/configparser.y" +#line 877 "./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); + OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3432 "util/configparser.c" break; case 310: -#line 891 "./util/configparser.y" +#line 886 "./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); + OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->ssl_service_key); + cfg_parser->cfg->ssl_service_key = (yyvsp[(2) - (2)].str); } -#line 3442 "util/configparser.c" break; case 311: -#line 898 "./util/configparser.y" +#line 893 "./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)); + OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->ssl_service_pem); + cfg_parser->cfg->ssl_service_pem = (yyvsp[(2) - (2)].str); } -#line 3454 "util/configparser.c" break; case 312: -#line 907 "./util/configparser.y" +#line 900 "./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); + OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->ssl_port = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3464 "util/configparser.c" break; case 313: -#line 914 "./util/configparser.y" +#line 909 "./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)); + OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->tls_cert_bundle); + cfg_parser->cfg->tls_cert_bundle = (yyvsp[(2) - (2)].str); } -#line 3476 "util/configparser.c" break; case 314: -#line 923 "./util/configparser.y" +#line 916 "./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"); + OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3487 "util/configparser.c" break; case 315: -#line 931 "./util/configparser.y" +#line 925 "./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); + OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, + (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 3497 "util/configparser.c" break; case 316: -#line 938 "./util/configparser.y" +#line 933 "./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); + OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->tls_ciphers); + cfg_parser->cfg->tls_ciphers = (yyvsp[(2) - (2)].str); } -#line 3507 "util/configparser.c" break; case 317: -#line 945 "./util/configparser.y" +#line 940 "./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"); + OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->tls_ciphersuites); + cfg_parser->cfg->tls_ciphersuites = (yyvsp[(2) - (2)].str); } -#line 3518 "util/configparser.c" break; case 318: -#line 953 "./util/configparser.y" +#line 947 "./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)); + OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, + (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 3530 "util/configparser.c" break; case 319: -#line 962 "./util/configparser.y" +#line 955 "./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) + OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3542 "util/configparser.c" break; case 320: -#line 971 "./util/configparser.y" +#line 964 "./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) + OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) 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)); + else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3559 "util/configparser.c" break; case 321: -#line 985 "./util/configparser.y" +#line 973 "./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) + OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); +#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) + if(strcmp((yyvsp[(2) - (2)].str), "yes") == 0) + yyerror("no syslog services are available. " + "(reconfigure and compile to add)"); +#endif + free((yyvsp[(2) - (2)].str)); } -#line 3571 "util/configparser.c" break; case 322: -#line 994 "./util/configparser.y" +#line 987 "./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) + OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3583 "util/configparser.c" break; case 323: -#line 1003 "./util/configparser.y" +#line 996 "./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 3595 "util/configparser.c" + OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_queries = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } break; case 324: -#line 1012 "./util/configparser.y" +#line 1005 "./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) + OUTYY(("P(server_log_replies:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->log_replies = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3607 "util/configparser.c" break; case 325: -#line 1021 "./util/configparser.y" +#line 1014 "./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 3619 "util/configparser.c" + OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } break; case 326: -#line 1030 "./util/configparser.y" +#line 1023 "./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 3631 "util/configparser.c" + OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } break; case 327: -#line 1039 "./util/configparser.y" +#line 1032 "./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 3641 "util/configparser.c" + OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } break; case 328: -#line 1046 "./util/configparser.y" +#line 1041 "./util/configparser.y" { - OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->username); - cfg_parser->cfg->username = (yyvsp[0].str); + OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->chrootdir); + cfg_parser->cfg->chrootdir = (yyvsp[(2) - (2)].str); } -#line 3651 "util/configparser.c" break; case 329: -#line 1053 "./util/configparser.y" +#line 1048 "./util/configparser.y" { - OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->username); + cfg_parser->cfg->username = (yyvsp[(2) - (2)].str); + } + break; + + case 330: +#line 1055 "./util/configparser.y" + { + OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->directory); - cfg_parser->cfg->directory = (yyvsp[0].str); + cfg_parser->cfg->directory = (yyvsp[(2) - (2)].str); /* change there right away for includes relative to this */ - if((yyvsp[0].str)[0]) { + if((yyvsp[(2) - (2)].str)[0]) { char* d; #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg_parser->cfg); @@ -3676,1152 +3912,1078 @@ yyreduce: } } } -#line 3680 "util/configparser.c" - break; - - case 330: -#line 1079 "./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 3691 "util/configparser.c" break; case 331: -#line 1087 "./util/configparser.y" +#line 1081 "./util/configparser.y" { - OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->pidfile); - cfg_parser->cfg->pidfile = (yyvsp[0].str); + OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->logfile); + cfg_parser->cfg->logfile = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->use_syslog = 0; } -#line 3701 "util/configparser.c" break; case 332: -#line 1094 "./util/configparser.y" +#line 1089 "./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"); + OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->pidfile); + cfg_parser->cfg->pidfile = (yyvsp[(2) - (2)].str); } -#line 3711 "util/configparser.c" break; case 333: -#line 1101 "./util/configparser.y" +#line 1096 "./util/configparser.y" { - OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dlv_anchor_file); - cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); + OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 3721 "util/configparser.c" break; case 334: -#line 1108 "./util/configparser.y" +#line 1103 "./util/configparser.y" { - OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) - yyerror("out of memory"); + OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dlv_anchor_file); + cfg_parser->cfg->dlv_anchor_file = (yyvsp[(2) - (2)].str); } -#line 3731 "util/configparser.c" break; case 335: -#line 1115 "./util/configparser.y" +#line 1110 "./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))) + OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str))) yyerror("out of memory"); } -#line 3742 "util/configparser.c" break; case 336: -#line 1123 "./util/configparser.y" +#line 1117 "./util/configparser.y" { - OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> - trust_anchor_file_list, (yyvsp[0].str))) + auto_trust_anchor_file_list, (yyvsp[(2) - (2)].str))) yyerror("out of memory"); } -#line 3753 "util/configparser.c" break; case 337: -#line 1131 "./util/configparser.y" +#line 1125 "./util/configparser.y" { - OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> - trusted_keys_file_list, (yyvsp[0].str))) + trust_anchor_file_list, (yyvsp[(2) - (2)].str))) yyerror("out of memory"); } -#line 3764 "util/configparser.c" break; case 338: -#line 1139 "./util/configparser.y" +#line 1133 "./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))) + OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg-> + trusted_keys_file_list, (yyvsp[(2) - (2)].str))) yyerror("out of memory"); } -#line 3774 "util/configparser.c" break; case 339: -#line 1146 "./util/configparser.y" +#line 1141 "./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)); + OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 3788 "util/configparser.c" break; case 340: -#line 1157 "./util/configparser.y" +#line 1148 "./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) + OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); else - cfg_parser->cfg->root_key_sentinel = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + cfg_parser->cfg->trust_anchor_signaling = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3802 "util/configparser.c" break; case 341: -#line 1168 "./util/configparser.y" +#line 1159 "./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"); + OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->root_key_sentinel = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3812 "util/configparser.c" break; case 342: -#line 1175 "./util/configparser.y" +#line 1170 "./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)); + OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 3824 "util/configparser.c" break; case 343: -#line 1184 "./util/configparser.y" +#line 1177 "./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) + OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3836 "util/configparser.c" break; case 344: -#line 1193 "./util/configparser.y" +#line 1186 "./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) + OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->hide_version = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3848 "util/configparser.c" break; case 345: -#line 1202 "./util/configparser.y" +#line 1195 "./util/configparser.y" { - OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->identity); - cfg_parser->cfg->identity = (yyvsp[0].str); + OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3858 "util/configparser.c" break; case 346: -#line 1209 "./util/configparser.y" +#line 1204 "./util/configparser.y" { - OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->version); - cfg_parser->cfg->version = (yyvsp[0].str); + OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->identity); + cfg_parser->cfg->identity = (yyvsp[(2) - (2)].str); } -#line 3868 "util/configparser.c" break; case 347: -#line 1216 "./util/configparser.y" +#line 1211 "./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)); + OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->version); + cfg_parser->cfg->version = (yyvsp[(2) - (2)].str); } -#line 3879 "util/configparser.c" break; case 348: -#line 1224 "./util/configparser.y" +#line 1218 "./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)) + OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3890 "util/configparser.c" break; case 349: -#line 1232 "./util/configparser.y" +#line 1226 "./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 3903 "util/configparser.c" + OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf)) + yyerror("buffer size expected"); + free((yyvsp[(2) - (2)].str)); + } break; case 350: -#line 1242 "./util/configparser.y" +#line 1234 "./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) + OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->ip_transparent = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->so_reuseport = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3916 "util/configparser.c" break; case 351: -#line 1252 "./util/configparser.y" +#line 1244 "./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) + OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->ip_freebind = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->ip_transparent = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 3929 "util/configparser.c" break; case 352: -#line 1262 "./util/configparser.y" +#line 1254 "./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 3940 "util/configparser.c" + OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ip_freebind = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } break; case 353: -#line 1270 "./util/configparser.y" +#line 1264 "./util/configparser.y" { - OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) + OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) 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)); + else if (atoi((yyvsp[(2) - (2)].str)) > 63) + yyerror("value too large (max 63)"); + else if (atoi((yyvsp[(2) - (2)].str)) < 0) + yyerror("value too small (min 0)"); + else + cfg_parser->cfg->ip_dscp = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3956 "util/configparser.c" break; case 354: -#line 1283 "./util/configparser.y" +#line 1278 "./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)); + OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->stream_wait_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); } -#line 3970 "util/configparser.c" break; case 355: -#line 1294 "./util/configparser.y" +#line 1286 "./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)); + OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else if (atoi((yyvsp[(2) - (2)].str)) < 12) + yyerror("edns buffer size too small"); + else if (atoi((yyvsp[(2) - (2)].str)) > 65535) + cfg_parser->cfg->edns_buffer_size = 65535; + else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3981 "util/configparser.c" break; case 356: -#line 1302 "./util/configparser.y" +#line 1299 "./util/configparser.y" { - OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) + OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].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)); + else if (atoi((yyvsp[(2) - (2)].str)) < 4096) + yyerror("message buffer size too small (use 4096)"); + else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 3997 "util/configparser.c" break; case 357: -#line 1315 "./util/configparser.y" +#line 1310 "./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)); + OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); } -#line 4009 "util/configparser.c" break; case 358: -#line 1324 "./util/configparser.y" +#line 1318 "./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) + OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) yyerror("number expected"); - else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else { + cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); } -#line 4021 "util/configparser.c" break; case 359: -#line 1333 "./util/configparser.y" +#line 1331 "./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) + OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) yyerror("number expected"); - else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4033 "util/configparser.c" break; case 360: -#line 1342 "./util/configparser.y" +#line 1340 "./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)); + OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->jostle_time = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4046 "util/configparser.c" break; case 361: -#line 1352 "./util/configparser.y" +#line 1349 "./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)); + OUTYY(("P(server_delay_close:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->delay_close = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4059 "util/configparser.c" break; case 362: -#line 1362 "./util/configparser.y" +#line 1358 "./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)); + OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->unblock_lan_zones = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4070 "util/configparser.c" break; case 363: -#line 1370 "./util/configparser.y" +#line 1368 "./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)); + OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->insecure_lan_zones = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4086 "util/configparser.c" break; case 364: -#line 1383 "./util/configparser.y" +#line 1378 "./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)); + OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); } -#line 4098 "util/configparser.c" break; case 365: -#line 1392 "./util/configparser.y" +#line 1386 "./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)); + OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); } -#line 4109 "util/configparser.c" break; case 366: -#line 1400 "./util/configparser.y" +#line 1399 "./util/configparser.y" { - OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) + OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->host_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4121 "util/configparser.c" break; case 367: -#line 1409 "./util/configparser.y" +#line 1408 "./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)); + OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " + "removed, use infra-host-ttl)", (yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4132 "util/configparser.c" break; case 368: -#line 1417 "./util/configparser.y" +#line 1416 "./util/configparser.y" { - OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) + OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].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)); + else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4148 "util/configparser.c" break; case 369: -#line 1430 "./util/configparser.y" +#line 1425 "./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)); + OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); + verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " + "(option removed, use infra-cache-numhosts)", (yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4160 "util/configparser.c" break; case 370: -#line 1439 "./util/configparser.y" +#line 1433 "./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); + OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); } -#line 4170 "util/configparser.c" break; case 371: #line 1446 "./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)); + OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4183 "util/configparser.c" break; case 372: -#line 1456 "./util/configparser.y" +#line 1455 "./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)); + OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->target_fetch_policy); + cfg_parser->cfg->target_fetch_policy = (yyvsp[(2) - (2)].str); } -#line 4196 "util/configparser.c" break; case 373: -#line 1466 "./util/configparser.y" +#line 1462 "./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) + OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->harden_glue = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->harden_short_bufsize = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4209 "util/configparser.c" break; case 374: -#line 1476 "./util/configparser.y" +#line 1472 "./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) + OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->harden_dnssec_stripped = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->harden_large_queries = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4222 "util/configparser.c" break; case 375: -#line 1486 "./util/configparser.y" +#line 1482 "./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) + OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->harden_below_nxdomain = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->harden_glue = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4235 "util/configparser.c" break; case 376: -#line 1496 "./util/configparser.y" +#line 1492 "./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) + OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->harden_referral_path = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->harden_dnssec_stripped = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4248 "util/configparser.c" break; case 377: -#line 1506 "./util/configparser.y" +#line 1502 "./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) + OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->harden_algo_downgrade = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->harden_below_nxdomain = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4261 "util/configparser.c" break; case 378: -#line 1516 "./util/configparser.y" +#line 1512 "./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) + OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->use_caps_bits_for_id = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->harden_referral_path = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4274 "util/configparser.c" break; case 379: -#line 1526 "./util/configparser.y" +#line 1522 "./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"); + OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_algo_downgrade = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4284 "util/configparser.c" break; case 380: -#line 1533 "./util/configparser.y" +#line 1532 "./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"); + OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->use_caps_bits_for_id = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4294 "util/configparser.c" break; case 381: -#line 1540 "./util/configparser.y" +#line 1542 "./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))) + OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[(2) - (2)].str))) yyerror("out of memory"); } -#line 4304 "util/configparser.c" break; case 382: -#line 1547 "./util/configparser.y" +#line 1549 "./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)); + OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 4316 "util/configparser.c" break; case 383: #line 1556 "./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)); + OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 4328 "util/configparser.c" break; case 384: -#line 1565 "./util/configparser.y" +#line 1563 "./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) + OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->prefetch = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4340 "util/configparser.c" break; case 385: -#line 1574 "./util/configparser.y" +#line 1572 "./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)); + OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4352 "util/configparser.c" break; case 386: -#line 1583 "./util/configparser.y" +#line 1581 "./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"); + OUTYY(("P(server_deny_any:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->deny_any = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4362 "util/configparser.c" break; case 387: #line 1590 "./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)); + OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4375 "util/configparser.c" break; case 388: -#line 1600 "./util/configparser.y" +#line 1599 "./util/configparser.y" { - OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && - strcmp((yyvsp[0].str), "deny_non_local")!=0 && - strcmp((yyvsp[0].str), "refuse_non_local")!=0 && - strcmp((yyvsp[0].str), "allow_setrd")!=0 && - strcmp((yyvsp[0].str), "allow")!=0 && - strcmp((yyvsp[0].str), "allow_snoop")!=0) { - yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow, allow_setrd or " - "allow_snoop in access control action"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding acl"); - } + OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 4398 "util/configparser.c" break; case 389: -#line 1620 "./util/configparser.y" +#line 1606 "./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); + OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->donotquery_localhost = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4408 "util/configparser.c" break; case 390: -#line 1627 "./util/configparser.y" +#line 1616 "./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"); + OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && + strcmp((yyvsp[(3) - (3)].str), "deny_non_local")!=0 && + strcmp((yyvsp[(3) - (3)].str), "refuse_non_local")!=0 && + strcmp((yyvsp[(3) - (3)].str), "allow_setrd")!=0 && + strcmp((yyvsp[(3) - (3)].str), "allow")!=0 && + strcmp((yyvsp[(3) - (3)].str), "allow_snoop")!=0) { + yyerror("expected deny, refuse, deny_non_local, " + "refuse_non_local, allow, allow_setrd or " + "allow_snoop in access control action"); + free((yyvsp[(2) - (3)].str)); + free((yyvsp[(3) - (3)].str)); } else { - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str)); + if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding acl"); } - free((yyvsp[0].str)); } -#line 4429 "util/configparser.c" break; case 391: -#line 1645 "./util/configparser.y" +#line 1636 "./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)); + OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->module_conf); + cfg_parser->cfg->module_conf = (yyvsp[(2) - (2)].str); } -#line 4445 "util/configparser.c" break; case 392: -#line 1658 "./util/configparser.y" +#line 1643 "./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; + OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str))); + if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { + cfg_parser->cfg->val_date_override = 0; + } else if(strlen((yyvsp[(2) - (2)].str)) == 14) { + cfg_parser->cfg->val_date_override = + cfg_convert_timeval((yyvsp[(2) - (2)].str)); + if(!cfg_parser->cfg->val_date_override) + yyerror("bad date/time specification"); } else { - cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str)); - if(!cfg_parser->cfg->val_sig_skew_max) + if(atoi((yyvsp[(2) - (2)].str)) == 0) yyerror("number expected"); + cfg_parser->cfg->val_date_override = atoi((yyvsp[(2) - (2)].str)); } - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4461 "util/configparser.c" break; case 393: -#line 1671 "./util/configparser.y" +#line 1661 "./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)); + OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str))); + if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { + cfg_parser->cfg->val_sig_skew_min = 0; + } else { + cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[(2) - (2)].str)); + if(!cfg_parser->cfg->val_sig_skew_min) + yyerror("number expected"); + } + free((yyvsp[(2) - (2)].str)); } -#line 4473 "util/configparser.c" break; case 394: -#line 1680 "./util/configparser.y" +#line 1674 "./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)); + OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str))); + if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { + cfg_parser->cfg->val_sig_skew_max = 0; + } else { + cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[(2) - (2)].str)); + if(!cfg_parser->cfg->val_sig_skew_max) + yyerror("number expected"); + } + free((yyvsp[(2) - (2)].str)); } -#line 4485 "util/configparser.c" break; case 395: -#line 1689 "./util/configparser.y" +#line 1687 "./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) + OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->max_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4497 "util/configparser.c" break; case 396: -#line 1698 "./util/configparser.y" +#line 1696 "./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) + OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4509 "util/configparser.c" break; case 397: -#line 1707 "./util/configparser.y" +#line 1705 "./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)); + OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->min_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4522 "util/configparser.c" break; case 398: -#line 1717 "./util/configparser.y" +#line 1714 "./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)); + OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4535 "util/configparser.c" break; case 399: -#line 1727 "./util/configparser.y" +#line 1723 "./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) + OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else - cfg_parser->cfg->aggressive_nsec = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->val_clean_additional = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4549 "util/configparser.c" break; case 400: -#line 1738 "./util/configparser.y" +#line 1733 "./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) + OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->val_permissive_mode = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4561 "util/configparser.c" break; case 401: -#line 1747 "./util/configparser.y" +#line 1743 "./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) + OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else + cfg_parser->cfg->aggressive_nsec = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4573 "util/configparser.c" break; case 402: -#line 1756 "./util/configparser.y" +#line 1754 "./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)); + OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4585 "util/configparser.c" break; case 403: -#line 1765 "./util/configparser.y" +#line 1763 "./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) + OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4597 "util/configparser.c" break; case 404: -#line 1774 "./util/configparser.y" +#line 1772 "./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) + OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4609 "util/configparser.c" break; case 405: -#line 1783 "./util/configparser.y" +#line 1781 "./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)); + OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4621 "util/configparser.c" break; case 406: -#line 1792 "./util/configparser.y" +#line 1790 "./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)); + OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4637 "util/configparser.c" break; case 407: -#line 1805 "./util/configparser.y" +#line 1799 "./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)); + OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4653 "util/configparser.c" break; case 408: -#line 1818 "./util/configparser.y" +#line 1808 "./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)); + OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); +#if defined(HAVE_SSL) || defined(HAVE_NETTLE) + else fake_dsa = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + if(fake_dsa) + log_warn("test option fake_dsa is enabled"); +#endif + free((yyvsp[(2) - (2)].str)); } -#line 4665 "util/configparser.c" break; case 409: -#line 1827 "./util/configparser.y" +#line 1821 "./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); + OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); +#if defined(HAVE_SSL) || defined(HAVE_NETTLE) + else fake_sha1 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + if(fake_sha1) + log_warn("test option fake_sha1 is enabled"); +#endif + free((yyvsp[(2) - (2)].str)); } -#line 4675 "util/configparser.c" break; case 410: #line 1834 "./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) + OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->val_log_level = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4687 "util/configparser.c" break; case 411: #line 1843 "./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)); + OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->val_nsec3_key_iterations); + cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[(2) - (2)].str); } -#line 4699 "util/configparser.c" break; case 412: -#line 1852 "./util/configparser.y" +#line 1850 "./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) + OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->add_holddown = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4711 "util/configparser.c" break; case 413: -#line 1861 "./util/configparser.y" +#line 1859 "./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)); + OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->del_holddown = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4724 "util/configparser.c" break; case 414: -#line 1870 "./util/configparser.y" +#line 1868 "./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)); + OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->keep_missing = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4735 "util/configparser.c" break; case 415: -#line 1878 "./util/configparser.y" +#line 1877 "./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)); + OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->permit_small_holddown = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4751 "util/configparser.c" break; case 416: -#line 1891 "./util/configparser.y" +#line 1886 "./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)) + OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4762 "util/configparser.c" break; case 417: -#line 1899 "./util/configparser.y" +#line 1894 "./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), "always_refuse")!=0 - && strcmp((yyvsp[0].str), "always_nxdomain")!=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) { + OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); + } + break; + + case 418: +#line 1907 "./util/configparser.y" + { + OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 419: +#line 1915 "./util/configparser.y" + { + OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && + strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 && + strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0 + && strcmp((yyvsp[(3) - (3)].str), "typetransparent")!=0 + && strcmp((yyvsp[(3) - (3)].str), "always_transparent")!=0 + && strcmp((yyvsp[(3) - (3)].str), "always_refuse")!=0 + && strcmp((yyvsp[(3) - (3)].str), "always_nxdomain")!=0 + && strcmp((yyvsp[(3) - (3)].str), "noview")!=0 + && strcmp((yyvsp[(3) - (3)].str), "inform")!=0 && strcmp((yyvsp[(3) - (3)].str), "inform_deny")!=0 + && strcmp((yyvsp[(3) - (3)].str), "inform_redirect") != 0 + && strcmp((yyvsp[(3) - (3)].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, noview " ", nodefault or ipset"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else if(strcmp((yyvsp[0].str), "nodefault")==0) { + free((yyvsp[(2) - (3)].str)); + free((yyvsp[(3) - (3)].str)); + } else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> - local_zones_nodefault, (yyvsp[-1].str))) + local_zones_nodefault, (yyvsp[(2) - (3)].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); + free((yyvsp[(3) - (3)].str)); #ifdef USE_IPSET - } else if(strcmp((yyvsp[0].str), "ipset")==0) { + } else if(strcmp((yyvsp[(3) - (3)].str), "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> - local_zones_ipset, (yyvsp[-1].str))) + local_zones_ipset, (yyvsp[(2) - (3)].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); + free((yyvsp[(3) - (3)].str)); #endif } else { if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, - (yyvsp[-1].str), (yyvsp[0].str))) + (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) fatal_exit("out of memory adding local-zone"); } } -#line 4806 "util/configparser.c" break; - case 418: -#line 1940 "./util/configparser.y" + case 420: +#line 1956 "./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))) + OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str))) fatal_exit("out of memory adding local-data"); } -#line 4816 "util/configparser.c" break; - case 419: -#line 1947 "./util/configparser.y" + case 421: +#line 1963 "./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)); + OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); + ptr = cfg_ptr_reverse((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_data, ptr)) @@ -4830,93 +4992,85 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4834 "util/configparser.c" - break; - - case 420: -#line 1962 "./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 4847 "util/configparser.c" - break; - - case 421: -#line 1972 "./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 4860 "util/configparser.c" break; case 422: -#line 1982 "./util/configparser.y" +#line 1978 "./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)); + OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->minimal_responses = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4870 "util/configparser.c" break; case 423: -#line 1989 "./util/configparser.y" +#line 1988 "./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)); + OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->rrset_roundrobin = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 4880 "util/configparser.c" break; case 424: -#line 1996 "./util/configparser.y" +#line 1998 "./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); + OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[(2) - (2)].str))); + cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4890 "util/configparser.c" break; case 425: -#line 2003 "./util/configparser.y" +#line 2005 "./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)); + OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str))); + cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4902 "util/configparser.c" break; case 426: #line 2012 "./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"); + OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dns64_prefix); + cfg_parser->cfg->dns64_prefix = (yyvsp[(2) - (2)].str); } -#line 4913 "util/configparser.c" break; case 427: -#line 2020 "./util/configparser.y" +#line 2019 "./util/configparser.y" { - char* p, *s = (yyvsp[0].str); - OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 428: +#line 2028 "./util/configparser.y" + { + OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, + (yyvsp[(2) - (2)].str))) + fatal_exit("out of memory adding dns64-ignore-aaaa"); + } + break; + + case 429: +#line 2036 "./util/configparser.y" + { + char* p, *s = (yyvsp[(2) - (2)].str); + OUTYY(("P(server_define_tag:%s)\n", (yyvsp[(2) - (2)].str))); while((p=strsep(&s, " \t\n")) != NULL) { if(*p) { if(!config_add_tag(cfg_parser->cfg, p)) @@ -4924,776 +5078,721 @@ yyreduce: "out of memory"); } } - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 4930 "util/configparser.c" break; - case 428: -#line 2034 "./util/configparser.y" + case 430: +#line 2050 "./util/configparser.y" { size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), &len); - free((yyvsp[0].str)); - OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str))); + free((yyvsp[(3) - (3)].str)); + OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[(2) - (3)].str))); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); - free((yyvsp[-1].str)); + free((yyvsp[(2) - (3)].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->local_zone_tags, - (yyvsp[-1].str), bitlist, len)) { + (yyvsp[(2) - (3)].str), bitlist, len)) { yyerror("out of memory"); - free((yyvsp[-1].str)); + free((yyvsp[(2) - (3)].str)); } } } -#line 4954 "util/configparser.c" break; - case 429: -#line 2055 "./util/configparser.y" + case 431: +#line 2071 "./util/configparser.y" { size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), &len); - free((yyvsp[0].str)); - OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str))); + free((yyvsp[(3) - (3)].str)); + OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[(2) - (3)].str))); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); - free((yyvsp[-1].str)); + free((yyvsp[(2) - (3)].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->acl_tags, - (yyvsp[-1].str), bitlist, len)) { + (yyvsp[(2) - (3)].str), bitlist, len)) { yyerror("out of memory"); - free((yyvsp[-1].str)); + free((yyvsp[(2) - (3)].str)); } } } -#line 4978 "util/configparser.c" - break; - - case 430: -#line 2076 "./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 4993 "util/configparser.c" - break; - - case 431: -#line 2088 "./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 5008 "util/configparser.c" break; case 432: -#line 2100 "./util/configparser.y" +#line 2092 "./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))) { + OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); + if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, + (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))) { yyerror("out of memory"); - free((yyvsp[-2].str)); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); + free((yyvsp[(2) - (4)].str)); + free((yyvsp[(3) - (4)].str)); + free((yyvsp[(4) - (4)].str)); } } -#line 5023 "util/configparser.c" break; case 433: -#line 2112 "./util/configparser.y" +#line 2104 "./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))) { + OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); + if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, + (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))) { yyerror("out of memory"); + free((yyvsp[(2) - (4)].str)); + free((yyvsp[(3) - (4)].str)); + free((yyvsp[(4) - (4)].str)); } } -#line 5035 "util/configparser.c" break; case 434: -#line 2121 "./util/configparser.y" +#line 2116 "./util/configparser.y" + { + OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); + if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, + (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))) { + yyerror("out of memory"); + free((yyvsp[(2) - (4)].str)); + free((yyvsp[(3) - (4)].str)); + free((yyvsp[(4) - (4)].str)); + } + } + break; + + case 435: +#line 2128 "./util/configparser.y" + { + OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, + (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) { + yyerror("out of memory"); + } + } + break; + + case 436: +#line 2137 "./util/configparser.y" { size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), &len); - free((yyvsp[0].str)); - OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str))); + free((yyvsp[(3) - (3)].str)); + OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[(2) - (3)].str))); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); - free((yyvsp[-1].str)); + free((yyvsp[(2) - (3)].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->respip_tags, - (yyvsp[-1].str), bitlist, len)) { + (yyvsp[(2) - (3)].str), bitlist, len)) { yyerror("out of memory"); - free((yyvsp[-1].str)); + free((yyvsp[(2) - (3)].str)); } } } -#line 5059 "util/configparser.c" - break; - - case 435: -#line 2142 "./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 5071 "util/configparser.c" - break; - - case 436: -#line 2152 "./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 5083 "util/configparser.c" break; case 437: -#line 2161 "./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 5094 "util/configparser.c" +#line 2158 "./util/configparser.y" + { + OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); + } break; case 438: -#line 2169 "./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 2168 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 5105 "util/configparser.c" break; case 439: #line 2177 "./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)); + OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ip_ratelimit_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); } -#line 5121 "util/configparser.c" break; case 440: -#line 2190 "./util/configparser.y" +#line 2185 "./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)); + OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ratelimit_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); } -#line 5137 "util/configparser.c" break; case 441: -#line 2203 "./util/configparser.y" +#line 2193 "./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) { + OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); + } + break; + + case 442: +#line 2206 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) yyerror("number expected"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); + else { + cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); + } + break; + + case 443: +#line 2219 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { + yyerror("number expected"); + free((yyvsp[(2) - (3)].str)); + free((yyvsp[(3) - (3)].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> - ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str))) + ratelimit_for_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) fatal_exit("out of memory adding " "ratelimit-for-domain"); } } -#line 5155 "util/configparser.c" break; - case 442: -#line 2218 "./util/configparser.y" + case 444: +#line 2234 "./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) { + OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { yyerror("number expected"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); + free((yyvsp[(2) - (3)].str)); + free((yyvsp[(3) - (3)].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> - ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str))) + ratelimit_below_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) fatal_exit("out of memory adding " "ratelimit-below-domain"); } } -#line 5173 "util/configparser.c" - break; - - case 443: -#line 2233 "./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 5185 "util/configparser.c" - break; - - case 444: -#line 2242 "./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 5197 "util/configparser.c" break; case 445: -#line 2251 "./util/configparser.y" +#line 2249 "./util/configparser.y" { - OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); - free((yyvsp[0].str)); + OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 5206 "util/configparser.c" break; case 446: -#line 2257 "./util/configparser.y" +#line 2258 "./util/configparser.y" { - OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) <= 0) + OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); + else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 5218 "util/configparser.c" break; case 447: -#line 2266 "./util/configparser.y" +#line 2267 "./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)); + OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); + free((yyvsp[(2) - (2)].str)); } -#line 5230 "util/configparser.c" break; case 448: -#line 2275 "./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 2273 "./util/configparser.y" + { + OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) <= 0) + yyerror("number expected"); + else cfg_parser->cfg->fast_server_num = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 5243 "util/configparser.c" break; case 449: -#line 2285 "./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 2282 "./util/configparser.y" + { + OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 5256 "util/configparser.c" break; case 450: -#line 2295 "./util/configparser.y" +#line 2291 "./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) + OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) 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)); + else cfg_parser->cfg->qname_minimisation = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5272 "util/configparser.c" break; case 451: -#line 2308 "./util/configparser.y" +#line 2301 "./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) + OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) 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)); + else cfg_parser->cfg->qname_minimisation_strict = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5288 "util/configparser.c" break; case 452: -#line 2321 "./util/configparser.y" +#line 2311 "./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); + OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); #endif + free((yyvsp[(2) - (2)].str)); } -#line 5303 "util/configparser.c" break; case 453: -#line 2333 "./util/configparser.y" +#line 2324 "./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)); + OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); #endif + free((yyvsp[(2) - (2)].str)); } -#line 5320 "util/configparser.c" break; case 454: -#line 2347 "./util/configparser.y" +#line 2337 "./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"); + OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->ipsecmod_hook); + cfg_parser->cfg->ipsecmod_hook = (yyvsp[(2) - (2)].str); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); #endif } -#line 5335 "util/configparser.c" break; case 455: -#line 2359 "./util/configparser.y" +#line 2349 "./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)); + OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); #endif } -#line 5352 "util/configparser.c" break; case 456: -#line 2373 "./util/configparser.y" +#line 2363 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + free((yyvsp[(2) - (2)].str)); + #endif + } + break; + + case 457: +#line 2375 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + free((yyvsp[(2) - (2)].str)); + #endif + } + break; + + case 458: +#line 2389 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].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); + cfg_parser->cfg->stubs->name = (yyvsp[(2) - (2)].str); } -#line 5365 "util/configparser.c" - break; - - case 457: -#line 2383 "./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 5375 "util/configparser.c" - break; - - case 458: -#line 2390 "./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 5385 "util/configparser.c" break; case 459: -#line 2397 "./util/configparser.y" +#line 2399 "./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)); + OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5397 "util/configparser.c" break; case 460: #line 2406 "./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)); + OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5409 "util/configparser.c" break; case 461: -#line 2415 "./util/configparser.y" +#line 2413 "./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) + OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->stubs->ssl_upstream = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5422 "util/configparser.c" break; case 462: -#line 2425 "./util/configparser.y" +#line 2422 "./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) + OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->stubs->isprime = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5435 "util/configparser.c" break; case 463: -#line 2435 "./util/configparser.y" +#line 2431 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); + OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stubs->ssl_upstream = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 464: +#line 2441 "./util/configparser.y" + { + OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stubs->isprime = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 465: +#line 2451 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].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); + cfg_parser->cfg->forwards->name = (yyvsp[(2) - (2)].str); } -#line 5448 "util/configparser.c" - break; - - case 464: -#line 2445 "./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 5458 "util/configparser.c" - break; - - case 465: -#line 2452 "./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 5468 "util/configparser.c" break; case 466: -#line 2459 "./util/configparser.y" +#line 2461 "./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)); + OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5480 "util/configparser.c" break; case 467: #line 2468 "./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)); + OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5492 "util/configparser.c" break; case 468: -#line 2477 "./util/configparser.y" +#line 2475 "./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) + OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->forwards->ssl_upstream = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5505 "util/configparser.c" break; case 469: -#line 2487 "./util/configparser.y" +#line 2484 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); + OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 470: +#line 2493 "./util/configparser.y" + { + OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->forwards->ssl_upstream = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 471: +#line 2503 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].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); + cfg_parser->cfg->auths->name = (yyvsp[(2) - (2)].str); } -#line 5518 "util/configparser.c" - break; - - case 470: -#line 2497 "./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 5528 "util/configparser.c" - break; - - case 471: -#line 2504 "./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 5538 "util/configparser.c" break; case 472: -#line 2511 "./util/configparser.y" +#line 2513 "./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"); + OUTYY(("P(zonefile:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->auths->zonefile); + cfg_parser->cfg->auths->zonefile = (yyvsp[(2) - (2)].str); } -#line 5548 "util/configparser.c" break; case 473: -#line 2518 "./util/configparser.y" +#line 2520 "./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))) + OUTYY(("P(master:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[(2) - (2)].str))) yyerror("out of memory"); } -#line 5559 "util/configparser.c" break; case 474: -#line 2526 "./util/configparser.y" +#line 2527 "./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)); + OUTYY(("P(url:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5572 "util/configparser.c" break; case 475: -#line 2536 "./util/configparser.y" +#line 2534 "./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)); + OUTYY(("P(allow-notify:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, + (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5585 "util/configparser.c" break; case 476: -#line 2546 "./util/configparser.y" +#line 2542 "./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) + OUTYY(("P(for-downstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->auths->fallback_enabled = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->auths->for_downstream = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5598 "util/configparser.c" break; case 477: -#line 2556 "./util/configparser.y" +#line 2552 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); + OUTYY(("P(for-upstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->for_upstream = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 478: +#line 2562 "./util/configparser.y" + { + OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->fallback_enabled = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 479: +#line 2572 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].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); + cfg_parser->cfg->views->name = (yyvsp[(2) - (2)].str); } -#line 5611 "util/configparser.c" break; - case 478: -#line 2566 "./util/configparser.y" + case 480: +#line 2582 "./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), "noview")!=0 - && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) { + OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && + strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 && + strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0 + && strcmp((yyvsp[(3) - (3)].str), "typetransparent")!=0 + && strcmp((yyvsp[(3) - (3)].str), "always_transparent")!=0 + && strcmp((yyvsp[(3) - (3)].str), "always_refuse")!=0 + && strcmp((yyvsp[(3) - (3)].str), "always_nxdomain")!=0 + && strcmp((yyvsp[(3) - (3)].str), "noview")!=0 + && strcmp((yyvsp[(3) - (3)].str), "inform")!=0 && strcmp((yyvsp[(3) - (3)].str), "inform_deny")!=0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " "always_nxdomain, noview or nodefault"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else if(strcmp((yyvsp[0].str), "nodefault")==0) { + free((yyvsp[(2) - (3)].str)); + free((yyvsp[(3) - (3)].str)); + } else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> - local_zones_nodefault, (yyvsp[-1].str))) + local_zones_nodefault, (yyvsp[(2) - (3)].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); + free((yyvsp[(3) - (3)].str)); #ifdef USE_IPSET - } else if(strcmp((yyvsp[0].str), "ipset")==0) { + } else if(strcmp((yyvsp[(3) - (3)].str), "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> - local_zones_ipset, (yyvsp[-1].str))) + local_zones_ipset, (yyvsp[(2) - (3)].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); + free((yyvsp[(3) - (3)].str)); #endif } else { if(!cfg_str2list_insert( &cfg_parser->cfg->views->local_zones, - (yyvsp[-1].str), (yyvsp[0].str))) + (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) fatal_exit("out of memory adding local-zone"); } } -#line 5653 "util/configparser.c" - break; - - case 479: -#line 2605 "./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 5666 "util/configparser.c" - break; - - case 480: -#line 2615 "./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 5677 "util/configparser.c" break; case 481: -#line 2623 "./util/configparser.y" +#line 2621 "./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"); - } + OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + validate_respip_action((yyvsp[(3) - (3)].str)); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_actions, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding per-view " + "response-ip action"); } -#line 5688 "util/configparser.c" break; case 482: #line 2631 "./util/configparser.y" + { + OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[(2) - (3)].str))); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_data, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding response-ip-data"); + } + break; + + case 483: +#line 2639 "./util/configparser.y" + { + OUTYY(("P(view_local_data:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[(2) - (2)].str))) { + fatal_exit("out of memory adding local-data"); + } + } + break; + + case 484: +#line 2647 "./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)); + OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); + ptr = cfg_ptr_reverse((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_data, ptr)) @@ -5702,683 +5801,615 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5706 "util/configparser.c" break; - case 483: -#line 2646 "./util/configparser.y" + case 485: +#line 2662 "./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) + OUTYY(("P(view-first:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5718 "util/configparser.c" break; - case 484: -#line 2655 "./util/configparser.y" + case 486: +#line 2671 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5726 "util/configparser.c" - break; - - case 495: -#line 2666 "./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 5739 "util/configparser.c" - break; - - case 496: -#line 2676 "./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 5751 "util/configparser.c" break; case 497: -#line 2685 "./util/configparser.y" +#line 2682 "./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"); + OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->remote_control_enable = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5761 "util/configparser.c" break; case 498: #line 2692 "./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)); + OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("control port number expected"); + else cfg_parser->cfg->control_port = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 5771 "util/configparser.c" break; case 499: -#line 2699 "./util/configparser.y" +#line 2701 "./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); + OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 5781 "util/configparser.c" break; case 500: -#line 2706 "./util/configparser.y" +#line 2708 "./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); + OUTYY(("P(control_use_cert:%s)\n", (yyvsp[(2) - (2)].str))); + cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5791 "util/configparser.c" break; case 501: -#line 2713 "./util/configparser.y" +#line 2715 "./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); + OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->server_key_file); + cfg_parser->cfg->server_key_file = (yyvsp[(2) - (2)].str); } -#line 5801 "util/configparser.c" break; case 502: -#line 2720 "./util/configparser.y" +#line 2722 "./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); + OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->server_cert_file); + cfg_parser->cfg->server_cert_file = (yyvsp[(2) - (2)].str); } -#line 5811 "util/configparser.c" break; case 503: -#line 2727 "./util/configparser.y" +#line 2729 "./util/configparser.y" + { + OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->control_key_file); + cfg_parser->cfg->control_key_file = (yyvsp[(2) - (2)].str); + } + break; + + case 504: +#line 2736 "./util/configparser.y" + { + OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->control_cert_file); + cfg_parser->cfg->control_cert_file = (yyvsp[(2) - (2)].str); + } + break; + + case 505: +#line 2743 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5819 "util/configparser.c" - break; - - case 524: -#line 2747 "./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 5831 "util/configparser.c" - break; - - case 525: -#line 2756 "./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 5841 "util/configparser.c" break; case 526: #line 2763 "./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); + OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5851 "util/configparser.c" break; case 527: -#line 2770 "./util/configparser.y" +#line 2772 "./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)); + OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_socket_path); + cfg_parser->cfg->dnstap_socket_path = (yyvsp[(2) - (2)].str); } -#line 5863 "util/configparser.c" break; case 528: #line 2779 "./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); + OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_ip); + cfg_parser->cfg->dnstap_ip = (yyvsp[(2) - (2)].str); } -#line 5873 "util/configparser.c" break; case 529: #line 2786 "./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); + OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5883 "util/configparser.c" break; case 530: -#line 2793 "./util/configparser.y" +#line 2795 "./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); + OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_tls_server_name); + cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[(2) - (2)].str); } -#line 5893 "util/configparser.c" break; case 531: -#line 2800 "./util/configparser.y" +#line 2802 "./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); + OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_tls_cert_bundle); + cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[(2) - (2)].str); } -#line 5903 "util/configparser.c" break; case 532: -#line 2807 "./util/configparser.y" +#line 2809 "./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)); + OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_tls_client_key_file); + cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[(2) - (2)].str); } -#line 5915 "util/configparser.c" break; case 533: #line 2816 "./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)); + OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_tls_client_cert_file); + cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[(2) - (2)].str); } -#line 5927 "util/configparser.c" break; case 534: -#line 2825 "./util/configparser.y" +#line 2823 "./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); + OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5937 "util/configparser.c" break; case 535: #line 2832 "./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); + OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5947 "util/configparser.c" break; case 536: -#line 2839 "./util/configparser.y" +#line 2841 "./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)); + OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_identity); + cfg_parser->cfg->dnstap_identity = (yyvsp[(2) - (2)].str); } -#line 5960 "util/configparser.c" break; case 537: -#line 2849 "./util/configparser.y" +#line 2848 "./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)); + OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnstap_version); + cfg_parser->cfg->dnstap_version = (yyvsp[(2) - (2)].str); } -#line 5973 "util/configparser.c" break; case 538: -#line 2859 "./util/configparser.y" +#line 2855 "./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) + OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_client_query_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->dnstap_log_resolver_query_messages = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5986 "util/configparser.c" break; case 539: -#line 2869 "./util/configparser.y" +#line 2865 "./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) + OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_client_response_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->dnstap_log_resolver_response_messages = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 5999 "util/configparser.c" break; case 540: -#line 2879 "./util/configparser.y" +#line 2875 "./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) + OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_forwarder_query_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->dnstap_log_client_query_messages = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 6012 "util/configparser.c" break; case 541: -#line 2889 "./util/configparser.y" +#line 2885 "./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) + OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_forwarder_response_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); + else cfg_parser->cfg->dnstap_log_client_response_messages = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 6025 "util/configparser.c" break; case 542: -#line 2899 "./util/configparser.y" +#line 2895 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_forwarder_query_messages = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 543: +#line 2905 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_forwarder_response_messages = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 544: +#line 2915 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6033 "util/configparser.c" - break; - - case 546: -#line 2908 "./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 6043 "util/configparser.c" - break; - - case 547: -#line 2914 "./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 6056 "util/configparser.c" break; case 548: #line 2924 "./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); + OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); } -#line 6066 "util/configparser.c" break; case 549: -#line 2931 "./util/configparser.y" +#line 2930 "./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"); + OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[(2) - (2)].str))); + if (strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->disable_dnssec_lame_check = + (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 6078 "util/configparser.c" break; case 550: #line 2940 "./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"); + OUTYY(("P(server_log_identity:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->log_identity); + cfg_parser->cfg->log_identity = (yyvsp[(2) - (2)].str); } -#line 6089 "util/configparser.c" break; case 551: -#line 2948 "./util/configparser.y" +#line 2947 "./util/configparser.y" + { + OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + validate_respip_action((yyvsp[(3) - (3)].str)); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, + (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding response-ip"); + } + break; + + case 552: +#line 2956 "./util/configparser.y" + { + OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[(2) - (3)].str))); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, + (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding response-ip-data"); + } + break; + + case 553: +#line 2964 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6097 "util/configparser.c" - break; - - case 564: -#line 2964 "./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 6109 "util/configparser.c" - break; - - case 565: -#line 2974 "./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 6121 "util/configparser.c" break; case 566: -#line 2983 "./util/configparser.y" +#line 2980 "./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); + OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); } -#line 6131 "util/configparser.c" break; case 567: #line 2990 "./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"); + OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); } -#line 6143 "util/configparser.c" break; case 568: #line 2999 "./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"); + OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->dnscrypt_provider); + cfg_parser->cfg->dnscrypt_provider = (yyvsp[(2) - (2)].str); } -#line 6153 "util/configparser.c" break; case 569: #line 3006 "./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"); + OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[(2) - (2)].str))); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[(2) - (2)].str))) + log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[(2) - (2)].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[(2) - (2)].str))) + fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6165 "util/configparser.c" break; case 570: #line 3015 "./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 6176 "util/configparser.c" + OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[(2) - (2)].str))) + fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); + } break; case 571: -#line 3023 "./util/configparser.y" +#line 3022 "./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 6192 "util/configparser.c" + OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[(2) - (2)].str))); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[(2) - (2)].str))) + log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[(2) - (2)].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[(2) - (2)].str))) + fatal_exit("out of memory adding dnscrypt-secret-key"); + } break; case 572: -#line 3036 "./util/configparser.y" +#line 3031 "./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)) + OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 6203 "util/configparser.c" break; case 573: -#line 3044 "./util/configparser.y" +#line 3039 "./util/configparser.y" { - OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) + OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].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)) + cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) yyerror("must be a power of 2"); } - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); } -#line 6219 "util/configparser.c" break; case 574: -#line 3057 "./util/configparser.y" +#line 3052 "./util/configparser.y" + { + OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 575: +#line 3060 "./util/configparser.y" + { + OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); + } + break; + + case 576: +#line 3073 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6227 "util/configparser.c" - break; - - case 582: -#line 3067 "./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 6242 "util/configparser.c" - break; - - case 583: -#line 3079 "./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 6257 "util/configparser.c" break; case 584: -#line 3091 "./util/configparser.y" +#line 3083 "./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); + #ifdef USE_CACHEDB + OUTYY(("P(backend:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->cachedb_backend); + cfg_parser->cfg->cachedb_backend = (yyvsp[(2) - (2)].str); #else - OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); - free((yyvsp[0].str)); + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + free((yyvsp[(2) - (2)].str)); #endif } -#line 6272 "util/configparser.c" break; case 585: -#line 3103 "./util/configparser.y" +#line 3095 "./util/configparser.y" + { + #ifdef USE_CACHEDB + OUTYY(("P(secret-seed:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->cachedb_secret); + cfg_parser->cfg->cachedb_secret = (yyvsp[(2) - (2)].str); + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + free((yyvsp[(2) - (2)].str)); + #endif + } + break; + + case 586: +#line 3107 "./util/configparser.y" + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_server_host:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->redis_server_host); + cfg_parser->cfg->redis_server_host = (yyvsp[(2) - (2)].str); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + free((yyvsp[(2) - (2)].str)); + #endif + } + break; + + case 587: +#line 3119 "./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)); + OUTYY(("P(redis_server_port:%s)\n", (yyvsp[(2) - (2)].str))); + port = atoi((yyvsp[(2) - (2)].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)); + free((yyvsp[(2) - (2)].str)); } -#line 6290 "util/configparser.c" - break; - - case 586: -#line 3118 "./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 6306 "util/configparser.c" - break; - - case 587: -#line 3131 "./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 6320 "util/configparser.c" break; case 588: -#line 3142 "./util/configparser.y" +#line 3134 "./util/configparser.y" + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_timeout:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("redis timeout value expected"); + else cfg_parser->cfg->redis_timeout = atoi((yyvsp[(2) - (2)].str)); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free((yyvsp[(2) - (2)].str)); + } + break; + + case 589: +#line 3147 "./util/configparser.y" + { + OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if (atoi((yyvsp[(3) - (3)].str)) < 0) + yyerror("positive number expected"); + else { + if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding tcp connection limit"); + } + } + break; + + case 590: +#line 3158 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6328 "util/configparser.c" break; - case 593: -#line 3151 "./util/configparser.y" + case 595: +#line 3167 "./util/configparser.y" { #ifdef USE_IPSET - OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); + OUTYY(("P(name-v4:%s)\n", (yyvsp[(2) - (2)].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); + cfg_parser->cfg->ipset_name_v4 = (yyvsp[(2) - (2)].str); #else OUTYY(("P(Compiled without ipset, ignoring)\n")); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); #endif } -#line 6346 "util/configparser.c" break; - case 594: -#line 3166 "./util/configparser.y" + case 596: +#line 3182 "./util/configparser.y" { #ifdef USE_IPSET - OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); + OUTYY(("P(name-v6:%s)\n", (yyvsp[(2) - (2)].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); + cfg_parser->cfg->ipset_name_v6 = (yyvsp[(2) - (2)].str); #else OUTYY(("P(Compiled without ipset, ignoring)\n")); - free((yyvsp[0].str)); + free((yyvsp[(2) - (2)].str)); #endif } -#line 6364 "util/configparser.c" break; -#line 6368 "util/configparser.c" - +/* Line 1267 of yacc.c. */ +#line 6411 "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 ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); @@ -6387,28 +6418,26 @@ yyreduce: *++yyvsp = yyval; - /* Now 'shift' the result of the reduction. Determine what state + + /* 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]); - } + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ +/*------------------------------------. +| 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 ? YYEMPTY : YYTRANSLATE (yychar); - /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { @@ -6416,36 +6445,37 @@ yyerrlab: #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } } -# undef YYSYNTAX_ERROR #endif } @@ -6453,24 +6483,24 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } } - /* Else will try to reuse lookahead token after shifting the error + /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; @@ -6479,12 +6509,14 @@ yyerrlab: | 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 + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -6497,37 +6529,38 @@ yyerrorlab: | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yydestruct ("Error: popping", - yystos[yystate], yyvsp); + yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + if (yyn == YYFINAL) + YYACCEPT; + *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -6544,7 +6577,6 @@ yyacceptlab: yyresult = 0; goto yyreturn; - /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -6552,8 +6584,7 @@ yyabortlab: yyresult = 1; goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE +#ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -6563,27 +6594,18 @@ yyexhaustedlab: /* Fall through. */ #endif - -/*-----------------------------------------------------. -| yyreturn -- parsing is finished, return the result. | -`-----------------------------------------------------*/ 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 + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -6594,9 +6616,12 @@ yyreturn: if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - return yyresult; + /* Make sure YYID is used. */ + return YYID (yyresult); } -#line 3180 "./util/configparser.y" + + +#line 3196 "./util/configparser.y" /* parse helper routines could be here */ @@ -6618,3 +6643,4 @@ validate_respip_action(const char* action) } + diff --git a/util/configparser.h b/util/configparser.h index aaf822223..194bf1069 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,14 +1,14 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ -/* Bison interface for Yacc-like parsers in C +/* Skeleton interface for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify + 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. + the Free Software Foundation; either version 2, 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 @@ -16,7 +16,9 @@ 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 . */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -31,307 +33,296 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - -#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 type. */ +/* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - enum yytokentype - { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_SERVER = 266, - VAR_VERBOSITY = 267, - VAR_NUM_THREADS = 268, - VAR_PORT = 269, - VAR_OUTGOING_RANGE = 270, - VAR_INTERFACE = 271, - VAR_PREFER_IP4 = 272, - VAR_DO_IP4 = 273, - VAR_DO_IP6 = 274, - VAR_PREFER_IP6 = 275, - VAR_DO_UDP = 276, - VAR_DO_TCP = 277, - VAR_TCP_MSS = 278, - VAR_OUTGOING_TCP_MSS = 279, - VAR_TCP_IDLE_TIMEOUT = 280, - VAR_EDNS_TCP_KEEPALIVE = 281, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, - VAR_CHROOT = 283, - VAR_USERNAME = 284, - VAR_DIRECTORY = 285, - VAR_LOGFILE = 286, - VAR_PIDFILE = 287, - VAR_MSG_CACHE_SIZE = 288, - VAR_MSG_CACHE_SLABS = 289, - VAR_NUM_QUERIES_PER_THREAD = 290, - VAR_RRSET_CACHE_SIZE = 291, - VAR_RRSET_CACHE_SLABS = 292, - VAR_OUTGOING_NUM_TCP = 293, - VAR_INFRA_HOST_TTL = 294, - VAR_INFRA_LAME_TTL = 295, - VAR_INFRA_CACHE_SLABS = 296, - VAR_INFRA_CACHE_NUMHOSTS = 297, - VAR_INFRA_CACHE_LAME_SIZE = 298, - VAR_NAME = 299, - VAR_STUB_ZONE = 300, - VAR_STUB_HOST = 301, - VAR_STUB_ADDR = 302, - VAR_TARGET_FETCH_POLICY = 303, - VAR_HARDEN_SHORT_BUFSIZE = 304, - VAR_HARDEN_LARGE_QUERIES = 305, - VAR_FORWARD_ZONE = 306, - VAR_FORWARD_HOST = 307, - VAR_FORWARD_ADDR = 308, - VAR_DO_NOT_QUERY_ADDRESS = 309, - VAR_HIDE_IDENTITY = 310, - VAR_HIDE_VERSION = 311, - VAR_IDENTITY = 312, - VAR_VERSION = 313, - VAR_HARDEN_GLUE = 314, - VAR_MODULE_CONF = 315, - VAR_TRUST_ANCHOR_FILE = 316, - VAR_TRUST_ANCHOR = 317, - VAR_VAL_OVERRIDE_DATE = 318, - VAR_BOGUS_TTL = 319, - VAR_VAL_CLEAN_ADDITIONAL = 320, - VAR_VAL_PERMISSIVE_MODE = 321, - VAR_INCOMING_NUM_TCP = 322, - VAR_MSG_BUFFER_SIZE = 323, - VAR_KEY_CACHE_SIZE = 324, - VAR_KEY_CACHE_SLABS = 325, - VAR_TRUSTED_KEYS_FILE = 326, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, - VAR_USE_SYSLOG = 328, - VAR_OUTGOING_INTERFACE = 329, - VAR_ROOT_HINTS = 330, - VAR_DO_NOT_QUERY_LOCALHOST = 331, - VAR_CACHE_MAX_TTL = 332, - VAR_HARDEN_DNSSEC_STRIPPED = 333, - VAR_ACCESS_CONTROL = 334, - VAR_LOCAL_ZONE = 335, - VAR_LOCAL_DATA = 336, - VAR_INTERFACE_AUTOMATIC = 337, - VAR_STATISTICS_INTERVAL = 338, - VAR_DO_DAEMONIZE = 339, - VAR_USE_CAPS_FOR_ID = 340, - VAR_STATISTICS_CUMULATIVE = 341, - VAR_OUTGOING_PORT_PERMIT = 342, - VAR_OUTGOING_PORT_AVOID = 343, - VAR_DLV_ANCHOR_FILE = 344, - VAR_DLV_ANCHOR = 345, - VAR_NEG_CACHE_SIZE = 346, - VAR_HARDEN_REFERRAL_PATH = 347, - VAR_PRIVATE_ADDRESS = 348, - VAR_PRIVATE_DOMAIN = 349, - VAR_REMOTE_CONTROL = 350, - VAR_CONTROL_ENABLE = 351, - VAR_CONTROL_INTERFACE = 352, - VAR_CONTROL_PORT = 353, - VAR_SERVER_KEY_FILE = 354, - VAR_SERVER_CERT_FILE = 355, - VAR_CONTROL_KEY_FILE = 356, - VAR_CONTROL_CERT_FILE = 357, - VAR_CONTROL_USE_CERT = 358, - VAR_EXTENDED_STATISTICS = 359, - VAR_LOCAL_DATA_PTR = 360, - VAR_JOSTLE_TIMEOUT = 361, - VAR_STUB_PRIME = 362, - VAR_UNWANTED_REPLY_THRESHOLD = 363, - VAR_LOG_TIME_ASCII = 364, - VAR_DOMAIN_INSECURE = 365, - VAR_PYTHON = 366, - VAR_PYTHON_SCRIPT = 367, - VAR_VAL_SIG_SKEW_MIN = 368, - VAR_VAL_SIG_SKEW_MAX = 369, - VAR_CACHE_MIN_TTL = 370, - VAR_VAL_LOG_LEVEL = 371, - VAR_AUTO_TRUST_ANCHOR_FILE = 372, - VAR_KEEP_MISSING = 373, - VAR_ADD_HOLDDOWN = 374, - VAR_DEL_HOLDDOWN = 375, - VAR_SO_RCVBUF = 376, - VAR_EDNS_BUFFER_SIZE = 377, - VAR_PREFETCH = 378, - VAR_PREFETCH_KEY = 379, - VAR_SO_SNDBUF = 380, - VAR_SO_REUSEPORT = 381, - VAR_HARDEN_BELOW_NXDOMAIN = 382, - VAR_IGNORE_CD_FLAG = 383, - VAR_LOG_QUERIES = 384, - VAR_LOG_REPLIES = 385, - VAR_LOG_LOCAL_ACTIONS = 386, - VAR_TCP_UPSTREAM = 387, - VAR_SSL_UPSTREAM = 388, - VAR_SSL_SERVICE_KEY = 389, - VAR_SSL_SERVICE_PEM = 390, - VAR_SSL_PORT = 391, - VAR_FORWARD_FIRST = 392, - VAR_STUB_SSL_UPSTREAM = 393, - VAR_FORWARD_SSL_UPSTREAM = 394, - VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_DISABLE_DNSSEC_LAME_CHECK = 431, - VAR_IP_RATELIMIT = 432, - VAR_IP_RATELIMIT_SLABS = 433, - VAR_IP_RATELIMIT_SIZE = 434, - VAR_RATELIMIT = 435, - VAR_RATELIMIT_SLABS = 436, - VAR_RATELIMIT_SIZE = 437, - VAR_RATELIMIT_FOR_DOMAIN = 438, - VAR_RATELIMIT_BELOW_DOMAIN = 439, - VAR_IP_RATELIMIT_FACTOR = 440, - VAR_RATELIMIT_FACTOR = 441, - VAR_SEND_CLIENT_SUBNET = 442, - VAR_CLIENT_SUBNET_ZONE = 443, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 444, - VAR_CLIENT_SUBNET_OPCODE = 445, - VAR_MAX_CLIENT_SUBNET_IPV4 = 446, - VAR_MAX_CLIENT_SUBNET_IPV6 = 447, - VAR_MIN_CLIENT_SUBNET_IPV4 = 448, - VAR_MIN_CLIENT_SUBNET_IPV6 = 449, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 451, - VAR_CAPS_WHITELIST = 452, - VAR_CACHE_MAX_NEGATIVE_TTL = 453, - VAR_PERMIT_SMALL_HOLDDOWN = 454, - VAR_QNAME_MINIMISATION = 455, - VAR_QNAME_MINIMISATION_STRICT = 456, - VAR_IP_FREEBIND = 457, - VAR_DEFINE_TAG = 458, - VAR_LOCAL_ZONE_TAG = 459, - VAR_ACCESS_CONTROL_TAG = 460, - VAR_LOCAL_ZONE_OVERRIDE = 461, - VAR_ACCESS_CONTROL_TAG_ACTION = 462, - VAR_ACCESS_CONTROL_TAG_DATA = 463, - VAR_VIEW = 464, - VAR_ACCESS_CONTROL_VIEW = 465, - VAR_VIEW_FIRST = 466, - VAR_SERVE_EXPIRED = 467, - VAR_SERVE_EXPIRED_TTL = 468, - VAR_SERVE_EXPIRED_TTL_RESET = 469, - VAR_SERVE_EXPIRED_REPLY_TTL = 470, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 471, - VAR_FAKE_DSA = 472, - VAR_FAKE_SHA1 = 473, - VAR_LOG_IDENTITY = 474, - VAR_HIDE_TRUSTANCHOR = 475, - VAR_TRUST_ANCHOR_SIGNALING = 476, - VAR_AGGRESSIVE_NSEC = 477, - VAR_USE_SYSTEMD = 478, - VAR_SHM_ENABLE = 479, - VAR_SHM_KEY = 480, - VAR_ROOT_KEY_SENTINEL = 481, - VAR_DNSCRYPT = 482, - VAR_DNSCRYPT_ENABLE = 483, - VAR_DNSCRYPT_PORT = 484, - VAR_DNSCRYPT_PROVIDER = 485, - VAR_DNSCRYPT_SECRET_KEY = 486, - VAR_DNSCRYPT_PROVIDER_CERT = 487, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 488, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 490, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 491, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 492, - VAR_IPSECMOD_ENABLED = 493, - VAR_IPSECMOD_HOOK = 494, - VAR_IPSECMOD_IGNORE_BOGUS = 495, - VAR_IPSECMOD_MAX_TTL = 496, - VAR_IPSECMOD_WHITELIST = 497, - VAR_IPSECMOD_STRICT = 498, - VAR_CACHEDB = 499, - VAR_CACHEDB_BACKEND = 500, - VAR_CACHEDB_SECRETSEED = 501, - VAR_CACHEDB_REDISHOST = 502, - VAR_CACHEDB_REDISPORT = 503, - VAR_CACHEDB_REDISTIMEOUT = 504, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 505, - VAR_FOR_UPSTREAM = 506, - VAR_AUTH_ZONE = 507, - VAR_ZONEFILE = 508, - VAR_MASTER = 509, - VAR_URL = 510, - VAR_FOR_DOWNSTREAM = 511, - VAR_FALLBACK_ENABLED = 512, - VAR_TLS_ADDITIONAL_PORT = 513, - VAR_LOW_RTT = 514, - VAR_LOW_RTT_PERMIL = 515, - VAR_FAST_SERVER_PERMIL = 516, - VAR_FAST_SERVER_NUM = 517, - VAR_ALLOW_NOTIFY = 518, - VAR_TLS_WIN_CERT = 519, - VAR_TCP_CONNECTION_LIMIT = 520, - VAR_FORWARD_NO_CACHE = 521, - VAR_STUB_NO_CACHE = 522, - VAR_LOG_SERVFAIL = 523, - VAR_DENY_ANY = 524, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 525, - VAR_LOG_TAG_QUERYREPLY = 526, - VAR_STREAM_WAIT_SIZE = 527, - VAR_TLS_CIPHERS = 528, - VAR_TLS_CIPHERSUITES = 529, - VAR_IPSET = 530, - VAR_IPSET_NAME_V4 = 531, - VAR_IPSET_NAME_V6 = 532, - VAR_TLS_SESSION_TICKET_KEYS = 533, - VAR_RPZ = 534, - VAR_TAGS = 535, - VAR_RPZ_ACTION_OVERRIDE = 536, - VAR_RPZ_CNAME_OVERRIDE = 537, - VAR_RPZ_LOG = 538, - VAR_RPZ_LOG_NAME = 539 - }; + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + SPACE = 258, + LETTER = 259, + NEWLINE = 260, + COMMENT = 261, + COLON = 262, + ANY = 263, + ZONESTR = 264, + STRING_ARG = 265, + VAR_SERVER = 266, + VAR_VERBOSITY = 267, + VAR_NUM_THREADS = 268, + VAR_PORT = 269, + VAR_OUTGOING_RANGE = 270, + VAR_INTERFACE = 271, + VAR_PREFER_IP4 = 272, + VAR_DO_IP4 = 273, + VAR_DO_IP6 = 274, + VAR_PREFER_IP6 = 275, + VAR_DO_UDP = 276, + VAR_DO_TCP = 277, + VAR_TCP_MSS = 278, + VAR_OUTGOING_TCP_MSS = 279, + VAR_TCP_IDLE_TIMEOUT = 280, + VAR_EDNS_TCP_KEEPALIVE = 281, + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, + VAR_CHROOT = 283, + VAR_USERNAME = 284, + VAR_DIRECTORY = 285, + VAR_LOGFILE = 286, + VAR_PIDFILE = 287, + VAR_MSG_CACHE_SIZE = 288, + VAR_MSG_CACHE_SLABS = 289, + VAR_NUM_QUERIES_PER_THREAD = 290, + VAR_RRSET_CACHE_SIZE = 291, + VAR_RRSET_CACHE_SLABS = 292, + VAR_OUTGOING_NUM_TCP = 293, + VAR_INFRA_HOST_TTL = 294, + VAR_INFRA_LAME_TTL = 295, + VAR_INFRA_CACHE_SLABS = 296, + VAR_INFRA_CACHE_NUMHOSTS = 297, + VAR_INFRA_CACHE_LAME_SIZE = 298, + VAR_NAME = 299, + VAR_STUB_ZONE = 300, + VAR_STUB_HOST = 301, + VAR_STUB_ADDR = 302, + VAR_TARGET_FETCH_POLICY = 303, + VAR_HARDEN_SHORT_BUFSIZE = 304, + VAR_HARDEN_LARGE_QUERIES = 305, + VAR_FORWARD_ZONE = 306, + VAR_FORWARD_HOST = 307, + VAR_FORWARD_ADDR = 308, + VAR_DO_NOT_QUERY_ADDRESS = 309, + VAR_HIDE_IDENTITY = 310, + VAR_HIDE_VERSION = 311, + VAR_IDENTITY = 312, + VAR_VERSION = 313, + VAR_HARDEN_GLUE = 314, + VAR_MODULE_CONF = 315, + VAR_TRUST_ANCHOR_FILE = 316, + VAR_TRUST_ANCHOR = 317, + VAR_VAL_OVERRIDE_DATE = 318, + VAR_BOGUS_TTL = 319, + VAR_VAL_CLEAN_ADDITIONAL = 320, + VAR_VAL_PERMISSIVE_MODE = 321, + VAR_INCOMING_NUM_TCP = 322, + VAR_MSG_BUFFER_SIZE = 323, + VAR_KEY_CACHE_SIZE = 324, + VAR_KEY_CACHE_SLABS = 325, + VAR_TRUSTED_KEYS_FILE = 326, + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, + VAR_USE_SYSLOG = 328, + VAR_OUTGOING_INTERFACE = 329, + VAR_ROOT_HINTS = 330, + VAR_DO_NOT_QUERY_LOCALHOST = 331, + VAR_CACHE_MAX_TTL = 332, + VAR_HARDEN_DNSSEC_STRIPPED = 333, + VAR_ACCESS_CONTROL = 334, + VAR_LOCAL_ZONE = 335, + VAR_LOCAL_DATA = 336, + VAR_INTERFACE_AUTOMATIC = 337, + VAR_STATISTICS_INTERVAL = 338, + VAR_DO_DAEMONIZE = 339, + VAR_USE_CAPS_FOR_ID = 340, + VAR_STATISTICS_CUMULATIVE = 341, + VAR_OUTGOING_PORT_PERMIT = 342, + VAR_OUTGOING_PORT_AVOID = 343, + VAR_DLV_ANCHOR_FILE = 344, + VAR_DLV_ANCHOR = 345, + VAR_NEG_CACHE_SIZE = 346, + VAR_HARDEN_REFERRAL_PATH = 347, + VAR_PRIVATE_ADDRESS = 348, + VAR_PRIVATE_DOMAIN = 349, + VAR_REMOTE_CONTROL = 350, + VAR_CONTROL_ENABLE = 351, + VAR_CONTROL_INTERFACE = 352, + VAR_CONTROL_PORT = 353, + VAR_SERVER_KEY_FILE = 354, + VAR_SERVER_CERT_FILE = 355, + VAR_CONTROL_KEY_FILE = 356, + VAR_CONTROL_CERT_FILE = 357, + VAR_CONTROL_USE_CERT = 358, + VAR_EXTENDED_STATISTICS = 359, + VAR_LOCAL_DATA_PTR = 360, + VAR_JOSTLE_TIMEOUT = 361, + VAR_STUB_PRIME = 362, + VAR_UNWANTED_REPLY_THRESHOLD = 363, + VAR_LOG_TIME_ASCII = 364, + VAR_DOMAIN_INSECURE = 365, + VAR_PYTHON = 366, + VAR_PYTHON_SCRIPT = 367, + VAR_VAL_SIG_SKEW_MIN = 368, + VAR_VAL_SIG_SKEW_MAX = 369, + VAR_CACHE_MIN_TTL = 370, + VAR_VAL_LOG_LEVEL = 371, + VAR_AUTO_TRUST_ANCHOR_FILE = 372, + VAR_KEEP_MISSING = 373, + VAR_ADD_HOLDDOWN = 374, + VAR_DEL_HOLDDOWN = 375, + VAR_SO_RCVBUF = 376, + VAR_EDNS_BUFFER_SIZE = 377, + VAR_PREFETCH = 378, + VAR_PREFETCH_KEY = 379, + VAR_SO_SNDBUF = 380, + VAR_SO_REUSEPORT = 381, + VAR_HARDEN_BELOW_NXDOMAIN = 382, + VAR_IGNORE_CD_FLAG = 383, + VAR_LOG_QUERIES = 384, + VAR_LOG_REPLIES = 385, + VAR_LOG_LOCAL_ACTIONS = 386, + VAR_TCP_UPSTREAM = 387, + VAR_SSL_UPSTREAM = 388, + VAR_SSL_SERVICE_KEY = 389, + VAR_SSL_SERVICE_PEM = 390, + VAR_SSL_PORT = 391, + VAR_FORWARD_FIRST = 392, + VAR_STUB_SSL_UPSTREAM = 393, + VAR_FORWARD_SSL_UPSTREAM = 394, + VAR_TLS_CERT_BUNDLE = 395, + VAR_STUB_FIRST = 396, + VAR_MINIMAL_RESPONSES = 397, + VAR_RRSET_ROUNDROBIN = 398, + VAR_MAX_UDP_SIZE = 399, + VAR_DELAY_CLOSE = 400, + VAR_UNBLOCK_LAN_ZONES = 401, + VAR_INSECURE_LAN_ZONES = 402, + VAR_INFRA_CACHE_MIN_RTT = 403, + VAR_DNS64_PREFIX = 404, + VAR_DNS64_SYNTHALL = 405, + VAR_DNS64_IGNORE_AAAA = 406, + VAR_DNSTAP = 407, + VAR_DNSTAP_ENABLE = 408, + VAR_DNSTAP_SOCKET_PATH = 409, + VAR_DNSTAP_IP = 410, + VAR_DNSTAP_TLS = 411, + VAR_DNSTAP_TLS_SERVER_NAME = 412, + VAR_DNSTAP_TLS_CERT_BUNDLE = 413, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, + VAR_DNSTAP_SEND_IDENTITY = 416, + VAR_DNSTAP_SEND_VERSION = 417, + VAR_DNSTAP_IDENTITY = 418, + VAR_DNSTAP_VERSION = 419, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, + VAR_RESPONSE_IP_TAG = 426, + VAR_RESPONSE_IP = 427, + VAR_RESPONSE_IP_DATA = 428, + VAR_HARDEN_ALGO_DOWNGRADE = 429, + VAR_IP_TRANSPARENT = 430, + VAR_IP_DSCP = 431, + VAR_DISABLE_DNSSEC_LAME_CHECK = 432, + VAR_IP_RATELIMIT = 433, + VAR_IP_RATELIMIT_SLABS = 434, + VAR_IP_RATELIMIT_SIZE = 435, + VAR_RATELIMIT = 436, + VAR_RATELIMIT_SLABS = 437, + VAR_RATELIMIT_SIZE = 438, + VAR_RATELIMIT_FOR_DOMAIN = 439, + VAR_RATELIMIT_BELOW_DOMAIN = 440, + VAR_IP_RATELIMIT_FACTOR = 441, + VAR_RATELIMIT_FACTOR = 442, + VAR_SEND_CLIENT_SUBNET = 443, + VAR_CLIENT_SUBNET_ZONE = 444, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, + VAR_CLIENT_SUBNET_OPCODE = 446, + VAR_MAX_CLIENT_SUBNET_IPV4 = 447, + VAR_MAX_CLIENT_SUBNET_IPV6 = 448, + VAR_MIN_CLIENT_SUBNET_IPV4 = 449, + VAR_MIN_CLIENT_SUBNET_IPV6 = 450, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, + VAR_CAPS_WHITELIST = 453, + VAR_CACHE_MAX_NEGATIVE_TTL = 454, + VAR_PERMIT_SMALL_HOLDDOWN = 455, + VAR_QNAME_MINIMISATION = 456, + VAR_QNAME_MINIMISATION_STRICT = 457, + VAR_IP_FREEBIND = 458, + VAR_DEFINE_TAG = 459, + VAR_LOCAL_ZONE_TAG = 460, + VAR_ACCESS_CONTROL_TAG = 461, + VAR_LOCAL_ZONE_OVERRIDE = 462, + VAR_ACCESS_CONTROL_TAG_ACTION = 463, + VAR_ACCESS_CONTROL_TAG_DATA = 464, + VAR_VIEW = 465, + VAR_ACCESS_CONTROL_VIEW = 466, + VAR_VIEW_FIRST = 467, + VAR_SERVE_EXPIRED = 468, + VAR_SERVE_EXPIRED_TTL = 469, + VAR_SERVE_EXPIRED_TTL_RESET = 470, + VAR_SERVE_EXPIRED_REPLY_TTL = 471, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, + VAR_FAKE_DSA = 473, + VAR_FAKE_SHA1 = 474, + VAR_LOG_IDENTITY = 475, + VAR_HIDE_TRUSTANCHOR = 476, + VAR_TRUST_ANCHOR_SIGNALING = 477, + VAR_AGGRESSIVE_NSEC = 478, + VAR_USE_SYSTEMD = 479, + VAR_SHM_ENABLE = 480, + VAR_SHM_KEY = 481, + VAR_ROOT_KEY_SENTINEL = 482, + VAR_DNSCRYPT = 483, + VAR_DNSCRYPT_ENABLE = 484, + VAR_DNSCRYPT_PORT = 485, + VAR_DNSCRYPT_PROVIDER = 486, + VAR_DNSCRYPT_SECRET_KEY = 487, + VAR_DNSCRYPT_PROVIDER_CERT = 488, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, + VAR_IPSECMOD_ENABLED = 494, + VAR_IPSECMOD_HOOK = 495, + VAR_IPSECMOD_IGNORE_BOGUS = 496, + VAR_IPSECMOD_MAX_TTL = 497, + VAR_IPSECMOD_WHITELIST = 498, + VAR_IPSECMOD_STRICT = 499, + VAR_CACHEDB = 500, + VAR_CACHEDB_BACKEND = 501, + VAR_CACHEDB_SECRETSEED = 502, + VAR_CACHEDB_REDISHOST = 503, + VAR_CACHEDB_REDISPORT = 504, + VAR_CACHEDB_REDISTIMEOUT = 505, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, + VAR_FOR_UPSTREAM = 507, + VAR_AUTH_ZONE = 508, + VAR_ZONEFILE = 509, + VAR_MASTER = 510, + VAR_URL = 511, + VAR_FOR_DOWNSTREAM = 512, + VAR_FALLBACK_ENABLED = 513, + VAR_TLS_ADDITIONAL_PORT = 514, + VAR_LOW_RTT = 515, + VAR_LOW_RTT_PERMIL = 516, + VAR_FAST_SERVER_PERMIL = 517, + VAR_FAST_SERVER_NUM = 518, + VAR_ALLOW_NOTIFY = 519, + VAR_TLS_WIN_CERT = 520, + VAR_TCP_CONNECTION_LIMIT = 521, + VAR_FORWARD_NO_CACHE = 522, + VAR_STUB_NO_CACHE = 523, + VAR_LOG_SERVFAIL = 524, + VAR_DENY_ANY = 525, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, + VAR_LOG_TAG_QUERYREPLY = 527, + VAR_STREAM_WAIT_SIZE = 528, + VAR_TLS_CIPHERS = 529, + VAR_TLS_CIPHERSUITES = 530, + VAR_IPSET = 531, + VAR_IPSET_NAME_V4 = 532, + VAR_IPSET_NAME_V6 = 533, + VAR_TLS_SESSION_TICKET_KEYS = 534, + VAR_RPZ = 535, + VAR_TAGS = 536, + VAR_RPZ_ACTION_OVERRIDE = 537, + VAR_RPZ_CNAME_OVERRIDE = 538, + VAR_RPZ_LOG = 539, + VAR_RPZ_LOG_NAME = 540 + }; #endif /* Tokens. */ #define SPACE 258 @@ -507,135 +498,133 @@ extern int yydebug; #define VAR_RESPONSE_IP_DATA 428 #define VAR_HARDEN_ALGO_DOWNGRADE 429 #define VAR_IP_TRANSPARENT 430 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 431 -#define VAR_IP_RATELIMIT 432 -#define VAR_IP_RATELIMIT_SLABS 433 -#define VAR_IP_RATELIMIT_SIZE 434 -#define VAR_RATELIMIT 435 -#define VAR_RATELIMIT_SLABS 436 -#define VAR_RATELIMIT_SIZE 437 -#define VAR_RATELIMIT_FOR_DOMAIN 438 -#define VAR_RATELIMIT_BELOW_DOMAIN 439 -#define VAR_IP_RATELIMIT_FACTOR 440 -#define VAR_RATELIMIT_FACTOR 441 -#define VAR_SEND_CLIENT_SUBNET 442 -#define VAR_CLIENT_SUBNET_ZONE 443 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444 -#define VAR_CLIENT_SUBNET_OPCODE 445 -#define VAR_MAX_CLIENT_SUBNET_IPV4 446 -#define VAR_MAX_CLIENT_SUBNET_IPV6 447 -#define VAR_MIN_CLIENT_SUBNET_IPV4 448 -#define VAR_MIN_CLIENT_SUBNET_IPV6 449 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 451 -#define VAR_CAPS_WHITELIST 452 -#define VAR_CACHE_MAX_NEGATIVE_TTL 453 -#define VAR_PERMIT_SMALL_HOLDDOWN 454 -#define VAR_QNAME_MINIMISATION 455 -#define VAR_QNAME_MINIMISATION_STRICT 456 -#define VAR_IP_FREEBIND 457 -#define VAR_DEFINE_TAG 458 -#define VAR_LOCAL_ZONE_TAG 459 -#define VAR_ACCESS_CONTROL_TAG 460 -#define VAR_LOCAL_ZONE_OVERRIDE 461 -#define VAR_ACCESS_CONTROL_TAG_ACTION 462 -#define VAR_ACCESS_CONTROL_TAG_DATA 463 -#define VAR_VIEW 464 -#define VAR_ACCESS_CONTROL_VIEW 465 -#define VAR_VIEW_FIRST 466 -#define VAR_SERVE_EXPIRED 467 -#define VAR_SERVE_EXPIRED_TTL 468 -#define VAR_SERVE_EXPIRED_TTL_RESET 469 -#define VAR_SERVE_EXPIRED_REPLY_TTL 470 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471 -#define VAR_FAKE_DSA 472 -#define VAR_FAKE_SHA1 473 -#define VAR_LOG_IDENTITY 474 -#define VAR_HIDE_TRUSTANCHOR 475 -#define VAR_TRUST_ANCHOR_SIGNALING 476 -#define VAR_AGGRESSIVE_NSEC 477 -#define VAR_USE_SYSTEMD 478 -#define VAR_SHM_ENABLE 479 -#define VAR_SHM_KEY 480 -#define VAR_ROOT_KEY_SENTINEL 481 -#define VAR_DNSCRYPT 482 -#define VAR_DNSCRYPT_ENABLE 483 -#define VAR_DNSCRYPT_PORT 484 -#define VAR_DNSCRYPT_PROVIDER 485 -#define VAR_DNSCRYPT_SECRET_KEY 486 -#define VAR_DNSCRYPT_PROVIDER_CERT 487 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492 -#define VAR_IPSECMOD_ENABLED 493 -#define VAR_IPSECMOD_HOOK 494 -#define VAR_IPSECMOD_IGNORE_BOGUS 495 -#define VAR_IPSECMOD_MAX_TTL 496 -#define VAR_IPSECMOD_WHITELIST 497 -#define VAR_IPSECMOD_STRICT 498 -#define VAR_CACHEDB 499 -#define VAR_CACHEDB_BACKEND 500 -#define VAR_CACHEDB_SECRETSEED 501 -#define VAR_CACHEDB_REDISHOST 502 -#define VAR_CACHEDB_REDISPORT 503 -#define VAR_CACHEDB_REDISTIMEOUT 504 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 505 -#define VAR_FOR_UPSTREAM 506 -#define VAR_AUTH_ZONE 507 -#define VAR_ZONEFILE 508 -#define VAR_MASTER 509 -#define VAR_URL 510 -#define VAR_FOR_DOWNSTREAM 511 -#define VAR_FALLBACK_ENABLED 512 -#define VAR_TLS_ADDITIONAL_PORT 513 -#define VAR_LOW_RTT 514 -#define VAR_LOW_RTT_PERMIL 515 -#define VAR_FAST_SERVER_PERMIL 516 -#define VAR_FAST_SERVER_NUM 517 -#define VAR_ALLOW_NOTIFY 518 -#define VAR_TLS_WIN_CERT 519 -#define VAR_TCP_CONNECTION_LIMIT 520 -#define VAR_FORWARD_NO_CACHE 521 -#define VAR_STUB_NO_CACHE 522 -#define VAR_LOG_SERVFAIL 523 -#define VAR_DENY_ANY 524 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 525 -#define VAR_LOG_TAG_QUERYREPLY 526 -#define VAR_STREAM_WAIT_SIZE 527 -#define VAR_TLS_CIPHERS 528 -#define VAR_TLS_CIPHERSUITES 529 -#define VAR_IPSET 530 -#define VAR_IPSET_NAME_V4 531 -#define VAR_IPSET_NAME_V6 532 -#define VAR_TLS_SESSION_TICKET_KEYS 533 -#define VAR_RPZ 534 -#define VAR_TAGS 535 -#define VAR_RPZ_ACTION_OVERRIDE 536 -#define VAR_RPZ_CNAME_OVERRIDE 537 -#define VAR_RPZ_LOG 538 -#define VAR_RPZ_LOG_NAME 539 +#define VAR_IP_DSCP 431 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 +#define VAR_IP_RATELIMIT 433 +#define VAR_IP_RATELIMIT_SLABS 434 +#define VAR_IP_RATELIMIT_SIZE 435 +#define VAR_RATELIMIT 436 +#define VAR_RATELIMIT_SLABS 437 +#define VAR_RATELIMIT_SIZE 438 +#define VAR_RATELIMIT_FOR_DOMAIN 439 +#define VAR_RATELIMIT_BELOW_DOMAIN 440 +#define VAR_IP_RATELIMIT_FACTOR 441 +#define VAR_RATELIMIT_FACTOR 442 +#define VAR_SEND_CLIENT_SUBNET 443 +#define VAR_CLIENT_SUBNET_ZONE 444 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 +#define VAR_CLIENT_SUBNET_OPCODE 446 +#define VAR_MAX_CLIENT_SUBNET_IPV4 447 +#define VAR_MAX_CLIENT_SUBNET_IPV6 448 +#define VAR_MIN_CLIENT_SUBNET_IPV4 449 +#define VAR_MIN_CLIENT_SUBNET_IPV6 450 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 +#define VAR_CAPS_WHITELIST 453 +#define VAR_CACHE_MAX_NEGATIVE_TTL 454 +#define VAR_PERMIT_SMALL_HOLDDOWN 455 +#define VAR_QNAME_MINIMISATION 456 +#define VAR_QNAME_MINIMISATION_STRICT 457 +#define VAR_IP_FREEBIND 458 +#define VAR_DEFINE_TAG 459 +#define VAR_LOCAL_ZONE_TAG 460 +#define VAR_ACCESS_CONTROL_TAG 461 +#define VAR_LOCAL_ZONE_OVERRIDE 462 +#define VAR_ACCESS_CONTROL_TAG_ACTION 463 +#define VAR_ACCESS_CONTROL_TAG_DATA 464 +#define VAR_VIEW 465 +#define VAR_ACCESS_CONTROL_VIEW 466 +#define VAR_VIEW_FIRST 467 +#define VAR_SERVE_EXPIRED 468 +#define VAR_SERVE_EXPIRED_TTL 469 +#define VAR_SERVE_EXPIRED_TTL_RESET 470 +#define VAR_SERVE_EXPIRED_REPLY_TTL 471 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 +#define VAR_FAKE_DSA 473 +#define VAR_FAKE_SHA1 474 +#define VAR_LOG_IDENTITY 475 +#define VAR_HIDE_TRUSTANCHOR 476 +#define VAR_TRUST_ANCHOR_SIGNALING 477 +#define VAR_AGGRESSIVE_NSEC 478 +#define VAR_USE_SYSTEMD 479 +#define VAR_SHM_ENABLE 480 +#define VAR_SHM_KEY 481 +#define VAR_ROOT_KEY_SENTINEL 482 +#define VAR_DNSCRYPT 483 +#define VAR_DNSCRYPT_ENABLE 484 +#define VAR_DNSCRYPT_PORT 485 +#define VAR_DNSCRYPT_PROVIDER 486 +#define VAR_DNSCRYPT_SECRET_KEY 487 +#define VAR_DNSCRYPT_PROVIDER_CERT 488 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 +#define VAR_IPSECMOD_ENABLED 494 +#define VAR_IPSECMOD_HOOK 495 +#define VAR_IPSECMOD_IGNORE_BOGUS 496 +#define VAR_IPSECMOD_MAX_TTL 497 +#define VAR_IPSECMOD_WHITELIST 498 +#define VAR_IPSECMOD_STRICT 499 +#define VAR_CACHEDB 500 +#define VAR_CACHEDB_BACKEND 501 +#define VAR_CACHEDB_SECRETSEED 502 +#define VAR_CACHEDB_REDISHOST 503 +#define VAR_CACHEDB_REDISPORT 504 +#define VAR_CACHEDB_REDISTIMEOUT 505 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 +#define VAR_FOR_UPSTREAM 507 +#define VAR_AUTH_ZONE 508 +#define VAR_ZONEFILE 509 +#define VAR_MASTER 510 +#define VAR_URL 511 +#define VAR_FOR_DOWNSTREAM 512 +#define VAR_FALLBACK_ENABLED 513 +#define VAR_TLS_ADDITIONAL_PORT 514 +#define VAR_LOW_RTT 515 +#define VAR_LOW_RTT_PERMIL 516 +#define VAR_FAST_SERVER_PERMIL 517 +#define VAR_FAST_SERVER_NUM 518 +#define VAR_ALLOW_NOTIFY 519 +#define VAR_TLS_WIN_CERT 520 +#define VAR_TCP_CONNECTION_LIMIT 521 +#define VAR_FORWARD_NO_CACHE 522 +#define VAR_STUB_NO_CACHE 523 +#define VAR_LOG_SERVFAIL 524 +#define VAR_DENY_ANY 525 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 +#define VAR_LOG_TAG_QUERYREPLY 527 +#define VAR_STREAM_WAIT_SIZE 528 +#define VAR_TLS_CIPHERS 529 +#define VAR_TLS_CIPHERSUITES 530 +#define VAR_IPSET 531 +#define VAR_IPSET_NAME_V4 532 +#define VAR_IPSET_NAME_V6 533 +#define VAR_TLS_SESSION_TICKET_KEYS 534 +#define VAR_RPZ 535 +#define VAR_TAGS 536 +#define VAR_RPZ_ACTION_OVERRIDE 537 +#define VAR_RPZ_CNAME_OVERRIDE 538 +#define VAR_RPZ_LOG 539 +#define VAR_RPZ_LOG_NAME 540 + + + -/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE -{ +typedef union YYSTYPE #line 66 "./util/configparser.y" - +{ char* str; - -#line 629 "util/configparser.h" - -}; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 +} +/* Line 1529 of yacc.c. */ +#line 623 "util/configparser.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif - extern YYSTYPE yylval; -int yyparse (void); - -#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ diff --git a/util/configparser.y b/util/configparser.y index 206f2f946..f7be1019c 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -129,6 +129,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT +%token VAR_IP_DSCP %token VAR_DISABLE_DNSSEC_LAME_CHECK %token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE @@ -241,6 +242,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | server_infra_cache_min_rtt | server_harden_algo_downgrade | server_ip_transparent | server_ip_ratelimit | server_ratelimit | + server_ip_dscp | server_ip_ratelimit_slabs | server_ratelimit_slabs | server_ip_ratelimit_size | server_ratelimit_size | server_ratelimit_for_domain | @@ -1258,6 +1260,20 @@ server_ip_freebind: VAR_IP_FREEBIND STRING_ARG free($2); } ; +server_ip_dscp: VAR_IP_DSCP STRING_ARG + { + OUTYY(("P(server_ip_dscp:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else if (atoi($2) > 63) + yyerror("value too large (max 63)"); + else if (atoi($2) < 0) + yyerror("value too small (min 0)"); + else + cfg_parser->cfg->ip_dscp = atoi($2); + free($2); + } + ; server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG { OUTYY(("P(server_stream_wait_size:%s)\n", $2)); From cfddbcb5beab71d7936e99cab52539f78a109f7f Mon Sep 17 00:00:00 2001 From: Yaroslav K Date: Wed, 26 Feb 2020 12:58:13 -0800 Subject: [PATCH 176/235] add setting IP DiffServ Codepoint (DSCP, previously TOS) on sockets --- daemon/remote.c | 2 +- daemon/worker.c | 2 +- libunbound/libworker.c | 2 +- services/listen_dnsport.c | 82 ++++++++++++++++++++++++++++++-------- services/listen_dnsport.h | 7 +++- services/outside_network.c | 43 +++++++++++++------- services/outside_network.h | 6 ++- testcode/fake_event.c | 5 ++- 8 files changed, 110 insertions(+), 39 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index f4b7298cb..b0ac2bb5b 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -329,7 +329,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, /* open fd */ fd = create_tcp_accept_sock(res, 1, &noproto, 0, - cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd); + cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd, cfg->ip_dscp); freeaddrinfo(res); } diff --git a/daemon/worker.c b/daemon/worker.c index cec6bcd66..201e77336 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1808,7 +1808,7 @@ worker_init(struct worker* worker, struct config_file *cfg, worker->back = outside_network_create(worker->base, cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports, cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6, - cfg->do_tcp?cfg->outgoing_num_tcp:0, + cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp, worker->daemon->env->infra_cache, worker->rndstate, cfg->use_caps_bits_for_id, worker->ports, worker->numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 66ea7c3ba..24233f1d0 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -233,7 +233,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) w->back = outside_network_create(w->base, cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports, cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6, - cfg->do_tcp?cfg->outgoing_num_tcp:0, + cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp, w->env->infra_cache, w->env->rnd, cfg->use_caps_bits_for_id, ports, numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 7e2afd843..61a632106 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -179,9 +179,10 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr, socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv, int snd, int listen, int* reuseport, int transparent, - int freebind, int use_systemd) + int freebind, int use_systemd, int dscp) { int s; + char* err; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined (SO_BINDANY) int on=1; #endif @@ -451,6 +452,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, # endif #endif /* SO_SNDBUF */ } + err = set_ip_dscp(s, family, dscp); + if(err != NULL) + log_warn("error setting IP DiffServ codepoint %d on UDP socket: %s", dscp, err); if(family == AF_INET6) { # if defined(IPV6_V6ONLY) if(v6only) { @@ -638,9 +642,10 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, - int* reuseport, int transparent, int mss, int freebind, int use_systemd) + int* reuseport, int transparent, int mss, int freebind, int use_systemd, int dscp) { int s; + char* err; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY) int on = 1; #endif @@ -793,6 +798,9 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, strerror(errno)); } #endif /* IP_TRANSPARENT || IP_BINDANY || SO_BINDANY */ + err = set_ip_dscp(s, addr->ai_family, dscp); + if(err != NULL) + log_warn("error setting IP DiffServ codepoint %d on TCP socket: %s", dscp, err); if( #ifdef HAVE_SYSTEMD !got_fd_from_systemd && @@ -866,6 +874,48 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, return s; } +char* +set_ip_dscp(int socket, int addrfamily, int dscp) { + int ds; + + if(dscp == 0) + return NULL; + ds = dscp << 2; + switch(addrfamily) { + case AF_INET6: + if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &ds, sizeof(ds)) < 0) + return sock_strerror(errno); + default: + if(setsockopt(socket, IPPROTO_IP, IP_TOS, &ds, sizeof(ds)) < 0) + return sock_strerror(errno); + } + return NULL; +} + +# ifndef USE_WINSOCK +char* +sock_strerror(int errn){ + return strerror(errno); +} + +void +sock_close(int socket) { + close(socket); +} + +# else +char* +sock_strerror(int errn){ + return wsa_strerror(WSAGetLastError())) +} + +void +sock_close(int socket) { + closesocket(socket); +} + +# endif /* USE_WINSOCK */ + int create_local_accept_sock(const char *path, int* noproto, int use_systemd) { @@ -952,7 +1002,7 @@ err: static int make_sock(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, - int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd) + int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, int dscp) { struct addrinfo *res = NULL; int r, s, inuse, noproto; @@ -980,7 +1030,7 @@ make_sock(int stype, const char* ifname, const char* port, s = create_udp_sock(res->ai_family, res->ai_socktype, (struct sockaddr*)res->ai_addr, res->ai_addrlen, v6only, &inuse, &noproto, (int)rcv, (int)snd, 1, - reuseport, transparent, freebind, use_systemd); + reuseport, transparent, freebind, use_systemd, dscp); if(s == -1 && inuse) { log_err("bind: address already in use"); } else if(s == -1 && noproto && hints->ai_family == AF_INET6){ @@ -988,7 +1038,7 @@ make_sock(int stype, const char* ifname, const char* port, } } else { s = create_tcp_accept_sock(res, v6only, &noproto, reuseport, - transparent, tcp_mss, freebind, use_systemd); + transparent, tcp_mss, freebind, use_systemd, dscp); if(s == -1 && noproto && hints->ai_family == AF_INET6){ *noip6 = 1; } @@ -1001,7 +1051,7 @@ make_sock(int stype, const char* ifname, const char* port, static int make_sock_port(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, - int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd) + int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, int dscp) { char* s = strchr(ifname, '@'); if(s) { @@ -1023,10 +1073,10 @@ make_sock_port(int stype, const char* ifname, const char* port, (void)strlcpy(p, s+1, sizeof(p)); p[strlen(s+1)]=0; return make_sock(stype, newif, p, hints, v6only, noip6, - rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd); + rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd, dscp); } return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd, - reuseport, transparent, tcp_mss, freebind, use_systemd); + reuseport, transparent, tcp_mss, freebind, use_systemd, dscp); } /** @@ -1154,7 +1204,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, size_t rcv, size_t snd, int ssl_port, struct config_strlist* tls_additional_port, int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, - int dnscrypt_port) + int dnscrypt_port, int dscp) { int s, noip6=0; #ifdef USE_DNSCRYPT @@ -1171,7 +1221,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_auto) { if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, freebind, use_systemd)) == -1) { + tcp_mss, freebind, use_systemd, dscp)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1200,7 +1250,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, /* regular udp socket */ if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, freebind, use_systemd)) == -1) { + tcp_mss, freebind, use_systemd, dscp)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1222,7 +1272,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, tls_additional_port); if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, - freebind, use_systemd)) == -1) { + freebind, use_systemd, dscp)) == -1) { if(noip6) { /*log_warn("IPv6 protocol not available");*/ return 1; @@ -1421,7 +1471,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } @@ -1435,7 +1485,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } @@ -1451,7 +1501,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } @@ -1465,7 +1515,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index ad84d8322..c3cc0a92d 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -209,7 +209,7 @@ void listen_start_accept(struct listen_dnsport* listen); */ int create_udp_sock(int family, int socktype, struct sockaddr* addr, socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv, - int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd); + int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd, int dscp); /** * Create and bind TCP listening socket @@ -225,7 +225,7 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr, * @return: the socket. -1 on error. */ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, - int* reuseport, int transparent, int mss, int freebind, int use_systemd); + int* reuseport, int transparent, int mss, int freebind, int use_systemd, int dscp); /** * Create and bind local listening socket @@ -367,4 +367,7 @@ int tcp_req_info_handle_read_close(struct tcp_req_info* req); /** get the size of currently used tcp stream wait buffers (in bytes) */ size_t tcp_req_info_get_stream_buffer_size(void); +char* set_ip_dscp(int socket, int addrfamily, int ds); +char* sock_strerror(int errn); + #endif /* LISTEN_DNSPORT_H */ diff --git a/services/outside_network.c b/services/outside_network.c index b2c67766e..978e98b0e 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -205,18 +205,25 @@ pick_outgoing_tcp(struct waiting_tcp* w, int s) /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int -outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss) +outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp) { int s; + int af; + char* err; #ifdef SO_REUSEADDR int on = 1; #endif #ifdef INET6 - if(addr_is_ip6(addr, addrlen)) + if(addr_is_ip6(addr, addrlen)){ s = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); - else + af = AF_INET6; + } else { +#else + { #endif + af = AF_INET; s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + } if(s == -1) { #ifndef USE_WINSOCK log_err_addr("outgoing tcp: socket", strerror(errno), @@ -236,6 +243,12 @@ outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss) } #endif + err = set_ip_dscp(s, af, dscp); + if(err != NULL) { + verbose(VERB_ALGO, "outgoing tcp:" + "error setting IP DiffServ codepoint on socket"); + } + if(tcp_mss > 0) { #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG) if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, @@ -291,7 +304,7 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) log_assert(pkt); log_assert(w->addrlen > 0); /* open socket */ - s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss); + s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp); if(s == -1) return 0; @@ -719,7 +732,7 @@ static int setup_if(struct port_if* pif, const char* addrstr, struct outside_network* outside_network_create(struct comm_base *base, size_t bufsize, size_t num_ports, char** ifs, int num_ifs, int do_ip4, - int do_ip6, size_t num_tcp, struct infra_cache* infra, + int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, @@ -752,6 +765,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->use_caps_for_id = use_caps_for_id; outnet->do_udp = do_udp; outnet->tcp_mss = tcp_mss; + outnet->ip_dscp = dscp; #ifndef S_SPLINT_S if(delayclose) { outnet->delayclose = 1; @@ -1041,7 +1055,7 @@ sai6_putrandom(struct sockaddr_in6 *sa, int pfxlen, struct ub_randstate *rnd) */ static int udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen, - int port, int* inuse, struct ub_randstate* rnd) + int port, int* inuse, struct ub_randstate* rnd, int dscp) { int fd, noproto; if(addr_is_ip6(addr, addrlen)) { @@ -1056,13 +1070,13 @@ udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen, } fd = create_udp_sock(AF_INET6, SOCK_DGRAM, (struct sockaddr*)&sa, addrlen, 1, inuse, &noproto, - 0, 0, 0, NULL, 0, freebind, 0); + 0, 0, 0, NULL, 0, freebind, 0, dscp); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET, SOCK_DGRAM, (struct sockaddr*)addr, addrlen, 1, inuse, &noproto, - 0, 0, 0, NULL, 0, 0, 0); + 0, 0, 0, NULL, 0, 0, 0, dscp); } return fd; } @@ -1127,7 +1141,7 @@ select_ifport(struct outside_network* outnet, struct pending* pend, my_port = portno = 0; #endif fd = udp_sockport(&pif->addr, pif->addrlen, pif->pfxlen, - portno, &inuse, outnet->rnd); + portno, &inuse, outnet->rnd, outnet->ip_dscp); if(fd == -1 && !inuse) { /* nonrecoverable error making socket */ return 0; @@ -2176,10 +2190,11 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, { struct sockaddr_storage* addr; socklen_t addrlen; - int i, try, pnum; + int i, try, pnum, dscp; struct port_if* pif; /* create fd */ + dscp = outnet->ip_dscp; for(try = 0; try<1000; try++) { int port = 0; int freebind = 0; @@ -2226,13 +2241,13 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, sa.sin6_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET6, SOCK_DGRAM, (struct sockaddr*)&sa, addrlen, 1, &inuse, &noproto, - 0, 0, 0, NULL, 0, freebind, 0); + 0, 0, 0, NULL, 0, freebind, 0, dscp); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET, SOCK_DGRAM, (struct sockaddr*)addr, addrlen, 1, &inuse, &noproto, - 0, 0, 0, NULL, 0, freebind, 0); + 0, 0, 0, NULL, 0, freebind, 0, dscp); } if(fd != -1) { return fd; @@ -2324,7 +2339,7 @@ outnet_comm_point_for_tcp(struct outside_network* outnet, sldns_buffer* query, int timeout, int ssl, char* host) { struct comm_point* cp; - int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss); + int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp); if(fd == -1) { return 0; } @@ -2386,7 +2401,7 @@ outnet_comm_point_for_http(struct outside_network* outnet, { /* cp calls cb with err=NETEVENT_DONE when transfer is done */ struct comm_point* cp; - int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss); + int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp); if(fd == -1) { return 0; } diff --git a/services/outside_network.h b/services/outside_network.h index f12b2e5be..3fc5dde45 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -138,6 +138,8 @@ struct outside_network { #endif /** maximum segment size of tcp socket */ int tcp_mss; + /** IP_TOS socket option requested on the sockets */ + int ip_dscp; /** * Array of tcp pending used for outgoing TCP connections. @@ -419,7 +421,7 @@ struct serviced_query { */ struct outside_network* outside_network_create(struct comm_base* base, size_t bufsize, size_t num_ports, char** ifs, int num_ifs, - int do_ip4, int do_ip6, size_t num_tcp, struct infra_cache* infra, + int do_ip4, int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, @@ -542,7 +544,7 @@ size_t serviced_get_mem(struct serviced_query* sq); /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ -int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss); +int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp); /** * Create udp commpoint suitable for sending packets to the destination. diff --git a/testcode/fake_event.c b/testcode/fake_event.c index d6e904a4d..c69fb9bfd 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1031,6 +1031,7 @@ outside_network_create(struct comm_base* base, size_t bufsize, size_t ATTR_UNUSED(num_ports), char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int ATTR_UNUSED(do_ip4), int ATTR_UNUSED(do_ip6), size_t ATTR_UNUSED(num_tcp), + int ATTR_UNUSED(dscp), struct infra_cache* infra, struct ub_randstate* ATTR_UNUSED(rnd), int ATTR_UNUSED(use_caps_for_id), int* ATTR_UNUSED(availports), @@ -1583,7 +1584,7 @@ int create_udp_sock(int ATTR_UNUSED(family), int ATTR_UNUSED(socktype), int* ATTR_UNUSED(noproto), int ATTR_UNUSED(rcv), int ATTR_UNUSED(snd), int ATTR_UNUSED(listen), int* ATTR_UNUSED(reuseport), int ATTR_UNUSED(transparent), int ATTR_UNUSED(freebind), - int ATTR_UNUSED(use_systemd)) + int ATTR_UNUSED(use_systemd), int ATTR_UNUSED(dscp)) { /* if you actually print to this, it'll be stdout during test */ return 1; @@ -1790,7 +1791,7 @@ int comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, } int outnet_get_tcp_fd(struct sockaddr_storage* ATTR_UNUSED(addr), - socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(tcp_mss)) + socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(tcp_mss), int ATTR_UNUSED(dscp)) { log_assert(0); return -1; From 311f163aed1951c20b2ffb6204754c9e0d649263 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 24 Mar 2020 09:25:05 +0100 Subject: [PATCH 177/235] Changelog for #200 and bison, flex regenerate. - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP tag for outgoing packets. --- doc/Changelog | 4 + util/configlexer.c | 441 ++-- util/configparser.c | 4977 +++++++++++++++++++++---------------------- util/configparser.h | 631 +++--- 4 files changed, 3037 insertions(+), 3016 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0551486bc..fcc7dca28 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +24 March 2020: Wouter + - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP + tag for outgoing packets. + 23 March 2020: Wouter - Fix compile on Solaris for unbound-checkconf. diff --git a/util/configlexer.c b/util/configlexer.c index 2037992d4..194569a64 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 3 "" +#line 2 "" #define YY_INT_ALIGNED short int @@ -9,8 +9,8 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -48,7 +48,6 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; -typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -56,7 +55,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -87,63 +85,61 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ -#ifdef __cplusplus +/* begin standard C++ headers. */ -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST +/* TODO: this is always defined, so inline it */ #define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) #else -#define yyconst +#define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. +/* 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) ((unsigned int) (unsigned char) c) +#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_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. @@ -160,15 +156,16 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE; typedef size_t yy_size_t; #endif -extern yy_size_t yyleng; +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) \ @@ -183,7 +180,6 @@ extern FILE *yyin, *yyout; YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) - #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE @@ -198,12 +194,12 @@ struct yy_buffer_state /* Size of input buffer in bytes, not including room for EOB * characters. */ - yy_size_t yy_buf_size; + int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + 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 @@ -226,7 +222,7 @@ struct yy_buffer_state 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. */ @@ -254,7 +250,7 @@ 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 = 0; /**< Stack as an array. */ +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 @@ -265,7 +261,6 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ #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. */ @@ -273,11 +268,11 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; -static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ -yy_size_t yyleng; +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 = (char *) 0; +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 */ @@ -286,71 +281,68 @@ static int yy_start = 0; /* start state number */ */ 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 ); +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 ); +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 ) -#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 ); -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); - -void *yyalloc (yy_size_t ); -void *yyrealloc (void *,yy_size_t ); -void yyfree (void * ); +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_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_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; -typedef unsigned char YY_CHAR; - -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; +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 yy_fatal_error (yyconst char msg[] ); +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. @@ -358,11 +350,10 @@ static void yy_fatal_error (yyconst char msg[] ); #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ (yytext_ptr) -= (yy_more_len); \ - yyleng = (yy_size_t) (yy_cp - (yytext_ptr)); \ + yyleng = (int) (yy_cp - (yytext_ptr)); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; - #define YY_NUM_RULES 310 #define YY_END_OF_BUFFER 311 /* This struct is not used in this scanner, @@ -372,7 +363,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[3049] = +static const flex_int16_t yy_accept[3049] = { 0, 1, 1, 292, 292, 296, 296, 300, 300, 304, 304, 1, 1, 311, 308, 1, 290, 290, 309, 2, 309, @@ -711,7 +702,7 @@ static yyconst flex_int16_t yy_accept[3049] = 308, 308, 308, 308, 308, 238, 242, 0 } ; -static yyconst flex_int32_t yy_ec[256] = +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, @@ -743,7 +734,7 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[41] = +static const YY_CHAR yy_meta[41] = { 0, 1, 2, 3, 4, 5, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, @@ -751,7 +742,7 @@ static yyconst flex_int32_t yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[3063] = +static const flex_int16_t yy_base[3063] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, 90, 112, 2327, 1999, 81, 5940, 5940, 5940, 96, 52, @@ -1092,7 +1083,7 @@ static yyconst flex_int16_t yy_base[3063] = 5925, 5932 } ; -static yyconst flex_int16_t yy_def[3063] = +static const flex_int16_t yy_def[3063] = { 0, 3048, 1, 3049, 3049, 3050, 3050, 3051, 3051, 3052, 3052, 3053, 3053, 3048, 3054, 3048, 3048, 3048, 3048, 3055, 3054, @@ -1433,7 +1424,7 @@ static yyconst flex_int16_t yy_def[3063] = 3048, 3048 } ; -static yyconst flex_int16_t yy_nxt[5981] = +static const flex_int16_t yy_nxt[5981] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -2094,7 +2085,7 @@ static yyconst flex_int16_t yy_nxt[5981] = 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 } ; -static yyconst flex_int16_t yy_chk[5981] = +static const flex_int16_t yy_chk[5981] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2877,7 +2868,7 @@ static void config_start_include(const char* filename) config_include_stack = s; cfg_parser->filename = nm; cfg_parser->line = 1; - yy_switch_to_buffer(yy_create_buffer(input,YY_BUF_SIZE)); + yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE)); } static void config_start_include_glob(const char* filename) @@ -2946,11 +2937,12 @@ static void config_end_include(void) #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer(yyin,YY_BUF_SIZE ); \ + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \ } #endif +#line 2943 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2959,8 +2951,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif +#line 2952 "" -#line 2962 "" +#line 2954 "" #define INITIAL 0 #define quotedstring 1 @@ -2981,36 +2974,36 @@ static void config_end_include(void) #define YY_EXTRA_TYPE void * #endif -static int yy_init_globals (void ); +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 yylex_destroy ( void ); -int yyget_debug (void ); +int yyget_debug ( void ); -void yyset_debug (int debug_flag ); +void yyset_debug ( int debug_flag ); -YY_EXTRA_TYPE yyget_extra (void ); +YY_EXTRA_TYPE yyget_extra ( void ); -void yyset_extra (YY_EXTRA_TYPE user_defined ); +void yyset_extra ( YY_EXTRA_TYPE user_defined ); -FILE *yyget_in (void ); +FILE *yyget_in ( void ); -void yyset_in (FILE * in_str ); +void yyset_in ( FILE * _in_str ); -FILE *yyget_out (void ); +FILE *yyget_out ( void ); -void yyset_out (FILE * out_str ); +void yyset_out ( FILE * _out_str ); -yy_size_t yyget_leng (void ); + int yyget_leng ( void ); -char *yyget_text (void ); +char *yyget_text ( void ); -int yyget_lineno (void ); +int yyget_lineno ( void ); -void yyset_lineno (int line_number ); +void yyset_lineno ( int _line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. @@ -3018,33 +3011,41 @@ void yyset_lineno (int line_number ); #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int yywrap (void ); +extern "C" int yywrap ( void ); #else -extern int yywrap (void ); +extern int yywrap ( void ); #endif #endif +#ifndef YY_NO_UNPUT + +#endif + #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); +static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); +static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT - #ifdef __cplusplus -static int yyinput (void ); +static int yyinput ( void ); #else -static int input (void ); +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. */ @@ -3052,7 +3053,7 @@ static int input (void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO fwrite( yytext, yyleng, 1, yyout ) +#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, @@ -3063,7 +3064,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - yy_size_t n; \ + int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -3076,7 +3077,7 @@ static int input (void ); else \ { \ errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ @@ -3131,7 +3132,7 @@ extern int yylex (void); /* Code executed at the end of each rule. */ #ifndef YY_BREAK -#define YY_BREAK break; +#define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ @@ -3141,14 +3142,10 @@ extern int yylex (void); */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; -#line 204 "./util/configlexer.lex" - -#line 3149 "" - if ( !(yy_init) ) { (yy_init) = 1; @@ -3169,18 +3166,23 @@ YY_DECL if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - yy_load_buffer_state( ); + yy_load_buffer_state( ); } - while ( 1 ) /* loops until end-of-file is reached */ + { +#line 204 "./util/configlexer.lex" + +#line 3176 "" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { (yy_more_len) = 0; if ( (yy_more_flag) ) { - (yy_more_len) = (yy_c_buf_p) - (yytext_ptr); + (yy_more_len) = (int) ((yy_c_buf_p) - (yytext_ptr)); (yy_more_flag) = 0; } yy_cp = (yy_c_buf_p); @@ -3197,7 +3199,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + 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; @@ -3207,9 +3209,9 @@ yy_match: { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 3049 ) - yy_c = yy_meta[(unsigned int) yy_c]; + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 5940 ); @@ -4889,7 +4891,7 @@ YY_RULE_SETUP #line 603 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4891 "" +#line 4892 "" case YY_END_OF_BUFFER: { @@ -4965,7 +4967,7 @@ ECHO; { (yy_did_buffer_switch_on_eof) = 0; - if ( yywrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up @@ -5018,6 +5020,7 @@ ECHO; "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 @@ -5029,9 +5032,9 @@ ECHO; */ static int yy_get_next_buffer (void) { - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; + 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] ) @@ -5060,7 +5063,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -5073,21 +5076,21 @@ static int yy_get_next_buffer (void) else { - yy_size_t num_to_read = + 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; + 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 ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -5096,11 +5099,12 @@ static int yy_get_next_buffer (void) b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + 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 = 0; + b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( @@ -5128,7 +5132,7 @@ static int yy_get_next_buffer (void) if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ); + yyrestart( yyin ); } else @@ -5142,12 +5146,15 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + 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. */ - yy_size_t 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,new_size ); + 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; @@ -5163,14 +5170,14 @@ static int yy_get_next_buffer (void) static yy_state_type yy_get_previous_state (void) { - register yy_state_type yy_current_state; - register char *yy_cp; + 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 ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + 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; @@ -5180,9 +5187,9 @@ static int yy_get_next_buffer (void) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 3049 ) - yy_c = yy_meta[(unsigned int) yy_c]; + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; @@ -5195,10 +5202,10 @@ static int yy_get_next_buffer (void) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -5208,14 +5215,18 @@ static int yy_get_next_buffer (void) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 3049 ) - yy_c = yy_meta[(unsigned int) yy_c]; + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 3048); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } +#ifndef YY_NO_UNPUT + +#endif + #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) @@ -5240,7 +5251,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -5257,13 +5268,13 @@ static int yy_get_next_buffer (void) */ /* Reset buffer status. */ - yyrestart(yyin ); + yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( yywrap( ) ) + if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) @@ -5301,11 +5312,11 @@ static int yy_get_next_buffer (void) if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - yy_init_buffer(YY_CURRENT_BUFFER,input_file ); - yy_load_buffer_state( ); + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); } /** Switch to a different input buffer. @@ -5333,7 +5344,7 @@ static int yy_get_next_buffer (void) } YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag @@ -5361,7 +5372,7 @@ static void yy_load_buffer_state (void) { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); @@ -5370,13 +5381,13 @@ static void yy_load_buffer_state (void) /* 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(b->yy_buf_size + 2 ); + 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 ); + yy_init_buffer( b, file ); return b; } @@ -5395,15 +5406,11 @@ static void yy_load_buffer_state (void) YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ); + yyfree( (void *) b->yy_ch_buf ); - yyfree((void *) b ); + yyfree( (void *) b ); } -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - /* 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. @@ -5413,7 +5420,7 @@ extern int isatty (int ); { int oerrno = errno; - yy_flush_buffer(b ); + yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; @@ -5456,7 +5463,7 @@ extern int isatty (int ); b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); + yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes @@ -5487,7 +5494,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } @@ -5506,7 +5513,7 @@ void yypop_buffer_state (void) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -5524,15 +5531,15 @@ static void yyensure_buffer_stack (void) * 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; + 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; @@ -5541,7 +5548,7 @@ static void yyensure_buffer_stack (void) if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; + 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 @@ -5561,7 +5568,7 @@ static void yyensure_buffer_stack (void) * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { @@ -5571,23 +5578,23 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) 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 0; + return NULL; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + 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 = size - 2; /* "- 2" to take care of EOB's */ + 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 = 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 ); + yy_switch_to_buffer( b ); return b; } @@ -5600,28 +5607,29 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +YY_BUFFER_STATE yy_scan_string (const char * yystr ) { - return yy_scan_bytes(yystr,strlen(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 bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @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 (yyconst char * yybytes, yy_size_t _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; - yy_size_t n, i; + yy_size_t n; + int i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) yyalloc(n ); + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); @@ -5630,7 +5638,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = yy_scan_buffer(buf,n ); + b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); @@ -5646,9 +5654,9 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len #define YY_EXIT_FAILURE 2 #endif -static void yy_fatal_error (yyconst char* msg ) +static void yynoreturn yy_fatal_error (const char* msg ) { - (void) fprintf( stderr, "%s\n", msg ); + fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -5676,7 +5684,7 @@ static void yy_fatal_error (yyconst char* msg ) */ int yyget_lineno (void) { - + return yylineno; } @@ -5699,7 +5707,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -yy_size_t yyget_leng (void) +int yyget_leng (void) { return yyleng; } @@ -5714,29 +5722,29 @@ char *yyget_text (void) } /** Set the current line number. - * @param line_number + * @param _line_number line number * */ -void yyset_lineno (int line_number ) +void yyset_lineno (int _line_number ) { - yylineno = line_number; + yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. - * @param in_str A readable stream. + * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ -void yyset_in (FILE * in_str ) +void yyset_in (FILE * _in_str ) { - yyin = in_str ; + yyin = _in_str ; } -void yyset_out (FILE * out_str ) +void yyset_out (FILE * _out_str ) { - yyout = out_str ; + yyout = _out_str ; } int yyget_debug (void) @@ -5744,9 +5752,9 @@ int yyget_debug (void) return yy_flex_debug; } -void yyset_debug (int bdebug ) +void yyset_debug (int _bdebug ) { - yy_flex_debug = bdebug ; + yy_flex_debug = _bdebug ; } static int yy_init_globals (void) @@ -5755,10 +5763,10 @@ static int yy_init_globals (void) * This function is called from yylex_destroy(), so don't allocate here. */ - (yy_buffer_stack) = 0; + (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; + (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; @@ -5767,8 +5775,8 @@ static int yy_init_globals (void) yyin = stdin; yyout = stdout; #else - yyin = (FILE *) 0; - yyout = (FILE *) 0; + yyin = NULL; + yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by @@ -5783,7 +5791,7 @@ int yylex_destroy (void) /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } @@ -5804,18 +5812,19 @@ int yylex_destroy (void) */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +static void yy_flex_strncpy (char* s1, const char * s2, int n ) { - register int i; + + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) +static int yy_flex_strlen (const char * s ) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; @@ -5825,11 +5834,12 @@ static int yy_flex_strlen (yyconst char * s ) void *yyalloc (yy_size_t size ) { - return (void *) malloc( 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 @@ -5837,12 +5847,12 @@ void *yyrealloc (void * ptr, yy_size_t size ) * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ - return (void *) realloc( (char *) ptr, size ); + return realloc(ptr, size); } void yyfree (void * ptr ) { - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" @@ -5850,4 +5860,3 @@ void yyfree (void * ptr ) #line 603 "./util/configlexer.lex" - diff --git a/util/configparser.c b/util/configparser.c index 5938b1940..657f99579 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,14 +1,14 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 3.4.1. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Inc. - This program is free software; you can redistribute it and/or modify + 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 2, or (at your option) - any later version. + 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 @@ -16,9 +16,7 @@ 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -43,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "3.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,301 +56,368 @@ /* Pure parsers. */ #define YYPURE 0 -/* Using locations. */ -#define YYLSP_NEEDED 0 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 -/* Tokens. */ + +/* First part of user prologue. */ +#line 38 "./util/configparser.y" + +#include "config.h" + +#include +#include +#include +#include +#include + +#include "util/configyyrename.h" +#include "util/config_file.h" +#include "util/net_help.h" + +int ub_c_lex(void); +void ub_c_error(const char *message); + +static void validate_respip_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 99 "util/configparser.c" + +# 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 + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Use api.header.include to #include this header + instead of duplicating it here. */ +#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 type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_SERVER = 266, - VAR_VERBOSITY = 267, - VAR_NUM_THREADS = 268, - VAR_PORT = 269, - VAR_OUTGOING_RANGE = 270, - VAR_INTERFACE = 271, - VAR_PREFER_IP4 = 272, - VAR_DO_IP4 = 273, - VAR_DO_IP6 = 274, - VAR_PREFER_IP6 = 275, - VAR_DO_UDP = 276, - VAR_DO_TCP = 277, - VAR_TCP_MSS = 278, - VAR_OUTGOING_TCP_MSS = 279, - VAR_TCP_IDLE_TIMEOUT = 280, - VAR_EDNS_TCP_KEEPALIVE = 281, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, - VAR_CHROOT = 283, - VAR_USERNAME = 284, - VAR_DIRECTORY = 285, - VAR_LOGFILE = 286, - VAR_PIDFILE = 287, - VAR_MSG_CACHE_SIZE = 288, - VAR_MSG_CACHE_SLABS = 289, - VAR_NUM_QUERIES_PER_THREAD = 290, - VAR_RRSET_CACHE_SIZE = 291, - VAR_RRSET_CACHE_SLABS = 292, - VAR_OUTGOING_NUM_TCP = 293, - VAR_INFRA_HOST_TTL = 294, - VAR_INFRA_LAME_TTL = 295, - VAR_INFRA_CACHE_SLABS = 296, - VAR_INFRA_CACHE_NUMHOSTS = 297, - VAR_INFRA_CACHE_LAME_SIZE = 298, - VAR_NAME = 299, - VAR_STUB_ZONE = 300, - VAR_STUB_HOST = 301, - VAR_STUB_ADDR = 302, - VAR_TARGET_FETCH_POLICY = 303, - VAR_HARDEN_SHORT_BUFSIZE = 304, - VAR_HARDEN_LARGE_QUERIES = 305, - VAR_FORWARD_ZONE = 306, - VAR_FORWARD_HOST = 307, - VAR_FORWARD_ADDR = 308, - VAR_DO_NOT_QUERY_ADDRESS = 309, - VAR_HIDE_IDENTITY = 310, - VAR_HIDE_VERSION = 311, - VAR_IDENTITY = 312, - VAR_VERSION = 313, - VAR_HARDEN_GLUE = 314, - VAR_MODULE_CONF = 315, - VAR_TRUST_ANCHOR_FILE = 316, - VAR_TRUST_ANCHOR = 317, - VAR_VAL_OVERRIDE_DATE = 318, - VAR_BOGUS_TTL = 319, - VAR_VAL_CLEAN_ADDITIONAL = 320, - VAR_VAL_PERMISSIVE_MODE = 321, - VAR_INCOMING_NUM_TCP = 322, - VAR_MSG_BUFFER_SIZE = 323, - VAR_KEY_CACHE_SIZE = 324, - VAR_KEY_CACHE_SLABS = 325, - VAR_TRUSTED_KEYS_FILE = 326, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, - VAR_USE_SYSLOG = 328, - VAR_OUTGOING_INTERFACE = 329, - VAR_ROOT_HINTS = 330, - VAR_DO_NOT_QUERY_LOCALHOST = 331, - VAR_CACHE_MAX_TTL = 332, - VAR_HARDEN_DNSSEC_STRIPPED = 333, - VAR_ACCESS_CONTROL = 334, - VAR_LOCAL_ZONE = 335, - VAR_LOCAL_DATA = 336, - VAR_INTERFACE_AUTOMATIC = 337, - VAR_STATISTICS_INTERVAL = 338, - VAR_DO_DAEMONIZE = 339, - VAR_USE_CAPS_FOR_ID = 340, - VAR_STATISTICS_CUMULATIVE = 341, - VAR_OUTGOING_PORT_PERMIT = 342, - VAR_OUTGOING_PORT_AVOID = 343, - VAR_DLV_ANCHOR_FILE = 344, - VAR_DLV_ANCHOR = 345, - VAR_NEG_CACHE_SIZE = 346, - VAR_HARDEN_REFERRAL_PATH = 347, - VAR_PRIVATE_ADDRESS = 348, - VAR_PRIVATE_DOMAIN = 349, - VAR_REMOTE_CONTROL = 350, - VAR_CONTROL_ENABLE = 351, - VAR_CONTROL_INTERFACE = 352, - VAR_CONTROL_PORT = 353, - VAR_SERVER_KEY_FILE = 354, - VAR_SERVER_CERT_FILE = 355, - VAR_CONTROL_KEY_FILE = 356, - VAR_CONTROL_CERT_FILE = 357, - VAR_CONTROL_USE_CERT = 358, - VAR_EXTENDED_STATISTICS = 359, - VAR_LOCAL_DATA_PTR = 360, - VAR_JOSTLE_TIMEOUT = 361, - VAR_STUB_PRIME = 362, - VAR_UNWANTED_REPLY_THRESHOLD = 363, - VAR_LOG_TIME_ASCII = 364, - VAR_DOMAIN_INSECURE = 365, - VAR_PYTHON = 366, - VAR_PYTHON_SCRIPT = 367, - VAR_VAL_SIG_SKEW_MIN = 368, - VAR_VAL_SIG_SKEW_MAX = 369, - VAR_CACHE_MIN_TTL = 370, - VAR_VAL_LOG_LEVEL = 371, - VAR_AUTO_TRUST_ANCHOR_FILE = 372, - VAR_KEEP_MISSING = 373, - VAR_ADD_HOLDDOWN = 374, - VAR_DEL_HOLDDOWN = 375, - VAR_SO_RCVBUF = 376, - VAR_EDNS_BUFFER_SIZE = 377, - VAR_PREFETCH = 378, - VAR_PREFETCH_KEY = 379, - VAR_SO_SNDBUF = 380, - VAR_SO_REUSEPORT = 381, - VAR_HARDEN_BELOW_NXDOMAIN = 382, - VAR_IGNORE_CD_FLAG = 383, - VAR_LOG_QUERIES = 384, - VAR_LOG_REPLIES = 385, - VAR_LOG_LOCAL_ACTIONS = 386, - VAR_TCP_UPSTREAM = 387, - VAR_SSL_UPSTREAM = 388, - VAR_SSL_SERVICE_KEY = 389, - VAR_SSL_SERVICE_PEM = 390, - VAR_SSL_PORT = 391, - VAR_FORWARD_FIRST = 392, - VAR_STUB_SSL_UPSTREAM = 393, - VAR_FORWARD_SSL_UPSTREAM = 394, - VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_IP_DSCP = 431, - VAR_DISABLE_DNSSEC_LAME_CHECK = 432, - VAR_IP_RATELIMIT = 433, - VAR_IP_RATELIMIT_SLABS = 434, - VAR_IP_RATELIMIT_SIZE = 435, - VAR_RATELIMIT = 436, - VAR_RATELIMIT_SLABS = 437, - VAR_RATELIMIT_SIZE = 438, - VAR_RATELIMIT_FOR_DOMAIN = 439, - VAR_RATELIMIT_BELOW_DOMAIN = 440, - VAR_IP_RATELIMIT_FACTOR = 441, - VAR_RATELIMIT_FACTOR = 442, - VAR_SEND_CLIENT_SUBNET = 443, - VAR_CLIENT_SUBNET_ZONE = 444, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, - VAR_CLIENT_SUBNET_OPCODE = 446, - VAR_MAX_CLIENT_SUBNET_IPV4 = 447, - VAR_MAX_CLIENT_SUBNET_IPV6 = 448, - VAR_MIN_CLIENT_SUBNET_IPV4 = 449, - VAR_MIN_CLIENT_SUBNET_IPV6 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, - VAR_CAPS_WHITELIST = 453, - VAR_CACHE_MAX_NEGATIVE_TTL = 454, - VAR_PERMIT_SMALL_HOLDDOWN = 455, - VAR_QNAME_MINIMISATION = 456, - VAR_QNAME_MINIMISATION_STRICT = 457, - VAR_IP_FREEBIND = 458, - VAR_DEFINE_TAG = 459, - VAR_LOCAL_ZONE_TAG = 460, - VAR_ACCESS_CONTROL_TAG = 461, - VAR_LOCAL_ZONE_OVERRIDE = 462, - VAR_ACCESS_CONTROL_TAG_ACTION = 463, - VAR_ACCESS_CONTROL_TAG_DATA = 464, - VAR_VIEW = 465, - VAR_ACCESS_CONTROL_VIEW = 466, - VAR_VIEW_FIRST = 467, - VAR_SERVE_EXPIRED = 468, - VAR_SERVE_EXPIRED_TTL = 469, - VAR_SERVE_EXPIRED_TTL_RESET = 470, - VAR_SERVE_EXPIRED_REPLY_TTL = 471, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 - }; + enum yytokentype + { + SPACE = 258, + LETTER = 259, + NEWLINE = 260, + COMMENT = 261, + COLON = 262, + ANY = 263, + ZONESTR = 264, + STRING_ARG = 265, + VAR_SERVER = 266, + VAR_VERBOSITY = 267, + VAR_NUM_THREADS = 268, + VAR_PORT = 269, + VAR_OUTGOING_RANGE = 270, + VAR_INTERFACE = 271, + VAR_PREFER_IP4 = 272, + VAR_DO_IP4 = 273, + VAR_DO_IP6 = 274, + VAR_PREFER_IP6 = 275, + VAR_DO_UDP = 276, + VAR_DO_TCP = 277, + VAR_TCP_MSS = 278, + VAR_OUTGOING_TCP_MSS = 279, + VAR_TCP_IDLE_TIMEOUT = 280, + VAR_EDNS_TCP_KEEPALIVE = 281, + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, + VAR_CHROOT = 283, + VAR_USERNAME = 284, + VAR_DIRECTORY = 285, + VAR_LOGFILE = 286, + VAR_PIDFILE = 287, + VAR_MSG_CACHE_SIZE = 288, + VAR_MSG_CACHE_SLABS = 289, + VAR_NUM_QUERIES_PER_THREAD = 290, + VAR_RRSET_CACHE_SIZE = 291, + VAR_RRSET_CACHE_SLABS = 292, + VAR_OUTGOING_NUM_TCP = 293, + VAR_INFRA_HOST_TTL = 294, + VAR_INFRA_LAME_TTL = 295, + VAR_INFRA_CACHE_SLABS = 296, + VAR_INFRA_CACHE_NUMHOSTS = 297, + VAR_INFRA_CACHE_LAME_SIZE = 298, + VAR_NAME = 299, + VAR_STUB_ZONE = 300, + VAR_STUB_HOST = 301, + VAR_STUB_ADDR = 302, + VAR_TARGET_FETCH_POLICY = 303, + VAR_HARDEN_SHORT_BUFSIZE = 304, + VAR_HARDEN_LARGE_QUERIES = 305, + VAR_FORWARD_ZONE = 306, + VAR_FORWARD_HOST = 307, + VAR_FORWARD_ADDR = 308, + VAR_DO_NOT_QUERY_ADDRESS = 309, + VAR_HIDE_IDENTITY = 310, + VAR_HIDE_VERSION = 311, + VAR_IDENTITY = 312, + VAR_VERSION = 313, + VAR_HARDEN_GLUE = 314, + VAR_MODULE_CONF = 315, + VAR_TRUST_ANCHOR_FILE = 316, + VAR_TRUST_ANCHOR = 317, + VAR_VAL_OVERRIDE_DATE = 318, + VAR_BOGUS_TTL = 319, + VAR_VAL_CLEAN_ADDITIONAL = 320, + VAR_VAL_PERMISSIVE_MODE = 321, + VAR_INCOMING_NUM_TCP = 322, + VAR_MSG_BUFFER_SIZE = 323, + VAR_KEY_CACHE_SIZE = 324, + VAR_KEY_CACHE_SLABS = 325, + VAR_TRUSTED_KEYS_FILE = 326, + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, + VAR_USE_SYSLOG = 328, + VAR_OUTGOING_INTERFACE = 329, + VAR_ROOT_HINTS = 330, + VAR_DO_NOT_QUERY_LOCALHOST = 331, + VAR_CACHE_MAX_TTL = 332, + VAR_HARDEN_DNSSEC_STRIPPED = 333, + VAR_ACCESS_CONTROL = 334, + VAR_LOCAL_ZONE = 335, + VAR_LOCAL_DATA = 336, + VAR_INTERFACE_AUTOMATIC = 337, + VAR_STATISTICS_INTERVAL = 338, + VAR_DO_DAEMONIZE = 339, + VAR_USE_CAPS_FOR_ID = 340, + VAR_STATISTICS_CUMULATIVE = 341, + VAR_OUTGOING_PORT_PERMIT = 342, + VAR_OUTGOING_PORT_AVOID = 343, + VAR_DLV_ANCHOR_FILE = 344, + VAR_DLV_ANCHOR = 345, + VAR_NEG_CACHE_SIZE = 346, + VAR_HARDEN_REFERRAL_PATH = 347, + VAR_PRIVATE_ADDRESS = 348, + VAR_PRIVATE_DOMAIN = 349, + VAR_REMOTE_CONTROL = 350, + VAR_CONTROL_ENABLE = 351, + VAR_CONTROL_INTERFACE = 352, + VAR_CONTROL_PORT = 353, + VAR_SERVER_KEY_FILE = 354, + VAR_SERVER_CERT_FILE = 355, + VAR_CONTROL_KEY_FILE = 356, + VAR_CONTROL_CERT_FILE = 357, + VAR_CONTROL_USE_CERT = 358, + VAR_EXTENDED_STATISTICS = 359, + VAR_LOCAL_DATA_PTR = 360, + VAR_JOSTLE_TIMEOUT = 361, + VAR_STUB_PRIME = 362, + VAR_UNWANTED_REPLY_THRESHOLD = 363, + VAR_LOG_TIME_ASCII = 364, + VAR_DOMAIN_INSECURE = 365, + VAR_PYTHON = 366, + VAR_PYTHON_SCRIPT = 367, + VAR_VAL_SIG_SKEW_MIN = 368, + VAR_VAL_SIG_SKEW_MAX = 369, + VAR_CACHE_MIN_TTL = 370, + VAR_VAL_LOG_LEVEL = 371, + VAR_AUTO_TRUST_ANCHOR_FILE = 372, + VAR_KEEP_MISSING = 373, + VAR_ADD_HOLDDOWN = 374, + VAR_DEL_HOLDDOWN = 375, + VAR_SO_RCVBUF = 376, + VAR_EDNS_BUFFER_SIZE = 377, + VAR_PREFETCH = 378, + VAR_PREFETCH_KEY = 379, + VAR_SO_SNDBUF = 380, + VAR_SO_REUSEPORT = 381, + VAR_HARDEN_BELOW_NXDOMAIN = 382, + VAR_IGNORE_CD_FLAG = 383, + VAR_LOG_QUERIES = 384, + VAR_LOG_REPLIES = 385, + VAR_LOG_LOCAL_ACTIONS = 386, + VAR_TCP_UPSTREAM = 387, + VAR_SSL_UPSTREAM = 388, + VAR_SSL_SERVICE_KEY = 389, + VAR_SSL_SERVICE_PEM = 390, + VAR_SSL_PORT = 391, + VAR_FORWARD_FIRST = 392, + VAR_STUB_SSL_UPSTREAM = 393, + VAR_FORWARD_SSL_UPSTREAM = 394, + VAR_TLS_CERT_BUNDLE = 395, + VAR_STUB_FIRST = 396, + VAR_MINIMAL_RESPONSES = 397, + VAR_RRSET_ROUNDROBIN = 398, + VAR_MAX_UDP_SIZE = 399, + VAR_DELAY_CLOSE = 400, + VAR_UNBLOCK_LAN_ZONES = 401, + VAR_INSECURE_LAN_ZONES = 402, + VAR_INFRA_CACHE_MIN_RTT = 403, + VAR_DNS64_PREFIX = 404, + VAR_DNS64_SYNTHALL = 405, + VAR_DNS64_IGNORE_AAAA = 406, + VAR_DNSTAP = 407, + VAR_DNSTAP_ENABLE = 408, + VAR_DNSTAP_SOCKET_PATH = 409, + VAR_DNSTAP_IP = 410, + VAR_DNSTAP_TLS = 411, + VAR_DNSTAP_TLS_SERVER_NAME = 412, + VAR_DNSTAP_TLS_CERT_BUNDLE = 413, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, + VAR_DNSTAP_SEND_IDENTITY = 416, + VAR_DNSTAP_SEND_VERSION = 417, + VAR_DNSTAP_IDENTITY = 418, + VAR_DNSTAP_VERSION = 419, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, + VAR_RESPONSE_IP_TAG = 426, + VAR_RESPONSE_IP = 427, + VAR_RESPONSE_IP_DATA = 428, + VAR_HARDEN_ALGO_DOWNGRADE = 429, + VAR_IP_TRANSPARENT = 430, + VAR_IP_DSCP = 431, + VAR_DISABLE_DNSSEC_LAME_CHECK = 432, + VAR_IP_RATELIMIT = 433, + VAR_IP_RATELIMIT_SLABS = 434, + VAR_IP_RATELIMIT_SIZE = 435, + VAR_RATELIMIT = 436, + VAR_RATELIMIT_SLABS = 437, + VAR_RATELIMIT_SIZE = 438, + VAR_RATELIMIT_FOR_DOMAIN = 439, + VAR_RATELIMIT_BELOW_DOMAIN = 440, + VAR_IP_RATELIMIT_FACTOR = 441, + VAR_RATELIMIT_FACTOR = 442, + VAR_SEND_CLIENT_SUBNET = 443, + VAR_CLIENT_SUBNET_ZONE = 444, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, + VAR_CLIENT_SUBNET_OPCODE = 446, + VAR_MAX_CLIENT_SUBNET_IPV4 = 447, + VAR_MAX_CLIENT_SUBNET_IPV6 = 448, + VAR_MIN_CLIENT_SUBNET_IPV4 = 449, + VAR_MIN_CLIENT_SUBNET_IPV6 = 450, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, + VAR_CAPS_WHITELIST = 453, + VAR_CACHE_MAX_NEGATIVE_TTL = 454, + VAR_PERMIT_SMALL_HOLDDOWN = 455, + VAR_QNAME_MINIMISATION = 456, + VAR_QNAME_MINIMISATION_STRICT = 457, + VAR_IP_FREEBIND = 458, + VAR_DEFINE_TAG = 459, + VAR_LOCAL_ZONE_TAG = 460, + VAR_ACCESS_CONTROL_TAG = 461, + VAR_LOCAL_ZONE_OVERRIDE = 462, + VAR_ACCESS_CONTROL_TAG_ACTION = 463, + VAR_ACCESS_CONTROL_TAG_DATA = 464, + VAR_VIEW = 465, + VAR_ACCESS_CONTROL_VIEW = 466, + VAR_VIEW_FIRST = 467, + VAR_SERVE_EXPIRED = 468, + VAR_SERVE_EXPIRED_TTL = 469, + VAR_SERVE_EXPIRED_TTL_RESET = 470, + VAR_SERVE_EXPIRED_REPLY_TTL = 471, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, + VAR_FAKE_DSA = 473, + VAR_FAKE_SHA1 = 474, + VAR_LOG_IDENTITY = 475, + VAR_HIDE_TRUSTANCHOR = 476, + VAR_TRUST_ANCHOR_SIGNALING = 477, + VAR_AGGRESSIVE_NSEC = 478, + VAR_USE_SYSTEMD = 479, + VAR_SHM_ENABLE = 480, + VAR_SHM_KEY = 481, + VAR_ROOT_KEY_SENTINEL = 482, + VAR_DNSCRYPT = 483, + VAR_DNSCRYPT_ENABLE = 484, + VAR_DNSCRYPT_PORT = 485, + VAR_DNSCRYPT_PROVIDER = 486, + VAR_DNSCRYPT_SECRET_KEY = 487, + VAR_DNSCRYPT_PROVIDER_CERT = 488, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, + VAR_IPSECMOD_ENABLED = 494, + VAR_IPSECMOD_HOOK = 495, + VAR_IPSECMOD_IGNORE_BOGUS = 496, + VAR_IPSECMOD_MAX_TTL = 497, + VAR_IPSECMOD_WHITELIST = 498, + VAR_IPSECMOD_STRICT = 499, + VAR_CACHEDB = 500, + VAR_CACHEDB_BACKEND = 501, + VAR_CACHEDB_SECRETSEED = 502, + VAR_CACHEDB_REDISHOST = 503, + VAR_CACHEDB_REDISPORT = 504, + VAR_CACHEDB_REDISTIMEOUT = 505, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, + VAR_FOR_UPSTREAM = 507, + VAR_AUTH_ZONE = 508, + VAR_ZONEFILE = 509, + VAR_MASTER = 510, + VAR_URL = 511, + VAR_FOR_DOWNSTREAM = 512, + VAR_FALLBACK_ENABLED = 513, + VAR_TLS_ADDITIONAL_PORT = 514, + VAR_LOW_RTT = 515, + VAR_LOW_RTT_PERMIL = 516, + VAR_FAST_SERVER_PERMIL = 517, + VAR_FAST_SERVER_NUM = 518, + VAR_ALLOW_NOTIFY = 519, + VAR_TLS_WIN_CERT = 520, + VAR_TCP_CONNECTION_LIMIT = 521, + VAR_FORWARD_NO_CACHE = 522, + VAR_STUB_NO_CACHE = 523, + VAR_LOG_SERVFAIL = 524, + VAR_DENY_ANY = 525, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, + VAR_LOG_TAG_QUERYREPLY = 527, + VAR_STREAM_WAIT_SIZE = 528, + VAR_TLS_CIPHERS = 529, + VAR_TLS_CIPHERSUITES = 530, + VAR_IPSET = 531, + VAR_IPSET_NAME_V4 = 532, + VAR_IPSET_NAME_V6 = 533, + VAR_TLS_SESSION_TICKET_KEYS = 534, + VAR_RPZ = 535, + VAR_TAGS = 536, + VAR_RPZ_ACTION_OVERRIDE = 537, + VAR_RPZ_CNAME_OVERRIDE = 538, + VAR_RPZ_LOG = 539, + VAR_RPZ_LOG_NAME = 540 + }; #endif /* Tokens. */ #define SPACE 258 @@ -636,79 +704,30 @@ #define VAR_RPZ_LOG 539 #define VAR_RPZ_LOG_NAME 540 - - - -/* Copy the first part of user declarations. */ -#line 38 "./util/configparser.y" - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "util/configyyrename.h" -#include "util/config_file.h" -#include "util/net_help.h" - -int ub_c_lex(void); -void ub_c_error(const char *message); - -static void validate_respip_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 - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - +/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 66 "./util/configparser.y" +union YYSTYPE { +#line 66 "./util/configparser.y" + char* str; -} -/* Line 193 of yacc.c. */ -#line 699 "util/configparser.c" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 + +#line 716 "util/configparser.c" + +}; +typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 #endif +extern YYSTYPE yylval; -/* Copy the second part of user declarations. */ +int yyparse (void); + +#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ -/* Line 216 of yacc.c. */ -#line 712 "util/configparser.c" #ifdef short # undef short @@ -722,23 +741,20 @@ typedef unsigned char yytype_uint8; #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; #else -typedef short int yytype_int8; +typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else -typedef unsigned short int yytype_uint16; +typedef unsigned short yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else -typedef short int yytype_int16; +typedef short yytype_int16; #endif #ifndef YYSIZE_T @@ -746,12 +762,11 @@ typedef short int yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif @@ -761,38 +776,60 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid # endif #endif +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(n) (n) +#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 -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int i) -#else -static int -YYID (i) - int i; +# define YY_INITIAL_VALUE(Value) Value #endif -{ - return i; -} +#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 + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -811,11 +848,11 @@ YYID (i) # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 # endif # endif # endif @@ -823,8 +860,8 @@ YYID (i) # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) + /* 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 @@ -838,25 +875,23 @@ YYID (i) # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined _STDLIB_H \ +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# 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 _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -866,14 +901,14 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -884,42 +919,46 @@ union yyalloc ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif +# 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) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*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, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_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. */ @@ -931,17 +970,19 @@ union yyalloc #define YYNNTS 309 /* YYNRULES -- Number of rules. */ #define YYNRULES 596 -/* YYNRULES -- Number of states. */ +/* YYNSTATES -- Number of states. */ #define YYNSTATES 887 -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 540 -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1002,228 +1043,7 @@ static const yytype_uint16 yytranslate[] = }; #if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 4, 7, 10, 13, 16, 19, 22, - 25, 28, 31, 34, 37, 40, 43, 45, 48, 49, - 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, - 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, - 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, - 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, - 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, - 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, - 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, - 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, - 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, - 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, - 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, - 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, - 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, - 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, - 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, - 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, - 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, - 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, - 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, - 431, 433, 435, 437, 440, 441, 443, 445, 447, 449, - 451, 453, 455, 457, 460, 461, 463, 465, 467, 469, - 471, 473, 475, 478, 479, 481, 483, 485, 487, 489, - 491, 493, 495, 498, 499, 501, 503, 505, 507, 509, - 511, 513, 515, 518, 521, 524, 527, 530, 532, 535, - 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, - 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, - 586, 589, 592, 595, 598, 601, 604, 607, 610, 613, - 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, - 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, - 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, - 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, - 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, - 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, - 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, - 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, - 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, - 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, - 916, 920, 923, 926, 929, 932, 935, 938, 941, 944, - 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, - 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, - 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, - 1038, 1042, 1046, 1051, 1056, 1061, 1065, 1069, 1072, 1075, - 1078, 1081, 1084, 1087, 1091, 1095, 1098, 1101, 1104, 1107, - 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, - 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, - 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, - 1200, 1204, 1208, 1212, 1215, 1218, 1221, 1223, 1226, 1227, - 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1246, 1249, - 1252, 1255, 1258, 1261, 1264, 1267, 1269, 1272, 1273, 1275, - 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, - 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1312, 1315, 1318, - 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, - 1351, 1354, 1357, 1360, 1363, 1365, 1368, 1369, 1371, 1374, - 1377, 1380, 1384, 1388, 1390, 1393, 1394, 1396, 1398, 1400, - 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1417, 1420, 1423, - 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1446, 1449, 1450, - 1452, 1454, 1456, 1458, 1460, 1463, 1466, 1469, 1472, 1475, - 1479, 1481, 1484, 1485, 1487, 1489, 1492 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int16 yyrhs[] = -{ - 287, 0, -1, -1, 287, 288, -1, 289, 290, -1, - 292, 293, -1, 295, 296, -1, 560, 561, -1, 528, - 529, -1, 539, 540, -1, 298, 299, -1, 568, 569, - -1, 581, 582, -1, 590, 591, -1, 301, 302, -1, - 309, 310, -1, 11, -1, 290, 291, -1, -1, 312, - -1, 313, -1, 319, -1, 332, -1, 338, -1, 339, - -1, 342, -1, 343, -1, 340, -1, 341, -1, 344, - -1, 345, -1, 346, -1, 347, -1, 348, -1, 330, - -1, 370, -1, 371, -1, 372, -1, 373, -1, 374, - -1, 399, -1, 400, -1, 401, -1, 406, -1, 407, - -1, 335, -1, 408, -1, 409, -1, 412, -1, 410, - -1, 411, -1, 414, -1, 415, -1, 416, -1, 430, - -1, 385, -1, 386, -1, 388, -1, 389, -1, 417, - -1, 433, -1, 379, -1, 381, -1, 434, -1, 440, - -1, 441, -1, 442, -1, 336, -1, 398, -1, 458, - -1, 459, -1, 380, -1, 453, -1, 363, -1, 331, - -1, 375, -1, 431, -1, 437, -1, 418, -1, 432, - -1, 461, -1, 462, -1, 337, -1, 314, -1, 362, - -1, 422, -1, 315, -1, 333, -1, 334, -1, 376, - -1, 377, -1, 460, -1, 420, -1, 424, -1, 425, - -1, 316, -1, 463, -1, 402, -1, 429, -1, 364, - -1, 384, -1, 435, -1, 436, -1, 439, -1, 452, - -1, 378, -1, 454, -1, 455, -1, 456, -1, 390, - -1, 397, -1, 426, -1, 427, -1, 391, -1, 419, - -1, 444, -1, 365, -1, 366, -1, 349, -1, 351, - -1, 369, -1, 352, -1, 353, -1, 354, -1, 464, - -1, 465, -1, 467, -1, 392, -1, 403, -1, 404, - -1, 405, -1, 468, -1, 469, -1, 470, -1, 413, - -1, 421, -1, 393, -1, 479, -1, 480, -1, 395, - -1, 483, -1, 484, -1, 481, -1, 482, -1, 485, - -1, 486, -1, 488, -1, 487, -1, 320, -1, 321, - -1, 322, -1, 323, -1, 324, -1, 325, -1, 326, - -1, 327, -1, 328, -1, 329, -1, 423, -1, 438, - -1, 457, -1, 492, -1, 394, -1, 471, -1, 472, - -1, 564, -1, 473, -1, 476, -1, 474, -1, 475, - -1, 477, -1, 493, -1, 445, -1, 446, -1, 447, - -1, 448, -1, 449, -1, 450, -1, 565, -1, 361, - -1, 478, -1, 566, -1, 567, -1, 317, -1, 318, - -1, 451, -1, 387, -1, 382, -1, 383, -1, 494, - -1, 496, -1, 495, -1, 497, -1, 498, -1, 499, - -1, 350, -1, 443, -1, 355, -1, 357, -1, 489, - -1, 491, -1, 490, -1, 356, -1, 589, -1, 368, - -1, 428, -1, 466, -1, 367, -1, 396, -1, 358, - -1, 359, -1, 360, -1, 45, -1, 293, 294, -1, - -1, 500, -1, 501, -1, 502, -1, 506, -1, 503, - -1, 504, -1, 505, -1, 51, -1, 296, 297, -1, - -1, 507, -1, 508, -1, 509, -1, 510, -1, 511, - -1, 512, -1, 210, -1, 299, 300, -1, -1, 521, - -1, 522, -1, 525, -1, 527, -1, 523, -1, 524, - -1, 526, -1, 253, -1, 302, 303, -1, -1, 513, - -1, 514, -1, 515, -1, 516, -1, 518, -1, 519, - -1, 520, -1, 517, -1, 281, 10, -1, 282, 10, - -1, 283, 10, -1, 284, 10, -1, 285, 10, -1, - 280, -1, 310, 311, -1, -1, 513, -1, 514, -1, - 304, -1, 515, -1, 516, -1, 517, -1, 305, -1, - 306, -1, 307, -1, 308, -1, 13, 10, -1, 12, - 10, -1, 83, 10, -1, 86, 10, -1, 104, 10, - -1, 225, 10, -1, 226, 10, -1, 14, 10, -1, - 188, 10, -1, 189, 10, -1, 190, 10, -1, 191, - 10, -1, 192, 10, -1, 193, 10, -1, 194, 10, - -1, 195, 10, -1, 196, 10, -1, 197, 10, -1, - 16, 10, -1, 74, 10, -1, 15, 10, -1, 87, - 10, -1, 88, 10, -1, 38, 10, -1, 67, 10, - -1, 82, 10, -1, 18, 10, -1, 19, 10, -1, - 21, 10, -1, 22, 10, -1, 17, 10, -1, 20, - 10, -1, 23, 10, -1, 24, 10, -1, 25, 10, - -1, 26, 10, -1, 27, 10, -1, 132, 10, -1, - 251, 10, -1, 133, 10, -1, 134, 10, -1, 135, - 10, -1, 136, 10, -1, 140, 10, -1, 265, 10, - -1, 259, 10, -1, 274, 10, -1, 275, 10, -1, - 279, 10, -1, 224, 10, -1, 84, 10, -1, 73, - 10, -1, 109, 10, -1, 129, 10, -1, 130, 10, - -1, 272, 10, -1, 269, 10, -1, 131, 10, -1, - 28, 10, -1, 29, 10, -1, 30, 10, -1, 31, - 10, -1, 32, 10, -1, 75, 10, -1, 89, 10, - -1, 90, 10, -1, 117, 10, -1, 61, 10, -1, - 71, 10, -1, 62, 10, -1, 222, 10, -1, 227, - 10, -1, 110, 10, -1, 55, 10, -1, 56, 10, - -1, 221, 10, -1, 57, 10, -1, 58, 10, -1, - 121, 10, -1, 125, 10, -1, 126, 10, -1, 175, - 10, -1, 203, 10, -1, 176, 10, -1, 273, 10, - -1, 122, 10, -1, 68, 10, -1, 33, 10, -1, - 34, 10, -1, 35, 10, -1, 106, 10, -1, 145, - 10, -1, 146, 10, -1, 147, 10, -1, 36, 10, - -1, 37, 10, -1, 39, 10, -1, 40, 10, -1, - 42, 10, -1, 43, 10, -1, 41, 10, -1, 148, - 10, -1, 48, 10, -1, 49, 10, -1, 50, 10, - -1, 59, 10, -1, 78, 10, -1, 127, 10, -1, - 92, 10, -1, 174, 10, -1, 85, 10, -1, 198, - 10, -1, 93, 10, -1, 94, 10, -1, 123, 10, - -1, 124, 10, -1, 270, 10, -1, 108, 10, -1, - 54, 10, -1, 76, 10, -1, 79, 10, 10, -1, - 60, 10, -1, 63, 10, -1, 113, 10, -1, 114, - 10, -1, 77, 10, -1, 199, 10, -1, 115, 10, - -1, 64, 10, -1, 65, 10, -1, 66, 10, -1, - 223, 10, -1, 128, 10, -1, 213, 10, -1, 214, - 10, -1, 215, 10, -1, 216, 10, -1, 217, 10, - -1, 218, 10, -1, 219, 10, -1, 116, 10, -1, - 72, 10, -1, 119, 10, -1, 120, 10, -1, 118, - 10, -1, 200, 10, -1, 69, 10, -1, 70, 10, - -1, 91, 10, -1, 80, 10, 10, -1, 81, 10, - -1, 105, 10, -1, 142, 10, -1, 143, 10, -1, - 271, 10, -1, 144, 10, -1, 149, 10, -1, 150, - 10, -1, 151, 10, -1, 204, 10, -1, 205, 10, - 10, -1, 206, 10, 10, -1, 208, 10, 10, 10, - -1, 209, 10, 10, 10, -1, 207, 10, 10, 10, - -1, 211, 10, 10, -1, 171, 10, 10, -1, 178, - 10, -1, 181, 10, -1, 180, 10, -1, 183, 10, - -1, 179, 10, -1, 182, 10, -1, 184, 10, 10, - -1, 185, 10, 10, -1, 186, 10, -1, 187, 10, - -1, 260, 10, -1, 263, 10, -1, 262, 10, -1, - 201, 10, -1, 202, 10, -1, 239, 10, -1, 241, - 10, -1, 240, 10, -1, 242, 10, -1, 243, 10, - -1, 244, 10, -1, 44, 10, -1, 46, 10, -1, - 47, 10, -1, 141, 10, -1, 268, 10, -1, 138, - 10, -1, 107, 10, -1, 44, 10, -1, 52, 10, - -1, 53, 10, -1, 137, 10, -1, 267, 10, -1, - 139, 10, -1, 44, 10, -1, 254, 10, -1, 255, - 10, -1, 256, 10, -1, 264, 10, -1, 257, 10, - -1, 252, 10, -1, 258, 10, -1, 44, 10, -1, - 80, 10, 10, -1, 172, 10, 10, -1, 173, 10, - 10, -1, 81, 10, -1, 105, 10, -1, 212, 10, - -1, 95, -1, 529, 530, -1, -1, 531, -1, 533, - -1, 532, -1, 535, -1, 536, -1, 537, -1, 538, - -1, 534, -1, 96, 10, -1, 98, 10, -1, 97, - 10, -1, 103, 10, -1, 99, 10, -1, 100, 10, - -1, 101, 10, -1, 102, 10, -1, 152, -1, 540, - 541, -1, -1, 542, -1, 543, -1, 544, -1, 545, - -1, 546, -1, 547, -1, 548, -1, 549, -1, 550, - -1, 551, -1, 552, -1, 553, -1, 554, -1, 555, - -1, 556, -1, 557, -1, 558, -1, 559, -1, 153, - 10, -1, 154, 10, -1, 155, 10, -1, 156, 10, - -1, 157, 10, -1, 158, 10, -1, 159, 10, -1, - 160, 10, -1, 161, 10, -1, 162, 10, -1, 163, - 10, -1, 164, 10, -1, 165, 10, -1, 166, 10, - -1, 167, 10, -1, 168, 10, -1, 169, 10, -1, - 170, 10, -1, 111, -1, 561, 562, -1, -1, 563, - -1, 112, 10, -1, 177, 10, -1, 220, 10, -1, - 172, 10, 10, -1, 173, 10, 10, -1, 228, -1, - 569, 570, -1, -1, 571, -1, 572, -1, 573, -1, - 576, -1, 574, -1, 575, -1, 577, -1, 578, -1, - 579, -1, 580, -1, 229, 10, -1, 230, 10, -1, - 231, 10, -1, 233, 10, -1, 234, 10, -1, 232, - 10, -1, 235, 10, -1, 236, 10, -1, 237, 10, - -1, 238, 10, -1, 245, -1, 582, 583, -1, -1, - 584, -1, 585, -1, 586, -1, 587, -1, 588, -1, - 246, 10, -1, 247, 10, -1, 248, 10, -1, 249, - 10, -1, 250, 10, -1, 266, 10, 10, -1, 276, - -1, 591, 592, -1, -1, 593, -1, 594, -1, 277, - 10, -1, 278, 10, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 178, 178, 178, 179, 179, 180, 180, 181, 181, @@ -1289,7 +1109,7 @@ static const yytype_uint16 yyrline[] = }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -1524,13 +1344,13 @@ static const char *const yytname[] = "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", "redis_server_port", "redis_timeout", "server_tcp_connection_limit", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", - "ipset_name_v6", 0 + "ipset_name_v6", YY_NULLPTR }; #endif # ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@ -1565,271 +1385,18 @@ static const yytype_uint16 yytoknum[] = }; # endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = -{ - 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, - 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, - 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, - 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, - 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 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, 529, 530, - 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, - 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, - 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, - 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 591, 592, 592, 593, 594 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 0, 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, 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, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, - 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, - 1, 2, 0, 1, 1, 2, 2 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint16 yydefact[] = -{ - 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, - 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, - 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, - 6, 10, 14, 15, 8, 9, 7, 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, 17, 19, 20, 83, 86, 95, 183, - 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, - 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, - 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, - 209, 210, 211, 179, 84, 73, 99, 116, 117, 207, - 204, 120, 35, 36, 37, 38, 39, 75, 89, 90, - 105, 61, 71, 62, 187, 188, 100, 55, 56, 186, - 57, 58, 109, 113, 127, 136, 162, 139, 208, 110, - 68, 40, 41, 42, 97, 128, 129, 130, 43, 44, - 46, 47, 49, 50, 48, 134, 51, 52, 53, 59, - 78, 114, 92, 135, 85, 158, 93, 94, 111, 112, - 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, - 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, - 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, - 69, 70, 91, 80, 81, 96, 124, 125, 206, 126, - 131, 132, 133, 163, 164, 166, 168, 169, 167, 170, - 180, 137, 138, 142, 143, 140, 141, 144, 145, 147, - 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, - 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, - 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, - 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, - 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, - 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, - 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, - 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, - 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, - 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, - 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, - 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, - 304, 305, 306, 328, 329, 330, 331, 332, 357, 358, - 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, - 373, 374, 388, 343, 344, 346, 347, 375, 391, 337, - 339, 392, 398, 399, 400, 294, 356, 416, 417, 338, - 411, 321, 289, 333, 389, 395, 376, 0, 0, 420, - 295, 272, 320, 380, 273, 291, 292, 334, 335, 418, - 378, 382, 383, 274, 421, 360, 387, 322, 342, 393, - 394, 397, 410, 336, 414, 412, 413, 348, 355, 384, - 385, 349, 350, 377, 402, 323, 324, 327, 307, 309, - 310, 311, 312, 313, 422, 423, 425, 361, 362, 363, - 371, 426, 427, 428, 0, 0, 0, 379, 351, 353, - 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, - 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 381, 396, 415, 450, 451, 352, 429, 0, 0, - 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, - 409, 550, 345, 340, 401, 319, 275, 276, 341, 452, - 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, - 314, 0, 326, 386, 424, 325, 354, 316, 317, 318, - 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, - 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, - 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, - 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, - 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, - 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, - 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, - 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, - 589, 480, 481, 482, 434, 432, 433 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, - 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, - 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 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, 435, 436, 437, 438, 439, 440, - 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, - 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, - 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, - 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, - 589, 590, 591, 426, 27, 39, 594, 595, 596 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ #define YYPACT_NINF -270 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-270))) + +#define YYTABLE_NINF -1 + +#define yytable_value_is_error(Yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ static const yytype_int16 yypact[] = { -270, 0, -270, -270, -270, -270, -270, -270, -270, -270, @@ -1923,7 +1490,103 @@ static const yytype_int16 yypact[] = -270, -270, -270, -270, -270, -270, -270 }; -/* YYPGOTO[NTERM-NUM]. */ + /* 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_uint16 yydefact[] = +{ + 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, + 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, + 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, + 6, 10, 14, 15, 8, 9, 7, 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, 17, 19, 20, 83, 86, 95, 183, + 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, + 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, + 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, + 209, 210, 211, 179, 84, 73, 99, 116, 117, 207, + 204, 120, 35, 36, 37, 38, 39, 75, 89, 90, + 105, 61, 71, 62, 187, 188, 100, 55, 56, 186, + 57, 58, 109, 113, 127, 136, 162, 139, 208, 110, + 68, 40, 41, 42, 97, 128, 129, 130, 43, 44, + 46, 47, 49, 50, 48, 134, 51, 52, 53, 59, + 78, 114, 92, 135, 85, 158, 93, 94, 111, 112, + 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, + 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, + 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, + 69, 70, 91, 80, 81, 96, 124, 125, 206, 126, + 131, 132, 133, 163, 164, 166, 168, 169, 167, 170, + 180, 137, 138, 142, 143, 140, 141, 144, 145, 147, + 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, + 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, + 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, + 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, + 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, + 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, + 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, + 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, + 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, + 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, + 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, + 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, + 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, + 304, 305, 306, 328, 329, 330, 331, 332, 357, 358, + 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, + 373, 374, 388, 343, 344, 346, 347, 375, 391, 337, + 339, 392, 398, 399, 400, 294, 356, 416, 417, 338, + 411, 321, 289, 333, 389, 395, 376, 0, 0, 420, + 295, 272, 320, 380, 273, 291, 292, 334, 335, 418, + 378, 382, 383, 274, 421, 360, 387, 322, 342, 393, + 394, 397, 410, 336, 414, 412, 413, 348, 355, 384, + 385, 349, 350, 377, 402, 323, 324, 327, 307, 309, + 310, 311, 312, 313, 422, 423, 425, 361, 362, 363, + 371, 426, 427, 428, 0, 0, 0, 379, 351, 353, + 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, + 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 381, 396, 415, 450, 451, 352, 429, 0, 0, + 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, + 409, 550, 345, 340, 401, 319, 275, 276, 341, 452, + 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, + 314, 0, 326, 386, 424, 325, 354, 316, 317, 318, + 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, + 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, + 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, + 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, + 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, + 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, + 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, + 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, + 589, 480, 481, 482, 434, 432, 433 +}; + + /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, @@ -1959,11 +1622,45 @@ static const yytype_int16 yypgoto[] = -270, -270, -270, -270, -270, -270, -270, -270, -270 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -1 + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, + 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, + 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 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, 435, 436, 437, 438, 439, 440, + 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, + 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, + 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, + 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, + 589, 590, 591, 426, 27, 39, 594, 595, 596 +}; + + /* 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_uint16 yytable[] = { 2, 470, 427, 455, 428, 429, 557, 442, 592, 593, @@ -2094,8 +1791,8 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 33, 33, 33, 33 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 287, 0, 11, 45, 51, 95, 111, 152, 210, @@ -2189,95 +1886,171 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10 }; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = +{ + 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, + 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, + 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, + 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, + 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 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, 529, 530, + 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, + 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, + 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, + 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 591, 592, 592, 593, 594 +}; -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 0, 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, 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, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 1, 2, 0, 1, 1, 2, 2 +}; -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab -#define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) +#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) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -2287,80 +2060,61 @@ while (YYID (0)) # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; +/* 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, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif - switch (yytype) - { - default: - break; - } + YYUSE (yytype); } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + YYFPRINTF (yyo, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -2368,66 +2122,54 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) | TOP (included). | `------------------------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) -#else -static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; -#endif +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + 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 (YYID (0)) +# 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. | `------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { + unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] + ); + YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) +# 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. */ @@ -2441,7 +2183,7 @@ int yydebug; /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -2456,7 +2198,6 @@ int yydebug; # define YYMAXDEPTH 10000 #endif - #if YYERROR_VERBOSE @@ -2465,15 +2206,8 @@ int yydebug; # define yystrlen strlen # else /* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@ -2489,16 +2223,8 @@ yystrlen (yystr) # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif { char *yyd = yydest; const char *yys = yysrc; @@ -2528,242 +2254,245 @@ yytnamerr (char *yyres, const char *yystr) char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + append: + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); - return yystpcpy (yyres, yystr) - yyres; + return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); } # endif -/* Copy into YYRESULT an error message about the unexpected token - YYCHAR while in state YYSTATE. Return the number of bytes copied, - including the terminating null byte. If YYRESULT is null, do not - copy anything; just return the number of bytes that would be - copied. As a special case, return 0 if an ordinary "syntax error" - message will do. Return YYSIZE_MAXIMUM if overflow occurs during - size calculation. */ -static YYSIZE_T -yysyntax_error (char *yyresult, int yystate, int yychar) +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) { - int yyn = yypact[yystate]; + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; - if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) - return 0; - else + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; -# if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -# endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - - if (yysize_overflow) - return YYSIZE_MAXIMUM; - - if (yyresult) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yyresult; - int yyi = 0; - while ((*yyp = *yyf) != '\0') - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - } - return yysize; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return 2; + } + } + } } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + default: /* Avoid compiler warnings. */ + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return 2; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; } #endif /* YYERROR_VERBOSE */ - /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif { YYUSE (yyvaluep); - if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - switch (yytype) - { - - default: - break; - } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ -/* The look-ahead symbol. */ + +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; - /* Number of syntax errors so far. */ int yynerrs; - /*----------. | yyparse. | `----------*/ -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) int yyparse (void) -#else -int -yyparse () - -#endif -#endif { - - int yystate; + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + int yyn; int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ + /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -2771,156 +2500,127 @@ yyparse () YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - + yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +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: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yynewstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + *yyssp = (yytype_int16) yystate; 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. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); -#ifdef yyoverflow +# 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. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; - - /* 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 * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; + /* 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 * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (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 -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yypact_value_is_default (yyn)) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; + yychar = yylex (); } if (yychar <= YYEOF) @@ -2942,30 +2642,27 @@ yybackup: yyn = yytable[yyn]; if (yyn <= 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; + if (yytable_value_is_error (yyn)) + goto yyerrlab; yyn = -yyn; goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -2980,14 +2677,14 @@ yydefault: /*-----------------------------. -| yyreduce -- Do a reduction. | +| 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'. + '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -3000,11 +2697,12 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: + case 16: #line 189 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } +#line 2706 "util/configparser.c" break; case 212: @@ -3019,6 +2717,7 @@ yyreduce: } else yyerror("out of memory"); } +#line 2721 "util/configparser.c" break; case 222: @@ -3033,6 +2732,7 @@ yyreduce: } else yyerror("out of memory"); } +#line 2736 "util/configparser.c" break; case 231: @@ -3049,6 +2749,7 @@ yyreduce: } else yyerror("out of memory"); } +#line 2753 "util/configparser.c" break; case 241: @@ -3068,6 +2769,7 @@ yyreduce: } else yyerror("out of memory"); } +#line 2773 "util/configparser.c" break; case 252: @@ -3075,10 +2777,10 @@ yyreduce: { uint8_t* bitlist; size_t len = 0; - OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[(2) - (2)].str))); - bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(2) - (2)].str), + OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); + bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); } @@ -3088,53 +2790,58 @@ yyreduce: } } +#line 2794 "util/configparser.c" break; case 253: #line 378 "./util/configparser.y" { - OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "nxdomain")!=0 && strcmp((yyvsp[(2) - (2)].str), "nodata")!=0 && - strcmp((yyvsp[(2) - (2)].str), "passthru")!=0 && strcmp((yyvsp[(2) - (2)].str), "drop")!=0 && - strcmp((yyvsp[(2) - (2)].str), "cname")!=0 && strcmp((yyvsp[(2) - (2)].str), "disabled")!=0) { + 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[(2) - (2)].str)); + free((yyvsp[0].str)); cfg_parser->cfg->auths->rpz_action_override = NULL; } else { - cfg_parser->cfg->auths->rpz_action_override = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } +#line 2813 "util/configparser.c" break; case 254: #line 395 "./util/configparser.y" { - OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); - cfg_parser->cfg->auths->rpz_cname = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } +#line 2823 "util/configparser.c" break; case 255: #line 403 "./util/configparser.y" { - OUTYY(("P(rpz_log:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 2835 "util/configparser.c" break; case 256: #line 413 "./util/configparser.y" { - OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } +#line 2845 "util/configparser.c" break; case 257: @@ -3154,273 +2861,292 @@ yyreduce: } else yyerror("out of memory"); } +#line 2865 "util/configparser.c" break; case 270: #line 444 "./util/configparser.y" { - OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 2877 "util/configparser.c" break; case 271: #line 453 "./util/configparser.y" { - OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 2889 "util/configparser.c" break; case 272: #line 462 "./util/configparser.y" { - OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) + 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[(2) - (2)].str)) == 0) + else if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); - else cfg_parser->cfg->stat_interval = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 2903 "util/configparser.c" break; case 273: #line 473 "./util/configparser.y" { - OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 2915 "util/configparser.c" break; case 274: #line 482 "./util/configparser.y" { - OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 2927 "util/configparser.c" break; case 275: #line 491 "./util/configparser.y" { - OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 2939 "util/configparser.c" break; case 276: #line 500 "./util/configparser.y" { - OUTYY(("P(server_shm_key:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) + 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[(2) - (2)].str)) == 0) + else if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); - else cfg_parser->cfg->shm_key = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 2953 "util/configparser.c" break; case 277: #line 511 "./util/configparser.y" { - OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->port = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 2965 "util/configparser.c" break; case 278: #line 520 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[(2) - (2)].str))) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 2980 "util/configparser.c" break; case 279: #line 532 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, - (yyvsp[(2) - (2)].str))) + (yyvsp[0].str))) fatal_exit("out of memory adding client-subnet-zone"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 2996 "util/configparser.c" break; case 280: #line 546 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); + (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3014 "util/configparser.c" break; case 281: #line 561 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3028 "util/configparser.c" break; case 282: #line 572 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 32) + else if (atoi((yyvsp[0].str)) > 32) cfg_parser->cfg->max_client_subnet_ipv4 = 32; - else if (atoi((yyvsp[(2) - (2)].str)) < 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3048 "util/configparser.c" break; case 283: #line 589 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 128) + else if (atoi((yyvsp[0].str)) > 128) cfg_parser->cfg->max_client_subnet_ipv6 = 128; - else if (atoi((yyvsp[(2) - (2)].str)) < 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3068 "util/configparser.c" break; case 284: #line 606 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 32) + else if (atoi((yyvsp[0].str)) > 32) cfg_parser->cfg->min_client_subnet_ipv4 = 32; - else if (atoi((yyvsp[(2) - (2)].str)) < 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3088 "util/configparser.c" break; case 285: #line 623 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 128) + else if (atoi((yyvsp[0].str)) > 128) cfg_parser->cfg->min_client_subnet_ipv6 = 128; - else if (atoi((yyvsp[(2) - (2)].str)) < 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3108 "util/configparser.c" break; case 286: #line 640 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) < 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3126 "util/configparser.c" break; case 287: #line 655 "./util/configparser.y" { #ifdef CLIENT_SUBNET - OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) < 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3144 "util/configparser.c" break; case 288: #line 670 "./util/configparser.y" { - OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str))); + 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, @@ -3428,14 +3154,15 @@ yyreduce: if(!cfg_parser->cfg->ifs) yyerror("out of memory"); else - cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } +#line 3160 "util/configparser.c" break; case 289: #line 683 "./util/configparser.y" { - OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str))); + 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( @@ -3445,455 +3172,496 @@ yyreduce: yyerror("out of memory"); else cfg_parser->cfg->out_ifs[ - cfg_parser->cfg->num_out_ifs++] = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } +#line 3178 "util/configparser.c" break; case 290: #line 698 "./util/configparser.y" { - OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3190 "util/configparser.c" break; case 291: #line 707 "./util/configparser.y" { - OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3202 "util/configparser.c" break; case 292: #line 716 "./util/configparser.y" { - OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3214 "util/configparser.c" break; case 293: #line 725 "./util/configparser.y" { - OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3226 "util/configparser.c" break; case 294: #line 734 "./util/configparser.y" { - OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3238 "util/configparser.c" break; case 295: #line 743 "./util/configparser.y" { - OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3250 "util/configparser.c" break; case 296: #line 752 "./util/configparser.y" { - OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3262 "util/configparser.c" break; case 297: #line 761 "./util/configparser.y" { - OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3274 "util/configparser.c" break; case 298: #line 770 "./util/configparser.y" { - OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3286 "util/configparser.c" break; case 299: #line 779 "./util/configparser.y" { - OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3298 "util/configparser.c" break; case 300: #line 788 "./util/configparser.y" { - OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3310 "util/configparser.c" break; case 301: #line 797 "./util/configparser.y" { - OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3322 "util/configparser.c" break; case 302: #line 806 "./util/configparser.y" { - OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3334 "util/configparser.c" break; case 303: #line 815 "./util/configparser.y" { - OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3346 "util/configparser.c" break; case 304: #line 824 "./util/configparser.y" { - OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 120000) + else if (atoi((yyvsp[0].str)) > 120000) cfg_parser->cfg->tcp_idle_timeout = 120000; - else if (atoi((yyvsp[(2) - (2)].str)) < 1) + else if (atoi((yyvsp[0].str)) < 1) cfg_parser->cfg->tcp_idle_timeout = 1; - else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3362 "util/configparser.c" break; case 305: #line 837 "./util/configparser.y" { - OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3374 "util/configparser.c" break; case 306: #line 846 "./util/configparser.y" { - OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 6553500) + else if (atoi((yyvsp[0].str)) > 6553500) cfg_parser->cfg->tcp_keepalive_timeout = 6553500; - else if (atoi((yyvsp[(2) - (2)].str)) < 1) + else if (atoi((yyvsp[0].str)) < 1) cfg_parser->cfg->tcp_keepalive_timeout = 0; - else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3390 "util/configparser.c" break; case 307: #line 859 "./util/configparser.y" { - OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3402 "util/configparser.c" break; case 308: #line 868 "./util/configparser.y" { - OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3414 "util/configparser.c" break; case 309: #line 877 "./util/configparser.y" { - OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3426 "util/configparser.c" break; case 310: #line 886 "./util/configparser.y" { - OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } +#line 3436 "util/configparser.c" break; case 311: #line 893 "./util/configparser.y" { - OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } +#line 3446 "util/configparser.c" break; case 312: #line 900 "./util/configparser.y" { - OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3458 "util/configparser.c" break; case 313: #line 909 "./util/configparser.y" { - OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } +#line 3468 "util/configparser.c" break; case 314: #line 916 "./util/configparser.y" { - OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3480 "util/configparser.c" break; case 315: #line 925 "./util/configparser.y" { - OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, - (yyvsp[(2) - (2)].str))) + (yyvsp[0].str))) yyerror("out of memory"); } +#line 3491 "util/configparser.c" break; case 316: #line 933 "./util/configparser.y" { - OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); - cfg_parser->cfg->tls_ciphers = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } +#line 3501 "util/configparser.c" break; case 317: #line 940 "./util/configparser.y" { - OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); - cfg_parser->cfg->tls_ciphersuites = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } +#line 3511 "util/configparser.c" break; case 318: #line 947 "./util/configparser.y" { - OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, - (yyvsp[(2) - (2)].str))) + (yyvsp[0].str))) yyerror("out of memory"); } +#line 3522 "util/configparser.c" break; case 319: #line 955 "./util/configparser.y" { - OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3534 "util/configparser.c" break; case 320: #line 964 "./util/configparser.y" { - OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3546 "util/configparser.c" break; case 321: #line 973 "./util/configparser.y" { - OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); + else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0); #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) - if(strcmp((yyvsp[(2) - (2)].str), "yes") == 0) + if(strcmp((yyvsp[0].str), "yes") == 0) yyerror("no syslog services are available. " "(reconfigure and compile to add)"); #endif - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3563 "util/configparser.c" break; case 322: #line 987 "./util/configparser.y" { - OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3575 "util/configparser.c" break; case 323: #line 996 "./util/configparser.y" { - OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3587 "util/configparser.c" break; case 324: #line 1005 "./util/configparser.y" { - OUTYY(("P(server_log_replies:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3599 "util/configparser.c" break; case 325: #line 1014 "./util/configparser.y" { - OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3611 "util/configparser.c" break; case 326: #line 1023 "./util/configparser.y" { - OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3623 "util/configparser.c" break; case 327: #line 1032 "./util/configparser.y" { - OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3635 "util/configparser.c" break; case 328: #line 1041 "./util/configparser.y" { - OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); - cfg_parser->cfg->chrootdir = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->chrootdir = (yyvsp[0].str); } +#line 3645 "util/configparser.c" break; case 329: #line 1048 "./util/configparser.y" { - OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); - cfg_parser->cfg->username = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->username = (yyvsp[0].str); } +#line 3655 "util/configparser.c" break; case 330: #line 1055 "./util/configparser.y" { - OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); - cfg_parser->cfg->directory = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->directory = (yyvsp[0].str); /* change there right away for includes relative to this */ - if((yyvsp[(2) - (2)].str)[0]) { + if((yyvsp[0].str)[0]) { char* d; #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg_parser->cfg); @@ -3912,1078 +3680,1169 @@ yyreduce: } } } +#line 3684 "util/configparser.c" break; case 331: #line 1081 "./util/configparser.y" { - OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); - cfg_parser->cfg->logfile = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } +#line 3695 "util/configparser.c" break; case 332: #line 1089 "./util/configparser.y" { - OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); - cfg_parser->cfg->pidfile = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->pidfile = (yyvsp[0].str); } +#line 3705 "util/configparser.c" break; case 333: #line 1096 "./util/configparser.y" { - OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str))) + 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 3715 "util/configparser.c" break; case 334: #line 1103 "./util/configparser.y" { - OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); - cfg_parser->cfg->dlv_anchor_file = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } +#line 3725 "util/configparser.c" break; case 335: #line 1110 "./util/configparser.y" { - OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str))) + OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } +#line 3735 "util/configparser.c" break; case 336: #line 1117 "./util/configparser.y" { - OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str))) + auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } +#line 3746 "util/configparser.c" break; case 337: #line 1125 "./util/configparser.y" { - OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> - trust_anchor_file_list, (yyvsp[(2) - (2)].str))) + trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } +#line 3757 "util/configparser.c" break; case 338: #line 1133 "./util/configparser.y" { - OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> - trusted_keys_file_list, (yyvsp[(2) - (2)].str))) + trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } +#line 3768 "util/configparser.c" break; case 339: #line 1141 "./util/configparser.y" { - OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str))) + 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 3778 "util/configparser.c" break; case 340: #line 1148 "./util/configparser.y" { - OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3792 "util/configparser.c" break; case 341: #line 1159 "./util/configparser.y" { - OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3806 "util/configparser.c" break; case 342: #line 1170 "./util/configparser.y" { - OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str))) + 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 3816 "util/configparser.c" break; case 343: #line 1177 "./util/configparser.y" { - OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3828 "util/configparser.c" break; case 344: #line 1186 "./util/configparser.y" { - OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3840 "util/configparser.c" break; case 345: #line 1195 "./util/configparser.y" { - OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3852 "util/configparser.c" break; case 346: #line 1204 "./util/configparser.y" { - OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); - cfg_parser->cfg->identity = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->identity = (yyvsp[0].str); } +#line 3862 "util/configparser.c" break; case 347: #line 1211 "./util/configparser.y" { - OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); - cfg_parser->cfg->version = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->version = (yyvsp[0].str); } +#line 3872 "util/configparser.c" break; case 348: #line 1218 "./util/configparser.y" { - OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3883 "util/configparser.c" break; case 349: #line 1226 "./util/configparser.y" { - OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3894 "util/configparser.c" break; case 350: #line 1234 "./util/configparser.y" { - OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3907 "util/configparser.c" break; case 351: #line 1244 "./util/configparser.y" { - OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3920 "util/configparser.c" break; case 352: #line 1254 "./util/configparser.y" { - OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 3933 "util/configparser.c" break; case 353: #line 1264 "./util/configparser.y" { - OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)) > 63) + else if (atoi((yyvsp[0].str)) > 63) yyerror("value too large (max 63)"); - else if (atoi((yyvsp[(2) - (2)].str)) < 0) + else if (atoi((yyvsp[0].str)) < 0) yyerror("value too small (min 0)"); else - cfg_parser->cfg->ip_dscp = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3950 "util/configparser.c" break; case 354: #line 1278 "./util/configparser.y" { - OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->stream_wait_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 3961 "util/configparser.c" break; case 355: #line 1286 "./util/configparser.y" { - OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); - else if (atoi((yyvsp[(2) - (2)].str)) < 12) + else if (atoi((yyvsp[0].str)) < 12) yyerror("edns buffer size too small"); - else if (atoi((yyvsp[(2) - (2)].str)) > 65535) + else if (atoi((yyvsp[0].str)) > 65535) cfg_parser->cfg->edns_buffer_size = 65535; - else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3977 "util/configparser.c" break; case 356: #line 1299 "./util/configparser.y" { - OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); - else if (atoi((yyvsp[(2) - (2)].str)) < 4096) + else if (atoi((yyvsp[0].str)) < 4096) yyerror("message buffer size too small (use 4096)"); - else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 3991 "util/configparser.c" break; case 357: #line 1310 "./util/configparser.y" { - OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4002 "util/configparser.c" break; case 358: #line 1318 "./util/configparser.y" { - OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4018 "util/configparser.c" break; case 359: #line 1331 "./util/configparser.y" { - OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4030 "util/configparser.c" break; case 360: #line 1340 "./util/configparser.y" { - OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4042 "util/configparser.c" break; case 361: #line 1349 "./util/configparser.y" { - OUTYY(("P(server_delay_close:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4054 "util/configparser.c" break; case 362: #line 1358 "./util/configparser.y" { - OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4067 "util/configparser.c" break; case 363: #line 1368 "./util/configparser.y" { - OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4080 "util/configparser.c" break; case 364: #line 1378 "./util/configparser.y" { - OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4091 "util/configparser.c" break; case 365: #line 1386 "./util/configparser.y" { - OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4107 "util/configparser.c" break; case 366: #line 1399 "./util/configparser.y" { - OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4119 "util/configparser.c" break; case 367: #line 1408 "./util/configparser.y" { - OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + "removed, use infra-host-ttl)", (yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4130 "util/configparser.c" break; case 368: #line 1416 "./util/configparser.y" { - OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4142 "util/configparser.c" break; case 369: #line 1425 "./util/configparser.y" { - OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4153 "util/configparser.c" break; case 370: #line 1433 "./util/configparser.y" { - OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4169 "util/configparser.c" break; case 371: #line 1446 "./util/configparser.y" { - OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4181 "util/configparser.c" break; case 372: #line 1455 "./util/configparser.y" { - OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } +#line 4191 "util/configparser.c" break; case 373: #line 1462 "./util/configparser.y" { - OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4204 "util/configparser.c" break; case 374: #line 1472 "./util/configparser.y" { - OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4217 "util/configparser.c" break; case 375: #line 1482 "./util/configparser.y" { - OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4230 "util/configparser.c" break; case 376: #line 1492 "./util/configparser.y" { - OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4243 "util/configparser.c" break; case 377: #line 1502 "./util/configparser.y" { - OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4256 "util/configparser.c" break; case 378: #line 1512 "./util/configparser.y" { - OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4269 "util/configparser.c" break; case 379: #line 1522 "./util/configparser.y" { - OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4282 "util/configparser.c" break; case 380: #line 1532 "./util/configparser.y" { - OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4295 "util/configparser.c" break; case 381: #line 1542 "./util/configparser.y" { - OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[(2) - (2)].str))) + 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 4305 "util/configparser.c" break; case 382: #line 1549 "./util/configparser.y" { - OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str))) + 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 4315 "util/configparser.c" break; case 383: #line 1556 "./util/configparser.y" { - OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str))) + 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 4325 "util/configparser.c" break; case 384: #line 1563 "./util/configparser.y" { - OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4337 "util/configparser.c" break; case 385: #line 1572 "./util/configparser.y" { - OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4349 "util/configparser.c" break; case 386: #line 1581 "./util/configparser.y" { - OUTYY(("P(server_deny_any:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4361 "util/configparser.c" break; case 387: #line 1590 "./util/configparser.y" { - OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4373 "util/configparser.c" break; case 388: #line 1599 "./util/configparser.y" { - OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str))) + 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 4383 "util/configparser.c" break; case 389: #line 1606 "./util/configparser.y" { - OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4396 "util/configparser.c" break; case 390: #line 1616 "./util/configparser.y" { - OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && - strcmp((yyvsp[(3) - (3)].str), "deny_non_local")!=0 && - strcmp((yyvsp[(3) - (3)].str), "refuse_non_local")!=0 && - strcmp((yyvsp[(3) - (3)].str), "allow_setrd")!=0 && - strcmp((yyvsp[(3) - (3)].str), "allow")!=0 && - strcmp((yyvsp[(3) - (3)].str), "allow_snoop")!=0) { + OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && + strcmp((yyvsp[0].str), "deny_non_local")!=0 && + strcmp((yyvsp[0].str), "refuse_non_local")!=0 && + strcmp((yyvsp[0].str), "allow_setrd")!=0 && + strcmp((yyvsp[0].str), "allow")!=0 && + strcmp((yyvsp[0].str), "allow_snoop")!=0) { yyerror("expected deny, refuse, deny_non_local, " "refuse_non_local, allow, allow_setrd or " "allow_snoop in access control action"); - free((yyvsp[(2) - (3)].str)); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); } else { - if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } } +#line 4419 "util/configparser.c" break; case 391: #line 1636 "./util/configparser.y" { - OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); - cfg_parser->cfg->module_conf = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->module_conf = (yyvsp[0].str); } +#line 4429 "util/configparser.c" break; case 392: #line 1643 "./util/configparser.y" { - OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str))); - if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { + 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[(2) - (2)].str)) == 14) { + } else if(strlen((yyvsp[0].str)) == 14) { cfg_parser->cfg->val_date_override = - cfg_convert_timeval((yyvsp[(2) - (2)].str)); + cfg_convert_timeval((yyvsp[0].str)); if(!cfg_parser->cfg->val_date_override) yyerror("bad date/time specification"); } else { - if(atoi((yyvsp[(2) - (2)].str)) == 0) + if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); - cfg_parser->cfg->val_date_override = atoi((yyvsp[(2) - (2)].str)); + cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str)); } - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4450 "util/configparser.c" break; case 393: #line 1661 "./util/configparser.y" { - OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str))); - if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { + 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[(2) - (2)].str)); + cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str)); if(!cfg_parser->cfg->val_sig_skew_min) yyerror("number expected"); } - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4466 "util/configparser.c" break; case 394: #line 1674 "./util/configparser.y" { - OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str))); - if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { + 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[(2) - (2)].str)); + cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str)); if(!cfg_parser->cfg->val_sig_skew_max) yyerror("number expected"); } - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4482 "util/configparser.c" break; case 395: #line 1687 "./util/configparser.y" { - OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4494 "util/configparser.c" break; case 396: #line 1696 "./util/configparser.y" { - OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4506 "util/configparser.c" break; case 397: #line 1705 "./util/configparser.y" { - OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4518 "util/configparser.c" break; case 398: #line 1714 "./util/configparser.y" { - OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4530 "util/configparser.c" break; case 399: #line 1723 "./util/configparser.y" { - OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4543 "util/configparser.c" break; case 400: #line 1733 "./util/configparser.y" { - OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4556 "util/configparser.c" break; case 401: #line 1743 "./util/configparser.y" { - OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4570 "util/configparser.c" break; case 402: #line 1754 "./util/configparser.y" { - OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4582 "util/configparser.c" break; case 403: #line 1763 "./util/configparser.y" { - OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4594 "util/configparser.c" break; case 404: #line 1772 "./util/configparser.y" { - OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4606 "util/configparser.c" break; case 405: #line 1781 "./util/configparser.y" { - OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4618 "util/configparser.c" break; case 406: #line 1790 "./util/configparser.y" { - OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4630 "util/configparser.c" break; case 407: #line 1799 "./util/configparser.y" { - OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4642 "util/configparser.c" break; case 408: #line 1808 "./util/configparser.y" { - OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); + else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0); if(fake_dsa) log_warn("test option fake_dsa is enabled"); #endif - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4658 "util/configparser.c" break; case 409: #line 1821 "./util/configparser.y" { - OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); + else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0); if(fake_sha1) log_warn("test option fake_sha1 is enabled"); #endif - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4674 "util/configparser.c" break; case 410: #line 1834 "./util/configparser.y" { - OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4686 "util/configparser.c" break; case 411: #line 1843 "./util/configparser.y" { - OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } +#line 4696 "util/configparser.c" break; case 412: #line 1850 "./util/configparser.y" { - OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4708 "util/configparser.c" break; case 413: #line 1859 "./util/configparser.y" { - OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4720 "util/configparser.c" break; case 414: #line 1868 "./util/configparser.y" { - OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 4732 "util/configparser.c" break; case 415: #line 1877 "./util/configparser.y" { - OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4745 "util/configparser.c" break; case 416: #line 1886 "./util/configparser.y" { - OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4756 "util/configparser.c" break; case 417: #line 1894 "./util/configparser.y" { - OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4772 "util/configparser.c" break; case 418: #line 1907 "./util/configparser.y" { - OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4783 "util/configparser.c" break; case 419: #line 1915 "./util/configparser.y" { - OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && - strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 && - strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0 - && strcmp((yyvsp[(3) - (3)].str), "typetransparent")!=0 - && strcmp((yyvsp[(3) - (3)].str), "always_transparent")!=0 - && strcmp((yyvsp[(3) - (3)].str), "always_refuse")!=0 - && strcmp((yyvsp[(3) - (3)].str), "always_nxdomain")!=0 - && strcmp((yyvsp[(3) - (3)].str), "noview")!=0 - && strcmp((yyvsp[(3) - (3)].str), "inform")!=0 && strcmp((yyvsp[(3) - (3)].str), "inform_deny")!=0 - && strcmp((yyvsp[(3) - (3)].str), "inform_redirect") != 0 - && strcmp((yyvsp[(3) - (3)].str), "ipset") != 0) { + 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), "always_refuse")!=0 + && strcmp((yyvsp[0].str), "always_nxdomain")!=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, noview " ", nodefault or ipset"); - free((yyvsp[(2) - (3)].str)); - free((yyvsp[(3) - (3)].str)); - } else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) { + 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[(2) - (3)].str))) + local_zones_nodefault, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[0].str)); #ifdef USE_IPSET - } else if(strcmp((yyvsp[(3) - (3)].str), "ipset")==0) { + } else if(strcmp((yyvsp[0].str), "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> - local_zones_ipset, (yyvsp[(2) - (3)].str))) + local_zones_ipset, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[0].str)); #endif } else { if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, - (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding local-zone"); } } +#line 4827 "util/configparser.c" break; case 420: #line 1956 "./util/configparser.y" { - OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str))) + 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 4837 "util/configparser.c" break; case 421: #line 1963 "./util/configparser.y" { char* ptr; - OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); - ptr = cfg_ptr_reverse((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + 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)) @@ -4992,85 +4851,93 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } +#line 4855 "util/configparser.c" break; case 422: #line 1978 "./util/configparser.y" { - OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4868 "util/configparser.c" break; case 423: #line 1988 "./util/configparser.y" { - OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4881 "util/configparser.c" break; case 424: #line 1998 "./util/configparser.y" { - OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[(2) - (2)].str))); - cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + 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 4891 "util/configparser.c" break; case 425: #line 2005 "./util/configparser.y" { - OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str))); - cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + 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 4901 "util/configparser.c" break; case 426: #line 2012 "./util/configparser.y" { - OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); - cfg_parser->cfg->dns64_prefix = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } +#line 4911 "util/configparser.c" break; case 427: #line 2019 "./util/configparser.y" { - OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 4923 "util/configparser.c" break; case 428: #line 2028 "./util/configparser.y" { - OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, - (yyvsp[(2) - (2)].str))) + (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } +#line 4934 "util/configparser.c" break; case 429: #line 2036 "./util/configparser.y" { - char* p, *s = (yyvsp[(2) - (2)].str); - OUTYY(("P(server_define_tag:%s)\n", (yyvsp[(2) - (2)].str))); + 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)) @@ -5078,721 +4945,776 @@ yyreduce: "out of memory"); } } - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 4951 "util/configparser.c" break; case 430: #line 2050 "./util/configparser.y" { size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); - free((yyvsp[(3) - (3)].str)); - OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[(2) - (3)].str))); + 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[(2) - (3)].str)); + free((yyvsp[-1].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->local_zone_tags, - (yyvsp[(2) - (3)].str), bitlist, len)) { + (yyvsp[-1].str), bitlist, len)) { yyerror("out of memory"); - free((yyvsp[(2) - (3)].str)); + free((yyvsp[-1].str)); } } } +#line 4975 "util/configparser.c" break; case 431: #line 2071 "./util/configparser.y" { size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); - free((yyvsp[(3) - (3)].str)); - OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[(2) - (3)].str))); + 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[(2) - (3)].str)); + free((yyvsp[-1].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->acl_tags, - (yyvsp[(2) - (3)].str), bitlist, len)) { + (yyvsp[-1].str), bitlist, len)) { yyerror("out of memory"); - free((yyvsp[(2) - (3)].str)); + free((yyvsp[-1].str)); } } } +#line 4999 "util/configparser.c" break; case 432: #line 2092 "./util/configparser.y" { - OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); + 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) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))) { + (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); - free((yyvsp[(2) - (4)].str)); - free((yyvsp[(3) - (4)].str)); - free((yyvsp[(4) - (4)].str)); + free((yyvsp[-2].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); } } +#line 5014 "util/configparser.c" break; case 433: #line 2104 "./util/configparser.y" { - OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); + 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) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))) { + (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); - free((yyvsp[(2) - (4)].str)); - free((yyvsp[(3) - (4)].str)); - free((yyvsp[(4) - (4)].str)); + free((yyvsp[-2].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); } } +#line 5029 "util/configparser.c" break; case 434: #line 2116 "./util/configparser.y" { - OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); + 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) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))) { + (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); - free((yyvsp[(2) - (4)].str)); - free((yyvsp[(3) - (4)].str)); - free((yyvsp[(4) - (4)].str)); + free((yyvsp[-2].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); } } +#line 5044 "util/configparser.c" break; case 435: #line 2128 "./util/configparser.y" { - OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + 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[(2) - (3)].str), (yyvsp[(3) - (3)].str))) { + (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); } } +#line 5056 "util/configparser.c" break; case 436: #line 2137 "./util/configparser.y" { size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); - free((yyvsp[(3) - (3)].str)); - OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[(2) - (3)].str))); + 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[(2) - (3)].str)); + free((yyvsp[-1].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->respip_tags, - (yyvsp[(2) - (3)].str), bitlist, len)) { + (yyvsp[-1].str), bitlist, len)) { yyerror("out of memory"); - free((yyvsp[(2) - (3)].str)); + free((yyvsp[-1].str)); } } } +#line 5080 "util/configparser.c" break; case 437: #line 2158 "./util/configparser.y" { - OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5092 "util/configparser.c" break; case 438: #line 2168 "./util/configparser.y" { - OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5104 "util/configparser.c" break; case 439: #line 2177 "./util/configparser.y" { - OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ip_ratelimit_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5115 "util/configparser.c" break; case 440: #line 2185 "./util/configparser.y" { - OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ratelimit_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5126 "util/configparser.c" break; case 441: #line 2193 "./util/configparser.y" { - OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5142 "util/configparser.c" break; case 442: #line 2206 "./util/configparser.y" { - OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5158 "util/configparser.c" break; case 443: #line 2219 "./util/configparser.y" { - OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { + 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[(2) - (3)].str)); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> - ratelimit_for_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " "ratelimit-for-domain"); } } +#line 5176 "util/configparser.c" break; case 444: #line 2234 "./util/configparser.y" { - OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { + 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[(2) - (3)].str)); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> - ratelimit_below_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " "ratelimit-below-domain"); } } +#line 5194 "util/configparser.c" break; case 445: #line 2249 "./util/configparser.y" { - OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5206 "util/configparser.c" break; case 446: #line 2258 "./util/configparser.y" { - OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5218 "util/configparser.c" break; case 447: #line 2267 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5227 "util/configparser.c" break; case 448: #line 2273 "./util/configparser.y" { - OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) <= 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5239 "util/configparser.c" break; case 449: #line 2282 "./util/configparser.y" { - OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5251 "util/configparser.c" break; case 450: #line 2291 "./util/configparser.y" { - OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5264 "util/configparser.c" break; case 451: #line 2301 "./util/configparser.y" { - OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5277 "util/configparser.c" break; case 452: #line 2311 "./util/configparser.y" { #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); + else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5293 "util/configparser.c" break; case 453: #line 2324 "./util/configparser.y" { #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 5309 "util/configparser.c" break; case 454: #line 2337 "./util/configparser.y" { #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ipsecmod_hook); - cfg_parser->cfg->ipsecmod_hook = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 5324 "util/configparser.c" break; case 455: #line 2349 "./util/configparser.y" { #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 5341 "util/configparser.c" break; case 456: #line 2363 "./util/configparser.y" { #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[(2) - (2)].str))) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 5356 "util/configparser.c" break; case 457: #line 2375 "./util/configparser.y" { #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 5373 "util/configparser.c" break; case 458: #line 2389 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->stubs->name = (yyvsp[0].str); } +#line 5386 "util/configparser.c" break; case 459: #line 2399 "./util/configparser.y" { - OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str))) + 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 5396 "util/configparser.c" break; case 460: #line 2406 "./util/configparser.y" { - OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str))) + 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 5406 "util/configparser.c" break; case 461: #line 2413 "./util/configparser.y" { - OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5418 "util/configparser.c" break; case 462: #line 2422 "./util/configparser.y" { - OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5430 "util/configparser.c" break; case 463: #line 2431 "./util/configparser.y" { - OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5443 "util/configparser.c" break; case 464: #line 2441 "./util/configparser.y" { - OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5456 "util/configparser.c" break; case 465: #line 2451 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->forwards->name = (yyvsp[0].str); } +#line 5469 "util/configparser.c" break; case 466: #line 2461 "./util/configparser.y" { - OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str))) + 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 5479 "util/configparser.c" break; case 467: #line 2468 "./util/configparser.y" { - OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str))) + 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 5489 "util/configparser.c" break; case 468: #line 2475 "./util/configparser.y" { - OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5501 "util/configparser.c" break; case 469: #line 2484 "./util/configparser.y" { - OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5513 "util/configparser.c" break; case 470: #line 2493 "./util/configparser.y" { - OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5526 "util/configparser.c" break; case 471: #line 2503 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->auths->name = (yyvsp[0].str); } +#line 5539 "util/configparser.c" break; case 472: #line 2513 "./util/configparser.y" { - OUTYY(("P(zonefile:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); - cfg_parser->cfg->auths->zonefile = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } +#line 5549 "util/configparser.c" break; case 473: #line 2520 "./util/configparser.y" { - OUTYY(("P(master:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[(2) - (2)].str))) + 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 5559 "util/configparser.c" break; case 474: #line 2527 "./util/configparser.y" { - OUTYY(("P(url:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[(2) - (2)].str))) + 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 5569 "util/configparser.c" break; case 475: #line 2534 "./util/configparser.y" { - OUTYY(("P(allow-notify:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, - (yyvsp[(2) - (2)].str))) + (yyvsp[0].str))) yyerror("out of memory"); } +#line 5580 "util/configparser.c" break; case 476: #line 2542 "./util/configparser.y" { - OUTYY(("P(for-downstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5593 "util/configparser.c" break; case 477: #line 2552 "./util/configparser.y" { - OUTYY(("P(for-upstream:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5606 "util/configparser.c" break; case 478: #line 2562 "./util/configparser.y" { - OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5619 "util/configparser.c" break; case 479: #line 2572 "./util/configparser.y" { - OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->views->name = (yyvsp[0].str); } +#line 5632 "util/configparser.c" break; case 480: #line 2582 "./util/configparser.y" { - OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && - strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 && - strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0 - && strcmp((yyvsp[(3) - (3)].str), "typetransparent")!=0 - && strcmp((yyvsp[(3) - (3)].str), "always_transparent")!=0 - && strcmp((yyvsp[(3) - (3)].str), "always_refuse")!=0 - && strcmp((yyvsp[(3) - (3)].str), "always_nxdomain")!=0 - && strcmp((yyvsp[(3) - (3)].str), "noview")!=0 - && strcmp((yyvsp[(3) - (3)].str), "inform")!=0 && strcmp((yyvsp[(3) - (3)].str), "inform_deny")!=0) { + 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), "noview")!=0 + && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " "always_nxdomain, noview or nodefault"); - free((yyvsp[(2) - (3)].str)); - free((yyvsp[(3) - (3)].str)); - } else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) { + 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[(2) - (3)].str))) + local_zones_nodefault, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[0].str)); #ifdef USE_IPSET - } else if(strcmp((yyvsp[(3) - (3)].str), "ipset")==0) { + } else if(strcmp((yyvsp[0].str), "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> - local_zones_ipset, (yyvsp[(2) - (3)].str))) + local_zones_ipset, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); - free((yyvsp[(3) - (3)].str)); + free((yyvsp[0].str)); #endif } else { if(!cfg_str2list_insert( &cfg_parser->cfg->views->local_zones, - (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding local-zone"); } } +#line 5674 "util/configparser.c" break; case 481: #line 2621 "./util/configparser.y" { - OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - validate_respip_action((yyvsp[(3) - (3)].str)); + 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[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding per-view " "response-ip action"); } +#line 5687 "util/configparser.c" break; case 482: #line 2631 "./util/configparser.y" { - OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[(2) - (3)].str))); + OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( - &cfg_parser->cfg->views->respip_data, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } +#line 5698 "util/configparser.c" break; case 483: #line 2639 "./util/configparser.y" { - OUTYY(("P(view_local_data:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[(2) - (2)].str))) { + 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 5709 "util/configparser.c" break; case 484: #line 2647 "./util/configparser.y" { char* ptr; - OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); - ptr = cfg_ptr_reverse((yyvsp[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + 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)) @@ -5801,17 +5723,19 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } +#line 5727 "util/configparser.c" break; case 485: #line 2662 "./util/configparser.y" { - OUTYY(("P(view-first:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5739 "util/configparser.c" break; case 486: @@ -5819,83 +5743,92 @@ yyreduce: { OUTYY(("\nP(remote-control:)\n")); } +#line 5747 "util/configparser.c" break; case 497: #line 2682 "./util/configparser.y" { - OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5760 "util/configparser.c" break; case 498: #line 2692 "./util/configparser.y" { - OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 5772 "util/configparser.c" break; case 499: #line 2701 "./util/configparser.y" { - OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str))) + 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 5782 "util/configparser.c" break; case 500: #line 2708 "./util/configparser.y" { - OUTYY(("P(control_use_cert:%s)\n", (yyvsp[(2) - (2)].str))); - cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + 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 5792 "util/configparser.c" break; case 501: #line 2715 "./util/configparser.y" { - OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->server_key_file = (yyvsp[0].str); } +#line 5802 "util/configparser.c" break; case 502: #line 2722 "./util/configparser.y" { - OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } +#line 5812 "util/configparser.c" break; case 503: #line 2729 "./util/configparser.y" { - OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->control_key_file = (yyvsp[0].str); } +#line 5822 "util/configparser.c" break; case 504: #line 2736 "./util/configparser.y" { - OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } +#line 5832 "util/configparser.c" break; case 505: @@ -5903,194 +5836,213 @@ yyreduce: { OUTYY(("\nP(dnstap:)\n")); } +#line 5840 "util/configparser.c" break; case 526: #line 2763 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5852 "util/configparser.c" break; case 527: #line 2772 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } +#line 5862 "util/configparser.c" break; case 528: #line 2779 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); - cfg_parser->cfg->dnstap_ip = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } +#line 5872 "util/configparser.c" break; case 529: #line 2786 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5884 "util/configparser.c" break; case 530: #line 2795 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } +#line 5894 "util/configparser.c" break; case 531: #line 2802 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } +#line 5904 "util/configparser.c" break; case 532: #line 2809 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } +#line 5914 "util/configparser.c" break; case 533: #line 2816 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } +#line 5924 "util/configparser.c" break; case 534: #line 2823 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5936 "util/configparser.c" break; case 535: #line 2832 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5948 "util/configparser.c" break; case 536: #line 2841 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); - cfg_parser->cfg->dnstap_identity = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } +#line 5958 "util/configparser.c" break; case 537: #line 2848 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); - cfg_parser->cfg->dnstap_version = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } +#line 5968 "util/configparser.c" break; case 538: #line 2855 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5981 "util/configparser.c" break; case 539: #line 2865 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 5994 "util/configparser.c" break; case 540: #line 2875 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 6007 "util/configparser.c" break; case 541: #line 2885 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 6020 "util/configparser.c" break; case 542: #line 2895 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 6033 "util/configparser.c" break; case 543: #line 2905 "./util/configparser.y" { - OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 6046 "util/configparser.c" break; case 544: @@ -6098,57 +6050,63 @@ yyreduce: { OUTYY(("\nP(python:)\n")); } +#line 6054 "util/configparser.c" break; case 548: #line 2924 "./util/configparser.y" { - OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[(2) - (2)].str))) + 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 6064 "util/configparser.c" break; case 549: #line 2930 "./util/configparser.y" { - OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[(2) - (2)].str))); - if (strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 6077 "util/configparser.c" break; case 550: #line 2940 "./util/configparser.y" { - OUTYY(("P(server_log_identity:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); - cfg_parser->cfg->log_identity = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->log_identity = (yyvsp[0].str); } +#line 6087 "util/configparser.c" break; case 551: #line 2947 "./util/configparser.y" { - OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - validate_respip_action((yyvsp[(3) - (3)].str)); + 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[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } +#line 6099 "util/configparser.c" break; case 552: #line 2956 "./util/configparser.y" { - OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[(2) - (3)].str))); + OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, - (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } +#line 6110 "util/configparser.c" break; case 553: @@ -6156,118 +6114,129 @@ yyreduce: { OUTYY(("\nP(dnscrypt:)\n")); } +#line 6118 "util/configparser.c" break; case 566: #line 2980 "./util/configparser.y" { - OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[(2) - (2)].str))); - if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + 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[(2) - (2)].str), "yes")==0); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } +#line 6130 "util/configparser.c" break; case 567: #line 2990 "./util/configparser.y" { - OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); - free((yyvsp[(2) - (2)].str)); + else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } +#line 6142 "util/configparser.c" break; case 568: #line 2999 "./util/configparser.y" { - OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); - cfg_parser->cfg->dnscrypt_provider = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } +#line 6152 "util/configparser.c" break; case 569: #line 3006 "./util/configparser.y" { - OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[(2) - (2)].str))); - if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[(2) - (2)].str))) - log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[(2) - (2)].str)); - if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[(2) - (2)].str))) + 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 6164 "util/configparser.c" break; case 570: #line 3015 "./util/configparser.y" { - OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[(2) - (2)].str))) + 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 6174 "util/configparser.c" break; case 571: #line 3022 "./util/configparser.y" { - OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[(2) - (2)].str))); - if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[(2) - (2)].str))) - log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[(2) - (2)].str)); - if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[(2) - (2)].str))) + 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 6186 "util/configparser.c" break; case 572: #line 3031 "./util/configparser.y" { - OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 6197 "util/configparser.c" break; case 573: #line 3039 "./util/configparser.y" { - OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 6213 "util/configparser.c" break; case 574: #line 3052 "./util/configparser.y" { - OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); - if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 6224 "util/configparser.c" break; case 575: #line 3060 "./util/configparser.y" { - OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 6240 "util/configparser.c" break; case 576: @@ -6275,48 +6244,52 @@ yyreduce: { OUTYY(("\nP(cachedb:)\n")); } +#line 6248 "util/configparser.c" break; case 584: #line 3083 "./util/configparser.y" { #ifdef USE_CACHEDB - OUTYY(("P(backend:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_backend); - cfg_parser->cfg->cachedb_backend = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->cachedb_backend = (yyvsp[0].str); #else OUTYY(("P(Compiled without cachedb, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 6263 "util/configparser.c" break; case 585: #line 3095 "./util/configparser.y" { #ifdef USE_CACHEDB - OUTYY(("P(secret-seed:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_secret); - cfg_parser->cfg->cachedb_secret = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->cachedb_secret = (yyvsp[0].str); #else OUTYY(("P(Compiled without cachedb, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 6278 "util/configparser.c" break; case 586: #line 3107 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) - OUTYY(("P(redis_server_host:%s)\n", (yyvsp[(2) - (2)].str))); + OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->redis_server_host); - cfg_parser->cfg->redis_server_host = (yyvsp[(2) - (2)].str); + cfg_parser->cfg->redis_server_host = (yyvsp[0].str); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 6293 "util/configparser.c" break; case 587: @@ -6324,44 +6297,47 @@ yyreduce: { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; - OUTYY(("P(redis_server_port:%s)\n", (yyvsp[(2) - (2)].str))); - port = atoi((yyvsp[(2) - (2)].str)); + 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[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 6311 "util/configparser.c" break; case 588: #line 3134 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) - OUTYY(("P(redis_timeout:%s)\n", (yyvsp[(2) - (2)].str))); - if(atoi((yyvsp[(2) - (2)].str)) == 0) + 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[(2) - (2)].str)); + else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); } +#line 6327 "util/configparser.c" break; case 589: #line 3147 "./util/configparser.y" { - OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); - if (atoi((yyvsp[(3) - (3)].str)) < 0) + 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[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + 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 6341 "util/configparser.c" break; case 590: @@ -6369,47 +6345,61 @@ yyreduce: { OUTYY(("\nP(ipset:)\n")); } +#line 6349 "util/configparser.c" break; case 595: #line 3167 "./util/configparser.y" { #ifdef USE_IPSET - OUTYY(("P(name-v4:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str); #else OUTYY(("P(Compiled without ipset, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 6367 "util/configparser.c" break; case 596: #line 3182 "./util/configparser.y" { #ifdef USE_IPSET - OUTYY(("P(name-v6:%s)\n", (yyvsp[(2) - (2)].str))); + 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[(2) - (2)].str); + cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str); #else OUTYY(("P(Compiled without ipset, ignoring)\n")); - free((yyvsp[(2) - (2)].str)); + free((yyvsp[0].str)); #endif } +#line 6385 "util/configparser.c" break; -/* Line 1267 of yacc.c. */ -#line 6411 "util/configparser.c" +#line 6389 "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 ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); @@ -6418,26 +6408,28 @@ yyreduce: *++yyvsp = yyval; - - /* Now `shift' the result of the reduction. Determine what state + /* 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. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + 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 -- 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 ? YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { @@ -6445,37 +6437,36 @@ yyerrlab: #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) { - YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); - if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) - { - YYSIZE_T yyalloc = 2 * yysize; - if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) - yyalloc = YYSTACK_ALLOC_MAXIMUM; - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yyalloc); - if (yymsg) - yymsg_alloc = yyalloc; - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - } - } - - if (0 < yysize && yysize <= yymsg_alloc) - { - (void) yysyntax_error (yymsg, yystate, yychar); - yyerror (yymsg); - } - else - { - yyerror (YY_("syntax error")); - if (yysize != 0) - goto yyexhaustedlab; - } + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; } +# undef YYSYNTAX_ERROR #endif } @@ -6483,24 +6474,24 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ + /* 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; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -6509,14 +6500,12 @@ yyerrlab: | 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; - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule which action triggered + /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -6529,38 +6518,37 @@ yyerrorlab: | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yydestruct ("Error: popping", - yystos[yystate], yyvsp); + yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -6577,6 +6565,7 @@ yyacceptlab: yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -6584,7 +6573,8 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow + +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -6594,18 +6584,27 @@ yyexhaustedlab: /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - /* Do not reclaim the symbols of the rule which action triggered + 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", - yystos[*yyssp], yyvsp); + yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -6616,11 +6615,8 @@ yyreturn: if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } - - #line 3196 "./util/configparser.y" @@ -6643,4 +6639,3 @@ validate_respip_action(const char* action) } - diff --git a/util/configparser.h b/util/configparser.h index 194bf1069..f5958de4b 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,14 +1,14 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 3.4.1. */ -/* Skeleton interface for Bison's Yacc-like parsers in C +/* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Inc. - This program is free software; you can redistribute it and/or modify + 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 2, or (at your option) - any later version. + 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 @@ -16,9 +16,7 @@ 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -33,296 +31,308 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Tokens. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + +#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 type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_SERVER = 266, - VAR_VERBOSITY = 267, - VAR_NUM_THREADS = 268, - VAR_PORT = 269, - VAR_OUTGOING_RANGE = 270, - VAR_INTERFACE = 271, - VAR_PREFER_IP4 = 272, - VAR_DO_IP4 = 273, - VAR_DO_IP6 = 274, - VAR_PREFER_IP6 = 275, - VAR_DO_UDP = 276, - VAR_DO_TCP = 277, - VAR_TCP_MSS = 278, - VAR_OUTGOING_TCP_MSS = 279, - VAR_TCP_IDLE_TIMEOUT = 280, - VAR_EDNS_TCP_KEEPALIVE = 281, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, - VAR_CHROOT = 283, - VAR_USERNAME = 284, - VAR_DIRECTORY = 285, - VAR_LOGFILE = 286, - VAR_PIDFILE = 287, - VAR_MSG_CACHE_SIZE = 288, - VAR_MSG_CACHE_SLABS = 289, - VAR_NUM_QUERIES_PER_THREAD = 290, - VAR_RRSET_CACHE_SIZE = 291, - VAR_RRSET_CACHE_SLABS = 292, - VAR_OUTGOING_NUM_TCP = 293, - VAR_INFRA_HOST_TTL = 294, - VAR_INFRA_LAME_TTL = 295, - VAR_INFRA_CACHE_SLABS = 296, - VAR_INFRA_CACHE_NUMHOSTS = 297, - VAR_INFRA_CACHE_LAME_SIZE = 298, - VAR_NAME = 299, - VAR_STUB_ZONE = 300, - VAR_STUB_HOST = 301, - VAR_STUB_ADDR = 302, - VAR_TARGET_FETCH_POLICY = 303, - VAR_HARDEN_SHORT_BUFSIZE = 304, - VAR_HARDEN_LARGE_QUERIES = 305, - VAR_FORWARD_ZONE = 306, - VAR_FORWARD_HOST = 307, - VAR_FORWARD_ADDR = 308, - VAR_DO_NOT_QUERY_ADDRESS = 309, - VAR_HIDE_IDENTITY = 310, - VAR_HIDE_VERSION = 311, - VAR_IDENTITY = 312, - VAR_VERSION = 313, - VAR_HARDEN_GLUE = 314, - VAR_MODULE_CONF = 315, - VAR_TRUST_ANCHOR_FILE = 316, - VAR_TRUST_ANCHOR = 317, - VAR_VAL_OVERRIDE_DATE = 318, - VAR_BOGUS_TTL = 319, - VAR_VAL_CLEAN_ADDITIONAL = 320, - VAR_VAL_PERMISSIVE_MODE = 321, - VAR_INCOMING_NUM_TCP = 322, - VAR_MSG_BUFFER_SIZE = 323, - VAR_KEY_CACHE_SIZE = 324, - VAR_KEY_CACHE_SLABS = 325, - VAR_TRUSTED_KEYS_FILE = 326, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, - VAR_USE_SYSLOG = 328, - VAR_OUTGOING_INTERFACE = 329, - VAR_ROOT_HINTS = 330, - VAR_DO_NOT_QUERY_LOCALHOST = 331, - VAR_CACHE_MAX_TTL = 332, - VAR_HARDEN_DNSSEC_STRIPPED = 333, - VAR_ACCESS_CONTROL = 334, - VAR_LOCAL_ZONE = 335, - VAR_LOCAL_DATA = 336, - VAR_INTERFACE_AUTOMATIC = 337, - VAR_STATISTICS_INTERVAL = 338, - VAR_DO_DAEMONIZE = 339, - VAR_USE_CAPS_FOR_ID = 340, - VAR_STATISTICS_CUMULATIVE = 341, - VAR_OUTGOING_PORT_PERMIT = 342, - VAR_OUTGOING_PORT_AVOID = 343, - VAR_DLV_ANCHOR_FILE = 344, - VAR_DLV_ANCHOR = 345, - VAR_NEG_CACHE_SIZE = 346, - VAR_HARDEN_REFERRAL_PATH = 347, - VAR_PRIVATE_ADDRESS = 348, - VAR_PRIVATE_DOMAIN = 349, - VAR_REMOTE_CONTROL = 350, - VAR_CONTROL_ENABLE = 351, - VAR_CONTROL_INTERFACE = 352, - VAR_CONTROL_PORT = 353, - VAR_SERVER_KEY_FILE = 354, - VAR_SERVER_CERT_FILE = 355, - VAR_CONTROL_KEY_FILE = 356, - VAR_CONTROL_CERT_FILE = 357, - VAR_CONTROL_USE_CERT = 358, - VAR_EXTENDED_STATISTICS = 359, - VAR_LOCAL_DATA_PTR = 360, - VAR_JOSTLE_TIMEOUT = 361, - VAR_STUB_PRIME = 362, - VAR_UNWANTED_REPLY_THRESHOLD = 363, - VAR_LOG_TIME_ASCII = 364, - VAR_DOMAIN_INSECURE = 365, - VAR_PYTHON = 366, - VAR_PYTHON_SCRIPT = 367, - VAR_VAL_SIG_SKEW_MIN = 368, - VAR_VAL_SIG_SKEW_MAX = 369, - VAR_CACHE_MIN_TTL = 370, - VAR_VAL_LOG_LEVEL = 371, - VAR_AUTO_TRUST_ANCHOR_FILE = 372, - VAR_KEEP_MISSING = 373, - VAR_ADD_HOLDDOWN = 374, - VAR_DEL_HOLDDOWN = 375, - VAR_SO_RCVBUF = 376, - VAR_EDNS_BUFFER_SIZE = 377, - VAR_PREFETCH = 378, - VAR_PREFETCH_KEY = 379, - VAR_SO_SNDBUF = 380, - VAR_SO_REUSEPORT = 381, - VAR_HARDEN_BELOW_NXDOMAIN = 382, - VAR_IGNORE_CD_FLAG = 383, - VAR_LOG_QUERIES = 384, - VAR_LOG_REPLIES = 385, - VAR_LOG_LOCAL_ACTIONS = 386, - VAR_TCP_UPSTREAM = 387, - VAR_SSL_UPSTREAM = 388, - VAR_SSL_SERVICE_KEY = 389, - VAR_SSL_SERVICE_PEM = 390, - VAR_SSL_PORT = 391, - VAR_FORWARD_FIRST = 392, - VAR_STUB_SSL_UPSTREAM = 393, - VAR_FORWARD_SSL_UPSTREAM = 394, - VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_IP_DSCP = 431, - VAR_DISABLE_DNSSEC_LAME_CHECK = 432, - VAR_IP_RATELIMIT = 433, - VAR_IP_RATELIMIT_SLABS = 434, - VAR_IP_RATELIMIT_SIZE = 435, - VAR_RATELIMIT = 436, - VAR_RATELIMIT_SLABS = 437, - VAR_RATELIMIT_SIZE = 438, - VAR_RATELIMIT_FOR_DOMAIN = 439, - VAR_RATELIMIT_BELOW_DOMAIN = 440, - VAR_IP_RATELIMIT_FACTOR = 441, - VAR_RATELIMIT_FACTOR = 442, - VAR_SEND_CLIENT_SUBNET = 443, - VAR_CLIENT_SUBNET_ZONE = 444, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, - VAR_CLIENT_SUBNET_OPCODE = 446, - VAR_MAX_CLIENT_SUBNET_IPV4 = 447, - VAR_MAX_CLIENT_SUBNET_IPV6 = 448, - VAR_MIN_CLIENT_SUBNET_IPV4 = 449, - VAR_MIN_CLIENT_SUBNET_IPV6 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, - VAR_CAPS_WHITELIST = 453, - VAR_CACHE_MAX_NEGATIVE_TTL = 454, - VAR_PERMIT_SMALL_HOLDDOWN = 455, - VAR_QNAME_MINIMISATION = 456, - VAR_QNAME_MINIMISATION_STRICT = 457, - VAR_IP_FREEBIND = 458, - VAR_DEFINE_TAG = 459, - VAR_LOCAL_ZONE_TAG = 460, - VAR_ACCESS_CONTROL_TAG = 461, - VAR_LOCAL_ZONE_OVERRIDE = 462, - VAR_ACCESS_CONTROL_TAG_ACTION = 463, - VAR_ACCESS_CONTROL_TAG_DATA = 464, - VAR_VIEW = 465, - VAR_ACCESS_CONTROL_VIEW = 466, - VAR_VIEW_FIRST = 467, - VAR_SERVE_EXPIRED = 468, - VAR_SERVE_EXPIRED_TTL = 469, - VAR_SERVE_EXPIRED_TTL_RESET = 470, - VAR_SERVE_EXPIRED_REPLY_TTL = 471, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 - }; + enum yytokentype + { + SPACE = 258, + LETTER = 259, + NEWLINE = 260, + COMMENT = 261, + COLON = 262, + ANY = 263, + ZONESTR = 264, + STRING_ARG = 265, + VAR_SERVER = 266, + VAR_VERBOSITY = 267, + VAR_NUM_THREADS = 268, + VAR_PORT = 269, + VAR_OUTGOING_RANGE = 270, + VAR_INTERFACE = 271, + VAR_PREFER_IP4 = 272, + VAR_DO_IP4 = 273, + VAR_DO_IP6 = 274, + VAR_PREFER_IP6 = 275, + VAR_DO_UDP = 276, + VAR_DO_TCP = 277, + VAR_TCP_MSS = 278, + VAR_OUTGOING_TCP_MSS = 279, + VAR_TCP_IDLE_TIMEOUT = 280, + VAR_EDNS_TCP_KEEPALIVE = 281, + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, + VAR_CHROOT = 283, + VAR_USERNAME = 284, + VAR_DIRECTORY = 285, + VAR_LOGFILE = 286, + VAR_PIDFILE = 287, + VAR_MSG_CACHE_SIZE = 288, + VAR_MSG_CACHE_SLABS = 289, + VAR_NUM_QUERIES_PER_THREAD = 290, + VAR_RRSET_CACHE_SIZE = 291, + VAR_RRSET_CACHE_SLABS = 292, + VAR_OUTGOING_NUM_TCP = 293, + VAR_INFRA_HOST_TTL = 294, + VAR_INFRA_LAME_TTL = 295, + VAR_INFRA_CACHE_SLABS = 296, + VAR_INFRA_CACHE_NUMHOSTS = 297, + VAR_INFRA_CACHE_LAME_SIZE = 298, + VAR_NAME = 299, + VAR_STUB_ZONE = 300, + VAR_STUB_HOST = 301, + VAR_STUB_ADDR = 302, + VAR_TARGET_FETCH_POLICY = 303, + VAR_HARDEN_SHORT_BUFSIZE = 304, + VAR_HARDEN_LARGE_QUERIES = 305, + VAR_FORWARD_ZONE = 306, + VAR_FORWARD_HOST = 307, + VAR_FORWARD_ADDR = 308, + VAR_DO_NOT_QUERY_ADDRESS = 309, + VAR_HIDE_IDENTITY = 310, + VAR_HIDE_VERSION = 311, + VAR_IDENTITY = 312, + VAR_VERSION = 313, + VAR_HARDEN_GLUE = 314, + VAR_MODULE_CONF = 315, + VAR_TRUST_ANCHOR_FILE = 316, + VAR_TRUST_ANCHOR = 317, + VAR_VAL_OVERRIDE_DATE = 318, + VAR_BOGUS_TTL = 319, + VAR_VAL_CLEAN_ADDITIONAL = 320, + VAR_VAL_PERMISSIVE_MODE = 321, + VAR_INCOMING_NUM_TCP = 322, + VAR_MSG_BUFFER_SIZE = 323, + VAR_KEY_CACHE_SIZE = 324, + VAR_KEY_CACHE_SLABS = 325, + VAR_TRUSTED_KEYS_FILE = 326, + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, + VAR_USE_SYSLOG = 328, + VAR_OUTGOING_INTERFACE = 329, + VAR_ROOT_HINTS = 330, + VAR_DO_NOT_QUERY_LOCALHOST = 331, + VAR_CACHE_MAX_TTL = 332, + VAR_HARDEN_DNSSEC_STRIPPED = 333, + VAR_ACCESS_CONTROL = 334, + VAR_LOCAL_ZONE = 335, + VAR_LOCAL_DATA = 336, + VAR_INTERFACE_AUTOMATIC = 337, + VAR_STATISTICS_INTERVAL = 338, + VAR_DO_DAEMONIZE = 339, + VAR_USE_CAPS_FOR_ID = 340, + VAR_STATISTICS_CUMULATIVE = 341, + VAR_OUTGOING_PORT_PERMIT = 342, + VAR_OUTGOING_PORT_AVOID = 343, + VAR_DLV_ANCHOR_FILE = 344, + VAR_DLV_ANCHOR = 345, + VAR_NEG_CACHE_SIZE = 346, + VAR_HARDEN_REFERRAL_PATH = 347, + VAR_PRIVATE_ADDRESS = 348, + VAR_PRIVATE_DOMAIN = 349, + VAR_REMOTE_CONTROL = 350, + VAR_CONTROL_ENABLE = 351, + VAR_CONTROL_INTERFACE = 352, + VAR_CONTROL_PORT = 353, + VAR_SERVER_KEY_FILE = 354, + VAR_SERVER_CERT_FILE = 355, + VAR_CONTROL_KEY_FILE = 356, + VAR_CONTROL_CERT_FILE = 357, + VAR_CONTROL_USE_CERT = 358, + VAR_EXTENDED_STATISTICS = 359, + VAR_LOCAL_DATA_PTR = 360, + VAR_JOSTLE_TIMEOUT = 361, + VAR_STUB_PRIME = 362, + VAR_UNWANTED_REPLY_THRESHOLD = 363, + VAR_LOG_TIME_ASCII = 364, + VAR_DOMAIN_INSECURE = 365, + VAR_PYTHON = 366, + VAR_PYTHON_SCRIPT = 367, + VAR_VAL_SIG_SKEW_MIN = 368, + VAR_VAL_SIG_SKEW_MAX = 369, + VAR_CACHE_MIN_TTL = 370, + VAR_VAL_LOG_LEVEL = 371, + VAR_AUTO_TRUST_ANCHOR_FILE = 372, + VAR_KEEP_MISSING = 373, + VAR_ADD_HOLDDOWN = 374, + VAR_DEL_HOLDDOWN = 375, + VAR_SO_RCVBUF = 376, + VAR_EDNS_BUFFER_SIZE = 377, + VAR_PREFETCH = 378, + VAR_PREFETCH_KEY = 379, + VAR_SO_SNDBUF = 380, + VAR_SO_REUSEPORT = 381, + VAR_HARDEN_BELOW_NXDOMAIN = 382, + VAR_IGNORE_CD_FLAG = 383, + VAR_LOG_QUERIES = 384, + VAR_LOG_REPLIES = 385, + VAR_LOG_LOCAL_ACTIONS = 386, + VAR_TCP_UPSTREAM = 387, + VAR_SSL_UPSTREAM = 388, + VAR_SSL_SERVICE_KEY = 389, + VAR_SSL_SERVICE_PEM = 390, + VAR_SSL_PORT = 391, + VAR_FORWARD_FIRST = 392, + VAR_STUB_SSL_UPSTREAM = 393, + VAR_FORWARD_SSL_UPSTREAM = 394, + VAR_TLS_CERT_BUNDLE = 395, + VAR_STUB_FIRST = 396, + VAR_MINIMAL_RESPONSES = 397, + VAR_RRSET_ROUNDROBIN = 398, + VAR_MAX_UDP_SIZE = 399, + VAR_DELAY_CLOSE = 400, + VAR_UNBLOCK_LAN_ZONES = 401, + VAR_INSECURE_LAN_ZONES = 402, + VAR_INFRA_CACHE_MIN_RTT = 403, + VAR_DNS64_PREFIX = 404, + VAR_DNS64_SYNTHALL = 405, + VAR_DNS64_IGNORE_AAAA = 406, + VAR_DNSTAP = 407, + VAR_DNSTAP_ENABLE = 408, + VAR_DNSTAP_SOCKET_PATH = 409, + VAR_DNSTAP_IP = 410, + VAR_DNSTAP_TLS = 411, + VAR_DNSTAP_TLS_SERVER_NAME = 412, + VAR_DNSTAP_TLS_CERT_BUNDLE = 413, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, + VAR_DNSTAP_SEND_IDENTITY = 416, + VAR_DNSTAP_SEND_VERSION = 417, + VAR_DNSTAP_IDENTITY = 418, + VAR_DNSTAP_VERSION = 419, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, + VAR_RESPONSE_IP_TAG = 426, + VAR_RESPONSE_IP = 427, + VAR_RESPONSE_IP_DATA = 428, + VAR_HARDEN_ALGO_DOWNGRADE = 429, + VAR_IP_TRANSPARENT = 430, + VAR_IP_DSCP = 431, + VAR_DISABLE_DNSSEC_LAME_CHECK = 432, + VAR_IP_RATELIMIT = 433, + VAR_IP_RATELIMIT_SLABS = 434, + VAR_IP_RATELIMIT_SIZE = 435, + VAR_RATELIMIT = 436, + VAR_RATELIMIT_SLABS = 437, + VAR_RATELIMIT_SIZE = 438, + VAR_RATELIMIT_FOR_DOMAIN = 439, + VAR_RATELIMIT_BELOW_DOMAIN = 440, + VAR_IP_RATELIMIT_FACTOR = 441, + VAR_RATELIMIT_FACTOR = 442, + VAR_SEND_CLIENT_SUBNET = 443, + VAR_CLIENT_SUBNET_ZONE = 444, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, + VAR_CLIENT_SUBNET_OPCODE = 446, + VAR_MAX_CLIENT_SUBNET_IPV4 = 447, + VAR_MAX_CLIENT_SUBNET_IPV6 = 448, + VAR_MIN_CLIENT_SUBNET_IPV4 = 449, + VAR_MIN_CLIENT_SUBNET_IPV6 = 450, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, + VAR_CAPS_WHITELIST = 453, + VAR_CACHE_MAX_NEGATIVE_TTL = 454, + VAR_PERMIT_SMALL_HOLDDOWN = 455, + VAR_QNAME_MINIMISATION = 456, + VAR_QNAME_MINIMISATION_STRICT = 457, + VAR_IP_FREEBIND = 458, + VAR_DEFINE_TAG = 459, + VAR_LOCAL_ZONE_TAG = 460, + VAR_ACCESS_CONTROL_TAG = 461, + VAR_LOCAL_ZONE_OVERRIDE = 462, + VAR_ACCESS_CONTROL_TAG_ACTION = 463, + VAR_ACCESS_CONTROL_TAG_DATA = 464, + VAR_VIEW = 465, + VAR_ACCESS_CONTROL_VIEW = 466, + VAR_VIEW_FIRST = 467, + VAR_SERVE_EXPIRED = 468, + VAR_SERVE_EXPIRED_TTL = 469, + VAR_SERVE_EXPIRED_TTL_RESET = 470, + VAR_SERVE_EXPIRED_REPLY_TTL = 471, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, + VAR_FAKE_DSA = 473, + VAR_FAKE_SHA1 = 474, + VAR_LOG_IDENTITY = 475, + VAR_HIDE_TRUSTANCHOR = 476, + VAR_TRUST_ANCHOR_SIGNALING = 477, + VAR_AGGRESSIVE_NSEC = 478, + VAR_USE_SYSTEMD = 479, + VAR_SHM_ENABLE = 480, + VAR_SHM_KEY = 481, + VAR_ROOT_KEY_SENTINEL = 482, + VAR_DNSCRYPT = 483, + VAR_DNSCRYPT_ENABLE = 484, + VAR_DNSCRYPT_PORT = 485, + VAR_DNSCRYPT_PROVIDER = 486, + VAR_DNSCRYPT_SECRET_KEY = 487, + VAR_DNSCRYPT_PROVIDER_CERT = 488, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, + VAR_IPSECMOD_ENABLED = 494, + VAR_IPSECMOD_HOOK = 495, + VAR_IPSECMOD_IGNORE_BOGUS = 496, + VAR_IPSECMOD_MAX_TTL = 497, + VAR_IPSECMOD_WHITELIST = 498, + VAR_IPSECMOD_STRICT = 499, + VAR_CACHEDB = 500, + VAR_CACHEDB_BACKEND = 501, + VAR_CACHEDB_SECRETSEED = 502, + VAR_CACHEDB_REDISHOST = 503, + VAR_CACHEDB_REDISPORT = 504, + VAR_CACHEDB_REDISTIMEOUT = 505, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, + VAR_FOR_UPSTREAM = 507, + VAR_AUTH_ZONE = 508, + VAR_ZONEFILE = 509, + VAR_MASTER = 510, + VAR_URL = 511, + VAR_FOR_DOWNSTREAM = 512, + VAR_FALLBACK_ENABLED = 513, + VAR_TLS_ADDITIONAL_PORT = 514, + VAR_LOW_RTT = 515, + VAR_LOW_RTT_PERMIL = 516, + VAR_FAST_SERVER_PERMIL = 517, + VAR_FAST_SERVER_NUM = 518, + VAR_ALLOW_NOTIFY = 519, + VAR_TLS_WIN_CERT = 520, + VAR_TCP_CONNECTION_LIMIT = 521, + VAR_FORWARD_NO_CACHE = 522, + VAR_STUB_NO_CACHE = 523, + VAR_LOG_SERVFAIL = 524, + VAR_DENY_ANY = 525, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, + VAR_LOG_TAG_QUERYREPLY = 527, + VAR_STREAM_WAIT_SIZE = 528, + VAR_TLS_CIPHERS = 529, + VAR_TLS_CIPHERSUITES = 530, + VAR_IPSET = 531, + VAR_IPSET_NAME_V4 = 532, + VAR_IPSET_NAME_V6 = 533, + VAR_TLS_SESSION_TICKET_KEYS = 534, + VAR_RPZ = 535, + VAR_TAGS = 536, + VAR_RPZ_ACTION_OVERRIDE = 537, + VAR_RPZ_CNAME_OVERRIDE = 538, + VAR_RPZ_LOG = 539, + VAR_RPZ_LOG_NAME = 540 + }; #endif /* Tokens. */ #define SPACE 258 @@ -609,22 +619,25 @@ #define VAR_RPZ_LOG 539 #define VAR_RPZ_LOG_NAME 540 - - - +/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE -#line 66 "./util/configparser.y" +union YYSTYPE { +#line 66 "./util/configparser.y" + char* str; -} -/* Line 1529 of yacc.c. */ -#line 623 "util/configparser.h" - YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 + +#line 631 "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 */ From bcdc13514af78045250d18f257b369649231ca9a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 24 Mar 2020 09:32:04 +0100 Subject: [PATCH 178/235] - Fixes on #200. and rerun autoconf. --- config.h.in | 8 +++++--- configure | 31 +++++++++++++++++-------------- doc/Changelog | 1 + services/listen_dnsport.c | 21 ++++++++++++++------- 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/config.h.in b/config.h.in index 3c46e3f3e..bd9b38bc0 100644 --- a/config.h.in +++ b/config.h.in @@ -28,6 +28,9 @@ /* Whether daemon is deprecated */ #undef DEPRECATED_DAEMON +/* Define this to enable kernel based UDP source port randomization. */ +#undef DISABLE_EXPLICIT_PORT_RANDOMISATION + /* default dnstap socket path */ #undef DNSTAP_SOCKET_PATH @@ -811,9 +814,8 @@ /* Define to 1 to use ipset support */ #undef USE_IPSET -/* Define to 1 to disable explict UDP source port randomisation and rely on the - kernel to provide random source ports */ -#undef DISABLE_EXPLICIT_PORT_RANDOMISATION +/* Define if you enable libevent */ +#undef USE_LIBEVENT /* Define if you want to use internal select based events */ #undef USE_MINI_EVENT diff --git a/configure b/configure index d9355009c..595c156b8 100755 --- a/configure +++ b/configure @@ -19124,31 +19124,34 @@ esac if test "${with_libevent+set}" = set; then : withval=$with_libevent; else - withval="no" + with_libevent="no" fi -if test x_$withval = x_yes -o x_$withval != x_no; then +if test "x_$with_libevent" != x_no; then + +$as_echo "#define USE_LIBEVENT 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libevent" >&5 $as_echo_n "checking for libevent... " >&6; } - if test x_$withval = x_ -o x_$withval = x_yes; then - withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" + if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then + with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi - for dir in $withval; do + for dir in $with_libevent; do thedir="$dir" if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then found_libevent="yes" - if test "$thedir" != "/usr"; then - CPPFLAGS="$CPPFLAGS -I$thedir/include" - fi - break; - fi + if test "$thedir" != "/usr"; then + CPPFLAGS="$CPPFLAGS -I$thedir/include" + fi + break; + fi done if test x_$found_libevent != x_yes; then if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then # libevent source directory - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5 $as_echo "found in $thedir" >&6; } - CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" + CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" BAK_LDFLAGS_SET="1" BAK_LDFLAGS="$LDFLAGS" # remove evdns from linking @@ -19161,10 +19164,10 @@ $as_echo "found in $thedir" >&6; } cp $ev_files_o build/libevent cp $ev_files_lo build/libevent cp $ev_files_libso build/libevent/.libs - LATE_LDFLAGS="build/libevent/*.lo -lm" + LATE_LDFLAGS="build/libevent/*.lo -lm" LDFLAGS="build/libevent/*.o $LDFLAGS -lm" else - as_fn_error $? "Cannot find the libevent library in $withval + as_fn_error $? "Cannot find the libevent library in $with_libevent You can restart ./configure --with-libevent=no to use a builtin alternative. Please note that this alternative is not as capable as libevent when using large outgoing port ranges. " "$LINENO" 5 diff --git a/doc/Changelog b/doc/Changelog index fcc7dca28..94a1e99c3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 24 March 2020: Wouter - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP tag for outgoing packets. + - Fixes on #200. 23 March 2020: Wouter - Fix compile on Solaris for unbound-checkconf. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 61a632106..096f382ba 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -875,7 +875,8 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, } char* -set_ip_dscp(int socket, int addrfamily, int dscp) { +set_ip_dscp(int socket, int addrfamily, int dscp) +{ int ds; if(dscp == 0) @@ -885,32 +886,38 @@ set_ip_dscp(int socket, int addrfamily, int dscp) { case AF_INET6: if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &ds, sizeof(ds)) < 0) return sock_strerror(errno); + break; default: if(setsockopt(socket, IPPROTO_IP, IP_TOS, &ds, sizeof(ds)) < 0) return sock_strerror(errno); + break; } return NULL; } # ifndef USE_WINSOCK char* -sock_strerror(int errn){ - return strerror(errno); +sock_strerror(int errn) +{ + return strerror(errn); } void -sock_close(int socket) { +sock_close(int socket) +{ close(socket); } # else char* -sock_strerror(int errn){ - return wsa_strerror(WSAGetLastError())) +sock_strerror(int ATTR_UNUSED(errn)) +{ + return wsa_strerror(WSAGetLastError()); } void -sock_close(int socket) { +sock_close(int socket) +{ closesocket(socket); } From 7459b1dceb3c24b25d0b549ad287e39c0c0dc433 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 24 Mar 2020 09:36:27 +0100 Subject: [PATCH 179/235] - Fixes for #200 : example.conf note and set_value for ip-dscp. --- doc/example.conf.in | 5 +++++ util/config_file.c | 1 + 2 files changed, 6 insertions(+) diff --git a/doc/example.conf.in b/doc/example.conf.in index dbc30a48c..091948e2d 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -119,6 +119,11 @@ server: # Linux only. On Linux you also have ip-transparent that is similar. # ip-freebind: no + # the value of the Differentiated Services Codepoint (DSCP) + # in the differentiated services field (DS) of the outgoing + # IP packets + # ip-dscp: 0 + # EDNS reassembly buffer to advertise to UDP peers (the actual buffer # is set with msg-buffer-size). 1472 can solve fragmentation (timeouts) # edns-buffer-size: 4096 diff --git a/util/config_file.c b/util/config_file.c index ef3a3912c..767d76b29 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -525,6 +525,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("so-reuseport:", so_reuseport) else S_YNO("ip-transparent:", ip_transparent) else S_YNO("ip-freebind:", ip_freebind) + else S_NUMBER_OR_ZERO("ip-dscp:", ip_dscp) else S_MEMSIZE("rrset-cache-size:", rrset_cache_size) else S_POW2("rrset-cache-slabs:", rrset_cache_slabs) else S_YNO("prefetch:", prefetch) From 2889be5e901e1db69dd6df5cc9de7d780cd863ed Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 24 Mar 2020 10:23:00 +0100 Subject: [PATCH 180/235] - Travis fix for ios by omitting tools from install. --- contrib/ios/install_tools.sh | 3 ++- doc/Changelog | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/ios/install_tools.sh b/contrib/ios/install_tools.sh index a59fc0eb7..55fef454e 100755 --- a/contrib/ios/install_tools.sh +++ b/contrib/ios/install_tools.sh @@ -4,4 +4,5 @@ echo "Updating tools" brew update 1>/dev/null echo "Installing tools" -brew install autoconf automake libtool pkg-config curl perl 1>/dev/null +# already installed are: autoconf automake libtool pkg-config +brew install curl perl 1>/dev/null diff --git a/doc/Changelog b/doc/Changelog index 94a1e99c3..094b315eb 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP tag for outgoing packets. - Fixes on #200. + - Travis fix for ios by omitting tools from install. 23 March 2020: Wouter - Fix compile on Solaris for unbound-checkconf. From c228e0ac16d5f706952c30781c265ec772c1cbf3 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Wed, 25 Mar 2020 05:00:35 -0400 Subject: [PATCH 181/235] Fix OpenSSL corss-compaile warning warning: '__ANDROID_API__' macro redefined --- contrib/android/15-android.conf | 165 ++---------------------------- contrib/android/setenv_android.sh | 91 +++++++++------- 2 files changed, 67 insertions(+), 189 deletions(-) diff --git a/contrib/android/15-android.conf b/contrib/android/15-android.conf index 5e132e816..e1fc91e70 100644 --- a/contrib/android/15-android.conf +++ b/contrib/android/15-android.conf @@ -1,180 +1,37 @@ #### Android... # -# See NOTES.ANDROID for details, and don't miss platform-specific -# comments below... - -{ - use File::Spec::Functions; - - my $android_ndk = {}; - my %triplet = ( - arm => "arm-linux-androideabi", - arm64 => "aarch64-linux-android", - x86 => "i686-linux-android", - x86_64 => "x86_64-linux-android" - ); - - sub android_ndk { - unless (%$android_ndk) { - if ($now_printing =~ m|^android|) { - return $android_ndk = { bn_ops => "BN_AUTO" }; - } - - my $ndk_var; - my $ndk; - foreach (qw(ANDROID_NDK_ROOT)) { - $ndk_var = $_; - $ndk = $ENV{$ndk_var}; - last if defined $ndk; - } - die "\$ANDROID_NDK_ROOT is not defined" if (!$ndk); - if (!-d "$ndk/platforms" && !-f "$ndk/AndroidVersion.txt") { - # $ndk/platforms is traditional "all-inclusive" NDK, while - # $ndk/AndroidVersion.txt is so-called standalone toolchain - # tailored for specific target down to API level. - die "\$ANDROID_NDK_ROOT=$ndk is invalid"; - } - $ndk = canonpath($ndk); - - my $ndkver = undef; - - if (open my $fh, "<$ndk/source.properties") { - local $_; - while(<$fh>) { - if (m|Pkg\.Revision\s*=\s*([0-9]+)|) { - $ndkver = $1; - last; - } - } - close $fh; - } - - my ($sysroot, $api, $arch); - - $config{target} =~ m|[^-]+-([^-]+)$|; # split on dash - $arch = $1; - - if ($arch = "armeabi") { - $arch = "arm"; - } - - if (-f "$ndk/AndroidVersion.txt") { - $sysroot = "$ndk/sysroot"; - } else { - $api = "*"; - - # see if user passed -D__ANDROID_API__=N - foreach (@{$useradd{CPPDEFINES}}, @{$user{CPPFLAGS}}) { - if (m|__ANDROID_API__=([0-9]+)|) { - $api = $1; - last; - } - } - - # list available platforms (numerically) - my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1; - $b =~ m/-([0-9]+)$/; $aa <=> $1; - } glob("$ndk/platforms/android-$api"); - die "no $ndk/platforms/android-$api" if ($#platforms < 0); - - $sysroot = "@platforms[$#platforms]/arch-$arch"; - $sysroot =~ m|/android-([0-9]+)/arch-$arch|; - $api = $1; - } - die "no sysroot=$sysroot" if (!-d $sysroot); - - my $triarch = $triplet{$arch}; - my $cflags; - my $cppflags; - - # see if there is NDK clang on $PATH, "universal" or "standalone" - if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { - my $host=$1; - # harmonize with gcc default - my $arm = $ndkver > 16 ? "armv7a" : "armv5te"; - (my $tridefault = $triarch) =~ s/^arm-/$arm-/; - (my $tritools = $triarch) =~ s/(?:x|i6)86(_64)?-.*/x86$1/; - $cflags .= " -target $tridefault "; - $user{CC} = "clang" if ($user{CC} !~ m|clang|); - $user{CROSS_COMPILE} = undef; - if (which("llvm-ar") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { - $user{AR} = "llvm-ar"; - $user{ARFLAGS} = [ "rs" ]; - $user{RANLIB} = ":"; - } - } elsif (-f "$ndk/AndroidVersion.txt") { #"standalone toolchain" - my $cc = $user{CC} // "clang"; - # One can probably argue that both clang and gcc should be - # probed, but support for "standalone toolchain" was added - # *after* announcement that gcc is being phased out, so - # favouring clang is considered adequate. Those who insist - # have option to enforce test for gcc with CC=gcc. - if (which("$triarch-$cc") !~ m|^$ndk|) { - die "no NDK $triarch-$cc on \$PATH"; - } - $user{CC} = $cc; - $user{CROSS_COMPILE} = "$triarch-"; - } elsif ($user{CC} eq "clang") { - die "no NDK clang on \$PATH"; - } else { - if (which("$triarch-gcc") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) { - die "no NDK $triarch-gcc on \$PATH"; - } - $cflags .= " -mandroid"; - $user{CROSS_COMPILE} = "$triarch-"; - } - - if (!-d "$sysroot/usr/include") { - my $incroot = "$ndk/sysroot/usr/include"; - die "no $incroot" if (!-d $incroot); - die "no $incroot/$triarch" if (!-d "$incroot/$triarch"); - $incroot =~ s|^$ndk/||; - $cppflags = "-D__ANDROID_API__=$api"; - } - - $sysroot =~ s|^$ndk/||; - $android_ndk = { - cppflags => $cppflags, - bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG" - : "BN_LLONG", - }; - } - - return $android_ndk; - } -} +# Heavily hacked 15-android.conf based on OpenSSL's config file of the same name. +# This 15-android.conf avoids compiler errors using NDK-r20. This 15-android.conf +# requires an environment set (sourced) using setenv-android.sh. my %targets = ( "android" => { inherit_from => [ "linux-generic32" ], template => 1, - cflags => add(sub { android_ndk()->{cflags} }), - cppflags => add(sub { android_ndk()->{cppflags} }), - cxxflags => add(sub { android_ndk()->{cflags} }), - bn_ops => sub { android_ndk()->{bn_ops} }, - bin_cflags => "-fPIE", - bin_lflags => "-pie", + bin_cflags => add("-fPIE"), + bin_lflags => add("-pie"), enable => [ ], }, + "android-arm" => { inherit_from => [ "android", asm("armv4_asm") ], - bn_ops => add("RC4_CHAR"), + bn_ops => [ "BN_LLONG", "RC4_CHAR" ], }, "android-arm64" => { inherit_from => [ "android", asm("aarch64_asm") ], - bn_ops => add("RC4_CHAR"), + bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ], perlasm_scheme => "linux64", }, "android-x86" => { inherit_from => [ "android", asm("x86_asm") ], - CFLAGS => add(picker(release => "-fomit-frame-pointer")), - bn_ops => add("RC4_INT"), + cflags => add(picker(release => "-fomit-frame-pointer")), + bn_ops => [ "BN_LLONG", "RC4_INT" ], perlasm_scheme => "android", }, "android-x86_64" => { inherit_from => [ "android", asm("x86_64_asm") ], - bn_ops => add("RC4_INT"), + bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_INT" ], perlasm_scheme => "elf", }, ); diff --git a/contrib/android/setenv_android.sh b/contrib/android/setenv_android.sh index d87a8f3e3..ef5f2455e 100755 --- a/contrib/android/setenv_android.sh +++ b/contrib/android/setenv_android.sh @@ -1,16 +1,43 @@ #!/usr/bin/env bash -# Error checking +# ==================================================================== +# Sets the cross compile environment for Android +# +# Based upon OpenSSL's setenv-android.sh by TH, JW, and SM. +# Heavily modified by JWW for Crypto++. +# Updated by Skycoder42 for current recommendations for Android. +# Modified by JWW for Unbound. +# ==================================================================== + +######################################### +##### Some validation ##### +######################################### + +if [ -z "$ANDROID_API" ]; then + echo "ANDROID_API is not set. Please set it" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + +if [ -z "$ANDROID_CPU" ]; then + echo "ANDROID_CPU is not set. Please set it" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + if [ ! -d "$ANDROID_NDK_ROOT" ]; then echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it." echo "NDK root is $ANDROID_NDK_ROOT" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi +# cryptest-android.sh may run this script without sourcing. +if [ "$0" = "${BASH_SOURCE[0]}" ]; then + echo "setenv-android.sh is usually sourced, but not this time." +fi + ##################################################################### # Need to set THIS_HOST to darwin-x86_64, linux-x86_64, -# windows-x86_64 or windows. +# windows, or windows-x86_64 if [[ "$(uname -s | grep -i -c darwin)" -ne 0 ]]; then THIS_HOST=darwin-x86_64 @@ -21,38 +48,30 @@ else [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi -AOSP_TOOLCHAIN_ROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST" -AOSP_TOOLCHAIN_PATH="$AOSP_TOOLCHAIN_ROOT/bin" -AOSP_SYSROOT="$AOSP_TOOLCHAIN_ROOT/sysroot" +ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/bin" +ANDROID_SYSROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/sysroot" # Error checking -if [ ! -d "$AOSP_TOOLCHAIN_ROOT" ]; then - echo "ERROR: AOSP_TOOLCHAIN_ROOT is not a valid path. Please set it." - echo "Root is $AOSP_TOOLCHAIN_ROOT" +if [ ! -d "$ANDROID_TOOLCHAIN" ]; then + echo "ERROR: ANDROID_TOOLCHAIN is not a valid path. Please set it." + echo "Path is $ANDROID_TOOLCHAIN" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -d "$AOSP_TOOLCHAIN_PATH" ]; then - echo "ERROR: AOSP_TOOLCHAIN_PATH is not a valid path. Please set it." - echo "Path is $AOSP_TOOLCHAIN_PATH" - [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 -fi - -# Error checking -if [ ! -d "$AOSP_SYSROOT" ]; then - echo "ERROR: AOSP_SYSROOT is not a valid path. Please set it." - echo "Path is $AOSP_SYSROOT" +if [ ! -d "$ANDROID_SYSROOT" ]; then + echo "ERROR: ANDROID_SYSROOT is not a valid path. Please set it." + echo "Path is $ANDROID_SYSROOT" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### -AOSP_CPU=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU") +THE_ARCH=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU") # https://developer.android.com/ndk/guides/abis.html -case "$AOSP_CPU" in - armeabi|armv7a|armv7-a|armeabi-v7a) +case "$THE_ARCH" in + armv7*|armeabi*) CC="armv7a-linux-androideabi$ANDROID_API-clang" CXX="armv7a-linux-androideabi$ANDROID_API-clang++" LD="arm-linux-androideabi-ld" @@ -65,7 +84,7 @@ case "$AOSP_CPU" in CXXFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions -frtti" ;; - armv8|armv8a|aarch64|arm64|arm64-v8a) + armv8*|aarch64|arm64) CC="aarch64-linux-android$ANDROID_API-clang" CXX="aarch64-linux-android$ANDROID_API-clang++" LD="aarch64-linux-android-ld" @@ -108,66 +127,67 @@ case "$AOSP_CPU" in echo "ERROR: Unknown architecture $ANDROID_CPU" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 ;; - esac ##################################################################### # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$CC" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$CC" ]; then echo "ERROR: Failed to find Android clang. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$CXX" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$CXX" ]; then echo "ERROR: Failed to find Android clang++. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$RANLIB" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$RANLIB" ]; then echo "ERROR: Failed to find Android ranlib. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$AR" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$AR" ]; then echo "ERROR: Failed to find Android ar. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$AS" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$AS" ]; then echo "ERROR: Failed to find Android as. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$LD" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$LD" ]; then echo "ERROR: Failed to find Android ld. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### -LENGTH=${#AOSP_TOOLCHAIN_PATH} +LENGTH=${#ANDROID_TOOLCHAIN} SUBSTR=${PATH:0:$LENGTH} -if [ "$SUBSTR" != "$AOSP_TOOLCHAIN_PATH" ]; then - export PATH="$AOSP_TOOLCHAIN_PATH:$PATH" +if [ "$SUBSTR" != "$ANDROID_TOOLCHAIN" ]; then + export PATH="$ANDROID_TOOLCHAIN:$PATH" fi ##################################################################### export CPP CC CXX LD AS AR RANLIB STRIP export ANDROID_SYSROOT="$AOSP_SYSROOT" -export CFLAGS="-D__ANDROID_API__=$ANDROID_API $CFLAGS --sysroot=$AOSP_SYSROOT" -export CXXFLAGS="-D__ANDROID_API__=$ANDROID_API $CXXFLAGS --sysroot=$AOSP_SYSROOT" +export CPPFLAGS="-D__ANDROID_API__=$ANDROID_API" +export CFLAGS="$CFLAGS --sysroot=$AOSP_SYSROOT" +export CXXFLAGS="$CXXFLAGS -stdlib=libc++ --sysroot=$AOSP_SYSROOT" ##################################################################### -echo "AOSP_TOOLCHAIN_PATH: $AOSP_TOOLCHAIN_PATH" +echo "ANDROID_TOOLCHAIN: $ANDROID_TOOLCHAIN" +echo "CPP: $(command -v "$CPP")" echo "CC: $(command -v "$CC")" echo "CXX: $(command -v "$CXX")" echo "LD: $(command -v "$LD")" @@ -176,6 +196,7 @@ echo "AR: $(command -v "$AR")" echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" +echo "CPPFLAGS: $CPPFLAGS" echo "CFLAGS: $CFLAGS" echo "CXXFLAGS: $CXXFLAGS" From 042ba77c63be5164f33fd95a80b96e699fa18e23 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 25 Mar 2020 13:58:40 +0100 Subject: [PATCH 182/235] - Keep 'arm64-v8a' support for Travis android builds. --- contrib/android/setenv_android.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/android/setenv_android.sh b/contrib/android/setenv_android.sh index ef5f2455e..fe7f6503c 100755 --- a/contrib/android/setenv_android.sh +++ b/contrib/android/setenv_android.sh @@ -84,7 +84,7 @@ case "$THE_ARCH" in CXXFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions -frtti" ;; - armv8*|aarch64|arm64) + armv8*|aarch64|arm64*) CC="aarch64-linux-android$ANDROID_API-clang" CXX="aarch64-linux-android$ANDROID_API-clang++" LD="aarch64-linux-android-ld" From 40ed82f522f6e711313e6b49a17a8e01e44a88a3 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 25 Mar 2020 14:10:27 +0100 Subject: [PATCH 183/235] Changelog entry for #201 - Merge PR #201 from noloader: Fix OpenSSL cross-compaile warnings. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 094b315eb..316dfacdf 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +25 March 2020: George + - Merge PR #201 from noloader: Fix OpenSSL cross-compaile warnings. + - Fix on #201. + 24 March 2020: Wouter - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP tag for outgoing packets. From e4eb76a5f33f406b468b88fd1f18ebdeaeb21feb Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 26 Mar 2020 19:11:57 +0100 Subject: [PATCH 184/235] - Fix RPZ concurrency issue when using auth_zone_reload. --- doc/Changelog | 3 +++ respip/respip.c | 27 +++++++++++++++++++++------ services/authzone.c | 23 +++++++++++++---------- services/authzone.h | 9 +++++++-- services/rpz.c | 21 ++++++++++++++++----- services/rpz.h | 5 ++--- 6 files changed, 62 insertions(+), 26 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 316dfacdf..0ecda426f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +26 March 2020: Ralph + - Fix RPZ concurrency issue when using auth_zone_reload. + 25 March 2020: George - Merge PR #201 from noloader: Fix OpenSSL cross-compaile warnings. - Fix on #201. diff --git a/respip/respip.c b/respip/respip.c index c496653c4..6fa4f1885 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -914,6 +914,7 @@ respip_rewrite_reply(const struct query_info* qinfo, int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; struct rpz* r; + struct auth_zone* a; struct ub_packed_rrset_key* data = NULL; int rpz_used = 0; int rpz_log = 0; @@ -955,6 +956,10 @@ respip_rewrite_reply(const struct query_info* qinfo, } if(!raddr && !view->isfirst) goto done; + if(!raddr && view->isfirst) { + lock_rw_unlock(&view->lock); + view = NULL; + } } if(!raddr && (raddr = respip_addr_lookup(rep, ipset, &rrset_id))) { @@ -965,7 +970,9 @@ respip_rewrite_reply(const struct query_info* qinfo, ipset->tagname, ipset->num_tags); } lock_rw_rdlock(&az->rpz_lock); - for(r = az->rpz_first; r && !raddr; r = r->next) { + for(a = az->rpz_first; a && !raddr; a = a->rpz_az_next) { + lock_rw_rdlock(&a->lock); + r = a->rpz; if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, ctaglist, ctaglen)) { if((raddr = respip_addr_lookup(rep, @@ -975,16 +982,21 @@ respip_rewrite_reply(const struct query_info* qinfo, region, &rpz_used)) { log_err("out of memory"); lock_rw_unlock(&raddr->lock); + lock_rw_unlock(&a->lock); lock_rw_unlock(&az->rpz_lock); return 0; } - if(!rpz_used) { - lock_rw_unlock(&raddr->lock); - raddr = NULL; - actinfo->rpz_disabled++; + if(rpz_used) { + /* break to make sure 'a' stays pointed + * to used auth_zone, and keeps lock */ + break; } + lock_rw_unlock(&raddr->lock); + raddr = NULL; + actinfo->rpz_disabled++; } - } + } + lock_rw_unlock(&a->lock); } lock_rw_unlock(&az->rpz_lock); if(raddr && !search_only) { @@ -1038,6 +1050,9 @@ respip_rewrite_reply(const struct query_info* qinfo, if(raddr) { lock_rw_unlock(&raddr->lock); } + if(rpz_used) { + lock_rw_unlock(&a->lock); + } return ret; } diff --git a/services/authzone.c b/services/authzone.c index c5803757a..70fe27a5e 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -392,12 +392,12 @@ auth_zone_delete(struct auth_zone* z, struct auth_zones* az) if(az && z->rpz) { /* keep RPZ linked list intact */ lock_rw_wrlock(&az->rpz_lock); - if(z->rpz->prev) - z->rpz->prev->next = z->rpz->next; + if(z->rpz_az_prev) + z->rpz_az_prev->rpz_az_next = z->rpz_az_next; else - az->rpz_first = z->rpz->next; - if(z->rpz->next) - z->rpz->next->prev = z->rpz->prev; + az->rpz_first = z->rpz_az_next; + if(z->rpz_az_next) + z->rpz_az_next->rpz_az_prev = z->rpz_az_prev; lock_rw_unlock(&az->rpz_lock); } if(z->rpz) @@ -426,9 +426,11 @@ auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen, } rbtree_init(&z->data, &auth_data_cmp); lock_rw_init(&z->lock); - lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)); + lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)- + sizeof(&z->rpz_az_next)-sizeof(&z->rpz_az_prev)); lock_rw_wrlock(&z->lock); - /* z lock protects all, except rbtree itself, which is az->lock */ + /* z lock protects all, except rbtree itself and the rpz linked list + * pointers, which are protected using az->lock */ if(!rbtree_insert(&az->ztree, &z->node)) { lock_rw_unlock(&z->lock); auth_zone_delete(z, NULL); @@ -1897,11 +1899,12 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) fatal_exit("Could not setup RPZ zones"); return 0; } + lock_protect(&z->lock, &z->rpz->local_zones, sizeof(*z->rpz)); lock_rw_wrlock(&az->rpz_lock); - z->rpz->next = az->rpz_first; + z->rpz_az_next = az->rpz_first; if(az->rpz_first) - az->rpz_first->prev = z->rpz; - az->rpz_first = z->rpz; + az->rpz_first->rpz_az_prev = z; + az->rpz_first = z; lock_rw_unlock(&az->rpz_lock); } diff --git a/services/authzone.h b/services/authzone.h index 9bb131ad8..3d94f30d6 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -82,8 +82,8 @@ struct auth_zones { size_t num_query_up; /** number of queries downstream */ size_t num_query_down; - /** first rpz item in linked list */ - struct rpz* rpz_first; + /** first auth zone containing rpz item in linked list */ + struct auth_zone* rpz_first; /** rw lock for rpz linked list, needed when iterating or editing linked * list. */ lock_rw_type rpz_lock; @@ -138,6 +138,11 @@ struct auth_zone { int zone_deleted; /** deletelist pointer, unused normally except during delete */ struct auth_zone* delete_next; + /* not protected by auth_zone lock, must be last items in struct */ + /** next auth zone containing RPZ data, or NULL */ + struct auth_zone* rpz_az_next; + /** previous auth zone containing RPZ data, or NULL */ + struct auth_zone* rpz_az_prev; }; /** diff --git a/services/rpz.c b/services/rpz.c index efb7ad5a8..105f238d0 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -834,6 +834,8 @@ rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, delete_zone = rpz_data_delete_rr(z, dname, dnamelen, rr_type, rdatawl, rdatalen); else if(a != localzone_type_to_rpz_action(z->type)) { + lock_rw_unlock(&z->lock); + lock_rw_unlock(&r->local_zones->lock); return; } lock_rw_unlock(&z->lock); @@ -939,13 +941,16 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist, size_t taglen, struct ub_server_stats* stats) { - struct rpz* r; + struct rpz* r = NULL; + struct auth_zone* a; int ret; enum localzone_type lzt; struct local_zone* z = NULL; struct local_data* ld = NULL; lock_rw_rdlock(&az->rpz_lock); - for(r = az->rpz_first; r; r = r->next) { + for(a = az->rpz_first; a; a = a->rpz_az_next) { + lock_rw_rdlock(&a->lock); + r = a->rpz; if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, taglist, taglen)) { z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, @@ -963,13 +968,14 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, } if(z) break; - } + } + lock_rw_unlock(&a->lock); /* not found in this auth_zone */ } lock_rw_unlock(&az->rpz_lock); if(!z) - return 0; + return 0; /* not holding auth_zone.lock anymore */ - + log_assert(r); if(r->action_override == RPZ_NO_OVERRIDE_ACTION) lzt = z->type; else @@ -980,6 +986,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) { lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return 0; /* out of memory */ } qinfo->local_alias->rrset = @@ -987,6 +994,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, sizeof(*r->cname_override)); if(!qinfo->local_alias->rrset) { lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return 0; /* out of memory */ } qinfo->local_alias->rrset->rk.dname = qinfo->qname; @@ -996,6 +1004,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, qinfo, repinfo, r->log_name); stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return 0; } @@ -1008,6 +1017,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, repinfo, r->log_name); stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return !qinfo->local_alias; } @@ -1018,6 +1028,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, qinfo, repinfo, r->log_name); stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return ret; } diff --git a/services/rpz.h b/services/rpz.h index a404350d3..77a2db55c 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -86,7 +86,8 @@ enum rpz_action { /** * RPZ containing policies. Pointed to from corresponding auth-zone. Part of a * linked list to keep configuration order. Iterating or changing the linked - * list requires the rpz_lock from struct auth_zones. + * list requires the rpz_lock from struct auth_zones. Changing items in this + * struct require the lock from struct auth_zone. */ struct rpz { struct local_zones* local_zones; @@ -97,8 +98,6 @@ struct rpz { struct ub_packed_rrset_key* cname_override; int log; char* log_name; - struct rpz* next; - struct rpz* prev; struct regional* region; }; From 2902e4ab5f37596d5bf70363caf7458101ba7bd0 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 26 Mar 2020 19:57:58 -0400 Subject: [PATCH 185/235] Update README-Travis.md with current procedures --- README-Travis.md | 186 ++++++++++++++++++++++++++--------------------- 1 file changed, 104 insertions(+), 82 deletions(-) diff --git a/README-Travis.md b/README-Travis.md index fc4b505e4..3ce22cc20 100644 --- a/README-Travis.md +++ b/README-Travis.md @@ -4,7 +4,7 @@ Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and Android is tested on armv7a, aarch64, x86 and x86_64. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Mips and Mips64 are not tested because they are no longer supported under current NDKs. -iOS is tested for iPhoneOS, WatchOS and AppleTVOS. The testing uses Xcode 10.0 on OS X 10.13. +iOS is tested for iPhoneOS, WatchOS, AppleTVOS, iPhoneSimulator, AppleTVSimulator and WatchSimulator. The testing uses Xcode 10 on OS X 10.13. The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys. @@ -68,43 +68,59 @@ elif [ "$TEST_ASAN" = "yes" ]; then Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the Android recipes. -### ANDROID_NDK_ROOT +### Android job -The first step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks botch this step, and use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). - -Unbound exports the variables in the Travis configuration script for the Android recipe: - -``` -export ANDROID_SDK_ROOT="$HOME/android-sdk" -export ANDROID_NDK_ROOT="$HOME/android-ndk" -``` - -### NDK installation - -The second step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. - -If you are working from a developer machine you probably already have a NDK and SDK installed. - -### Android environment - -The third step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. - -`contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. +The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below. ``` - os: linux - name: Android aarch64, Linux, Amd64 + name: Android armv7a, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - - AUTOTOOLS_HOST=aarch64-linux-android - - OPENSSL_HOST=android-arm64 - - ANDROID_CPU=aarch64 + - AUTOTOOLS_HOST=armv7a-linux-androideabi + - OPENSSL_HOST=android-arm + - ANDROID_CPU=armv7a - ANDROID_API=23 + - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" + - ANDROID_SDK_ROOT="$HOME/android-sdk" + - ANDROID_NDK_ROOT="$HOME/android-ndk" ``` +### ANDROID_NDK_ROOT + +The second step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks miss this step, or use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). + +If you are working from a developer machine you probably already have the necessary tools installed. You should ensure `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` are set properly. + +### Tool installation + +The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java. + +``` +before_script: + - | + if [ "$TEST_ANDROID" = "yes" ]; then + ./contrib/android/install_tools.sh + elif [ "$TEST_IOS" = "yes" ]; then + ./contrib/ios/install_tools.sh + fi +``` + +### NDK installation + +The third step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. + +If you are working from a developer machine you probably already have a NDK and SDK installed. + +### Android environment + +The fourth step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. + +`contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` which tools and libraries to select. + The `contrib/android/setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. ``` @@ -121,17 +137,11 @@ armv8a|aarch64|arm64|arm64-v8a) CXXFLAGS="-funwind-tables -fexceptions -frtti" ``` -### Tool installation - -The fourth step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java. - -If you are working from a developer machine you probably already have the necessary tools installed. - ### OpenSSL and Expat The fifth step builds OpenSSL and Expat. OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_PREFIX"` so the headers are placed in `$ANDROID_PREFIX/include` directory, and the libraries are placed in the `$ANDROID_PREFIX/lib` directory. -`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system library's headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`. +`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound, with NDK-r19 and above, and a properly set environment. @@ -147,19 +157,20 @@ elif [ "$TEST_ANDROID" = "yes" ]; then export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh source ./contrib/android/setenv_android.sh - ./contrib/android/install_tools.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ - --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --build="$AUTOTOOLS_BUILD" \ + --host="$AUTOTOOLS_HOST" \ --prefix="$ANDROID_PREFIX" \ - --with-ssl="$ANDROID_PREFIX" --disable-gost \ - --with-libexpat="$ANDROID_PREFIX"; + --with-ssl="$ANDROID_PREFIX" \ + --with-libexpat="$ANDROID_PREFIX" \ + --disable-gost; make -j 2 make install ``` -Travis only smoke tests an Android build using a compile and link. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. +Travis only smoke tests an Android build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. ### Android flags @@ -171,58 +182,68 @@ To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-sample ## iOS builds -Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. +Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). Travis also tests compiles against the simulators. The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. -### iOS environment +### iOS job -The first step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`. - -`contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. +The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below. ``` -os: osx -osx_image: xcode10 -name: Apple iPhone, OS X, Amd64 -compiler: clang -env: - - TEST_IOS=yes - - AUTOTOOLS_HOST=armv7-apple-ios - - OPENSSL_HOST=ios-cross - - IOS_SDK=iPhoneOS - - IOS_CPU=armv7s -``` - -The `contrib/ios/setenv_ios.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. - -``` -iphone|iphoneos) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default armv7. Also allowed armv7a, armv7s, arm64 - if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi - - CFLAGS="-arch $IOS_CPU -mios-version-min=6" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=6" +- os: osx + osx_image: xcode10 + name: Apple iPhone on iOS, armv7 + compiler: clang + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=armv7-apple-ios + - OPENSSL_HOST=ios-cross + - IOS_SDK=iPhoneOS + - IOS_CPU=armv7s + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" ``` ### Tool installation -The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. +The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. The installation happens at the `before_script:` stage of Travis. + +``` +before_script: + - | + if [ "$TEST_ANDROID" = "yes" ]; then + ./contrib/android/install_tools.sh + elif [ "$TEST_IOS" = "yes" ]; then + ./contrib/ios/install_tools.sh + fi +``` + +### iOS environment + +The third step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`. + +`contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` which tools and libraries to select. + +The `contrib/ios/setenv_ios.sh` script specifies the tools to use during the cross-compile. For Apple SDKs, the tool names are the same as a desktop. There are no special prefixes for the mobile tools. + +``` +CPP=cpp +CC=clang +CXX=clang++ +LD=ld +AS=as +AR=ar +RANLIB=ranlib +STRIP=strip +``` If you are working from a developer machine you probably already have the necessary tools installed. ### OpenSSL and Expat -The third step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. +The fourth step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. -`IOS_PREFIX` is the value `$HOME/iPhoneOS-$IOS_CPU`, `$HOME/AppleTVOS` or `$HOME/WatchOS`. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system library's headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`. +`IOS_PREFIX` is the value `$HOME/$IOS_SDK-$IOS_CPU`. The scheme handles both iOS SDKs and cpu architectures so the pair recieves a unique installation directory. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, `$HOME/iPhoneSimulator-i386`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. + +`PKG_CONFIG_PATH` is an important variable. It is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-ios.conf`. It is a copy of the OpenSSL's project file and located at `contrib/ios/15-ios.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The changes mean Unbound's `15-ios.conf` will only work with Unbound and a properly set environment. @@ -230,26 +251,27 @@ OpenSSL is configured with `no-engine`. Engines require dynamic loading so engin ### iOS build -Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. +Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The full recipe looks as follows. ``` elif [ "$TEST_IOS" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" source ./contrib/ios/setenv_ios.sh - ./contrib/ios/install_tools.sh ./contrib/ios/install_openssl.sh ./contrib/ios/install_expat.sh ./configure \ - --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --build="$AUTOTOOLS_BUILD" \ + --host="$AUTOTOOLS_HOST" \ --prefix="$IOS_PREFIX" \ - --with-ssl="$IOS_PREFIX" --disable-gost \ - --with-libexpat="$IOS_PREFIX"; + --with-ssl="$IOS_PREFIX" \ + --with-libexpat="$IOS_PREFIX" \ + --disable-gost; make -j 2 make install ``` -Travis only smoke tests an iOS build using a compile and link. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them. +Travis only smoke tests an iOS build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them. ### iOS flags From 51593d47ac1cb61a8cabb142c69f204d1c4e982e Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 27 Mar 2020 11:27:12 +0100 Subject: [PATCH 186/235] Make unbound-control error returned on missing domain name more user friendly. --- daemon/remote.c | 4 ++++ doc/Changelog | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/daemon/remote.c b/daemon/remote.c index b0ac2bb5b..b399735c9 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1124,6 +1124,10 @@ parse_arg_name(RES* ssl, char* str, uint8_t** res, size_t* len, int* labs) *res = NULL; *len = 0; *labs = 0; + if(str[0] == '\0') { + ssl_printf(ssl, "error: this option requires a domain name\n"); + return 0; + } status = sldns_str2wire_dname_buf(str, nm, &nmlen); if(status != 0) { ssl_printf(ssl, "error cannot parse name %s at %d: %s\n", str, diff --git a/doc/Changelog b/doc/Changelog index 0ecda426f..718e1fb7d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +27 March 2020: Ralph + - Make unbound-control error returned on missing domain name more user + friendly. + 26 March 2020: Ralph - Fix RPZ concurrency issue when using auth_zone_reload. From 8dc35cfce3e74666e9cc0a097f9b471bac9936fd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 27 Mar 2020 16:07:03 +0100 Subject: [PATCH 187/235] Changelog note for PR #203. - Merge PR #203 from noloader: Update README-Travis.md with current procedures. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 718e1fb7d..0a24a42c4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +27 March 2020: Wouter + - Merge PR #203 from noloader: Update README-Travis.md with current + procedures. + 27 March 2020: Ralph - Make unbound-control error returned on missing domain name more user friendly. From 1ec02f72294aa4d33307c658c321d4e9066e4699 Mon Sep 17 00:00:00 2001 From: Talkabout Date: Sun, 29 Mar 2020 15:22:10 +0200 Subject: [PATCH 188/235] added logic for redis to honor ttl when serve_expired is not enabled --- cachedb/cachedb.c | 5 +++-- cachedb/cachedb.h | 2 +- cachedb/redis.c | 26 +++++++++++++++++++++----- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index c5be51622..8d2220a86 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -160,7 +160,7 @@ testframe_lookup(struct module_env* env, struct cachedb_env* cachedb_env, static void testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, - char* key, uint8_t* data, size_t data_len) + char* key, uint8_t* data, size_t data_len, uint64_t ttl) { struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; @@ -606,7 +606,8 @@ cachedb_extcache_store(struct module_qstate* qstate, struct cachedb_env* ie) /* call backend */ (*ie->backend->store)(qstate->env, ie, key, sldns_buffer_begin(qstate->env->scratch_buffer), - sldns_buffer_limit(qstate->env->scratch_buffer)); + sldns_buffer_limit(qstate->env->scratch_buffer), + (uint64_t)qstate->return_msg->rep->ttl); } /** diff --git a/cachedb/cachedb.h b/cachedb/cachedb.h index 27187dc56..1bed80668 100644 --- a/cachedb/cachedb.h +++ b/cachedb/cachedb.h @@ -84,7 +84,7 @@ struct cachedb_backend { /** Store (env, cachedb_env, key, data, data_len) */ void (*store)(struct module_env*, struct cachedb_env*, char*, - uint8_t*, size_t); + uint8_t*, size_t, uint64_t); }; #define CACHEDB_HASHSIZE 256 /* bit hash */ diff --git a/cachedb/redis.c b/cachedb/redis.c index 3dfbf8f7a..fdc6716eb 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -249,16 +249,32 @@ redis_lookup(struct module_env* env, struct cachedb_env* cachedb_env, static void redis_store(struct module_env* env, struct cachedb_env* cachedb_env, - char* key, uint8_t* data, size_t data_len) + char* key, uint8_t* data, size_t data_len, uint64_t ttl) { redisReply* rep; - char cmdbuf[4+(CACHEDB_HASHSIZE/8)*2+3+1]; /* "SET " + key + " %b" */ int n; + int size; - verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); + if (env->cfg->serve_expired) { + size = 4+(CACHEDB_HASHSIZE/8)*2+3+1; + } + else { + size = 4+(CACHEDB_HASHSIZE/8)*2+3+4+sizeof(uint64_t)+1; + } + + char cmdbuf[size]; /* "SET " + key + " %b EX " + ttl */ + + if (env->cfg->serve_expired) { + verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); + /* build command to set to a binary safe string */ + n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b EX %d", key, ttl); + } + else { + verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %d", key, (int)data_len, ttl); + /* build command to set to a binary safe string */ + n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b EX %d", key, ttl); + } - /* build command to set to a binary safe string */ - n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); if(n < 0 || n >= (int)sizeof(cmdbuf)) { log_err("redis_store: unexpected failure to build command"); return; From fa0623a9b5fb6c36f3dd87356c811af0b2445df8 Mon Sep 17 00:00:00 2001 From: Talkabout Date: Sun, 29 Mar 2020 23:53:01 +0200 Subject: [PATCH 189/235] honor 'server_expired_ttl' in redis --- cachedb/redis.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cachedb/redis.c b/cachedb/redis.c index fdc6716eb..db4b8f2c3 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -47,6 +47,7 @@ #include "util/alloc.h" #include "util/config_file.h" #include "sldns/sbuffer.h" +#include #ifdef USE_REDIS #include "hiredis/hiredis.h" @@ -254,8 +255,13 @@ redis_store(struct module_env* env, struct cachedb_env* cachedb_env, redisReply* rep; int n; int size; + bool set_ttl = !env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0; - if (env->cfg->serve_expired) { + if (env->cfg->serve_expired_ttl > 0) { + ttl += env->cfg->serve_expired_ttl; + } + + if (!set_ttl) { size = 4+(CACHEDB_HASHSIZE/8)*2+3+1; } else { @@ -264,10 +270,10 @@ redis_store(struct module_env* env, struct cachedb_env* cachedb_env, char cmdbuf[size]; /* "SET " + key + " %b EX " + ttl */ - if (env->cfg->serve_expired) { + if (!set_ttl) { verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); /* build command to set to a binary safe string */ - n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b EX %d", key, ttl); + n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); } else { verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %d", key, (int)data_len, ttl); From d8dcee4c71600a8c4aa0a838192376070cb09aec Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 30 Mar 2020 10:07:25 +0200 Subject: [PATCH 190/235] Clarify if-automatic listens on 0.0.0.0 and :: --- doc/unbound.conf.5.in | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index b3a96df93..7083e4c84 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -126,9 +126,12 @@ interface and port number), if not specified the default port (from Same as interface: (for ease of compatibility with nsd.conf). .TP .B interface\-automatic: \fI -Detect source interface on UDP queries and copy them to replies. This -feature is experimental, and needs support in your OS for particular socket -options. Default value is no. +Listen on all addresses on all (current and future) interfaces, detect the +source interface on UDP queries and copy them to replies. This is a lot like +ip-transparent, but this option services all interfaces whilst with +ip-transparent you can select which (future) interfaces unbound provides +service on. This feature is experimental, and needs support in your OS for +particular socket options. Default value is no. .TP .B outgoing\-interface: \fI Interface to use to connect to the network. This interface is used to send From e9e2871f18c518a6c605e64031417bc86afa1e8d Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 30 Mar 2020 10:27:44 +0200 Subject: [PATCH 191/235] - Merge PR #207: Clarify if-automatic listens on 0.0.0.0 and :: --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 0a24a42c4..a3a57f16d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +30 March 2020: Wouter + - Merge PR #207: Clarify if-automatic listens on 0.0.0.0 and :: + 27 March 2020: Wouter - Merge PR #203 from noloader: Update README-Travis.md with current procedures. From 65e7be5190c77627e52d239fac13d0acf07ad8d2 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 30 Mar 2020 10:29:15 +0200 Subject: [PATCH 192/235] nroff fix for dash. --- doc/unbound.conf.5.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 7083e4c84..cd219c79a 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -128,8 +128,8 @@ Same as interface: (for ease of compatibility with nsd.conf). .B interface\-automatic: \fI Listen on all addresses on all (current and future) interfaces, detect the source interface on UDP queries and copy them to replies. This is a lot like -ip-transparent, but this option services all interfaces whilst with -ip-transparent you can select which (future) interfaces unbound provides +ip\-transparent, but this option services all interfaces whilst with +ip\-transparent you can select which (future) interfaces unbound provides service on. This feature is experimental, and needs support in your OS for particular socket options. Default value is no. .TP From 9d9eee84025d0ee6c75cf0da46d063187ae8213f Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 30 Mar 2020 11:39:07 +0200 Subject: [PATCH 193/235] Fix uncached CLIENT_RESPONSE'es on stateful transports Because repinfo->c->buffer does not contain the response when the it did not came from cache. Only after tcp_req_info_send_reply is called, is the response on the buffer which is used to fill the dnstap protobuf's. --- util/netevent.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/util/netevent.c b/util/netevent.c index 090238384..e90987549 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -3153,18 +3153,18 @@ comm_point_send_reply(struct comm_reply *repinfo) &repinfo->addr, repinfo->c->type, repinfo->c->buffer); #endif } else { -#ifdef USE_DNSTAP - if(repinfo->c->tcp_parent->dtenv != NULL && - repinfo->c->tcp_parent->dtenv->log_client_response_messages) - dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, - &repinfo->addr, repinfo->c->type, repinfo->c->buffer); -#endif if(repinfo->c->tcp_req_info) { tcp_req_info_send_reply(repinfo->c->tcp_req_info); } else { comm_point_start_listening(repinfo->c, -1, repinfo->c->tcp_timeout_msec); } +#ifdef USE_DNSTAP + if(repinfo->c->tcp_parent->dtenv != NULL && + repinfo->c->tcp_parent->dtenv->log_client_response_messages) + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, + &repinfo->addr, repinfo->c->type, repinfo->c->buffer); +#endif } } From af0bd5b0b48ec753bcd1809acdfbdfc53cb7d04f Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 30 Mar 2020 12:19:17 +0200 Subject: [PATCH 194/235] Send tcp_req_info->spool_buffer as dnstap CLIENT_RESPONSE When tcp_req_info exists. This fixes that dnstap CLIENT_RESPONSE messages did not contain the response message when answering on statful transport for uncached responses. --- util/netevent.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/util/netevent.c b/util/netevent.c index e90987549..f7bb9b897 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -3153,18 +3153,21 @@ comm_point_send_reply(struct comm_reply *repinfo) &repinfo->addr, repinfo->c->type, repinfo->c->buffer); #endif } else { +#ifdef USE_DNSTAP + if(repinfo->c->tcp_parent->dtenv != NULL && + repinfo->c->tcp_parent->dtenv->log_client_response_messages) + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, + &repinfo->addr, repinfo->c->type, + ( repinfo->c->tcp_req_info + ? repinfo->c->tcp_req_info->spool_buffer + : repinfo->c->buffer )); +#endif if(repinfo->c->tcp_req_info) { tcp_req_info_send_reply(repinfo->c->tcp_req_info); } else { comm_point_start_listening(repinfo->c, -1, repinfo->c->tcp_timeout_msec); } -#ifdef USE_DNSTAP - if(repinfo->c->tcp_parent->dtenv != NULL && - repinfo->c->tcp_parent->dtenv->log_client_response_messages) - dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, - &repinfo->addr, repinfo->c->type, repinfo->c->buffer); -#endif } } From 94e92b197a38429cd0fbb5e5a9aa65c65d9563d4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 30 Mar 2020 14:55:00 +0200 Subject: [PATCH 195/235] - Merge PR #208: Fix uncached CLIENT_RESPONSE'es on stateful transports. --- doc/Changelog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index a3a57f16d..e05e7b382 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 30 March 2020: Wouter - Merge PR #207: Clarify if-automatic listens on 0.0.0.0 and :: + - Merge PR #208: Fix uncached CLIENT_RESPONSE'es on stateful + transports. 27 March 2020: Wouter - Merge PR #203 from noloader: Update README-Travis.md with current From b130a8b45931fcb3ee897dcec6c34461737d501a Mon Sep 17 00:00:00 2001 From: Talkabout Date: Tue, 31 Mar 2020 12:47:13 +0200 Subject: [PATCH 196/235] added option 'redis-set-ttl' to define whether ttl should be added to redis records added check for redis command 'setex' when initializing redis connection updated documentation minor improvements to previous changes --- cachedb/cachedb.c | 4 +- cachedb/cachedb.h | 2 +- cachedb/redis.c | 49 +- doc/unbound.conf.5.in | 7 + util/config_file.c | 2 + util/config_file.h | 2 + util/configlexer.c | 3432 +++++++++++++++++++++-------------------- util/configlexer.lex | 1 + util/configparser.c | 2112 ++++++++++++------------- util/configparser.h | 151 +- util/configparser.y | 17 +- 11 files changed, 2923 insertions(+), 2856 deletions(-) diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index 8d2220a86..eed4d5fd9 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -160,7 +160,7 @@ testframe_lookup(struct module_env* env, struct cachedb_env* cachedb_env, static void testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, - char* key, uint8_t* data, size_t data_len, uint64_t ttl) + char* key, uint8_t* data, size_t data_len, time_t ATTR_UNUSED(ttl)) { struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; @@ -607,7 +607,7 @@ cachedb_extcache_store(struct module_qstate* qstate, struct cachedb_env* ie) (*ie->backend->store)(qstate->env, ie, key, sldns_buffer_begin(qstate->env->scratch_buffer), sldns_buffer_limit(qstate->env->scratch_buffer), - (uint64_t)qstate->return_msg->rep->ttl); + qstate->return_msg->rep->ttl); } /** diff --git a/cachedb/cachedb.h b/cachedb/cachedb.h index 1bed80668..05c4368e6 100644 --- a/cachedb/cachedb.h +++ b/cachedb/cachedb.h @@ -84,7 +84,7 @@ struct cachedb_backend { /** Store (env, cachedb_env, key, data, data_len) */ void (*store)(struct module_env*, struct cachedb_env*, char*, - uint8_t*, size_t, uint64_t); + uint8_t*, size_t, time_t); }; #define CACHEDB_HASHSIZE 256 /* bit hash */ diff --git a/cachedb/redis.c b/cachedb/redis.c index db4b8f2c3..f84d4286f 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -47,7 +47,6 @@ #include "util/alloc.h" #include "util/config_file.h" #include "sldns/sbuffer.h" -#include #ifdef USE_REDIS #include "hiredis/hiredis.h" @@ -60,6 +59,9 @@ struct redis_moddata { struct timeval timeout; /* timeout for connection setup and commands */ }; +static redisReply* redis_command(struct module_env*, struct cachedb_env*, + const char*, const uint8_t*, size_t); + static redisContext* redis_connect(const struct redis_moddata* moddata) { @@ -91,6 +93,7 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) { int i; struct redis_moddata* moddata = NULL; + redisReply* rep; verbose(VERB_ALGO, "redis_init"); @@ -115,6 +118,24 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) for(i = 0; i < moddata->numctxs; i++) moddata->ctxs[i] = redis_connect(moddata); cachedb_env->backend_data = moddata; + + if (env->cfg->redis_set_ttl) { + /** check if setex command is supported */ + rep = redis_command(env, cachedb_env, "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0); + if(!rep) + /** init failed, no response from redis server*/ + log_err("redis_init: failed to init redis, could not connect to server"); + return 0; + switch (rep->type) { + case REDIS_REPLY_ERROR: + /** init failed, setex command not supported */ + log_err("redis_init: failed to init redis, setex command not supported?"); + return 0; + default: + break; + } + } + return 1; } @@ -250,25 +271,12 @@ redis_lookup(struct module_env* env, struct cachedb_env* cachedb_env, static void redis_store(struct module_env* env, struct cachedb_env* cachedb_env, - char* key, uint8_t* data, size_t data_len, uint64_t ttl) + char* key, uint8_t* data, size_t data_len, time_t ttl) { redisReply* rep; int n; - int size; - bool set_ttl = !env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0; - - if (env->cfg->serve_expired_ttl > 0) { - ttl += env->cfg->serve_expired_ttl; - } - - if (!set_ttl) { - size = 4+(CACHEDB_HASHSIZE/8)*2+3+1; - } - else { - size = 4+(CACHEDB_HASHSIZE/8)*2+3+4+sizeof(uint64_t)+1; - } - - char cmdbuf[size]; /* "SET " + key + " %b EX " + ttl */ + int set_ttl = (int)(env->cfg->redis_set_ttl && (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); + char cmdbuf[4+(CACHEDB_HASHSIZE/8)*2+3+((2+11)*set_ttl)+1]; /* "SETEX " + key + " " + ttl + " %b" */ if (!set_ttl) { verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); @@ -276,11 +284,14 @@ redis_store(struct module_env* env, struct cachedb_env* cachedb_env, n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); } else { - verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %d", key, (int)data_len, ttl); + /* add expired ttl time to redis ttl to avoid premature eviction of key */ + ttl += env->cfg->serve_expired_ttl; + verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u", key, (int)data_len, (uint32_t)ttl); /* build command to set to a binary safe string */ - n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b EX %d", key, ttl); + n = snprintf(cmdbuf, sizeof(cmdbuf), "SETEX %s %u %%b", key, (uint32_t)ttl); } + if(n < 0 || n >= (int)sizeof(cmdbuf)) { log_err("redis_store: unexpected failure to build command"); return; diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index b3a96df93..2feed3e6b 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2127,6 +2127,13 @@ If this timeout expires Unbound closes the connection, treats it as if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. +.TP +.B redis-set-ttl: \fI +If redis ttl is enabled. If yes, unbound sets ttl for redis records so +that redis can evict keys that have expired automatically. If unbound +is configured to serve expired entries and there is no expired ttl set, +this option is internally reverted to "no". +This option defaults to no. .SS DNSTAP Logging Options DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. This starts an extra thread (when compiled with threading) that writes diff --git a/util/config_file.c b/util/config_file.c index 767d76b29..9329ba92a 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -337,6 +337,7 @@ config_create(void) if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit; cfg->redis_timeout = 100; cfg->redis_server_port = 6379; + cfg->redis_set_ttl = 0; #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET @@ -1135,6 +1136,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "redis-server-host", redis_server_host) else O_DEC(opt, "redis-server-port", redis_server_port) else O_DEC(opt, "redis-timeout", redis_timeout) + else O_YNO(opt, "redis-set-ttl", redis_set_ttl) #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET diff --git a/util/config_file.h b/util/config_file.h index 49c9610ce..027a9345f 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -598,6 +598,8 @@ struct config_file { int redis_server_port; /** timeout (in ms) for communication with the redis server */ int redis_timeout; + /** set redis ttl value based on dns response ttl */ + int redis_set_ttl; #endif #endif diff --git a/util/configlexer.c b/util/configlexer.c index 194569a64..0f3a003bd 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 310 -#define YY_END_OF_BUFFER 311 +#define YY_NUM_RULES 311 +#define YY_END_OF_BUFFER 312 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,343 +363,344 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3049] = +static const flex_int16_t yy_accept[3055] = { 0, - 1, 1, 292, 292, 296, 296, 300, 300, 304, 304, - 1, 1, 311, 308, 1, 290, 290, 309, 2, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 292, 293, 293, 294, 309, 296, 297, 297, - 298, 309, 303, 300, 301, 301, 302, 309, 304, 305, - 305, 306, 309, 307, 291, 2, 295, 309, 307, 308, - 0, 1, 2, 2, 2, 2, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 1, 1, 293, 293, 297, 297, 301, 301, 305, 305, + 1, 1, 312, 309, 1, 291, 291, 310, 2, 310, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 293, 294, 294, 295, 310, 297, 298, 298, + 299, 310, 304, 301, 302, 302, 303, 310, 305, 306, + 306, 307, 310, 308, 292, 2, 296, 310, 308, 309, + 0, 1, 2, 2, 2, 2, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 292, 0, 296, 0, 303, 0, 300, 304, 0, 307, - 0, 2, 2, 307, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 293, 0, 297, 0, 304, 0, 301, 305, 0, 308, + 0, 2, 2, 308, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 307, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 308, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 114, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 122, 308, 308, 308, - 308, 308, 308, 308, 307, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 114, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 122, 309, 309, 309, + 309, 309, 309, 309, 308, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 98, 308, 308, 308, 308, 308, 308, 8, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 115, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 127, 308, 307, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 98, 309, 309, 309, 309, 309, 309, 8, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 115, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 127, 309, 308, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 285, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 286, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 307, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 56, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 224, 308, 14, 15, 308, 19, - 18, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 308, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 56, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 224, 309, 14, 15, 309, 19, + 18, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 121, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 208, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 3, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 121, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 208, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 3, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 307, 308, 308, - 308, 308, 308, 308, 308, 280, 308, 308, 279, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 299, 308, 308, 308, 308, 308, - 308, 308, 55, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 308, 309, 309, + 309, 309, 309, 309, 309, 280, 309, 309, 279, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 300, 309, 309, 309, 309, 309, + 309, 309, 55, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 59, - 308, 254, 308, 308, 308, 308, 308, 308, 308, 308, - 286, 287, 308, 308, 308, 308, 308, 60, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 118, 308, 308, 308, 308, 308, 308, - 308, 308, 197, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 21, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 59, + 309, 254, 309, 309, 309, 309, 309, 309, 309, 309, + 287, 288, 309, 309, 309, 309, 309, 60, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 118, 309, 309, 309, 309, 309, 309, + 309, 309, 197, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 21, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 146, 308, 308, 299, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 96, 308, 308, 308, 308, - 308, 308, 308, 262, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 169, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 145, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 146, 309, 309, 300, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 96, 309, 309, 309, 309, + 309, 309, 309, 262, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 169, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 145, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 95, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 32, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 33, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 57, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 120, 308, 308, 308, 308, 308, 113, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 95, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 32, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 33, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 57, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 120, 309, 309, 309, 309, 309, + 113, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 58, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 227, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 170, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 46, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 58, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 227, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 170, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 46, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 245, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 50, 308, 51, 308, 308, - 308, 308, 308, 99, 308, 100, 308, 308, 308, 308, - 97, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 7, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 217, 308, 308, - 308, 308, 148, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 245, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 50, 309, 51, + 309, 309, 309, 309, 309, 99, 309, 100, 309, 309, + 309, 309, 97, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 7, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 217, + 309, 309, 309, 309, 148, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 228, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 47, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 189, 308, - 188, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 16, 17, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 228, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 47, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 189, 309, 188, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 16, + 17, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 61, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 196, 308, 308, 308, 308, 308, 308, - 102, 308, 101, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 180, 308, 308, 308, 308, 308, 308, - 308, 308, 128, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 80, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 61, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 196, 309, 309, 309, + 309, 309, 309, 102, 309, 101, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 180, 309, 309, 309, + 309, 309, 309, 309, 309, 128, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 80, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 84, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 54, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 183, 184, 308, 308, - 308, 256, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 6, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 260, 308, 308, 308, 308, - 308, 308, 281, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 84, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 54, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 183, + 184, 309, 309, 309, 256, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 6, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 260, + 309, 309, 309, 309, 309, 309, 281, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 42, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 44, 308, 308, 308, - 308, 308, 308, 308, 308, 176, 308, 308, 308, 123, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 201, 308, 177, 308, 308, 308, 214, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 45, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 125, 107, 308, 108, - 308, 308, 308, 106, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 42, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 44, 309, 309, 309, 309, 309, 309, 309, 309, 176, + 309, 309, 309, 123, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 201, 309, 177, 309, 309, 309, + 214, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 45, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 125, 107, 309, 108, 309, 309, 309, 106, 309, 309, - 308, 308, 143, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 244, 308, 308, 308, 308, 308, - 308, 308, 308, 178, 308, 308, 308, 308, 308, 181, - 308, 187, 308, 308, 308, 308, 308, 213, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 94, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 119, 308, 308, 308, 308, 308, 308, 52, 308, 308, - 308, 26, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 20, 308, 308, 308, 308, 308, 308, 27, 36, + 309, 309, 309, 309, 309, 309, 143, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 244, 309, + 309, 309, 309, 309, 309, 309, 309, 178, 309, 309, + 309, 309, 309, 181, 309, 187, 309, 309, 309, 309, + 309, 213, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 94, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 119, 309, 309, 309, 309, + 309, 309, 52, 309, 309, 309, 26, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 20, 309, 309, 309, - 308, 153, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 69, 71, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 264, 308, 308, 308, - 225, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 109, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 142, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 275, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 27, 36, 309, 153, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 69, 71, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 264, 309, 309, 309, 225, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 109, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 142, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 275, 309, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 147, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 207, 308, 308, 308, 308, 308, 308, 308, 308, - 284, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 164, 308, 308, 308, 308, 308, 308, 308, - 308, 103, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 159, 308, 171, 308, 308, 308, 308, 308, 131, - 308, 308, 308, 308, 308, 90, 308, 308, 308, 308, - 199, 308, 308, 308, 308, 308, 308, 215, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 147, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 207, 309, 309, 309, + 309, 309, 309, 309, 309, 285, 284, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 164, 309, + 309, 309, 309, 309, 309, 309, 309, 103, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 159, 309, 171, + 309, 309, 309, 309, 309, 131, 309, 309, 309, 309, + 309, 90, 309, 309, 309, 309, 199, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 236, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 124, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 163, 308, 308, 308, 308, 308, - 72, 73, 308, 308, 308, 308, 308, 53, 308, 308, - 308, 308, 308, 79, 172, 308, 190, 308, 218, 308, - 308, 182, 257, 308, 308, 308, 308, 308, 65, 308, - 174, 308, 308, 308, 308, 308, 9, 308, 308, 308, - 93, 308, 308, 308, 308, 249, 308, 308, 308, 198, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 215, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 236, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 124, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 163, 309, 309, 309, 309, 309, 72, 73, 309, 309, + 309, 309, 309, 53, 309, 309, 309, 309, 309, 79, + 172, 309, 190, 309, 218, 309, 309, 182, 257, 309, + 309, 309, 309, 309, 65, 309, 174, 309, 309, 309, + 309, 309, 9, 309, 309, 309, 93, 309, 309, 309, + 309, 249, 309, 309, 309, 198, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 162, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 149, 308, 263, 308, 308, 308, 308, 235, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 209, - 308, 308, 308, 308, 255, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 278, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 162, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 149, 309, 263, 309, + 309, 309, 309, 235, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 209, 309, 309, 309, 309, + 255, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 173, 308, 308, 308, 308, 308, 308, 308, 64, - 66, 308, 308, 308, 308, 308, 308, 308, 92, 308, - 308, 308, 308, 247, 308, 308, 308, 259, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 203, - 34, 28, 30, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 35, 308, 29, 31, 308, 308, 308, 308, - 308, 308, 308, 308, 89, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 205, 202, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 278, 309, 173, 309, 309, + 309, 309, 309, 309, 309, 64, 66, 309, 309, 309, + 309, 309, 309, 309, 92, 309, 309, 309, 309, 247, + 309, 309, 309, 259, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 203, 34, 28, 30, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 35, 309, + 29, 31, 309, 309, 309, 309, 309, 309, 309, 309, + 89, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 205, 202, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 63, 308, 308, 126, 308, 110, 308, 308, 308, - 308, 308, 308, 308, 308, 144, 13, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 273, 308, 276, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 12, - 308, 308, 22, 308, 308, 308, 253, 308, 308, 308, - 261, 308, 308, 308, 67, 308, 211, 308, 308, 308, - 308, 204, 308, 308, 62, 308, 308, 308, 308, 23, - 308, 43, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 158, 157, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 206, 200, 308, 216, 308, + 309, 309, 309, 309, 309, 309, 309, 63, 309, 309, + 126, 309, 110, 309, 309, 309, 309, 309, 309, 309, + 309, 144, 13, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 273, 309, 276, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 12, 309, 309, 22, 309, + 309, 309, 253, 309, 309, 309, 261, 309, 309, 309, + 67, 309, 211, 309, 309, 309, 309, 204, 309, 309, + 62, 309, 309, 309, 309, 23, 309, 43, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 158, 157, 309, 309, 309, 309, 309, 309, 309, 309, - 308, 265, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 74, - 308, 308, 308, 248, 308, 308, 308, 308, 186, 308, - 308, 308, 308, 210, 308, 308, 308, 308, 308, 308, - 308, 308, 282, 283, 155, 308, 308, 68, 308, 308, - 308, 308, 165, 308, 308, 104, 105, 308, 308, 308, - 308, 150, 308, 152, 308, 191, 308, 308, 308, 308, - 156, 308, 308, 219, 308, 308, 308, 308, 308, 308, - 308, 133, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 206, 200, 309, 216, 309, 309, 265, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 74, 309, 309, 309, 248, + 309, 309, 309, 309, 186, 309, 309, 309, 309, 210, + 309, 309, 309, 309, 309, 309, 309, 309, 282, 283, + 155, 309, 309, 68, 309, 309, 309, 309, 165, 309, + 309, 104, 105, 309, 309, 309, 309, 150, 309, 152, + 309, 191, 309, 309, 309, 309, 156, 309, 309, 219, + 309, 309, 309, 309, 309, 309, 309, 133, 309, 309, - 308, 308, 308, 226, 308, 308, 308, 308, 308, 308, - 308, 24, 308, 258, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 192, 308, 308, 246, 308, - 277, 308, 185, 308, 308, 308, 308, 48, 308, 308, - 308, 308, 4, 308, 308, 308, 117, 132, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 222, 37, 38, 308, - 308, 308, 308, 308, 308, 308, 266, 308, 308, 308, - 308, 308, 308, 234, 308, 308, 308, 308, 308, 308, - 308, 195, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 226, + 309, 309, 309, 309, 309, 309, 309, 24, 309, 258, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 192, 309, 309, 246, 309, 277, 309, 185, 309, + 309, 309, 309, 48, 309, 309, 309, 309, 4, 309, + 309, 309, 117, 132, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 222, 37, 38, 309, 309, 309, 309, 309, + 309, 309, 266, 309, 309, 309, 309, 309, 309, 234, + 309, 309, 309, 309, 309, 309, 309, 195, 309, 309, - 308, 77, 308, 49, 252, 308, 223, 308, 308, 308, - 308, 11, 308, 308, 308, 308, 308, 116, 308, 308, - 308, 308, 193, 81, 308, 40, 308, 308, 308, 308, - 308, 308, 308, 308, 161, 308, 308, 308, 308, 308, - 135, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 233, 308, 308, 308, 308, 129, 308, 308, 111, 112, - 308, 308, 308, 83, 87, 82, 308, 75, 308, 308, - 308, 308, 308, 10, 308, 308, 308, 250, 308, 308, - 308, 308, 289, 39, 308, 308, 308, 308, 308, 160, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 309, 309, 309, 309, 309, 309, 77, 309, 49, + 252, 309, 223, 309, 309, 309, 309, 11, 309, 309, + 309, 309, 309, 116, 309, 309, 309, 309, 193, 81, + 309, 40, 309, 309, 309, 309, 309, 309, 309, 309, + 161, 309, 309, 309, 309, 309, 135, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 233, 309, 309, 309, + 309, 129, 309, 309, 111, 112, 309, 309, 309, 83, + 87, 82, 309, 75, 309, 309, 309, 309, 309, 10, + 309, 309, 309, 250, 309, 309, 309, 309, 290, 39, + 309, 309, 309, 309, 309, 160, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 88, 86, 308, 76, 274, 308, 308, 308, - 308, 308, 308, 308, 179, 308, 308, 308, 308, 308, - 194, 308, 308, 308, 308, 308, 308, 308, 308, 151, - 70, 308, 308, 308, 308, 308, 267, 308, 308, 308, - 308, 308, 308, 308, 230, 308, 308, 229, 130, 308, - 85, 136, 137, 140, 141, 138, 139, 78, 308, 251, - 308, 308, 308, 308, 154, 308, 308, 308, 308, 308, - 221, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 167, 166, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 88, 86, + 309, 76, 274, 309, 309, 309, 309, 309, 309, 309, + 179, 309, 309, 309, 309, 309, 194, 309, 309, 309, + 309, 309, 309, 309, 309, 151, 70, 309, 309, 309, + 309, 309, 267, 309, 309, 309, 309, 309, 309, 309, + 230, 309, 309, 229, 130, 309, 85, 136, 137, 140, + 141, 138, 139, 78, 309, 251, 309, 309, 309, 309, + 154, 309, 309, 309, 309, 309, 221, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 41, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 91, 308, 220, 308, 243, - 271, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 5, 308, 308, 212, 308, 308, 272, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 231, - 25, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 232, 308, 308, 308, 134, 308, 308, - 308, 308, 308, 308, 308, 308, 168, 308, 175, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 268, 308, + 309, 309, 309, 309, 167, 166, 41, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 91, 309, 220, 309, 243, 271, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 5, + 309, 309, 212, 309, 309, 272, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 231, 25, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 232, + 309, 309, 309, 134, 309, 309, 309, 309, 309, 309, + 309, 309, 168, 309, 175, 309, 309, 309, 309, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 288, 308, 308, 239, - 308, 308, 308, 308, 308, 269, 308, 308, 308, 308, - 308, 308, 270, 308, 308, 308, 237, 308, 240, 241, - 308, 308, 308, 308, 308, 238, 242, 0 + 309, 309, 309, 309, 268, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 289, 309, 309, 239, 309, 309, 309, 309, + 309, 269, 309, 309, 309, 309, 309, 309, 270, 309, + 309, 309, 237, 309, 240, 241, 309, 309, 309, 309, + 309, 238, 242, 0 } ; static const YY_CHAR yy_ec[256] = @@ -742,15 +743,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3063] = +static const flex_int16_t yy_base[3069] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2327, 1999, 81, 5940, 5940, 5940, 96, 52, + 90, 112, 2179, 1999, 81, 5955, 5955, 5955, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1735, 5940, 5940, 5940, 107, 1527, 5940, 5940, - 5940, 165, 1302, 1259, 5940, 5940, 5940, 211, 1131, 5940, - 5940, 5940, 180, 948, 5940, 217, 5940, 221, 168, 767, + 189, 152, 1735, 5955, 5955, 5955, 107, 1527, 5955, 5955, + 5955, 165, 1302, 1259, 5955, 5955, 5955, 211, 1131, 5955, + 5955, 5955, 180, 948, 5955, 217, 5955, 221, 168, 767, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -779,9 +780,9 @@ static const flex_int16_t yy_base[3063] = 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 5940, 760, 773, 771, 774, + 756, 757, 761, 768, 769, 5955, 760, 773, 771, 774, 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 5940, 815, 807, 849, + 825, 791, 801, 804, 814, 795, 5955, 815, 807, 849, 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, @@ -791,20 +792,20 @@ static const flex_int16_t yy_base[3063] = 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 5940, 1007, 1009, 1011, 1012, 1013, 1010, 5940, 1014, 1015, + 5955, 1007, 1009, 1011, 1012, 1013, 1010, 5955, 1014, 1015, 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 5940, 1071, 1077, 1080, + 1061, 1064, 1065, 1068, 1070, 1088, 5955, 1071, 1077, 1080, 1079, 1085, 1082, 1090, 1097, 1100, 1093, 1106, 1116, 1103, 1117, 1111, 1113, 1072, 1118, 1122, 1124, 1125, 1126, 1127, - 1128, 1130, 1129, 1132, 1140, 1136, 5940, 1144, 1145, 1154, + 1128, 1130, 1129, 1132, 1140, 1136, 5955, 1144, 1145, 1154, 1147, 1152, 1156, 1157, 1158, 1160, 1161, 1163, 1162, 1166, 1169, 1183, 1170, 1185, 1172, 1186, 1180, 1181, 1187, 1188, 1190, 1195, 1203, 1200, 1205, 1208, 1216, 1215, 1218, 1225, 1201, 1220, 1193, 1212, 1221, 1224, 1228, 1226, 1232, 1230, 1241, 1236, 1237, 1238, 1239, 1248, 1245, 1244, 1253, 1246, - 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5940, 1280, 1269, + 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5955, 1280, 1269, 1276, 1277, 1282, 1283, 1284, 1285, 1288, 813, 1291, 1290, 1292, 1294, 1296, 1297, 1298, 1299, 1307, 1315, 1311, 1310, 1323, 1322, 1324, 1300, 1326, 1333, 1330, 1334, 1336, 1332, @@ -816,615 +817,615 @@ static const flex_int16_t yy_base[3063] = 1420, 1418, 1421, 1425, 1426, 1427, 1428, 1429, 1434, 1431, 1440, 1433, 1448, 1439, 1441, 1449, 1452, 1456, 1457, 1458, 1465, 1454, 1466, 1467, 1468, 1469, 1471, 1474, 1477, 1481, - 1475, 1484, 1486, 1488, 1487, 1491, 1494, 1497, 1498, 5940, + 1475, 1484, 1486, 1488, 1487, 1491, 1494, 1497, 1498, 5955, 1492, 1505, 1500, 1506, 1504, 1509, 1512, 1519, 1514, 1517, - 1515, 1518, 1521, 1544, 5940, 1523, 5940, 5940, 1525, 5940, - 5940, 1526, 1531, 1529, 1528, 1539, 1546, 1548, 1536, 1551, + 1515, 1518, 1521, 1544, 5955, 1523, 5955, 5955, 1525, 5955, + 5955, 1526, 1531, 1529, 1528, 1539, 1546, 1548, 1536, 1551, 1550, 1558, 1571, 1555, 1561, 1562, 1567, 1574, 1569, 1579, 1584, 1576, 1587, 1593, 1594, 1595, 1602, 1603, 1596, 1599, 1606, 1604, 1607, 1609, 1611, 1613, 1615, 1619, 1614, 1621, - 1616, 1631, 1622, 1635, 1642, 5940, 1639, 1643, 1646, 1645, + 1616, 1631, 1622, 1635, 1642, 5955, 1639, 1643, 1646, 1645, 1653, 1648, 1649, 1652, 1657, 1659, 1654, 1661, 1663, 1623, - 1664, 1666, 1667, 1669, 1678, 1670, 5940, 1671, 1673, 1681, + 1664, 1666, 1667, 1669, 1678, 1670, 5955, 1671, 1673, 1681, 1675, 1685, 1687, 1690, 1674, 1691, 1693, 1702, 1694, 1697, - 1698, 1705, 1557, 1707, 5940, 1709, 1716, 1703, 1708, 1719, + 1698, 1705, 1557, 1707, 5955, 1709, 1716, 1703, 1708, 1719, 1721, 1722, 1723, 1726, 1720, 1725, 1727, 1732, 1728, 1736, 1734, 1737, 1733, 1739, 1738, 1751, 1754, 1756, 1757, 1758, 1760, 1761, 1762, 1763, 1764, 1766, 1774, 1770, 1778, 1771, 1779, 1781, 1788, 1776, 1787, 1789, 1790, 1796, 1804, 1800, 1801, 1793, 1808, 1805, 1810, 1812, 1813, 1815, 1816, 1817, - 1822, 1820, 1824, 1827, 1826, 5940, 1828, 1829, 5940, 1833, + 1822, 1820, 1824, 1827, 1826, 5955, 1828, 1829, 5955, 1833, 1834, 1856, 1835, 1837, 1839, 1847, 1838, 1858, 1849, 1857, 1868, 1860, 1876, 1866, 1878, 1869, 1881, 1879, 1883, 1885, 1887, 1889, 1892, 1901, 1906, 1851, 1902, 1910, 1890, 1905, 1893, 1925, 1907, 1909, 1913, 1916, 1917, 1915, 1840, 1921, - 1922, 1923, 1930, 1932, 5940, 1940, 1943, 1937, 1947, 1954, - 1950, 1938, 5940, 1949, 1952, 1953, 1965, 1962, 1963, 1967, + 1922, 1923, 1930, 1932, 5955, 1940, 1943, 1937, 1947, 1954, + 1950, 1938, 5955, 1949, 1952, 1953, 1965, 1962, 1963, 1967, - 1964, 1966, 1968, 1973, 1970, 1974, 1975, 1976, 1992, 5940, - 1978, 5940, 1977, 1987, 1989, 1990, 1995, 1996, 1997, 1998, - 5940, 5940, 2000, 2001, 2014, 2012, 2009, 5940, 2016, 2024, + 1964, 1966, 1968, 1973, 1970, 1974, 1975, 1976, 1992, 5955, + 1978, 5955, 1977, 1987, 1989, 1990, 1995, 1996, 1997, 1998, + 5955, 5955, 2000, 2001, 2014, 2012, 2009, 5955, 2016, 2024, 2025, 2017, 2019, 2021, 2027, 2030, 2031, 2034, 2035, 2042, - 2037, 2039, 2040, 5940, 2047, 2038, 2048, 2051, 2049, 2057, - 2058, 2060, 5940, 2061, 2064, 2068, 2075, 2071, 2073, 2066, - 2076, 2077, 2081, 2083, 2085, 2086, 2087, 2094, 2096, 2092, - 2093, 2101, 2109, 5940, 2095, 2091, 2110, 2107, 2115, 2108, - 2116, 2118, 2119, 2120, 2121, 2124, 2126, 2127, 2134, 2135, - 2130, 2139, 2141, 2131, 2133, 2137, 2152, 2143, 2151, 2153, + 2037, 2039, 2040, 5955, 2048, 2038, 2053, 2056, 2049, 2057, + 2063, 2060, 5955, 2064, 2050, 2067, 2075, 2077, 2071, 2074, + 2078, 2082, 2079, 2084, 2085, 2086, 2087, 2094, 2096, 2093, + 2099, 2101, 2108, 5955, 2091, 2095, 2113, 2111, 2118, 2110, + 2112, 2114, 2120, 2122, 2124, 2126, 2127, 2128, 2136, 2137, + 2133, 2129, 2141, 2138, 2142, 2143, 2149, 2146, 2150, 2151, - 2154, 5940, 2155, 2157, 124, 2159, 2162, 2158, 2163, 2166, - 2165, 2167, 2182, 2184, 2180, 2169, 2181, 2183, 2188, 2189, - 2190, 2191, 2192, 2193, 2195, 5940, 2201, 2198, 2203, 2196, - 2207, 2204, 2215, 5940, 2216, 2218, 2226, 2228, 2219, 2206, - 2222, 2227, 2230, 2232, 2236, 2238, 2240, 2242, 5940, 2247, - 2244, 2248, 2250, 2252, 2254, 2256, 2259, 2260, 2262, 2264, - 2263, 2266, 2267, 2268, 2269, 2271, 2277, 2280, 2272, 2282, - 2284, 5940, 2291, 2286, 2288, 2294, 2298, 2297, 2305, 2301, - 2307, 2306, 2310, 2322, 2312, 2308, 2324, 2315, 2323, 2329, - 2332, 2334, 2337, 2343, 2333, 2346, 2348, 2336, 2340, 2350, + 2152, 5955, 2153, 2161, 124, 2154, 2158, 2162, 2166, 2167, + 2179, 2163, 2175, 2186, 2182, 2188, 2184, 2181, 2185, 2191, + 2192, 2193, 2194, 2198, 2197, 5955, 2203, 2200, 2204, 2205, + 2209, 2206, 2218, 5955, 2210, 2219, 2228, 2229, 2217, 2230, + 2221, 2225, 2235, 2241, 2238, 2242, 2239, 2245, 5955, 2249, + 2251, 2253, 2252, 2254, 2261, 2260, 2255, 2262, 2263, 2266, + 2268, 2267, 2273, 2271, 2275, 2276, 2280, 2284, 2281, 2287, + 2279, 5955, 2295, 2291, 2292, 2293, 2297, 2298, 2309, 2304, + 2306, 2311, 2314, 2325, 2316, 2312, 2328, 2317, 2326, 2327, + 2341, 2332, 2340, 2342, 2339, 2346, 2349, 2350, 2351, 2353, - 2349, 2352, 2360, 2355, 2367, 2368, 2365, 2371, 2363, 2384, - 2389, 2380, 5940, 2378, 2388, 2376, 2390, 2398, 2393, 2395, - 2396, 2402, 2401, 2404, 2405, 2412, 2407, 2409, 2413, 2416, - 2414, 2422, 2418, 2424, 2425, 2433, 2426, 2435, 2364, 5940, - 2437, 2438, 2429, 2442, 2445, 2439, 2447, 2452, 2450, 2454, - 2456, 2458, 2460, 2461, 2462, 2463, 2465, 2467, 2466, 5940, - 2470, 2471, 2476, 2478, 2479, 2485, 2488, 2491, 2489, 2495, - 2496, 2497, 2498, 5940, 2505, 2506, 2503, 2507, 2509, 2510, - 2512, 2515, 2516, 5940, 2517, 2519, 2526, 2527, 2522, 5940, - 2530, 2525, 2531, 2532, 2533, 2534, 2540, 2535, 2538, 2543, + 2355, 2356, 2357, 2358, 2365, 2372, 2363, 2373, 2374, 2378, + 2384, 2380, 5955, 2385, 2386, 2387, 2393, 2404, 2395, 2406, + 2407, 2396, 2399, 2397, 2409, 2411, 2419, 2414, 2418, 2420, + 2422, 2421, 2423, 2424, 2429, 2431, 2438, 2430, 2440, 2441, + 5955, 2364, 2444, 2433, 2446, 2448, 2450, 2457, 2458, 2460, + 2451, 2453, 2462, 2463, 2464, 2466, 2468, 2469, 2475, 2471, + 5955, 2476, 2480, 2482, 2485, 2484, 2488, 2491, 2497, 2494, + 2500, 2501, 2502, 2503, 5955, 2510, 2511, 2508, 2512, 2514, + 2515, 2517, 2520, 2521, 5955, 2522, 2524, 2531, 2532, 2527, + 5955, 2535, 2530, 2536, 2537, 2538, 2539, 2545, 2540, 2543, - 2548, 2550, 2546, 2554, 5940, 2556, 2566, 2558, 2562, 2564, - 2567, 2568, 2570, 2574, 2578, 2573, 5940, 2590, 2589, 2586, - 2600, 2577, 2591, 2592, 2598, 2595, 2601, 2602, 5940, 2604, - 2605, 2607, 2608, 2611, 2612, 2614, 2626, 2616, 2619, 2621, - 2624, 2627, 2629, 2631, 2634, 2632, 2640, 2643, 2644, 2646, - 2647, 2649, 2650, 2657, 2660, 2662, 2664, 5940, 2667, 2668, - 2669, 2656, 2659, 2671, 2675, 2676, 2679, 2680, 2684, 2681, - 2683, 2691, 2693, 2694, 2696, 2698, 2700, 2701, 2703, 2704, - 2705, 2706, 2713, 2711, 2709, 2718, 2715, 2720, 2727, 2722, - 2728, 2729, 2730, 2731, 2732, 2736, 2737, 2739, 2740, 2744, + 2548, 2553, 2555, 2551, 2559, 5955, 2561, 2571, 2563, 2567, + 2569, 2572, 2573, 2575, 2579, 2583, 2578, 5955, 2595, 2594, + 2591, 2605, 2582, 2596, 2597, 2603, 2600, 2606, 2607, 5955, + 2609, 2610, 2612, 2613, 2616, 2617, 2619, 2631, 2621, 2624, + 2626, 2629, 2632, 2634, 2636, 2639, 2637, 2645, 2648, 2649, + 2651, 2652, 2654, 2655, 2662, 2665, 2667, 2669, 5955, 2672, + 2673, 2674, 2661, 2664, 2676, 2680, 2681, 2684, 2685, 2689, + 2686, 2688, 2696, 2698, 2699, 2701, 2703, 2705, 2706, 2708, + 2709, 2710, 2711, 2718, 2716, 2714, 2723, 2720, 2725, 2732, + 2727, 2733, 2734, 2735, 2736, 2737, 2741, 2742, 2744, 2745, - 2755, 2756, 2746, 2757, 2758, 2759, 2760, 5940, 2763, 2765, - 2764, 2769, 2774, 2771, 2781, 2777, 2778, 2782, 2786, 2789, - 2783, 2788, 2794, 2801, 2797, 5940, 2798, 5940, 2799, 2800, - 2807, 2810, 2802, 5940, 2812, 5940, 2815, 2824, 2809, 2813, - 5940, 2827, 2817, 2819, 2831, 2821, 2826, 2833, 2834, 2835, - 2840, 2838, 2842, 2843, 2844, 2846, 2848, 2850, 2854, 2859, - 2861, 2851, 2862, 2853, 2867, 2870, 2864, 2872, 5940, 2880, - 2873, 2876, 2881, 2882, 2884, 2885, 2887, 2888, 2893, 2889, - 2894, 2895, 2902, 2905, 2903, 2906, 2917, 5940, 2907, 2919, - 2912, 2914, 5940, 2922, 2916, 2923, 2928, 2925, 2930, 2932, + 2749, 2760, 2761, 2751, 2762, 2763, 2764, 2765, 5955, 2768, + 2769, 2770, 2774, 2776, 2779, 2781, 2788, 2780, 2783, 2793, + 2787, 2797, 2790, 2799, 2800, 2808, 2804, 5955, 2805, 5955, + 2806, 2807, 2813, 2815, 2811, 5955, 2819, 5955, 2821, 2826, + 2816, 2822, 5955, 2830, 2828, 2834, 2835, 2829, 2837, 2840, + 2841, 2839, 2849, 2842, 2847, 2845, 2851, 2854, 2855, 2856, + 2857, 2864, 2865, 2866, 2874, 2867, 2871, 2876, 2877, 2878, + 5955, 2885, 2879, 2881, 2887, 2888, 2890, 2891, 2893, 2894, + 2899, 2900, 2903, 2901, 2910, 2911, 2923, 2904, 2926, 5955, + 2913, 2929, 2918, 2925, 5955, 2930, 2922, 2932, 2938, 2934, - 2933, 2934, 2937, 2938, 2950, 2951, 2941, 2952, 5940, 2954, - 2957, 2942, 2961, 2965, 2969, 2943, 2972, 2966, 2970, 2976, - 2977, 2978, 2979, 2980, 2987, 2988, 2985, 2992, 2984, 2991, - 2994, 2998, 3000, 3001, 3002, 3005, 3006, 3004, 3010, 3014, - 3009, 3011, 3012, 3013, 5940, 3025, 3015, 3027, 3036, 3028, - 3030, 3017, 3033, 3038, 3039, 3042, 3046, 3040, 5940, 3045, - 5940, 3048, 3050, 3062, 3064, 3057, 3052, 3068, 3067, 3059, - 3074, 3075, 3076, 3077, 3078, 3079, 3082, 3083, 3089, 3090, - 3086, 3087, 3091, 3097, 3099, 3100, 3102, 5940, 5940, 3103, - 3105, 3108, 3106, 3110, 3112, 3120, 3118, 3111, 3124, 3125, + 2936, 2940, 2941, 2942, 2945, 2947, 2950, 2958, 2959, 2960, + 5955, 2961, 2966, 2949, 2962, 2975, 2972, 2980, 2982, 2984, + 2985, 2973, 2976, 2987, 2988, 2989, 2997, 2999, 2995, 3002, + 2998, 3004, 3011, 3007, 3001, 3003, 3005, 3013, 3014, 3017, + 3018, 3022, 3015, 3020, 3024, 3026, 5955, 3033, 3030, 3034, + 3036, 3041, 3043, 3042, 3044, 3045, 3046, 3048, 3051, 3049, + 5955, 3052, 5955, 3053, 3068, 3059, 3070, 3064, 3073, 3074, + 3080, 3075, 3081, 3082, 3084, 3083, 3085, 3086, 3090, 3094, + 3096, 3098, 3108, 3093, 3097, 3099, 3104, 3111, 3112, 5955, + 5955, 3114, 3115, 3119, 3116, 3121, 3123, 3125, 3122, 3129, - 3132, 5940, 3133, 3134, 3136, 3137, 3144, 3139, 3141, 3152, - 3148, 3156, 3154, 5940, 3151, 3155, 3165, 3161, 3163, 3168, - 5940, 3167, 5940, 3164, 3170, 3173, 3176, 3177, 3178, 3179, - 3180, 3187, 3188, 3198, 3184, 3195, 3196, 3199, 3200, 3207, - 3202, 3203, 3204, 5940, 3206, 3209, 3212, 3220, 3221, 3223, - 3227, 3210, 5940, 3217, 3231, 3234, 3235, 3237, 3239, 3240, - 3241, 3243, 3245, 3242, 3244, 3252, 3250, 3249, 3259, 3269, - 3260, 3271, 5940, 3272, 3266, 3279, 3281, 3274, 3276, 3282, - 3283, 3284, 3287, 3289, 3288, 3290, 3292, 3294, 3291, 3301, - 3295, 3308, 3297, 3311, 3317, 3318, 3298, 3314, 3321, 3322, + 3135, 3136, 3138, 3143, 5955, 3144, 3145, 3141, 3146, 3154, + 3149, 3153, 3165, 3161, 3168, 3164, 5955, 3169, 3171, 3178, + 3173, 3174, 3181, 5955, 3176, 5955, 3179, 3180, 3182, 3187, + 3188, 3191, 3192, 3193, 3195, 3203, 3208, 3200, 3205, 3209, + 3210, 3211, 3218, 3214, 3215, 3217, 5955, 3220, 3221, 3222, + 3223, 3232, 3233, 3230, 3234, 5955, 3240, 3243, 3244, 3246, + 3245, 3248, 3251, 3249, 3250, 3254, 3252, 3253, 3267, 3260, + 3259, 3268, 3270, 3275, 3280, 5955, 3276, 3282, 3289, 3285, + 3286, 3288, 3292, 3287, 3293, 3294, 3296, 3297, 3299, 3301, + 3303, 3300, 3310, 3304, 3311, 3317, 3306, 3326, 3333, 3309, - 3325, 3324, 3328, 3331, 3335, 3332, 3344, 3345, 3336, 3339, - 3348, 3349, 3356, 3351, 5940, 3361, 3341, 3364, 3362, 3363, - 3368, 3369, 3371, 3372, 3373, 3374, 3381, 3376, 5940, 3383, - 3378, 3388, 3389, 3380, 3403, 3398, 3379, 3401, 3405, 3402, - 3408, 3406, 3410, 3411, 3414, 3415, 5940, 5940, 3417, 3418, - 3420, 5940, 3421, 3419, 3431, 3424, 3427, 3434, 3251, 3433, - 3436, 3437, 3439, 3441, 5940, 3445, 3452, 3444, 3447, 3459, - 3461, 3467, 3451, 3460, 3458, 3463, 3468, 3470, 3471, 3472, - 3474, 3483, 3476, 3479, 3481, 5940, 3484, 3486, 3487, 3491, - 3488, 3495, 5940, 3493, 3499, 3500, 3502, 3514, 3505, 3515, + 3320, 3328, 3329, 3334, 3331, 3337, 3341, 3343, 3335, 3351, + 3352, 3346, 3348, 3357, 3354, 3365, 3360, 5955, 3368, 3361, + 3370, 3366, 3371, 3373, 3375, 3383, 3380, 3378, 3381, 3388, + 3384, 5955, 3396, 3386, 3385, 3397, 3402, 3409, 3405, 3406, + 3389, 3412, 3407, 3415, 3418, 3413, 3419, 3422, 3423, 5955, + 5955, 3425, 3427, 3428, 5955, 3430, 3429, 3440, 3432, 3436, + 3441, 3442, 3444, 3445, 3446, 3448, 3451, 5955, 3454, 3461, + 3458, 3462, 3466, 3470, 3473, 3463, 3475, 3465, 3476, 3477, + 3479, 3480, 3481, 3486, 3494, 3490, 3483, 3491, 3492, 5955, + 3493, 3497, 3499, 3501, 3505, 3508, 5955, 3509, 3510, 3511, - 3517, 3497, 3519, 3520, 3522, 3521, 3523, 3530, 3525, 3529, - 3536, 3537, 3528, 5940, 3542, 3544, 3545, 3547, 3549, 3558, - 3556, 3559, 3554, 3561, 3562, 3569, 5940, 3564, 3567, 3570, - 3568, 3578, 3573, 3581, 3577, 5940, 3579, 3583, 3585, 5940, - 3584, 3596, 3599, 3601, 3586, 3594, 3603, 3605, 3607, 3608, - 5940, 3611, 5940, 3612, 3592, 3618, 5940, 3614, 3620, 3622, - 3624, 3621, 3628, 3629, 3636, 3625, 3631, 3637, 3638, 3639, - 3641, 3648, 3644, 3647, 3649, 3650, 5940, 3651, 3653, 3659, - 3660, 3665, 3654, 3658, 3670, 3669, 5940, 5940, 3673, 5940, - 3677, 3676, 3678, 5940, 3681, 3683, 3690, 3685, 3686, 3689, + 3516, 3521, 3518, 3515, 3530, 3527, 3532, 3533, 3534, 3535, + 3536, 3543, 3538, 3540, 3542, 3549, 3547, 5955, 3554, 3557, + 3544, 3559, 3561, 3571, 3572, 3575, 3562, 3574, 3577, 3582, + 5955, 3578, 3580, 3581, 3567, 3591, 3583, 3600, 3586, 5955, + 3587, 3595, 3596, 5955, 3603, 3607, 3610, 3612, 3597, 3619, + 3615, 3618, 3616, 3620, 5955, 3625, 5955, 3624, 3626, 3631, + 5955, 3628, 3633, 3634, 3636, 3637, 3642, 3643, 3650, 3641, + 3644, 3651, 3652, 3654, 3655, 3662, 3657, 3659, 3663, 3664, + 5955, 3665, 3667, 3670, 3672, 3674, 3676, 3680, 3682, 3684, + 5955, 5955, 3690, 5955, 3691, 3686, 3692, 5955, 3695, 3693, - 3699, 3693, 5940, 3688, 3700, 3703, 3705, 3706, 3707, 3709, - 3710, 3708, 3711, 3712, 5940, 3713, 3716, 3724, 3717, 3725, - 3729, 3736, 3730, 5940, 3737, 3738, 3739, 3743, 3744, 5940, - 3746, 5940, 3747, 3749, 3752, 3754, 3753, 5940, 3759, 3760, - 3763, 3766, 3768, 3767, 3770, 3771, 3777, 3778, 3785, 3781, - 3780, 3782, 5940, 3783, 3787, 3789, 3796, 3784, 3791, 3800, - 3803, 3804, 3805, 3810, 3807, 3814, 3816, 3818, 3820, 3812, - 5940, 3822, 3824, 3823, 3838, 3833, 3828, 5940, 3829, 3843, - 3845, 5940, 3836, 3835, 3847, 3852, 3839, 3846, 3853, 3854, - 3858, 5940, 3859, 3860, 3861, 3862, 3865, 3866, 5940, 5940, + 3704, 3696, 3699, 3602, 3706, 3703, 5955, 3709, 3712, 3714, + 3717, 3718, 3719, 3721, 3722, 3720, 3723, 3724, 5955, 3725, + 3728, 3736, 3729, 3737, 3741, 3748, 3742, 5955, 3749, 3750, + 3751, 3755, 3756, 5955, 3758, 5955, 3759, 3761, 3764, 3766, + 3765, 5955, 3771, 3772, 3775, 3778, 3780, 3779, 3782, 3783, + 3789, 3790, 3797, 3793, 3792, 3794, 5955, 3795, 3799, 3801, + 3808, 3796, 3803, 3812, 3815, 3816, 3817, 3822, 3827, 3819, + 3828, 3834, 3830, 3832, 3824, 5955, 3836, 3838, 3841, 3850, + 3843, 3846, 5955, 3847, 3851, 3855, 5955, 3853, 3854, 3861, + 3864, 3857, 3865, 3868, 3867, 3871, 5955, 3873, 3876, 3869, - 3874, 5940, 3876, 3863, 3877, 3878, 3879, 3885, 3884, 3888, - 3890, 3887, 3891, 3898, 3899, 3908, 3911, 3915, 3910, 3914, - 3900, 5940, 5940, 3917, 3918, 3921, 3924, 3925, 3927, 3928, - 3935, 3931, 3937, 3941, 3942, 3949, 5940, 3948, 3934, 3951, - 5940, 3932, 3945, 3953, 3956, 3958, 3959, 3962, 3960, 3961, - 3964, 3968, 3965, 3970, 3974, 3972, 3975, 3973, 3983, 3981, - 3982, 3990, 5940, 3991, 3984, 3993, 3995, 3996, 3997, 4001, - 4002, 4004, 5940, 4006, 4008, 4010, 4011, 4005, 4015, 4026, - 4030, 4032, 4023, 4033, 4034, 4036, 4040, 4037, 5940, 4044, - 4041, 4043, 4047, 4051, 4053, 4054, 4056, 4057, 4065, 4062, + 3872, 3882, 3890, 5955, 5955, 3891, 5955, 3892, 3878, 3879, + 3893, 3880, 3895, 3903, 3900, 3907, 3896, 3908, 3913, 3914, + 3922, 3923, 3925, 3926, 3920, 3924, 5955, 5955, 3931, 3932, + 3934, 3936, 3937, 3939, 3941, 3946, 3945, 3948, 3953, 3955, + 3962, 5955, 3957, 3954, 3963, 5955, 3964, 3965, 3968, 3966, + 3971, 3969, 3972, 3973, 3975, 3977, 3979, 3982, 3983, 3985, + 3984, 3992, 3994, 3995, 3996, 3997, 4002, 5955, 4003, 4005, + 4006, 4007, 4008, 4012, 4014, 4016, 4017, 5955, 4018, 4020, + 4023, 4021, 4022, 4027, 4041, 4044, 4046, 4037, 4047, 4048, + 4050, 4054, 4051, 5955, 4058, 4055, 4057, 4061, 4065, 4067, - 4066, 4068, 4070, 4058, 4074, 4076, 4060, 5940, 4080, 4082, - 4078, 4087, 4084, 4088, 4089, 4095, 4099, 4091, 4093, 4100, - 4104, 5940, 4101, 4105, 4107, 4109, 4115, 4106, 4112, 4116, - 5940, 4118, 4120, 4123, 4124, 4126, 4129, 4132, 4133, 4136, - 4135, 4139, 5940, 4141, 4143, 4146, 4149, 4150, 4152, 4155, - 4154, 5940, 4156, 4162, 4164, 4171, 4166, 4175, 4172, 4176, - 4168, 4170, 4182, 4186, 4188, 4189, 4190, 4178, 4200, 4202, - 4201, 5940, 4184, 5940, 4203, 4206, 4214, 4209, 4191, 5940, - 4215, 4216, 4220, 4221, 4217, 5940, 4222, 4223, 4225, 4229, - 5940, 4224, 4228, 4230, 4235, 4238, 4242, 5940, 4245, 4246, + 4068, 4070, 4071, 4079, 4076, 4080, 4082, 4084, 4072, 4088, + 4090, 4074, 5955, 4094, 4096, 4092, 4101, 4098, 4102, 4103, + 4109, 4113, 4105, 4107, 4114, 4118, 5955, 4115, 4119, 4121, + 4123, 4129, 4120, 4126, 4130, 5955, 5955, 4132, 4134, 4137, + 4138, 4140, 4143, 4146, 4147, 4150, 4149, 4153, 5955, 4155, + 4157, 4160, 4163, 4164, 4166, 4169, 4168, 5955, 4170, 4176, + 4178, 4185, 4180, 4189, 4186, 4190, 4182, 4184, 4196, 4200, + 4202, 4203, 4204, 4192, 4214, 4216, 4215, 5955, 4198, 5955, + 4217, 4220, 4228, 4223, 4205, 5955, 4229, 4230, 4234, 4235, + 4231, 5955, 4236, 4237, 4239, 4243, 5955, 4238, 4242, 4244, - 4248, 4257, 4258, 4255, 4256, 4259, 4261, 4262, 4263, 4264, - 4272, 4267, 4269, 5940, 4271, 4277, 4279, 4283, 4284, 4285, - 4286, 4292, 4287, 5940, 4289, 4295, 4296, 4297, 4298, 4299, - 4301, 4309, 4304, 4307, 5940, 4308, 4312, 4320, 4009, 4321, - 5940, 5940, 4313, 4328, 4330, 4318, 4331, 5940, 4322, 4340, - 4335, 4337, 4339, 5940, 5940, 4342, 5940, 4338, 5940, 4343, - 4345, 5940, 5940, 4346, 4349, 4350, 4353, 4360, 5940, 4363, - 5940, 4370, 4365, 4352, 4354, 4367, 5940, 4369, 4371, 4374, - 5940, 4377, 4384, 4379, 4380, 5940, 4382, 4385, 4387, 5940, - 4389, 4392, 4393, 4394, 4399, 4396, 4400, 4403, 4406, 4407, + 4249, 4252, 4256, 5955, 4259, 4260, 4262, 4271, 4272, 4269, + 4270, 4273, 4275, 4276, 4277, 4278, 4286, 4281, 4283, 5955, + 4285, 4291, 4293, 4297, 4298, 4299, 4300, 4306, 4301, 5955, + 4303, 4309, 4310, 4311, 4312, 4313, 4315, 4323, 4318, 4321, + 5955, 4322, 4326, 4334, 4327, 4340, 5955, 5955, 4332, 4336, + 4341, 4343, 4347, 5955, 4345, 4356, 4351, 4353, 4355, 5955, + 5955, 4358, 5955, 4354, 5955, 4359, 4360, 5955, 5955, 4361, + 4362, 4365, 4374, 4368, 5955, 4378, 5955, 4381, 4382, 4371, + 4380, 4384, 5955, 4385, 4386, 4391, 5955, 4392, 4399, 4394, + 4395, 5955, 4397, 4400, 4403, 5955, 4405, 4408, 4409, 4411, - 4409, 4410, 4411, 4422, 4424, 4426, 4428, 4429, 4413, 4432, - 4433, 4435, 4438, 4439, 4440, 4442, 4444, 4445, 4447, 4449, - 4452, 4453, 4454, 4455, 4456, 4457, 4459, 4466, 4469, 4471, - 4470, 4472, 4474, 4473, 4475, 4477, 4481, 4483, 4484, 5940, - 4482, 4485, 4488, 4415, 4491, 4501, 4503, 4494, 4510, 4512, - 5940, 4514, 5940, 4516, 4502, 4518, 4504, 5940, 4519, 4522, - 4521, 4524, 4525, 4526, 4528, 4527, 4531, 4532, 4535, 5940, - 4538, 4533, 4542, 4553, 5940, 4545, 4557, 4541, 4548, 4558, - 4560, 4561, 4562, 4567, 4563, 4569, 4571, 4578, 4573, 4574, - 4576, 4581, 4564, 4577, 4585, 4592, 4588, 4596, 4600, 5940, + 4413, 4415, 4416, 4417, 4423, 4424, 4425, 4426, 4427, 4434, + 4439, 4441, 4443, 4435, 4444, 4445, 4448, 4451, 4453, 4454, + 4455, 4456, 4458, 4459, 4461, 4464, 4468, 4469, 4467, 4470, + 4471, 4480, 4473, 4476, 4484, 4477, 4487, 4488, 4489, 4490, + 4492, 4494, 4498, 4497, 4500, 5955, 4499, 4501, 4503, 4516, + 4504, 4505, 4520, 4522, 4528, 4529, 5955, 4531, 5955, 4533, + 4524, 4535, 4536, 5955, 4537, 4538, 4539, 4540, 4541, 4543, + 4509, 4544, 4547, 4548, 4551, 5955, 4554, 4545, 4549, 4569, + 5955, 4562, 4573, 4559, 4570, 4574, 4575, 4576, 4578, 4579, + 4580, 4583, 4585, 4592, 4587, 4589, 4591, 4593, 4597, 4600, - 4593, 5940, 4601, 4602, 4603, 4604, 4606, 4605, 4607, 5940, - 5940, 4608, 4613, 4618, 4614, 4609, 4620, 4630, 5940, 4622, - 4631, 4633, 4623, 5940, 4638, 4639, 4641, 5940, 4642, 4643, - 4644, 4646, 4647, 4650, 4651, 4653, 4655, 4657, 4661, 5940, - 5940, 5940, 5940, 4663, 4665, 4668, 4670, 4672, 4673, 4675, - 4677, 4674, 5940, 4679, 5940, 5940, 4681, 4688, 4680, 4690, - 4691, 4692, 4696, 4698, 5940, 4697, 4702, 4703, 4700, 4710, - 4714, 4716, 4717, 4701, 4718, 4726, 4724, 4727, 4725, 4730, - 4732, 4734, 5940, 5940, 4737, 4739, 4741, 4748, 4746, 4749, - 4758, 4753, 4755, 4756, 4759, 4761, 4743, 4768, 4772, 4770, + 4601, 4607, 4603, 4611, 4615, 5955, 4608, 5955, 4612, 4616, + 4618, 4619, 4623, 4622, 4624, 5955, 5955, 4625, 4626, 4632, + 4633, 4634, 4637, 4640, 5955, 4638, 4646, 4655, 4647, 5955, + 4641, 4649, 4657, 5955, 4651, 4658, 4662, 4665, 4659, 4671, + 4668, 4672, 4674, 4675, 4677, 5955, 5955, 5955, 5955, 4679, + 4682, 4684, 4685, 4686, 4688, 4691, 4693, 4694, 5955, 4696, + 5955, 5955, 4701, 4702, 4689, 4705, 4708, 4711, 4712, 4714, + 5955, 4713, 4715, 4718, 4717, 4725, 4727, 4729, 4733, 4719, + 4731, 4740, 4739, 4741, 4735, 4743, 4746, 4752, 5955, 5955, + 4747, 4754, 4755, 4762, 4759, 4763, 4771, 4766, 4767, 4769, - 4767, 5940, 4771, 4777, 5940, 4773, 5940, 4778, 4781, 4745, - 4782, 4784, 4787, 4788, 4790, 5940, 5940, 4791, 4792, 4794, - 4798, 4800, 4802, 4801, 4804, 4805, 5940, 4806, 5940, 4807, - 4814, 4809, 4815, 4823, 4826, 4828, 4830, 4825, 4831, 5940, - 4832, 4834, 5940, 4835, 4837, 4838, 5940, 4842, 4845, 4849, - 5940, 4855, 4846, 4852, 5940, 4859, 5940, 4856, 4860, 4861, - 4868, 5940, 4863, 4869, 5940, 4872, 4875, 4877, 4866, 5940, - 4864, 5940, 4878, 4885, 4886, 4889, 4881, 4891, 4892, 4893, - 4894, 4901, 4900, 4902, 5940, 5940, 4910, 4897, 4903, 4907, - 4912, 4919, 4914, 4917, 4916, 5940, 5940, 4924, 5940, 4922, + 4773, 4774, 4775, 4783, 4785, 4776, 4780, 5955, 4784, 4787, + 5955, 4786, 5955, 4794, 4795, 4791, 4793, 4801, 4802, 4803, + 4805, 5955, 5955, 4797, 4807, 4812, 4818, 4813, 4815, 4808, + 4820, 4821, 5955, 4822, 5955, 4825, 4826, 4829, 4833, 4841, + 4842, 4844, 4847, 4843, 4834, 5955, 4848, 4849, 5955, 4850, + 4852, 4853, 5955, 4855, 4860, 4864, 5955, 4870, 4861, 4867, + 5955, 4874, 5955, 4871, 4875, 4876, 4883, 5955, 4878, 4884, + 5955, 4887, 4890, 4892, 4881, 5955, 4879, 5955, 4893, 4900, + 4901, 4904, 4896, 4906, 4907, 4908, 4909, 4916, 4915, 4917, + 5955, 5955, 4925, 4912, 4918, 4922, 4927, 4934, 4929, 4932, - 4925, 5940, 4926, 4931, 4932, 4933, 4935, 4936, 4940, 4942, - 4943, 4944, 4945, 4946, 4952, 4964, 4948, 4962, 4968, 4970, - 4972, 4974, 4966, 4976, 4977, 4978, 4979, 4980, 4983, 5940, - 4985, 4986, 4987, 5940, 4991, 4992, 4994, 4996, 5940, 5007, - 5002, 5008, 5009, 5940, 4995, 5015, 5012, 5010, 5020, 5027, - 5023, 5022, 5940, 5940, 5940, 5024, 5033, 5940, 5038, 5025, - 5028, 5030, 5940, 5034, 5040, 5940, 5940, 5041, 5042, 5044, - 5055, 5940, 5045, 5940, 5046, 5940, 5054, 5056, 5062, 5060, - 5940, 5065, 5071, 5940, 5074, 5077, 5079, 5080, 5068, 5081, - 5082, 5940, 5090, 5086, 5092, 5094, 5083, 5085, 5098, 5095, + 4931, 5955, 5955, 4939, 5955, 4937, 4940, 5955, 4941, 4946, + 4947, 4948, 4950, 4951, 4955, 4957, 4958, 4959, 4960, 4961, + 4967, 4979, 4963, 4977, 4983, 4985, 4987, 4989, 4981, 4991, + 4992, 4993, 4994, 4995, 4998, 5955, 5000, 5001, 5002, 5955, + 5006, 5007, 5009, 5011, 5955, 5022, 5017, 5023, 5024, 5955, + 5010, 5030, 5027, 5025, 5035, 5042, 5038, 5037, 5955, 5955, + 5955, 5039, 5048, 5955, 5053, 5040, 5043, 5045, 5955, 5049, + 5055, 5955, 5955, 5056, 5057, 5059, 5070, 5955, 5060, 5955, + 5061, 5955, 5069, 5071, 5077, 5075, 5955, 5080, 5086, 5955, + 5089, 5092, 5094, 5095, 5083, 5096, 5097, 5955, 5105, 5101, - 5102, 5099, 5105, 5940, 5107, 5109, 5110, 5116, 5108, 5118, - 5112, 5940, 5120, 5940, 5121, 5122, 5125, 5128, 5123, 5126, - 5050, 5131, 5130, 5141, 5138, 5940, 5143, 5147, 5940, 5144, - 5940, 5149, 5940, 5150, 5151, 5152, 5153, 5940, 5155, 5159, - 5160, 5161, 5940, 5162, 5164, 5170, 5940, 5940, 5171, 5181, - 5172, 5173, 5185, 5187, 5174, 5189, 5182, 5190, 5176, 5198, - 5197, 5200, 5201, 5203, 5204, 5205, 5940, 5940, 5940, 5210, - 5209, 5217, 5214, 5215, 5225, 5220, 5940, 5223, 5226, 5224, - 5233, 5230, 5235, 5940, 5232, 5236, 5237, 5239, 5241, 5242, - 5246, 5940, 5250, 5257, 5253, 5245, 5260, 5264, 5267, 5269, + 5107, 5109, 5098, 5100, 5113, 5110, 5117, 5114, 5120, 5955, + 5122, 5124, 5125, 5131, 5123, 5133, 5127, 5955, 5135, 5955, + 5136, 5137, 5140, 5143, 5138, 5141, 5065, 5146, 5145, 5156, + 5153, 5955, 5158, 5162, 5955, 5159, 5955, 5164, 5955, 5165, + 5166, 5167, 5168, 5955, 5170, 5174, 5175, 5176, 5955, 5177, + 5179, 5185, 5955, 5955, 5186, 5196, 5187, 5188, 5200, 5202, + 5189, 5204, 5197, 5205, 5191, 5213, 5212, 5215, 5216, 5218, + 5219, 5220, 5955, 5955, 5955, 5225, 5224, 5232, 5229, 5230, + 5240, 5235, 5955, 5238, 5241, 5239, 5248, 5245, 5250, 5955, + 5247, 5251, 5252, 5254, 5256, 5257, 5261, 5955, 5265, 5272, - 5270, 5940, 5272, 5940, 5940, 5273, 5940, 5274, 5276, 5277, - 5278, 5940, 5281, 5283, 5282, 5284, 5286, 5940, 5294, 5287, - 5289, 5290, 5940, 5940, 5301, 5940, 5304, 5305, 5306, 5315, - 5311, 5313, 5317, 5314, 5940, 5312, 5318, 5322, 5324, 5325, - 5940, 5326, 5328, 5329, 5330, 5333, 5337, 5339, 5340, 5341, - 5940, 5343, 5335, 5358, 5354, 5940, 5342, 5360, 5940, 5940, - 5345, 5364, 5365, 5940, 5940, 5940, 5367, 5940, 5371, 5377, - 5381, 5385, 5368, 5940, 5387, 5376, 5384, 5940, 5380, 5388, - 5390, 5392, 5940, 5940, 5389, 5396, 5393, 5401, 5402, 5940, - 5404, 5406, 5411, 5419, 5421, 5409, 5423, 5425, 5432, 5405, + 5268, 5260, 5275, 5279, 5282, 5284, 5285, 5955, 5287, 5955, + 5955, 5288, 5955, 5289, 5291, 5292, 5293, 5955, 5296, 5298, + 5297, 5299, 5301, 5955, 5309, 5302, 5304, 5305, 5955, 5955, + 5316, 5955, 5319, 5320, 5321, 5330, 5326, 5328, 5332, 5329, + 5955, 5327, 5333, 5337, 5339, 5340, 5955, 5341, 5343, 5344, + 5345, 5348, 5352, 5354, 5355, 5356, 5955, 5358, 5350, 5373, + 5369, 5955, 5357, 5375, 5955, 5955, 5360, 5379, 5380, 5955, + 5955, 5955, 5382, 5955, 5386, 5392, 5396, 5400, 5383, 5955, + 5402, 5391, 5399, 5955, 5395, 5403, 5405, 5407, 5955, 5955, + 5404, 5411, 5408, 5416, 5417, 5955, 5419, 5421, 5426, 5434, - 5413, 5427, 5429, 5430, 5436, 5433, 5440, 5449, 5445, 5447, - 5454, 5455, 5940, 5940, 5457, 5940, 5940, 5459, 5462, 5464, - 5466, 5468, 5470, 5472, 5940, 5407, 5474, 5475, 5476, 5477, - 5940, 5479, 5481, 5478, 5482, 5487, 5485, 5489, 5491, 5940, - 5940, 5483, 5500, 5492, 5505, 5494, 5940, 5507, 5502, 5508, - 5509, 5511, 5513, 5516, 5940, 5515, 5517, 5940, 5940, 5519, - 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5520, 5940, - 5524, 5528, 5536, 5539, 5940, 5525, 5533, 5444, 5529, 5540, - 5940, 5541, 5544, 5545, 5551, 5543, 5546, 5552, 5556, 5559, - 5557, 5560, 5561, 5562, 5566, 5563, 5567, 5569, 5940, 5940, + 5436, 5424, 5438, 5440, 5447, 5420, 5428, 5442, 5444, 5445, + 5451, 5448, 5455, 5464, 5460, 5462, 5469, 5470, 5955, 5955, + 5472, 5955, 5955, 5474, 5477, 5479, 5481, 5483, 5485, 5487, + 5955, 5422, 5489, 5490, 5491, 5492, 5955, 5494, 5496, 5493, + 5497, 5502, 5500, 5504, 5506, 5955, 5955, 5498, 5515, 5507, + 5520, 5509, 5955, 5522, 5517, 5523, 5524, 5526, 5528, 5531, + 5955, 5530, 5532, 5955, 5955, 5534, 5955, 5955, 5955, 5955, + 5955, 5955, 5955, 5955, 5535, 5955, 5539, 5543, 5551, 5554, + 5955, 5540, 5548, 5459, 5544, 5555, 5955, 5556, 5559, 5560, + 5566, 5558, 5561, 5567, 5571, 5574, 5572, 5575, 5576, 5577, - 5940, 5568, 5570, 5580, 5572, 5589, 5591, 5594, 5596, 5583, - 5586, 5597, 5598, 5599, 5601, 5605, 5613, 5608, 5609, 5610, - 5611, 5617, 5612, 5614, 5619, 5940, 5623, 5940, 5624, 5940, - 5940, 5629, 5634, 5632, 5625, 5636, 5643, 5639, 5641, 5645, - 5646, 5648, 5650, 5940, 5652, 5655, 5940, 5656, 5657, 5940, - 5658, 5660, 5662, 5659, 5663, 5666, 5669, 5677, 5668, 5940, - 5940, 5671, 5679, 5680, 5684, 5687, 5694, 5689, 5693, 5695, - 5696, 5686, 5708, 5940, 5704, 5706, 5710, 5940, 5712, 5707, - 5713, 5714, 5715, 5723, 5718, 5719, 5940, 5721, 5940, 5725, - 5727, 5730, 5728, 5729, 5731, 5740, 5738, 5742, 5940, 5745, + 5581, 5578, 5582, 5584, 5955, 5955, 5955, 5583, 5585, 5595, + 5587, 5604, 5606, 5609, 5611, 5598, 5601, 5612, 5613, 5614, + 5616, 5620, 5628, 5623, 5624, 5625, 5626, 5632, 5627, 5629, + 5634, 5955, 5638, 5955, 5639, 5955, 5955, 5644, 5649, 5647, + 5640, 5651, 5658, 5654, 5656, 5660, 5661, 5663, 5665, 5955, + 5667, 5670, 5955, 5671, 5672, 5955, 5673, 5675, 5677, 5674, + 5678, 5681, 5684, 5692, 5683, 5955, 5955, 5686, 5694, 5695, + 5699, 5702, 5709, 5704, 5708, 5710, 5711, 5701, 5723, 5955, + 5719, 5721, 5725, 5955, 5727, 5722, 5728, 5729, 5730, 5738, + 5733, 5734, 5955, 5736, 5955, 5740, 5742, 5745, 5743, 5744, - 5749, 5746, 5751, 5753, 5756, 5757, 5758, 5760, 5762, 5766, - 5770, 5772, 5773, 5763, 5776, 5774, 5940, 5784, 5775, 5940, - 5785, 5786, 5778, 5787, 5788, 5940, 5796, 5792, 5798, 5799, - 5802, 5803, 5940, 5805, 5808, 5809, 5940, 5813, 5940, 5940, - 5814, 5812, 5815, 5821, 5823, 5940, 5940, 5940, 5848, 5855, - 5862, 5869, 5876, 88, 5883, 5890, 5897, 5904, 5911, 5918, - 5925, 5932 + 5746, 5755, 5753, 5757, 5955, 5760, 5764, 5761, 5766, 5768, + 5771, 5772, 5773, 5775, 5777, 5781, 5785, 5787, 5788, 5778, + 5791, 5789, 5955, 5799, 5790, 5955, 5800, 5801, 5793, 5802, + 5803, 5955, 5811, 5807, 5813, 5814, 5817, 5818, 5955, 5820, + 5823, 5824, 5955, 5828, 5955, 5955, 5829, 5827, 5830, 5836, + 5838, 5955, 5955, 5955, 5863, 5870, 5877, 5884, 5891, 88, + 5898, 5905, 5912, 5919, 5926, 5933, 5940, 5947 } ; -static const flex_int16_t yy_def[3063] = +static const flex_int16_t yy_def[3069] = { 0, - 3048, 1, 3049, 3049, 3050, 3050, 3051, 3051, 3052, 3052, - 3053, 3053, 3048, 3054, 3048, 3048, 3048, 3048, 3055, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3056, 3048, 3048, 3048, 3056, 3057, 3048, 3048, - 3048, 3057, 3058, 3048, 3048, 3048, 3048, 3058, 3059, 3048, - 3048, 3048, 3059, 3060, 3048, 3061, 3048, 3060, 3060, 3054, - 3054, 3048, 3062, 3055, 3062, 3055, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 1, 3055, 3055, 3056, 3056, 3057, 3057, 3058, 3058, + 3059, 3059, 3054, 3060, 3054, 3054, 3054, 3054, 3061, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3062, 3054, 3054, 3054, 3062, 3063, 3054, 3054, + 3054, 3063, 3064, 3054, 3054, 3054, 3054, 3064, 3065, 3054, + 3054, 3054, 3065, 3066, 3054, 3067, 3054, 3066, 3066, 3060, + 3060, 3054, 3068, 3061, 3068, 3061, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3056, 3056, 3057, 3057, 3058, 3058, 3048, 3059, 3059, 3060, - 3060, 3061, 3061, 3060, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3062, 3062, 3063, 3063, 3064, 3064, 3054, 3065, 3065, 3066, + 3066, 3067, 3067, 3066, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3066, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3066, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3066, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3060, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3048, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3066, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3054, 3060, 3054, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3060, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3066, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3048, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3054, 3060, 3060, 3066, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3048, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3054, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3054, 3054, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3048, 3048, 3054, 3048, 3054, 3048, 3054, - 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3054, + 3054, 3060, 3054, 3060, 3054, 3060, 3060, 3054, 3054, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3048, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3054, 3054, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3048, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3048, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3048, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3054, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3048, 3048, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3048, 3048, 3054, 3054, 3054, - 3054, 3048, 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3054, 3054, 3060, 3054, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, + 3054, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3054, + 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3054, 3060, 3054, 3060, 3054, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3054, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3054, 3048, 3054, 3048, 3048, 3054, 3048, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3048, - 3054, 3054, 3054, 3048, 3048, 3048, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, + 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3054, + 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3054, 3054, 3060, 3060, 3060, 3054, + 3054, 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3054, + 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3048, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3048, 3054, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3054, 3048, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, + 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3054, 3054, 3060, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3060, 3054, 3060, 3060, 3060, 3060, + 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3060, 3060, 3060, 3060, 3054, 3054, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3054, 3060, 3054, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3054, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, + 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3048, 3048, - 3054, 3054, 3054, 3054, 3054, 3048, 3048, 0, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048 + 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3060, 3060, 3054, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, + 3060, 3060, 3054, 3060, 3054, 3054, 3060, 3060, 3060, 3060, + 3060, 3054, 3054, 0, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054 } ; -static const flex_int16_t yy_nxt[5981] = +static const flex_int16_t yy_nxt[5996] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1650,442 +1651,445 @@ static const flex_int16_t yy_nxt[5981] = 71, 71, 71, 71, 71, 1104, 1105, 1101, 1106, 1109, 1099, 1100, 71, 1107, 1103, 71, 1102, 71, 1108, 71, 71, 1112, 71, 1116, 71, 1110, 1113, 71, 71, 1114, - 71, 1122, 1115, 71, 71, 1111, 1117, 71, 71, 1124, - 71, 71, 71, 71, 1118, 71, 1120, 1126, 1119, 1121, - 71, 71, 71, 1128, 71, 1125, 1130, 1127, 1123, 1131, - 71, 71, 1129, 71, 71, 1133, 1134, 71, 1132, 71, - 1136, 71, 1139, 1140, 71, 1135, 71, 1138, 71, 71, - 71, 1144, 1143, 1137, 71, 1141, 71, 1142, 71, 71, + 71, 1123, 1115, 71, 71, 1111, 1117, 71, 71, 1125, + 71, 71, 71, 71, 1118, 71, 1121, 1127, 1119, 1122, + 1120, 71, 71, 71, 1129, 1126, 71, 1128, 1124, 71, + 71, 1131, 1130, 71, 1132, 1134, 71, 71, 1133, 1138, + 71, 1135, 1140, 1137, 71, 1136, 1139, 71, 71, 1141, + 71, 71, 71, 1142, 1144, 71, 1145, 71, 71, 71, - 71, 1150, 1148, 1151, 71, 71, 71, 71, 71, 71, - 1152, 1153, 1145, 1149, 71, 1146, 1155, 1158, 1147, 1154, - 71, 71, 71, 71, 1157, 1159, 1156, 1160, 71, 71, - 1161, 71, 71, 71, 71, 1164, 1165, 71, 1162, 71, - 71, 1170, 1171, 71, 71, 1166, 71, 71, 71, 1163, - 71, 1168, 71, 1174, 71, 1167, 71, 1173, 1172, 1169, - 1176, 1178, 1177, 1175, 71, 71, 71, 71, 71, 1184, - 71, 71, 71, 1180, 1179, 71, 71, 1190, 71, 71, - 71, 1188, 71, 1187, 1195, 1181, 1185, 1183, 1189, 1192, - 1186, 1193, 1182, 71, 71, 71, 71, 71, 1194, 1196, + 71, 1151, 1149, 1152, 71, 1143, 71, 71, 71, 71, + 1146, 1153, 71, 1150, 71, 1156, 1147, 1154, 1148, 1155, + 1159, 71, 1157, 71, 71, 71, 71, 71, 1158, 1160, + 1161, 71, 1162, 71, 1163, 71, 1165, 71, 1166, 71, + 71, 71, 71, 1171, 1172, 1164, 71, 1174, 1167, 71, + 71, 71, 1169, 1175, 71, 71, 71, 1168, 1179, 71, + 1170, 1173, 71, 71, 71, 71, 71, 71, 1178, 1177, + 1176, 71, 1181, 1185, 71, 71, 71, 1180, 3054, 71, + 71, 1186, 1193, 1182, 1189, 1184, 1187, 1188, 71, 1190, + 1183, 1191, 71, 1194, 71, 71, 1192, 71, 71, 71, - 1191, 71, 71, 71, 71, 71, 71, 1199, 71, 71, - 1197, 71, 1202, 1205, 71, 1198, 71, 71, 1200, 71, - 71, 1203, 1220, 1201, 1208, 1206, 1209, 1204, 71, 71, - 1215, 71, 71, 1211, 1207, 71, 1216, 1210, 1217, 71, - 71, 71, 1212, 71, 1213, 71, 1219, 1214, 1218, 71, - 1224, 71, 1223, 71, 1221, 71, 1226, 71, 1222, 1229, - 71, 71, 1230, 71, 1227, 71, 1231, 71, 1225, 71, - 1233, 1234, 71, 71, 1228, 71, 71, 71, 1235, 71, - 71, 71, 71, 1232, 71, 71, 1241, 1236, 1237, 1239, - 71, 1240, 1242, 71, 1238, 71, 1246, 71, 1251, 71, + 1195, 71, 1197, 1196, 71, 71, 71, 71, 1198, 1200, + 71, 71, 1199, 71, 1203, 1206, 71, 71, 71, 71, + 1201, 3054, 71, 71, 1216, 1202, 1204, 1207, 1210, 1205, + 71, 71, 71, 1209, 71, 1208, 1212, 1217, 71, 1211, + 1218, 71, 71, 71, 1220, 1213, 1221, 1214, 71, 1219, + 1215, 71, 71, 1222, 71, 71, 1223, 1224, 71, 1225, + 1227, 1230, 71, 1228, 71, 71, 71, 71, 71, 1231, + 1226, 1232, 1234, 71, 71, 71, 71, 1229, 1235, 71, + 71, 71, 1236, 1237, 71, 1233, 71, 1242, 71, 71, + 1238, 1240, 71, 71, 71, 1239, 1241, 71, 1243, 1247, - 1243, 71, 1245, 1244, 71, 1248, 1250, 71, 1247, 1253, - 71, 71, 1257, 1252, 71, 1249, 1255, 1258, 71, 71, - 71, 71, 1256, 71, 1262, 71, 3048, 1254, 71, 1272, - 1270, 1271, 1261, 1259, 1260, 71, 71, 71, 1269, 1275, - 1263, 1273, 71, 1264, 1265, 71, 71, 71, 1266, 71, - 71, 1274, 1276, 71, 1267, 1277, 71, 1278, 1268, 71, - 1280, 71, 71, 71, 1281, 71, 1282, 1279, 71, 1283, - 1287, 1284, 1285, 71, 1290, 1291, 71, 71, 71, 1329, - 71, 71, 1286, 1292, 71, 1294, 1289, 1288, 1293, 71, - 1295, 71, 1296, 71, 1297, 1303, 1298, 71, 1299, 1300, + 71, 1251, 1252, 1244, 71, 71, 71, 1246, 71, 1245, + 71, 71, 1248, 1254, 1249, 1256, 1258, 71, 1253, 71, + 1250, 1259, 71, 1257, 71, 71, 1255, 71, 1263, 71, + 71, 1273, 3054, 1261, 1271, 1272, 1260, 1262, 71, 71, + 71, 71, 1270, 1264, 1274, 71, 1265, 1266, 1276, 1275, + 1277, 1267, 71, 71, 71, 71, 1279, 1268, 1278, 71, + 1281, 1269, 71, 71, 71, 1282, 71, 1283, 71, 71, + 71, 71, 1291, 1280, 1288, 1286, 71, 71, 71, 1292, + 1332, 1293, 1285, 1284, 1289, 71, 71, 71, 1287, 1290, + 1294, 71, 1300, 71, 1301, 1302, 1295, 71, 71, 71, - 1301, 71, 71, 71, 1302, 1307, 71, 1305, 71, 71, - 1308, 71, 1306, 1310, 71, 71, 1304, 71, 71, 1316, - 71, 1317, 71, 1311, 1312, 71, 71, 71, 1309, 71, - 1318, 71, 1315, 1313, 1320, 71, 1314, 71, 71, 71, - 1319, 1321, 71, 1325, 1322, 1326, 71, 1328, 71, 1323, - 71, 71, 71, 1330, 1327, 71, 1331, 1334, 71, 1336, - 71, 1332, 1324, 71, 1333, 71, 1337, 71, 1338, 71, - 1341, 71, 1335, 71, 71, 71, 71, 1343, 71, 71, - 71, 1345, 1347, 71, 71, 3048, 1349, 1346, 1339, 71, - 1340, 71, 71, 1342, 1351, 1344, 1352, 1348, 71, 1350, + 71, 1296, 1304, 1297, 1303, 1298, 71, 1299, 71, 71, + 71, 1308, 71, 1311, 1305, 1307, 1309, 71, 1306, 71, + 71, 1314, 71, 1313, 71, 1312, 1318, 71, 1319, 1315, + 1310, 71, 71, 71, 71, 71, 71, 71, 1317, 1320, + 1322, 1316, 71, 71, 71, 1324, 71, 1321, 1323, 1327, + 1328, 71, 1330, 71, 71, 1325, 1331, 71, 1329, 71, + 1336, 71, 1333, 71, 71, 1334, 71, 1326, 1335, 1338, + 71, 71, 1339, 71, 1343, 71, 71, 71, 1340, 71, + 1345, 71, 71, 1337, 71, 1341, 1347, 1342, 71, 71, + 1349, 1348, 1351, 71, 3054, 71, 1344, 71, 71, 1346, - 1353, 71, 71, 1354, 71, 1356, 1355, 1357, 71, 71, - 71, 71, 1362, 1363, 1365, 1359, 71, 1360, 71, 71, - 71, 1364, 71, 71, 1361, 71, 1358, 1369, 71, 71, - 71, 1366, 71, 1373, 1374, 71, 1368, 1376, 71, 71, - 71, 1375, 1367, 71, 71, 71, 71, 71, 71, 1370, - 1371, 71, 1377, 71, 1383, 1372, 71, 1380, 1378, 71, - 1381, 71, 1388, 71, 1379, 1382, 1387, 71, 1384, 71, - 3048, 71, 1390, 1392, 1386, 71, 1385, 71, 1393, 71, - 71, 71, 1389, 71, 1395, 1396, 71, 71, 1391, 1394, - 71, 71, 1401, 1403, 1397, 1402, 1398, 1405, 1399, 71, + 1353, 71, 1350, 1354, 71, 1355, 1356, 71, 1352, 1357, + 71, 1358, 1359, 71, 71, 71, 71, 1364, 1365, 1367, + 1361, 71, 1362, 71, 71, 71, 1366, 71, 71, 1363, + 71, 1360, 1371, 71, 71, 71, 1368, 71, 1375, 1376, + 71, 1370, 1378, 71, 71, 71, 1377, 1369, 71, 71, + 71, 71, 71, 71, 1372, 1373, 71, 1379, 71, 1385, + 1374, 71, 1382, 1380, 71, 1383, 71, 1390, 71, 1381, + 1384, 1389, 71, 1386, 71, 3054, 71, 1392, 1394, 1388, + 71, 1387, 71, 1395, 71, 71, 71, 1391, 71, 1397, + 1398, 71, 71, 1393, 1396, 71, 71, 1403, 1405, 1399, - 1404, 1400, 71, 71, 71, 71, 1406, 1408, 71, 1410, - 1407, 71, 1409, 71, 71, 71, 1413, 71, 71, 1415, - 71, 71, 1420, 1412, 71, 71, 1414, 71, 1421, 71, - 1411, 1417, 71, 1424, 71, 1416, 1418, 71, 1419, 71, - 71, 1425, 71, 1422, 71, 71, 1423, 71, 1427, 1431, - 1433, 1426, 1428, 71, 1432, 1429, 71, 71, 1436, 71, - 71, 1430, 71, 71, 1441, 1435, 1438, 1442, 1440, 71, - 71, 1434, 71, 71, 1437, 71, 1443, 71, 1444, 1445, - 71, 71, 71, 1439, 71, 1446, 1449, 1448, 71, 71, - 1452, 1447, 71, 71, 71, 1451, 71, 71, 1458, 1450, + 1404, 1400, 1407, 1401, 71, 1406, 1402, 71, 71, 71, + 71, 1408, 1410, 71, 1412, 1409, 71, 1411, 71, 71, + 71, 1415, 71, 71, 1417, 71, 71, 1422, 1414, 71, + 71, 1416, 71, 1423, 71, 1413, 1419, 71, 1426, 71, + 1418, 1420, 71, 1421, 71, 71, 1427, 71, 1424, 71, + 71, 1425, 71, 1429, 1433, 1435, 1428, 1430, 71, 1434, + 1431, 71, 71, 1438, 71, 71, 1432, 71, 71, 1443, + 1437, 1440, 1444, 1442, 71, 71, 1436, 71, 71, 1439, + 71, 1445, 71, 1446, 1447, 71, 71, 71, 1441, 71, + 1448, 1451, 1450, 71, 71, 1454, 1449, 71, 71, 71, - 1460, 1454, 1455, 1459, 71, 1461, 71, 71, 1456, 71, - 1463, 71, 1453, 71, 71, 1457, 71, 71, 71, 71, - 1471, 1467, 71, 1466, 71, 1474, 71, 1462, 71, 1472, - 1464, 71, 1465, 71, 1477, 71, 1468, 1470, 1469, 1476, - 71, 71, 71, 71, 71, 71, 3048, 1475, 1473, 71, - 71, 1485, 71, 71, 1478, 1486, 1488, 71, 1482, 71, - 1479, 1480, 1481, 1491, 1484, 1487, 1483, 1489, 71, 71, - 71, 71, 71, 71, 1490, 1495, 71, 71, 71, 1496, - 1493, 1498, 71, 1492, 71, 1494, 1502, 71, 1504, 1503, - 71, 71, 1497, 1499, 71, 71, 71, 1500, 1501, 71, + 1453, 71, 71, 1460, 1452, 1462, 1456, 1457, 1461, 71, + 1463, 71, 71, 1458, 71, 1465, 71, 1455, 71, 71, + 1459, 71, 71, 71, 71, 1473, 1469, 71, 1468, 71, + 1476, 71, 1464, 71, 1474, 1466, 71, 1467, 71, 1479, + 71, 1470, 1472, 1471, 1478, 71, 71, 71, 71, 71, + 71, 3054, 1477, 1475, 71, 71, 1487, 71, 71, 1480, + 1488, 1490, 71, 1484, 71, 1481, 1482, 1483, 1493, 1486, + 1489, 1485, 1491, 71, 71, 71, 71, 71, 71, 1492, + 1497, 71, 71, 71, 1498, 1495, 1500, 71, 1494, 71, + 1496, 1505, 71, 71, 71, 1507, 71, 1499, 1502, 1506, - 1507, 71, 71, 1508, 1506, 1505, 1509, 71, 1513, 1514, - 71, 71, 71, 71, 71, 71, 1510, 1519, 1517, 1511, - 71, 1518, 71, 71, 1521, 71, 71, 1512, 71, 1515, - 71, 1522, 71, 1516, 71, 1520, 1523, 71, 1524, 71, - 71, 1528, 1525, 1526, 71, 1529, 71, 71, 71, 1530, - 1527, 71, 1533, 71, 1535, 71, 71, 71, 1539, 71, - 1531, 71, 1534, 71, 71, 1532, 71, 71, 1542, 1536, - 1537, 1544, 71, 1540, 71, 71, 1547, 71, 1545, 1541, - 71, 1538, 1543, 71, 1546, 71, 71, 1550, 1548, 71, - 1552, 1549, 1553, 71, 71, 71, 1551, 71, 71, 1560, + 71, 71, 1501, 71, 1511, 1504, 71, 1503, 1508, 1509, + 71, 1510, 71, 71, 1512, 1516, 1517, 71, 71, 71, + 71, 71, 1522, 1513, 71, 1520, 71, 1521, 71, 71, + 1514, 1524, 71, 1515, 71, 71, 1518, 1525, 1526, 71, + 1519, 71, 71, 71, 1523, 1527, 1529, 71, 71, 1532, + 71, 1528, 71, 71, 71, 71, 1531, 1533, 71, 1536, + 71, 1530, 71, 1538, 71, 1542, 1537, 71, 71, 71, + 71, 1534, 1535, 1539, 1545, 1540, 1547, 71, 71, 71, + 71, 1543, 1548, 1541, 71, 1546, 1544, 71, 1550, 71, + 71, 71, 71, 1553, 71, 1552, 1555, 1556, 71, 1549, - 71, 71, 71, 1555, 1554, 1561, 71, 71, 71, 1558, - 1569, 1564, 1565, 1556, 1557, 71, 71, 1567, 71, 71, - 71, 1562, 1559, 1568, 1571, 71, 1563, 71, 1566, 71, - 71, 1573, 71, 1575, 1572, 71, 71, 1578, 71, 1570, - 1576, 71, 1579, 71, 1574, 71, 71, 71, 1584, 1583, - 71, 71, 1580, 1577, 71, 71, 71, 1600, 1590, 1591, - 1582, 1581, 1585, 71, 71, 71, 1587, 71, 1592, 1588, - 71, 1586, 1598, 1602, 71, 1595, 1594, 1597, 71, 71, - 1596, 1589, 71, 71, 1593, 71, 1601, 1599, 1603, 71, - 71, 71, 71, 71, 1609, 1610, 1608, 71, 71, 1612, + 71, 71, 1551, 71, 71, 1563, 71, 71, 1558, 1554, + 1557, 1564, 71, 71, 71, 1561, 71, 71, 3054, 1559, + 1560, 1568, 1567, 71, 71, 1570, 71, 1565, 1562, 1571, + 1572, 71, 1566, 1574, 1569, 71, 71, 1573, 71, 71, + 1575, 1576, 71, 71, 1578, 71, 1581, 71, 1579, 71, + 1577, 71, 1582, 71, 71, 71, 1587, 1586, 71, 1580, + 71, 1583, 71, 71, 3054, 1593, 1590, 1584, 1585, 1591, + 1588, 71, 71, 71, 71, 71, 1595, 1594, 1600, 71, + 1589, 1592, 1601, 1597, 1598, 71, 71, 1599, 71, 71, + 1602, 1605, 1596, 71, 1603, 71, 1604, 71, 71, 1607, - 71, 71, 1604, 1611, 71, 71, 1615, 71, 1605, 1614, - 1606, 71, 1607, 71, 71, 71, 1616, 71, 71, 71, - 1613, 1624, 71, 71, 71, 71, 71, 71, 71, 1622, - 71, 1617, 1620, 1621, 1618, 1619, 1623, 1629, 71, 1627, - 71, 71, 1625, 71, 1626, 1631, 71, 1628, 1630, 71, - 1632, 71, 71, 71, 1635, 71, 1633, 1634, 71, 71, - 1637, 71, 1639, 71, 1636, 71, 1646, 1638, 1640, 1642, - 71, 1641, 71, 1643, 1647, 71, 1648, 71, 1644, 1652, - 71, 71, 1649, 1650, 1651, 1653, 1645, 71, 71, 71, - 71, 71, 71, 1655, 1656, 71, 71, 1664, 1665, 71, + 71, 71, 71, 1606, 1612, 1611, 1613, 1608, 71, 1615, + 71, 71, 71, 1614, 71, 71, 71, 71, 71, 1609, + 71, 1610, 1617, 1618, 71, 1619, 71, 71, 71, 1627, + 71, 71, 1620, 71, 1616, 71, 1621, 71, 1622, 71, + 1623, 1624, 1625, 71, 1626, 1632, 71, 71, 1628, 71, + 1635, 1630, 1634, 1629, 71, 71, 71, 71, 71, 71, + 1631, 71, 71, 1633, 71, 71, 71, 1640, 1642, 1636, + 1637, 1650, 71, 1643, 1641, 1639, 1644, 71, 1645, 1638, + 1646, 71, 1651, 71, 1649, 1647, 71, 71, 71, 1652, + 1654, 1648, 1655, 71, 71, 71, 71, 71, 71, 71, - 71, 1659, 71, 71, 71, 1661, 1654, 1658, 1662, 1657, - 71, 1663, 71, 71, 1660, 71, 71, 1667, 71, 71, - 1666, 71, 1674, 71, 71, 71, 1669, 1671, 1668, 1670, - 1677, 71, 1676, 71, 1678, 1675, 1673, 71, 71, 1685, - 1680, 1672, 1682, 1681, 1686, 71, 71, 71, 1679, 71, - 71, 1691, 71, 1693, 71, 1690, 1684, 71, 1683, 1694, - 1687, 71, 1688, 1696, 71, 71, 1695, 71, 71, 71, - 1692, 1689, 1700, 1697, 71, 1704, 71, 71, 71, 1702, - 71, 71, 1699, 71, 1698, 1703, 71, 1701, 1705, 71, - 71, 71, 71, 71, 1708, 1716, 1706, 71, 1709, 1714, + 1658, 1656, 1659, 71, 1653, 1667, 71, 71, 1662, 71, + 71, 71, 71, 1657, 1661, 1660, 1664, 71, 1666, 1665, + 1668, 71, 1663, 1670, 71, 71, 1669, 71, 71, 71, + 1671, 1672, 71, 1677, 71, 71, 71, 1674, 71, 1681, + 1673, 1680, 71, 1679, 1683, 1678, 1676, 1684, 71, 71, + 1689, 71, 1675, 1682, 71, 1690, 71, 71, 71, 71, + 1685, 1695, 71, 3054, 1694, 1697, 71, 71, 1686, 1688, + 1687, 1691, 1698, 1692, 71, 1700, 1693, 71, 71, 1699, + 1696, 71, 71, 1701, 71, 1704, 71, 71, 1708, 71, + 1706, 71, 71, 71, 71, 71, 1707, 1709, 1703, 1705, - 71, 71, 1707, 1710, 1711, 1717, 1712, 1713, 71, 71, - 1718, 71, 71, 71, 1723, 71, 71, 71, 1727, 71, - 71, 1715, 71, 71, 3048, 71, 1722, 1720, 1719, 1729, - 71, 1721, 1725, 71, 71, 1726, 71, 1724, 1730, 1731, - 71, 1732, 1728, 1736, 71, 1735, 1734, 71, 71, 1733, - 71, 1740, 71, 71, 71, 71, 71, 71, 71, 1747, - 1738, 1742, 71, 71, 71, 71, 1737, 1741, 1743, 1739, - 1744, 1841, 71, 71, 1745, 1748, 1752, 1746, 1750, 71, - 1749, 1751, 71, 1753, 71, 71, 1756, 71, 1755, 71, - 1754, 1759, 71, 1757, 71, 71, 71, 71, 1760, 1758, + 71, 71, 1702, 1712, 71, 71, 71, 1718, 71, 1713, + 1720, 1710, 1711, 71, 1714, 1721, 71, 1715, 71, 1716, + 1717, 71, 71, 71, 71, 1727, 1722, 71, 71, 1719, + 71, 71, 1731, 71, 71, 71, 71, 1726, 1723, 1733, + 1724, 1734, 1725, 71, 1729, 71, 71, 71, 1730, 1728, + 1735, 1736, 1737, 71, 1732, 1740, 71, 71, 71, 71, + 1744, 71, 71, 71, 71, 71, 71, 71, 1739, 1746, + 1738, 1742, 71, 71, 1751, 1747, 1741, 1743, 1745, 1748, + 71, 71, 1755, 71, 1749, 1752, 1750, 1754, 71, 71, + 1753, 1756, 1757, 71, 1758, 71, 1760, 1761, 71, 71, - 71, 71, 71, 71, 71, 71, 1765, 71, 71, 1769, - 71, 71, 1766, 3048, 71, 1775, 1761, 1767, 1763, 1762, - 1764, 71, 1768, 1770, 71, 1778, 1773, 71, 1772, 1777, - 71, 71, 1779, 1774, 71, 71, 1771, 71, 71, 1776, - 1783, 71, 1786, 1787, 71, 71, 1780, 1788, 71, 71, - 1781, 1784, 71, 1785, 71, 1782, 1790, 71, 71, 1791, - 1794, 71, 71, 1796, 71, 1789, 1795, 1797, 1798, 71, - 1792, 1800, 1799, 1793, 71, 71, 71, 71, 1805, 1802, - 1803, 71, 71, 1804, 71, 71, 71, 71, 1812, 71, - 1814, 71, 71, 71, 71, 1815, 71, 1806, 1807, 1808, + 71, 71, 71, 1763, 1759, 71, 71, 71, 1764, 71, + 71, 1762, 71, 71, 71, 1769, 71, 71, 1773, 71, + 1765, 1770, 71, 71, 71, 1767, 1771, 1768, 1766, 1777, + 71, 1772, 1774, 71, 1780, 1779, 1778, 1776, 1781, 71, + 1782, 71, 71, 1783, 71, 1775, 71, 71, 71, 1787, + 71, 1790, 1784, 1791, 71, 1792, 71, 1785, 1788, 71, + 1789, 71, 1786, 1794, 71, 71, 1795, 71, 1793, 1798, + 71, 1799, 1800, 71, 71, 1802, 1801, 1804, 71, 71, + 1796, 71, 1797, 71, 71, 1807, 71, 1806, 71, 1808, + 1809, 71, 1803, 71, 71, 1816, 71, 71, 71, 71, - 1801, 71, 71, 1817, 1809, 1816, 1810, 1811, 1819, 1813, - 1820, 71, 1822, 1818, 71, 71, 71, 1824, 71, 71, - 1821, 71, 1826, 71, 71, 1829, 1830, 71, 71, 1832, - 71, 71, 71, 71, 71, 1823, 1838, 71, 1837, 1827, - 71, 1825, 1834, 1835, 71, 1828, 71, 71, 1831, 71, - 71, 1844, 71, 1836, 71, 1842, 1833, 71, 71, 1848, - 71, 1839, 1840, 1847, 71, 71, 1851, 1850, 1852, 1854, - 1846, 71, 71, 71, 71, 1843, 71, 1849, 1845, 1853, - 71, 71, 1855, 71, 71, 71, 1859, 71, 1862, 71, - 1863, 1856, 71, 1858, 71, 1857, 71, 71, 1866, 71, + 1821, 71, 71, 1818, 1805, 1810, 1811, 1812, 1819, 71, + 71, 1814, 1813, 1820, 1815, 71, 1824, 1817, 71, 71, + 71, 1822, 71, 1827, 1828, 71, 71, 1825, 71, 1830, + 1823, 71, 71, 1833, 1834, 71, 71, 1836, 71, 1826, + 71, 71, 71, 71, 1842, 71, 1829, 1841, 1832, 71, + 1838, 1831, 1839, 71, 71, 71, 1835, 71, 71, 71, + 1848, 71, 1845, 1840, 71, 1837, 1846, 71, 1852, 1844, + 1843, 71, 1851, 1855, 71, 71, 71, 1856, 71, 71, + 1850, 1858, 1854, 71, 1847, 1857, 71, 1849, 71, 71, + 71, 1853, 71, 71, 71, 1863, 71, 1859, 1860, 71, - 71, 71, 1860, 1871, 71, 1870, 71, 1865, 71, 1864, - 71, 1861, 71, 71, 1867, 71, 1875, 1868, 71, 1876, - 1872, 1869, 1879, 1873, 1877, 1874, 1878, 71, 71, 1882, - 71, 1883, 71, 71, 71, 71, 71, 1889, 71, 1880, - 1886, 71, 71, 71, 1881, 1894, 1884, 1891, 1892, 71, - 71, 1893, 1885, 1890, 1887, 71, 1888, 71, 71, 1899, - 71, 1900, 71, 1903, 1895, 1901, 1904, 71, 1896, 71, - 1902, 71, 71, 1897, 71, 71, 1908, 71, 1898, 1906, - 71, 71, 71, 71, 1910, 1913, 71, 1907, 1915, 1909, - 71, 71, 71, 1905, 71, 1911, 71, 71, 71, 71, + 1866, 1867, 1862, 71, 71, 71, 71, 71, 1861, 1871, + 71, 1864, 71, 1876, 71, 1868, 1869, 1875, 71, 1870, + 1865, 71, 71, 71, 71, 1872, 1873, 1880, 71, 71, + 1881, 71, 1874, 1883, 71, 1884, 1878, 1877, 1882, 1885, + 71, 1879, 1887, 71, 1886, 71, 71, 71, 71, 71, + 1894, 71, 1891, 71, 1897, 71, 71, 71, 1896, 1889, + 71, 1888, 71, 1898, 1899, 1890, 1895, 71, 1892, 1893, + 71, 1904, 71, 1905, 71, 71, 1900, 1903, 1906, 1908, + 71, 1901, 1909, 1907, 71, 71, 1902, 71, 71, 1913, + 71, 71, 1911, 71, 71, 71, 71, 1915, 1918, 71, - 1920, 1925, 1916, 1919, 1917, 71, 1912, 71, 1914, 71, - 1921, 1922, 71, 1923, 71, 1918, 71, 1932, 71, 1924, - 71, 71, 1926, 1927, 71, 71, 1928, 71, 1931, 1930, - 1929, 71, 1933, 71, 71, 71, 1937, 71, 71, 1934, - 1936, 71, 71, 1938, 71, 1935, 1939, 1940, 1941, 71, - 71, 71, 71, 1943, 71, 1948, 1946, 71, 1942, 1947, - 71, 71, 71, 71, 71, 1953, 71, 71, 1944, 1950, - 1945, 71, 71, 71, 1957, 1949, 1954, 1952, 71, 1959, - 1951, 1956, 71, 71, 1955, 1963, 71, 1958, 1961, 71, - 71, 71, 1960, 1964, 71, 1962, 71, 1969, 71, 71, + 71, 1910, 1912, 1914, 71, 1917, 1916, 1920, 71, 71, + 71, 1921, 1922, 71, 1924, 71, 71, 1977, 1919, 1925, + 71, 1926, 1927, 71, 1928, 71, 1930, 1923, 71, 71, + 1929, 71, 71, 71, 1931, 1933, 1932, 71, 71, 71, + 1936, 71, 1934, 1935, 71, 1938, 71, 71, 1942, 71, + 71, 1937, 1941, 1939, 71, 71, 71, 71, 1940, 1943, + 1944, 1945, 1946, 71, 71, 71, 1948, 71, 71, 1953, + 71, 1951, 71, 1952, 1947, 71, 71, 71, 71, 1958, + 71, 1955, 1949, 71, 1950, 71, 1962, 71, 1954, 71, + 1959, 1957, 1961, 71, 1956, 71, 1963, 71, 1960, 71, - 1971, 71, 71, 71, 1972, 1965, 71, 1966, 1975, 1967, - 1968, 1973, 71, 71, 1974, 1970, 71, 1977, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 1978, 3048, 71, - 71, 1985, 1980, 1976, 1981, 1982, 1989, 71, 71, 1984, - 1979, 1988, 71, 71, 1986, 1992, 1987, 1983, 1990, 71, - 71, 71, 71, 1996, 1993, 1995, 71, 71, 1991, 71, - 71, 1998, 71, 1994, 1999, 71, 71, 71, 2000, 2004, - 1997, 2002, 71, 71, 2006, 2008, 71, 2003, 2001, 71, - 71, 71, 2011, 71, 71, 2005, 2010, 2007, 2012, 2013, - 71, 71, 2016, 71, 71, 71, 71, 71, 71, 2017, + 1966, 1964, 1968, 71, 71, 71, 71, 1969, 71, 71, + 1967, 1974, 71, 1976, 1965, 1970, 71, 71, 1978, 71, + 1973, 1971, 71, 1972, 1979, 71, 1975, 71, 1982, 1980, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 1983, + 3054, 71, 71, 1990, 1985, 1981, 1986, 1987, 1994, 71, + 71, 1989, 1984, 1993, 71, 71, 1991, 1997, 1992, 1988, + 1995, 71, 71, 71, 71, 2001, 1998, 2000, 71, 71, + 1996, 71, 71, 2003, 71, 1999, 2004, 71, 71, 71, + 2005, 2009, 2002, 2007, 71, 71, 2011, 2013, 71, 2008, + 2006, 71, 71, 71, 2016, 71, 71, 2010, 2015, 2012, - 71, 2022, 71, 2019, 71, 2009, 2018, 2026, 2014, 71, - 2023, 2015, 2024, 71, 2021, 2020, 71, 71, 71, 2028, - 71, 2027, 2031, 71, 2025, 71, 2029, 71, 2033, 71, - 2034, 71, 2032, 71, 2030, 71, 71, 71, 2036, 2040, - 2035, 71, 71, 2037, 2038, 2042, 71, 2039, 71, 71, - 2043, 71, 71, 2045, 2046, 2044, 71, 2041, 71, 71, - 71, 2047, 2049, 2048, 2052, 71, 71, 71, 2050, 2051, - 2053, 71, 71, 71, 71, 71, 71, 2054, 71, 71, - 2061, 2056, 2055, 2062, 2058, 2059, 2057, 71, 2063, 71, - 71, 71, 71, 2064, 2060, 2066, 2072, 71, 71, 2067, + 2017, 2018, 71, 71, 2021, 71, 71, 71, 71, 71, + 71, 2022, 71, 2027, 71, 2024, 71, 2014, 2023, 2031, + 2019, 71, 2028, 2020, 2029, 71, 2026, 2025, 71, 71, + 71, 2033, 71, 2032, 2036, 71, 2030, 71, 2034, 2037, + 71, 71, 2039, 71, 2038, 71, 2035, 71, 2040, 71, + 2042, 71, 2041, 2046, 71, 2043, 71, 2048, 2044, 71, + 71, 2045, 2049, 71, 71, 2050, 71, 71, 71, 2053, + 71, 2051, 2052, 2054, 71, 2047, 2058, 71, 71, 2055, + 71, 71, 71, 2057, 71, 71, 71, 2056, 2059, 71, + 2067, 71, 71, 71, 2062, 71, 2060, 2061, 2064, 2063, - 71, 71, 2074, 71, 71, 2068, 2065, 2071, 2076, 2069, - 2073, 71, 71, 71, 3048, 2079, 2077, 2070, 2081, 2075, - 2080, 71, 2082, 71, 71, 2078, 2083, 71, 71, 2086, - 71, 71, 2087, 2085, 71, 2084, 2091, 71, 71, 2092, - 71, 71, 2095, 2090, 71, 71, 2088, 71, 71, 2096, - 71, 2097, 2093, 2098, 71, 71, 2100, 2089, 71, 2094, - 2099, 71, 71, 2105, 71, 2101, 71, 2102, 2103, 71, - 2104, 71, 71, 71, 71, 71, 2108, 71, 71, 2112, - 2114, 71, 2115, 71, 2107, 71, 71, 71, 71, 2106, - 2109, 2110, 2117, 2111, 71, 71, 71, 71, 2116, 2113, + 2068, 2065, 2066, 71, 71, 71, 71, 2074, 71, 71, + 2070, 2072, 2069, 71, 2073, 2078, 71, 2077, 2076, 2080, + 71, 71, 2079, 2071, 2075, 2082, 71, 71, 2081, 2085, + 2087, 2083, 2088, 71, 2086, 71, 71, 71, 71, 71, + 2084, 2090, 2089, 2092, 71, 71, 2093, 71, 2097, 71, + 71, 2098, 71, 2101, 71, 3054, 2096, 2091, 71, 71, + 2094, 71, 2103, 2102, 2099, 2104, 71, 71, 71, 2106, + 71, 2095, 2100, 2105, 2107, 71, 71, 71, 71, 71, + 2109, 71, 71, 2111, 71, 71, 71, 2108, 71, 2114, + 71, 2120, 71, 2118, 2113, 71, 71, 71, 71, 2121, - 2119, 2121, 2124, 71, 71, 2120, 71, 2122, 71, 71, - 71, 2118, 2125, 2123, 71, 71, 2126, 71, 71, 71, - 2135, 71, 71, 71, 71, 2127, 2136, 2132, 71, 2130, - 2290, 2128, 2138, 2129, 2134, 2131, 71, 2137, 2133, 71, - 2140, 2139, 2141, 71, 2142, 71, 71, 71, 2145, 71, - 71, 2143, 2148, 71, 71, 2149, 71, 71, 2146, 2144, - 71, 2147, 2150, 2154, 71, 2155, 71, 71, 2157, 71, - 71, 71, 2153, 71, 2151, 71, 2152, 2159, 71, 71, - 2162, 71, 2163, 71, 2161, 2164, 2156, 71, 2158, 71, - 2160, 71, 2167, 71, 2169, 71, 2165, 71, 2168, 2171, + 2115, 2116, 2110, 2123, 2112, 71, 2117, 71, 71, 71, + 71, 2122, 2119, 2127, 2130, 71, 71, 2125, 71, 71, + 71, 71, 2128, 2124, 2131, 71, 2126, 71, 2129, 71, + 71, 71, 2141, 71, 71, 71, 71, 2132, 2133, 2142, + 71, 2138, 3054, 2134, 2136, 2135, 2140, 2143, 2137, 2144, + 71, 2139, 3054, 2145, 71, 2146, 2147, 71, 2148, 71, + 71, 71, 2151, 71, 71, 2149, 2154, 71, 71, 2155, + 71, 71, 2152, 2150, 71, 2153, 2156, 2160, 71, 2161, + 71, 71, 2163, 71, 71, 71, 2159, 71, 2157, 71, + 2158, 2165, 71, 71, 2168, 71, 2169, 71, 2167, 2170, - 71, 71, 71, 2166, 71, 2174, 71, 2173, 71, 2175, - 2170, 2177, 71, 71, 71, 2172, 2181, 71, 71, 71, - 71, 2179, 71, 2178, 2176, 71, 2185, 2186, 71, 71, - 2190, 71, 2180, 71, 2182, 2184, 71, 71, 2187, 71, - 2188, 2183, 71, 2192, 2189, 71, 71, 2197, 71, 71, - 2199, 2193, 71, 2191, 71, 2200, 71, 2194, 2198, 71, - 2195, 2204, 71, 71, 2205, 71, 2203, 71, 71, 71, - 2201, 2196, 2202, 2209, 2211, 71, 2207, 71, 2214, 71, - 2212, 71, 2216, 71, 71, 71, 2208, 2206, 71, 71, - 2217, 71, 2213, 2210, 2218, 71, 2220, 71, 2221, 71, + 2162, 71, 2164, 71, 2166, 71, 2173, 71, 2175, 71, + 2171, 71, 2174, 2177, 71, 71, 71, 2172, 71, 2180, + 71, 2179, 71, 2181, 2176, 2183, 71, 71, 71, 2178, + 2187, 71, 71, 71, 71, 2185, 71, 2184, 2182, 71, + 2191, 2192, 71, 71, 2196, 71, 2186, 71, 2188, 2190, + 71, 71, 2193, 71, 2194, 2189, 71, 2198, 2195, 71, + 71, 2203, 71, 71, 2205, 2199, 71, 2197, 71, 2206, + 71, 2200, 2204, 71, 2201, 2210, 71, 71, 2211, 71, + 2209, 71, 71, 71, 2207, 2202, 2208, 2215, 2217, 71, + 2213, 71, 2220, 71, 2218, 71, 2222, 71, 71, 71, - 2215, 71, 71, 71, 71, 2226, 2219, 2227, 2222, 2228, - 2223, 2224, 2225, 71, 71, 71, 71, 2230, 2229, 71, - 2232, 2233, 71, 2234, 2236, 2231, 2237, 71, 71, 71, - 71, 2235, 2240, 71, 71, 71, 71, 71, 71, 2242, - 2247, 71, 71, 71, 2238, 2239, 2248, 2243, 71, 2241, - 2251, 71, 2244, 2245, 2246, 71, 2252, 2253, 71, 71, - 2250, 71, 2254, 2249, 2256, 2257, 2255, 2258, 71, 71, - 71, 71, 71, 2260, 71, 71, 71, 71, 2264, 2265, - 71, 3048, 71, 2259, 71, 71, 2261, 2267, 2268, 2262, - 71, 2270, 71, 2269, 2266, 2263, 71, 71, 71, 71, + 2214, 2212, 71, 71, 2223, 71, 2219, 2216, 2224, 71, + 2226, 71, 2227, 71, 2221, 71, 71, 71, 71, 2232, + 2225, 2233, 2228, 2234, 2229, 2230, 2231, 71, 71, 71, + 71, 2236, 2235, 71, 2238, 2239, 71, 2240, 2242, 2237, + 2243, 71, 71, 71, 71, 2241, 2246, 71, 71, 71, + 71, 71, 71, 2248, 2253, 71, 71, 71, 2244, 2245, + 2254, 2249, 71, 2247, 2257, 71, 2250, 2251, 2252, 71, + 2258, 2259, 71, 71, 2256, 71, 2260, 2255, 2262, 2263, + 2261, 2264, 71, 71, 71, 71, 71, 2266, 71, 71, + 71, 71, 2270, 2271, 71, 3054, 71, 2265, 71, 71, - 71, 2271, 71, 2274, 2275, 71, 2272, 2277, 71, 71, - 71, 71, 71, 2276, 71, 2281, 2284, 71, 2273, 2283, - 71, 71, 71, 2285, 2280, 71, 71, 2289, 2278, 2279, - 2288, 71, 2282, 71, 71, 71, 2291, 2287, 2286, 2297, - 2292, 71, 2293, 71, 71, 2296, 2294, 2298, 71, 2300, - 71, 71, 71, 71, 2302, 71, 71, 2295, 71, 71, - 2299, 2301, 71, 71, 2306, 71, 71, 71, 2308, 2303, - 2304, 2309, 2310, 71, 2305, 2311, 71, 2312, 71, 2313, - 71, 2314, 71, 71, 71, 2316, 2319, 71, 2307, 2315, - 71, 2321, 71, 71, 2324, 71, 2318, 71, 71, 2320, + 2267, 2273, 2274, 2268, 71, 2276, 71, 2275, 2272, 2269, + 71, 71, 71, 71, 71, 2277, 71, 2280, 2281, 71, + 2278, 2283, 71, 71, 71, 71, 71, 2282, 71, 2287, + 2290, 71, 2279, 2289, 71, 71, 71, 2291, 2286, 71, + 71, 2295, 2284, 2285, 2294, 71, 2288, 71, 2296, 71, + 2299, 2293, 2292, 71, 71, 2297, 71, 2300, 71, 2298, + 71, 2302, 2303, 2304, 71, 2306, 71, 71, 71, 71, + 2308, 71, 71, 71, 71, 71, 2305, 2307, 71, 2312, + 2316, 71, 2301, 2314, 71, 2309, 2310, 71, 2318, 2311, + 2317, 71, 2315, 71, 71, 71, 2319, 71, 71, 71, - 71, 2317, 71, 2327, 2328, 71, 71, 71, 2323, 71, - 2322, 2329, 71, 71, 2332, 2333, 71, 2325, 2326, 71, - 71, 2331, 71, 71, 71, 2330, 71, 2337, 71, 2339, - 2334, 2379, 2336, 2335, 2340, 71, 2341, 71, 2342, 71, - 2343, 71, 71, 2338, 2345, 71, 71, 2347, 71, 2348, - 2346, 71, 71, 71, 2344, 71, 2353, 71, 71, 2355, - 71, 2356, 71, 2349, 2350, 71, 71, 71, 71, 71, - 71, 2352, 71, 2351, 2359, 2362, 2357, 2354, 2358, 71, - 2360, 2365, 71, 71, 71, 71, 71, 71, 71, 2361, - 71, 2372, 2363, 2366, 71, 71, 71, 71, 71, 2364, + 2320, 2313, 2322, 2325, 71, 71, 2327, 71, 71, 2330, + 71, 2324, 71, 71, 2326, 2321, 71, 2323, 71, 2333, + 2334, 71, 71, 2329, 71, 2328, 71, 2335, 71, 71, + 71, 2339, 2331, 2338, 2332, 2337, 71, 71, 71, 71, + 71, 3054, 2336, 2343, 2340, 2345, 2346, 71, 71, 2342, + 2341, 2347, 71, 2348, 71, 2349, 71, 71, 71, 2344, + 2350, 71, 2353, 2352, 71, 2354, 71, 71, 71, 71, + 2359, 71, 71, 2361, 71, 2351, 2362, 71, 2355, 2356, + 71, 71, 71, 71, 71, 2358, 71, 2365, 2357, 71, + 71, 2360, 2363, 71, 2364, 2366, 2371, 71, 2368, 2372, - 2369, 71, 2371, 2373, 71, 2368, 2383, 71, 3048, 2367, - 2370, 2374, 2375, 2376, 71, 71, 71, 71, 2380, 2381, - 2377, 2382, 2384, 71, 2378, 71, 2385, 71, 2386, 71, - 2387, 71, 71, 2388, 71, 71, 2390, 71, 71, 71, - 71, 71, 2389, 2397, 71, 71, 71, 2395, 71, 2401, - 2402, 71, 2391, 2392, 71, 71, 2393, 2394, 71, 2396, - 2398, 71, 2399, 2400, 2404, 2405, 71, 2406, 2403, 2407, - 71, 71, 2408, 71, 71, 71, 71, 71, 2410, 2409, - 71, 2416, 71, 2417, 71, 2418, 71, 71, 2411, 71, - 71, 71, 2412, 2413, 71, 2415, 2414, 2423, 71, 2422, + 71, 71, 71, 71, 2367, 71, 2369, 71, 2378, 2370, + 71, 71, 71, 71, 71, 2375, 71, 71, 71, 2377, + 2379, 2374, 71, 2387, 2403, 2380, 2373, 2376, 2381, 71, + 2382, 2386, 2385, 71, 2389, 71, 2383, 71, 2388, 2384, + 2390, 71, 71, 2391, 71, 2392, 71, 2393, 71, 71, + 71, 71, 71, 71, 71, 2394, 71, 71, 71, 2395, + 71, 71, 71, 2401, 71, 2407, 2408, 71, 2396, 2398, + 2397, 2410, 71, 2400, 2399, 71, 2402, 2404, 2405, 2406, + 2409, 2411, 71, 71, 2412, 2413, 71, 71, 71, 71, + 2414, 71, 71, 71, 2416, 2422, 71, 2423, 71, 2424, - 2427, 71, 2420, 2425, 2419, 71, 71, 2426, 2421, 71, - 2424, 2428, 2429, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 2431, 2435, 2430, 71, 71, 2433, 2439, - 2440, 71, 2443, 71, 2432, 71, 71, 2434, 2436, 2437, - 2442, 2438, 2441, 71, 71, 2447, 71, 2444, 2446, 2448, - 2445, 71, 71, 2451, 71, 71, 71, 71, 2455, 71, - 71, 2454, 2457, 71, 71, 2453, 71, 2452, 71, 2458, - 71, 2449, 2450, 2462, 71, 2459, 71, 2463, 71, 2456, - 2465, 71, 2461, 71, 2460, 71, 71, 71, 71, 2470, - 71, 2472, 71, 71, 71, 2468, 2466, 2469, 2467, 2473, + 71, 2415, 71, 2417, 71, 71, 71, 2418, 2420, 2419, + 71, 2428, 2421, 71, 71, 2433, 71, 2426, 2425, 2431, + 71, 71, 2432, 2427, 71, 71, 2434, 2435, 71, 71, + 2429, 71, 71, 2430, 2437, 71, 71, 71, 71, 71, + 2436, 2441, 2445, 2439, 2446, 71, 71, 71, 2438, 2449, + 71, 71, 2440, 71, 71, 2442, 2443, 2450, 2444, 71, + 71, 2447, 71, 2452, 71, 2448, 2451, 2453, 71, 2457, + 71, 71, 71, 2454, 2455, 71, 2458, 2461, 71, 2460, + 2459, 71, 2456, 2463, 71, 71, 2464, 71, 71, 2468, + 71, 2462, 71, 2469, 2465, 71, 2471, 71, 71, 71, - 2464, 71, 2471, 71, 71, 71, 2474, 2475, 2476, 71, - 71, 71, 2477, 71, 71, 71, 71, 3048, 2479, 2480, - 2482, 2483, 2485, 71, 2478, 2481, 2486, 71, 2484, 71, - 71, 71, 2489, 2491, 3048, 2488, 2487, 71, 71, 71, - 71, 2493, 2492, 71, 2496, 71, 2497, 71, 2495, 2490, - 71, 2499, 71, 2494, 71, 2501, 71, 2500, 71, 71, - 2502, 71, 71, 2498, 2503, 2505, 71, 2504, 71, 71, - 2506, 71, 71, 2507, 71, 2512, 2521, 2511, 2508, 2513, - 71, 71, 2510, 71, 71, 71, 71, 2509, 2514, 2516, - 71, 71, 2515, 2517, 71, 71, 2519, 71, 2518, 2520, + 2467, 71, 71, 2466, 71, 2476, 71, 71, 2478, 71, + 2474, 2472, 2473, 2475, 71, 71, 2481, 2470, 71, 2479, + 2480, 71, 2477, 2482, 71, 71, 71, 71, 71, 2483, + 71, 71, 71, 2488, 2485, 2486, 2489, 2491, 71, 2492, + 71, 2487, 71, 2484, 71, 2490, 71, 2497, 71, 2493, + 2495, 2494, 71, 71, 71, 2499, 71, 2498, 2502, 71, + 71, 2501, 2496, 2500, 2503, 71, 2505, 71, 71, 2507, + 3054, 2506, 71, 2504, 2508, 71, 71, 2509, 2511, 71, + 71, 2510, 71, 2512, 71, 2513, 71, 71, 71, 71, + 2518, 2514, 2519, 71, 2520, 2516, 71, 71, 71, 71, - 71, 71, 2525, 71, 71, 71, 2523, 71, 2522, 2524, - 2530, 71, 2526, 71, 71, 71, 2534, 71, 71, 71, - 71, 2539, 71, 2527, 2532, 2528, 2529, 71, 71, 2533, - 2541, 2538, 2531, 2542, 2536, 2543, 71, 2535, 71, 71, - 2537, 71, 2544, 71, 71, 71, 2545, 71, 71, 2546, - 71, 71, 2549, 2540, 2547, 71, 2552, 2553, 71, 71, - 2548, 2554, 71, 2556, 2550, 71, 2551, 2555, 71, 71, - 2557, 2558, 71, 71, 71, 2562, 71, 71, 2560, 71, - 2563, 71, 71, 2565, 2566, 71, 2561, 2567, 71, 2559, - 71, 71, 2569, 2568, 71, 2570, 2564, 2572, 71, 71, + 71, 2515, 2522, 2523, 71, 2521, 71, 71, 71, 2517, + 71, 2524, 2525, 2526, 71, 71, 71, 2531, 71, 2528, + 71, 71, 2527, 2529, 2530, 71, 71, 2532, 71, 2533, + 2536, 71, 2540, 71, 71, 71, 2539, 2538, 71, 71, + 2534, 2545, 71, 2544, 2535, 2537, 71, 71, 2547, 2548, + 2542, 2549, 2552, 2541, 71, 71, 71, 71, 2543, 2550, + 71, 71, 71, 71, 2551, 71, 71, 2555, 71, 2558, + 2553, 2546, 2559, 71, 71, 2554, 2560, 71, 2562, 2556, + 71, 2557, 2561, 71, 71, 2563, 2564, 71, 71, 71, + 2568, 71, 71, 2566, 71, 2569, 71, 71, 2571, 2572, - 2573, 2574, 71, 2576, 71, 71, 71, 71, 2580, 2575, - 71, 2571, 2581, 71, 71, 71, 71, 2583, 2577, 2582, - 71, 2579, 2584, 71, 2578, 71, 2589, 71, 2592, 71, - 71, 2588, 71, 2585, 2591, 71, 2586, 71, 71, 71, - 2587, 2595, 2593, 2594, 71, 71, 71, 2597, 71, 71, - 3048, 2600, 2590, 71, 2604, 71, 71, 71, 71, 71, - 2606, 71, 2598, 2599, 2596, 71, 2601, 2603, 2607, 2602, - 2605, 2611, 2608, 2610, 2614, 71, 2612, 71, 2609, 71, - 2613, 71, 2615, 71, 2616, 71, 2617, 71, 2618, 71, - 71, 71, 71, 71, 2620, 2619, 71, 2626, 71, 71, + 71, 2567, 2573, 71, 2565, 71, 71, 2575, 2574, 71, + 2576, 2570, 2578, 71, 71, 2579, 2580, 71, 2582, 71, + 71, 71, 71, 2586, 2581, 71, 2577, 2587, 71, 71, + 71, 71, 2589, 2583, 2588, 71, 2585, 2590, 71, 2584, + 71, 2595, 71, 2598, 71, 71, 2594, 71, 2591, 2597, + 71, 2592, 71, 71, 71, 2593, 2601, 2599, 2600, 71, + 71, 71, 2603, 71, 71, 3054, 2606, 2596, 71, 2610, + 71, 71, 71, 71, 71, 2612, 71, 2604, 2605, 2602, + 71, 2607, 2609, 2613, 2608, 2611, 2617, 2614, 2616, 2620, + 71, 2618, 71, 2615, 71, 2619, 71, 2621, 71, 2622, - 71, 2623, 2627, 2629, 71, 71, 2631, 71, 71, 71, - 2621, 3048, 2630, 2624, 2632, 71, 2625, 2622, 2628, 2633, - 71, 71, 71, 71, 2634, 71, 2637, 2638, 71, 2639, - 2635, 2636, 2640, 71, 2642, 71, 71, 71, 71, 2643, - 71, 71, 2646, 71, 2645, 2647, 71, 71, 2641, 2644, - 2648, 71, 2649, 71, 71, 71, 2652, 71, 71, 71, - 3048, 2651, 2657, 71, 2655, 2653, 2650, 71, 71, 71, - 2658, 2699, 2660, 71, 2661, 71, 2662, 2656, 71, 2654, - 2659, 71, 2663, 2664, 71, 2665, 2667, 71, 2666, 2668, - 71, 2669, 71, 71, 71, 71, 71, 2674, 71, 71, + 71, 2623, 71, 2624, 71, 71, 71, 71, 71, 2626, + 2625, 71, 2632, 71, 71, 71, 2629, 2633, 2635, 71, + 71, 2637, 71, 71, 71, 2627, 3054, 2636, 2630, 2638, + 71, 2631, 2628, 2634, 2639, 71, 71, 71, 71, 2640, + 71, 2643, 2644, 71, 2645, 2641, 2642, 2646, 71, 2648, + 71, 71, 71, 71, 2649, 71, 71, 2652, 71, 2651, + 2653, 71, 71, 2647, 2650, 2654, 71, 2655, 71, 71, + 71, 2658, 71, 71, 71, 3054, 2657, 2663, 71, 2661, + 2659, 2656, 71, 71, 71, 2664, 2705, 2666, 71, 2667, + 71, 2668, 2662, 71, 2660, 2665, 71, 2669, 2670, 71, - 2673, 2671, 2670, 71, 2675, 71, 2677, 71, 71, 2682, - 2676, 71, 71, 2672, 2678, 71, 2680, 2684, 71, 2679, - 71, 71, 71, 71, 2685, 71, 2681, 2686, 2687, 71, - 2688, 71, 2692, 71, 71, 71, 71, 2683, 71, 71, - 2689, 71, 2695, 71, 71, 2691, 2690, 2693, 2694, 2700, - 2696, 71, 2697, 2702, 71, 2704, 71, 71, 2698, 2705, - 71, 2707, 71, 71, 71, 71, 71, 2712, 71, 2701, - 2703, 2711, 71, 71, 71, 71, 2716, 71, 2706, 2708, - 2709, 2710, 2718, 71, 71, 71, 71, 71, 2720, 71, - 2721, 2717, 2713, 2715, 71, 71, 2714, 2723, 71, 2724, + 2671, 2673, 71, 2672, 2674, 71, 2675, 71, 71, 71, + 71, 71, 2680, 71, 71, 2679, 2677, 2676, 71, 2681, + 71, 2683, 71, 71, 2688, 2682, 71, 71, 2678, 2684, + 71, 2686, 2690, 71, 2685, 71, 71, 71, 71, 2691, + 71, 2687, 2692, 2693, 71, 2694, 71, 2698, 71, 71, + 71, 71, 2689, 71, 71, 2695, 71, 2701, 71, 71, + 2697, 2696, 2699, 2700, 2706, 2702, 71, 2703, 2708, 71, + 2710, 71, 71, 2704, 2711, 71, 2713, 71, 71, 71, + 71, 71, 2718, 71, 2707, 2709, 2717, 71, 71, 71, + 71, 2722, 71, 2712, 2714, 2715, 2716, 2724, 71, 71, - 71, 2726, 71, 71, 2719, 2731, 2728, 2725, 2722, 2730, - 71, 71, 2729, 71, 71, 2735, 71, 71, 71, 2737, - 2736, 2727, 71, 71, 2740, 2733, 2741, 71, 71, 2732, - 71, 2742, 2743, 71, 2734, 2738, 71, 71, 71, 71, - 2748, 2745, 2739, 71, 2746, 71, 71, 2751, 71, 71, - 71, 2744, 71, 2756, 71, 71, 2747, 2752, 71, 71, - 2749, 2750, 2759, 71, 3048, 2755, 71, 2753, 2758, 2760, - 71, 2761, 2762, 71, 2757, 2754, 2764, 71, 2763, 2765, - 71, 2766, 71, 71, 2768, 71, 71, 71, 2767, 71, - 71, 71, 2773, 2774, 71, 71, 71, 71, 2778, 71, + 71, 71, 71, 2726, 71, 2727, 2723, 2719, 2721, 71, + 71, 2720, 2729, 71, 2730, 71, 2732, 71, 71, 2725, + 2737, 2734, 2731, 2728, 2736, 71, 71, 2735, 71, 71, + 2741, 71, 71, 71, 2743, 2742, 2733, 71, 71, 2746, + 2739, 2747, 71, 71, 2738, 71, 2748, 2749, 71, 2740, + 2744, 71, 71, 71, 71, 2754, 2751, 2745, 71, 2752, + 71, 71, 2757, 71, 71, 71, 2750, 71, 2762, 71, + 71, 2753, 2758, 71, 71, 2755, 2756, 2765, 71, 3054, + 2761, 71, 2759, 2764, 2766, 71, 2767, 2768, 71, 2763, + 2760, 2770, 71, 2769, 2771, 71, 2772, 71, 71, 2774, - 71, 2779, 71, 71, 3048, 2769, 2777, 71, 2782, 2770, - 2775, 2771, 2772, 2783, 71, 2776, 2784, 71, 71, 71, - 2780, 2781, 2787, 2785, 71, 71, 71, 71, 71, 2790, - 71, 71, 2791, 2786, 2789, 71, 2788, 71, 71, 71, - 2794, 71, 71, 71, 2796, 2792, 71, 2797, 71, 2795, - 71, 2793, 71, 71, 71, 71, 71, 2813, 71, 2806, - 2798, 2807, 2799, 2800, 2801, 2809, 2802, 71, 2808, 2803, - 2804, 71, 2810, 71, 2805, 2811, 2814, 71, 71, 2816, - 71, 71, 2815, 2817, 71, 2824, 2812, 2818, 2819, 71, - 71, 2820, 2821, 71, 71, 2822, 2823, 71, 71, 2825, + 71, 71, 71, 2773, 71, 71, 71, 2779, 2780, 71, + 71, 71, 71, 2784, 71, 71, 2785, 71, 71, 3054, + 2775, 2783, 71, 2788, 2776, 2781, 2777, 2778, 2789, 71, + 2782, 2790, 71, 71, 71, 2786, 2787, 2793, 2791, 71, + 71, 71, 71, 71, 2796, 71, 71, 2797, 2792, 2795, + 71, 2794, 71, 71, 71, 2800, 71, 71, 71, 2802, + 2798, 71, 2803, 71, 2801, 71, 2799, 71, 71, 71, + 71, 71, 2819, 71, 2812, 2804, 2813, 2805, 2806, 2807, + 2815, 2808, 71, 2814, 2809, 2810, 71, 2816, 71, 2811, + 2817, 2820, 71, 71, 2822, 71, 71, 2821, 2823, 71, - 71, 71, 71, 71, 2831, 71, 71, 2826, 2830, 71, - 2834, 2827, 2848, 2828, 71, 71, 2833, 71, 71, 71, - 71, 2829, 71, 2835, 71, 2839, 71, 2832, 2838, 2869, - 2836, 2840, 71, 2841, 71, 2837, 71, 2842, 71, 2846, - 71, 2843, 71, 71, 2847, 71, 71, 2844, 2852, 71, - 2845, 2849, 2855, 71, 2853, 2850, 2856, 71, 71, 2858, - 71, 2904, 71, 2851, 2857, 2854, 2859, 71, 71, 2861, - 71, 2862, 71, 2860, 2863, 71, 2864, 71, 2865, 71, - 2866, 71, 2867, 71, 2868, 71, 2870, 71, 71, 71, - 71, 71, 71, 2875, 71, 71, 71, 2871, 71, 2879, + 2830, 2818, 2824, 2825, 71, 71, 2826, 2827, 71, 71, + 2828, 2829, 71, 71, 2831, 71, 71, 71, 71, 2837, + 71, 71, 2832, 2836, 71, 2840, 2833, 2854, 2834, 71, + 71, 2839, 71, 71, 71, 71, 2835, 71, 2841, 71, + 2845, 71, 2838, 2844, 2875, 2842, 2846, 71, 2847, 71, + 2843, 71, 2848, 71, 2852, 71, 2849, 71, 71, 2853, + 71, 71, 2850, 2858, 71, 2851, 2855, 2861, 71, 2859, + 2856, 2862, 71, 71, 2864, 71, 2910, 71, 2857, 2863, + 2860, 2865, 71, 71, 2867, 71, 2868, 71, 2866, 2869, + 71, 2870, 71, 2871, 71, 2872, 71, 2873, 71, 2874, - 71, 2872, 71, 2881, 71, 71, 2876, 71, 2877, 2888, - 2873, 2874, 2878, 71, 2882, 71, 2883, 2880, 71, 2885, - 71, 71, 71, 2887, 71, 2886, 71, 2890, 71, 71, - 71, 2884, 71, 71, 2894, 2889, 2897, 71, 71, 2895, - 2899, 71, 71, 2891, 2892, 2893, 71, 2896, 2900, 71, - 2898, 2901, 71, 71, 71, 2903, 71, 71, 71, 71, - 2912, 2902, 2905, 2909, 71, 71, 2910, 2906, 2908, 71, - 71, 2911, 71, 71, 71, 71, 71, 2907, 2913, 71, - 71, 71, 71, 71, 2919, 71, 2916, 2923, 2914, 2918, - 2915, 2920, 2926, 71, 2927, 2924, 71, 2921, 2917, 71, + 71, 2876, 71, 71, 71, 71, 71, 71, 2881, 71, + 71, 71, 2877, 71, 2885, 71, 2878, 71, 2887, 71, + 71, 2882, 71, 2883, 2894, 2879, 2880, 2884, 71, 2888, + 71, 2889, 2886, 71, 2891, 71, 71, 71, 2893, 71, + 2892, 71, 2896, 71, 71, 71, 2890, 71, 71, 2900, + 2895, 2903, 71, 71, 2901, 2905, 71, 71, 2897, 2898, + 2899, 71, 2902, 2906, 71, 2904, 2907, 71, 71, 71, + 2909, 71, 71, 71, 71, 2918, 2908, 2911, 2915, 71, + 71, 2916, 2912, 2914, 71, 71, 2917, 71, 71, 71, + 71, 71, 2913, 2919, 71, 71, 71, 71, 71, 2925, - 2922, 2928, 71, 2925, 71, 2929, 2930, 71, 2931, 71, - 71, 71, 71, 2934, 71, 2932, 2935, 2936, 71, 2933, - 2939, 71, 71, 71, 71, 71, 71, 71, 2942, 2944, - 71, 2947, 71, 2938, 2941, 2940, 71, 71, 71, 2937, - 2945, 2950, 71, 2954, 2943, 71, 2946, 71, 2951, 71, - 2955, 2948, 71, 2952, 71, 2949, 71, 2953, 71, 71, - 2960, 71, 2961, 71, 2959, 71, 2956, 2957, 71, 71, - 71, 71, 71, 71, 2965, 71, 71, 2958, 2967, 71, - 2974, 71, 71, 2964, 71, 2969, 2962, 2972, 2963, 2970, - 71, 2966, 71, 71, 2968, 2973, 2978, 71, 2971, 71, + 71, 2922, 2929, 2920, 2924, 2921, 2926, 2932, 71, 2933, + 2930, 71, 2927, 2923, 71, 2928, 2934, 71, 2931, 71, + 2935, 2936, 71, 2937, 71, 71, 71, 71, 2940, 71, + 2938, 2941, 2942, 71, 2939, 2945, 71, 71, 71, 71, + 71, 71, 71, 2948, 2950, 71, 2953, 71, 2944, 2947, + 2946, 71, 71, 71, 2943, 2951, 2956, 71, 2960, 2949, + 71, 2952, 71, 2957, 71, 2961, 2954, 71, 2958, 71, + 2955, 71, 2959, 71, 71, 2966, 71, 2967, 71, 2965, + 71, 2962, 2963, 71, 71, 71, 71, 71, 71, 2971, + 71, 71, 2964, 2973, 71, 2980, 71, 71, 2970, 71, - 71, 2980, 71, 2981, 2975, 2979, 71, 71, 71, 71, - 2976, 2982, 2977, 2983, 2984, 2986, 2987, 71, 2985, 71, - 71, 71, 2989, 71, 2988, 71, 71, 71, 71, 2990, - 2995, 71, 71, 2992, 71, 2998, 71, 2999, 71, 2991, - 71, 71, 71, 71, 71, 2997, 2993, 2994, 3002, 3000, - 2996, 71, 3001, 71, 3006, 71, 3007, 3005, 71, 71, - 3003, 3004, 71, 3010, 71, 3012, 71, 3013, 3008, 71, - 71, 71, 3017, 71, 3014, 71, 71, 3015, 3011, 71, - 3018, 3019, 3020, 71, 3009, 71, 71, 71, 71, 71, - 3016, 71, 3021, 3022, 3024, 3023, 3026, 71, 71, 71, + 2975, 2968, 2978, 2969, 2976, 71, 2972, 71, 71, 2974, + 2979, 2984, 71, 2977, 71, 71, 2986, 71, 2987, 2981, + 2985, 71, 71, 71, 71, 2982, 2988, 2983, 2989, 2990, + 2992, 2993, 71, 2991, 71, 71, 71, 2995, 71, 2994, + 71, 71, 71, 71, 2996, 3001, 71, 71, 2998, 71, + 3004, 71, 3005, 71, 2997, 71, 71, 71, 71, 71, + 3003, 2999, 3000, 3008, 3006, 3002, 71, 3007, 71, 3012, + 71, 3013, 3011, 71, 71, 3009, 3010, 71, 3016, 71, + 3018, 71, 3019, 3014, 71, 71, 71, 3023, 71, 3020, + 71, 71, 3021, 3017, 71, 3024, 3025, 3026, 71, 3015, - 71, 71, 3032, 3028, 3029, 71, 3025, 3027, 3033, 71, - 3030, 71, 71, 3036, 3037, 71, 71, 3039, 71, 3031, - 3040, 71, 71, 3038, 3034, 71, 71, 71, 71, 3041, - 3035, 3042, 3043, 3046, 71, 3047, 71, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3044, 3048, 3048, 3045, 43, 43, - 43, 43, 43, 43, 43, 48, 48, 48, 48, 48, - 48, 48, 53, 53, 53, 53, 53, 53, 53, 59, - 59, 59, 59, 59, 59, 59, 64, 64, 64, 64, - 64, 64, 64, 74, 74, 3048, 74, 74, 74, 74, - 141, 141, 3048, 3048, 3048, 141, 141, 143, 143, 3048, + 71, 71, 71, 71, 71, 3022, 71, 3027, 3028, 3030, + 3029, 3032, 71, 71, 71, 71, 71, 3038, 3034, 3035, + 71, 3031, 3033, 3039, 71, 3036, 71, 71, 3042, 3043, + 71, 71, 3045, 71, 3037, 3046, 71, 71, 3044, 3040, + 71, 71, 71, 71, 3047, 3041, 3048, 3049, 3052, 71, + 3053, 71, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3050, + 3054, 3054, 3051, 43, 43, 43, 43, 43, 43, 43, + 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, + 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, + 59, 64, 64, 64, 64, 64, 64, 64, 74, 74, + + 3054, 74, 74, 74, 74, 141, 141, 3054, 3054, 3054, + 141, 141, 143, 143, 3054, 3054, 143, 3054, 143, 145, + 3054, 3054, 3054, 3054, 3054, 145, 148, 148, 3054, 3054, + 3054, 148, 148, 150, 3054, 3054, 3054, 3054, 3054, 150, + 152, 152, 3054, 152, 152, 152, 152, 75, 75, 3054, + 75, 75, 75, 75, 13, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054 - 3048, 143, 3048, 143, 145, 3048, 3048, 3048, 3048, 3048, - 145, 148, 148, 3048, 3048, 3048, 148, 148, 150, 3048, - 3048, 3048, 3048, 3048, 150, 152, 152, 3048, 152, 152, - 152, 152, 75, 75, 3048, 75, 75, 75, 75, 13, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 } ; -static const flex_int16_t yy_chk[5981] = +static const flex_int16_t yy_chk[5996] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2095,7 +2099,7 @@ static const flex_int16_t yy_chk[5981] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3054, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3060, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, @@ -2313,437 +2317,440 @@ static const flex_int16_t yy_chk[5981] = 932, 930, 933, 932, 934, 927, 930, 930, 931, 931, 935, 938, 931, 936, 937, 929, 933, 938, 939, 940, 941, 946, 942, 943, 934, 940, 936, 942, 935, 937, - 945, 947, 949, 945, 948, 941, 947, 943, 939, 948, - 950, 951, 946, 952, 954, 950, 951, 955, 949, 960, - 954, 956, 957, 958, 958, 952, 959, 956, 957, 961, - 962, 962, 961, 955, 963, 959, 964, 960, 965, 966, + 935, 945, 949, 955, 945, 941, 947, 943, 939, 948, + 950, 947, 946, 952, 948, 950, 951, 954, 949, 955, + 956, 951, 957, 954, 959, 952, 956, 960, 957, 958, + 958, 961, 963, 959, 961, 962, 962, 964, 965, 966, - 967, 968, 966, 969, 976, 970, 971, 968, 975, 969, - 970, 971, 963, 967, 972, 964, 973, 977, 965, 972, - 978, 980, 973, 977, 976, 978, 975, 979, 979, 981, - 980, 982, 983, 984, 985, 983, 984, 986, 981, 987, - 988, 989, 990, 991, 994, 985, 995, 989, 990, 982, - 996, 987, 992, 993, 993, 986, 998, 992, 991, 988, - 995, 997, 996, 994, 999, 997, 1000, 1001, 1003, 1004, - 1004, 1008, 1006, 999, 998, 1007, 1009, 1011, 1011, 1010, - 1012, 1009, 1016, 1008, 1016, 1000, 1006, 1003, 1010, 1013, - 1007, 1014, 1001, 1015, 1017, 1013, 1018, 1014, 1015, 1017, + 967, 968, 966, 969, 975, 960, 970, 968, 976, 969, + 963, 970, 971, 967, 972, 973, 964, 971, 965, 972, + 977, 973, 975, 980, 978, 981, 977, 982, 976, 978, + 979, 979, 980, 983, 981, 984, 983, 985, 984, 986, + 987, 988, 992, 989, 990, 982, 991, 992, 985, 989, + 990, 994, 987, 993, 993, 995, 996, 986, 997, 998, + 988, 991, 997, 999, 1000, 1001, 1003, 1006, 996, 995, + 994, 1007, 999, 1004, 1004, 1008, 1012, 998, 13, 1009, + 1010, 1006, 1013, 1000, 1009, 1003, 1007, 1008, 1013, 1010, + 1001, 1011, 1011, 1014, 1018, 1015, 1012, 1017, 1019, 1014, - 1012, 1019, 1020, 1021, 1022, 1023, 1024, 1020, 1025, 1030, - 1018, 1028, 1023, 1027, 1027, 1019, 1029, 1032, 1021, 1040, - 1031, 1024, 1040, 1022, 1030, 1028, 1031, 1025, 1033, 1035, - 1035, 1036, 1039, 1033, 1029, 1041, 1036, 1032, 1037, 1037, - 1042, 1038, 1033, 1043, 1033, 1044, 1039, 1033, 1038, 1045, - 1044, 1046, 1043, 1047, 1041, 1048, 1046, 1051, 1042, 1050, - 1050, 1052, 1051, 1053, 1047, 1054, 1052, 1055, 1045, 1056, - 1054, 1055, 1057, 1058, 1048, 1059, 1061, 1060, 1056, 1062, - 1063, 1064, 1065, 1053, 1066, 1069, 1062, 1057, 1058, 1060, - 1067, 1061, 1063, 1068, 1059, 1070, 1067, 1071, 1073, 1074, + 1015, 1016, 1017, 1016, 1020, 1021, 1022, 1023, 1018, 1020, + 1025, 1024, 1019, 1028, 1023, 1027, 1027, 1029, 1030, 1032, + 1021, 0, 1031, 1035, 1035, 1022, 1024, 1028, 1031, 1025, + 1039, 1033, 1036, 1030, 1041, 1029, 1033, 1036, 1042, 1032, + 1037, 1037, 1038, 1040, 1039, 1033, 1040, 1033, 1043, 1038, + 1033, 1045, 1047, 1041, 1044, 1046, 1042, 1043, 1048, 1044, + 1046, 1050, 1050, 1047, 1051, 1053, 1052, 1054, 1057, 1051, + 1045, 1052, 1054, 1056, 1055, 1058, 1059, 1048, 1055, 1060, + 1062, 1061, 1056, 1057, 1064, 1053, 1063, 1062, 1065, 1066, + 1058, 1060, 1071, 1067, 1069, 1059, 1061, 1068, 1063, 1067, - 1064, 1075, 1066, 1065, 1073, 1069, 1071, 1076, 1068, 1075, - 1078, 1077, 1079, 1074, 1080, 1070, 1077, 1079, 1079, 1082, - 1081, 1086, 1078, 1083, 1083, 1085, 13, 1076, 1088, 1088, - 1086, 1087, 1082, 1080, 1081, 1084, 1089, 1087, 1085, 1091, - 1084, 1089, 1090, 1084, 1084, 1091, 1095, 1092, 1084, 1098, - 1093, 1090, 1092, 1099, 1084, 1093, 1094, 1094, 1084, 1096, - 1096, 1097, 1101, 1100, 1097, 1102, 1097, 1095, 1104, 1098, - 1102, 1099, 1100, 1103, 1105, 1106, 1109, 1139, 1107, 1139, - 1105, 1106, 1101, 1107, 1108, 1109, 1104, 1103, 1108, 1116, - 1109, 1114, 1109, 1112, 1109, 1114, 1109, 1110, 1110, 1111, + 1070, 1071, 1073, 1064, 1074, 1075, 1076, 1066, 1073, 1065, + 1077, 1078, 1068, 1075, 1069, 1077, 1079, 1080, 1074, 1081, + 1070, 1079, 1079, 1078, 1082, 1086, 1076, 1083, 1083, 1085, + 1088, 1088, 0, 1081, 1086, 1087, 1080, 1082, 1084, 1089, + 1090, 1087, 1085, 1084, 1089, 1092, 1084, 1084, 1091, 1090, + 1092, 1084, 1095, 1093, 1091, 1094, 1094, 1084, 1093, 1096, + 1096, 1084, 1097, 1098, 1099, 1097, 1100, 1097, 1101, 1102, + 1103, 1104, 1105, 1095, 1102, 1100, 1107, 1142, 1105, 1106, + 1142, 1107, 1099, 1098, 1103, 1106, 1108, 1109, 1101, 1104, + 1108, 1110, 1110, 1112, 1111, 1111, 1109, 1111, 1114, 1115, - 1111, 1115, 1111, 1117, 1112, 1118, 1119, 1116, 1120, 1121, - 1118, 1118, 1117, 1120, 1123, 1122, 1115, 1124, 1125, 1126, - 1127, 1127, 1128, 1121, 1122, 1126, 1129, 1131, 1119, 1130, - 1128, 1133, 1125, 1123, 1130, 1132, 1124, 1134, 1135, 1137, - 1129, 1131, 1143, 1135, 1132, 1136, 1136, 1138, 1138, 1133, - 1141, 1142, 1146, 1141, 1137, 1144, 1142, 1145, 1145, 1147, - 1147, 1143, 1134, 1149, 1144, 1148, 1148, 1150, 1149, 1151, - 1152, 1152, 1146, 1153, 1154, 1155, 1156, 1154, 1157, 1159, - 1158, 1156, 1158, 1161, 1162, 0, 1161, 1157, 1150, 1163, - 1151, 1164, 1165, 1153, 1163, 1155, 1164, 1159, 1166, 1162, + 1116, 1109, 1114, 1109, 1112, 1109, 1117, 1109, 1119, 1122, + 1124, 1118, 1123, 1120, 1115, 1117, 1118, 1118, 1116, 1120, + 1121, 1123, 1125, 1122, 1126, 1121, 1127, 1128, 1128, 1124, + 1119, 1129, 1127, 1130, 1132, 1131, 1133, 1134, 1126, 1129, + 1131, 1125, 1135, 1138, 1136, 1133, 1144, 1130, 1132, 1136, + 1137, 1137, 1139, 1139, 1140, 1134, 1140, 1143, 1138, 1145, + 1146, 1146, 1143, 1147, 1151, 1144, 1152, 1135, 1145, 1148, + 1148, 1149, 1149, 1150, 1153, 1153, 1154, 1155, 1150, 1156, + 1155, 1157, 1158, 1147, 1160, 1151, 1157, 1152, 1159, 1162, + 1159, 1158, 1162, 1163, 0, 1164, 1154, 1166, 1165, 1156, - 1165, 1167, 1169, 1166, 1168, 1168, 1167, 1169, 1170, 1171, - 1172, 1173, 1175, 1176, 1178, 1171, 1177, 1172, 1175, 1176, - 1178, 1177, 1179, 1180, 1173, 1181, 1170, 1182, 1182, 1183, - 1185, 1179, 1186, 1187, 1188, 1189, 1181, 1191, 1192, 1187, - 1188, 1189, 1180, 1191, 1193, 1194, 1195, 1196, 1198, 1183, - 1185, 1199, 1192, 1197, 1197, 1186, 1200, 1194, 1192, 1203, - 1195, 1201, 1202, 1202, 1193, 1196, 1201, 1204, 1198, 1206, - 0, 1208, 1204, 1207, 1200, 1209, 1199, 1210, 1207, 1207, - 1211, 1212, 1203, 1213, 1209, 1210, 1216, 1214, 1206, 1208, - 1222, 1215, 1214, 1215, 1211, 1214, 1212, 1218, 1213, 1220, + 1164, 1167, 1160, 1165, 1168, 1166, 1167, 1170, 1163, 1168, + 1169, 1169, 1170, 1171, 1172, 1173, 1174, 1176, 1177, 1179, + 1172, 1178, 1173, 1176, 1177, 1179, 1178, 1180, 1181, 1174, + 1182, 1171, 1183, 1183, 1184, 1186, 1180, 1187, 1188, 1189, + 1190, 1182, 1192, 1193, 1188, 1189, 1190, 1181, 1192, 1194, + 1195, 1196, 1197, 1199, 1184, 1186, 1200, 1193, 1198, 1198, + 1187, 1201, 1195, 1193, 1204, 1196, 1202, 1203, 1203, 1194, + 1197, 1202, 1205, 1199, 1207, 0, 1209, 1205, 1208, 1201, + 1210, 1200, 1211, 1208, 1208, 1212, 1213, 1204, 1214, 1210, + 1211, 1217, 1215, 1207, 1209, 1223, 1216, 1215, 1216, 1212, - 1216, 1213, 1219, 1218, 1223, 1224, 1219, 1221, 1226, 1222, - 1220, 1225, 1221, 1221, 1227, 1228, 1225, 1230, 1231, 1227, - 1232, 1233, 1233, 1224, 1234, 1235, 1226, 1236, 1234, 1238, - 1223, 1230, 1239, 1237, 1240, 1228, 1231, 1241, 1232, 1237, - 1242, 1238, 1243, 1235, 1244, 1246, 1236, 1245, 1240, 1244, - 1246, 1239, 1241, 1247, 1245, 1242, 1248, 1249, 1249, 1250, - 1251, 1243, 1252, 1253, 1254, 1248, 1251, 1255, 1253, 1262, - 1254, 1247, 1263, 1255, 1250, 1256, 1256, 1257, 1257, 1259, - 1259, 1260, 1261, 1252, 1264, 1260, 1263, 1262, 1265, 1266, - 1266, 1261, 1267, 1268, 1270, 1265, 1271, 1269, 1272, 1264, + 1215, 1213, 1219, 1214, 1221, 1217, 1214, 1220, 1219, 1224, + 1225, 1220, 1222, 1227, 1223, 1221, 1226, 1222, 1222, 1228, + 1229, 1226, 1231, 1232, 1228, 1233, 1234, 1234, 1225, 1235, + 1236, 1227, 1237, 1235, 1239, 1224, 1231, 1240, 1238, 1241, + 1229, 1232, 1242, 1233, 1238, 1243, 1239, 1244, 1236, 1245, + 1247, 1237, 1246, 1241, 1245, 1247, 1240, 1242, 1248, 1246, + 1243, 1249, 1250, 1250, 1251, 1252, 1244, 1253, 1254, 1255, + 1249, 1252, 1256, 1254, 1263, 1255, 1248, 1264, 1256, 1251, + 1257, 1257, 1258, 1258, 1260, 1260, 1261, 1262, 1253, 1265, + 1261, 1264, 1263, 1266, 1267, 1267, 1262, 1268, 1269, 1271, - 1273, 1268, 1269, 1272, 1272, 1273, 1273, 1274, 1270, 1275, - 1275, 1276, 1267, 1277, 1278, 1271, 1279, 1280, 1281, 1282, - 1283, 1279, 1285, 1278, 1284, 1286, 1283, 1274, 1287, 1284, - 1276, 1286, 1277, 1288, 1289, 1290, 1280, 1282, 1281, 1288, - 1289, 1291, 1292, 1293, 1294, 1295, 0, 1287, 1285, 1296, - 1297, 1297, 1298, 1299, 1290, 1298, 1300, 1300, 1294, 1303, - 1291, 1292, 1293, 1303, 1296, 1299, 1295, 1301, 1301, 1302, - 1304, 1305, 1306, 1307, 1302, 1307, 1309, 1311, 1310, 1307, - 1305, 1309, 1312, 1304, 1314, 1306, 1313, 1313, 1315, 1314, - 1316, 1317, 1307, 1310, 1315, 1318, 1321, 1311, 1312, 1319, + 1266, 1272, 1270, 1273, 1265, 1274, 1269, 1270, 1273, 1273, + 1274, 1274, 1275, 1271, 1276, 1276, 1277, 1268, 1278, 1279, + 1272, 1280, 1281, 1282, 1283, 1284, 1280, 1286, 1279, 1285, + 1287, 1284, 1275, 1288, 1285, 1277, 1287, 1278, 1289, 1290, + 1291, 1281, 1283, 1282, 1289, 1290, 1292, 1293, 1294, 1295, + 1296, 0, 1288, 1286, 1297, 1298, 1298, 1299, 1300, 1291, + 1299, 1301, 1301, 1295, 1304, 1292, 1293, 1294, 1304, 1297, + 1300, 1296, 1302, 1302, 1303, 1305, 1306, 1307, 1308, 1303, + 1308, 1310, 1311, 1312, 1308, 1306, 1310, 1313, 1305, 1314, + 1307, 1315, 1315, 1318, 1316, 1317, 1319, 1308, 1312, 1316, - 1318, 1322, 1320, 1319, 1317, 1316, 1320, 1323, 1324, 1325, - 1325, 1327, 1329, 1330, 1324, 1333, 1321, 1332, 1330, 1322, - 1331, 1331, 1339, 1332, 1335, 1335, 1340, 1323, 1337, 1327, - 1343, 1337, 1344, 1329, 1346, 1333, 1338, 1338, 1339, 1347, - 1342, 1344, 1340, 1342, 1345, 1345, 1348, 1349, 1350, 1346, - 1343, 1352, 1349, 1351, 1351, 1353, 1354, 1355, 1355, 1356, - 1347, 1357, 1350, 1358, 1362, 1348, 1364, 1359, 1358, 1352, - 1353, 1360, 1360, 1356, 1361, 1363, 1363, 1367, 1361, 1357, - 1365, 1354, 1359, 1366, 1362, 1368, 1371, 1366, 1364, 1372, - 1368, 1365, 1370, 1370, 1373, 1374, 1367, 1375, 1376, 1376, + 1321, 1317, 1311, 1323, 1321, 1314, 1320, 1313, 1318, 1319, + 1322, 1320, 1324, 1325, 1322, 1326, 1327, 1327, 1329, 1331, + 1332, 1326, 1334, 1323, 1335, 1332, 1333, 1333, 1334, 1341, + 1324, 1337, 1337, 1325, 1339, 1342, 1329, 1339, 1340, 1340, + 1331, 1345, 1348, 1344, 1335, 1341, 1344, 1346, 1347, 1347, + 1349, 1342, 1352, 1350, 1351, 1354, 1346, 1348, 1356, 1351, + 1355, 1345, 1353, 1353, 1357, 1357, 1352, 1358, 1359, 1360, + 1361, 1349, 1350, 1354, 1360, 1355, 1362, 1362, 1363, 1364, + 1366, 1358, 1363, 1356, 1367, 1361, 1359, 1365, 1365, 1368, + 1369, 1370, 1373, 1368, 1374, 1367, 1370, 1372, 1372, 1364, - 1377, 1378, 1380, 1372, 1371, 1377, 1379, 1381, 1382, 1374, - 1385, 1380, 1381, 1373, 1373, 1383, 1385, 1383, 1384, 1386, - 1389, 1378, 1375, 1384, 1387, 1391, 1379, 1392, 1382, 1395, - 1387, 1390, 1390, 1392, 1389, 1394, 1396, 1396, 1398, 1386, - 1394, 1397, 1397, 1399, 1391, 1400, 1401, 1402, 1402, 1401, - 1403, 1404, 1398, 1395, 1407, 1412, 1416, 1416, 1406, 1407, - 1400, 1399, 1403, 1405, 1406, 1408, 1405, 1410, 1408, 1405, - 1411, 1404, 1414, 1418, 1413, 1411, 1410, 1413, 1414, 1418, - 1412, 1405, 1415, 1419, 1408, 1417, 1417, 1415, 1419, 1420, - 1421, 1422, 1423, 1424, 1425, 1426, 1424, 1429, 1427, 1428, + 1375, 1376, 1366, 1377, 1378, 1378, 1379, 1380, 1374, 1369, + 1373, 1379, 1381, 1382, 1384, 1376, 1383, 1388, 0, 1375, + 1375, 1383, 1382, 1385, 1386, 1385, 1391, 1380, 1377, 1386, + 1387, 1393, 1381, 1389, 1384, 1397, 1387, 1388, 1394, 1389, + 1391, 1392, 1392, 1396, 1394, 1398, 1398, 1400, 1396, 1401, + 1393, 1399, 1399, 1402, 1403, 1404, 1404, 1403, 1405, 1397, + 1406, 1400, 1414, 1407, 0, 1408, 1407, 1401, 1402, 1407, + 1405, 1408, 1409, 1410, 1412, 1415, 1410, 1409, 1415, 1413, + 1406, 1407, 1416, 1412, 1413, 1417, 1422, 1414, 1416, 1423, + 1417, 1420, 1410, 1418, 1418, 1419, 1419, 1420, 1421, 1422, - 1425, 1426, 1420, 1427, 1430, 1428, 1431, 1431, 1421, 1430, - 1422, 1432, 1423, 1433, 1434, 1435, 1432, 1438, 1436, 1437, - 1429, 1440, 1441, 1439, 1442, 1443, 1444, 1440, 1447, 1438, - 1452, 1433, 1436, 1437, 1434, 1435, 1439, 1446, 1446, 1443, - 1448, 1450, 1441, 1451, 1442, 1448, 1453, 1444, 1447, 1449, - 1449, 1454, 1455, 1458, 1452, 1456, 1450, 1451, 1460, 1457, - 1454, 1462, 1456, 1463, 1453, 1467, 1463, 1455, 1457, 1458, - 1466, 1457, 1470, 1460, 1464, 1464, 1465, 1465, 1460, 1469, - 1469, 1468, 1466, 1467, 1468, 1470, 1462, 1471, 1472, 1473, - 1474, 1475, 1476, 1472, 1473, 1477, 1478, 1480, 1481, 1481, + 1424, 1425, 1426, 1421, 1427, 1426, 1428, 1423, 1429, 1430, + 1427, 1431, 1428, 1429, 1435, 1430, 1436, 1432, 1437, 1424, + 1434, 1425, 1432, 1433, 1433, 1434, 1438, 1439, 1443, 1442, + 1440, 1441, 1435, 1444, 1431, 1442, 1436, 1445, 1437, 1446, + 1438, 1439, 1440, 1449, 1441, 1448, 1448, 1450, 1443, 1451, + 1451, 1445, 1450, 1444, 1452, 1454, 1453, 1455, 1456, 1457, + 1446, 1458, 1460, 1449, 1459, 1462, 1464, 1456, 1458, 1452, + 1453, 1466, 1466, 1459, 1457, 1455, 1459, 1468, 1460, 1454, + 1462, 1465, 1467, 1467, 1465, 1462, 1469, 1470, 1472, 1468, + 1470, 1464, 1471, 1471, 1473, 1474, 1476, 1475, 1477, 1478, - 1482, 1476, 1479, 1480, 1483, 1478, 1471, 1475, 1478, 1474, - 1484, 1479, 1485, 1486, 1477, 1487, 1490, 1483, 1491, 1493, - 1482, 1492, 1492, 1494, 1498, 1495, 1485, 1487, 1484, 1486, - 1495, 1497, 1494, 1496, 1496, 1493, 1491, 1499, 1500, 1501, - 1497, 1490, 1498, 1497, 1501, 1501, 1503, 1504, 1496, 1505, - 1506, 1507, 1508, 1509, 1509, 1506, 1500, 1507, 1499, 1510, - 1503, 1511, 1504, 1512, 1515, 1510, 1511, 1513, 1516, 1512, - 1508, 1505, 1517, 1513, 1518, 1520, 1519, 1524, 1517, 1519, - 1522, 1520, 1516, 1525, 1515, 1519, 1526, 1518, 1522, 1527, - 1528, 1529, 1530, 1531, 1526, 1533, 1524, 1535, 1527, 1532, + 1474, 1472, 1475, 1479, 1469, 1482, 1484, 1480, 1478, 1481, + 1485, 1482, 1486, 1473, 1477, 1476, 1480, 1487, 1481, 1480, + 1483, 1483, 1479, 1485, 1488, 1489, 1484, 1492, 1493, 1495, + 1486, 1487, 1494, 1494, 1496, 1499, 1497, 1489, 1498, 1498, + 1488, 1497, 1500, 1496, 1499, 1495, 1493, 1499, 1501, 1502, + 1504, 1503, 1492, 1498, 1508, 1504, 1504, 1506, 1507, 1509, + 1500, 1510, 1511, 0, 1509, 1512, 1512, 1510, 1501, 1503, + 1502, 1506, 1513, 1507, 1514, 1515, 1508, 1516, 1513, 1514, + 1511, 1515, 1518, 1516, 1519, 1520, 1521, 1522, 1523, 1525, + 1522, 1520, 1527, 1528, 1523, 1529, 1522, 1525, 1519, 1521, - 1532, 1533, 1525, 1528, 1529, 1534, 1530, 1531, 1536, 1537, - 1535, 1534, 1538, 1539, 1540, 1541, 1542, 1543, 1545, 1545, - 1540, 1532, 1546, 1552, 0, 1547, 1539, 1537, 1536, 1547, - 1554, 1538, 1542, 1548, 1549, 1543, 1550, 1541, 1548, 1549, - 1551, 1550, 1546, 1555, 1555, 1554, 1552, 1556, 1557, 1551, - 1558, 1559, 1559, 1560, 1561, 1564, 1562, 1565, 1563, 1566, - 1557, 1561, 1568, 1567, 1659, 1566, 1556, 1560, 1562, 1558, - 1563, 1659, 1569, 1571, 1564, 1567, 1571, 1565, 1569, 1575, - 1568, 1570, 1570, 1572, 1572, 1574, 1576, 1578, 1575, 1579, - 1574, 1579, 1576, 1577, 1577, 1580, 1581, 1582, 1580, 1578, + 1530, 1531, 1518, 1529, 1532, 1533, 1534, 1535, 1535, 1530, + 1536, 1527, 1528, 1538, 1531, 1537, 1536, 1532, 1539, 1533, + 1534, 1537, 1540, 1541, 1542, 1543, 1538, 1544, 1545, 1535, + 1546, 1543, 1548, 1548, 1549, 1550, 1551, 1542, 1539, 1550, + 1540, 1551, 1541, 1554, 1545, 1552, 1553, 1555, 1546, 1544, + 1552, 1553, 1554, 1557, 1549, 1558, 1558, 1559, 1561, 1560, + 1562, 1562, 1564, 1565, 1563, 1567, 1568, 1566, 1557, 1564, + 1555, 1560, 1571, 1570, 1569, 1565, 1559, 1561, 1563, 1566, + 1569, 1572, 1573, 1573, 1567, 1570, 1568, 1572, 1574, 1577, + 1571, 1574, 1575, 1575, 1577, 1578, 1579, 1580, 1580, 1581, - 1583, 1585, 1584, 1586, 1589, 1587, 1585, 1588, 1591, 1589, - 1593, 1597, 1586, 0, 1590, 1593, 1581, 1587, 1583, 1582, - 1584, 1592, 1588, 1590, 1594, 1596, 1592, 1598, 1591, 1595, - 1595, 1596, 1597, 1592, 1599, 1600, 1590, 1602, 1601, 1594, - 1601, 1603, 1603, 1604, 1604, 1606, 1598, 1605, 1605, 1609, - 1599, 1602, 1610, 1602, 1617, 1600, 1607, 1607, 1608, 1608, - 1611, 1611, 1612, 1613, 1614, 1606, 1612, 1614, 1616, 1613, - 1609, 1618, 1617, 1610, 1616, 1619, 1620, 1618, 1623, 1620, - 1621, 1621, 1622, 1622, 1623, 1624, 1625, 1626, 1627, 1628, - 1630, 1631, 1637, 1634, 1627, 1630, 1630, 1624, 1624, 1624, + 1584, 1582, 1579, 1582, 1578, 1583, 1585, 1586, 1583, 1587, + 1588, 1581, 1589, 1592, 1590, 1588, 1591, 1594, 1592, 1597, + 1584, 1589, 1600, 1593, 1595, 1586, 1590, 1587, 1585, 1595, + 1596, 1591, 1593, 1601, 1597, 1596, 1595, 1594, 1598, 1598, + 1599, 1602, 1603, 1600, 1605, 1593, 1599, 1604, 1609, 1604, + 1606, 1606, 1601, 1607, 1607, 1608, 1608, 1602, 1605, 1612, + 1605, 1613, 1603, 1610, 1610, 1611, 1611, 1615, 1609, 1614, + 1614, 1615, 1616, 1617, 1620, 1619, 1617, 1621, 1616, 1622, + 1612, 1619, 1613, 1621, 1623, 1624, 1624, 1623, 1625, 1625, + 1626, 1628, 1620, 1627, 1629, 1630, 1626, 1631, 1635, 1634, - 1619, 1632, 1633, 1632, 1624, 1631, 1625, 1626, 1634, 1628, - 1635, 1636, 1637, 1633, 1638, 1640, 1635, 1639, 1639, 1642, - 1636, 1641, 1641, 1643, 1644, 1644, 1645, 1645, 1646, 1649, - 1649, 1650, 1654, 1651, 1653, 1638, 1656, 1656, 1655, 1642, - 1657, 1640, 1651, 1653, 1655, 1643, 1660, 1658, 1646, 1661, - 1662, 1662, 1663, 1654, 1664, 1660, 1650, 1668, 1666, 1667, - 1669, 1657, 1658, 1666, 1673, 1667, 1670, 1669, 1671, 1673, - 1664, 1675, 1670, 1674, 1671, 1661, 1676, 1668, 1663, 1672, - 1672, 1677, 1674, 1678, 1679, 1680, 1678, 1681, 1681, 1683, - 1682, 1675, 1684, 1677, 1685, 1676, 1682, 1687, 1685, 1688, + 1635, 1630, 1641, 1633, 1622, 1627, 1627, 1627, 1633, 1633, + 1636, 1628, 1627, 1634, 1629, 1637, 1638, 1631, 1639, 1640, + 1643, 1636, 1638, 1641, 1642, 1642, 1646, 1639, 1644, 1644, + 1637, 1645, 1647, 1647, 1648, 1648, 1649, 1652, 1652, 1640, + 1653, 1654, 1657, 1656, 1659, 1659, 1643, 1658, 1646, 1660, + 1654, 1645, 1656, 1658, 1661, 1662, 1649, 1663, 1664, 1665, + 1665, 1666, 1662, 1657, 1667, 1653, 1663, 1669, 1670, 1661, + 1660, 1671, 1669, 1673, 1670, 1672, 1676, 1674, 1678, 1673, + 1667, 1676, 1672, 1674, 1664, 1675, 1675, 1666, 1677, 1679, + 1680, 1671, 1681, 1682, 1683, 1681, 1687, 1677, 1678, 1684, - 1689, 1691, 1679, 1690, 1690, 1689, 1694, 1684, 1692, 1683, - 1702, 1680, 1695, 1696, 1685, 1697, 1695, 1687, 1699, 1696, - 1691, 1688, 1699, 1692, 1697, 1694, 1698, 1698, 1700, 1701, - 1701, 1702, 1703, 1704, 1706, 1705, 1707, 1708, 1709, 1700, - 1705, 1713, 1710, 1708, 1700, 1713, 1703, 1710, 1711, 1711, - 1712, 1712, 1704, 1709, 1706, 1715, 1707, 1716, 1717, 1718, - 1718, 1719, 1719, 1721, 1715, 1720, 1722, 1723, 1716, 1721, - 1720, 1720, 1722, 1716, 1724, 1725, 1726, 1728, 1717, 1724, - 1729, 1731, 1726, 1730, 1729, 1732, 1733, 1725, 1734, 1728, - 1735, 1732, 1737, 1723, 1734, 1730, 1738, 1741, 1739, 1745, + 1684, 1685, 1680, 1686, 1688, 1689, 1691, 1685, 1679, 1689, + 1692, 1682, 1693, 1694, 1694, 1686, 1687, 1693, 1695, 1688, + 1683, 1696, 1698, 1699, 1700, 1689, 1691, 1699, 1704, 1701, + 1700, 1703, 1692, 1702, 1702, 1703, 1696, 1695, 1701, 1704, + 1706, 1698, 1705, 1705, 1704, 1707, 1708, 1709, 1710, 1711, + 1712, 1713, 1709, 1714, 1715, 1715, 1712, 1721, 1714, 1707, + 1717, 1706, 1716, 1716, 1717, 1708, 1713, 1719, 1710, 1711, + 1720, 1722, 1722, 1723, 1723, 1727, 1719, 1721, 1724, 1725, + 1735, 1720, 1726, 1724, 1724, 1725, 1720, 1728, 1726, 1730, + 1729, 1732, 1728, 1733, 1734, 1730, 1737, 1733, 1736, 1739, - 1741, 1746, 1735, 1739, 1737, 1755, 1731, 1746, 1733, 1742, - 1742, 1743, 1743, 1744, 1744, 1738, 1747, 1755, 1748, 1745, - 1749, 1750, 1747, 1748, 1752, 1754, 1749, 1758, 1754, 1752, - 1750, 1756, 1756, 1759, 1762, 1760, 1761, 1761, 1766, 1758, - 1760, 1763, 1764, 1762, 1767, 1759, 1763, 1764, 1765, 1765, - 1768, 1769, 1770, 1767, 1771, 1772, 1770, 1773, 1766, 1771, - 1774, 1772, 1775, 1776, 1778, 1778, 1779, 1783, 1768, 1774, - 1769, 1784, 1780, 1781, 1781, 1773, 1778, 1776, 1782, 1783, - 1775, 1780, 1786, 1785, 1779, 1789, 1789, 1782, 1785, 1792, - 1791, 1793, 1784, 1791, 1795, 1786, 1796, 1797, 1798, 1799, + 1741, 1727, 1729, 1732, 1736, 1735, 1734, 1738, 1742, 1743, + 1749, 1739, 1741, 1738, 1743, 1804, 1745, 1804, 1737, 1745, + 1746, 1746, 1747, 1747, 1748, 1748, 1750, 1742, 1751, 1753, + 1749, 1752, 1750, 1754, 1751, 1753, 1752, 1758, 1756, 1759, + 1758, 1762, 1754, 1756, 1760, 1760, 1763, 1764, 1765, 1765, + 1766, 1759, 1764, 1762, 1770, 1767, 1768, 1771, 1763, 1766, + 1767, 1768, 1769, 1769, 1772, 1773, 1771, 1774, 1775, 1776, + 1777, 1774, 1778, 1775, 1770, 1776, 1779, 1780, 1782, 1782, + 1783, 1778, 1772, 1784, 1773, 1785, 1785, 1786, 1777, 1787, + 1782, 1780, 1784, 1788, 1779, 1789, 1786, 1790, 1783, 1796, - 1799, 1804, 1800, 1797, 1800, 1792, 1802, 1793, 1804, 1795, - 1796, 1801, 1801, 1805, 1802, 1798, 1806, 1806, 1807, 1808, - 1809, 1812, 1810, 1811, 1813, 1814, 1816, 1807, 0, 1817, - 1819, 1814, 1809, 1805, 1810, 1811, 1818, 1818, 1820, 1813, - 1808, 1817, 1821, 1823, 1814, 1821, 1816, 1812, 1819, 1822, - 1825, 1826, 1827, 1826, 1822, 1825, 1828, 1829, 1820, 1831, - 1833, 1828, 1834, 1823, 1829, 1835, 1837, 1836, 1831, 1836, - 1827, 1834, 1839, 1840, 1839, 1841, 1841, 1835, 1833, 1842, - 1844, 1843, 1844, 1845, 1846, 1837, 1843, 1840, 1845, 1846, - 1847, 1848, 1849, 1851, 1850, 1852, 1854, 1858, 1849, 1850, + 1789, 1787, 1793, 1793, 1795, 1797, 1800, 1795, 1799, 1802, + 1790, 1801, 1803, 1803, 1788, 1796, 1806, 1801, 1805, 1805, + 1800, 1797, 1808, 1799, 1806, 1809, 1802, 1810, 1810, 1808, + 1811, 1812, 1813, 1816, 1814, 1815, 1817, 1818, 1820, 1811, + 0, 1821, 1823, 1818, 1813, 1809, 1814, 1815, 1822, 1822, + 1824, 1817, 1812, 1821, 1825, 1827, 1818, 1825, 1820, 1816, + 1823, 1826, 1829, 1830, 1831, 1830, 1826, 1829, 1832, 1833, + 1824, 1835, 1837, 1832, 1838, 1827, 1833, 1839, 1841, 1840, + 1835, 1840, 1831, 1838, 1843, 1844, 1843, 1845, 1845, 1839, + 1837, 1846, 1848, 1847, 1848, 1849, 1850, 1841, 1847, 1844, - 1855, 1856, 1856, 1852, 1859, 1842, 1851, 1860, 1847, 1857, - 1857, 1848, 1858, 1860, 1855, 1854, 1861, 1862, 1863, 1862, - 1865, 1861, 1864, 1864, 1859, 1870, 1863, 1866, 1866, 1867, - 1867, 1868, 1865, 1869, 1863, 1872, 1874, 1873, 1869, 1873, - 1868, 1877, 1879, 1870, 1872, 1875, 1876, 1872, 1884, 1883, - 1875, 1875, 1887, 1877, 1879, 1876, 1880, 1874, 1881, 1888, - 1885, 1880, 1883, 1881, 1886, 1886, 1889, 1890, 1884, 1885, - 1887, 1891, 1893, 1894, 1895, 1896, 1904, 1888, 1897, 1898, - 1896, 1890, 1889, 1897, 1893, 1894, 1891, 1901, 1898, 1903, - 1905, 1906, 1907, 1901, 1895, 1903, 1909, 1909, 1908, 1904, + 1849, 1850, 1851, 1852, 1853, 1855, 1854, 1856, 1858, 1862, + 1853, 1854, 1859, 1860, 1860, 1856, 1863, 1846, 1855, 1864, + 1851, 1861, 1861, 1852, 1862, 1864, 1859, 1858, 1865, 1866, + 1867, 1866, 1870, 1865, 1868, 1868, 1863, 1875, 1867, 1869, + 1869, 1871, 1871, 1873, 1870, 1874, 1867, 1872, 1872, 1877, + 1874, 1878, 1873, 1878, 1879, 1875, 1881, 1880, 1877, 1882, + 1884, 1877, 1880, 1880, 1885, 1881, 1888, 1889, 1886, 1885, + 1892, 1882, 1884, 1886, 1890, 1879, 1891, 1891, 1893, 1888, + 1895, 1894, 1900, 1890, 1896, 1901, 1898, 1889, 1892, 1899, + 1901, 1909, 1910, 1912, 1895, 1902, 1893, 1894, 1898, 1896, - 1912, 1910, 1911, 1911, 1913, 1905, 1901, 1908, 1913, 1906, - 1910, 1914, 1915, 1921, 0, 1916, 1914, 1907, 1917, 1912, - 1916, 1916, 1918, 1919, 1917, 1915, 1919, 1920, 1918, 1924, - 1924, 1925, 1925, 1921, 1926, 1920, 1927, 1927, 1928, 1928, - 1929, 1930, 1931, 1926, 1932, 1942, 1925, 1939, 1931, 1932, - 1933, 1933, 1929, 1934, 1934, 1935, 1936, 1925, 1943, 1930, - 1935, 1938, 1936, 1943, 1940, 1938, 1944, 1939, 1940, 1945, - 1942, 1946, 1947, 1949, 1950, 1948, 1946, 1951, 1953, 1950, - 1952, 1952, 1953, 1954, 1945, 1956, 1958, 1955, 1957, 1944, - 1947, 1948, 1955, 1949, 1960, 1961, 1959, 1965, 1954, 1951, + 1902, 1899, 1900, 1903, 1906, 1908, 1911, 1910, 1913, 1917, + 1906, 1908, 1903, 1915, 1909, 1914, 1914, 1913, 1912, 1916, + 1916, 1918, 1915, 1906, 1911, 1918, 1919, 1920, 1917, 1921, + 1922, 1919, 1923, 1925, 1921, 1921, 1922, 1926, 1923, 1924, + 1920, 1925, 1924, 1929, 1929, 1930, 1930, 1931, 1932, 1932, + 1933, 1933, 1934, 1936, 1935, 0, 1931, 1926, 1937, 1936, + 1930, 1938, 1938, 1937, 1934, 1939, 1939, 1944, 1940, 1941, + 1943, 1930, 1935, 1940, 1943, 1941, 1945, 1947, 1948, 1950, + 1945, 1949, 1952, 1948, 1951, 1953, 1954, 1944, 1955, 1951, + 1956, 1957, 1957, 1955, 1950, 1958, 1959, 1961, 1960, 1958, - 1957, 1959, 1962, 1962, 1964, 1958, 1966, 1960, 1967, 1968, - 1969, 1956, 1964, 1961, 1970, 1971, 1965, 1972, 1978, 1974, - 1975, 1975, 2139, 1976, 1977, 1966, 1976, 1971, 1979, 1969, - 2139, 1967, 1978, 1968, 1974, 1970, 1983, 1977, 1972, 1980, - 1980, 1979, 1981, 1981, 1982, 1982, 1984, 1985, 1985, 1986, - 1988, 1983, 1987, 1987, 1991, 1988, 1992, 1990, 1986, 1984, - 1993, 1986, 1990, 1994, 1994, 1995, 1995, 1996, 1997, 1997, - 1998, 2004, 1993, 2007, 1991, 2000, 1992, 1999, 1999, 2001, - 2002, 2002, 2003, 2003, 2001, 2004, 1996, 2005, 1998, 2006, - 2000, 2011, 2007, 2009, 2010, 2010, 2005, 2013, 2009, 2012, + 1952, 1953, 1947, 1960, 1949, 1962, 1954, 1963, 1964, 1965, + 1966, 1959, 1956, 1964, 1967, 1967, 1969, 1962, 1970, 1971, + 1972, 1973, 1965, 1961, 1969, 1974, 1963, 1975, 1966, 1976, + 1977, 1979, 1980, 1980, 1982, 1983, 1981, 1970, 1971, 1981, + 1984, 1976, 0, 1972, 1974, 1973, 1979, 1982, 1975, 1983, + 1988, 1977, 0, 1984, 1985, 1985, 1986, 1986, 1987, 1987, + 1989, 1990, 1990, 1991, 1993, 1988, 1992, 1992, 1996, 1993, + 1997, 1995, 1991, 1989, 1998, 1991, 1995, 1999, 1999, 2000, + 2000, 2001, 2002, 2002, 2003, 2009, 1998, 2012, 1996, 2005, + 1997, 2004, 2004, 2006, 2007, 2007, 2008, 2008, 2006, 2009, - 2012, 2014, 2015, 2006, 2018, 2015, 2019, 2014, 2016, 2016, - 2011, 2017, 2017, 2020, 2023, 2013, 2021, 2021, 2024, 2028, - 2025, 2019, 2026, 2018, 2016, 2029, 2026, 2027, 2027, 2030, - 2032, 2032, 2020, 2033, 2023, 2025, 2034, 2035, 2028, 2036, - 2029, 2024, 2037, 2034, 2030, 2038, 2039, 2039, 2041, 2040, - 2041, 2035, 2042, 2033, 2044, 2042, 2045, 2036, 2040, 2046, - 2037, 2045, 2047, 2048, 2046, 2049, 2044, 2051, 2050, 2053, - 2042, 2038, 2042, 2050, 2053, 2054, 2048, 2055, 2056, 2057, - 2054, 2061, 2058, 2062, 2056, 2059, 2049, 2047, 2058, 2060, - 2059, 2068, 2055, 2051, 2060, 2063, 2062, 2073, 2063, 2064, + 2001, 2010, 2003, 2011, 2005, 2016, 2012, 2014, 2015, 2015, + 2010, 2018, 2014, 2017, 2017, 2019, 2020, 2011, 2023, 2020, + 2024, 2019, 2021, 2021, 2016, 2022, 2022, 2025, 2028, 2018, + 2026, 2026, 2029, 2033, 2030, 2024, 2031, 2023, 2021, 2034, + 2031, 2032, 2032, 2035, 2038, 2038, 2025, 2039, 2028, 2030, + 2040, 2041, 2033, 2042, 2034, 2029, 2043, 2040, 2035, 2044, + 2045, 2045, 2047, 2046, 2047, 2041, 2048, 2039, 2050, 2048, + 2051, 2042, 2046, 2052, 2043, 2051, 2053, 2054, 2052, 2055, + 2050, 2057, 2056, 2059, 2048, 2044, 2048, 2056, 2059, 2060, + 2054, 2061, 2062, 2063, 2060, 2067, 2064, 2068, 2062, 2065, - 2057, 2065, 2066, 2067, 2079, 2068, 2061, 2069, 2064, 2070, - 2065, 2066, 2067, 2069, 2071, 2070, 2075, 2073, 2071, 2076, - 2076, 2077, 2078, 2078, 2079, 2075, 2079, 2077, 2081, 2082, - 2085, 2078, 2083, 2083, 2084, 2087, 2088, 2092, 2089, 2085, - 2092, 2093, 2090, 2094, 2081, 2082, 2093, 2087, 2095, 2084, - 2096, 2096, 2088, 2089, 2090, 2097, 2097, 2099, 2099, 2100, - 2095, 2101, 2100, 2094, 2102, 2103, 2101, 2104, 2104, 2105, - 2102, 2103, 2106, 2106, 2107, 2108, 2109, 2110, 2110, 2111, - 2112, 0, 2113, 2105, 2115, 2111, 2107, 2113, 2115, 2108, - 2116, 2117, 2117, 2116, 2112, 2109, 2118, 2119, 2120, 2121, + 2055, 2053, 2064, 2066, 2065, 2074, 2061, 2057, 2066, 2069, + 2068, 2079, 2069, 2070, 2063, 2071, 2072, 2073, 2085, 2074, + 2067, 2075, 2070, 2076, 2071, 2072, 2073, 2075, 2077, 2076, + 2081, 2079, 2077, 2082, 2082, 2083, 2084, 2084, 2085, 2081, + 2085, 2083, 2087, 2088, 2091, 2084, 2089, 2089, 2090, 2093, + 2094, 2098, 2095, 2091, 2098, 2099, 2096, 2100, 2087, 2088, + 2099, 2093, 2101, 2090, 2102, 2102, 2094, 2095, 2096, 2103, + 2103, 2105, 2105, 2106, 2101, 2107, 2106, 2100, 2108, 2109, + 2107, 2110, 2110, 2111, 2108, 2109, 2112, 2112, 2113, 2114, + 2115, 2116, 2116, 2117, 2118, 0, 2119, 2111, 2121, 2117, - 2123, 2118, 2125, 2121, 2122, 2122, 2119, 2125, 2126, 2127, - 2128, 2129, 2130, 2123, 2131, 2129, 2132, 2133, 2120, 2131, - 2134, 2136, 2132, 2133, 2128, 2137, 2143, 2138, 2126, 2127, - 2137, 2146, 2130, 2138, 2140, 2149, 2140, 2136, 2134, 2149, - 2143, 2144, 2144, 2145, 2147, 2147, 2145, 2150, 2151, 2152, - 2152, 2158, 2153, 2150, 2156, 2156, 2160, 2146, 2161, 2164, - 2151, 2153, 2165, 2166, 2164, 2174, 2167, 2175, 2166, 2158, - 2160, 2167, 2168, 2168, 2161, 2170, 2170, 2172, 2173, 2173, - 2176, 2174, 2178, 2172, 2179, 2176, 2180, 2180, 2165, 2175, - 2182, 2183, 2184, 2185, 2187, 2187, 2179, 2183, 2188, 2182, + 2113, 2119, 2121, 2114, 2122, 2123, 2123, 2122, 2118, 2115, + 2124, 2125, 2126, 2127, 2129, 2124, 2131, 2127, 2128, 2128, + 2125, 2131, 2132, 2133, 2134, 2135, 2136, 2129, 2137, 2135, + 2138, 2139, 2126, 2137, 2140, 2142, 2138, 2139, 2134, 2143, + 2145, 2144, 2132, 2133, 2143, 2149, 2136, 2144, 2145, 2150, + 2150, 2142, 2140, 2146, 2151, 2146, 2152, 2151, 2155, 2149, + 2153, 2153, 2155, 2156, 2157, 2158, 2158, 2164, 2159, 2156, + 2162, 2162, 2166, 2167, 2170, 2171, 2157, 2159, 2172, 2170, + 2174, 2174, 2152, 2172, 2180, 2164, 2166, 2173, 2178, 2167, + 2176, 2176, 2173, 2181, 2178, 2179, 2179, 2182, 2184, 2185, - 2189, 2178, 2191, 2191, 2192, 2192, 2193, 2194, 2185, 2196, - 2184, 2193, 2195, 2197, 2196, 2197, 2198, 2188, 2189, 2199, - 2200, 2195, 2201, 2202, 2203, 2194, 2209, 2201, 2244, 2203, - 2198, 2244, 2200, 2199, 2204, 2204, 2205, 2205, 2206, 2206, - 2207, 2207, 2208, 2202, 2209, 2210, 2211, 2211, 2212, 2212, - 2210, 2213, 2214, 2215, 2208, 2216, 2217, 2217, 2218, 2219, - 2219, 2220, 2220, 2213, 2214, 2221, 2222, 2223, 2224, 2225, - 2226, 2216, 2227, 2215, 2223, 2226, 2221, 2218, 2222, 2228, - 2224, 2229, 2229, 2231, 2230, 2232, 2234, 2233, 2235, 2225, - 2236, 2236, 2227, 2230, 2237, 2241, 2238, 2239, 2242, 2228, + 2180, 2171, 2182, 2186, 2186, 2188, 2189, 2190, 2191, 2193, + 2193, 2185, 2189, 2194, 2188, 2181, 2195, 2184, 2197, 2197, + 2198, 2198, 2199, 2191, 2200, 2190, 2201, 2199, 2202, 2203, + 2204, 2203, 2194, 2202, 2195, 2201, 2205, 2206, 2207, 2208, + 2209, 0, 2200, 2207, 2204, 2209, 2210, 2210, 2214, 2206, + 2205, 2211, 2211, 2212, 2212, 2213, 2213, 2215, 2216, 2208, + 2214, 2217, 2217, 2216, 2218, 2218, 2219, 2220, 2221, 2222, + 2223, 2223, 2224, 2225, 2225, 2215, 2226, 2226, 2219, 2220, + 2229, 2227, 2228, 2230, 2231, 2222, 2233, 2229, 2221, 2234, + 2236, 2224, 2227, 2232, 2228, 2230, 2235, 2235, 2232, 2236, - 2233, 2243, 2235, 2237, 2245, 2232, 2248, 2248, 0, 2231, - 2234, 2238, 2239, 2241, 2246, 2255, 2247, 2257, 2245, 2246, - 2242, 2247, 2249, 2249, 2243, 2250, 2250, 2252, 2252, 2254, - 2254, 2256, 2259, 2255, 2261, 2260, 2257, 2262, 2263, 2264, - 2266, 2265, 2256, 2265, 2267, 2268, 2272, 2263, 2269, 2269, - 2271, 2271, 2259, 2260, 2278, 2273, 2261, 2262, 2276, 2264, - 2266, 2279, 2267, 2268, 2273, 2274, 2274, 2276, 2272, 2277, - 2277, 2280, 2278, 2281, 2282, 2283, 2285, 2293, 2280, 2279, - 2284, 2286, 2286, 2287, 2287, 2288, 2289, 2290, 2281, 2291, - 2294, 2288, 2282, 2283, 2292, 2285, 2284, 2293, 2295, 2292, + 2237, 2238, 2239, 2240, 2231, 2241, 2233, 2242, 2242, 2234, + 2244, 2243, 2247, 2245, 2248, 2239, 2249, 2251, 2252, 2241, + 2243, 2238, 2271, 2252, 2271, 2244, 2237, 2240, 2245, 2250, + 2247, 2251, 2250, 2253, 2254, 2254, 2248, 2261, 2253, 2249, + 2255, 2255, 2256, 2256, 2258, 2258, 2260, 2260, 2262, 2263, + 2265, 2266, 2267, 2268, 2269, 2261, 2270, 2272, 2278, 2262, + 2273, 2274, 2279, 2269, 2275, 2275, 2277, 2277, 2263, 2266, + 2265, 2279, 2284, 2268, 2267, 2282, 2270, 2272, 2273, 2274, + 2278, 2280, 2280, 2285, 2282, 2283, 2283, 2286, 2287, 2288, + 2284, 2289, 2290, 2291, 2286, 2292, 2292, 2293, 2293, 2294, - 2297, 2297, 2290, 2295, 2289, 2296, 2301, 2296, 2291, 2298, - 2294, 2298, 2299, 2299, 2303, 2304, 2305, 2306, 2308, 2307, - 2309, 2312, 2316, 2303, 2307, 2301, 2313, 2315, 2305, 2313, - 2314, 2314, 2317, 2317, 2304, 2320, 2323, 2306, 2308, 2309, - 2316, 2312, 2315, 2318, 2321, 2322, 2322, 2318, 2321, 2323, - 2320, 2325, 2326, 2327, 2327, 2329, 2330, 2331, 2332, 2332, - 2333, 2331, 2334, 2334, 2335, 2330, 2336, 2329, 2337, 2335, - 2338, 2325, 2326, 2339, 2339, 2336, 2344, 2344, 2345, 2333, - 2346, 2346, 2338, 2347, 2337, 2348, 2349, 2352, 2350, 2351, - 2351, 2354, 2354, 2359, 2357, 2349, 2347, 2350, 2348, 2357, + 2295, 2285, 2296, 2287, 2297, 2294, 2298, 2288, 2290, 2289, + 2299, 2298, 2291, 2300, 2301, 2303, 2303, 2296, 2295, 2301, + 2302, 2307, 2302, 2297, 2304, 2309, 2304, 2305, 2305, 2310, + 2299, 2311, 2312, 2300, 2309, 2314, 2313, 2315, 2318, 2319, + 2307, 2313, 2319, 2311, 2320, 2320, 2321, 2322, 2310, 2323, + 2323, 2326, 2312, 2324, 2331, 2314, 2315, 2324, 2318, 2327, + 2329, 2321, 2332, 2327, 2335, 2322, 2326, 2328, 2328, 2333, + 2333, 2336, 2339, 2329, 2331, 2337, 2335, 2338, 2338, 2337, + 2336, 2341, 2332, 2340, 2340, 2342, 2341, 2343, 2344, 2345, + 2345, 2339, 2350, 2350, 2342, 2351, 2352, 2352, 2353, 2354, - 2345, 2358, 2352, 2360, 2361, 2362, 2358, 2359, 2360, 2363, - 2366, 2364, 2361, 2369, 2374, 2367, 2368, 0, 2363, 2364, - 2367, 2368, 2370, 2370, 2362, 2366, 2371, 2371, 2369, 2372, - 2373, 2375, 2374, 2376, 0, 2373, 2372, 2377, 2379, 2376, - 2378, 2378, 2377, 2380, 2381, 2381, 2382, 2382, 2380, 2375, - 2385, 2386, 2386, 2379, 2387, 2388, 2397, 2387, 2410, 2389, - 2388, 2388, 2390, 2385, 2389, 2391, 2392, 2390, 2393, 2394, - 2392, 2391, 2395, 2393, 2396, 2398, 2410, 2397, 2394, 2399, - 2401, 2398, 2396, 2400, 2403, 2399, 2406, 2395, 2400, 2403, - 2404, 2408, 2401, 2404, 2409, 2411, 2408, 2412, 2406, 2409, + 2344, 2355, 2365, 2343, 2356, 2357, 2357, 2358, 2360, 2360, + 2355, 2353, 2354, 2356, 2363, 2364, 2365, 2351, 2366, 2363, + 2364, 2367, 2358, 2366, 2368, 2369, 2372, 2370, 2373, 2367, + 2375, 2374, 2380, 2373, 2369, 2370, 2374, 2376, 2376, 2377, + 2377, 2372, 2378, 2368, 2381, 2375, 2379, 2382, 2385, 2378, + 2380, 2379, 2383, 2382, 2384, 2384, 2386, 2383, 2387, 2387, + 2391, 2386, 2381, 2385, 2388, 2388, 2392, 2392, 2393, 2394, + 0, 2393, 2395, 2391, 2394, 2394, 2396, 2395, 2397, 2398, + 2399, 2396, 2400, 2398, 2397, 2399, 2401, 2402, 2403, 2406, + 2404, 2400, 2405, 2407, 2406, 2402, 2404, 2409, 2405, 2412, - 2413, 2414, 2414, 2415, 2418, 2419, 2412, 2420, 2411, 2413, - 2421, 2421, 2415, 2422, 2424, 2423, 2425, 2425, 2426, 2428, - 2430, 2432, 2432, 2418, 2423, 2419, 2420, 2431, 2433, 2424, - 2434, 2431, 2422, 2435, 2428, 2436, 2434, 2426, 2438, 2435, - 2430, 2436, 2437, 2437, 2439, 2441, 2438, 2442, 2444, 2439, - 2445, 2446, 2444, 2433, 2441, 2448, 2448, 2449, 2449, 2453, - 2442, 2450, 2450, 2453, 2445, 2454, 2446, 2452, 2452, 2458, - 2454, 2456, 2456, 2459, 2460, 2461, 2463, 2471, 2459, 2469, - 2461, 2461, 2464, 2464, 2466, 2466, 2460, 2467, 2467, 2458, - 2468, 2473, 2469, 2468, 2477, 2471, 2463, 2474, 2474, 2475, + 2410, 2401, 2409, 2410, 2416, 2407, 2417, 2414, 2415, 2403, + 2424, 2412, 2414, 2415, 2418, 2419, 2420, 2420, 2421, 2417, + 2425, 2430, 2416, 2418, 2419, 2426, 2428, 2421, 2429, 2424, + 2427, 2427, 2431, 2431, 2432, 2434, 2430, 2429, 2436, 2437, + 2425, 2438, 2438, 2437, 2426, 2428, 2439, 2445, 2440, 2441, + 2434, 2442, 2445, 2432, 2440, 2441, 2444, 2442, 2436, 2443, + 2443, 2447, 2448, 2450, 2444, 2451, 2452, 2450, 2454, 2454, + 2447, 2439, 2455, 2455, 2459, 2448, 2456, 2456, 2459, 2451, + 2460, 2452, 2458, 2458, 2464, 2460, 2462, 2462, 2465, 2466, + 2467, 2469, 2477, 2465, 2475, 2467, 2467, 2470, 2470, 2472, - 2475, 2476, 2476, 2478, 2478, 2479, 2480, 2481, 2482, 2477, - 2488, 2473, 2483, 2483, 2482, 2484, 2489, 2487, 2479, 2484, - 2490, 2481, 2487, 2487, 2480, 2491, 2492, 2493, 2495, 2495, - 2494, 2491, 2492, 2488, 2494, 2500, 2489, 2498, 2501, 2503, - 2490, 2501, 2498, 2500, 2504, 2505, 2506, 2504, 2507, 2508, - 0, 2506, 2493, 2509, 2510, 2510, 2511, 2512, 2513, 2514, - 2512, 2517, 2505, 2505, 2503, 2515, 2507, 2509, 2512, 2508, - 2511, 2516, 2513, 2515, 2518, 2518, 2516, 2516, 2514, 2523, - 2517, 2519, 2519, 2520, 2520, 2521, 2521, 2522, 2522, 2524, - 2525, 2526, 2527, 2528, 2524, 2523, 2529, 2531, 2531, 2532, + 2472, 2466, 2473, 2473, 2464, 2474, 2479, 2475, 2474, 2483, + 2477, 2469, 2480, 2480, 2481, 2481, 2482, 2482, 2484, 2484, + 2485, 2486, 2487, 2488, 2483, 2494, 2479, 2489, 2489, 2488, + 2490, 2495, 2493, 2485, 2490, 2496, 2487, 2493, 2493, 2486, + 2497, 2498, 2499, 2501, 2501, 2500, 2497, 2498, 2494, 2500, + 2506, 2495, 2504, 2507, 2509, 2496, 2507, 2504, 2506, 2510, + 2511, 2512, 2510, 2513, 2514, 0, 2512, 2499, 2515, 2516, + 2516, 2517, 2518, 2519, 2520, 2518, 2523, 2511, 2511, 2509, + 2521, 2513, 2515, 2518, 2514, 2517, 2522, 2519, 2521, 2524, + 2524, 2522, 2522, 2520, 2529, 2523, 2525, 2525, 2526, 2526, - 2533, 2527, 2532, 2535, 2535, 2536, 2537, 2537, 2545, 2538, - 2525, 0, 2536, 2528, 2538, 2541, 2529, 2526, 2533, 2540, - 2540, 2542, 2543, 2548, 2541, 2547, 2545, 2546, 2546, 2547, - 2542, 2543, 2548, 2549, 2550, 2552, 2551, 2556, 2560, 2550, - 2550, 2561, 2556, 2562, 2552, 2557, 2557, 2564, 2549, 2551, - 2559, 2559, 2560, 2565, 2568, 2569, 2564, 2570, 2573, 2575, - 0, 2562, 2571, 2621, 2569, 2565, 2561, 2577, 2571, 2578, - 2573, 2621, 2577, 2580, 2578, 2579, 2579, 2570, 2582, 2568, - 2575, 2589, 2580, 2582, 2583, 2583, 2585, 2585, 2583, 2586, - 2586, 2587, 2587, 2588, 2590, 2591, 2597, 2593, 2598, 2594, + 2527, 2527, 2528, 2528, 2530, 2531, 2532, 2533, 2534, 2530, + 2529, 2535, 2537, 2537, 2538, 2539, 2533, 2538, 2541, 2541, + 2542, 2543, 2543, 2551, 2544, 2531, 0, 2542, 2534, 2544, + 2547, 2535, 2532, 2539, 2546, 2546, 2548, 2549, 2554, 2547, + 2553, 2551, 2552, 2552, 2553, 2548, 2549, 2554, 2555, 2556, + 2558, 2557, 2562, 2566, 2556, 2556, 2567, 2562, 2568, 2558, + 2563, 2563, 2570, 2555, 2557, 2565, 2565, 2566, 2571, 2574, + 2575, 2570, 2576, 2579, 2581, 0, 2568, 2577, 2627, 2575, + 2571, 2567, 2583, 2577, 2584, 2579, 2627, 2583, 2586, 2584, + 2585, 2585, 2576, 2588, 2574, 2581, 2595, 2586, 2588, 2589, - 2591, 2589, 2588, 2593, 2594, 2595, 2596, 2596, 2600, 2601, - 2595, 2599, 2602, 2590, 2597, 2601, 2599, 2603, 2603, 2598, - 2605, 2609, 2606, 2607, 2605, 2611, 2600, 2606, 2607, 2608, - 2608, 2610, 2613, 2613, 2615, 2616, 2619, 2602, 2617, 2620, - 2609, 2618, 2617, 2623, 2622, 2611, 2610, 2615, 2616, 2622, - 2618, 2625, 2619, 2624, 2624, 2627, 2627, 2630, 2620, 2628, - 2628, 2632, 2632, 2634, 2635, 2636, 2637, 2639, 2639, 2623, - 2625, 2637, 2640, 2641, 2642, 2644, 2644, 2645, 2630, 2634, - 2635, 2636, 2646, 2646, 2649, 2651, 2652, 2655, 2650, 2659, - 2651, 2645, 2640, 2642, 2650, 2657, 2641, 2653, 2653, 2654, + 2589, 2591, 2591, 2589, 2592, 2592, 2593, 2593, 2594, 2596, + 2597, 2603, 2599, 2604, 2600, 2597, 2595, 2594, 2599, 2600, + 2601, 2602, 2602, 2606, 2607, 2601, 2605, 2608, 2596, 2603, + 2607, 2605, 2609, 2609, 2604, 2611, 2615, 2612, 2613, 2611, + 2617, 2606, 2612, 2613, 2614, 2614, 2616, 2619, 2619, 2621, + 2622, 2625, 2608, 2623, 2626, 2615, 2624, 2623, 2629, 2628, + 2617, 2616, 2621, 2622, 2628, 2624, 2631, 2625, 2630, 2630, + 2633, 2633, 2636, 2626, 2634, 2634, 2638, 2638, 2640, 2641, + 2642, 2643, 2645, 2645, 2629, 2631, 2643, 2646, 2647, 2648, + 2650, 2650, 2651, 2636, 2640, 2641, 2642, 2652, 2652, 2655, - 2654, 2656, 2656, 2658, 2649, 2660, 2657, 2655, 2652, 2659, - 2661, 2660, 2658, 2662, 2663, 2664, 2664, 2665, 2666, 2666, - 2665, 2656, 2671, 2670, 2672, 2662, 2673, 2673, 2674, 2661, - 2672, 2674, 2675, 2676, 2663, 2670, 2678, 2680, 2675, 2679, - 2681, 2678, 2671, 2682, 2679, 2685, 2681, 2683, 2683, 2686, - 2687, 2676, 2688, 2689, 2689, 2690, 2680, 2685, 2696, 2691, - 2682, 2682, 2693, 2693, 0, 2688, 2695, 2686, 2691, 2694, - 2694, 2695, 2696, 2697, 2690, 2687, 2698, 2698, 2697, 2699, - 2699, 2700, 2700, 2701, 2703, 2703, 2706, 2708, 2701, 2709, - 2710, 2711, 2711, 2713, 2713, 2715, 2714, 2716, 2717, 2717, + 2657, 2658, 2661, 2656, 2665, 2657, 2651, 2646, 2648, 2656, + 2663, 2647, 2659, 2659, 2660, 2660, 2662, 2662, 2664, 2655, + 2666, 2663, 2661, 2658, 2665, 2667, 2666, 2664, 2668, 2669, + 2670, 2670, 2671, 2672, 2672, 2671, 2662, 2677, 2676, 2678, + 2668, 2679, 2679, 2680, 2667, 2678, 2680, 2681, 2682, 2669, + 2676, 2684, 2686, 2681, 2685, 2687, 2684, 2677, 2688, 2685, + 2691, 2687, 2689, 2689, 2692, 2693, 2682, 2694, 2695, 2695, + 2696, 2686, 2691, 2702, 2697, 2688, 2688, 2699, 2699, 0, + 2694, 2701, 2692, 2697, 2700, 2700, 2701, 2702, 2703, 2696, + 2693, 2704, 2704, 2703, 2705, 2705, 2706, 2706, 2707, 2709, - 2720, 2719, 2721, 2722, 0, 2706, 2716, 2719, 2722, 2708, - 2714, 2709, 2710, 2725, 2725, 2715, 2727, 2727, 2728, 2729, - 2720, 2721, 2730, 2728, 2731, 2736, 2732, 2734, 2730, 2733, - 2733, 2737, 2734, 2729, 2732, 2738, 2731, 2739, 2740, 2742, - 2738, 2743, 2744, 2745, 2740, 2736, 2746, 2742, 2753, 2739, - 2747, 2737, 2748, 2749, 2750, 2757, 2752, 2761, 2761, 2750, - 2743, 2752, 2744, 2745, 2746, 2754, 2747, 2755, 2753, 2748, - 2748, 2754, 2755, 2758, 2749, 2757, 2762, 2762, 2763, 2767, - 2767, 2773, 2763, 2769, 2769, 2773, 2758, 2770, 2770, 2776, - 2770, 2771, 2771, 2779, 2771, 2772, 2772, 2777, 2772, 2775, + 2709, 2712, 2714, 2707, 2715, 2716, 2717, 2717, 2719, 2719, + 2721, 2720, 2722, 2723, 2723, 2726, 2725, 2727, 2728, 0, + 2712, 2722, 2725, 2728, 2714, 2720, 2715, 2716, 2731, 2731, + 2721, 2733, 2733, 2734, 2735, 2726, 2727, 2736, 2734, 2737, + 2742, 2738, 2740, 2736, 2739, 2739, 2743, 2740, 2735, 2738, + 2744, 2737, 2745, 2746, 2748, 2744, 2749, 2750, 2751, 2746, + 2742, 2752, 2748, 2759, 2745, 2753, 2743, 2754, 2755, 2756, + 2763, 2758, 2767, 2767, 2756, 2749, 2758, 2750, 2751, 2752, + 2760, 2753, 2761, 2759, 2754, 2754, 2760, 2761, 2764, 2755, + 2763, 2768, 2768, 2769, 2773, 2773, 2779, 2769, 2775, 2775, - 2775, 2780, 2785, 2781, 2782, 2782, 2787, 2776, 2781, 2786, - 2787, 2777, 2800, 2779, 2788, 2789, 2786, 2791, 2800, 2792, - 2826, 2780, 2796, 2788, 2793, 2793, 2801, 2785, 2792, 2826, - 2789, 2794, 2794, 2795, 2795, 2791, 2797, 2796, 2798, 2799, - 2802, 2797, 2803, 2804, 2799, 2799, 2806, 2798, 2804, 2805, - 2798, 2801, 2807, 2807, 2805, 2802, 2808, 2878, 2809, 2810, - 2810, 2878, 2808, 2803, 2809, 2806, 2811, 2811, 2812, 2815, - 2815, 2818, 2818, 2812, 2819, 2819, 2820, 2820, 2821, 2821, - 2822, 2822, 2823, 2823, 2824, 2824, 2827, 2827, 2828, 2829, - 2830, 2834, 2832, 2833, 2833, 2835, 2842, 2828, 2837, 2837, + 2779, 2764, 2776, 2776, 2782, 2776, 2777, 2777, 2785, 2777, + 2778, 2778, 2783, 2778, 2781, 2781, 2786, 2791, 2787, 2788, + 2788, 2793, 2782, 2787, 2792, 2793, 2783, 2806, 2785, 2794, + 2795, 2792, 2797, 2806, 2798, 2832, 2786, 2802, 2794, 2799, + 2799, 2807, 2791, 2798, 2832, 2795, 2800, 2800, 2801, 2801, + 2797, 2803, 2802, 2804, 2805, 2808, 2803, 2809, 2810, 2805, + 2805, 2812, 2804, 2810, 2811, 2804, 2807, 2813, 2813, 2811, + 2808, 2814, 2884, 2815, 2816, 2816, 2884, 2814, 2809, 2815, + 2812, 2817, 2817, 2818, 2821, 2821, 2824, 2824, 2818, 2825, + 2825, 2826, 2826, 2827, 2827, 2828, 2828, 2829, 2829, 2830, - 2836, 2829, 2838, 2839, 2839, 2844, 2834, 2846, 2835, 2849, - 2830, 2832, 2836, 2843, 2842, 2849, 2843, 2838, 2845, 2845, - 2848, 2850, 2851, 2848, 2852, 2846, 2853, 2851, 2856, 2854, - 2857, 2844, 2860, 2869, 2856, 2850, 2869, 2871, 2876, 2857, - 2872, 2872, 2879, 2852, 2853, 2854, 2877, 2860, 2873, 2873, - 2871, 2874, 2874, 2880, 2882, 2877, 2886, 2883, 2884, 2887, - 2887, 2876, 2879, 2884, 2885, 2888, 2885, 2880, 2883, 2889, - 2891, 2886, 2890, 2892, 2893, 2894, 2896, 2882, 2888, 2895, - 2897, 2902, 2898, 2903, 2894, 2905, 2891, 2898, 2889, 2893, - 2890, 2895, 2904, 2904, 2905, 2902, 2910, 2896, 2892, 2911, + 2830, 2833, 2833, 2834, 2835, 2836, 2840, 2838, 2839, 2839, + 2841, 2848, 2834, 2843, 2843, 2842, 2835, 2844, 2845, 2845, + 2850, 2840, 2852, 2841, 2855, 2836, 2838, 2842, 2849, 2848, + 2855, 2849, 2844, 2851, 2851, 2854, 2856, 2857, 2854, 2858, + 2852, 2859, 2857, 2862, 2860, 2863, 2850, 2866, 2875, 2862, + 2856, 2875, 2877, 2882, 2863, 2878, 2878, 2885, 2858, 2859, + 2860, 2883, 2866, 2879, 2879, 2877, 2880, 2880, 2886, 2888, + 2883, 2892, 2889, 2890, 2893, 2893, 2882, 2885, 2890, 2891, + 2894, 2891, 2886, 2889, 2895, 2897, 2892, 2896, 2898, 2899, + 2900, 2902, 2888, 2894, 2901, 2903, 2908, 2904, 2909, 2900, - 2897, 2906, 2906, 2903, 2907, 2907, 2908, 2908, 2909, 2909, - 2912, 2913, 2914, 2912, 2915, 2910, 2913, 2914, 2916, 2911, - 2917, 2918, 2919, 2920, 2921, 2923, 2917, 2924, 2920, 2922, - 2922, 2925, 2925, 2916, 2919, 2918, 2927, 2929, 2935, 2915, - 2923, 2932, 2932, 2936, 2921, 2934, 2924, 2933, 2933, 2936, - 2937, 2927, 2938, 2934, 2939, 2929, 2937, 2935, 2940, 2941, - 2942, 2942, 2943, 2943, 2941, 2945, 2938, 2939, 2946, 2948, - 2949, 2951, 2954, 2952, 2949, 2953, 2955, 2940, 2952, 2956, - 2959, 2959, 2957, 2948, 2962, 2954, 2945, 2957, 2946, 2955, - 2958, 2951, 2963, 2964, 2953, 2958, 2965, 2965, 2956, 2972, + 2911, 2897, 2904, 2895, 2899, 2896, 2901, 2910, 2910, 2911, + 2908, 2916, 2902, 2898, 2917, 2903, 2912, 2912, 2909, 2913, + 2913, 2914, 2914, 2915, 2915, 2918, 2919, 2920, 2918, 2921, + 2916, 2919, 2920, 2922, 2917, 2923, 2924, 2925, 2926, 2927, + 2929, 2923, 2930, 2926, 2928, 2928, 2931, 2931, 2922, 2925, + 2924, 2933, 2935, 2941, 2921, 2929, 2938, 2938, 2942, 2927, + 2940, 2930, 2939, 2939, 2942, 2943, 2933, 2944, 2940, 2945, + 2935, 2943, 2941, 2946, 2947, 2948, 2948, 2949, 2949, 2947, + 2951, 2944, 2945, 2952, 2954, 2955, 2957, 2960, 2958, 2955, + 2959, 2961, 2946, 2958, 2962, 2965, 2965, 2963, 2954, 2968, - 2966, 2967, 2968, 2968, 2962, 2966, 2969, 2967, 2970, 2971, - 2963, 2969, 2964, 2970, 2971, 2973, 2975, 2975, 2972, 2976, - 2980, 2973, 2977, 2977, 2976, 2979, 2981, 2982, 2983, 2979, - 2984, 2985, 2986, 2981, 2988, 2988, 2984, 2990, 2990, 2980, - 2991, 2993, 2994, 2992, 2995, 2986, 2982, 2983, 2992, 2991, - 2985, 2997, 2991, 2996, 2996, 2998, 2997, 2995, 3000, 3002, - 2993, 2994, 3001, 3001, 3003, 3003, 3004, 3004, 2998, 3005, - 3006, 3007, 3008, 3008, 3005, 3009, 3014, 3006, 3002, 3010, - 3009, 3010, 3011, 3011, 3000, 3012, 3013, 3016, 3019, 3015, - 3007, 3023, 3012, 3013, 3015, 3014, 3018, 3018, 3021, 3022, + 2960, 2951, 2963, 2952, 2961, 2964, 2957, 2969, 2970, 2959, + 2964, 2971, 2971, 2962, 2978, 2972, 2973, 2974, 2974, 2968, + 2972, 2975, 2973, 2976, 2977, 2969, 2975, 2970, 2976, 2977, + 2979, 2981, 2981, 2978, 2982, 2986, 2979, 2983, 2983, 2982, + 2985, 2987, 2988, 2989, 2985, 2990, 2991, 2992, 2987, 2994, + 2994, 2990, 2996, 2996, 2986, 2997, 2999, 3000, 2998, 3001, + 2992, 2988, 2989, 2998, 2997, 2991, 3003, 2997, 3002, 3002, + 3004, 3003, 3001, 3006, 3008, 2999, 3000, 3007, 3007, 3009, + 3009, 3010, 3010, 3004, 3011, 3012, 3013, 3014, 3014, 3011, + 3015, 3020, 3012, 3008, 3016, 3015, 3016, 3017, 3017, 3006, - 3024, 3025, 3025, 3021, 3022, 3028, 3016, 3019, 3027, 3027, - 3023, 3029, 3030, 3030, 3031, 3031, 3032, 3034, 3034, 3024, - 3035, 3035, 3036, 3032, 3028, 3042, 3038, 3041, 3043, 3036, - 3029, 3038, 3041, 3044, 3044, 3045, 3045, 0, 0, 0, - 0, 0, 0, 0, 3042, 0, 0, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3050, 3050, 3050, 3050, 3050, - 3050, 3050, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3052, - 3052, 3052, 3052, 3052, 3052, 3052, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3055, 3055, 0, 3055, 3055, 3055, 3055, - 3056, 3056, 0, 0, 0, 3056, 3056, 3057, 3057, 0, + 3018, 3019, 3022, 3025, 3021, 3013, 3029, 3018, 3019, 3021, + 3020, 3024, 3024, 3027, 3028, 3030, 3031, 3031, 3027, 3028, + 3034, 3022, 3025, 3033, 3033, 3029, 3035, 3036, 3036, 3037, + 3037, 3038, 3040, 3040, 3030, 3041, 3041, 3042, 3038, 3034, + 3048, 3044, 3047, 3049, 3042, 3035, 3044, 3047, 3050, 3050, + 3051, 3051, 0, 0, 0, 0, 0, 0, 0, 3048, + 0, 0, 3049, 3055, 3055, 3055, 3055, 3055, 3055, 3055, + 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3057, 3057, 3057, + 3057, 3057, 3057, 3057, 3058, 3058, 3058, 3058, 3058, 3058, + 3058, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3061, 3061, + + 0, 3061, 3061, 3061, 3061, 3062, 3062, 0, 0, 0, + 3062, 3062, 3063, 3063, 0, 0, 3063, 0, 3063, 3064, + 0, 0, 0, 0, 0, 3064, 3065, 3065, 0, 0, + 0, 3065, 3065, 3066, 0, 0, 0, 0, 0, 3066, + 3067, 3067, 0, 3067, 3067, 3067, 3067, 3068, 3068, 0, + 3068, 3068, 3068, 3068, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3054, 3054, 3054, 3054, 3054 - 0, 3057, 0, 3057, 3058, 0, 0, 0, 0, 0, - 3058, 3059, 3059, 0, 0, 0, 3059, 3059, 3060, 0, - 0, 0, 0, 0, 3060, 3061, 3061, 0, 3061, 3061, - 3061, 3061, 3062, 3062, 0, 3062, 3062, 3062, 3062, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 } ; static yy_state_type yy_last_accepting_state; @@ -2942,7 +2949,7 @@ static void config_end_include(void) } #endif -#line 2943 "" +#line 2951 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2951,9 +2958,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2952 "" +#line 2960 "" -#line 2954 "" +#line 2962 "" #define INITIAL 0 #define quotedstring 1 @@ -3175,7 +3182,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3176 "" +#line 3184 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3208,13 +3215,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3049 ) + if ( yy_current_state >= 3055 ) 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] != 5940 ); + while ( yy_base[yy_current_state] != 5955 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4675,63 +4682,68 @@ YY_RULE_SETUP case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISSETTTL) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 290: -/* rule 290 can match eol */ YY_RULE_SETUP #line 508 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 291: +/* rule 291 can match eol */ +YY_RULE_SETUP +#line 509 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 291: +case 292: YY_RULE_SETUP -#line 511 "./util/configlexer.lex" +#line 512 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 512 "./util/configlexer.lex" +#line 513 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 292: -YY_RULE_SETUP -#line 517 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 293: -/* rule 293 can match eol */ YY_RULE_SETUP #line 518 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 294: +/* rule 294 can match eol */ +YY_RULE_SETUP +#line 519 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 294: +case 295: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4744,34 +4756,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 295: +case 296: YY_RULE_SETUP -#line 532 "./util/configlexer.lex" +#line 533 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 533 "./util/configlexer.lex" +#line 534 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 296: -YY_RULE_SETUP -#line 538 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 297: -/* rule 297 can match eol */ YY_RULE_SETUP #line 539 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 298: +/* rule 298 can match eol */ +YY_RULE_SETUP +#line 540 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 298: +case 299: YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 542 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4784,38 +4796,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 299: +case 300: YY_RULE_SETUP -#line 553 "./util/configlexer.lex" +#line 554 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 555 "./util/configlexer.lex" +#line 556 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 300: -YY_RULE_SETUP -#line 559 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 301: -/* rule 301 can match eol */ YY_RULE_SETUP #line 560 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 302: +/* rule 302 can match eol */ YY_RULE_SETUP #line 561 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 303: YY_RULE_SETUP #line 562 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 304: +YY_RULE_SETUP +#line 563 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4823,27 +4835,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 567 "./util/configlexer.lex" +#line 568 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 304: -YY_RULE_SETUP -#line 571 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 305: -/* rule 305 can match eol */ YY_RULE_SETUP #line 572 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 306: +/* rule 306 can match eol */ +YY_RULE_SETUP +#line 573 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 306: +case 307: YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4853,7 +4865,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 580 "./util/configlexer.lex" +#line 581 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4865,33 +4877,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 307: +case 308: YY_RULE_SETUP -#line 591 "./util/configlexer.lex" +#line 592 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 308: +case 309: YY_RULE_SETUP -#line 595 "./util/configlexer.lex" +#line 596 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 309: +case 310: YY_RULE_SETUP -#line 599 "./util/configlexer.lex" +#line 600 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 310: +case 311: YY_RULE_SETUP -#line 603 "./util/configlexer.lex" +#line 604 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4892 "" +#line 4905 "" case YY_END_OF_BUFFER: { @@ -5186,7 +5198,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3049 ) + if ( yy_current_state >= 3055 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5214,11 +5226,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3049 ) + if ( yy_current_state >= 3055 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3048); + yy_is_jam = (yy_current_state == 3054); return yy_is_jam ? 0 : yy_current_state; } @@ -5857,6 +5869,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 603 "./util/configlexer.lex" +#line 604 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index e4baf13f9..8bc5f0831 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -500,6 +500,7 @@ secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) } redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) } redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +redis-set-ttl{COLON} { YDVAR(1, VAR_CACHEDB_REDISSETTTL) } ipset{COLON} { YDVAR(0, VAR_IPSET) } name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } diff --git a/util/configparser.c b/util/configparser.c index 657f99579..07950b8b4 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison implementation for Yacc-like parsers in C @@ -48,7 +48,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "3.3.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -66,7 +66,7 @@ /* First part of user prologue. */ -#line 38 "./util/configparser.y" +#line 38 "./util/configparser.y" /* yacc.c:337 */ #include "config.h" @@ -95,8 +95,7 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" - +#line 99 "util/configparser.c" /* yacc.c:337 */ # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -117,8 +116,8 @@ extern struct config_parser_state* cfg_parser; # define YYERROR_VERBOSE 0 #endif -/* Use api.header.include to #include this header - instead of duplicating it here. */ +/* In a future release of Bison, this section will be replaced + by #include "configparser.h". */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -382,41 +381,42 @@ extern int yydebug; VAR_CACHEDB_REDISHOST = 503, VAR_CACHEDB_REDISPORT = 504, VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 + VAR_CACHEDB_REDISSETTTL = 506, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 507, + VAR_FOR_UPSTREAM = 508, + VAR_AUTH_ZONE = 509, + VAR_ZONEFILE = 510, + VAR_MASTER = 511, + VAR_URL = 512, + VAR_FOR_DOWNSTREAM = 513, + VAR_FALLBACK_ENABLED = 514, + VAR_TLS_ADDITIONAL_PORT = 515, + VAR_LOW_RTT = 516, + VAR_LOW_RTT_PERMIL = 517, + VAR_FAST_SERVER_PERMIL = 518, + VAR_FAST_SERVER_NUM = 519, + VAR_ALLOW_NOTIFY = 520, + VAR_TLS_WIN_CERT = 521, + VAR_TCP_CONNECTION_LIMIT = 522, + VAR_FORWARD_NO_CACHE = 523, + VAR_STUB_NO_CACHE = 524, + VAR_LOG_SERVFAIL = 525, + VAR_DENY_ANY = 526, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 527, + VAR_LOG_TAG_QUERYREPLY = 528, + VAR_STREAM_WAIT_SIZE = 529, + VAR_TLS_CIPHERS = 530, + VAR_TLS_CIPHERSUITES = 531, + VAR_IPSET = 532, + VAR_IPSET_NAME_V4 = 533, + VAR_IPSET_NAME_V6 = 534, + VAR_TLS_SESSION_TICKET_KEYS = 535, + VAR_RPZ = 536, + VAR_TAGS = 537, + VAR_RPZ_ACTION_OVERRIDE = 538, + VAR_RPZ_CNAME_OVERRIDE = 539, + VAR_RPZ_LOG = 540, + VAR_RPZ_LOG_NAME = 541 }; #endif /* Tokens. */ @@ -668,53 +668,55 @@ extern int yydebug; #define VAR_CACHEDB_REDISHOST 503 #define VAR_CACHEDB_REDISPORT 504 #define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 -#define VAR_FOR_UPSTREAM 507 -#define VAR_AUTH_ZONE 508 -#define VAR_ZONEFILE 509 -#define VAR_MASTER 510 -#define VAR_URL 511 -#define VAR_FOR_DOWNSTREAM 512 -#define VAR_FALLBACK_ENABLED 513 -#define VAR_TLS_ADDITIONAL_PORT 514 -#define VAR_LOW_RTT 515 -#define VAR_LOW_RTT_PERMIL 516 -#define VAR_FAST_SERVER_PERMIL 517 -#define VAR_FAST_SERVER_NUM 518 -#define VAR_ALLOW_NOTIFY 519 -#define VAR_TLS_WIN_CERT 520 -#define VAR_TCP_CONNECTION_LIMIT 521 -#define VAR_FORWARD_NO_CACHE 522 -#define VAR_STUB_NO_CACHE 523 -#define VAR_LOG_SERVFAIL 524 -#define VAR_DENY_ANY 525 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 -#define VAR_LOG_TAG_QUERYREPLY 527 -#define VAR_STREAM_WAIT_SIZE 528 -#define VAR_TLS_CIPHERS 529 -#define VAR_TLS_CIPHERSUITES 530 -#define VAR_IPSET 531 -#define VAR_IPSET_NAME_V4 532 -#define VAR_IPSET_NAME_V6 533 -#define VAR_TLS_SESSION_TICKET_KEYS 534 -#define VAR_RPZ 535 -#define VAR_TAGS 536 -#define VAR_RPZ_ACTION_OVERRIDE 537 -#define VAR_RPZ_CNAME_OVERRIDE 538 -#define VAR_RPZ_LOG 539 -#define VAR_RPZ_LOG_NAME 540 +#define VAR_CACHEDB_REDISSETTTL 506 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 507 +#define VAR_FOR_UPSTREAM 508 +#define VAR_AUTH_ZONE 509 +#define VAR_ZONEFILE 510 +#define VAR_MASTER 511 +#define VAR_URL 512 +#define VAR_FOR_DOWNSTREAM 513 +#define VAR_FALLBACK_ENABLED 514 +#define VAR_TLS_ADDITIONAL_PORT 515 +#define VAR_LOW_RTT 516 +#define VAR_LOW_RTT_PERMIL 517 +#define VAR_FAST_SERVER_PERMIL 518 +#define VAR_FAST_SERVER_NUM 519 +#define VAR_ALLOW_NOTIFY 520 +#define VAR_TLS_WIN_CERT 521 +#define VAR_TCP_CONNECTION_LIMIT 522 +#define VAR_FORWARD_NO_CACHE 523 +#define VAR_STUB_NO_CACHE 524 +#define VAR_LOG_SERVFAIL 525 +#define VAR_DENY_ANY 526 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 527 +#define VAR_LOG_TAG_QUERYREPLY 528 +#define VAR_STREAM_WAIT_SIZE 529 +#define VAR_TLS_CIPHERS 530 +#define VAR_TLS_CIPHERSUITES 531 +#define VAR_IPSET 532 +#define VAR_IPSET_NAME_V4 533 +#define VAR_IPSET_NAME_V6 534 +#define VAR_TLS_SESSION_TICKET_KEYS 535 +#define VAR_RPZ 536 +#define VAR_TAGS 537 +#define VAR_RPZ_ACTION_OVERRIDE 538 +#define VAR_RPZ_CNAME_OVERRIDE 539 +#define VAR_RPZ_LOG 540 +#define VAR_RPZ_LOG_NAME 541 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:352 */ char* str; -#line 716 "util/configparser.c" - +#line 718 "util/configparser.c" /* yacc.c:352 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -829,8 +831,6 @@ typedef short yytype_int16; #endif -#define YY_ASSERT(E) ((void) (0 && (E))) - #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -962,19 +962,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 606 +#define YYLAST 608 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 286 +#define YYNTOKENS 287 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 309 +#define YYNNTS 310 /* YYNRULES -- Number of rules. */ -#define YYNRULES 596 +#define YYNRULES 598 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 887 +#define YYNSTATES 890 #define YYUNDEFTOK 2 -#define YYMAXUTOK 540 +#define YYMAXUTOK 541 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1039,7 +1039,7 @@ static const yytype_uint16 yytranslate[] = 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 + 285, 286 }; #if YYDEBUG @@ -1104,8 +1104,8 @@ static const yytype_uint16 yyrline[] = 2939, 2946, 2955, 2963, 2968, 2969, 2971, 2971, 2971, 2972, 2972, 2973, 2974, 2975, 2976, 2977, 2979, 2989, 2998, 3005, 3014, 3021, 3030, 3038, 3051, 3059, 3072, 3077, 3078, 3079, - 3079, 3080, 3080, 3080, 3082, 3094, 3106, 3118, 3133, 3146, - 3157, 3162, 3163, 3164, 3164, 3166, 3181 + 3079, 3080, 3080, 3080, 3080, 3082, 3094, 3106, 3118, 3133, + 3146, 3159, 3170, 3175, 3176, 3177, 3177, 3179, 3194 }; #endif @@ -1207,23 +1207,23 @@ static const char *const yytname[] = "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_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_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_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", "$accept", "toplevelvars", "toplevelvar", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "rpz_tag", + "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISSETTTL", + "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_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_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", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", "server_statistics_interval", @@ -1342,9 +1342,9 @@ static const char *const yytname[] = "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", "cachedbstart", "contents_cachedb", "content_cachedb", "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", - "redis_server_port", "redis_timeout", "server_tcp_connection_limit", - "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", - "ipset_name_v6", YY_NULLPTR + "redis_server_port", "redis_timeout", "redis_set_ttl", + "server_tcp_connection_limit", "ipsetstart", "contents_ipset", + "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; #endif @@ -1381,14 +1381,14 @@ static const yytype_uint16 yytoknum[] = 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 + 535, 536, 537, 538, 539, 540, 541 }; # endif -#define YYPACT_NINF -270 +#define YYPACT_NINF -271 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-270))) + (!!((Yystate) == (-271))) #define YYTABLE_NINF -1 @@ -1399,95 +1399,95 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -270, 0, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, 269, -42, - -37, -41, -21, -43, -44, -87, -106, -205, -229, -269, - 2, 3, 4, 12, 24, 25, 26, 27, 28, 31, - 32, 33, 34, 36, 37, 38, 39, 40, 50, 51, - 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 87, 88, 91, 93, 94, 95, 96, - 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 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, 204, 205, - 206, 207, 208, 209, 210, 212, 213, 214, 215, 217, - 219, 222, 234, 236, 237, 238, 239, 240, 241, 242, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 267, 268, 303, 304, 305, 306, 310, 311, - 312, 354, 355, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 356, 357, 358, - 359, 360, 361, 362, -270, -270, -270, -270, -270, -270, - -270, -270, 366, 370, 371, 396, 397, 398, -270, -270, - -270, -270, -270, -270, -270, 400, 411, 412, 413, 414, - 415, 416, -270, -270, -270, -270, -270, -270, -270, -270, - 417, 418, 419, 420, 421, 422, 423, 424, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 425, 426, 427, - 428, 429, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, 469, 471, 487, 488, 489, 490, 491, - 492, -270, -270, -270, -270, -270, -270, -270, -270, -270, - 493, 494, 495, 496, 497, 504, 505, 506, 507, 508, - 509, 511, 512, 513, 514, 515, 516, 517, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 520, -270, -270, - 523, 526, 527, 535, 536, 537, 539, 540, 541, 542, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, 543, 544, 545, 546, 547, -270, -270, -270, -270, - -270, -270, 548, 549, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 550, 551, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, 552, 553, 554, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 555, 556, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, 557, 558, - 559, 560, 561, 562, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, 563, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, 564, -270, -270, 565, 566, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, 567, 568, 569, -270, - -270, -270, -270, -270, -270, -270, -270 + -271, 0, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 270, -42, + -37, -41, -21, -43, -44, -87, -106, -205, -229, -270, + 2, 3, 4, 24, 25, 26, 27, 28, 31, 32, + 33, 34, 36, 37, 38, 39, 40, 50, 51, 52, + 53, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 87, 88, 91, 93, 94, 95, 96, 97, + 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 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, 201, 205, 206, + 207, 208, 209, 210, 211, 213, 214, 215, 216, 219, + 220, 223, 236, 237, 238, 239, 240, 241, 242, 243, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 268, 269, 304, 305, 306, 307, 311, 312, + 313, 355, 356, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 357, 358, 359, + 360, 361, 362, 363, -271, -271, -271, -271, -271, -271, + -271, -271, 367, 371, 372, 397, 398, 399, -271, -271, + -271, -271, -271, -271, -271, 401, 412, 413, 414, 415, + 416, 417, -271, -271, -271, -271, -271, -271, -271, -271, + 418, 419, 420, 421, 422, 423, 424, 425, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 426, 427, 428, + 429, 430, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, 470, 472, 488, 489, 490, 491, 492, + 493, -271, -271, -271, -271, -271, -271, -271, -271, -271, + 494, 495, 496, 497, 498, 505, 506, 507, 508, 509, + 510, 511, 513, 514, 515, 516, 517, 518, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 519, -271, -271, + 522, 525, 528, 529, 537, 538, 539, 541, 542, 543, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, 544, 545, 546, 547, 548, 549, -271, -271, -271, + -271, -271, -271, -271, 550, 551, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, 552, + 553, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, 554, 555, 556, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, 557, + 558, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + 559, 560, 561, 562, 563, 564, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, 565, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, 566, -271, -271, 567, + 568, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, 569, + 570, 571, -271, -271, -271, -271, -271, -271, -271, -271 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1496,8 +1496,8 @@ static const yytype_int16 yypact[] = static const yytype_uint16 yydefact[] = { 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, - 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, - 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, + 553, 576, 241, 592, 257, 3, 18, 214, 224, 233, + 243, 259, 488, 507, 546, 555, 578, 594, 4, 5, 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1553,73 +1553,73 @@ static const yytype_uint16 yydefact[] = 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, - 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, - 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, - 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, - 304, 305, 306, 328, 329, 330, 331, 332, 357, 358, - 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, - 373, 374, 388, 343, 344, 346, 347, 375, 391, 337, - 339, 392, 398, 399, 400, 294, 356, 416, 417, 338, - 411, 321, 289, 333, 389, 395, 376, 0, 0, 420, - 295, 272, 320, 380, 273, 291, 292, 334, 335, 418, - 378, 382, 383, 274, 421, 360, 387, 322, 342, 393, - 394, 397, 410, 336, 414, 412, 413, 348, 355, 384, - 385, 349, 350, 377, 402, 323, 324, 327, 307, 309, - 310, 311, 312, 313, 422, 423, 425, 361, 362, 363, - 371, 426, 427, 428, 0, 0, 0, 379, 351, 353, - 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, - 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 381, 396, 415, 450, 451, 352, 429, 0, 0, - 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, - 409, 550, 345, 340, 401, 319, 275, 276, 341, 452, - 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, - 314, 0, 326, 386, 424, 325, 354, 316, 317, 318, - 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, - 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, - 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, - 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, - 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, - 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, - 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, - 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, - 589, 480, 481, 482, 434, 432, 433 + 565, 0, 0, 0, 0, 0, 0, 577, 579, 580, + 581, 582, 583, 584, 0, 0, 593, 595, 596, 271, + 270, 277, 290, 288, 300, 296, 297, 301, 298, 299, + 302, 303, 304, 305, 306, 328, 329, 330, 331, 332, + 357, 358, 359, 364, 365, 293, 366, 367, 370, 368, + 369, 372, 373, 374, 388, 343, 344, 346, 347, 375, + 391, 337, 339, 392, 398, 399, 400, 294, 356, 416, + 417, 338, 411, 321, 289, 333, 389, 395, 376, 0, + 0, 420, 295, 272, 320, 380, 273, 291, 292, 334, + 335, 418, 378, 382, 383, 274, 421, 360, 387, 322, + 342, 393, 394, 397, 410, 336, 414, 412, 413, 348, + 355, 384, 385, 349, 350, 377, 402, 323, 324, 327, + 307, 309, 310, 311, 312, 313, 422, 423, 425, 361, + 362, 363, 371, 426, 427, 428, 0, 0, 0, 379, + 351, 353, 549, 437, 441, 439, 438, 442, 440, 0, + 0, 445, 446, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 381, 396, 415, 450, 451, 352, 429, + 0, 0, 0, 0, 0, 0, 403, 404, 405, 406, + 407, 408, 409, 550, 345, 340, 401, 319, 275, 276, + 341, 452, 454, 453, 455, 456, 457, 308, 315, 447, + 449, 448, 314, 0, 326, 386, 424, 325, 354, 316, + 317, 318, 458, 459, 460, 464, 463, 461, 462, 465, + 466, 467, 468, 470, 469, 479, 0, 483, 484, 0, + 0, 485, 471, 477, 472, 473, 474, 476, 478, 475, + 252, 253, 254, 255, 256, 497, 499, 498, 501, 502, + 503, 504, 500, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 548, 566, 567, 568, 571, 569, 570, 572, 573, + 574, 575, 585, 586, 587, 588, 589, 590, 597, 598, + 390, 419, 436, 551, 552, 443, 444, 430, 431, 0, + 0, 0, 435, 591, 480, 481, 482, 434, 432, 433 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -23, 570, 571, - 572, 573, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270 + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -23, 572, 573, + 574, 575, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -1654,8 +1654,8 @@ static const yytype_int16 yydefgoto[] = 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, - 589, 590, 591, 426, 27, 39, 594, 595, 596 + 576, 577, 578, 579, 580, 26, 38, 587, 588, 589, + 590, 591, 592, 593, 426, 27, 39, 596, 597, 598 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1663,74 +1663,74 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 470, 427, 455, 428, 429, 557, 442, 592, 593, - 498, 3, 597, 598, 599, 443, 444, 581, 582, 583, - 584, 585, 600, 470, 560, 561, 562, 563, 564, 565, - 566, 567, 568, 569, 601, 602, 603, 604, 605, 456, - 457, 606, 607, 608, 609, 4, 610, 611, 612, 613, - 614, 5, 503, 504, 505, 506, 507, 508, 509, 510, - 615, 616, 617, 618, 458, 430, 520, 521, 522, 523, + 2, 470, 427, 455, 428, 429, 557, 442, 594, 595, + 498, 3, 599, 600, 601, 443, 444, 581, 582, 583, + 584, 585, 586, 470, 560, 561, 562, 563, 564, 565, + 566, 567, 568, 569, 602, 603, 604, 605, 606, 456, + 457, 607, 608, 609, 610, 4, 611, 612, 613, 614, + 615, 5, 503, 504, 505, 506, 507, 508, 509, 510, + 616, 617, 618, 619, 458, 430, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 619, 620, 621, 622, 623, 624, - 625, 626, 627, 628, 629, 6, 431, 630, 631, 432, - 445, 632, 446, 633, 634, 635, 636, 637, 638, 639, - 640, 7, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 459, 460, 660, 661, 662, 663, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 8, 679, 680, 681, 682, 683, 684, 685, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 461, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, - 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, - 9, 472, 473, 474, 735, 736, 737, 738, 739, 740, - 741, 477, 742, 743, 744, 745, 433, 746, 10, 747, - 447, 471, 748, 472, 473, 474, 475, 476, 487, 488, - 489, 490, 491, 477, 749, 11, 750, 751, 752, 753, - 754, 755, 756, 12, 757, 758, 759, 760, 761, 762, - 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 13, 779, 780, 0, - 14, 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, 781, 782, 783, 784, 72, 73, 74, - 785, 786, 787, 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, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 116, 117, 118, 797, 119, 120, 121, - 798, 799, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 800, 801, 802, 146, - 803, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 804, 805, 806, 807, 808, 809, 810, 811, 812, - 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, - 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, 823, - 196, 824, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 825, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 835, 212, 213, - 214, 215, 216, 217, 836, 837, 838, 839, 840, 841, - 218, 842, 843, 844, 845, 846, 847, 848, 219, 220, - 849, 221, 222, 850, 223, 224, 851, 852, 225, 226, - 227, 228, 229, 230, 231, 853, 854, 855, 232, 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, 883, 884, 885, 886, + 534, 535, 536, 537, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 6, 431, 631, 632, 432, + 445, 633, 446, 634, 635, 636, 637, 638, 639, 640, + 641, 7, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, + 660, 459, 460, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 8, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 461, 698, 699, 700, 701, 702, 703, 704, 705, + 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, + 9, 736, 472, 473, 474, 737, 738, 739, 740, 741, + 742, 743, 477, 744, 745, 746, 747, 433, 10, 748, + 749, 447, 471, 750, 472, 473, 474, 475, 476, 487, + 488, 489, 490, 491, 477, 11, 751, 752, 753, 754, + 755, 756, 757, 758, 12, 759, 760, 761, 762, 763, + 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 13, 781, 782, + 0, 14, 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, 783, 784, 785, 786, 72, 73, + 74, 787, 788, 789, 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, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 116, 117, 118, 799, 119, 120, + 121, 800, 801, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 802, 803, 804, + 146, 805, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 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, + 825, 196, 826, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 827, 828, + 829, 830, 831, 832, 833, 834, 835, 836, 837, 212, + 213, 214, 215, 216, 217, 838, 839, 840, 841, 842, + 843, 844, 218, 845, 846, 847, 848, 849, 850, 851, + 219, 220, 852, 221, 222, 853, 223, 224, 854, 855, + 225, 226, 227, 228, 229, 230, 231, 856, 857, 858, + 232, 859, 860, 861, 862, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 499, 500, 501, 502 + 0, 0, 0, 0, 0, 499, 500, 501, 502 }; static const yytype_int16 yycheck[] = { - 0, 44, 44, 44, 46, 47, 112, 44, 277, 278, + 0, 44, 44, 44, 46, 47, 112, 44, 278, 279, 33, 11, 10, 10, 10, 52, 53, 246, 247, 248, - 249, 250, 10, 44, 229, 230, 231, 232, 233, 234, + 249, 250, 251, 44, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 10, 10, 10, 10, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, @@ -1749,56 +1749,56 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 210, 254, 255, 256, 10, 10, 10, 10, 10, 10, - 10, 264, 10, 10, 10, 10, 268, 10, 228, 10, - 267, 252, 10, 254, 255, 256, 257, 258, 281, 282, - 283, 284, 285, 264, 10, 245, 10, 10, 10, 10, - 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, + 210, 10, 255, 256, 257, 10, 10, 10, 10, 10, + 10, 10, 265, 10, 10, 10, 10, 269, 228, 10, + 10, 268, 253, 10, 255, 256, 257, 258, 259, 282, + 283, 284, 285, 286, 265, 245, 10, 10, 10, 10, + 10, 10, 10, 10, 254, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 276, 10, 10, -1, - 280, 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, 10, 10, 10, 10, 48, 49, 50, - 10, 10, 10, 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, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 104, 105, 106, 10, 108, 109, 110, - 10, 10, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 10, 10, 10, 140, - 10, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 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, 10, - 211, 10, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, - 241, 242, 243, 244, 10, 10, 10, 10, 10, 10, - 251, 10, 10, 10, 10, 10, 10, 10, 259, 260, - 10, 262, 263, 10, 265, 266, 10, 10, 269, 270, - 271, 272, 273, 274, 275, 10, 10, 10, 279, 10, + 10, 10, 10, 10, 10, 10, 10, 277, 10, 10, + -1, 281, 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, 10, 10, 10, 10, 48, 49, + 50, 10, 10, 10, 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, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 104, 105, 106, 10, 108, 109, + 110, 10, 10, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 10, 10, 10, + 140, 10, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 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, + 10, 211, 10, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 239, + 240, 241, 242, 243, 244, 10, 10, 10, 10, 10, + 10, 10, 252, 10, 10, 10, 10, 10, 10, 10, + 260, 261, 10, 263, 264, 10, 266, 267, 10, 10, + 270, 271, 272, 273, 274, 275, 276, 10, 10, 10, + 280, 10, 10, 10, 10, 10, 10, 10, 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, -1, - -1, -1, -1, 33, 33, 33, 33 + -1, -1, -1, -1, -1, 33, 33, 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 287, 0, 11, 45, 51, 95, 111, 152, 210, - 228, 245, 253, 276, 280, 288, 289, 292, 295, 298, - 301, 309, 528, 539, 560, 568, 581, 590, 290, 293, - 296, 299, 302, 310, 529, 540, 561, 569, 582, 591, + 0, 288, 0, 11, 45, 51, 95, 111, 152, 210, + 228, 245, 254, 277, 281, 289, 290, 293, 296, 299, + 302, 310, 529, 540, 561, 569, 582, 592, 291, 294, + 297, 300, 303, 311, 530, 541, 562, 570, 583, 593, 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, @@ -1816,45 +1816,45 @@ static const yytype_uint16 yystos[] = 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 239, 240, 241, 242, 243, 244, 251, 259, - 260, 262, 263, 265, 266, 269, 270, 271, 272, 273, - 274, 275, 279, 291, 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, 564, 565, 566, 567, 589, 44, 46, 47, - 107, 138, 141, 268, 294, 500, 501, 502, 503, 504, - 505, 506, 44, 52, 53, 137, 139, 267, 297, 507, - 508, 509, 510, 511, 512, 44, 80, 81, 105, 172, - 173, 212, 300, 521, 522, 523, 524, 525, 526, 527, - 44, 252, 254, 255, 256, 257, 258, 264, 303, 513, - 514, 515, 516, 517, 518, 519, 520, 281, 282, 283, - 284, 285, 304, 305, 306, 307, 308, 311, 513, 514, - 515, 516, 517, 96, 97, 98, 99, 100, 101, 102, - 103, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 226, 227, 239, 240, 241, 242, 243, 244, 252, 260, + 261, 263, 264, 266, 267, 270, 271, 272, 273, 274, + 275, 276, 280, 292, 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, 565, 566, 567, 568, 591, 44, 46, 47, + 107, 138, 141, 269, 295, 501, 502, 503, 504, 505, + 506, 507, 44, 52, 53, 137, 139, 268, 298, 508, + 509, 510, 511, 512, 513, 44, 80, 81, 105, 172, + 173, 212, 301, 522, 523, 524, 525, 526, 527, 528, + 44, 253, 255, 256, 257, 258, 259, 265, 304, 514, + 515, 516, 517, 518, 519, 520, 521, 282, 283, 284, + 285, 286, 305, 306, 307, 308, 309, 312, 514, 515, + 516, 517, 518, 96, 97, 98, 99, 100, 101, 102, + 103, 531, 532, 533, 534, 535, 536, 537, 538, 539, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 112, 562, 563, + 163, 164, 165, 166, 167, 168, 169, 170, 542, 543, + 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 112, 563, 564, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 246, 247, 248, 249, 250, 583, 584, 585, 586, - 587, 588, 277, 278, 592, 593, 594, 10, 10, 10, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 246, 247, 248, 249, 250, 251, 584, 585, 586, + 587, 588, 589, 590, 278, 279, 594, 595, 596, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1883,72 +1883,72 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, - 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, - 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, - 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, - 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 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, 529, 530, - 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, - 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, - 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, - 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 591, 592, 592, 593, 594 + 0, 287, 288, 288, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 290, 291, 291, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 293, 294, 294, 295, 295, 295, 295, 295, + 295, 295, 296, 297, 297, 298, 298, 298, 298, 298, + 298, 299, 300, 300, 301, 301, 301, 301, 301, 301, + 301, 302, 303, 303, 304, 304, 304, 304, 304, 304, + 304, 304, 305, 306, 307, 308, 309, 310, 311, 311, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 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, 530, 531, + 531, 531, 531, 531, 531, 531, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 541, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 562, 563, 564, 565, + 566, 567, 568, 569, 570, 570, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 581, 582, 583, 583, 584, + 584, 584, 584, 584, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 593, 594, 594, 595, 596 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2012,8 +2012,8 @@ static const yytype_uint8 yyr2[] = 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, - 1, 2, 0, 1, 1, 2, 2 + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 1, 2, 0, 1, 1, 2, 2 }; @@ -2532,8 +2532,6 @@ yynewstate: | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); *yyssp = (yytype_int16) yystate; if (yyss + yystacksize - 1 <= yyssp) @@ -2596,6 +2594,8 @@ yysetstate: } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) YYACCEPT; @@ -2663,6 +2663,7 @@ yybackup: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + goto yynewstate; @@ -2697,16 +2698,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 189 "./util/configparser.y" + case 16: +#line 189 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(server:)\n")); } -#line 2706 "util/configparser.c" +#line 2707 "util/configparser.c" /* yacc.c:1652 */ break; case 212: -#line 282 "./util/configparser.y" +#line 282 "./util/configparser.y" /* yacc.c:1652 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2717,11 +2718,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2721 "util/configparser.c" +#line 2722 "util/configparser.c" /* yacc.c:1652 */ break; case 222: -#line 299 "./util/configparser.y" +#line 299 "./util/configparser.y" /* yacc.c:1652 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2732,11 +2733,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2736 "util/configparser.c" +#line 2737 "util/configparser.c" /* yacc.c:1652 */ break; case 231: -#line 316 "./util/configparser.y" +#line 316 "./util/configparser.y" /* yacc.c:1652 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2749,11 +2750,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2753 "util/configparser.c" +#line 2754 "util/configparser.c" /* yacc.c:1652 */ break; case 241: -#line 335 "./util/configparser.y" +#line 335 "./util/configparser.y" /* yacc.c:1652 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2769,11 +2770,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2773 "util/configparser.c" +#line 2774 "util/configparser.c" /* yacc.c:1652 */ break; case 252: -#line 359 "./util/configparser.y" +#line 359 "./util/configparser.y" /* yacc.c:1652 */ { uint8_t* bitlist; size_t len = 0; @@ -2790,11 +2791,11 @@ yyreduce: } } -#line 2794 "util/configparser.c" +#line 2795 "util/configparser.c" /* yacc.c:1652 */ break; case 253: -#line 378 "./util/configparser.y" +#line 378 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2809,21 +2810,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2813 "util/configparser.c" +#line 2814 "util/configparser.c" /* yacc.c:1652 */ break; case 254: -#line 395 "./util/configparser.y" +#line 395 "./util/configparser.y" /* yacc.c:1652 */ { 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 2823 "util/configparser.c" +#line 2824 "util/configparser.c" /* yacc.c:1652 */ break; case 255: -#line 403 "./util/configparser.y" +#line 403 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2831,21 +2832,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2835 "util/configparser.c" +#line 2836 "util/configparser.c" /* yacc.c:1652 */ break; case 256: -#line 413 "./util/configparser.y" +#line 413 "./util/configparser.y" /* yacc.c:1652 */ { 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 2845 "util/configparser.c" +#line 2846 "util/configparser.c" /* yacc.c:1652 */ break; case 257: -#line 421 "./util/configparser.y" +#line 421 "./util/configparser.y" /* yacc.c:1652 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2861,11 +2862,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2865 "util/configparser.c" +#line 2866 "util/configparser.c" /* yacc.c:1652 */ break; case 270: -#line 444 "./util/configparser.y" +#line 444 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2873,11 +2874,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2877 "util/configparser.c" +#line 2878 "util/configparser.c" /* yacc.c:1652 */ break; case 271: -#line 453 "./util/configparser.y" +#line 453 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2885,11 +2886,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2889 "util/configparser.c" +#line 2890 "util/configparser.c" /* yacc.c:1652 */ break; case 272: -#line 462 "./util/configparser.y" +#line 462 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2899,11 +2900,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2903 "util/configparser.c" +#line 2904 "util/configparser.c" /* yacc.c:1652 */ break; case 273: -#line 473 "./util/configparser.y" +#line 473 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2911,11 +2912,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2915 "util/configparser.c" +#line 2916 "util/configparser.c" /* yacc.c:1652 */ break; case 274: -#line 482 "./util/configparser.y" +#line 482 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2923,11 +2924,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2927 "util/configparser.c" +#line 2928 "util/configparser.c" /* yacc.c:1652 */ break; case 275: -#line 491 "./util/configparser.y" +#line 491 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2935,11 +2936,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2939 "util/configparser.c" +#line 2940 "util/configparser.c" /* yacc.c:1652 */ break; case 276: -#line 500 "./util/configparser.y" +#line 500 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2949,11 +2950,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2953 "util/configparser.c" +#line 2954 "util/configparser.c" /* yacc.c:1652 */ break; case 277: -#line 511 "./util/configparser.y" +#line 511 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2961,11 +2962,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2965 "util/configparser.c" +#line 2966 "util/configparser.c" /* yacc.c:1652 */ break; case 278: -#line 520 "./util/configparser.y" +#line 520 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2976,11 +2977,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2980 "util/configparser.c" +#line 2981 "util/configparser.c" /* yacc.c:1652 */ break; case 279: -#line 532 "./util/configparser.y" +#line 532 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2992,11 +2993,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2996 "util/configparser.c" +#line 2997 "util/configparser.c" /* yacc.c:1652 */ break; case 280: -#line 546 "./util/configparser.y" +#line 546 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3010,11 +3011,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3014 "util/configparser.c" +#line 3015 "util/configparser.c" /* yacc.c:1652 */ break; case 281: -#line 561 "./util/configparser.y" +#line 561 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3024,11 +3025,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3028 "util/configparser.c" +#line 3029 "util/configparser.c" /* yacc.c:1652 */ break; case 282: -#line 572 "./util/configparser.y" +#line 572 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3044,11 +3045,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3048 "util/configparser.c" +#line 3049 "util/configparser.c" /* yacc.c:1652 */ break; case 283: -#line 589 "./util/configparser.y" +#line 589 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3064,11 +3065,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3068 "util/configparser.c" +#line 3069 "util/configparser.c" /* yacc.c:1652 */ break; case 284: -#line 606 "./util/configparser.y" +#line 606 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3084,11 +3085,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3088 "util/configparser.c" +#line 3089 "util/configparser.c" /* yacc.c:1652 */ break; case 285: -#line 623 "./util/configparser.y" +#line 623 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3104,11 +3105,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3108 "util/configparser.c" +#line 3109 "util/configparser.c" /* yacc.c:1652 */ break; case 286: -#line 640 "./util/configparser.y" +#line 640 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3122,11 +3123,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3126 "util/configparser.c" +#line 3127 "util/configparser.c" /* yacc.c:1652 */ break; case 287: -#line 655 "./util/configparser.y" +#line 655 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3140,11 +3141,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3144 "util/configparser.c" +#line 3145 "util/configparser.c" /* yacc.c:1652 */ break; case 288: -#line 670 "./util/configparser.y" +#line 670 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3156,11 +3157,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3160 "util/configparser.c" +#line 3161 "util/configparser.c" /* yacc.c:1652 */ break; case 289: -#line 683 "./util/configparser.y" +#line 683 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3174,11 +3175,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3178 "util/configparser.c" +#line 3179 "util/configparser.c" /* yacc.c:1652 */ break; case 290: -#line 698 "./util/configparser.y" +#line 698 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3186,11 +3187,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3190 "util/configparser.c" +#line 3191 "util/configparser.c" /* yacc.c:1652 */ break; case 291: -#line 707 "./util/configparser.y" +#line 707 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3198,11 +3199,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3202 "util/configparser.c" +#line 3203 "util/configparser.c" /* yacc.c:1652 */ break; case 292: -#line 716 "./util/configparser.y" +#line 716 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3210,11 +3211,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3214 "util/configparser.c" +#line 3215 "util/configparser.c" /* yacc.c:1652 */ break; case 293: -#line 725 "./util/configparser.y" +#line 725 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3222,11 +3223,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3226 "util/configparser.c" +#line 3227 "util/configparser.c" /* yacc.c:1652 */ break; case 294: -#line 734 "./util/configparser.y" +#line 734 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3234,11 +3235,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" +#line 3239 "util/configparser.c" /* yacc.c:1652 */ break; case 295: -#line 743 "./util/configparser.y" +#line 743 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3246,11 +3247,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" +#line 3251 "util/configparser.c" /* yacc.c:1652 */ break; case 296: -#line 752 "./util/configparser.y" +#line 752 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3258,11 +3259,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" +#line 3263 "util/configparser.c" /* yacc.c:1652 */ break; case 297: -#line 761 "./util/configparser.y" +#line 761 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3270,11 +3271,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3274 "util/configparser.c" +#line 3275 "util/configparser.c" /* yacc.c:1652 */ break; case 298: -#line 770 "./util/configparser.y" +#line 770 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3282,11 +3283,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3286 "util/configparser.c" +#line 3287 "util/configparser.c" /* yacc.c:1652 */ break; case 299: -#line 779 "./util/configparser.y" +#line 779 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3294,11 +3295,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3298 "util/configparser.c" +#line 3299 "util/configparser.c" /* yacc.c:1652 */ break; case 300: -#line 788 "./util/configparser.y" +#line 788 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3306,11 +3307,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3310 "util/configparser.c" +#line 3311 "util/configparser.c" /* yacc.c:1652 */ break; case 301: -#line 797 "./util/configparser.y" +#line 797 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3318,11 +3319,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3322 "util/configparser.c" +#line 3323 "util/configparser.c" /* yacc.c:1652 */ break; case 302: -#line 806 "./util/configparser.y" +#line 806 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3330,11 +3331,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3334 "util/configparser.c" +#line 3335 "util/configparser.c" /* yacc.c:1652 */ break; case 303: -#line 815 "./util/configparser.y" +#line 815 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3342,11 +3343,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3346 "util/configparser.c" +#line 3347 "util/configparser.c" /* yacc.c:1652 */ break; case 304: -#line 824 "./util/configparser.y" +#line 824 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3358,11 +3359,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3362 "util/configparser.c" +#line 3363 "util/configparser.c" /* yacc.c:1652 */ break; case 305: -#line 837 "./util/configparser.y" +#line 837 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3370,11 +3371,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3374 "util/configparser.c" +#line 3375 "util/configparser.c" /* yacc.c:1652 */ break; case 306: -#line 846 "./util/configparser.y" +#line 846 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3386,11 +3387,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" +#line 3391 "util/configparser.c" /* yacc.c:1652 */ break; case 307: -#line 859 "./util/configparser.y" +#line 859 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3398,11 +3399,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" +#line 3403 "util/configparser.c" /* yacc.c:1652 */ break; case 308: -#line 868 "./util/configparser.y" +#line 868 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -3410,11 +3411,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3414 "util/configparser.c" +#line 3415 "util/configparser.c" /* yacc.c:1652 */ break; case 309: -#line 877 "./util/configparser.y" +#line 877 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3422,31 +3423,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3426 "util/configparser.c" +#line 3427 "util/configparser.c" /* yacc.c:1652 */ break; case 310: -#line 886 "./util/configparser.y" +#line 886 "./util/configparser.y" /* yacc.c:1652 */ { 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 3436 "util/configparser.c" +#line 3437 "util/configparser.c" /* yacc.c:1652 */ break; case 311: -#line 893 "./util/configparser.y" +#line 893 "./util/configparser.y" /* yacc.c:1652 */ { 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 3446 "util/configparser.c" +#line 3447 "util/configparser.c" /* yacc.c:1652 */ break; case 312: -#line 900 "./util/configparser.y" +#line 900 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3454,21 +3455,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3458 "util/configparser.c" +#line 3459 "util/configparser.c" /* yacc.c:1652 */ break; case 313: -#line 909 "./util/configparser.y" +#line 909 "./util/configparser.y" /* yacc.c:1652 */ { 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 3468 "util/configparser.c" +#line 3469 "util/configparser.c" /* yacc.c:1652 */ break; case 314: -#line 916 "./util/configparser.y" +#line 916 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3476,53 +3477,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3480 "util/configparser.c" +#line 3481 "util/configparser.c" /* yacc.c:1652 */ break; case 315: -#line 925 "./util/configparser.y" +#line 925 "./util/configparser.y" /* yacc.c:1652 */ { 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 3491 "util/configparser.c" +#line 3492 "util/configparser.c" /* yacc.c:1652 */ break; case 316: -#line 933 "./util/configparser.y" +#line 933 "./util/configparser.y" /* yacc.c:1652 */ { 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 3501 "util/configparser.c" +#line 3502 "util/configparser.c" /* yacc.c:1652 */ break; case 317: -#line 940 "./util/configparser.y" +#line 940 "./util/configparser.y" /* yacc.c:1652 */ { 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 3511 "util/configparser.c" +#line 3512 "util/configparser.c" /* yacc.c:1652 */ break; case 318: -#line 947 "./util/configparser.y" +#line 947 "./util/configparser.y" /* yacc.c:1652 */ { 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 3522 "util/configparser.c" +#line 3523 "util/configparser.c" /* yacc.c:1652 */ break; case 319: -#line 955 "./util/configparser.y" +#line 955 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3530,11 +3531,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3534 "util/configparser.c" +#line 3535 "util/configparser.c" /* yacc.c:1652 */ break; case 320: -#line 964 "./util/configparser.y" +#line 964 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3542,11 +3543,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3546 "util/configparser.c" +#line 3547 "util/configparser.c" /* yacc.c:1652 */ break; case 321: -#line 973 "./util/configparser.y" +#line 973 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3559,11 +3560,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3563 "util/configparser.c" +#line 3564 "util/configparser.c" /* yacc.c:1652 */ break; case 322: -#line 987 "./util/configparser.y" +#line 987 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3571,11 +3572,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3575 "util/configparser.c" +#line 3576 "util/configparser.c" /* yacc.c:1652 */ break; case 323: -#line 996 "./util/configparser.y" +#line 996 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3583,11 +3584,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" +#line 3588 "util/configparser.c" /* yacc.c:1652 */ break; case 324: -#line 1005 "./util/configparser.y" +#line 1005 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3595,11 +3596,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3599 "util/configparser.c" +#line 3600 "util/configparser.c" /* yacc.c:1652 */ break; case 325: -#line 1014 "./util/configparser.y" +#line 1014 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3607,11 +3608,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3611 "util/configparser.c" +#line 3612 "util/configparser.c" /* yacc.c:1652 */ break; case 326: -#line 1023 "./util/configparser.y" +#line 1023 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3619,11 +3620,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3623 "util/configparser.c" +#line 3624 "util/configparser.c" /* yacc.c:1652 */ break; case 327: -#line 1032 "./util/configparser.y" +#line 1032 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3631,31 +3632,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3635 "util/configparser.c" +#line 3636 "util/configparser.c" /* yacc.c:1652 */ break; case 328: -#line 1041 "./util/configparser.y" +#line 1041 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3645 "util/configparser.c" +#line 3646 "util/configparser.c" /* yacc.c:1652 */ break; case 329: -#line 1048 "./util/configparser.y" +#line 1048 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3655 "util/configparser.c" +#line 3656 "util/configparser.c" /* yacc.c:1652 */ break; case 330: -#line 1055 "./util/configparser.y" +#line 1055 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3680,105 +3681,105 @@ yyreduce: } } } -#line 3684 "util/configparser.c" +#line 3685 "util/configparser.c" /* yacc.c:1652 */ break; case 331: -#line 1081 "./util/configparser.y" +#line 1081 "./util/configparser.y" /* yacc.c:1652 */ { 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 3695 "util/configparser.c" +#line 3696 "util/configparser.c" /* yacc.c:1652 */ break; case 332: -#line 1089 "./util/configparser.y" +#line 1089 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3705 "util/configparser.c" +#line 3706 "util/configparser.c" /* yacc.c:1652 */ break; case 333: -#line 1096 "./util/configparser.y" +#line 1096 "./util/configparser.y" /* yacc.c:1652 */ { 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 3715 "util/configparser.c" +#line 3716 "util/configparser.c" /* yacc.c:1652 */ break; case 334: -#line 1103 "./util/configparser.y" +#line 1103 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3725 "util/configparser.c" +#line 3726 "util/configparser.c" /* yacc.c:1652 */ break; case 335: -#line 1110 "./util/configparser.y" +#line 1110 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3735 "util/configparser.c" +#line 3736 "util/configparser.c" /* yacc.c:1652 */ break; case 336: -#line 1117 "./util/configparser.y" +#line 1117 "./util/configparser.y" /* yacc.c:1652 */ { 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 3746 "util/configparser.c" +#line 3747 "util/configparser.c" /* yacc.c:1652 */ break; case 337: -#line 1125 "./util/configparser.y" +#line 1125 "./util/configparser.y" /* yacc.c:1652 */ { 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 3757 "util/configparser.c" +#line 3758 "util/configparser.c" /* yacc.c:1652 */ break; case 338: -#line 1133 "./util/configparser.y" +#line 1133 "./util/configparser.y" /* yacc.c:1652 */ { 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 3768 "util/configparser.c" +#line 3769 "util/configparser.c" /* yacc.c:1652 */ break; case 339: -#line 1141 "./util/configparser.y" +#line 1141 "./util/configparser.y" /* yacc.c:1652 */ { 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 3778 "util/configparser.c" +#line 3779 "util/configparser.c" /* yacc.c:1652 */ break; case 340: -#line 1148 "./util/configparser.y" +#line 1148 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3788,11 +3789,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3792 "util/configparser.c" +#line 3793 "util/configparser.c" /* yacc.c:1652 */ break; case 341: -#line 1159 "./util/configparser.y" +#line 1159 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3802,21 +3803,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3806 "util/configparser.c" +#line 3807 "util/configparser.c" /* yacc.c:1652 */ break; case 342: -#line 1170 "./util/configparser.y" +#line 1170 "./util/configparser.y" /* yacc.c:1652 */ { 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 3816 "util/configparser.c" +#line 3817 "util/configparser.c" /* yacc.c:1652 */ break; case 343: -#line 1177 "./util/configparser.y" +#line 1177 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3824,11 +3825,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3828 "util/configparser.c" +#line 3829 "util/configparser.c" /* yacc.c:1652 */ break; case 344: -#line 1186 "./util/configparser.y" +#line 1186 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3836,11 +3837,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3840 "util/configparser.c" +#line 3841 "util/configparser.c" /* yacc.c:1652 */ break; case 345: -#line 1195 "./util/configparser.y" +#line 1195 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3848,53 +3849,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3852 "util/configparser.c" +#line 3853 "util/configparser.c" /* yacc.c:1652 */ break; case 346: -#line 1204 "./util/configparser.y" +#line 1204 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3862 "util/configparser.c" +#line 3863 "util/configparser.c" /* yacc.c:1652 */ break; case 347: -#line 1211 "./util/configparser.y" +#line 1211 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3872 "util/configparser.c" +#line 3873 "util/configparser.c" /* yacc.c:1652 */ break; case 348: -#line 1218 "./util/configparser.y" +#line 1218 "./util/configparser.y" /* yacc.c:1652 */ { 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 3883 "util/configparser.c" +#line 3884 "util/configparser.c" /* yacc.c:1652 */ break; case 349: -#line 1226 "./util/configparser.y" +#line 1226 "./util/configparser.y" /* yacc.c:1652 */ { 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 3894 "util/configparser.c" +#line 3895 "util/configparser.c" /* yacc.c:1652 */ break; case 350: -#line 1234 "./util/configparser.y" +#line 1234 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3903,11 +3904,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3907 "util/configparser.c" +#line 3908 "util/configparser.c" /* yacc.c:1652 */ break; case 351: -#line 1244 "./util/configparser.y" +#line 1244 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3916,11 +3917,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3920 "util/configparser.c" +#line 3921 "util/configparser.c" /* yacc.c:1652 */ break; case 352: -#line 1254 "./util/configparser.y" +#line 1254 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3929,11 +3930,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3933 "util/configparser.c" +#line 3934 "util/configparser.c" /* yacc.c:1652 */ break; case 353: -#line 1264 "./util/configparser.y" +#line 1264 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3946,22 +3947,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3950 "util/configparser.c" +#line 3951 "util/configparser.c" /* yacc.c:1652 */ break; case 354: -#line 1278 "./util/configparser.y" +#line 1278 "./util/configparser.y" /* yacc.c:1652 */ { 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 3961 "util/configparser.c" +#line 3962 "util/configparser.c" /* yacc.c:1652 */ break; case 355: -#line 1286 "./util/configparser.y" +#line 1286 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3973,11 +3974,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3977 "util/configparser.c" +#line 3978 "util/configparser.c" /* yacc.c:1652 */ break; case 356: -#line 1299 "./util/configparser.y" +#line 1299 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3987,22 +3988,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3991 "util/configparser.c" +#line 3992 "util/configparser.c" /* yacc.c:1652 */ break; case 357: -#line 1310 "./util/configparser.y" +#line 1310 "./util/configparser.y" /* yacc.c:1652 */ { 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 4002 "util/configparser.c" +#line 4003 "util/configparser.c" /* yacc.c:1652 */ break; case 358: -#line 1318 "./util/configparser.y" +#line 1318 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4014,11 +4015,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4018 "util/configparser.c" +#line 4019 "util/configparser.c" /* yacc.c:1652 */ break; case 359: -#line 1331 "./util/configparser.y" +#line 1331 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4026,11 +4027,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4030 "util/configparser.c" +#line 4031 "util/configparser.c" /* yacc.c:1652 */ break; case 360: -#line 1340 "./util/configparser.y" +#line 1340 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4038,11 +4039,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" +#line 4043 "util/configparser.c" /* yacc.c:1652 */ break; case 361: -#line 1349 "./util/configparser.y" +#line 1349 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4050,11 +4051,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" +#line 4055 "util/configparser.c" /* yacc.c:1652 */ break; case 362: -#line 1358 "./util/configparser.y" +#line 1358 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4063,11 +4064,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4067 "util/configparser.c" +#line 4068 "util/configparser.c" /* yacc.c:1652 */ break; case 363: -#line 1368 "./util/configparser.y" +#line 1368 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4076,22 +4077,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4080 "util/configparser.c" +#line 4081 "util/configparser.c" /* yacc.c:1652 */ break; case 364: -#line 1378 "./util/configparser.y" +#line 1378 "./util/configparser.y" /* yacc.c:1652 */ { 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 4091 "util/configparser.c" +#line 4092 "util/configparser.c" /* yacc.c:1652 */ break; case 365: -#line 1386 "./util/configparser.y" +#line 1386 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4103,11 +4104,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4107 "util/configparser.c" +#line 4108 "util/configparser.c" /* yacc.c:1652 */ break; case 366: -#line 1399 "./util/configparser.y" +#line 1399 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4115,22 +4116,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4119 "util/configparser.c" +#line 4120 "util/configparser.c" /* yacc.c:1652 */ break; case 367: -#line 1408 "./util/configparser.y" +#line 1408 "./util/configparser.y" /* yacc.c:1652 */ { 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 4130 "util/configparser.c" +#line 4131 "util/configparser.c" /* yacc.c:1652 */ break; case 368: -#line 1416 "./util/configparser.y" +#line 1416 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4138,22 +4139,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4142 "util/configparser.c" +#line 4143 "util/configparser.c" /* yacc.c:1652 */ break; case 369: -#line 1425 "./util/configparser.y" +#line 1425 "./util/configparser.y" /* yacc.c:1652 */ { 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 4153 "util/configparser.c" +#line 4154 "util/configparser.c" /* yacc.c:1652 */ break; case 370: -#line 1433 "./util/configparser.y" +#line 1433 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4165,11 +4166,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4169 "util/configparser.c" +#line 4170 "util/configparser.c" /* yacc.c:1652 */ break; case 371: -#line 1446 "./util/configparser.y" +#line 1446 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4177,21 +4178,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4181 "util/configparser.c" +#line 4182 "util/configparser.c" /* yacc.c:1652 */ break; case 372: -#line 1455 "./util/configparser.y" +#line 1455 "./util/configparser.y" /* yacc.c:1652 */ { 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 4191 "util/configparser.c" +#line 4192 "util/configparser.c" /* yacc.c:1652 */ break; case 373: -#line 1462 "./util/configparser.y" +#line 1462 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4200,11 +4201,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4204 "util/configparser.c" +#line 4205 "util/configparser.c" /* yacc.c:1652 */ break; case 374: -#line 1472 "./util/configparser.y" +#line 1472 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4213,11 +4214,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4217 "util/configparser.c" +#line 4218 "util/configparser.c" /* yacc.c:1652 */ break; case 375: -#line 1482 "./util/configparser.y" +#line 1482 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4226,11 +4227,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" +#line 4231 "util/configparser.c" /* yacc.c:1652 */ break; case 376: -#line 1492 "./util/configparser.y" +#line 1492 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4239,11 +4240,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4243 "util/configparser.c" +#line 4244 "util/configparser.c" /* yacc.c:1652 */ break; case 377: -#line 1502 "./util/configparser.y" +#line 1502 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4252,11 +4253,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4256 "util/configparser.c" +#line 4257 "util/configparser.c" /* yacc.c:1652 */ break; case 378: -#line 1512 "./util/configparser.y" +#line 1512 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4265,11 +4266,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4269 "util/configparser.c" +#line 4270 "util/configparser.c" /* yacc.c:1652 */ break; case 379: -#line 1522 "./util/configparser.y" +#line 1522 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4278,11 +4279,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4282 "util/configparser.c" +#line 4283 "util/configparser.c" /* yacc.c:1652 */ break; case 380: -#line 1532 "./util/configparser.y" +#line 1532 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -4291,41 +4292,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4295 "util/configparser.c" +#line 4296 "util/configparser.c" /* yacc.c:1652 */ break; case 381: -#line 1542 "./util/configparser.y" +#line 1542 "./util/configparser.y" /* yacc.c:1652 */ { 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 4305 "util/configparser.c" +#line 4306 "util/configparser.c" /* yacc.c:1652 */ break; case 382: -#line 1549 "./util/configparser.y" +#line 1549 "./util/configparser.y" /* yacc.c:1652 */ { 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 4315 "util/configparser.c" +#line 4316 "util/configparser.c" /* yacc.c:1652 */ break; case 383: -#line 1556 "./util/configparser.y" +#line 1556 "./util/configparser.y" /* yacc.c:1652 */ { 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 4325 "util/configparser.c" +#line 4326 "util/configparser.c" /* yacc.c:1652 */ break; case 384: -#line 1563 "./util/configparser.y" +#line 1563 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4333,11 +4334,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4337 "util/configparser.c" +#line 4338 "util/configparser.c" /* yacc.c:1652 */ break; case 385: -#line 1572 "./util/configparser.y" +#line 1572 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4345,11 +4346,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" +#line 4350 "util/configparser.c" /* yacc.c:1652 */ break; case 386: -#line 1581 "./util/configparser.y" +#line 1581 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4357,11 +4358,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4362 "util/configparser.c" /* yacc.c:1652 */ break; case 387: -#line 1590 "./util/configparser.y" +#line 1590 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4369,21 +4370,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" +#line 4374 "util/configparser.c" /* yacc.c:1652 */ break; case 388: -#line 1599 "./util/configparser.y" +#line 1599 "./util/configparser.y" /* yacc.c:1652 */ { 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 4383 "util/configparser.c" +#line 4384 "util/configparser.c" /* yacc.c:1652 */ break; case 389: -#line 1606 "./util/configparser.y" +#line 1606 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -4392,11 +4393,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4396 "util/configparser.c" +#line 4397 "util/configparser.c" /* yacc.c:1652 */ break; case 390: -#line 1616 "./util/configparser.y" +#line 1616 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4415,21 +4416,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4419 "util/configparser.c" +#line 4420 "util/configparser.c" /* yacc.c:1652 */ break; case 391: -#line 1636 "./util/configparser.y" +#line 1636 "./util/configparser.y" /* yacc.c:1652 */ { 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 4429 "util/configparser.c" +#line 4430 "util/configparser.c" /* yacc.c:1652 */ break; case 392: -#line 1643 "./util/configparser.y" +#line 1643 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4446,11 +4447,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4450 "util/configparser.c" +#line 4451 "util/configparser.c" /* yacc.c:1652 */ break; case 393: -#line 1661 "./util/configparser.y" +#line 1661 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4462,11 +4463,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4466 "util/configparser.c" +#line 4467 "util/configparser.c" /* yacc.c:1652 */ break; case 394: -#line 1674 "./util/configparser.y" +#line 1674 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4478,11 +4479,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" +#line 4483 "util/configparser.c" /* yacc.c:1652 */ break; case 395: -#line 1687 "./util/configparser.y" +#line 1687 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4490,11 +4491,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4494 "util/configparser.c" +#line 4495 "util/configparser.c" /* yacc.c:1652 */ break; case 396: -#line 1696 "./util/configparser.y" +#line 1696 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4502,11 +4503,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4506 "util/configparser.c" +#line 4507 "util/configparser.c" /* yacc.c:1652 */ break; case 397: -#line 1705 "./util/configparser.y" +#line 1705 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4514,11 +4515,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" +#line 4519 "util/configparser.c" /* yacc.c:1652 */ break; case 398: -#line 1714 "./util/configparser.y" +#line 1714 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4526,11 +4527,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4530 "util/configparser.c" +#line 4531 "util/configparser.c" /* yacc.c:1652 */ break; case 399: -#line 1723 "./util/configparser.y" +#line 1723 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4539,11 +4540,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4543 "util/configparser.c" +#line 4544 "util/configparser.c" /* yacc.c:1652 */ break; case 400: -#line 1733 "./util/configparser.y" +#line 1733 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4552,11 +4553,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4556 "util/configparser.c" +#line 4557 "util/configparser.c" /* yacc.c:1652 */ break; case 401: -#line 1743 "./util/configparser.y" +#line 1743 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4566,11 +4567,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4570 "util/configparser.c" +#line 4571 "util/configparser.c" /* yacc.c:1652 */ break; case 402: -#line 1754 "./util/configparser.y" +#line 1754 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4578,11 +4579,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4582 "util/configparser.c" +#line 4583 "util/configparser.c" /* yacc.c:1652 */ break; case 403: -#line 1763 "./util/configparser.y" +#line 1763 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4590,11 +4591,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4594 "util/configparser.c" +#line 4595 "util/configparser.c" /* yacc.c:1652 */ break; case 404: -#line 1772 "./util/configparser.y" +#line 1772 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4602,11 +4603,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4606 "util/configparser.c" +#line 4607 "util/configparser.c" /* yacc.c:1652 */ break; case 405: -#line 1781 "./util/configparser.y" +#line 1781 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -4614,11 +4615,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4618 "util/configparser.c" +#line 4619 "util/configparser.c" /* yacc.c:1652 */ break; case 406: -#line 1790 "./util/configparser.y" +#line 1790 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4626,11 +4627,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4630 "util/configparser.c" +#line 4631 "util/configparser.c" /* yacc.c:1652 */ break; case 407: -#line 1799 "./util/configparser.y" +#line 1799 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4638,11 +4639,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4642 "util/configparser.c" +#line 4643 "util/configparser.c" /* yacc.c:1652 */ break; case 408: -#line 1808 "./util/configparser.y" +#line 1808 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4654,11 +4655,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4658 "util/configparser.c" +#line 4659 "util/configparser.c" /* yacc.c:1652 */ break; case 409: -#line 1821 "./util/configparser.y" +#line 1821 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4670,11 +4671,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4674 "util/configparser.c" +#line 4675 "util/configparser.c" /* yacc.c:1652 */ break; case 410: -#line 1834 "./util/configparser.y" +#line 1834 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4682,21 +4683,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4686 "util/configparser.c" +#line 4687 "util/configparser.c" /* yacc.c:1652 */ break; case 411: -#line 1843 "./util/configparser.y" +#line 1843 "./util/configparser.y" /* yacc.c:1652 */ { 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 4696 "util/configparser.c" +#line 4697 "util/configparser.c" /* yacc.c:1652 */ break; case 412: -#line 1850 "./util/configparser.y" +#line 1850 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4704,11 +4705,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4708 "util/configparser.c" +#line 4709 "util/configparser.c" /* yacc.c:1652 */ break; case 413: -#line 1859 "./util/configparser.y" +#line 1859 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4716,11 +4717,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4720 "util/configparser.c" +#line 4721 "util/configparser.c" /* yacc.c:1652 */ break; case 414: -#line 1868 "./util/configparser.y" +#line 1868 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4728,11 +4729,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4732 "util/configparser.c" +#line 4733 "util/configparser.c" /* yacc.c:1652 */ break; case 415: -#line 1877 "./util/configparser.y" +#line 1877 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4741,22 +4742,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4745 "util/configparser.c" +#line 4746 "util/configparser.c" /* yacc.c:1652 */ break; case 416: -#line 1886 "./util/configparser.y" +#line 1886 "./util/configparser.y" /* yacc.c:1652 */ { 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 4756 "util/configparser.c" +#line 4757 "util/configparser.c" /* yacc.c:1652 */ break; case 417: -#line 1894 "./util/configparser.y" +#line 1894 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4768,22 +4769,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4772 "util/configparser.c" +#line 4773 "util/configparser.c" /* yacc.c:1652 */ break; case 418: -#line 1907 "./util/configparser.y" +#line 1907 "./util/configparser.y" /* yacc.c:1652 */ { 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 4783 "util/configparser.c" +#line 4784 "util/configparser.c" /* yacc.c:1652 */ break; case 419: -#line 1915 "./util/configparser.y" +#line 1915 "./util/configparser.y" /* yacc.c:1652 */ { 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 && @@ -4823,21 +4824,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4827 "util/configparser.c" +#line 4828 "util/configparser.c" /* yacc.c:1652 */ break; case 420: -#line 1956 "./util/configparser.y" +#line 1956 "./util/configparser.y" /* yacc.c:1652 */ { 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 4837 "util/configparser.c" +#line 4838 "util/configparser.c" /* yacc.c:1652 */ break; case 421: -#line 1963 "./util/configparser.y" +#line 1963 "./util/configparser.y" /* yacc.c:1652 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4851,11 +4852,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4855 "util/configparser.c" +#line 4856 "util/configparser.c" /* yacc.c:1652 */ break; case 422: -#line 1978 "./util/configparser.y" +#line 1978 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4864,11 +4865,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4868 "util/configparser.c" +#line 4869 "util/configparser.c" /* yacc.c:1652 */ break; case 423: -#line 1988 "./util/configparser.y" +#line 1988 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4877,41 +4878,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4881 "util/configparser.c" +#line 4882 "util/configparser.c" /* yacc.c:1652 */ break; case 424: -#line 1998 "./util/configparser.y" +#line 1998 "./util/configparser.y" /* yacc.c:1652 */ { 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 4891 "util/configparser.c" +#line 4892 "util/configparser.c" /* yacc.c:1652 */ break; case 425: -#line 2005 "./util/configparser.y" +#line 2005 "./util/configparser.y" /* yacc.c:1652 */ { 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 4901 "util/configparser.c" +#line 4902 "util/configparser.c" /* yacc.c:1652 */ break; case 426: -#line 2012 "./util/configparser.y" +#line 2012 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4911 "util/configparser.c" +#line 4912 "util/configparser.c" /* yacc.c:1652 */ break; case 427: -#line 2019 "./util/configparser.y" +#line 2019 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4919,22 +4920,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4923 "util/configparser.c" +#line 4924 "util/configparser.c" /* yacc.c:1652 */ break; case 428: -#line 2028 "./util/configparser.y" +#line 2028 "./util/configparser.y" /* yacc.c:1652 */ { 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 4934 "util/configparser.c" +#line 4935 "util/configparser.c" /* yacc.c:1652 */ break; case 429: -#line 2036 "./util/configparser.y" +#line 2036 "./util/configparser.y" /* yacc.c:1652 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4947,11 +4948,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4951 "util/configparser.c" +#line 4952 "util/configparser.c" /* yacc.c:1652 */ break; case 430: -#line 2050 "./util/configparser.y" +#line 2050 "./util/configparser.y" /* yacc.c:1652 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4971,11 +4972,11 @@ yyreduce: } } } -#line 4975 "util/configparser.c" +#line 4976 "util/configparser.c" /* yacc.c:1652 */ break; case 431: -#line 2071 "./util/configparser.y" +#line 2071 "./util/configparser.y" /* yacc.c:1652 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4995,11 +4996,11 @@ yyreduce: } } } -#line 4999 "util/configparser.c" +#line 5000 "util/configparser.c" /* yacc.c:1652 */ break; case 432: -#line 2092 "./util/configparser.y" +#line 2092 "./util/configparser.y" /* yacc.c:1652 */ { 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, @@ -5010,11 +5011,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5014 "util/configparser.c" +#line 5015 "util/configparser.c" /* yacc.c:1652 */ break; case 433: -#line 2104 "./util/configparser.y" +#line 2104 "./util/configparser.y" /* yacc.c:1652 */ { 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, @@ -5025,11 +5026,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5029 "util/configparser.c" +#line 5030 "util/configparser.c" /* yacc.c:1652 */ break; case 434: -#line 2116 "./util/configparser.y" +#line 2116 "./util/configparser.y" /* yacc.c:1652 */ { 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, @@ -5040,11 +5041,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5044 "util/configparser.c" +#line 5045 "util/configparser.c" /* yacc.c:1652 */ break; case 435: -#line 2128 "./util/configparser.y" +#line 2128 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5052,11 +5053,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5056 "util/configparser.c" +#line 5057 "util/configparser.c" /* yacc.c:1652 */ break; case 436: -#line 2137 "./util/configparser.y" +#line 2137 "./util/configparser.y" /* yacc.c:1652 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5076,11 +5077,11 @@ yyreduce: } } } -#line 5080 "util/configparser.c" +#line 5081 "util/configparser.c" /* yacc.c:1652 */ break; case 437: -#line 2158 "./util/configparser.y" +#line 2158 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5088,11 +5089,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5092 "util/configparser.c" +#line 5093 "util/configparser.c" /* yacc.c:1652 */ break; case 438: -#line 2168 "./util/configparser.y" +#line 2168 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5100,33 +5101,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5104 "util/configparser.c" +#line 5105 "util/configparser.c" /* yacc.c:1652 */ break; case 439: -#line 2177 "./util/configparser.y" +#line 2177 "./util/configparser.y" /* yacc.c:1652 */ { 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 5115 "util/configparser.c" +#line 5116 "util/configparser.c" /* yacc.c:1652 */ break; case 440: -#line 2185 "./util/configparser.y" +#line 2185 "./util/configparser.y" /* yacc.c:1652 */ { 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 5126 "util/configparser.c" +#line 5127 "util/configparser.c" /* yacc.c:1652 */ break; case 441: -#line 2193 "./util/configparser.y" +#line 2193 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5138,11 +5139,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5142 "util/configparser.c" +#line 5143 "util/configparser.c" /* yacc.c:1652 */ break; case 442: -#line 2206 "./util/configparser.y" +#line 2206 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5154,11 +5155,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5158 "util/configparser.c" +#line 5159 "util/configparser.c" /* yacc.c:1652 */ break; case 443: -#line 2219 "./util/configparser.y" +#line 2219 "./util/configparser.y" /* yacc.c:1652 */ { 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) { @@ -5172,11 +5173,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5176 "util/configparser.c" +#line 5177 "util/configparser.c" /* yacc.c:1652 */ break; case 444: -#line 2234 "./util/configparser.y" +#line 2234 "./util/configparser.y" /* yacc.c:1652 */ { 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) { @@ -5190,11 +5191,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5194 "util/configparser.c" +#line 5195 "util/configparser.c" /* yacc.c:1652 */ break; case 445: -#line 2249 "./util/configparser.y" +#line 2249 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5202,11 +5203,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5206 "util/configparser.c" +#line 5207 "util/configparser.c" /* yacc.c:1652 */ break; case 446: -#line 2258 "./util/configparser.y" +#line 2258 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5214,20 +5215,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5218 "util/configparser.c" +#line 5219 "util/configparser.c" /* yacc.c:1652 */ break; case 447: -#line 2267 "./util/configparser.y" +#line 2267 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5227 "util/configparser.c" +#line 5228 "util/configparser.c" /* yacc.c:1652 */ break; case 448: -#line 2273 "./util/configparser.y" +#line 2273 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5235,11 +5236,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5239 "util/configparser.c" +#line 5240 "util/configparser.c" /* yacc.c:1652 */ break; case 449: -#line 2282 "./util/configparser.y" +#line 2282 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5247,11 +5248,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5251 "util/configparser.c" +#line 5252 "util/configparser.c" /* yacc.c:1652 */ break; case 450: -#line 2291 "./util/configparser.y" +#line 2291 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5260,11 +5261,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5264 "util/configparser.c" +#line 5265 "util/configparser.c" /* yacc.c:1652 */ break; case 451: -#line 2301 "./util/configparser.y" +#line 2301 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5273,11 +5274,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5277 "util/configparser.c" +#line 5278 "util/configparser.c" /* yacc.c:1652 */ break; case 452: -#line 2311 "./util/configparser.y" +#line 2311 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5289,11 +5290,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5293 "util/configparser.c" +#line 5294 "util/configparser.c" /* yacc.c:1652 */ break; case 453: -#line 2324 "./util/configparser.y" +#line 2324 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5305,11 +5306,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5309 "util/configparser.c" +#line 5310 "util/configparser.c" /* yacc.c:1652 */ break; case 454: -#line 2337 "./util/configparser.y" +#line 2337 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5320,11 +5321,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5324 "util/configparser.c" +#line 5325 "util/configparser.c" /* yacc.c:1652 */ break; case 455: -#line 2349 "./util/configparser.y" +#line 2349 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5337,11 +5338,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5341 "util/configparser.c" +#line 5342 "util/configparser.c" /* yacc.c:1652 */ break; case 456: -#line 2363 "./util/configparser.y" +#line 2363 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5352,11 +5353,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5356 "util/configparser.c" +#line 5357 "util/configparser.c" /* yacc.c:1652 */ break; case 457: -#line 2375 "./util/configparser.y" +#line 2375 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5369,11 +5370,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5373 "util/configparser.c" +#line 5374 "util/configparser.c" /* yacc.c:1652 */ break; case 458: -#line 2389 "./util/configparser.y" +#line 2389 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5382,31 +5383,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5386 "util/configparser.c" +#line 5387 "util/configparser.c" /* yacc.c:1652 */ break; case 459: -#line 2399 "./util/configparser.y" +#line 2399 "./util/configparser.y" /* yacc.c:1652 */ { 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 5396 "util/configparser.c" +#line 5397 "util/configparser.c" /* yacc.c:1652 */ break; case 460: -#line 2406 "./util/configparser.y" +#line 2406 "./util/configparser.y" /* yacc.c:1652 */ { 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 5406 "util/configparser.c" +#line 5407 "util/configparser.c" /* yacc.c:1652 */ break; case 461: -#line 2413 "./util/configparser.y" +#line 2413 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5414,11 +5415,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5418 "util/configparser.c" +#line 5419 "util/configparser.c" /* yacc.c:1652 */ break; case 462: -#line 2422 "./util/configparser.y" +#line 2422 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5426,11 +5427,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5430 "util/configparser.c" +#line 5431 "util/configparser.c" /* yacc.c:1652 */ break; case 463: -#line 2431 "./util/configparser.y" +#line 2431 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5439,11 +5440,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5443 "util/configparser.c" +#line 5444 "util/configparser.c" /* yacc.c:1652 */ break; case 464: -#line 2441 "./util/configparser.y" +#line 2441 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5452,11 +5453,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5456 "util/configparser.c" +#line 5457 "util/configparser.c" /* yacc.c:1652 */ break; case 465: -#line 2451 "./util/configparser.y" +#line 2451 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5465,31 +5466,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5469 "util/configparser.c" +#line 5470 "util/configparser.c" /* yacc.c:1652 */ break; case 466: -#line 2461 "./util/configparser.y" +#line 2461 "./util/configparser.y" /* yacc.c:1652 */ { 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 5479 "util/configparser.c" +#line 5480 "util/configparser.c" /* yacc.c:1652 */ break; case 467: -#line 2468 "./util/configparser.y" +#line 2468 "./util/configparser.y" /* yacc.c:1652 */ { 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 5489 "util/configparser.c" +#line 5490 "util/configparser.c" /* yacc.c:1652 */ break; case 468: -#line 2475 "./util/configparser.y" +#line 2475 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5497,11 +5498,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5501 "util/configparser.c" +#line 5502 "util/configparser.c" /* yacc.c:1652 */ break; case 469: -#line 2484 "./util/configparser.y" +#line 2484 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5509,11 +5510,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5513 "util/configparser.c" +#line 5514 "util/configparser.c" /* yacc.c:1652 */ break; case 470: -#line 2493 "./util/configparser.y" +#line 2493 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5522,11 +5523,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5526 "util/configparser.c" +#line 5527 "util/configparser.c" /* yacc.c:1652 */ break; case 471: -#line 2503 "./util/configparser.y" +#line 2503 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5535,52 +5536,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5539 "util/configparser.c" +#line 5540 "util/configparser.c" /* yacc.c:1652 */ break; case 472: -#line 2513 "./util/configparser.y" +#line 2513 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5549 "util/configparser.c" +#line 5550 "util/configparser.c" /* yacc.c:1652 */ break; case 473: -#line 2520 "./util/configparser.y" +#line 2520 "./util/configparser.y" /* yacc.c:1652 */ { 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 5559 "util/configparser.c" +#line 5560 "util/configparser.c" /* yacc.c:1652 */ break; case 474: -#line 2527 "./util/configparser.y" +#line 2527 "./util/configparser.y" /* yacc.c:1652 */ { 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 5569 "util/configparser.c" +#line 5570 "util/configparser.c" /* yacc.c:1652 */ break; case 475: -#line 2534 "./util/configparser.y" +#line 2534 "./util/configparser.y" /* yacc.c:1652 */ { 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 5580 "util/configparser.c" +#line 5581 "util/configparser.c" /* yacc.c:1652 */ break; case 476: -#line 2542 "./util/configparser.y" +#line 2542 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5589,11 +5590,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5593 "util/configparser.c" +#line 5594 "util/configparser.c" /* yacc.c:1652 */ break; case 477: -#line 2552 "./util/configparser.y" +#line 2552 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5602,11 +5603,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5606 "util/configparser.c" +#line 5607 "util/configparser.c" /* yacc.c:1652 */ break; case 478: -#line 2562 "./util/configparser.y" +#line 2562 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5615,11 +5616,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5619 "util/configparser.c" +#line 5620 "util/configparser.c" /* yacc.c:1652 */ break; case 479: -#line 2572 "./util/configparser.y" +#line 2572 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5628,11 +5629,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5632 "util/configparser.c" +#line 5633 "util/configparser.c" /* yacc.c:1652 */ break; case 480: -#line 2582 "./util/configparser.y" +#line 2582 "./util/configparser.y" /* yacc.c:1652 */ { 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 && @@ -5670,11 +5671,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5674 "util/configparser.c" +#line 5675 "util/configparser.c" /* yacc.c:1652 */ break; case 481: -#line 2621 "./util/configparser.y" +#line 2621 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5683,33 +5684,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5687 "util/configparser.c" +#line 5688 "util/configparser.c" /* yacc.c:1652 */ break; case 482: -#line 2631 "./util/configparser.y" +#line 2631 "./util/configparser.y" /* yacc.c:1652 */ { 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 5698 "util/configparser.c" +#line 5699 "util/configparser.c" /* yacc.c:1652 */ break; case 483: -#line 2639 "./util/configparser.y" +#line 2639 "./util/configparser.y" /* yacc.c:1652 */ { 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 5709 "util/configparser.c" +#line 5710 "util/configparser.c" /* yacc.c:1652 */ break; case 484: -#line 2647 "./util/configparser.y" +#line 2647 "./util/configparser.y" /* yacc.c:1652 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5723,11 +5724,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5727 "util/configparser.c" +#line 5728 "util/configparser.c" /* yacc.c:1652 */ break; case 485: -#line 2662 "./util/configparser.y" +#line 2662 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5735,19 +5736,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5739 "util/configparser.c" +#line 5740 "util/configparser.c" /* yacc.c:1652 */ break; case 486: -#line 2671 "./util/configparser.y" +#line 2671 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5747 "util/configparser.c" +#line 5748 "util/configparser.c" /* yacc.c:1652 */ break; case 497: -#line 2682 "./util/configparser.y" +#line 2682 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5756,11 +5757,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5760 "util/configparser.c" +#line 5761 "util/configparser.c" /* yacc.c:1652 */ break; case 498: -#line 2692 "./util/configparser.y" +#line 2692 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5768,79 +5769,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5772 "util/configparser.c" +#line 5773 "util/configparser.c" /* yacc.c:1652 */ break; case 499: -#line 2701 "./util/configparser.y" +#line 2701 "./util/configparser.y" /* yacc.c:1652 */ { 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 5782 "util/configparser.c" +#line 5783 "util/configparser.c" /* yacc.c:1652 */ break; case 500: -#line 2708 "./util/configparser.y" +#line 2708 "./util/configparser.y" /* yacc.c:1652 */ { 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 5792 "util/configparser.c" +#line 5793 "util/configparser.c" /* yacc.c:1652 */ break; case 501: -#line 2715 "./util/configparser.y" +#line 2715 "./util/configparser.y" /* yacc.c:1652 */ { 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 5802 "util/configparser.c" +#line 5803 "util/configparser.c" /* yacc.c:1652 */ break; case 502: -#line 2722 "./util/configparser.y" +#line 2722 "./util/configparser.y" /* yacc.c:1652 */ { 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 5812 "util/configparser.c" +#line 5813 "util/configparser.c" /* yacc.c:1652 */ break; case 503: -#line 2729 "./util/configparser.y" +#line 2729 "./util/configparser.y" /* yacc.c:1652 */ { 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 5822 "util/configparser.c" +#line 5823 "util/configparser.c" /* yacc.c:1652 */ break; case 504: -#line 2736 "./util/configparser.y" +#line 2736 "./util/configparser.y" /* yacc.c:1652 */ { 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 5832 "util/configparser.c" +#line 5833 "util/configparser.c" /* yacc.c:1652 */ break; case 505: -#line 2743 "./util/configparser.y" +#line 2743 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5840 "util/configparser.c" +#line 5841 "util/configparser.c" /* yacc.c:1652 */ break; case 526: -#line 2763 "./util/configparser.y" +#line 2763 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5848,31 +5849,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5852 "util/configparser.c" +#line 5853 "util/configparser.c" /* yacc.c:1652 */ break; case 527: -#line 2772 "./util/configparser.y" +#line 2772 "./util/configparser.y" /* yacc.c:1652 */ { 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 5862 "util/configparser.c" +#line 5863 "util/configparser.c" /* yacc.c:1652 */ break; case 528: -#line 2779 "./util/configparser.y" +#line 2779 "./util/configparser.y" /* yacc.c:1652 */ { 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 5872 "util/configparser.c" +#line 5873 "util/configparser.c" /* yacc.c:1652 */ break; case 529: -#line 2786 "./util/configparser.y" +#line 2786 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5880,51 +5881,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5884 "util/configparser.c" +#line 5885 "util/configparser.c" /* yacc.c:1652 */ break; case 530: -#line 2795 "./util/configparser.y" +#line 2795 "./util/configparser.y" /* yacc.c:1652 */ { 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 5894 "util/configparser.c" +#line 5895 "util/configparser.c" /* yacc.c:1652 */ break; case 531: -#line 2802 "./util/configparser.y" +#line 2802 "./util/configparser.y" /* yacc.c:1652 */ { 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 5904 "util/configparser.c" +#line 5905 "util/configparser.c" /* yacc.c:1652 */ break; case 532: -#line 2809 "./util/configparser.y" +#line 2809 "./util/configparser.y" /* yacc.c:1652 */ { 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 5914 "util/configparser.c" +#line 5915 "util/configparser.c" /* yacc.c:1652 */ break; case 533: -#line 2816 "./util/configparser.y" +#line 2816 "./util/configparser.y" /* yacc.c:1652 */ { 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 5924 "util/configparser.c" +#line 5925 "util/configparser.c" /* yacc.c:1652 */ break; case 534: -#line 2823 "./util/configparser.y" +#line 2823 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5932,11 +5933,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5936 "util/configparser.c" +#line 5937 "util/configparser.c" /* yacc.c:1652 */ break; case 535: -#line 2832 "./util/configparser.y" +#line 2832 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5944,31 +5945,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5948 "util/configparser.c" +#line 5949 "util/configparser.c" /* yacc.c:1652 */ break; case 536: -#line 2841 "./util/configparser.y" +#line 2841 "./util/configparser.y" /* yacc.c:1652 */ { 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 5958 "util/configparser.c" +#line 5959 "util/configparser.c" /* yacc.c:1652 */ break; case 537: -#line 2848 "./util/configparser.y" +#line 2848 "./util/configparser.y" /* yacc.c:1652 */ { 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 5968 "util/configparser.c" +#line 5969 "util/configparser.c" /* yacc.c:1652 */ break; case 538: -#line 2855 "./util/configparser.y" +#line 2855 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -5977,11 +5978,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5981 "util/configparser.c" +#line 5982 "util/configparser.c" /* yacc.c:1652 */ break; case 539: -#line 2865 "./util/configparser.y" +#line 2865 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -5990,11 +5991,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5994 "util/configparser.c" +#line 5995 "util/configparser.c" /* yacc.c:1652 */ break; case 540: -#line 2875 "./util/configparser.y" +#line 2875 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -6003,11 +6004,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6007 "util/configparser.c" +#line 6008 "util/configparser.c" /* yacc.c:1652 */ break; case 541: -#line 2885 "./util/configparser.y" +#line 2885 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -6016,11 +6017,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6020 "util/configparser.c" +#line 6021 "util/configparser.c" /* yacc.c:1652 */ break; case 542: -#line 2895 "./util/configparser.y" +#line 2895 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -6029,11 +6030,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6033 "util/configparser.c" +#line 6034 "util/configparser.c" /* yacc.c:1652 */ break; case 543: -#line 2905 "./util/configparser.y" +#line 2905 "./util/configparser.y" /* yacc.c:1652 */ { 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) @@ -6042,29 +6043,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6046 "util/configparser.c" +#line 6047 "util/configparser.c" /* yacc.c:1652 */ break; case 544: -#line 2915 "./util/configparser.y" +#line 2915 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(python:)\n")); } -#line 6054 "util/configparser.c" +#line 6055 "util/configparser.c" /* yacc.c:1652 */ break; case 548: -#line 2924 "./util/configparser.y" +#line 2924 "./util/configparser.y" /* yacc.c:1652 */ { 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 6064 "util/configparser.c" +#line 6065 "util/configparser.c" /* yacc.c:1652 */ break; case 549: -#line 2930 "./util/configparser.y" +#line 2930 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6073,21 +6074,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6077 "util/configparser.c" +#line 6078 "util/configparser.c" /* yacc.c:1652 */ break; case 550: -#line 2940 "./util/configparser.y" +#line 2940 "./util/configparser.y" /* yacc.c:1652 */ { 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 6087 "util/configparser.c" +#line 6088 "util/configparser.c" /* yacc.c:1652 */ break; case 551: -#line 2947 "./util/configparser.y" +#line 2947 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6095,30 +6096,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6099 "util/configparser.c" +#line 6100 "util/configparser.c" /* yacc.c:1652 */ break; case 552: -#line 2956 "./util/configparser.y" +#line 2956 "./util/configparser.y" /* yacc.c:1652 */ { 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 6110 "util/configparser.c" +#line 6111 "util/configparser.c" /* yacc.c:1652 */ break; case 553: -#line 2964 "./util/configparser.y" +#line 2964 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6118 "util/configparser.c" +#line 6119 "util/configparser.c" /* yacc.c:1652 */ break; case 566: -#line 2980 "./util/configparser.y" +#line 2980 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6126,11 +6127,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6130 "util/configparser.c" +#line 6131 "util/configparser.c" /* yacc.c:1652 */ break; case 567: -#line 2990 "./util/configparser.y" +#line 2990 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6138,21 +6139,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6142 "util/configparser.c" +#line 6143 "util/configparser.c" /* yacc.c:1652 */ break; case 568: -#line 2999 "./util/configparser.y" +#line 2999 "./util/configparser.y" /* yacc.c:1652 */ { 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 6152 "util/configparser.c" +#line 6153 "util/configparser.c" /* yacc.c:1652 */ break; case 569: -#line 3006 "./util/configparser.y" +#line 3006 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6160,21 +6161,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6164 "util/configparser.c" +#line 6165 "util/configparser.c" /* yacc.c:1652 */ break; case 570: -#line 3015 "./util/configparser.y" +#line 3015 "./util/configparser.y" /* yacc.c:1652 */ { 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 6174 "util/configparser.c" +#line 6175 "util/configparser.c" /* yacc.c:1652 */ break; case 571: -#line 3022 "./util/configparser.y" +#line 3022 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6182,22 +6183,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6186 "util/configparser.c" +#line 6187 "util/configparser.c" /* yacc.c:1652 */ break; case 572: -#line 3031 "./util/configparser.y" +#line 3031 "./util/configparser.y" /* yacc.c:1652 */ { 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 6197 "util/configparser.c" +#line 6198 "util/configparser.c" /* yacc.c:1652 */ break; case 573: -#line 3039 "./util/configparser.y" +#line 3039 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6209,22 +6210,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6213 "util/configparser.c" +#line 6214 "util/configparser.c" /* yacc.c:1652 */ break; case 574: -#line 3052 "./util/configparser.y" +#line 3052 "./util/configparser.y" /* yacc.c:1652 */ { 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 6224 "util/configparser.c" +#line 6225 "util/configparser.c" /* yacc.c:1652 */ break; case 575: -#line 3060 "./util/configparser.y" +#line 3060 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6236,19 +6237,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6240 "util/configparser.c" +#line 6241 "util/configparser.c" /* yacc.c:1652 */ break; case 576: -#line 3073 "./util/configparser.y" +#line 3073 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6248 "util/configparser.c" +#line 6249 "util/configparser.c" /* yacc.c:1652 */ break; - case 584: -#line 3083 "./util/configparser.y" + case 585: +#line 3083 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6259,11 +6260,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6263 "util/configparser.c" +#line 6264 "util/configparser.c" /* yacc.c:1652 */ break; - case 585: -#line 3095 "./util/configparser.y" + case 586: +#line 3095 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6274,11 +6275,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6278 "util/configparser.c" +#line 6279 "util/configparser.c" /* yacc.c:1652 */ break; - case 586: -#line 3107 "./util/configparser.y" + case 587: +#line 3107 "./util/configparser.y" /* yacc.c:1652 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6289,11 +6290,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6293 "util/configparser.c" +#line 6294 "util/configparser.c" /* yacc.c:1652 */ break; - case 587: -#line 3119 "./util/configparser.y" + case 588: +#line 3119 "./util/configparser.y" /* yacc.c:1652 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6307,11 +6308,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6311 "util/configparser.c" +#line 6312 "util/configparser.c" /* yacc.c:1652 */ break; - case 588: -#line 3134 "./util/configparser.y" + case 589: +#line 3134 "./util/configparser.y" /* yacc.c:1652 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6323,11 +6324,27 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6327 "util/configparser.c" +#line 6328 "util/configparser.c" /* yacc.c:1652 */ break; - case 589: -#line 3147 "./util/configparser.y" + case 590: +#line 3147 "./util/configparser.y" /* yacc.c:1652 */ + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_set_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->redis_set_ttl = (strcmp((yyvsp[0].str), "yes")==0); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 6344 "util/configparser.c" /* yacc.c:1652 */ + break; + + case 591: +#line 3160 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6337,19 +6354,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6341 "util/configparser.c" +#line 6358 "util/configparser.c" /* yacc.c:1652 */ break; - case 590: -#line 3158 "./util/configparser.y" + case 592: +#line 3171 "./util/configparser.y" /* yacc.c:1652 */ { OUTYY(("\nP(ipset:)\n")); } -#line 6349 "util/configparser.c" +#line 6366 "util/configparser.c" /* yacc.c:1652 */ break; - case 595: -#line 3167 "./util/configparser.y" + case 597: +#line 3180 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6363,11 +6380,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6367 "util/configparser.c" +#line 6384 "util/configparser.c" /* yacc.c:1652 */ break; - case 596: -#line 3182 "./util/configparser.y" + case 598: +#line 3195 "./util/configparser.y" /* yacc.c:1652 */ { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6381,12 +6398,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6385 "util/configparser.c" +#line 6402 "util/configparser.c" /* yacc.c:1652 */ break; -#line 6389 "util/configparser.c" - +#line 6406 "util/configparser.c" /* yacc.c:1652 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6617,7 +6633,7 @@ yyreturn: #endif return yyresult; } -#line 3196 "./util/configparser.y" +#line 3209 "./util/configparser.y" /* yacc.c:1918 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index f5958de4b..f2598c773 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison interface for Yacc-like parsers in C @@ -297,41 +297,42 @@ extern int yydebug; VAR_CACHEDB_REDISHOST = 503, VAR_CACHEDB_REDISPORT = 504, VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 + VAR_CACHEDB_REDISSETTTL = 506, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 507, + VAR_FOR_UPSTREAM = 508, + VAR_AUTH_ZONE = 509, + VAR_ZONEFILE = 510, + VAR_MASTER = 511, + VAR_URL = 512, + VAR_FOR_DOWNSTREAM = 513, + VAR_FALLBACK_ENABLED = 514, + VAR_TLS_ADDITIONAL_PORT = 515, + VAR_LOW_RTT = 516, + VAR_LOW_RTT_PERMIL = 517, + VAR_FAST_SERVER_PERMIL = 518, + VAR_FAST_SERVER_NUM = 519, + VAR_ALLOW_NOTIFY = 520, + VAR_TLS_WIN_CERT = 521, + VAR_TCP_CONNECTION_LIMIT = 522, + VAR_FORWARD_NO_CACHE = 523, + VAR_STUB_NO_CACHE = 524, + VAR_LOG_SERVFAIL = 525, + VAR_DENY_ANY = 526, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 527, + VAR_LOG_TAG_QUERYREPLY = 528, + VAR_STREAM_WAIT_SIZE = 529, + VAR_TLS_CIPHERS = 530, + VAR_TLS_CIPHERSUITES = 531, + VAR_IPSET = 532, + VAR_IPSET_NAME_V4 = 533, + VAR_IPSET_NAME_V6 = 534, + VAR_TLS_SESSION_TICKET_KEYS = 535, + VAR_RPZ = 536, + VAR_TAGS = 537, + VAR_RPZ_ACTION_OVERRIDE = 538, + VAR_RPZ_CNAME_OVERRIDE = 539, + VAR_RPZ_LOG = 540, + VAR_RPZ_LOG_NAME = 541 }; #endif /* Tokens. */ @@ -583,53 +584,55 @@ extern int yydebug; #define VAR_CACHEDB_REDISHOST 503 #define VAR_CACHEDB_REDISPORT 504 #define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 -#define VAR_FOR_UPSTREAM 507 -#define VAR_AUTH_ZONE 508 -#define VAR_ZONEFILE 509 -#define VAR_MASTER 510 -#define VAR_URL 511 -#define VAR_FOR_DOWNSTREAM 512 -#define VAR_FALLBACK_ENABLED 513 -#define VAR_TLS_ADDITIONAL_PORT 514 -#define VAR_LOW_RTT 515 -#define VAR_LOW_RTT_PERMIL 516 -#define VAR_FAST_SERVER_PERMIL 517 -#define VAR_FAST_SERVER_NUM 518 -#define VAR_ALLOW_NOTIFY 519 -#define VAR_TLS_WIN_CERT 520 -#define VAR_TCP_CONNECTION_LIMIT 521 -#define VAR_FORWARD_NO_CACHE 522 -#define VAR_STUB_NO_CACHE 523 -#define VAR_LOG_SERVFAIL 524 -#define VAR_DENY_ANY 525 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 -#define VAR_LOG_TAG_QUERYREPLY 527 -#define VAR_STREAM_WAIT_SIZE 528 -#define VAR_TLS_CIPHERS 529 -#define VAR_TLS_CIPHERSUITES 530 -#define VAR_IPSET 531 -#define VAR_IPSET_NAME_V4 532 -#define VAR_IPSET_NAME_V6 533 -#define VAR_TLS_SESSION_TICKET_KEYS 534 -#define VAR_RPZ 535 -#define VAR_TAGS 536 -#define VAR_RPZ_ACTION_OVERRIDE 537 -#define VAR_RPZ_CNAME_OVERRIDE 538 -#define VAR_RPZ_LOG 539 -#define VAR_RPZ_LOG_NAME 540 +#define VAR_CACHEDB_REDISSETTTL 506 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 507 +#define VAR_FOR_UPSTREAM 508 +#define VAR_AUTH_ZONE 509 +#define VAR_ZONEFILE 510 +#define VAR_MASTER 511 +#define VAR_URL 512 +#define VAR_FOR_DOWNSTREAM 513 +#define VAR_FALLBACK_ENABLED 514 +#define VAR_TLS_ADDITIONAL_PORT 515 +#define VAR_LOW_RTT 516 +#define VAR_LOW_RTT_PERMIL 517 +#define VAR_FAST_SERVER_PERMIL 518 +#define VAR_FAST_SERVER_NUM 519 +#define VAR_ALLOW_NOTIFY 520 +#define VAR_TLS_WIN_CERT 521 +#define VAR_TCP_CONNECTION_LIMIT 522 +#define VAR_FORWARD_NO_CACHE 523 +#define VAR_STUB_NO_CACHE 524 +#define VAR_LOG_SERVFAIL 525 +#define VAR_DENY_ANY 526 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 527 +#define VAR_LOG_TAG_QUERYREPLY 528 +#define VAR_STREAM_WAIT_SIZE 529 +#define VAR_TLS_CIPHERS 530 +#define VAR_TLS_CIPHERSUITES 531 +#define VAR_IPSET 532 +#define VAR_IPSET_NAME_V4 533 +#define VAR_IPSET_NAME_V6 534 +#define VAR_TLS_SESSION_TICKET_KEYS 535 +#define VAR_RPZ 536 +#define VAR_TAGS 537 +#define VAR_RPZ_ACTION_OVERRIDE 538 +#define VAR_RPZ_CNAME_OVERRIDE 539 +#define VAR_RPZ_LOG 540 +#define VAR_RPZ_LOG_NAME 541 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:1921 */ char* str; -#line 631 "util/configparser.h" - +#line 634 "util/configparser.h" /* yacc.c:1921 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index f7be1019c..5ff37d093 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -161,7 +161,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED -%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT +%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT VAR_CACHEDB_REDISSETTTL %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL @@ -3077,7 +3077,7 @@ cachedbstart: VAR_CACHEDB contents_cachedb: contents_cachedb content_cachedb | ; content_cachedb: cachedb_backend_name | cachedb_secret_seed | - redis_server_host | redis_server_port | redis_timeout + redis_server_host | redis_server_port | redis_timeout | redis_set_ttl ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { @@ -3143,6 +3143,19 @@ redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG free($2); } ; +redis_set_ttl: VAR_CACHEDB_REDISSETTTL STRING_ARG + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_set_ttl:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->redis_set_ttl = (strcmp($2, "yes")==0); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free($2); + } + ; server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", $2, $3)); From c25eb2c4c81911d57c5917744f73b4a438548cc0 Mon Sep 17 00:00:00 2001 From: Talkabout Date: Tue, 31 Mar 2020 23:10:45 +0200 Subject: [PATCH 197/235] implemented review feedback renamed option from 'redis-set-ttl' to 'redis-expire-records' --- cachedb/redis.c | 22 +- doc/unbound.conf.5.in | 11 +- util/config_file.c | 4 +- util/config_file.h | 2 +- util/configlexer.c | 3379 +++++++++++++++++++++-------------------- util/configlexer.lex | 2 +- util/configparser.c | 12 +- util/configparser.h | 4 +- util/configparser.y | 10 +- 9 files changed, 1728 insertions(+), 1718 deletions(-) diff --git a/cachedb/redis.c b/cachedb/redis.c index f84d4286f..dbdd9c3f4 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -94,6 +94,7 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) int i; struct redis_moddata* moddata = NULL; redisReply* rep; + int redis_reply_type = 0; verbose(VERB_ALGO, "redis_init"); @@ -118,18 +119,20 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) for(i = 0; i < moddata->numctxs; i++) moddata->ctxs[i] = redis_connect(moddata); cachedb_env->backend_data = moddata; - - if (env->cfg->redis_set_ttl) { + if (env->cfg->redis_expire_records) { /** check if setex command is supported */ rep = redis_command(env, cachedb_env, "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0); - if(!rep) + if(!rep) { /** init failed, no response from redis server*/ - log_err("redis_init: failed to init redis, could not connect to server"); + log_err("redis_init: failed to init redis, the redis-expire-records option requires the SETEX command (redis >= 2.0.0)"); return 0; - switch (rep->type) { + } + redis_reply_type = rep->type; + freeReplyObject(rep); + switch (redis_reply_type) { case REDIS_REPLY_ERROR: /** init failed, setex command not supported */ - log_err("redis_init: failed to init redis, setex command not supported?"); + log_err("redis_init: failed to init redis, the redis-expire-records option requires the SETEX command (redis >= 2.0.0)"); return 0; default: break; @@ -275,15 +278,14 @@ redis_store(struct module_env* env, struct cachedb_env* cachedb_env, { redisReply* rep; int n; - int set_ttl = (int)(env->cfg->redis_set_ttl && (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); - char cmdbuf[4+(CACHEDB_HASHSIZE/8)*2+3+((2+11)*set_ttl)+1]; /* "SETEX " + key + " " + ttl + " %b" */ + int set_ttl = (int)(env->cfg->redis_expire_records && (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); + char cmdbuf[6+(CACHEDB_HASHSIZE/8)*2+11+3+1]; /* "SETEX " + key + " " + ttl + " %b" or "SET " + key + " %b"*/ if (!set_ttl) { verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); /* build command to set to a binary safe string */ n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); - } - else { + } else { /* add expired ttl time to redis ttl to avoid premature eviction of key */ ttl += env->cfg->serve_expired_ttl; verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u", key, (int)data_len, (uint32_t)ttl); diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 2feed3e6b..775194e7a 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2128,11 +2128,12 @@ if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. .TP -.B redis-set-ttl: \fI -If redis ttl is enabled. If yes, unbound sets ttl for redis records so -that redis can evict keys that have expired automatically. If unbound -is configured to serve expired entries and there is no expired ttl set, -this option is internally reverted to "no". +.B redis-expire-records: \fI +If redis record expiration is enabled. If yes, unbound sets ttl for redis +records so that redis can evict keys that have expired automatically. If +unbound is configured to serve expired entries and there is no expired ttl +set, this option is internally reverted to "no". Redis SETEX support required +(redis >= 2.0.0). This option defaults to no. .SS DNSTAP Logging Options DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. diff --git a/util/config_file.c b/util/config_file.c index 9329ba92a..a53095caa 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -337,7 +337,7 @@ config_create(void) if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit; cfg->redis_timeout = 100; cfg->redis_server_port = 6379; - cfg->redis_set_ttl = 0; + cfg->redis_expire_records = 0; #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET @@ -1136,7 +1136,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "redis-server-host", redis_server_host) else O_DEC(opt, "redis-server-port", redis_server_port) else O_DEC(opt, "redis-timeout", redis_timeout) - else O_YNO(opt, "redis-set-ttl", redis_set_ttl) + else O_YNO(opt, "redis-expire-records", redis_expire_records) #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET diff --git a/util/config_file.h b/util/config_file.h index 027a9345f..0099fb77b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -599,7 +599,7 @@ struct config_file { /** timeout (in ms) for communication with the redis server */ int redis_timeout; /** set redis ttl value based on dns response ttl */ - int redis_set_ttl; + int redis_expire_records; #endif #endif diff --git a/util/configlexer.c b/util/configlexer.c index 0f3a003bd..ec2790d86 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,7 +363,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3055] = +static const flex_int16_t yy_accept[3064] = { 0, 1, 1, 293, 293, 297, 297, 301, 301, 305, 305, 1, 1, 312, 309, 1, 291, 291, 310, 2, 310, @@ -449,258 +449,259 @@ static const flex_int16_t yy_accept[3055] = 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 208, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 3, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 3, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 308, 309, 309, - 309, 309, 309, 309, 309, 280, 309, 309, 279, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 308, 309, + 309, 309, 309, 309, 309, 309, 280, 309, 309, 279, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 300, 309, 309, 309, 309, 309, - 309, 309, 55, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 300, 309, 309, 309, 309, + 309, 309, 309, 55, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 59, - 309, 254, 309, 309, 309, 309, 309, 309, 309, 309, - 287, 288, 309, 309, 309, 309, 309, 60, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 118, 309, 309, 309, 309, 309, 309, - 309, 309, 197, 309, 309, 309, 309, 309, 309, 309, + 59, 309, 254, 309, 309, 309, 309, 309, 309, 309, + 309, 287, 288, 309, 309, 309, 309, 309, 60, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 21, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 118, 309, 309, 309, 309, + 309, 309, 309, 309, 197, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 21, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 146, 309, 309, 300, 309, 309, 309, 309, 309, + 309, 309, 309, 146, 309, 309, 300, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 96, 309, 309, 309, 309, - 309, 309, 309, 262, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 169, 309, + 309, 309, 309, 309, 309, 309, 309, 96, 309, 309, + 309, 309, 309, 309, 309, 262, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 169, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 145, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 145, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 95, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 95, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 32, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 32, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 33, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 57, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 120, 309, 309, 309, 309, 309, - 113, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 33, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 57, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 120, 309, 309, 309, + 309, 309, 113, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 58, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 227, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 170, + 309, 309, 309, 309, 309, 309, 309, 58, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 227, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 170, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 46, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 46, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 245, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 50, 309, 51, - 309, 309, 309, 309, 309, 99, 309, 100, 309, 309, - 309, 309, 97, 309, 309, 309, 309, 309, 309, 309, + 245, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 50, + 309, 51, 309, 309, 309, 309, 309, 99, 309, 100, + 309, 309, 309, 309, 97, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 7, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 217, - 309, 309, 309, 309, 148, 309, 309, 309, 309, 309, + 309, 309, 7, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 217, 309, 309, 309, 309, 148, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 228, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 228, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 47, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 47, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 189, 309, 188, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 189, 309, 188, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 16, - 17, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 16, 17, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 61, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 196, 309, 309, 309, - 309, 309, 309, 102, 309, 101, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 61, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 196, 309, + 309, 309, 309, 309, 309, 102, 309, 101, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 180, 309, 309, 309, - 309, 309, 309, 309, 309, 128, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 180, 309, + 309, 309, 309, 309, 309, 309, 309, 128, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 80, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 80, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 84, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 84, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 54, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 183, - 184, 309, 309, 309, 256, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 6, 309, 309, + 309, 309, 309, 54, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 260, - 309, 309, 309, 309, 309, 309, 281, 309, 309, 309, + 309, 183, 184, 309, 309, 309, 256, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 6, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 260, 309, 309, 309, 309, 309, 309, 281, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 42, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 42, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 44, 309, 309, 309, 309, 309, 309, 309, 309, 176, - 309, 309, 309, 123, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 201, 309, 177, 309, 309, 309, - 214, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 44, 309, 309, 309, 309, 309, 309, 309, + 309, 176, 309, 309, 309, 123, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 201, 309, 177, 309, + 309, 309, 214, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 45, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 125, 107, 309, 108, 309, 309, 309, 106, 309, 309, + 309, 309, 45, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 125, 107, 309, 108, 309, 309, 309, 106, - 309, 309, 309, 309, 309, 309, 143, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 244, 309, - 309, 309, 309, 309, 309, 309, 309, 178, 309, 309, - 309, 309, 309, 181, 309, 187, 309, 309, 309, 309, - 309, 213, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 94, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 143, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 119, 309, 309, 309, 309, - 309, 309, 52, 309, 309, 309, 26, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 20, 309, 309, 309, + 244, 309, 309, 309, 309, 309, 309, 309, 309, 178, + 309, 309, 309, 309, 309, 181, 309, 187, 309, 309, + 309, 309, 309, 213, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 94, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 119, 309, 309, + 309, 309, 309, 309, 52, 309, 309, 309, 26, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 20, 309, - 309, 309, 309, 27, 36, 309, 153, 309, 309, 309, + 309, 309, 309, 309, 309, 27, 36, 309, 153, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 69, 71, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 69, 71, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 264, 309, 309, 309, 225, 309, 309, 309, 309, + 309, 309, 309, 264, 309, 309, 309, 225, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 109, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 142, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 109, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 142, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 275, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 275, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 147, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 207, 309, 309, 309, - 309, 309, 309, 309, 309, 285, 284, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 164, 309, - 309, 309, 309, 309, 309, 309, 309, 103, 309, 309, + 309, 309, 309, 309, 147, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 207, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 284, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 159, 309, 171, - 309, 309, 309, 309, 309, 131, 309, 309, 309, 309, - 309, 90, 309, 309, 309, 309, 199, 309, 309, 309, + 164, 309, 309, 309, 309, 309, 309, 309, 309, 103, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 159, + 309, 171, 309, 309, 309, 309, 309, 131, 309, 309, + 309, 309, 309, 90, 309, 309, 309, 309, 199, 309, - 309, 309, 309, 215, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 236, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 124, + 309, 309, 309, 309, 309, 215, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 163, 309, 309, 309, 309, 309, 72, 73, 309, 309, - 309, 309, 309, 53, 309, 309, 309, 309, 309, 79, - 172, 309, 190, 309, 218, 309, 309, 182, 257, 309, - 309, 309, 309, 309, 65, 309, 174, 309, 309, 309, - 309, 309, 9, 309, 309, 309, 93, 309, 309, 309, - 309, 249, 309, 309, 309, 198, 309, 309, 309, 309, + 309, 236, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 124, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 163, 309, 309, 309, 309, 309, 72, 73, + 309, 309, 309, 309, 309, 53, 309, 309, 309, 309, + 309, 79, 172, 309, 190, 309, 218, 309, 309, 182, + 257, 309, 309, 309, 309, 309, 65, 309, 174, 309, + 309, 309, 309, 309, 9, 309, 309, 309, 93, 309, + 309, 309, 309, 249, 309, 309, 309, 309, 198, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 162, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 149, 309, 263, 309, - 309, 309, 309, 235, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 209, 309, 309, 309, 309, - 255, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 162, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 149, + 309, 263, 309, 309, 309, 309, 235, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 209, 309, + 309, 309, 309, 255, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 278, 309, 173, 309, 309, - 309, 309, 309, 309, 309, 64, 66, 309, 309, 309, - 309, 309, 309, 309, 92, 309, 309, 309, 309, 247, - 309, 309, 309, 259, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 203, 34, 28, 30, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 35, 309, - 29, 31, 309, 309, 309, 309, 309, 309, 309, 309, - 89, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 205, 202, + 309, 309, 309, 309, 309, 309, 309, 309, 278, 309, + 173, 309, 309, 309, 309, 309, 309, 309, 64, 66, + 309, 309, 309, 309, 309, 309, 309, 92, 309, 309, + 309, 309, 247, 309, 309, 309, 309, 259, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 203, + 34, 28, 30, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 35, 309, 29, 31, 309, 309, 309, 309, + 309, 309, 309, 309, 89, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - - 309, 309, 309, 309, 309, 309, 309, 63, 309, 309, - 126, 309, 110, 309, 309, 309, 309, 309, 309, 309, - 309, 144, 13, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 273, 309, 276, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 12, 309, 309, 22, 309, - 309, 309, 253, 309, 309, 309, 261, 309, 309, 309, - 67, 309, 211, 309, 309, 309, 309, 204, 309, 309, - 62, 309, 309, 309, 309, 23, 309, 43, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 158, 157, 309, 309, 309, 309, 309, 309, 309, 309, - - 309, 206, 200, 309, 216, 309, 309, 265, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 74, 309, 309, 309, 248, - 309, 309, 309, 309, 186, 309, 309, 309, 309, 210, - 309, 309, 309, 309, 309, 309, 309, 309, 282, 283, - 155, 309, 309, 68, 309, 309, 309, 309, 165, 309, - 309, 104, 105, 309, 309, 309, 309, 150, 309, 152, - 309, 191, 309, 309, 309, 309, 156, 309, 309, 219, - 309, 309, 309, 309, 309, 309, 309, 133, 309, 309, - - 309, 309, 309, 309, 309, 309, 309, 309, 309, 226, - 309, 309, 309, 309, 309, 309, 309, 24, 309, 258, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 192, 309, 309, 246, 309, 277, 309, 185, 309, - 309, 309, 309, 48, 309, 309, 309, 309, 4, 309, - 309, 309, 117, 132, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 222, 37, 38, 309, 309, 309, 309, 309, - 309, 309, 266, 309, 309, 309, 309, 309, 309, 234, - 309, 309, 309, 309, 309, 309, 309, 195, 309, 309, - - 309, 309, 309, 309, 309, 309, 309, 77, 309, 49, - 252, 309, 223, 309, 309, 309, 309, 11, 309, 309, - 309, 309, 309, 116, 309, 309, 309, 309, 193, 81, - 309, 40, 309, 309, 309, 309, 309, 309, 309, 309, - 161, 309, 309, 309, 309, 309, 135, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 233, 309, 309, 309, - 309, 129, 309, 309, 111, 112, 309, 309, 309, 83, - 87, 82, 309, 75, 309, 309, 309, 309, 309, 10, - 309, 309, 309, 250, 309, 309, 309, 309, 290, 39, - 309, 309, 309, 309, 309, 160, 309, 309, 309, 309, + 309, 309, 205, 202, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 88, 86, - 309, 76, 274, 309, 309, 309, 309, 309, 309, 309, - 179, 309, 309, 309, 309, 309, 194, 309, 309, 309, - 309, 309, 309, 309, 309, 151, 70, 309, 309, 309, - 309, 309, 267, 309, 309, 309, 309, 309, 309, 309, - 230, 309, 309, 229, 130, 309, 85, 136, 137, 140, - 141, 138, 139, 78, 309, 251, 309, 309, 309, 309, - 154, 309, 309, 309, 309, 309, 221, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 63, 309, 309, 126, 309, 110, 309, 309, 309, + 309, 309, 309, 309, 309, 144, 13, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 273, 309, 276, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 12, + 309, 309, 22, 309, 309, 309, 253, 309, 309, 309, + 309, 261, 309, 309, 309, 67, 309, 211, 309, 309, + 309, 309, 204, 309, 309, 62, 309, 309, 309, 309, + 23, 309, 43, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 158, 157, 309, 309, 309, - 309, 309, 309, 309, 167, 166, 41, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 206, 200, 309, 216, + 309, 309, 265, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 91, 309, 220, 309, 243, 271, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 5, - 309, 309, 212, 309, 309, 272, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 231, 25, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 232, - 309, 309, 309, 134, 309, 309, 309, 309, 309, 309, - 309, 309, 168, 309, 175, 309, 309, 309, 309, 309, + 74, 309, 309, 309, 248, 309, 309, 309, 309, 186, + 309, 309, 309, 309, 210, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 282, 283, 155, 309, 309, 68, + 309, 309, 309, 309, 165, 309, 309, 104, 105, 309, + 309, 309, 309, 150, 309, 152, 309, 191, 309, 309, + 309, 309, 156, 309, 309, 219, 309, 309, 309, 309, - 309, 309, 309, 309, 268, 309, 309, 309, 309, 309, + 309, 309, 309, 133, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 226, 309, 309, 309, 309, + 309, 309, 309, 24, 309, 258, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 192, 309, 309, + 246, 309, 277, 309, 185, 309, 309, 309, 309, 48, + 309, 309, 309, 309, 4, 309, 309, 309, 309, 117, + 132, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 222, + 37, 38, 309, 309, 309, 309, 309, 309, 309, 266, + 309, 309, 309, 309, 309, 309, 234, 309, 309, 309, + + 309, 309, 309, 309, 195, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 77, 309, 49, 252, 309, 223, + 309, 309, 309, 309, 11, 309, 309, 309, 309, 309, + 309, 116, 309, 309, 309, 309, 193, 81, 309, 40, + 309, 309, 309, 309, 309, 309, 309, 309, 161, 309, + 309, 309, 309, 309, 135, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 233, 309, 309, 309, 309, 129, + 309, 309, 111, 112, 309, 309, 309, 83, 87, 82, + 309, 75, 309, 309, 309, 309, 309, 10, 309, 309, + 309, 250, 285, 309, 309, 309, 309, 290, 39, 309, + + 309, 309, 309, 309, 160, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 289, 309, 309, 239, 309, 309, 309, 309, - 309, 269, 309, 309, 309, 309, 309, 309, 270, 309, - 309, 309, 237, 309, 240, 241, 309, 309, 309, 309, - 309, 238, 242, 0 + 309, 309, 309, 309, 309, 309, 309, 88, 86, 309, + 76, 274, 309, 309, 309, 309, 309, 309, 309, 179, + 309, 309, 309, 309, 309, 194, 309, 309, 309, 309, + 309, 309, 309, 309, 151, 70, 309, 309, 309, 309, + 309, 267, 309, 309, 309, 309, 309, 309, 309, 230, + 309, 309, 229, 130, 309, 85, 136, 137, 140, 141, + 138, 139, 78, 309, 251, 309, 309, 309, 309, 154, + 309, 309, 309, 309, 309, 221, 309, 309, 309, 309, + + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 167, 166, 41, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 91, 309, 220, 309, 243, 271, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 5, 309, + 309, 212, 309, 309, 272, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 231, 25, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 232, 309, + 309, 309, 134, 309, 309, 309, 309, 309, 309, 309, + + 309, 168, 309, 175, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 268, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 289, 309, 309, 239, 309, 309, 309, 309, 309, + 269, 309, 309, 309, 309, 309, 309, 270, 309, 309, + 309, 237, 309, 240, 241, 309, 309, 309, 309, 309, + 238, 242, 0 } ; static const YY_CHAR yy_ec[256] = @@ -743,15 +744,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3069] = +static const flex_int16_t yy_base[3078] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2179, 1999, 81, 5955, 5955, 5955, 96, 52, + 90, 112, 1947, 1851, 81, 5977, 5977, 5977, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1735, 5955, 5955, 5955, 107, 1527, 5955, 5955, - 5955, 165, 1302, 1259, 5955, 5955, 5955, 211, 1131, 5955, - 5955, 5955, 180, 948, 5955, 217, 5955, 221, 168, 767, + 189, 152, 1532, 5977, 5977, 5977, 107, 1331, 5977, 5977, + 5977, 165, 1302, 1259, 5977, 5977, 5977, 211, 1131, 5977, + 5977, 5977, 180, 948, 5977, 217, 5977, 221, 168, 767, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -780,9 +781,9 @@ static const flex_int16_t yy_base[3069] = 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 5955, 760, 773, 771, 774, + 756, 757, 761, 768, 769, 5977, 760, 773, 771, 774, 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 5955, 815, 807, 849, + 825, 791, 801, 804, 814, 795, 5977, 815, 807, 849, 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, @@ -792,640 +793,642 @@ static const flex_int16_t yy_base[3069] = 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 5955, 1007, 1009, 1011, 1012, 1013, 1010, 5955, 1014, 1015, + 5977, 1007, 1009, 1011, 1012, 1013, 1010, 5977, 1014, 1015, 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 5955, 1071, 1077, 1080, + 1061, 1064, 1065, 1068, 1070, 1088, 5977, 1071, 1077, 1080, 1079, 1085, 1082, 1090, 1097, 1100, 1093, 1106, 1116, 1103, 1117, 1111, 1113, 1072, 1118, 1122, 1124, 1125, 1126, 1127, - 1128, 1130, 1129, 1132, 1140, 1136, 5955, 1144, 1145, 1154, + 1128, 1130, 1129, 1132, 1140, 1136, 5977, 1144, 1145, 1154, 1147, 1152, 1156, 1157, 1158, 1160, 1161, 1163, 1162, 1166, 1169, 1183, 1170, 1185, 1172, 1186, 1180, 1181, 1187, 1188, 1190, 1195, 1203, 1200, 1205, 1208, 1216, 1215, 1218, 1225, 1201, 1220, 1193, 1212, 1221, 1224, 1228, 1226, 1232, 1230, 1241, 1236, 1237, 1238, 1239, 1248, 1245, 1244, 1253, 1246, - 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5955, 1280, 1269, + 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5977, 1280, 1269, 1276, 1277, 1282, 1283, 1284, 1285, 1288, 813, 1291, 1290, 1292, 1294, 1296, 1297, 1298, 1299, 1307, 1315, 1311, 1310, 1323, 1322, 1324, 1300, 1326, 1333, 1330, 1334, 1336, 1332, - 1344, 1341, 1342, 1331, 1352, 1345, 1347, 1348, 1349, 1357, + 1344, 1341, 1342, 1345, 1352, 1347, 1348, 1351, 1349, 1358, - 1359, 1360, 1367, 1362, 1365, 1377, 1372, 1368, 1379, 1375, - 1380, 1383, 1384, 1385, 1386, 1387, 1395, 1388, 1390, 1391, - 1396, 1397, 1398, 1400, 1404, 1414, 1409, 1410, 1413, 1416, - 1420, 1418, 1421, 1425, 1426, 1427, 1428, 1429, 1434, 1431, - 1440, 1433, 1448, 1439, 1441, 1449, 1452, 1456, 1457, 1458, - 1465, 1454, 1466, 1467, 1468, 1469, 1471, 1474, 1477, 1481, - 1475, 1484, 1486, 1488, 1487, 1491, 1494, 1497, 1498, 5955, - 1492, 1505, 1500, 1506, 1504, 1509, 1512, 1519, 1514, 1517, - 1515, 1518, 1521, 1544, 5955, 1523, 5955, 5955, 1525, 5955, - 5955, 1526, 1531, 1529, 1528, 1539, 1546, 1548, 1536, 1551, + 1353, 1367, 1368, 1361, 1371, 1378, 1374, 1363, 1379, 1380, + 1382, 1383, 1386, 1387, 1389, 1390, 1397, 1392, 1393, 1394, + 1398, 1400, 1395, 1403, 1406, 1417, 1412, 1407, 1416, 1420, + 1423, 1422, 1425, 1424, 1428, 1429, 1430, 1431, 1433, 1434, + 1438, 1436, 1451, 1443, 1445, 1452, 1454, 1455, 1462, 1458, + 1466, 1457, 1467, 1468, 1470, 1472, 1473, 1478, 1476, 1482, + 1480, 1487, 1488, 1490, 1489, 1492, 1497, 1500, 1493, 5977, + 1495, 1507, 1505, 1508, 1509, 1511, 1513, 1522, 1515, 1517, + 1519, 1518, 1520, 1544, 5977, 1526, 5977, 5977, 1528, 5977, + 5977, 1529, 1527, 1530, 1535, 1547, 1550, 1554, 1534, 1555, - 1550, 1558, 1571, 1555, 1561, 1562, 1567, 1574, 1569, 1579, - 1584, 1576, 1587, 1593, 1594, 1595, 1602, 1603, 1596, 1599, - 1606, 1604, 1607, 1609, 1611, 1613, 1615, 1619, 1614, 1621, - 1616, 1631, 1622, 1635, 1642, 5955, 1639, 1643, 1646, 1645, - 1653, 1648, 1649, 1652, 1657, 1659, 1654, 1661, 1663, 1623, - 1664, 1666, 1667, 1669, 1678, 1670, 5955, 1671, 1673, 1681, - 1675, 1685, 1687, 1690, 1674, 1691, 1693, 1702, 1694, 1697, - 1698, 1705, 1557, 1707, 5955, 1709, 1716, 1703, 1708, 1719, - 1721, 1722, 1723, 1726, 1720, 1725, 1727, 1732, 1728, 1736, - 1734, 1737, 1733, 1739, 1738, 1751, 1754, 1756, 1757, 1758, + 1542, 1567, 1570, 1568, 1557, 1558, 1559, 1580, 1586, 1587, + 1590, 1560, 1592, 1595, 1596, 1597, 1604, 1579, 1598, 1601, + 1605, 1606, 1608, 1607, 1611, 1613, 1616, 1617, 1614, 1619, + 1621, 1629, 1633, 1625, 1640, 5977, 1636, 1648, 1650, 1646, + 1653, 1649, 1654, 1637, 1656, 1658, 1659, 1661, 1663, 1662, + 1664, 1666, 1671, 1670, 1681, 1672, 5977, 1673, 1676, 1674, + 1684, 1677, 1687, 1688, 1692, 1694, 1695, 1622, 1702, 1699, + 1697, 1703, 1705, 1707, 1710, 5977, 1709, 1716, 1708, 1718, + 1717, 1720, 1724, 1725, 1726, 1727, 1728, 1730, 1732, 1733, + 1741, 1739, 1737, 1742, 1743, 1753, 1754, 1755, 1763, 1745, - 1760, 1761, 1762, 1763, 1764, 1766, 1774, 1770, 1778, 1771, - 1779, 1781, 1788, 1776, 1787, 1789, 1790, 1796, 1804, 1800, - 1801, 1793, 1808, 1805, 1810, 1812, 1813, 1815, 1816, 1817, - 1822, 1820, 1824, 1827, 1826, 5955, 1828, 1829, 5955, 1833, - 1834, 1856, 1835, 1837, 1839, 1847, 1838, 1858, 1849, 1857, - 1868, 1860, 1876, 1866, 1878, 1869, 1881, 1879, 1883, 1885, - 1887, 1889, 1892, 1901, 1906, 1851, 1902, 1910, 1890, 1905, - 1893, 1925, 1907, 1909, 1913, 1916, 1917, 1915, 1840, 1921, - 1922, 1923, 1930, 1932, 5955, 1940, 1943, 1937, 1947, 1954, - 1950, 1938, 5955, 1949, 1952, 1953, 1965, 1962, 1963, 1967, + 1758, 1756, 1764, 1766, 1769, 1770, 1773, 1777, 1774, 1781, + 1778, 1785, 1790, 1783, 1780, 1782, 1792, 1795, 1800, 1809, + 1804, 1796, 1805, 1812, 1808, 1811, 1813, 1815, 1822, 1817, + 1819, 1824, 1826, 1827, 1829, 1830, 5977, 1833, 1836, 5977, + 1835, 1837, 1859, 1838, 1840, 1841, 1843, 1846, 1861, 1845, + 1852, 1867, 1863, 1879, 1869, 1881, 1874, 1886, 1876, 1882, + 1884, 1890, 1892, 1893, 1900, 1902, 1854, 1908, 1910, 1895, + 1905, 1907, 1926, 1909, 1913, 1914, 1919, 1915, 1930, 1912, + 1922, 1923, 1929, 1938, 1939, 5977, 1947, 1950, 1944, 1949, + 1957, 1954, 1955, 5977, 1956, 1958, 1960, 1970, 1966, 1961, - 1964, 1966, 1968, 1973, 1970, 1974, 1975, 1976, 1992, 5955, - 1978, 5955, 1977, 1987, 1989, 1990, 1995, 1996, 1997, 1998, - 5955, 5955, 2000, 2001, 2014, 2012, 2009, 5955, 2016, 2024, - 2025, 2017, 2019, 2021, 2027, 2030, 2031, 2034, 2035, 2042, - 2037, 2039, 2040, 5955, 2048, 2038, 2053, 2056, 2049, 2057, - 2063, 2060, 5955, 2064, 2050, 2067, 2075, 2077, 2071, 2074, - 2078, 2082, 2079, 2084, 2085, 2086, 2087, 2094, 2096, 2093, - 2099, 2101, 2108, 5955, 2091, 2095, 2113, 2111, 2118, 2110, - 2112, 2114, 2120, 2122, 2124, 2126, 2127, 2128, 2136, 2137, - 2133, 2129, 2141, 2138, 2142, 2143, 2149, 2146, 2150, 2151, + 1968, 1969, 1971, 1972, 1978, 1977, 1979, 1981, 1982, 1997, + 5977, 1984, 5977, 1993, 1983, 1994, 1995, 1996, 2001, 2005, + 2006, 5977, 5977, 2012, 2015, 2018, 2004, 2008, 5977, 2020, + 2028, 2025, 2030, 2023, 2031, 2032, 2034, 2040, 2035, 2044, + 2039, 2047, 2042, 2049, 2046, 5977, 2055, 2043, 2056, 2062, + 2063, 2065, 2066, 2068, 5977, 2069, 2072, 2076, 2083, 2074, + 2078, 2081, 2086, 2084, 2090, 2091, 2092, 2093, 2094, 2101, + 2103, 2100, 2104, 2106, 2119, 5977, 2098, 2102, 2120, 2118, + 2125, 2117, 2121, 2115, 2128, 2129, 2127, 2134, 2135, 2136, + 2143, 2145, 2141, 2144, 2151, 2140, 2146, 2142, 2157, 2148, - 2152, 5955, 2153, 2161, 124, 2154, 2158, 2162, 2166, 2167, - 2179, 2163, 2175, 2186, 2182, 2188, 2184, 2181, 2185, 2191, - 2192, 2193, 2194, 2198, 2197, 5955, 2203, 2200, 2204, 2205, - 2209, 2206, 2218, 5955, 2210, 2219, 2228, 2229, 2217, 2230, - 2221, 2225, 2235, 2241, 2238, 2242, 2239, 2245, 5955, 2249, - 2251, 2253, 2252, 2254, 2261, 2260, 2255, 2262, 2263, 2266, - 2268, 2267, 2273, 2271, 2275, 2276, 2280, 2284, 2281, 2287, - 2279, 5955, 2295, 2291, 2292, 2293, 2297, 2298, 2309, 2304, - 2306, 2311, 2314, 2325, 2316, 2312, 2328, 2317, 2326, 2327, - 2341, 2332, 2340, 2342, 2339, 2346, 2349, 2350, 2351, 2353, + 2158, 2161, 2162, 5977, 2163, 2165, 124, 2169, 2170, 2172, + 2168, 2177, 2175, 2171, 2194, 2195, 2176, 2190, 2193, 2196, + 2197, 2199, 2200, 2201, 2202, 2203, 2205, 5977, 2179, 2207, + 2208, 2212, 2213, 2214, 2217, 5977, 2228, 2225, 2238, 2216, + 2232, 2239, 2235, 2240, 2241, 2243, 2244, 2247, 2245, 2249, + 5977, 2260, 2257, 2261, 2251, 2264, 2270, 2267, 2265, 2272, + 2273, 2277, 2275, 2278, 2279, 2281, 2282, 2283, 2288, 2284, + 2286, 2293, 2295, 5977, 2302, 2297, 2307, 2298, 2305, 2308, + 2322, 2309, 2312, 2314, 2323, 2329, 2317, 2331, 2325, 2332, + 2336, 2335, 2345, 2346, 2349, 2355, 2343, 2357, 2360, 2347, - 2355, 2356, 2357, 2358, 2365, 2372, 2363, 2373, 2374, 2378, - 2384, 2380, 5955, 2385, 2386, 2387, 2393, 2404, 2395, 2406, - 2407, 2396, 2399, 2397, 2409, 2411, 2419, 2414, 2418, 2420, - 2422, 2421, 2423, 2424, 2429, 2431, 2438, 2430, 2440, 2441, - 5955, 2364, 2444, 2433, 2446, 2448, 2450, 2457, 2458, 2460, - 2451, 2453, 2462, 2463, 2464, 2466, 2468, 2469, 2475, 2471, - 5955, 2476, 2480, 2482, 2485, 2484, 2488, 2491, 2497, 2494, - 2500, 2501, 2502, 2503, 5955, 2510, 2511, 2508, 2512, 2514, - 2515, 2517, 2520, 2521, 5955, 2522, 2524, 2531, 2532, 2527, - 5955, 2535, 2530, 2536, 2537, 2538, 2539, 2545, 2540, 2543, + 2350, 2353, 2359, 2361, 2369, 2370, 2377, 2378, 2375, 2381, + 2373, 2394, 2399, 2390, 5977, 2398, 2392, 2386, 2400, 2411, + 2403, 2384, 2408, 2414, 2415, 2416, 2417, 2418, 2425, 2420, + 2422, 2423, 2426, 2427, 2429, 2433, 2434, 2439, 2443, 2440, + 2446, 2253, 5977, 2447, 2448, 2449, 2452, 2457, 2454, 2463, + 2464, 2466, 2458, 2460, 2470, 2467, 2472, 2473, 2477, 2476, + 2374, 2478, 5977, 2480, 2484, 2486, 2489, 2490, 2492, 2495, + 2501, 2503, 2488, 2504, 2505, 2507, 5977, 2515, 2517, 2513, + 2522, 2514, 2519, 2521, 2525, 2526, 5977, 2527, 2528, 2535, + 2536, 2531, 5977, 2539, 2534, 2540, 2541, 2542, 2543, 2544, - 2548, 2553, 2555, 2551, 2559, 5955, 2561, 2571, 2563, 2567, - 2569, 2572, 2573, 2575, 2579, 2583, 2578, 5955, 2595, 2594, - 2591, 2605, 2582, 2596, 2597, 2603, 2600, 2606, 2607, 5955, - 2609, 2610, 2612, 2613, 2616, 2617, 2619, 2631, 2621, 2624, - 2626, 2629, 2632, 2634, 2636, 2639, 2637, 2645, 2648, 2649, - 2651, 2652, 2654, 2655, 2662, 2665, 2667, 2669, 5955, 2672, - 2673, 2674, 2661, 2664, 2676, 2680, 2681, 2684, 2685, 2689, - 2686, 2688, 2696, 2698, 2699, 2701, 2703, 2705, 2706, 2708, - 2709, 2710, 2711, 2718, 2716, 2714, 2723, 2720, 2725, 2732, - 2727, 2733, 2734, 2735, 2736, 2737, 2741, 2742, 2744, 2745, + 2549, 2550, 2552, 2557, 2559, 2555, 2563, 5977, 2564, 2572, + 2567, 2565, 2573, 2576, 2577, 2579, 2588, 2580, 2584, 5977, + 2595, 2587, 2599, 2606, 2601, 2586, 2603, 2602, 2604, 2608, + 2609, 5977, 2611, 2614, 2615, 2616, 2619, 2618, 2624, 2634, + 2626, 2627, 2630, 2635, 2637, 2639, 2640, 2641, 2642, 2631, + 2651, 2653, 2655, 2656, 2657, 2659, 2667, 2669, 2665, 2671, + 5977, 2674, 2675, 2668, 2676, 2681, 2682, 2680, 2683, 2685, + 2688, 2686, 2689, 2690, 2699, 2707, 2692, 2710, 2700, 2702, + 2704, 2715, 2708, 2714, 2717, 2722, 2718, 2724, 2731, 2726, + 2730, 2738, 2728, 2729, 2733, 2737, 2739, 2740, 2742, 2743, - 2749, 2760, 2761, 2751, 2762, 2763, 2764, 2765, 5955, 2768, - 2769, 2770, 2774, 2776, 2779, 2781, 2788, 2780, 2783, 2793, - 2787, 2797, 2790, 2799, 2800, 2808, 2804, 5955, 2805, 5955, - 2806, 2807, 2813, 2815, 2811, 5955, 2819, 5955, 2821, 2826, - 2816, 2822, 5955, 2830, 2828, 2834, 2835, 2829, 2837, 2840, - 2841, 2839, 2849, 2842, 2847, 2845, 2851, 2854, 2855, 2856, - 2857, 2864, 2865, 2866, 2874, 2867, 2871, 2876, 2877, 2878, - 5955, 2885, 2879, 2881, 2887, 2888, 2890, 2891, 2893, 2894, - 2899, 2900, 2903, 2901, 2910, 2911, 2923, 2904, 2926, 5955, - 2913, 2929, 2918, 2925, 5955, 2930, 2922, 2932, 2938, 2934, + 2746, 2751, 2755, 2759, 2760, 2762, 2764, 2767, 2768, 2769, + 5977, 2772, 2773, 2770, 2774, 2779, 2783, 2784, 2786, 2787, + 2791, 2792, 2796, 2799, 2793, 2798, 2801, 2811, 2807, 5977, + 2808, 5977, 2809, 2810, 2817, 2820, 2812, 5977, 2823, 5977, + 2824, 2829, 2819, 2825, 5977, 2831, 2833, 2836, 2837, 2839, + 2840, 2843, 2842, 2844, 2848, 2846, 2850, 2851, 2855, 2852, + 2857, 2863, 2859, 2870, 2867, 2860, 2872, 2877, 2878, 2879, + 2881, 2882, 5977, 2885, 2886, 2888, 2890, 2891, 2892, 2893, + 2896, 2895, 2898, 2897, 2903, 2907, 2911, 2914, 2922, 2912, + 2926, 5977, 2921, 2924, 2925, 2928, 5977, 2931, 2929, 2937, - 2936, 2940, 2941, 2942, 2945, 2947, 2950, 2958, 2959, 2960, - 5955, 2961, 2966, 2949, 2962, 2975, 2972, 2980, 2982, 2984, - 2985, 2973, 2976, 2987, 2988, 2989, 2997, 2999, 2995, 3002, - 2998, 3004, 3011, 3007, 3001, 3003, 3005, 3013, 3014, 3017, - 3018, 3022, 3015, 3020, 3024, 3026, 5955, 3033, 3030, 3034, - 3036, 3041, 3043, 3042, 3044, 3045, 3046, 3048, 3051, 3049, - 5955, 3052, 5955, 3053, 3068, 3059, 3070, 3064, 3073, 3074, - 3080, 3075, 3081, 3082, 3084, 3083, 3085, 3086, 3090, 3094, - 3096, 3098, 3108, 3093, 3097, 3099, 3104, 3111, 3112, 5955, - 5955, 3114, 3115, 3119, 3116, 3121, 3123, 3125, 3122, 3129, + 2939, 2933, 2930, 2941, 2942, 2949, 2943, 2946, 2951, 2958, + 2959, 2960, 5977, 2961, 2962, 2965, 2968, 2978, 2975, 2973, + 2976, 2987, 2983, 2982, 2984, 2985, 2986, 2989, 2997, 2999, + 2996, 3000, 2998, 3003, 3010, 3007, 3005, 3011, 3013, 3014, + 3015, 3018, 3019, 3022, 3017, 3020, 3024, 3025, 5977, 3027, + 3034, 3036, 3042, 3035, 3039, 3044, 3045, 3047, 3049, 3048, + 3057, 3051, 5977, 3058, 5977, 3052, 3059, 3061, 3071, 3072, + 3065, 3076, 3075, 3080, 3081, 3082, 3085, 3086, 3088, 3089, + 3091, 3094, 3092, 3102, 3108, 3095, 3099, 3109, 3097, 3113, + 3114, 5977, 5977, 3116, 3117, 3118, 3120, 3121, 3123, 3124, - 3135, 3136, 3138, 3143, 5955, 3144, 3145, 3141, 3146, 3154, - 3149, 3153, 3165, 3161, 3168, 3164, 5955, 3169, 3171, 3178, - 3173, 3174, 3181, 5955, 3176, 5955, 3179, 3180, 3182, 3187, - 3188, 3191, 3192, 3193, 3195, 3203, 3208, 3200, 3205, 3209, - 3210, 3211, 3218, 3214, 3215, 3217, 5955, 3220, 3221, 3222, - 3223, 3232, 3233, 3230, 3234, 5955, 3240, 3243, 3244, 3246, - 3245, 3248, 3251, 3249, 3250, 3254, 3252, 3253, 3267, 3260, - 3259, 3268, 3270, 3275, 3280, 5955, 3276, 3282, 3289, 3285, - 3286, 3288, 3292, 3287, 3293, 3294, 3296, 3297, 3299, 3301, - 3303, 3300, 3310, 3304, 3311, 3317, 3306, 3326, 3333, 3309, + 3122, 3132, 3133, 3138, 3140, 3148, 5977, 3143, 3145, 3144, + 3149, 3152, 3150, 3156, 3167, 3164, 3171, 3170, 5977, 3153, + 3163, 3178, 3162, 3179, 3180, 5977, 3181, 5977, 3183, 3184, + 3185, 3186, 3187, 3191, 3192, 3194, 3197, 3205, 3207, 3198, + 3190, 3209, 3212, 3213, 3220, 3215, 3216, 3217, 5977, 3222, + 3219, 3224, 3225, 3229, 3233, 3236, 3223, 5977, 3240, 3242, + 3243, 3244, 3247, 3249, 3250, 3251, 3253, 3257, 3252, 3254, + 3267, 3260, 3259, 3270, 3279, 3280, 3282, 5977, 3263, 3275, + 3291, 3287, 3288, 3290, 3293, 3289, 3273, 3294, 3297, 3298, + 3299, 3301, 3302, 3305, 3307, 3304, 3306, 3314, 3320, 3322, - 3320, 3328, 3329, 3334, 3331, 3337, 3341, 3343, 3335, 3351, - 3352, 3346, 3348, 3357, 3354, 3365, 3360, 5955, 3368, 3361, - 3370, 3366, 3371, 3373, 3375, 3383, 3380, 3378, 3381, 3388, - 3384, 5955, 3396, 3386, 3385, 3397, 3402, 3409, 3405, 3406, - 3389, 3412, 3407, 3415, 3418, 3413, 3419, 3422, 3423, 5955, - 5955, 3425, 3427, 3428, 5955, 3430, 3429, 3440, 3432, 3436, - 3441, 3442, 3444, 3445, 3446, 3448, 3451, 5955, 3454, 3461, - 3458, 3462, 3466, 3470, 3473, 3463, 3475, 3465, 3476, 3477, - 3479, 3480, 3481, 3486, 3494, 3490, 3483, 3491, 3492, 5955, - 3493, 3497, 3499, 3501, 3505, 3508, 5955, 3509, 3510, 3511, + 3331, 3323, 3326, 3327, 3328, 3330, 3333, 3336, 3339, 3341, + 3334, 3351, 3352, 3342, 3346, 3356, 3357, 3364, 3359, 5977, + 3366, 3365, 3374, 3369, 3370, 3372, 3375, 3384, 3377, 3379, + 3380, 3387, 3382, 5977, 3398, 3393, 3386, 3395, 3401, 3409, + 3404, 3385, 3408, 3411, 3412, 3414, 3417, 3418, 3419, 3422, + 3423, 5977, 5977, 3425, 3426, 3427, 5977, 3430, 3428, 3441, + 3432, 3433, 3442, 3445, 3444, 3434, 3446, 3448, 3450, 5977, + 3456, 3464, 3455, 3462, 3465, 3473, 3471, 3463, 3472, 3476, + 3478, 3477, 3479, 3480, 3483, 3484, 3492, 3493, 3488, 3490, + 3491, 5977, 3494, 3499, 3501, 3503, 3500, 3507, 5977, 3504, - 3516, 3521, 3518, 3515, 3530, 3527, 3532, 3533, 3534, 3535, - 3536, 3543, 3538, 3540, 3542, 3549, 3547, 5955, 3554, 3557, - 3544, 3559, 3561, 3571, 3572, 3575, 3562, 3574, 3577, 3582, - 5955, 3578, 3580, 3581, 3567, 3591, 3583, 3600, 3586, 5955, - 3587, 3595, 3596, 5955, 3603, 3607, 3610, 3612, 3597, 3619, - 3615, 3618, 3616, 3620, 5955, 3625, 5955, 3624, 3626, 3631, - 5955, 3628, 3633, 3634, 3636, 3637, 3642, 3643, 3650, 3641, - 3644, 3651, 3652, 3654, 3655, 3662, 3657, 3659, 3663, 3664, - 5955, 3665, 3667, 3670, 3672, 3674, 3676, 3680, 3682, 3684, - 5955, 5955, 3690, 5955, 3691, 3686, 3692, 5955, 3695, 3693, + 3512, 3518, 3517, 3528, 3525, 3520, 3533, 3513, 3530, 3535, + 3510, 3537, 3538, 3545, 3540, 3541, 3543, 3547, 3549, 5977, + 3550, 3551, 3552, 3561, 3564, 3571, 3574, 3575, 3556, 3573, + 3576, 3583, 5977, 3579, 3580, 3581, 3585, 3592, 3587, 3595, + 3590, 5977, 3594, 3596, 3598, 5977, 3597, 3604, 3608, 3612, + 3599, 3620, 3616, 3613, 3617, 3621, 5977, 3624, 5977, 3625, + 3626, 3631, 5977, 3627, 3633, 3635, 3637, 3634, 3641, 3642, + 3649, 3644, 3650, 3651, 3652, 3653, 3655, 3662, 3654, 3658, + 3661, 3663, 5977, 3673, 3665, 3666, 3680, 3678, 3670, 3668, + 3686, 3684, 5977, 5977, 3693, 5977, 3695, 3688, 3690, 5977, - 3704, 3696, 3699, 3602, 3706, 3703, 5955, 3709, 3712, 3714, - 3717, 3718, 3719, 3721, 3722, 3720, 3723, 3724, 5955, 3725, - 3728, 3736, 3729, 3737, 3741, 3748, 3742, 5955, 3749, 3750, - 3751, 3755, 3756, 5955, 3758, 5955, 3759, 3761, 3764, 3766, - 3765, 5955, 3771, 3772, 3775, 3778, 3780, 3779, 3782, 3783, - 3789, 3790, 3797, 3793, 3792, 3794, 5955, 3795, 3799, 3801, - 3808, 3796, 3803, 3812, 3815, 3816, 3817, 3822, 3827, 3819, - 3828, 3834, 3830, 3832, 3824, 5955, 3836, 3838, 3841, 3850, - 3843, 3846, 5955, 3847, 3851, 3855, 5955, 3853, 3854, 3861, - 3864, 3857, 3865, 3868, 3867, 3871, 5955, 3873, 3876, 3869, + 3694, 3696, 3705, 3700, 3701, 3711, 3708, 3712, 5977, 3714, + 3703, 3715, 3718, 3719, 3722, 3724, 3725, 3726, 3728, 3729, + 5977, 3730, 3732, 3739, 3731, 3733, 3742, 3741, 3747, 5977, + 3751, 3755, 3754, 3758, 3759, 5977, 3760, 5977, 3761, 3762, + 3764, 3768, 3765, 5977, 3773, 3774, 3778, 3780, 3781, 3783, + 3782, 3789, 3790, 3791, 3798, 3795, 3796, 3793, 5977, 3797, + 3799, 3803, 3804, 3807, 3810, 3818, 3814, 3815, 3820, 3821, + 3824, 3827, 3825, 3831, 3833, 3835, 3828, 5977, 3836, 3841, + 3834, 3850, 3847, 3851, 5977, 3852, 3853, 3854, 5977, 3857, + 3860, 3862, 3866, 3861, 3867, 3868, 3869, 3872, 5977, 3874, - 3872, 3882, 3890, 5955, 5955, 3891, 5955, 3892, 3878, 3879, - 3893, 3880, 3895, 3903, 3900, 3907, 3896, 3908, 3913, 3914, - 3922, 3923, 3925, 3926, 3920, 3924, 5955, 5955, 3931, 3932, - 3934, 3936, 3937, 3939, 3941, 3946, 3945, 3948, 3953, 3955, - 3962, 5955, 3957, 3954, 3963, 5955, 3964, 3965, 3968, 3966, - 3971, 3969, 3972, 3973, 3975, 3977, 3979, 3982, 3983, 3985, - 3984, 3992, 3994, 3995, 3996, 3997, 4002, 5955, 4003, 4005, - 4006, 4007, 4008, 4012, 4014, 4016, 4017, 5955, 4018, 4020, - 4023, 4021, 4022, 4027, 4041, 4044, 4046, 4037, 4047, 4048, - 4050, 4054, 4051, 5955, 4058, 4055, 4057, 4061, 4065, 4067, + 3876, 3873, 3877, 3889, 3881, 5977, 5977, 3891, 5977, 3892, + 3878, 3896, 3895, 3875, 3899, 3903, 3905, 3907, 3904, 3912, + 3915, 3909, 3925, 3927, 3932, 3928, 3929, 3918, 5977, 5977, + 3934, 3935, 3930, 3941, 3942, 3944, 3945, 3952, 3948, 3954, + 3958, 3959, 3966, 5977, 3947, 3949, 3967, 5977, 3962, 3965, + 3968, 3973, 3972, 3974, 3978, 3975, 3976, 3979, 3983, 3980, + 3985, 3993, 3986, 3990, 3989, 3999, 3996, 3997, 4006, 5977, + 4003, 4007, 4010, 4013, 4014, 4016, 4018, 4019, 4020, 5977, + 4017, 4022, 4024, 4030, 4023, 4033, 4044, 4048, 4050, 4025, + 4042, 4051, 4053, 4057, 4054, 5977, 4058, 4060, 4061, 4064, - 4068, 4070, 4071, 4079, 4076, 4080, 4082, 4084, 4072, 4088, - 4090, 4074, 5955, 4094, 4096, 4092, 4101, 4098, 4102, 4103, - 4109, 4113, 4105, 4107, 4114, 4118, 5955, 4115, 4119, 4121, - 4123, 4129, 4120, 4126, 4130, 5955, 5955, 4132, 4134, 4137, - 4138, 4140, 4143, 4146, 4147, 4150, 4149, 4153, 5955, 4155, - 4157, 4160, 4163, 4164, 4166, 4169, 4168, 5955, 4170, 4176, - 4178, 4185, 4180, 4189, 4186, 4190, 4182, 4184, 4196, 4200, - 4202, 4203, 4204, 4192, 4214, 4216, 4215, 5955, 4198, 5955, - 4217, 4220, 4228, 4223, 4205, 5955, 4229, 4230, 4234, 4235, - 4231, 5955, 4236, 4237, 4239, 4243, 5955, 4238, 4242, 4244, + 4067, 4069, 4070, 4072, 4073, 4075, 4077, 4078, 4085, 4087, + 4079, 4088, 4082, 4090, 5977, 4094, 4101, 4095, 4103, 4098, + 4028, 4104, 4105, 4111, 4108, 4113, 4112, 4118, 5977, 4115, + 4119, 4122, 4120, 4126, 4129, 4133, 4130, 4132, 5977, 4140, + 4123, 4134, 4136, 4144, 4146, 4149, 4151, 4154, 4153, 4156, + 5977, 4157, 4160, 4161, 4158, 4167, 4168, 4172, 4170, 5977, + 4173, 4179, 4171, 4187, 4182, 4191, 4188, 4190, 4192, 4194, + 4197, 4199, 4201, 4202, 4204, 4198, 4215, 4220, 4218, 5977, + 4205, 5977, 4219, 4223, 4227, 4229, 4226, 5977, 4216, 4231, + 4234, 4235, 4236, 5977, 4237, 4239, 4241, 4240, 5977, 4251, - 4249, 4252, 4256, 5955, 4259, 4260, 4262, 4271, 4272, 4269, - 4270, 4273, 4275, 4276, 4277, 4278, 4286, 4281, 4283, 5955, - 4285, 4291, 4293, 4297, 4298, 4299, 4300, 4306, 4301, 5955, - 4303, 4309, 4310, 4311, 4312, 4313, 4315, 4323, 4318, 4321, - 5955, 4322, 4326, 4334, 4327, 4340, 5955, 5955, 4332, 4336, - 4341, 4343, 4347, 5955, 4345, 4356, 4351, 4353, 4355, 5955, - 5955, 4358, 5955, 4354, 5955, 4359, 4360, 5955, 5955, 4361, - 4362, 4365, 4374, 4368, 5955, 4378, 5955, 4381, 4382, 4371, - 4380, 4384, 5955, 4385, 4386, 4391, 5955, 4392, 4399, 4394, - 4395, 5955, 4397, 4400, 4403, 5955, 4405, 4408, 4409, 4411, + 4253, 4242, 4257, 4244, 4259, 5977, 4264, 4265, 4261, 4273, + 4276, 4272, 4274, 4277, 4275, 4279, 4280, 4281, 4289, 4284, + 4285, 5977, 4291, 4294, 4301, 4302, 4296, 4286, 4304, 4310, + 4303, 5977, 4312, 4311, 4313, 4314, 4315, 4318, 4320, 4327, + 4323, 4322, 5977, 4326, 4330, 4343, 4324, 4334, 5977, 5977, + 4339, 4344, 4346, 4341, 4347, 5977, 4350, 4357, 4352, 4356, + 4359, 5977, 5977, 4361, 5977, 4358, 5977, 4363, 4362, 5977, + 5977, 4365, 4366, 4369, 4375, 4372, 5977, 4382, 5977, 4379, + 4383, 4385, 4386, 4388, 5977, 4387, 4390, 4395, 5977, 4389, + 4397, 4396, 4400, 5977, 4404, 4407, 4399, 4405, 5977, 4411, - 4413, 4415, 4416, 4417, 4423, 4424, 4425, 4426, 4427, 4434, - 4439, 4441, 4443, 4435, 4444, 4445, 4448, 4451, 4453, 4454, - 4455, 4456, 4458, 4459, 4461, 4464, 4468, 4469, 4467, 4470, - 4471, 4480, 4473, 4476, 4484, 4477, 4487, 4488, 4489, 4490, - 4492, 4494, 4498, 4497, 4500, 5955, 4499, 4501, 4503, 4516, - 4504, 4505, 4520, 4522, 4528, 4529, 5955, 4531, 5955, 4533, - 4524, 4535, 4536, 5955, 4537, 4538, 4539, 4540, 4541, 4543, - 4509, 4544, 4547, 4548, 4551, 5955, 4554, 4545, 4549, 4569, - 5955, 4562, 4573, 4559, 4570, 4574, 4575, 4576, 4578, 4579, - 4580, 4583, 4585, 4592, 4587, 4589, 4591, 4593, 4597, 4600, + 4417, 4419, 4409, 4413, 4420, 4426, 4421, 4429, 4430, 4431, + 4432, 4433, 4440, 4445, 4447, 4449, 4441, 4437, 4451, 4457, + 4459, 4450, 4454, 4461, 4463, 4465, 4467, 4469, 4471, 4472, + 4473, 4475, 4476, 4474, 4484, 4477, 4478, 4491, 4487, 4480, + 4492, 4495, 4493, 4499, 4500, 4502, 4503, 4504, 5977, 4505, + 4507, 4509, 4521, 4514, 4510, 4520, 4527, 4531, 4533, 5977, + 4535, 5977, 4537, 4522, 4539, 4541, 5977, 4542, 4543, 4544, + 4545, 4546, 4547, 4549, 4548, 4552, 4553, 4556, 5977, 4559, + 4554, 4563, 4574, 5977, 4569, 4580, 4564, 4575, 4577, 4581, + 4583, 4585, 4586, 4587, 4589, 4591, 4598, 4594, 4595, 4597, - 4601, 4607, 4603, 4611, 4615, 5955, 4608, 5955, 4612, 4616, - 4618, 4619, 4623, 4622, 4624, 5955, 5955, 4625, 4626, 4632, - 4633, 4634, 4637, 4640, 5955, 4638, 4646, 4655, 4647, 5955, - 4641, 4649, 4657, 5955, 4651, 4658, 4662, 4665, 4659, 4671, - 4668, 4672, 4674, 4675, 4677, 5955, 5955, 5955, 5955, 4679, - 4682, 4684, 4685, 4686, 4688, 4691, 4693, 4694, 5955, 4696, - 5955, 5955, 4701, 4702, 4689, 4705, 4708, 4711, 4712, 4714, - 5955, 4713, 4715, 4718, 4717, 4725, 4727, 4729, 4733, 4719, - 4731, 4740, 4739, 4741, 4735, 4743, 4746, 4752, 5955, 5955, - 4747, 4754, 4755, 4762, 4759, 4763, 4771, 4766, 4767, 4769, + 4599, 4600, 4605, 4608, 4607, 4615, 4617, 4622, 5977, 4611, + 5977, 4618, 4623, 4624, 4626, 4628, 4629, 4631, 5977, 5977, + 4632, 4634, 4639, 4640, 4635, 4644, 4641, 5977, 4647, 4654, + 4657, 4648, 5977, 4651, 4659, 4660, 4664, 5977, 4665, 4667, + 4668, 4670, 4671, 4674, 4678, 4675, 4681, 4682, 4686, 5977, + 5977, 5977, 5977, 4687, 4689, 4692, 4693, 4695, 4696, 4698, + 4700, 4701, 5977, 4703, 5977, 5977, 4704, 4710, 4712, 4713, + 4714, 4717, 4719, 4721, 5977, 4720, 4725, 4727, 4723, 4734, + 4740, 4724, 4737, 4741, 4743, 4750, 4746, 4747, 4745, 4749, + 4753, 4756, 5977, 5977, 4757, 4763, 4764, 4772, 4768, 4769, - 4773, 4774, 4775, 4783, 4785, 4776, 4780, 5955, 4784, 4787, - 5955, 4786, 5955, 4794, 4795, 4791, 4793, 4801, 4802, 4803, - 4805, 5955, 5955, 4797, 4807, 4812, 4818, 4813, 4815, 4808, - 4820, 4821, 5955, 4822, 5955, 4825, 4826, 4829, 4833, 4841, - 4842, 4844, 4847, 4843, 4834, 5955, 4848, 4849, 5955, 4850, - 4852, 4853, 5955, 4855, 4860, 4864, 5955, 4870, 4861, 4867, - 5955, 4874, 5955, 4871, 4875, 4876, 4883, 5955, 4878, 4884, - 5955, 4887, 4890, 4892, 4881, 5955, 4879, 5955, 4893, 4900, - 4901, 4904, 4896, 4906, 4907, 4908, 4909, 4916, 4915, 4917, - 5955, 5955, 4925, 4912, 4918, 4922, 4927, 4934, 4929, 4932, + 4781, 4776, 4777, 4778, 4779, 4783, 4765, 4790, 4795, 4788, + 4785, 5977, 4796, 4799, 5977, 4792, 5977, 4798, 4800, 4806, + 4807, 4808, 4809, 4810, 4812, 5977, 5977, 4813, 4814, 4816, + 4823, 4819, 4827, 4815, 4826, 4828, 5977, 4829, 5977, 4831, + 4833, 4840, 4841, 4848, 4849, 4852, 4854, 4850, 4855, 5977, + 4856, 4857, 5977, 4859, 4861, 4862, 5977, 4867, 4864, 4872, + 4874, 5977, 4879, 4876, 4881, 5977, 4884, 5977, 4869, 4885, + 4887, 4894, 5977, 4891, 4895, 5977, 4898, 4901, 4902, 4903, + 5977, 4892, 5977, 4904, 4907, 4908, 4913, 4914, 4918, 4915, + 4919, 4920, 4927, 4923, 4926, 5977, 5977, 4939, 4925, 4931, - 4931, 5955, 5955, 4939, 5955, 4937, 4940, 5955, 4941, 4946, - 4947, 4948, 4950, 4951, 4955, 4957, 4958, 4959, 4960, 4961, - 4967, 4979, 4963, 4977, 4983, 4985, 4987, 4989, 4981, 4991, - 4992, 4993, 4994, 4995, 4998, 5955, 5000, 5001, 5002, 5955, - 5006, 5007, 5009, 5011, 5955, 5022, 5017, 5023, 5024, 5955, - 5010, 5030, 5027, 5025, 5035, 5042, 5038, 5037, 5955, 5955, - 5955, 5039, 5048, 5955, 5053, 5040, 5043, 5045, 5955, 5049, - 5055, 5955, 5955, 5056, 5057, 5059, 5070, 5955, 5060, 5955, - 5061, 5955, 5069, 5071, 5077, 5075, 5955, 5080, 5086, 5955, - 5089, 5092, 5094, 5095, 5083, 5096, 5097, 5955, 5105, 5101, + 4932, 4935, 4942, 4940, 4943, 4945, 5977, 5977, 4949, 5977, + 4950, 4953, 5977, 4946, 4957, 4955, 4959, 4961, 4962, 4963, + 4967, 4969, 4975, 4970, 4968, 4980, 4991, 4974, 4995, 4996, + 4998, 5000, 5002, 4976, 5004, 5005, 4981, 5006, 5008, 5010, + 5977, 5012, 5013, 5014, 5977, 5018, 5019, 5021, 5022, 5977, + 5024, 5029, 5031, 5033, 5977, 5034, 5036, 5037, 5039, 5043, + 5050, 5046, 5045, 5047, 5977, 5977, 5977, 5055, 5057, 5977, + 5062, 5053, 5063, 5064, 5977, 5065, 5066, 5977, 5977, 5068, + 5070, 5069, 5077, 5977, 5072, 5977, 5073, 5977, 5075, 5076, + 5085, 5083, 5977, 5090, 5096, 5977, 5099, 5102, 5104, 5105, - 5107, 5109, 5098, 5100, 5113, 5110, 5117, 5114, 5120, 5955, - 5122, 5124, 5125, 5131, 5123, 5133, 5127, 5955, 5135, 5955, - 5136, 5137, 5140, 5143, 5138, 5141, 5065, 5146, 5145, 5156, - 5153, 5955, 5158, 5162, 5955, 5159, 5955, 5164, 5955, 5165, - 5166, 5167, 5168, 5955, 5170, 5174, 5175, 5176, 5955, 5177, - 5179, 5185, 5955, 5955, 5186, 5196, 5187, 5188, 5200, 5202, - 5189, 5204, 5197, 5205, 5191, 5213, 5212, 5215, 5216, 5218, - 5219, 5220, 5955, 5955, 5955, 5225, 5224, 5232, 5229, 5230, - 5240, 5235, 5955, 5238, 5241, 5239, 5248, 5245, 5250, 5955, - 5247, 5251, 5252, 5254, 5256, 5257, 5261, 5955, 5265, 5272, + 5087, 5091, 5106, 5977, 5115, 5108, 5112, 5119, 5116, 5120, + 5121, 5122, 5129, 5124, 5128, 5977, 5131, 5125, 5132, 5138, + 5133, 5136, 5142, 5977, 5144, 5977, 5145, 5146, 5150, 5147, + 5148, 5153, 5155, 5160, 5157, 5167, 5161, 5977, 5169, 5171, + 5977, 5173, 5977, 5175, 5977, 5176, 5177, 5179, 5181, 5977, + 5185, 5178, 5182, 5187, 5977, 5188, 5190, 5191, 5197, 5977, + 5977, 5199, 5207, 5203, 5200, 5212, 5214, 5209, 5216, 5217, + 5218, 5220, 5230, 5202, 5225, 5223, 5232, 5233, 5238, 5977, + 5977, 5977, 5234, 5241, 5248, 5245, 5247, 5255, 5251, 5977, + 5252, 5253, 5254, 5262, 5259, 5264, 5977, 5260, 5265, 5266, - 5268, 5260, 5275, 5279, 5282, 5284, 5285, 5955, 5287, 5955, - 5955, 5288, 5955, 5289, 5291, 5292, 5293, 5955, 5296, 5298, - 5297, 5299, 5301, 5955, 5309, 5302, 5304, 5305, 5955, 5955, - 5316, 5955, 5319, 5320, 5321, 5330, 5326, 5328, 5332, 5329, - 5955, 5327, 5333, 5337, 5339, 5340, 5955, 5341, 5343, 5344, - 5345, 5348, 5352, 5354, 5355, 5356, 5955, 5358, 5350, 5373, - 5369, 5955, 5357, 5375, 5955, 5955, 5360, 5379, 5380, 5955, - 5955, 5955, 5382, 5955, 5386, 5392, 5396, 5400, 5383, 5955, - 5402, 5391, 5399, 5955, 5395, 5403, 5405, 5407, 5955, 5955, - 5404, 5411, 5408, 5416, 5417, 5955, 5419, 5421, 5426, 5434, + 5267, 5271, 5268, 5275, 5977, 5279, 5282, 5285, 5274, 5289, + 5293, 5296, 5298, 5299, 5977, 5301, 5977, 5977, 5286, 5977, + 5302, 5303, 5306, 5307, 5977, 5310, 5312, 5311, 5313, 5315, + 5317, 5977, 5327, 5318, 5320, 5329, 5977, 5977, 5333, 5977, + 5336, 5337, 5330, 5346, 5341, 5343, 5348, 5345, 5977, 5349, + 5352, 5354, 5355, 5356, 5977, 5357, 5358, 5360, 5361, 5364, + 5363, 5366, 5368, 5370, 5977, 5371, 5373, 5391, 5387, 5977, + 5374, 5386, 5977, 5977, 5396, 5398, 5319, 5977, 5977, 5977, + 5401, 5977, 5403, 5407, 5411, 5415, 5406, 5977, 5417, 5414, + 5419, 5977, 5977, 5418, 5420, 5421, 5423, 5977, 5977, 5424, - 5436, 5424, 5438, 5440, 5447, 5420, 5428, 5442, 5444, 5445, - 5451, 5448, 5455, 5464, 5460, 5462, 5469, 5470, 5955, 5955, - 5472, 5955, 5955, 5474, 5477, 5479, 5481, 5483, 5485, 5487, - 5955, 5422, 5489, 5490, 5491, 5492, 5955, 5494, 5496, 5493, - 5497, 5502, 5500, 5504, 5506, 5955, 5955, 5498, 5515, 5507, - 5520, 5509, 5955, 5522, 5517, 5523, 5524, 5526, 5528, 5531, - 5955, 5530, 5532, 5955, 5955, 5534, 5955, 5955, 5955, 5955, - 5955, 5955, 5955, 5955, 5535, 5955, 5539, 5543, 5551, 5554, - 5955, 5540, 5548, 5459, 5544, 5555, 5955, 5556, 5559, 5560, - 5566, 5558, 5561, 5567, 5571, 5574, 5572, 5575, 5576, 5577, + 5427, 5425, 5428, 5430, 5977, 5435, 5439, 5441, 5444, 5447, + 5436, 5450, 5452, 5460, 5462, 5457, 5458, 5463, 5465, 5466, + 5467, 5469, 5478, 5474, 5476, 5488, 5485, 5977, 5977, 5492, + 5977, 5977, 5494, 5496, 5498, 5500, 5502, 5504, 5506, 5977, + 5507, 5509, 5510, 5378, 5511, 5977, 5513, 5515, 5512, 5517, + 5477, 5520, 5518, 5523, 5977, 5977, 5524, 5525, 5526, 5534, + 5529, 5977, 5536, 5543, 5540, 5541, 5538, 5544, 5545, 5977, + 5549, 5550, 5977, 5977, 5548, 5977, 5977, 5977, 5977, 5977, + 5977, 5977, 5977, 5553, 5977, 5551, 5566, 5568, 5570, 5977, + 5558, 5571, 5479, 5572, 5560, 5977, 5573, 5575, 5577, 5576, - 5581, 5578, 5582, 5584, 5955, 5955, 5955, 5583, 5585, 5595, - 5587, 5604, 5606, 5609, 5611, 5598, 5601, 5612, 5613, 5614, - 5616, 5620, 5628, 5623, 5624, 5625, 5626, 5632, 5627, 5629, - 5634, 5955, 5638, 5955, 5639, 5955, 5955, 5644, 5649, 5647, - 5640, 5651, 5658, 5654, 5656, 5660, 5661, 5663, 5665, 5955, - 5667, 5670, 5955, 5671, 5672, 5955, 5673, 5675, 5677, 5674, - 5678, 5681, 5684, 5692, 5683, 5955, 5955, 5686, 5694, 5695, - 5699, 5702, 5709, 5704, 5708, 5710, 5711, 5701, 5723, 5955, - 5719, 5721, 5725, 5955, 5727, 5722, 5728, 5729, 5730, 5738, - 5733, 5734, 5955, 5736, 5955, 5740, 5742, 5745, 5743, 5744, + 5579, 5583, 5585, 5587, 5589, 5588, 5590, 5593, 5591, 5597, + 5595, 5599, 5605, 5977, 5977, 5977, 5603, 5601, 5612, 5613, + 5624, 5625, 5628, 5630, 5614, 5618, 5631, 5632, 5635, 5620, + 5636, 5647, 5639, 5642, 5643, 5644, 5650, 5646, 5652, 5656, + 5977, 5657, 5977, 5658, 5977, 5977, 5660, 5662, 5665, 5666, + 5674, 5675, 5667, 5670, 5677, 5679, 5687, 5689, 5977, 5678, + 5680, 5977, 5690, 5691, 5977, 5682, 5692, 5693, 5694, 5698, + 5701, 5703, 5705, 5714, 5977, 5977, 5706, 5709, 5715, 5717, + 5718, 5725, 5721, 5724, 5728, 5730, 5731, 5738, 5977, 5737, + 5739, 5741, 5977, 5742, 5743, 5745, 5747, 5748, 5755, 5751, - 5746, 5755, 5753, 5757, 5955, 5760, 5764, 5761, 5766, 5768, - 5771, 5772, 5773, 5775, 5777, 5781, 5785, 5787, 5788, 5778, - 5791, 5789, 5955, 5799, 5790, 5955, 5800, 5801, 5793, 5802, - 5803, 5955, 5811, 5807, 5813, 5814, 5817, 5818, 5955, 5820, - 5823, 5824, 5955, 5828, 5955, 5955, 5829, 5827, 5830, 5836, - 5838, 5955, 5955, 5955, 5863, 5870, 5877, 5884, 5891, 88, - 5898, 5905, 5912, 5919, 5926, 5933, 5940, 5947 + 5756, 5977, 5753, 5977, 5758, 5759, 5760, 5761, 5763, 5764, + 5772, 5774, 5775, 5977, 5776, 5783, 5778, 5785, 5789, 5787, + 5791, 5781, 5794, 5796, 5803, 5807, 5804, 5808, 5795, 5812, + 5799, 5977, 5810, 5813, 5977, 5816, 5819, 5820, 5822, 5825, + 5977, 5828, 5823, 5829, 5830, 5834, 5836, 5977, 5838, 5845, + 5840, 5977, 5846, 5977, 5977, 5849, 5850, 5852, 5856, 5858, + 5977, 5977, 5977, 5885, 5892, 5899, 5906, 5913, 88, 5920, + 5927, 5934, 5941, 5948, 5955, 5962, 5969 } ; -static const flex_int16_t yy_def[3069] = +static const flex_int16_t yy_def[3078] = { 0, - 3054, 1, 3055, 3055, 3056, 3056, 3057, 3057, 3058, 3058, - 3059, 3059, 3054, 3060, 3054, 3054, 3054, 3054, 3061, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3062, 3054, 3054, 3054, 3062, 3063, 3054, 3054, - 3054, 3063, 3064, 3054, 3054, 3054, 3054, 3064, 3065, 3054, - 3054, 3054, 3065, 3066, 3054, 3067, 3054, 3066, 3066, 3060, - 3060, 3054, 3068, 3061, 3068, 3061, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3063, 1, 3064, 3064, 3065, 3065, 3066, 3066, 3067, 3067, + 3068, 3068, 3063, 3069, 3063, 3063, 3063, 3063, 3070, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3071, 3063, 3063, 3063, 3071, 3072, 3063, 3063, + 3063, 3072, 3073, 3063, 3063, 3063, 3063, 3073, 3074, 3063, + 3063, 3063, 3074, 3075, 3063, 3076, 3063, 3075, 3075, 3069, + 3069, 3063, 3077, 3070, 3077, 3070, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3062, 3062, 3063, 3063, 3064, 3064, 3054, 3065, 3065, 3066, - 3066, 3067, 3067, 3066, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3071, 3071, 3072, 3072, 3073, 3073, 3063, 3074, 3074, 3075, + 3075, 3076, 3076, 3075, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3066, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3075, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3066, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3075, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3066, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3075, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3066, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3054, 3060, 3054, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3075, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3063, 3069, 3063, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3066, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3075, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3054, 3060, 3060, 3066, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3063, 3069, 3069, 3075, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3063, 3069, 3063, 3069, 3069, 3069, 3063, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3060, 3060, 3060, 3054, 3054, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3054, - 3054, 3060, 3054, 3060, 3054, 3060, 3060, 3054, 3054, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3063, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3063, 3063, 3069, 3063, 3069, 3063, 3069, 3069, 3063, + 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3054, 3054, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3063, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3069, 3063, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3054, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3063, 3069, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, - 3060, 3054, 3054, 3060, 3054, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, - 3054, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3054, - 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3063, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3063, 3063, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3063, 3063, 3069, + 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3063, 3069, 3069, + 3069, 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3054, 3060, 3054, 3060, 3054, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3054, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3063, 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3054, - 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3060, 3060, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3054, - 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3054, 3054, 3060, 3060, 3060, 3054, - 3054, 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3054, 3054, - 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3063, 3069, 3063, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3063, 3063, 3063, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3063, 3063, 3069, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3054, - 3060, 3054, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3054, 3054, 3060, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3060, 3054, 3060, 3060, 3060, 3060, - 3054, 3060, 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, + 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3063, 3063, 3069, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3063, + 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3054, 3054, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3054, 3060, 3054, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3054, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3054, 3054, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3054, - 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3054, 3060, 3060, 3060, 3060, 3060, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3063, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3063, 3069, 3063, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3060, 3060, 3060, 3060, 3054, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, - 3060, 3060, 3054, 3060, 3060, 3054, 3060, 3060, 3060, 3060, - 3060, 3054, 3060, 3060, 3060, 3060, 3060, 3060, 3054, 3060, - 3060, 3060, 3054, 3060, 3054, 3054, 3060, 3060, 3060, 3060, - 3060, 3054, 3054, 0, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054 + 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, + 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, + 3069, 3063, 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, + 3063, 3063, 0, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063 } ; -static const flex_int16_t yy_nxt[5996] = +static const flex_int16_t yy_nxt[6018] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1574,522 +1577,524 @@ static const flex_int16_t yy_nxt[5996] = 71, 71, 71, 71, 730, 146, 726, 733, 737, 731, 71, 740, 742, 71, 71, 735, 744, 739, 71, 738, 743, 749, 741, 745, 746, 71, 71, 71, 747, 71, - 751, 753, 748, 71, 71, 71, 71, 71, 752, 71, - 755, 756, 754, 750, 71, 71, 757, 71, 71, 762, - 71, 71, 71, 760, 761, 71, 765, 758, 759, 764, - 71, 767, 71, 71, 771, 71, 769, 763, 71, 768, - 71, 71, 766, 773, 774, 71, 776, 772, 71, 775, - 71, 770, 71, 71, 778, 780, 71, 71, 71, 71, + 751, 753, 748, 71, 144, 71, 71, 71, 752, 71, + 755, 756, 754, 750, 71, 71, 757, 71, 71, 763, + 71, 71, 71, 760, 71, 71, 71, 758, 759, 766, + 765, 71, 768, 769, 71, 772, 71, 761, 762, 764, + 71, 71, 767, 770, 71, 775, 773, 71, 777, 774, + 776, 71, 71, 71, 779, 71, 71, 781, 771, 71, - 71, 71, 786, 71, 71, 787, 777, 779, 71, 71, - 71, 71, 788, 71, 781, 782, 783, 71, 784, 789, - 785, 795, 71, 71, 790, 793, 71, 71, 791, 71, - 792, 71, 794, 71, 71, 797, 796, 800, 71, 71, - 71, 71, 71, 808, 71, 798, 71, 71, 799, 801, - 802, 809, 71, 71, 71, 807, 803, 804, 805, 806, - 812, 71, 71, 810, 811, 71, 813, 71, 814, 71, - 71, 71, 817, 815, 818, 816, 820, 819, 71, 71, - 71, 71, 71, 821, 71, 822, 823, 151, 71, 824, - 71, 826, 828, 829, 71, 825, 827, 71, 830, 71, + 71, 778, 71, 71, 787, 71, 71, 71, 71, 788, + 71, 71, 780, 71, 782, 789, 71, 783, 784, 71, + 71, 785, 790, 786, 796, 71, 791, 793, 794, 71, + 71, 792, 798, 71, 795, 71, 71, 71, 71, 797, + 801, 71, 71, 71, 71, 809, 71, 71, 799, 71, + 810, 71, 800, 802, 803, 804, 71, 808, 71, 805, + 806, 807, 812, 813, 71, 71, 811, 71, 71, 814, + 71, 71, 815, 819, 818, 71, 821, 816, 817, 71, + 71, 71, 820, 71, 822, 71, 71, 824, 823, 71, + 825, 151, 830, 71, 827, 71, 829, 826, 828, 831, - 71, 71, 831, 836, 71, 71, 832, 71, 837, 839, - 71, 71, 842, 71, 833, 834, 838, 71, 71, 71, - 840, 835, 71, 844, 841, 71, 848, 71, 71, 845, - 71, 71, 71, 843, 71, 849, 71, 850, 71, 71, - 144, 71, 71, 847, 71, 865, 851, 846, 862, 71, - 863, 860, 71, 866, 853, 861, 852, 71, 864, 71, - 867, 71, 854, 71, 71, 872, 855, 869, 71, 856, - 71, 71, 868, 880, 71, 71, 857, 858, 870, 859, - 71, 885, 71, 871, 71, 873, 874, 71, 875, 71, - 884, 876, 71, 882, 949, 881, 877, 71, 887, 886, + 71, 71, 71, 71, 837, 71, 71, 832, 71, 833, + 71, 838, 840, 71, 843, 841, 834, 835, 71, 839, + 71, 71, 71, 836, 71, 845, 71, 842, 71, 849, + 71, 71, 71, 71, 846, 71, 850, 851, 844, 71, + 71, 71, 71, 71, 848, 142, 864, 71, 71, 847, + 852, 863, 866, 854, 861, 71, 853, 71, 862, 865, + 71, 867, 855, 71, 868, 870, 856, 71, 71, 857, + 71, 71, 71, 71, 873, 872, 858, 859, 869, 860, + 71, 71, 871, 71, 874, 875, 881, 876, 889, 883, + 877, 882, 71, 71, 895, 878, 885, 884, 886, 71, - 71, 889, 878, 879, 888, 883, 71, 71, 71, 71, - 891, 890, 71, 892, 893, 71, 71, 71, 894, 71, - 71, 895, 71, 897, 71, 901, 71, 71, 71, 71, - 900, 896, 71, 904, 71, 71, 71, 898, 908, 899, - 909, 902, 903, 926, 71, 905, 906, 910, 71, 911, - 914, 907, 71, 915, 912, 71, 71, 913, 71, 71, - 917, 71, 71, 916, 918, 71, 71, 71, 919, 921, - 71, 922, 71, 920, 71, 923, 71, 71, 928, 71, - 71, 925, 71, 71, 71, 931, 71, 71, 71, 929, - 930, 71, 924, 933, 71, 934, 927, 936, 71, 935, + 71, 879, 880, 71, 888, 71, 890, 887, 71, 71, + 71, 71, 892, 891, 71, 893, 894, 71, 71, 71, + 71, 71, 898, 896, 71, 902, 71, 71, 901, 71, + 71, 905, 71, 897, 71, 71, 909, 911, 71, 899, + 900, 903, 71, 904, 907, 906, 71, 912, 944, 71, + 71, 910, 913, 71, 914, 915, 908, 916, 921, 71, + 918, 71, 71, 71, 917, 919, 71, 71, 922, 71, + 923, 71, 71, 920, 71, 71, 71, 71, 929, 71, + 924, 926, 927, 71, 71, 71, 71, 71, 932, 71, + 71, 931, 925, 930, 71, 934, 928, 71, 935, 938, - 71, 937, 932, 71, 71, 938, 71, 71, 945, 943, - 71, 71, 940, 941, 944, 71, 71, 939, 71, 942, - 71, 71, 71, 950, 952, 946, 955, 948, 953, 71, - 947, 951, 71, 71, 71, 71, 71, 954, 71, 71, - 71, 71, 961, 966, 963, 71, 71, 71, 142, 71, - 71, 71, 71, 956, 957, 958, 967, 971, 959, 960, - 965, 962, 968, 964, 71, 969, 970, 71, 974, 71, - 71, 71, 973, 71, 71, 71, 71, 71, 972, 71, - 976, 983, 978, 71, 71, 985, 987, 71, 988, 71, - 975, 71, 71, 977, 71, 979, 981, 984, 980, 982, + 71, 71, 937, 939, 933, 71, 940, 71, 71, 945, + 71, 936, 71, 947, 946, 71, 71, 943, 71, 941, + 71, 71, 71, 71, 954, 948, 952, 950, 955, 71, + 71, 71, 942, 71, 953, 949, 957, 71, 71, 71, + 71, 71, 956, 71, 951, 71, 71, 965, 968, 963, + 71, 958, 71, 959, 71, 71, 71, 960, 71, 962, + 961, 969, 970, 966, 964, 967, 71, 71, 71, 71, + 972, 71, 973, 975, 971, 976, 71, 71, 977, 71, + 978, 974, 71, 71, 985, 980, 71, 71, 987, 979, + 71, 71, 989, 71, 71, 71, 71, 990, 71, 981, - 71, 71, 71, 71, 986, 989, 71, 993, 990, 71, - 995, 996, 991, 71, 71, 1000, 997, 71, 71, 999, - 992, 71, 1002, 71, 994, 71, 71, 1005, 151, 71, - 71, 1004, 998, 71, 1007, 71, 1008, 71, 1001, 71, - 71, 71, 71, 1003, 1006, 1011, 71, 71, 71, 1023, - 71, 71, 71, 71, 1024, 1009, 1014, 1010, 1012, 1026, - 71, 1068, 71, 1049, 71, 1013, 1015, 1025, 1016, 71, - 71, 71, 1017, 71, 1018, 1028, 1027, 1029, 1019, 71, - 1020, 71, 71, 1033, 1030, 1021, 1031, 1032, 1034, 71, - 1022, 71, 71, 1035, 71, 1036, 71, 1038, 71, 1039, + 991, 986, 983, 71, 982, 71, 984, 993, 71, 71, + 995, 988, 992, 71, 997, 994, 998, 71, 71, 1002, + 999, 71, 71, 1004, 71, 71, 71, 1000, 71, 996, + 71, 1001, 71, 1006, 1007, 151, 1009, 71, 1010, 71, + 71, 1003, 71, 71, 1005, 1008, 71, 1013, 71, 71, + 71, 71, 1025, 71, 71, 1028, 71, 1026, 71, 71, + 1012, 1011, 1014, 1016, 71, 71, 1051, 71, 1017, 1027, + 1015, 1018, 71, 1031, 71, 1019, 71, 1020, 1030, 1032, + 71, 1021, 71, 1022, 1029, 1033, 1035, 71, 1023, 71, + 1034, 1036, 71, 1024, 71, 71, 1037, 71, 1038, 71, - 71, 1042, 71, 71, 1041, 71, 71, 1037, 1047, 1040, - 1050, 1046, 1043, 1048, 71, 71, 1045, 1051, 71, 71, - 71, 1044, 71, 71, 1054, 1052, 71, 1063, 71, 71, - 71, 1066, 1062, 1067, 71, 71, 71, 1053, 71, 1055, - 1064, 1065, 1072, 71, 1056, 71, 1057, 1074, 1069, 1073, - 71, 71, 1058, 71, 1070, 1071, 71, 1059, 1060, 1075, - 71, 1078, 71, 71, 1061, 71, 71, 71, 1079, 1076, - 1080, 1081, 1084, 1077, 1082, 71, 71, 71, 71, 71, - 71, 71, 1083, 71, 1085, 1087, 71, 71, 71, 71, - 71, 71, 1092, 1089, 1094, 1086, 1093, 1088, 1091, 1096, + 1044, 1043, 1040, 71, 1041, 71, 71, 1049, 71, 1050, + 1039, 1045, 1048, 71, 1042, 71, 1052, 1053, 71, 1047, + 71, 71, 71, 71, 1046, 71, 71, 71, 71, 1068, + 1054, 1065, 71, 1070, 1064, 71, 71, 1055, 1056, 71, + 1057, 1066, 71, 71, 1067, 1058, 3063, 1059, 1069, 1071, + 1074, 71, 71, 1060, 1076, 1072, 1075, 71, 1061, 1062, + 71, 1073, 71, 71, 1080, 1063, 1077, 71, 71, 71, + 71, 71, 1081, 71, 71, 1079, 1078, 1086, 1083, 71, + 1084, 71, 71, 71, 71, 71, 1089, 1082, 1087, 1085, + 71, 71, 71, 1088, 71, 71, 71, 71, 1091, 1094, - 71, 1090, 71, 71, 1098, 71, 1095, 1097, 71, 71, - 71, 71, 71, 71, 71, 1104, 1105, 1101, 1106, 1109, - 1099, 1100, 71, 1107, 1103, 71, 1102, 71, 1108, 71, - 71, 1112, 71, 1116, 71, 1110, 1113, 71, 71, 1114, - 71, 1123, 1115, 71, 71, 1111, 1117, 71, 71, 1125, - 71, 71, 71, 71, 1118, 71, 1121, 1127, 1119, 1122, - 1120, 71, 71, 71, 1129, 1126, 71, 1128, 1124, 71, - 71, 1131, 1130, 71, 1132, 1134, 71, 71, 1133, 1138, - 71, 1135, 1140, 1137, 71, 1136, 1139, 71, 71, 1141, - 71, 71, 71, 1142, 1144, 71, 1145, 71, 71, 71, + 1096, 1095, 1090, 1093, 1098, 1092, 71, 71, 71, 71, + 71, 1111, 1097, 1099, 71, 3063, 1101, 71, 71, 71, + 1100, 71, 1103, 1106, 1107, 71, 1102, 1104, 71, 1105, + 1108, 71, 1110, 71, 1112, 1114, 71, 1109, 71, 1116, + 1115, 71, 1117, 71, 71, 71, 1118, 71, 71, 1113, + 1119, 1125, 71, 71, 1127, 71, 71, 71, 3063, 71, + 71, 1121, 71, 1124, 1120, 1122, 1123, 1129, 71, 71, + 1128, 1131, 1126, 1130, 1133, 71, 71, 1132, 71, 71, + 1134, 71, 71, 1136, 1137, 71, 1143, 71, 1139, 71, + 1142, 71, 1135, 1138, 71, 1141, 71, 71, 1147, 71, - 71, 1151, 1149, 1152, 71, 1143, 71, 71, 71, 71, - 1146, 1153, 71, 1150, 71, 1156, 1147, 1154, 1148, 1155, - 1159, 71, 1157, 71, 71, 71, 71, 71, 1158, 1160, - 1161, 71, 1162, 71, 1163, 71, 1165, 71, 1166, 71, - 71, 71, 71, 1171, 1172, 1164, 71, 1174, 1167, 71, - 71, 71, 1169, 1175, 71, 71, 71, 1168, 1179, 71, - 1170, 1173, 71, 71, 71, 71, 71, 71, 1178, 1177, - 1176, 71, 1181, 1185, 71, 71, 71, 1180, 3054, 71, - 71, 1186, 1193, 1182, 1189, 1184, 1187, 1188, 71, 1190, - 1183, 1191, 71, 1194, 71, 71, 1192, 71, 71, 71, + 1144, 1140, 1146, 71, 71, 71, 71, 71, 1153, 1151, + 1154, 71, 1145, 71, 71, 71, 71, 71, 1155, 71, + 1152, 1148, 1156, 1149, 1157, 1150, 1158, 1161, 71, 1159, + 71, 71, 71, 71, 71, 1160, 1162, 1163, 71, 1164, + 71, 71, 71, 1165, 1167, 1168, 1166, 71, 71, 71, + 1173, 1169, 1174, 71, 71, 71, 71, 71, 71, 71, + 1171, 71, 1176, 1177, 71, 1170, 1181, 1180, 1172, 1175, + 71, 71, 1178, 1179, 71, 71, 71, 1187, 71, 1182, + 1183, 71, 71, 71, 71, 71, 1191, 1193, 71, 71, + 71, 1208, 71, 1184, 1197, 1186, 1188, 1190, 1189, 1192, - 1195, 71, 1197, 1196, 71, 71, 71, 71, 1198, 1200, - 71, 71, 1199, 71, 1203, 1206, 71, 71, 71, 71, - 1201, 3054, 71, 71, 1216, 1202, 1204, 1207, 1210, 1205, - 71, 71, 71, 1209, 71, 1208, 1212, 1217, 71, 1211, - 1218, 71, 71, 71, 1220, 1213, 1221, 1214, 71, 1219, - 1215, 71, 71, 1222, 71, 71, 1223, 1224, 71, 1225, - 1227, 1230, 71, 1228, 71, 71, 71, 71, 71, 1231, - 1226, 1232, 1234, 71, 71, 71, 71, 1229, 1235, 71, - 71, 71, 1236, 1237, 71, 1233, 71, 1242, 71, 71, - 1238, 1240, 71, 71, 71, 1239, 1241, 71, 1243, 1247, + 1185, 1195, 1196, 71, 1194, 1198, 71, 71, 71, 71, + 71, 1199, 71, 71, 71, 71, 71, 1202, 71, 3063, + 71, 71, 1205, 1200, 1201, 71, 71, 71, 1203, 71, + 71, 1206, 1212, 1204, 1209, 1214, 1221, 1207, 71, 1210, + 1211, 71, 1218, 1219, 1215, 71, 1216, 1213, 71, 1217, + 1220, 71, 71, 71, 71, 1223, 71, 71, 71, 1222, + 71, 1227, 71, 1226, 71, 1229, 71, 1224, 1333, 1230, + 71, 1225, 1232, 71, 71, 1233, 1228, 71, 71, 1234, + 71, 1231, 1236, 71, 1235, 71, 71, 1237, 71, 1238, + 71, 71, 71, 1239, 71, 71, 71, 71, 1244, 71, - 71, 1251, 1252, 1244, 71, 71, 71, 1246, 71, 1245, - 71, 71, 1248, 1254, 1249, 1256, 1258, 71, 1253, 71, - 1250, 1259, 71, 1257, 71, 71, 1255, 71, 1263, 71, - 71, 1273, 3054, 1261, 1271, 1272, 1260, 1262, 71, 71, - 71, 71, 1270, 1264, 1274, 71, 1265, 1266, 1276, 1275, - 1277, 1267, 71, 71, 71, 71, 1279, 1268, 1278, 71, - 1281, 1269, 71, 71, 71, 1282, 71, 1283, 71, 71, - 71, 71, 1291, 1280, 1288, 1286, 71, 71, 71, 1292, - 1332, 1293, 1285, 1284, 1289, 71, 71, 71, 1287, 1290, - 1294, 71, 1300, 71, 1301, 1302, 1295, 71, 71, 71, + 1240, 71, 1242, 1243, 1245, 1241, 71, 1249, 71, 1254, + 71, 71, 1250, 1246, 1248, 71, 1247, 1253, 71, 1251, + 71, 71, 71, 1258, 1255, 71, 1252, 71, 1256, 1260, + 71, 1257, 1274, 1259, 1261, 71, 71, 1265, 71, 1263, + 1264, 1262, 71, 1272, 71, 71, 1275, 1266, 71, 71, + 1267, 1268, 1278, 1273, 1276, 1269, 71, 1277, 71, 71, + 71, 1270, 71, 71, 1279, 1271, 71, 1280, 71, 1281, + 71, 1283, 71, 71, 71, 1288, 1284, 1282, 1285, 1290, + 1286, 1287, 71, 71, 1293, 1294, 71, 71, 71, 1351, + 71, 71, 1289, 1295, 71, 1297, 1291, 71, 1296, 71, - 71, 1296, 1304, 1297, 1303, 1298, 71, 1299, 71, 71, - 71, 1308, 71, 1311, 1305, 1307, 1309, 71, 1306, 71, - 71, 1314, 71, 1313, 71, 1312, 1318, 71, 1319, 1315, - 1310, 71, 71, 71, 71, 71, 71, 71, 1317, 1320, - 1322, 1316, 71, 71, 71, 1324, 71, 1321, 1323, 1327, - 1328, 71, 1330, 71, 71, 1325, 1331, 71, 1329, 71, - 1336, 71, 1333, 71, 71, 1334, 71, 1326, 1335, 1338, - 71, 71, 1339, 71, 1343, 71, 71, 71, 1340, 71, - 1345, 71, 71, 1337, 71, 1341, 1347, 1342, 71, 71, - 1349, 1348, 1351, 71, 3054, 71, 1344, 71, 71, 1346, + 1298, 1292, 1299, 71, 1300, 71, 1301, 71, 1302, 1303, + 1304, 71, 71, 71, 1305, 1306, 71, 1308, 1310, 1313, + 1307, 71, 1309, 1311, 71, 1312, 1314, 71, 71, 71, + 71, 71, 1320, 71, 1321, 71, 71, 1316, 71, 71, + 71, 1315, 71, 1322, 1324, 1319, 71, 71, 1317, 1318, + 1323, 1326, 71, 71, 1325, 1330, 71, 1329, 1332, 71, + 71, 71, 71, 1334, 1327, 71, 1335, 71, 1331, 1338, + 71, 71, 1328, 71, 1337, 1340, 71, 71, 1341, 71, + 71, 1336, 1345, 71, 1342, 71, 71, 1339, 1347, 71, + 71, 71, 1343, 71, 1344, 1349, 1353, 71, 1350, 71, - 1353, 71, 1350, 1354, 71, 1355, 1356, 71, 1352, 1357, - 71, 1358, 1359, 71, 71, 71, 71, 1364, 1365, 1367, - 1361, 71, 1362, 71, 71, 71, 1366, 71, 71, 1363, - 71, 1360, 1371, 71, 71, 71, 1368, 71, 1375, 1376, - 71, 1370, 1378, 71, 71, 71, 1377, 1369, 71, 71, - 71, 71, 71, 71, 1372, 1373, 71, 1379, 71, 1385, - 1374, 71, 1382, 1380, 71, 1383, 71, 1390, 71, 1381, - 1384, 1389, 71, 1386, 71, 3054, 71, 1392, 1394, 1388, - 71, 1387, 71, 1395, 71, 71, 71, 1391, 71, 1397, - 1398, 71, 71, 1393, 1396, 71, 71, 1403, 1405, 1399, + 1346, 71, 71, 71, 1355, 71, 1348, 1356, 71, 1352, + 1358, 1357, 1354, 1359, 71, 1360, 71, 71, 71, 1362, + 71, 1361, 1366, 1363, 1367, 1364, 71, 71, 71, 1369, + 71, 1368, 71, 1365, 71, 71, 1370, 1373, 71, 71, + 71, 71, 1377, 1378, 71, 1372, 1380, 71, 71, 71, + 1379, 1371, 71, 71, 71, 71, 71, 71, 1387, 1374, + 1375, 1381, 71, 71, 1376, 71, 1384, 1382, 71, 1385, + 71, 1392, 71, 1383, 1386, 1391, 71, 71, 71, 1396, + 71, 1394, 1388, 1390, 1397, 71, 71, 1399, 1389, 71, + 71, 1393, 71, 71, 1400, 1407, 1395, 71, 1398, 71, - 1404, 1400, 1407, 1401, 71, 1406, 1402, 71, 71, 71, - 71, 1408, 1410, 71, 1412, 1409, 71, 1411, 71, 71, - 71, 1415, 71, 71, 1417, 71, 71, 1422, 1414, 71, - 71, 1416, 71, 1423, 71, 1413, 1419, 71, 1426, 71, - 1418, 1420, 71, 1421, 71, 71, 1427, 71, 1424, 71, - 71, 1425, 71, 1429, 1433, 1435, 1428, 1430, 71, 1434, - 1431, 71, 71, 1438, 71, 71, 1432, 71, 71, 1443, - 1437, 1440, 1444, 1442, 71, 71, 1436, 71, 71, 1439, - 71, 1445, 71, 1446, 1447, 71, 71, 71, 1441, 71, - 1448, 1451, 1450, 71, 71, 1454, 1449, 71, 71, 71, + 71, 71, 1409, 1401, 1410, 1402, 1405, 1403, 71, 1406, + 1404, 1408, 71, 1412, 71, 71, 71, 71, 1413, 71, + 1417, 71, 71, 1411, 71, 1415, 1419, 71, 71, 71, + 1424, 71, 71, 1414, 1416, 1418, 1425, 71, 1421, 71, + 71, 1428, 1420, 71, 71, 1422, 1423, 71, 71, 1426, + 71, 1429, 71, 71, 71, 71, 1427, 1431, 1435, 1430, + 1437, 1436, 1438, 1432, 71, 1433, 71, 1440, 71, 71, + 71, 1434, 71, 1439, 1445, 1442, 1446, 1444, 71, 1447, + 71, 71, 71, 1441, 71, 1448, 1449, 71, 71, 71, + 1451, 1443, 1450, 71, 71, 71, 71, 1456, 71, 71, - 1453, 71, 71, 1460, 1452, 1462, 1456, 1457, 1461, 71, - 1463, 71, 71, 1458, 71, 1465, 71, 1455, 71, 71, - 1459, 71, 71, 71, 71, 1473, 1469, 71, 1468, 71, - 1476, 71, 1464, 71, 1474, 1466, 71, 1467, 71, 1479, - 71, 1470, 1472, 1471, 1478, 71, 71, 71, 71, 71, - 71, 3054, 1477, 1475, 71, 71, 1487, 71, 71, 1480, - 1488, 1490, 71, 1484, 71, 1481, 1482, 1483, 1493, 1486, - 1489, 1485, 1491, 71, 71, 71, 71, 71, 71, 1492, - 1497, 71, 71, 71, 1498, 1495, 1500, 71, 1494, 71, - 1496, 1505, 71, 71, 71, 1507, 71, 1499, 1502, 1506, + 1455, 71, 71, 71, 1459, 71, 1462, 1452, 1453, 1458, + 1454, 1463, 71, 71, 1464, 71, 1460, 71, 1457, 1465, + 71, 71, 1461, 71, 1467, 1466, 1470, 71, 71, 1475, + 71, 71, 1468, 1471, 1469, 71, 1476, 71, 1478, 71, + 1472, 71, 71, 71, 71, 1481, 71, 1473, 1474, 1480, + 71, 71, 71, 71, 3063, 71, 71, 1489, 1479, 71, + 1482, 1483, 1490, 1477, 71, 1484, 1486, 1492, 71, 1485, + 1488, 1493, 71, 71, 1487, 71, 1491, 71, 1494, 1495, + 71, 71, 71, 71, 1499, 71, 71, 71, 1500, 1497, + 1496, 1503, 71, 1509, 1498, 1507, 71, 71, 1504, 71, - 71, 71, 1501, 71, 1511, 1504, 71, 1503, 1508, 1509, - 71, 1510, 71, 71, 1512, 1516, 1517, 71, 71, 71, - 71, 71, 1522, 1513, 71, 1520, 71, 1521, 71, 71, - 1514, 1524, 71, 1515, 71, 71, 1518, 1525, 1526, 71, - 1519, 71, 71, 71, 1523, 1527, 1529, 71, 71, 1532, - 71, 1528, 71, 71, 71, 71, 1531, 1533, 71, 1536, - 71, 1530, 71, 1538, 71, 1542, 1537, 71, 71, 71, - 71, 1534, 1535, 1539, 1545, 1540, 1547, 71, 71, 71, - 71, 1543, 1548, 1541, 71, 1546, 1544, 71, 1550, 71, - 71, 71, 71, 1553, 71, 1552, 1555, 1556, 71, 1549, + 71, 1501, 1508, 1502, 71, 71, 71, 1505, 1506, 71, + 1512, 71, 71, 1513, 71, 1510, 1514, 1511, 1518, 1519, + 71, 71, 71, 71, 71, 71, 1515, 1524, 1522, 1516, + 71, 1523, 71, 71, 1517, 1526, 71, 71, 71, 1520, + 1527, 1528, 71, 1521, 71, 1525, 71, 1531, 1529, 71, + 71, 1534, 71, 71, 1530, 71, 71, 71, 1533, 71, + 1538, 71, 1540, 71, 71, 71, 1532, 1535, 71, 1544, + 71, 1539, 71, 71, 1536, 1537, 71, 1541, 1542, 1545, + 71, 1547, 1549, 71, 1550, 71, 1552, 1548, 1546, 1543, + 71, 71, 71, 1551, 71, 71, 1555, 1558, 71, 71, - 71, 71, 1551, 71, 71, 1563, 71, 71, 1558, 1554, - 1557, 1564, 71, 71, 71, 1561, 71, 71, 3054, 1559, - 1560, 1568, 1567, 71, 71, 1570, 71, 1565, 1562, 1571, - 1572, 71, 1566, 1574, 1569, 71, 71, 1573, 71, 71, - 1575, 1576, 71, 71, 1578, 71, 1581, 71, 1579, 71, - 1577, 71, 1582, 71, 71, 71, 1587, 1586, 71, 1580, - 71, 1583, 71, 71, 3054, 1593, 1590, 1584, 1585, 1591, - 1588, 71, 71, 71, 71, 71, 1595, 1594, 1600, 71, - 1589, 1592, 1601, 1597, 1598, 71, 71, 1599, 71, 71, - 1602, 1605, 1596, 71, 1603, 71, 1604, 71, 71, 1607, + 1557, 71, 1554, 71, 71, 71, 71, 1565, 71, 71, + 71, 71, 1553, 1556, 1566, 1560, 71, 1559, 1563, 1569, + 71, 1570, 1561, 1562, 71, 71, 1572, 71, 1567, 1574, + 1564, 1568, 1573, 1576, 71, 71, 1578, 71, 71, 71, + 1571, 71, 71, 71, 71, 1575, 71, 1580, 1577, 1581, + 71, 1583, 71, 1584, 71, 71, 71, 1579, 1588, 71, + 1585, 1586, 71, 1589, 71, 1595, 1582, 1592, 1590, 1587, + 1593, 71, 71, 71, 71, 71, 1597, 1596, 71, 1591, + 1600, 71, 1594, 1599, 1602, 1603, 71, 1605, 71, 71, + 1606, 71, 1598, 1604, 1607, 71, 71, 71, 71, 71, - 71, 71, 71, 1606, 1612, 1611, 1613, 1608, 71, 1615, - 71, 71, 71, 1614, 71, 71, 71, 71, 71, 1609, - 71, 1610, 1617, 1618, 71, 1619, 71, 71, 71, 1627, - 71, 71, 1620, 71, 1616, 71, 1621, 71, 1622, 71, - 1623, 1624, 1625, 71, 1626, 1632, 71, 71, 1628, 71, - 1635, 1630, 1634, 1629, 71, 71, 71, 71, 71, 71, - 1631, 71, 71, 1633, 71, 71, 71, 1640, 1642, 1636, - 1637, 1650, 71, 1643, 1641, 1639, 1644, 71, 1645, 1638, - 1646, 71, 1651, 71, 1649, 1647, 71, 71, 71, 1652, - 1654, 1648, 1655, 71, 71, 71, 71, 71, 71, 71, + 71, 1608, 71, 1601, 1614, 1613, 1615, 1617, 1609, 71, + 71, 71, 71, 71, 1616, 1610, 71, 1611, 71, 1612, + 71, 1619, 1620, 71, 71, 1621, 71, 71, 71, 1629, + 71, 71, 71, 71, 1618, 71, 1622, 71, 71, 1634, + 71, 1625, 1626, 1627, 1623, 1628, 1624, 71, 71, 71, + 1630, 1632, 71, 1631, 1636, 71, 1637, 71, 71, 1633, + 71, 71, 71, 1638, 71, 71, 1639, 1635, 1644, 1642, + 71, 71, 71, 1652, 71, 1651, 1641, 1643, 71, 1645, + 1647, 1640, 1646, 1653, 71, 71, 1648, 1657, 71, 71, + 1650, 1649, 1656, 71, 71, 71, 1655, 1654, 71, 71, - 1658, 1656, 1659, 71, 1653, 1667, 71, 71, 1662, 71, - 71, 71, 71, 1657, 1661, 1660, 1664, 71, 1666, 1665, - 1668, 71, 1663, 1670, 71, 71, 1669, 71, 71, 71, - 1671, 1672, 71, 1677, 71, 71, 71, 1674, 71, 1681, - 1673, 1680, 71, 1679, 1683, 1678, 1676, 1684, 71, 71, - 1689, 71, 1675, 1682, 71, 1690, 71, 71, 71, 71, - 1685, 1695, 71, 3054, 1694, 1697, 71, 71, 1686, 1688, - 1687, 1691, 1698, 1692, 71, 1700, 1693, 71, 71, 1699, - 1696, 71, 71, 1701, 71, 1704, 71, 71, 1708, 71, - 1706, 71, 71, 71, 71, 71, 1707, 1709, 1703, 1705, + 1660, 71, 71, 1661, 71, 71, 1658, 71, 71, 1669, + 71, 1664, 71, 1659, 1668, 71, 1666, 1663, 1662, 1667, + 1670, 71, 71, 1665, 1674, 1672, 71, 71, 1671, 71, + 71, 71, 1679, 71, 71, 71, 71, 71, 1683, 1676, + 1673, 1682, 1675, 1681, 1685, 71, 71, 1686, 1678, 1680, + 1687, 71, 1684, 71, 1677, 1691, 71, 71, 71, 1697, + 1692, 71, 71, 71, 1688, 71, 71, 1696, 1699, 71, + 1693, 1690, 1689, 1694, 1700, 71, 71, 71, 1702, 1695, + 71, 1698, 1701, 71, 71, 1706, 1704, 1710, 1707, 1703, + 1705, 71, 71, 71, 71, 1708, 71, 71, 71, 71, - 71, 71, 1702, 1712, 71, 71, 71, 1718, 71, 1713, - 1720, 1710, 1711, 71, 1714, 1721, 71, 1715, 71, 1716, - 1717, 71, 71, 71, 71, 1727, 1722, 71, 71, 1719, - 71, 71, 1731, 71, 71, 71, 71, 1726, 1723, 1733, - 1724, 1734, 1725, 71, 1729, 71, 71, 71, 1730, 1728, - 1735, 1736, 1737, 71, 1732, 1740, 71, 71, 71, 71, - 1744, 71, 71, 71, 71, 71, 71, 71, 1739, 1746, - 1738, 1742, 71, 71, 1751, 1747, 1741, 1743, 1745, 1748, - 71, 71, 1755, 71, 1749, 1752, 1750, 1754, 71, 71, - 1753, 1756, 1757, 71, 1758, 71, 1760, 1761, 71, 71, + 71, 1709, 1711, 71, 71, 71, 1714, 71, 1715, 1720, + 71, 71, 1722, 1716, 1723, 1712, 1713, 1717, 71, 1718, + 71, 1719, 71, 1725, 1724, 71, 71, 1729, 71, 71, + 71, 1721, 71, 71, 1733, 71, 71, 71, 71, 1728, + 1726, 1735, 71, 1736, 1727, 1731, 71, 1737, 1732, 71, + 1730, 1738, 1734, 71, 1742, 71, 71, 71, 1739, 1740, + 71, 1746, 71, 71, 71, 71, 71, 71, 1741, 1744, + 71, 1748, 71, 71, 1753, 1743, 71, 1747, 1749, 1745, + 71, 1760, 1750, 71, 1751, 1754, 71, 1752, 71, 1756, + 1755, 1757, 71, 71, 1759, 71, 1758, 1761, 1762, 1763, - 71, 71, 71, 1763, 1759, 71, 71, 71, 1764, 71, - 71, 1762, 71, 71, 71, 1769, 71, 71, 1773, 71, - 1765, 1770, 71, 71, 71, 1767, 1771, 1768, 1766, 1777, - 71, 1772, 1774, 71, 1780, 1779, 1778, 1776, 1781, 71, - 1782, 71, 71, 1783, 71, 1775, 71, 71, 71, 1787, - 71, 1790, 1784, 1791, 71, 1792, 71, 1785, 1788, 71, - 1789, 71, 1786, 1794, 71, 71, 1795, 71, 1793, 1798, - 71, 1799, 1800, 71, 71, 1802, 1801, 1804, 71, 71, - 1796, 71, 1797, 71, 71, 1807, 71, 1806, 71, 1808, - 1809, 71, 1803, 71, 71, 1816, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 1765, 71, 71, 1768, 1766, + 71, 71, 71, 1764, 71, 71, 1771, 71, 71, 71, + 71, 1772, 1767, 1775, 1779, 1769, 1773, 71, 1770, 1776, + 1774, 1780, 1781, 71, 1783, 71, 71, 1778, 1784, 71, + 71, 71, 1777, 71, 71, 1789, 71, 71, 1782, 71, + 1792, 1793, 71, 1794, 71, 71, 1787, 1785, 1786, 71, + 1790, 1788, 1791, 1796, 71, 71, 1797, 1795, 1800, 71, + 71, 1802, 71, 1804, 1801, 1803, 1798, 71, 71, 71, + 1799, 1806, 71, 71, 1809, 71, 1808, 71, 71, 1810, + 71, 1811, 71, 71, 1818, 71, 1805, 71, 71, 71, - 1821, 71, 71, 1818, 1805, 1810, 1811, 1812, 1819, 71, - 71, 1814, 1813, 1820, 1815, 71, 1824, 1817, 71, 71, - 71, 1822, 71, 1827, 1828, 71, 71, 1825, 71, 1830, - 1823, 71, 71, 1833, 1834, 71, 71, 1836, 71, 1826, - 71, 71, 71, 71, 1842, 71, 1829, 1841, 1832, 71, - 1838, 1831, 1839, 71, 71, 71, 1835, 71, 71, 71, - 1848, 71, 1845, 1840, 71, 1837, 1846, 71, 1852, 1844, - 1843, 71, 1851, 1855, 71, 71, 71, 1856, 71, 71, - 1850, 1858, 1854, 71, 1847, 1857, 71, 1849, 71, 71, - 71, 1853, 71, 71, 71, 1863, 71, 1859, 1860, 71, + 71, 1823, 1812, 1813, 1814, 1820, 71, 1807, 71, 1815, + 1821, 71, 1816, 1817, 71, 1819, 1826, 71, 1828, 1824, + 1822, 71, 71, 1830, 71, 71, 1827, 71, 1832, 1825, + 71, 71, 71, 1835, 1836, 71, 71, 1838, 71, 71, + 71, 71, 1829, 71, 1844, 71, 71, 71, 1843, 1840, + 1833, 1831, 1841, 1834, 71, 71, 1837, 71, 71, 71, + 1850, 71, 1842, 71, 1839, 1847, 1848, 1845, 71, 71, + 1846, 1854, 1857, 1849, 1853, 71, 71, 71, 71, 1852, + 1858, 1860, 1856, 1859, 71, 71, 71, 1851, 1855, 71, + 71, 71, 71, 71, 1861, 1865, 71, 71, 1868, 1869, - 1866, 1867, 1862, 71, 71, 71, 71, 71, 1861, 1871, - 71, 1864, 71, 1876, 71, 1868, 1869, 1875, 71, 1870, - 1865, 71, 71, 71, 71, 1872, 1873, 1880, 71, 71, - 1881, 71, 1874, 1883, 71, 1884, 1878, 1877, 1882, 1885, - 71, 1879, 1887, 71, 1886, 71, 71, 71, 71, 71, - 1894, 71, 1891, 71, 1897, 71, 71, 71, 1896, 1889, - 71, 1888, 71, 1898, 1899, 1890, 1895, 71, 1892, 1893, - 71, 1904, 71, 1905, 71, 71, 1900, 1903, 1906, 1908, - 71, 1901, 1909, 1907, 71, 71, 1902, 71, 71, 1913, - 71, 71, 1911, 71, 71, 71, 71, 1915, 1918, 71, + 1870, 71, 1864, 71, 71, 71, 71, 71, 1873, 1862, + 1863, 1866, 71, 71, 71, 1878, 71, 71, 1872, 1877, + 71, 1871, 1867, 71, 1874, 71, 71, 1875, 1893, 1882, + 71, 71, 1879, 71, 1876, 1880, 1881, 1883, 71, 1884, + 1885, 71, 1886, 71, 1887, 1889, 71, 1890, 71, 1888, + 71, 71, 1896, 71, 71, 1899, 71, 1891, 71, 1898, + 71, 1900, 71, 71, 71, 71, 1901, 1892, 1897, 71, + 1894, 1895, 1902, 1906, 71, 1903, 1907, 71, 1908, 3063, + 1904, 1910, 1911, 1909, 71, 1905, 71, 71, 71, 71, + 1915, 1913, 71, 71, 71, 1912, 71, 1917, 71, 1920, - 71, 1910, 1912, 1914, 71, 1917, 1916, 1920, 71, 71, - 71, 1921, 1922, 71, 1924, 71, 71, 1977, 1919, 1925, - 71, 1926, 1927, 71, 1928, 71, 1930, 1923, 71, 71, - 1929, 71, 71, 71, 1931, 1933, 1932, 71, 71, 71, - 1936, 71, 1934, 1935, 71, 1938, 71, 71, 1942, 71, - 71, 1937, 1941, 1939, 71, 71, 71, 71, 1940, 1943, - 1944, 1945, 1946, 71, 71, 71, 1948, 71, 71, 1953, - 71, 1951, 71, 1952, 1947, 71, 71, 71, 71, 1958, - 71, 1955, 1949, 71, 1950, 71, 1962, 71, 1954, 71, - 1959, 1957, 1961, 71, 1956, 71, 1963, 71, 1960, 71, + 71, 1914, 1922, 71, 1916, 71, 1918, 71, 71, 71, + 71, 71, 71, 1927, 3063, 1923, 1926, 71, 1928, 1924, + 1929, 71, 1921, 1919, 1930, 71, 71, 1932, 1925, 71, + 71, 1934, 1931, 71, 71, 1933, 1935, 71, 71, 71, + 71, 1938, 1937, 1936, 71, 1940, 71, 71, 71, 1944, + 71, 1939, 1941, 1943, 71, 71, 1945, 71, 1942, 1946, + 1947, 1948, 71, 71, 71, 71, 71, 71, 71, 1955, + 1953, 71, 1950, 1954, 71, 71, 71, 1949, 71, 71, + 1957, 71, 1951, 71, 1952, 1956, 71, 1960, 1963, 3063, + 1959, 71, 1958, 71, 1964, 1966, 1962, 71, 1961, 71, - 1966, 1964, 1968, 71, 71, 71, 71, 1969, 71, 71, - 1967, 1974, 71, 1976, 1965, 1970, 71, 71, 1978, 71, - 1973, 1971, 71, 1972, 1979, 71, 1975, 71, 1982, 1980, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 1983, - 3054, 71, 71, 1990, 1985, 1981, 1986, 1987, 1994, 71, - 71, 1989, 1984, 1993, 71, 71, 1991, 1997, 1992, 1988, - 1995, 71, 71, 71, 71, 2001, 1998, 2000, 71, 71, - 1996, 71, 71, 2003, 71, 1999, 2004, 71, 71, 71, - 2005, 2009, 2002, 2007, 71, 71, 2011, 2013, 71, 2008, - 2006, 71, 71, 71, 2016, 71, 71, 2010, 2015, 2012, + 1965, 71, 1967, 71, 1968, 1970, 71, 71, 71, 71, + 1969, 1971, 1976, 71, 71, 1978, 71, 1972, 71, 1973, + 1980, 71, 1974, 1975, 71, 71, 1979, 71, 71, 1984, + 1977, 71, 71, 1981, 1982, 71, 1983, 71, 71, 71, + 1985, 71, 71, 71, 71, 71, 71, 1987, 1992, 1988, + 1989, 1996, 71, 1986, 71, 71, 1991, 1995, 1999, 2000, + 71, 1993, 1997, 1994, 71, 1990, 1998, 71, 71, 2002, + 2003, 71, 71, 71, 71, 71, 2005, 71, 71, 2006, + 2001, 71, 2007, 2011, 2009, 2004, 71, 71, 2013, 2010, + 2015, 71, 2008, 71, 71, 71, 71, 2012, 2018, 2017, - 2017, 2018, 71, 71, 2021, 71, 71, 71, 71, 71, - 71, 2022, 71, 2027, 71, 2024, 71, 2014, 2023, 2031, - 2019, 71, 2028, 2020, 2029, 71, 2026, 2025, 71, 71, - 71, 2033, 71, 2032, 2036, 71, 2030, 71, 2034, 2037, - 71, 71, 2039, 71, 2038, 71, 2035, 71, 2040, 71, - 2042, 71, 2041, 2046, 71, 2043, 71, 2048, 2044, 71, - 71, 2045, 2049, 71, 71, 2050, 71, 71, 71, 2053, - 71, 2051, 2052, 2054, 71, 2047, 2058, 71, 71, 2055, - 71, 71, 71, 2057, 71, 71, 71, 2056, 2059, 71, - 2067, 71, 71, 71, 2062, 71, 2060, 2061, 2064, 2063, + 2019, 2014, 71, 71, 71, 2023, 71, 2020, 71, 71, + 71, 71, 71, 2024, 2026, 2029, 71, 71, 2030, 2016, + 71, 2021, 2025, 71, 2022, 2033, 2028, 71, 71, 2027, + 2035, 71, 2034, 71, 71, 2031, 2039, 71, 71, 2041, + 71, 71, 2037, 2032, 71, 2042, 71, 71, 71, 71, + 2038, 2036, 2040, 2044, 71, 2043, 2048, 2050, 2046, 2045, + 71, 2047, 2051, 71, 71, 71, 71, 71, 2049, 2052, + 71, 2055, 2056, 71, 71, 71, 2053, 2054, 2060, 71, + 71, 71, 71, 2057, 2059, 71, 71, 71, 71, 71, + 71, 71, 2061, 2058, 71, 2069, 2064, 2063, 2062, 2066, - 2068, 2065, 2066, 71, 71, 71, 71, 2074, 71, 71, - 2070, 2072, 2069, 71, 2073, 2078, 71, 2077, 2076, 2080, - 71, 71, 2079, 2071, 2075, 2082, 71, 71, 2081, 2085, - 2087, 2083, 2088, 71, 2086, 71, 71, 71, 71, 71, - 2084, 2090, 2089, 2092, 71, 71, 2093, 71, 2097, 71, - 71, 2098, 71, 2101, 71, 3054, 2096, 2091, 71, 71, - 2094, 71, 2103, 2102, 2099, 2104, 71, 71, 71, 2106, - 71, 2095, 2100, 2105, 2107, 71, 71, 71, 71, 71, - 2109, 71, 71, 2111, 71, 71, 71, 2108, 71, 2114, - 71, 2120, 71, 2118, 2113, 71, 71, 71, 71, 2121, + 2065, 2067, 71, 2071, 71, 71, 2068, 2070, 71, 71, + 2072, 2074, 71, 2078, 2075, 2080, 71, 71, 71, 2082, + 71, 2079, 71, 2073, 2076, 71, 2077, 2081, 71, 2084, + 3063, 71, 2087, 2085, 2089, 2086, 2083, 2088, 71, 2090, + 71, 71, 71, 71, 2091, 71, 2094, 71, 71, 2095, + 2092, 2093, 2098, 2099, 71, 71, 2100, 71, 71, 2103, + 71, 71, 71, 2096, 2109, 71, 2104, 71, 2105, 2101, + 2106, 71, 71, 2108, 2097, 71, 2102, 2107, 71, 71, + 71, 71, 2110, 2113, 2111, 71, 71, 71, 71, 71, + 2116, 71, 71, 71, 2120, 2122, 71, 2123, 71, 71, - 2115, 2116, 2110, 2123, 2112, 71, 2117, 71, 71, 71, - 71, 2122, 2119, 2127, 2130, 71, 71, 2125, 71, 71, - 71, 71, 2128, 2124, 2131, 71, 2126, 71, 2129, 71, - 71, 71, 2141, 71, 71, 71, 71, 2132, 2133, 2142, - 71, 2138, 3054, 2134, 2136, 2135, 2140, 2143, 2137, 2144, - 71, 2139, 3054, 2145, 71, 2146, 2147, 71, 2148, 71, - 71, 71, 2151, 71, 71, 2149, 2154, 71, 71, 2155, - 71, 71, 2152, 2150, 71, 2153, 2156, 2160, 71, 2161, - 71, 71, 2163, 71, 71, 71, 2159, 71, 2157, 71, - 2158, 2165, 71, 71, 2168, 71, 2169, 71, 2167, 2170, + 2112, 2115, 71, 71, 2114, 2117, 71, 2118, 2119, 71, + 71, 2125, 71, 2124, 2121, 2127, 71, 2129, 2132, 71, + 71, 2128, 2130, 71, 2133, 2126, 71, 71, 2131, 71, + 71, 71, 71, 71, 2143, 71, 71, 71, 71, 2134, + 2144, 71, 2135, 71, 2140, 2142, 71, 2181, 2138, 2136, + 2146, 2137, 2139, 2151, 2141, 71, 2145, 71, 2148, 2147, + 2149, 71, 2150, 71, 71, 2153, 71, 71, 2152, 2156, + 71, 71, 2157, 71, 71, 2154, 2158, 71, 2155, 2162, + 71, 2163, 71, 71, 2165, 71, 71, 2167, 71, 2161, + 71, 71, 71, 2159, 2160, 71, 2169, 2170, 71, 2171, - 2162, 71, 2164, 71, 2166, 71, 2173, 71, 2175, 71, - 2171, 71, 2174, 2177, 71, 71, 71, 2172, 71, 2180, - 71, 2179, 71, 2181, 2176, 2183, 71, 71, 71, 2178, - 2187, 71, 71, 71, 71, 2185, 71, 2184, 2182, 71, - 2191, 2192, 71, 71, 2196, 71, 2186, 71, 2188, 2190, - 71, 71, 2193, 71, 2194, 2189, 71, 2198, 2195, 71, - 71, 2203, 71, 71, 2205, 2199, 71, 2197, 71, 2206, - 71, 2200, 2204, 71, 2201, 2210, 71, 71, 2211, 71, - 2209, 71, 71, 71, 2207, 2202, 2208, 2215, 2217, 71, - 2213, 71, 2220, 71, 2218, 71, 2222, 71, 71, 71, + 71, 71, 2164, 71, 2166, 2168, 2172, 71, 71, 2174, + 2173, 71, 2176, 2177, 71, 2179, 71, 71, 71, 2183, + 2182, 71, 2175, 2185, 71, 71, 71, 2178, 71, 2180, + 2189, 71, 71, 71, 2184, 71, 71, 2193, 2194, 71, + 2186, 2187, 71, 71, 2188, 71, 71, 71, 2190, 71, + 2192, 2196, 2199, 71, 2201, 2191, 2200, 71, 2197, 71, + 2198, 2195, 71, 2202, 71, 2206, 71, 71, 2208, 71, + 71, 71, 2209, 71, 71, 2203, 2207, 2204, 2213, 2214, + 71, 71, 2212, 71, 71, 71, 71, 2210, 2205, 2211, + 2218, 2220, 71, 2216, 2223, 71, 2215, 2221, 2225, 2222, - 2214, 2212, 71, 71, 2223, 71, 2219, 2216, 2224, 71, - 2226, 71, 2227, 71, 2221, 71, 71, 71, 71, 2232, - 2225, 2233, 2228, 2234, 2229, 2230, 2231, 71, 71, 71, - 71, 2236, 2235, 71, 2238, 2239, 71, 2240, 2242, 2237, - 2243, 71, 71, 71, 71, 2241, 2246, 71, 71, 71, - 71, 71, 71, 2248, 2253, 71, 71, 71, 2244, 2245, - 2254, 2249, 71, 2247, 2257, 71, 2250, 2251, 2252, 71, - 2258, 2259, 71, 71, 2256, 71, 2260, 2255, 2262, 2263, - 2261, 2264, 71, 71, 71, 71, 71, 2266, 71, 71, - 71, 71, 2270, 2271, 71, 3054, 71, 2265, 71, 71, + 71, 71, 2217, 71, 71, 71, 2226, 71, 2227, 2219, + 71, 71, 71, 2230, 71, 71, 2224, 71, 71, 3063, + 2229, 2231, 2236, 2232, 2233, 2235, 2234, 2237, 71, 71, + 2228, 71, 71, 71, 2242, 2238, 71, 2241, 2239, 71, + 71, 2240, 71, 2243, 71, 2247, 2249, 71, 71, 71, + 71, 2244, 71, 71, 71, 71, 2260, 71, 2251, 2245, + 2248, 2246, 2252, 2250, 71, 2255, 71, 2256, 2253, 2254, + 71, 2257, 71, 2261, 71, 2258, 2262, 71, 71, 2264, + 2265, 2263, 2259, 2266, 2267, 71, 71, 71, 71, 71, + 71, 2269, 71, 71, 71, 2273, 2274, 71, 71, 71, - 2267, 2273, 2274, 2268, 71, 2276, 71, 2275, 2272, 2269, - 71, 71, 71, 71, 71, 2277, 71, 2280, 2281, 71, - 2278, 2283, 71, 71, 71, 71, 71, 2282, 71, 2287, - 2290, 71, 2279, 2289, 71, 71, 71, 2291, 2286, 71, - 71, 2295, 2284, 2285, 2294, 71, 2288, 71, 2296, 71, - 2299, 2293, 2292, 71, 71, 2297, 71, 2300, 71, 2298, - 71, 2302, 2303, 2304, 71, 2306, 71, 71, 71, 71, - 2308, 71, 71, 71, 71, 71, 2305, 2307, 71, 2312, - 2316, 71, 2301, 2314, 71, 2309, 2310, 71, 2318, 2311, - 2317, 71, 2315, 71, 71, 71, 2319, 71, 71, 71, + 2270, 2268, 71, 2276, 71, 3063, 2271, 71, 2277, 71, + 2278, 2275, 2272, 2279, 71, 71, 71, 71, 2281, 2282, + 2280, 2283, 2284, 71, 71, 71, 71, 71, 71, 2285, + 2286, 71, 2290, 71, 2293, 71, 71, 71, 2292, 71, + 71, 2289, 2294, 71, 2287, 2299, 2288, 71, 2297, 2300, + 2298, 2291, 71, 2295, 71, 2296, 71, 71, 2302, 71, + 71, 2305, 2303, 71, 2307, 71, 2301, 2306, 2309, 71, + 71, 71, 71, 2311, 71, 71, 71, 2308, 71, 71, + 2304, 2310, 71, 2315, 2319, 71, 2321, 2317, 71, 2312, + 2313, 2314, 71, 2318, 2320, 71, 71, 2322, 71, 71, - 2320, 2313, 2322, 2325, 71, 71, 2327, 71, 71, 2330, - 71, 2324, 71, 71, 2326, 2321, 71, 2323, 71, 2333, - 2334, 71, 71, 2329, 71, 2328, 71, 2335, 71, 71, - 71, 2339, 2331, 2338, 2332, 2337, 71, 71, 71, 71, - 71, 3054, 2336, 2343, 2340, 2345, 2346, 71, 71, 2342, - 2341, 2347, 71, 2348, 71, 2349, 71, 71, 71, 2344, - 2350, 71, 2353, 2352, 71, 2354, 71, 71, 71, 71, - 2359, 71, 71, 2361, 71, 2351, 2362, 71, 2355, 2356, - 71, 71, 71, 71, 71, 2358, 71, 2365, 2357, 71, - 71, 2360, 2363, 71, 2364, 2366, 2371, 71, 2368, 2372, + 71, 71, 71, 71, 2330, 2316, 2325, 2328, 71, 71, + 71, 2329, 71, 71, 2323, 2327, 2333, 71, 71, 2326, + 71, 2324, 71, 2334, 71, 2337, 71, 2331, 2332, 2338, + 71, 2335, 71, 71, 71, 2341, 2336, 2339, 2342, 71, + 2340, 2343, 71, 71, 71, 71, 71, 3063, 2344, 2347, + 71, 2349, 2350, 71, 71, 2346, 2345, 2351, 71, 2352, + 71, 2353, 71, 71, 71, 2348, 2354, 71, 2355, 2356, + 71, 2357, 71, 2358, 71, 2359, 71, 2363, 71, 2360, + 71, 2365, 71, 2366, 71, 71, 71, 71, 71, 71, + 71, 71, 2362, 71, 2361, 2369, 2367, 71, 2368, 2364, - 71, 71, 71, 71, 2367, 71, 2369, 71, 2378, 2370, - 71, 71, 71, 71, 71, 2375, 71, 71, 71, 2377, - 2379, 2374, 71, 2387, 2403, 2380, 2373, 2376, 2381, 71, - 2382, 2386, 2385, 71, 2389, 71, 2383, 71, 2388, 2384, - 2390, 71, 71, 2391, 71, 2392, 71, 2393, 71, 71, - 71, 71, 71, 71, 71, 2394, 71, 71, 71, 2395, - 71, 71, 71, 2401, 71, 2407, 2408, 71, 2396, 2398, - 2397, 2410, 71, 2400, 2399, 71, 2402, 2404, 2405, 2406, - 2409, 2411, 71, 71, 2412, 2413, 71, 71, 71, 71, - 2414, 71, 71, 71, 2416, 2422, 71, 2423, 71, 2424, + 71, 2370, 2372, 2375, 71, 71, 71, 2371, 71, 2376, + 2373, 2374, 71, 71, 2382, 71, 71, 71, 71, 2377, + 71, 2379, 71, 71, 2383, 2378, 2381, 71, 2391, 3063, + 2380, 2384, 2385, 71, 71, 71, 2386, 2389, 2392, 2393, + 71, 2390, 2387, 2394, 71, 2388, 71, 2395, 71, 2396, + 71, 2397, 71, 2398, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 2399, 2407, 71, 71, 71, 2405, 71, + 2411, 2412, 71, 2400, 2402, 2401, 71, 71, 2404, 2403, + 2406, 2408, 71, 2409, 2410, 2414, 2415, 71, 71, 2413, + 71, 2416, 2417, 71, 71, 2418, 71, 2420, 71, 71, - 71, 2415, 71, 2417, 71, 71, 71, 2418, 2420, 2419, - 71, 2428, 2421, 71, 71, 2433, 71, 2426, 2425, 2431, - 71, 71, 2432, 2427, 71, 71, 2434, 2435, 71, 71, - 2429, 71, 71, 2430, 2437, 71, 71, 71, 71, 71, - 2436, 2441, 2445, 2439, 2446, 71, 71, 71, 2438, 2449, - 71, 71, 2440, 71, 71, 2442, 2443, 2450, 2444, 71, - 71, 2447, 71, 2452, 71, 2448, 2451, 2453, 71, 2457, - 71, 71, 71, 2454, 2455, 71, 2458, 2461, 71, 2460, - 2459, 71, 2456, 2463, 71, 71, 2464, 71, 71, 2468, - 71, 2462, 71, 2469, 2465, 71, 2471, 71, 71, 71, + 71, 2426, 71, 2427, 71, 2428, 2419, 71, 71, 2421, + 71, 71, 71, 71, 2422, 2424, 2423, 2432, 71, 2425, + 71, 71, 2436, 2430, 71, 2429, 2435, 2437, 71, 2431, + 71, 71, 2438, 2433, 2439, 71, 71, 71, 2434, 71, + 2441, 71, 71, 2440, 71, 71, 2445, 71, 71, 2443, + 2449, 2450, 71, 71, 71, 2442, 2453, 71, 2454, 2444, + 71, 71, 2446, 2447, 71, 2448, 2452, 71, 2451, 2457, + 71, 2456, 71, 71, 2458, 2455, 2462, 71, 71, 2459, + 71, 71, 2466, 71, 71, 2465, 2468, 71, 71, 2464, + 2463, 71, 2460, 2461, 71, 71, 2469, 2470, 2473, 71, - 2467, 71, 71, 2466, 71, 2476, 71, 71, 2478, 71, - 2474, 2472, 2473, 2475, 71, 71, 2481, 2470, 71, 2479, - 2480, 71, 2477, 2482, 71, 71, 71, 71, 71, 2483, - 71, 71, 71, 2488, 2485, 2486, 2489, 2491, 71, 2492, - 71, 2487, 71, 2484, 71, 2490, 71, 2497, 71, 2493, - 2495, 2494, 71, 71, 71, 2499, 71, 2498, 2502, 71, - 71, 2501, 2496, 2500, 2503, 71, 2505, 71, 71, 2507, - 3054, 2506, 71, 2504, 2508, 71, 71, 2509, 2511, 71, - 71, 2510, 71, 2512, 71, 2513, 71, 71, 71, 71, - 2518, 2514, 2519, 71, 2520, 2516, 71, 71, 71, 71, + 71, 2474, 71, 2467, 2476, 71, 71, 2472, 71, 71, + 2471, 71, 2481, 71, 71, 2483, 71, 71, 2479, 2477, + 2480, 2478, 2484, 71, 2475, 71, 71, 71, 2485, 2482, + 71, 2487, 71, 71, 71, 2488, 71, 71, 71, 2486, + 71, 2490, 2491, 2493, 2498, 2494, 2496, 71, 2492, 2489, + 71, 2495, 2497, 71, 71, 2499, 71, 2502, 71, 71, + 71, 2504, 71, 71, 2503, 2507, 71, 2506, 2508, 71, + 71, 3063, 2500, 2505, 2501, 2510, 71, 71, 71, 2512, + 2511, 71, 71, 2509, 2513, 71, 2514, 2515, 2516, 71, + 71, 71, 71, 2517, 71, 2518, 71, 2523, 71, 2522, - 71, 2515, 2522, 2523, 71, 2521, 71, 71, 71, 2517, - 71, 2524, 2525, 2526, 71, 71, 71, 2531, 71, 2528, - 71, 71, 2527, 2529, 2530, 71, 71, 2532, 71, 2533, - 2536, 71, 2540, 71, 71, 71, 2539, 2538, 71, 71, - 2534, 2545, 71, 2544, 2535, 2537, 71, 71, 2547, 2548, - 2542, 2549, 2552, 2541, 71, 71, 71, 71, 2543, 2550, - 71, 71, 71, 71, 2551, 71, 71, 2555, 71, 2558, - 2553, 2546, 2559, 71, 71, 2554, 2560, 71, 2562, 2556, - 71, 2557, 2561, 71, 71, 2563, 2564, 71, 71, 71, - 2568, 71, 71, 2566, 71, 2569, 71, 71, 2571, 2572, + 2519, 71, 2524, 71, 2521, 71, 2525, 2520, 71, 71, + 2526, 71, 71, 71, 2527, 2528, 2530, 2529, 2531, 71, + 71, 71, 71, 71, 2536, 71, 71, 71, 71, 71, + 2534, 2535, 71, 2533, 2537, 2541, 71, 2532, 2545, 71, + 71, 71, 71, 2544, 71, 2538, 71, 2539, 2540, 2543, + 2549, 2542, 2550, 71, 71, 2552, 2553, 2547, 3063, 2554, + 2546, 71, 71, 71, 2548, 71, 2555, 71, 71, 71, + 71, 2556, 71, 2557, 71, 71, 2560, 71, 2558, 2551, + 71, 2563, 71, 2559, 2565, 71, 2566, 71, 2561, 71, + 2562, 2567, 71, 2568, 71, 2564, 2570, 71, 71, 2569, - 71, 2567, 2573, 71, 2565, 71, 71, 2575, 2574, 71, - 2576, 2570, 2578, 71, 71, 2579, 2580, 71, 2582, 71, - 71, 71, 71, 2586, 2581, 71, 2577, 2587, 71, 71, - 71, 71, 2589, 2583, 2588, 71, 2585, 2590, 71, 2584, - 71, 2595, 71, 2598, 71, 71, 2594, 71, 2591, 2597, - 71, 2592, 71, 71, 71, 2593, 2601, 2599, 2600, 71, - 71, 71, 2603, 71, 71, 3054, 2606, 2596, 71, 2610, - 71, 71, 71, 71, 71, 2612, 71, 2604, 2605, 2602, - 71, 2607, 2609, 2613, 2608, 2611, 2617, 2614, 2616, 2620, - 71, 2618, 71, 2615, 71, 2619, 71, 2621, 71, 2622, + 71, 2574, 2571, 2572, 71, 71, 2575, 71, 71, 2577, + 2578, 71, 2573, 2579, 71, 71, 71, 71, 2580, 2584, + 71, 71, 2585, 2582, 2576, 2586, 71, 71, 71, 2581, + 2588, 71, 71, 71, 2592, 2593, 71, 2583, 71, 71, + 71, 2589, 2587, 2594, 71, 71, 2595, 2591, 71, 2601, + 2590, 2596, 71, 71, 2600, 71, 71, 2604, 71, 71, + 2603, 2597, 71, 71, 2598, 2599, 71, 2605, 71, 2607, + 71, 2606, 71, 2609, 71, 71, 71, 2612, 2602, 2616, + 71, 71, 71, 71, 2608, 2610, 2611, 71, 71, 71, + 2615, 2618, 2613, 71, 71, 2614, 2617, 2620, 2623, 2619, - 71, 2623, 71, 2624, 71, 71, 71, 71, 71, 2626, - 2625, 71, 2632, 71, 71, 71, 2629, 2633, 2635, 71, - 71, 2637, 71, 71, 71, 2627, 3054, 2636, 2630, 2638, - 71, 2631, 2628, 2634, 2639, 71, 71, 71, 71, 2640, - 71, 2643, 2644, 71, 2645, 2641, 2642, 2646, 71, 2648, - 71, 71, 71, 71, 2649, 71, 71, 2652, 71, 2651, - 2653, 71, 71, 2647, 2650, 2654, 71, 2655, 71, 71, - 71, 2658, 71, 71, 71, 3054, 2657, 2663, 71, 2661, - 2659, 2656, 71, 71, 71, 2664, 2705, 2666, 71, 2667, - 71, 2668, 2662, 71, 2660, 2665, 71, 2669, 2670, 71, + 2621, 2622, 3063, 2624, 71, 2631, 2625, 2626, 71, 71, + 2627, 71, 2628, 71, 2629, 71, 2630, 71, 71, 71, + 2634, 71, 2632, 71, 2638, 71, 71, 71, 2635, 2639, + 2641, 71, 71, 2643, 71, 71, 2645, 71, 2633, 2642, + 2644, 2636, 71, 2637, 71, 2640, 71, 71, 2650, 71, + 71, 2646, 71, 2647, 2651, 2648, 71, 2654, 71, 71, + 71, 2652, 2655, 71, 2658, 2649, 71, 2657, 71, 2660, + 71, 2653, 2656, 2659, 2661, 71, 71, 71, 71, 71, + 2662, 71, 71, 71, 2670, 71, 71, 2665, 71, 71, + 71, 2666, 2668, 2673, 2674, 2664, 71, 2671, 71, 2675, - 2671, 2673, 71, 2672, 2674, 71, 2675, 71, 71, 71, - 71, 71, 2680, 71, 71, 2679, 2677, 2676, 71, 2681, - 71, 2683, 71, 71, 2688, 2682, 71, 71, 2678, 2684, - 71, 2686, 2690, 71, 2685, 71, 71, 71, 71, 2691, - 71, 2687, 2692, 2693, 71, 2694, 71, 2698, 71, 71, - 71, 71, 2689, 71, 71, 2695, 71, 2701, 71, 71, - 2697, 2696, 2699, 2700, 2706, 2702, 71, 2703, 2708, 71, - 2710, 71, 71, 2704, 2711, 71, 2713, 71, 71, 71, - 71, 71, 2718, 71, 2707, 2709, 2717, 71, 71, 71, - 71, 2722, 71, 2712, 2714, 2715, 2716, 2724, 71, 71, + 71, 2663, 2669, 71, 71, 2676, 2667, 2672, 2677, 71, + 2678, 2680, 71, 2679, 2681, 71, 2682, 71, 71, 71, + 2684, 71, 2687, 2685, 2686, 71, 2688, 2683, 71, 71, + 2689, 2690, 71, 71, 71, 71, 2695, 71, 71, 2693, + 2697, 71, 71, 2699, 71, 71, 71, 2691, 2698, 71, + 2700, 71, 2701, 2694, 2692, 71, 2705, 71, 71, 71, + 71, 71, 2696, 71, 2703, 2702, 71, 2708, 71, 2709, + 71, 2706, 2707, 71, 71, 2704, 2712, 2710, 2713, 2715, + 71, 2717, 71, 2718, 71, 2711, 71, 2720, 71, 71, + 71, 71, 71, 2716, 71, 71, 2714, 2725, 71, 2724, - 71, 71, 71, 2726, 71, 2727, 2723, 2719, 2721, 71, - 71, 2720, 2729, 71, 2730, 71, 2732, 71, 71, 2725, - 2737, 2734, 2731, 2728, 2736, 71, 71, 2735, 71, 71, - 2741, 71, 71, 71, 2743, 2742, 2733, 71, 71, 2746, - 2739, 2747, 71, 71, 2738, 71, 2748, 2749, 71, 2740, - 2744, 71, 71, 71, 71, 2754, 2751, 2745, 71, 2752, - 71, 71, 2757, 71, 71, 71, 2750, 71, 2762, 71, - 71, 2753, 2758, 71, 71, 2755, 2756, 2765, 71, 3054, - 2761, 71, 2759, 2764, 2766, 71, 2767, 2768, 71, 2763, - 2760, 2770, 71, 2769, 2771, 71, 2772, 71, 71, 2774, + 71, 71, 2729, 71, 71, 2721, 2722, 2719, 2723, 2732, + 71, 2726, 71, 71, 2734, 71, 71, 2730, 2727, 2728, + 71, 2735, 71, 2731, 2737, 71, 2738, 71, 2740, 71, + 71, 71, 2733, 71, 2746, 2736, 71, 2745, 71, 3063, + 2743, 2742, 2739, 71, 2749, 71, 71, 71, 2741, 2750, + 2747, 71, 2751, 2744, 71, 2754, 2748, 2755, 71, 2752, + 71, 71, 2757, 2756, 71, 71, 71, 71, 71, 2762, + 2759, 2760, 71, 71, 2753, 71, 2765, 71, 71, 71, + 71, 71, 2758, 2770, 71, 2766, 2761, 71, 71, 2763, + 2764, 2773, 71, 2769, 2774, 71, 2767, 2772, 71, 71, - 71, 71, 71, 2773, 71, 71, 71, 2779, 2780, 71, - 71, 71, 71, 2784, 71, 71, 2785, 71, 71, 3054, - 2775, 2783, 71, 2788, 2776, 2781, 2777, 2778, 2789, 71, - 2782, 2790, 71, 71, 71, 2786, 2787, 2793, 2791, 71, - 71, 71, 71, 71, 2796, 71, 71, 2797, 2792, 2795, - 71, 2794, 71, 71, 71, 2800, 71, 71, 71, 2802, - 2798, 71, 2803, 71, 2801, 71, 2799, 71, 71, 71, - 71, 71, 2819, 71, 2812, 2804, 2813, 2805, 2806, 2807, - 2815, 2808, 71, 2814, 2809, 2810, 71, 2816, 71, 2811, - 2817, 2820, 71, 71, 2822, 71, 71, 2821, 2823, 71, + 2771, 2776, 71, 2775, 2768, 2778, 71, 2777, 2779, 71, + 2780, 71, 71, 2782, 71, 71, 71, 2781, 2783, 71, + 71, 2787, 2788, 71, 71, 71, 71, 2792, 71, 2793, + 71, 71, 71, 71, 2794, 2791, 2830, 2784, 2785, 2789, + 71, 2786, 71, 71, 2790, 2798, 71, 2797, 2799, 71, + 71, 2795, 2796, 2802, 71, 2800, 71, 2801, 71, 71, + 2805, 71, 71, 2806, 2804, 71, 2803, 71, 71, 71, + 71, 71, 2809, 71, 71, 2811, 71, 71, 2812, 71, + 2810, 71, 2807, 71, 71, 2808, 71, 71, 2821, 2822, + 2813, 71, 2817, 2814, 2815, 2816, 2818, 2819, 2824, 71, - 2830, 2818, 2824, 2825, 71, 71, 2826, 2827, 71, 71, - 2828, 2829, 71, 71, 2831, 71, 71, 71, 71, 2837, - 71, 71, 2832, 2836, 71, 2840, 2833, 2854, 2834, 71, - 71, 2839, 71, 71, 71, 71, 2835, 71, 2841, 71, - 2845, 71, 2838, 2844, 2875, 2842, 2846, 71, 2847, 71, - 2843, 71, 2848, 71, 2852, 71, 2849, 71, 71, 2853, - 71, 71, 2850, 2858, 71, 2851, 2855, 2861, 71, 2859, - 2856, 2862, 71, 71, 2864, 71, 2910, 71, 2857, 2863, - 2860, 2865, 71, 71, 2867, 71, 2868, 71, 2866, 2869, - 71, 2870, 71, 2871, 71, 2872, 71, 2873, 71, 2874, + 71, 3063, 2820, 2887, 71, 2825, 2823, 2826, 2828, 71, + 2829, 71, 2827, 2831, 71, 2832, 71, 2833, 2834, 71, + 71, 2835, 2836, 2839, 71, 2837, 2838, 71, 71, 2840, + 71, 71, 71, 71, 71, 2846, 71, 71, 71, 2845, + 71, 71, 2849, 71, 3063, 2841, 2842, 2848, 71, 71, + 2850, 2843, 71, 2844, 71, 2854, 2855, 71, 2851, 2856, + 71, 2853, 2847, 71, 2857, 71, 2852, 2861, 2858, 2863, + 71, 71, 2862, 71, 2859, 71, 71, 2860, 71, 71, + 71, 2870, 71, 2867, 2868, 2871, 2865, 71, 2873, 71, + 71, 71, 71, 2872, 3063, 2864, 2919, 2866, 71, 2869, - 71, 2876, 71, 71, 71, 71, 71, 71, 2881, 71, - 71, 71, 2877, 71, 2885, 71, 2878, 71, 2887, 71, - 71, 2882, 71, 2883, 2894, 2879, 2880, 2884, 71, 2888, - 71, 2889, 2886, 71, 2891, 71, 71, 71, 2893, 71, - 2892, 71, 2896, 71, 71, 71, 2890, 71, 71, 2900, - 2895, 2903, 71, 71, 2901, 2905, 71, 71, 2897, 2898, - 2899, 71, 2902, 2906, 71, 2904, 2907, 71, 71, 71, - 2909, 71, 71, 71, 71, 2918, 2908, 2911, 2915, 71, - 71, 2916, 2912, 2914, 71, 71, 2917, 71, 71, 71, - 71, 71, 2913, 2919, 71, 71, 71, 71, 71, 2925, + 2874, 71, 2893, 2875, 2876, 71, 2877, 71, 2878, 71, + 2879, 71, 2880, 71, 2881, 71, 2882, 71, 2883, 71, + 71, 2885, 71, 71, 71, 71, 71, 2890, 71, 2884, + 71, 71, 2886, 71, 2894, 2896, 71, 71, 71, 71, + 2891, 2898, 71, 2892, 2888, 2889, 2895, 71, 2900, 71, + 2903, 71, 2902, 71, 71, 2897, 71, 71, 71, 2905, + 2901, 71, 71, 71, 71, 2899, 71, 2904, 2909, 2912, + 2906, 71, 2910, 71, 2908, 2907, 2911, 2913, 2914, 71, + 2915, 71, 2916, 71, 71, 71, 71, 2921, 71, 71, + 71, 2925, 71, 2918, 2917, 2924, 71, 2927, 71, 2923, - 71, 2922, 2929, 2920, 2924, 2921, 2926, 2932, 71, 2933, - 2930, 71, 2927, 2923, 71, 2928, 2934, 71, 2931, 71, - 2935, 2936, 71, 2937, 71, 71, 71, 71, 2940, 71, - 2938, 2941, 2942, 71, 2939, 2945, 71, 71, 71, 71, - 71, 71, 71, 2948, 2950, 71, 2953, 71, 2944, 2947, - 2946, 71, 71, 71, 2943, 2951, 2956, 71, 2960, 2949, - 71, 2952, 71, 2957, 71, 2961, 2954, 71, 2958, 71, - 2955, 71, 2959, 71, 71, 2966, 71, 2967, 71, 2965, - 71, 2962, 2963, 71, 71, 71, 71, 71, 71, 2971, - 71, 71, 2964, 2973, 71, 2980, 71, 71, 2970, 71, + 71, 71, 71, 71, 71, 2920, 71, 2926, 71, 2922, + 71, 2928, 71, 2934, 71, 3063, 71, 2931, 71, 2929, + 2930, 2933, 2935, 2938, 2941, 71, 71, 71, 2932, 2936, + 2939, 71, 2937, 71, 2940, 2942, 2943, 71, 71, 2944, + 2945, 71, 2946, 71, 71, 71, 2947, 2949, 71, 71, + 2950, 2948, 71, 2951, 2954, 71, 71, 71, 2952, 71, + 71, 2957, 2959, 71, 2953, 71, 2955, 2956, 2962, 71, + 71, 71, 2965, 71, 2960, 71, 2966, 2958, 71, 71, + 71, 2969, 2970, 71, 2961, 2963, 2967, 71, 71, 2964, + 71, 71, 71, 71, 2971, 71, 2972, 2974, 2968, 2975, - 2975, 2968, 2978, 2969, 2976, 71, 2972, 71, 71, 2974, - 2979, 2984, 71, 2977, 71, 71, 2986, 71, 2987, 2981, - 2985, 71, 71, 71, 71, 2982, 2988, 2983, 2989, 2990, - 2992, 2993, 71, 2991, 71, 71, 71, 2995, 71, 2994, - 71, 71, 71, 71, 2996, 3001, 71, 71, 2998, 71, - 3004, 71, 3005, 71, 2997, 71, 71, 71, 71, 71, - 3003, 2999, 3000, 3008, 3006, 3002, 71, 3007, 71, 3012, - 71, 3013, 3011, 71, 71, 3009, 3010, 71, 3016, 71, - 3018, 71, 3019, 3014, 71, 71, 71, 3023, 71, 3020, - 71, 71, 3021, 3017, 71, 3024, 3025, 3026, 71, 3015, + 71, 2976, 71, 71, 71, 71, 71, 71, 2980, 2973, + 2982, 71, 2977, 2978, 71, 2981, 71, 2979, 71, 71, + 2984, 2987, 71, 2988, 2985, 2983, 2989, 71, 71, 2993, + 71, 71, 2995, 2986, 71, 2996, 2994, 71, 71, 2990, + 2991, 71, 2997, 71, 71, 3001, 2998, 2992, 2999, 3002, + 71, 71, 71, 3004, 71, 71, 71, 3003, 71, 3005, + 71, 71, 3010, 3000, 71, 3007, 71, 3013, 71, 71, + 3014, 71, 71, 71, 71, 3006, 71, 71, 3017, 3008, + 3009, 3015, 3012, 3011, 3016, 71, 3021, 71, 71, 71, + 3020, 71, 3022, 3018, 71, 3019, 71, 3025, 71, 3027, - 71, 71, 71, 71, 71, 3022, 71, 3027, 3028, 3030, - 3029, 3032, 71, 71, 71, 71, 71, 3038, 3034, 3035, - 71, 3031, 3033, 3039, 71, 3036, 71, 71, 3042, 3043, - 71, 71, 3045, 71, 3037, 3046, 71, 71, 3044, 3040, - 71, 71, 71, 71, 3047, 3041, 3048, 3049, 3052, 71, - 3053, 71, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3050, - 3054, 3054, 3051, 43, 43, 43, 43, 43, 43, 43, - 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, - 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, - 59, 64, 64, 64, 64, 64, 64, 64, 74, 74, + 71, 3023, 71, 3028, 71, 3029, 3032, 71, 71, 71, + 3026, 3030, 71, 3031, 3033, 3024, 71, 71, 3034, 3035, + 71, 71, 3041, 71, 3036, 71, 71, 3038, 3037, 71, + 3039, 3040, 71, 71, 3043, 71, 71, 3044, 71, 3047, + 3048, 71, 71, 71, 3051, 3042, 3052, 71, 3063, 71, + 3054, 71, 3045, 71, 3046, 3049, 3053, 3055, 71, 71, + 3056, 3050, 71, 71, 3057, 71, 3063, 3058, 3061, 71, + 3062, 71, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3059, 3063, 3060, 43, 43, 43, 43, 43, + 43, 43, 48, 48, 48, 48, 48, 48, 48, 53, - 3054, 74, 74, 74, 74, 141, 141, 3054, 3054, 3054, - 141, 141, 143, 143, 3054, 3054, 143, 3054, 143, 145, - 3054, 3054, 3054, 3054, 3054, 145, 148, 148, 3054, 3054, - 3054, 148, 148, 150, 3054, 3054, 3054, 3054, 3054, 150, - 152, 152, 3054, 152, 152, 152, 152, 75, 75, 3054, - 75, 75, 75, 75, 13, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054 + 53, 53, 53, 53, 53, 53, 59, 59, 59, 59, + 59, 59, 59, 64, 64, 64, 64, 64, 64, 64, + 74, 74, 3063, 74, 74, 74, 74, 141, 141, 3063, + 3063, 3063, 141, 141, 143, 143, 3063, 3063, 143, 3063, + 143, 145, 3063, 3063, 3063, 3063, 3063, 145, 148, 148, + 3063, 3063, 3063, 148, 148, 150, 3063, 3063, 3063, 3063, + 3063, 150, 152, 152, 3063, 152, 152, 152, 152, 75, + 75, 3063, 75, 75, 75, 75, 13, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063 } ; -static const flex_int16_t yy_chk[5996] = +static const flex_int16_t yy_chk[6018] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2099,13 +2104,13 @@ static const flex_int16_t yy_chk[5996] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3060, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3069, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1005, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 1007, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, @@ -2238,519 +2243,521 @@ static const flex_int16_t yy_chk[5996] = 574, 575, 576, 584, 566, 53, 562, 569, 573, 567, 577, 576, 578, 580, 579, 571, 580, 575, 578, 574, 579, 584, 577, 581, 581, 582, 581, 583, 582, 585, - 586, 588, 583, 587, 594, 590, 586, 588, 587, 589, - 590, 591, 589, 585, 592, 593, 591, 591, 596, 595, - 597, 598, 599, 594, 594, 595, 598, 592, 593, 597, - 600, 600, 601, 602, 603, 604, 602, 596, 605, 601, - 603, 608, 599, 605, 606, 607, 607, 604, 610, 606, - 606, 602, 609, 611, 609, 611, 612, 613, 614, 615, + 586, 588, 583, 587, 48, 590, 586, 588, 587, 589, + 590, 591, 589, 585, 592, 593, 591, 591, 594, 595, + 596, 597, 599, 594, 598, 595, 601, 592, 593, 598, + 597, 600, 600, 601, 604, 603, 608, 594, 594, 596, + 602, 603, 599, 602, 605, 606, 604, 607, 607, 605, + 606, 606, 609, 610, 609, 611, 612, 611, 602, 613, - 616, 618, 617, 619, 620, 618, 608, 610, 617, 621, - 622, 623, 619, 624, 612, 613, 614, 625, 615, 620, - 616, 626, 627, 628, 621, 624, 629, 626, 622, 630, - 623, 632, 625, 631, 633, 628, 627, 631, 634, 635, - 636, 637, 638, 638, 640, 629, 642, 639, 630, 632, - 633, 639, 644, 641, 645, 637, 634, 635, 635, 636, - 642, 643, 646, 640, 641, 647, 643, 652, 644, 648, - 649, 650, 647, 645, 648, 646, 650, 649, 651, 653, - 654, 655, 656, 651, 657, 652, 653, 658, 661, 654, - 659, 656, 658, 659, 660, 655, 657, 662, 660, 663, + 614, 608, 615, 616, 617, 618, 619, 620, 623, 618, + 617, 621, 610, 622, 612, 619, 624, 613, 614, 625, + 628, 615, 620, 616, 626, 627, 621, 623, 624, 629, + 626, 622, 628, 630, 625, 632, 631, 634, 633, 627, + 631, 635, 636, 637, 638, 638, 639, 640, 629, 642, + 639, 641, 630, 632, 633, 634, 644, 637, 645, 635, + 635, 636, 641, 642, 643, 646, 640, 647, 648, 643, + 652, 650, 644, 648, 647, 649, 650, 645, 646, 651, + 653, 654, 649, 655, 651, 656, 657, 653, 652, 659, + 654, 658, 659, 661, 656, 660, 658, 655, 657, 660, - 665, 664, 661, 666, 666, 671, 662, 667, 667, 668, - 668, 669, 672, 673, 663, 664, 667, 675, 672, 674, - 669, 665, 676, 674, 671, 677, 678, 679, 681, 675, - 680, 682, 678, 673, 683, 679, 686, 680, 689, 692, - 48, 695, 694, 677, 693, 695, 681, 676, 692, 699, - 693, 686, 696, 696, 683, 689, 682, 684, 694, 697, - 697, 698, 684, 701, 700, 702, 684, 699, 704, 684, - 773, 702, 698, 704, 705, 706, 684, 684, 700, 684, - 707, 709, 709, 701, 703, 703, 703, 708, 703, 712, - 708, 703, 710, 706, 773, 705, 703, 711, 711, 710, + 662, 663, 665, 664, 666, 666, 669, 661, 671, 662, + 667, 667, 668, 668, 672, 669, 663, 664, 673, 667, + 672, 674, 675, 665, 676, 674, 677, 671, 679, 678, + 680, 682, 681, 683, 675, 678, 679, 680, 673, 686, + 693, 689, 692, 694, 677, 43, 693, 699, 695, 676, + 681, 692, 695, 683, 686, 701, 682, 684, 689, 694, + 696, 696, 684, 697, 697, 699, 684, 698, 700, 684, + 705, 706, 707, 712, 702, 701, 684, 684, 698, 684, + 702, 704, 700, 703, 703, 703, 704, 703, 712, 706, + 703, 705, 718, 708, 718, 703, 708, 707, 709, 709, - 713, 713, 703, 703, 712, 707, 714, 715, 716, 719, - 715, 714, 720, 716, 717, 717, 718, 722, 718, 721, - 723, 719, 724, 721, 725, 725, 726, 729, 727, 731, - 724, 720, 728, 728, 730, 733, 750, 722, 732, 723, - 733, 726, 727, 750, 732, 729, 730, 734, 734, 735, - 738, 731, 737, 739, 735, 735, 738, 737, 740, 739, - 741, 742, 743, 740, 742, 744, 741, 747, 743, 745, - 745, 746, 746, 744, 748, 747, 749, 751, 752, 752, - 753, 749, 754, 756, 758, 755, 759, 765, 761, 753, - 754, 755, 748, 758, 760, 759, 751, 761, 762, 760, + 710, 703, 703, 711, 711, 713, 713, 710, 714, 715, + 716, 719, 715, 714, 720, 716, 717, 717, 721, 722, + 724, 723, 721, 719, 725, 725, 726, 729, 724, 727, + 728, 728, 730, 720, 731, 768, 732, 734, 734, 722, + 723, 726, 732, 727, 730, 729, 733, 735, 768, 737, + 744, 733, 735, 735, 737, 738, 731, 739, 744, 740, + 741, 738, 742, 739, 740, 742, 741, 743, 745, 745, + 746, 746, 747, 743, 748, 750, 749, 751, 752, 752, + 747, 749, 750, 754, 753, 756, 758, 760, 755, 759, + 762, 754, 748, 753, 755, 758, 751, 761, 759, 762, - 763, 762, 756, 764, 766, 763, 767, 769, 769, 768, - 770, 771, 765, 766, 768, 768, 778, 764, 772, 767, - 774, 779, 776, 774, 776, 770, 779, 772, 777, 777, - 771, 774, 780, 785, 781, 782, 783, 778, 786, 784, - 787, 789, 785, 790, 787, 788, 793, 791, 43, 790, - 792, 795, 794, 780, 781, 782, 791, 795, 783, 784, - 789, 786, 792, 788, 796, 793, 794, 797, 798, 798, - 799, 800, 797, 801, 802, 803, 804, 805, 796, 806, - 800, 807, 802, 808, 810, 809, 811, 807, 812, 814, - 799, 809, 811, 801, 812, 803, 805, 808, 804, 806, + 763, 764, 761, 763, 756, 765, 764, 766, 767, 769, + 771, 760, 770, 770, 769, 769, 772, 767, 773, 765, + 774, 779, 777, 775, 777, 771, 775, 773, 778, 778, + 781, 780, 766, 782, 775, 772, 780, 783, 784, 785, + 786, 787, 779, 788, 774, 789, 790, 788, 791, 786, + 793, 781, 792, 782, 791, 794, 795, 783, 800, 785, + 784, 792, 793, 789, 787, 790, 796, 797, 798, 802, + 795, 801, 796, 798, 794, 799, 799, 803, 800, 804, + 801, 797, 805, 806, 808, 803, 807, 809, 810, 802, + 808, 811, 812, 815, 810, 816, 814, 813, 812, 804, - 815, 813, 816, 817, 810, 813, 822, 816, 814, 818, - 818, 819, 815, 820, 821, 823, 820, 819, 824, 822, - 815, 823, 825, 825, 817, 826, 827, 828, 828, 829, - 830, 827, 821, 832, 830, 831, 831, 833, 824, 835, - 834, 837, 838, 826, 829, 834, 840, 841, 843, 843, - 844, 847, 845, 879, 844, 832, 838, 833, 835, 846, - 846, 879, 849, 866, 866, 837, 840, 845, 841, 842, - 850, 848, 842, 852, 842, 848, 847, 849, 842, 854, - 842, 851, 856, 853, 850, 842, 851, 852, 853, 853, - 842, 855, 858, 854, 857, 855, 859, 856, 860, 857, + 814, 809, 806, 813, 805, 817, 807, 816, 818, 822, + 817, 811, 815, 819, 819, 816, 820, 821, 823, 824, + 821, 825, 820, 826, 826, 824, 827, 822, 828, 818, + 830, 823, 831, 828, 829, 829, 831, 832, 832, 833, + 834, 825, 835, 836, 827, 830, 838, 835, 841, 839, + 842, 844, 844, 845, 846, 847, 847, 845, 850, 848, + 834, 833, 836, 839, 14, 851, 867, 867, 841, 846, + 838, 842, 843, 850, 849, 843, 853, 843, 849, 851, + 852, 843, 855, 843, 848, 852, 854, 857, 843, 859, + 853, 854, 854, 843, 856, 860, 855, 861, 856, 858, - 861, 859, 862, 869, 858, 863, 871, 855, 864, 857, - 867, 863, 860, 865, 864, 867, 862, 868, 870, 865, - 873, 861, 874, 868, 871, 869, 875, 874, 878, 876, - 877, 877, 873, 878, 880, 881, 882, 870, 872, 872, - 875, 876, 883, 883, 872, 884, 872, 886, 880, 884, - 888, 892, 872, 886, 881, 882, 887, 872, 872, 887, - 889, 890, 894, 891, 872, 895, 896, 890, 891, 888, - 892, 894, 897, 889, 895, 898, 899, 901, 897, 902, - 900, 903, 896, 905, 898, 900, 904, 906, 907, 908, - 913, 911, 905, 902, 907, 899, 906, 901, 904, 909, + 860, 859, 857, 862, 858, 863, 864, 865, 870, 866, + 856, 861, 864, 865, 858, 866, 868, 869, 871, 863, + 872, 868, 874, 869, 862, 880, 875, 876, 878, 878, + 870, 875, 877, 880, 874, 881, 882, 871, 872, 873, + 873, 876, 883, 879, 877, 873, 13, 873, 879, 881, + 884, 884, 885, 873, 887, 882, 885, 889, 873, 873, + 887, 883, 890, 888, 891, 873, 888, 892, 893, 895, + 891, 896, 892, 897, 900, 890, 889, 898, 895, 899, + 896, 901, 902, 898, 903, 904, 901, 893, 899, 897, + 906, 905, 907, 900, 908, 909, 915, 912, 903, 906, - 914, 903, 915, 916, 913, 909, 908, 911, 917, 918, - 919, 920, 14, 923, 924, 919, 920, 916, 923, 926, - 914, 915, 927, 924, 918, 926, 917, 925, 925, 929, - 932, 930, 933, 932, 934, 927, 930, 930, 931, 931, - 935, 938, 931, 936, 937, 929, 933, 938, 939, 940, - 941, 946, 942, 943, 934, 940, 936, 942, 935, 937, - 935, 945, 949, 955, 945, 941, 947, 943, 939, 948, - 950, 947, 946, 952, 948, 950, 951, 954, 949, 955, - 956, 951, 957, 954, 959, 952, 956, 960, 957, 958, - 958, 961, 963, 959, 961, 962, 962, 964, 965, 966, + 908, 907, 902, 905, 910, 904, 914, 916, 917, 918, + 910, 927, 909, 912, 919, 0, 915, 927, 920, 921, + 914, 928, 917, 920, 921, 924, 916, 918, 925, 919, + 924, 926, 926, 930, 928, 931, 934, 925, 932, 932, + 931, 931, 932, 933, 935, 936, 933, 937, 939, 930, + 934, 940, 941, 938, 942, 943, 948, 940, 0, 945, + 942, 936, 944, 939, 935, 937, 938, 944, 947, 949, + 943, 947, 941, 945, 949, 950, 951, 948, 952, 953, + 950, 954, 956, 952, 953, 957, 960, 960, 956, 958, + 959, 961, 951, 954, 962, 958, 959, 964, 964, 963, - 967, 968, 966, 969, 975, 960, 970, 968, 976, 969, - 963, 970, 971, 967, 972, 973, 964, 971, 965, 972, - 977, 973, 975, 980, 978, 981, 977, 982, 976, 978, - 979, 979, 980, 983, 981, 984, 983, 985, 984, 986, - 987, 988, 992, 989, 990, 982, 991, 992, 985, 989, - 990, 994, 987, 993, 993, 995, 996, 986, 997, 998, - 988, 991, 997, 999, 1000, 1001, 1003, 1006, 996, 995, - 994, 1007, 999, 1004, 1004, 1008, 1012, 998, 13, 1009, - 1010, 1006, 1013, 1000, 1009, 1003, 1007, 1008, 1013, 1010, - 1001, 1011, 1011, 1014, 1018, 1015, 1012, 1017, 1019, 1014, + 961, 957, 963, 965, 966, 967, 968, 969, 970, 968, + 971, 977, 962, 972, 970, 978, 971, 973, 972, 974, + 969, 965, 973, 966, 974, 967, 975, 979, 984, 977, + 982, 980, 975, 979, 983, 978, 980, 981, 981, 982, + 987, 985, 986, 983, 985, 986, 984, 988, 989, 990, + 991, 987, 992, 996, 993, 998, 991, 994, 992, 997, + 989, 1000, 994, 995, 995, 988, 999, 998, 990, 993, + 999, 1001, 996, 997, 1002, 1003, 1005, 1006, 1006, 1000, + 1001, 1011, 1008, 1009, 1014, 1010, 1011, 1013, 1013, 1017, + 1012, 1029, 1029, 1002, 1017, 1005, 1008, 1010, 1009, 1012, - 1015, 1016, 1017, 1016, 1020, 1021, 1022, 1023, 1018, 1020, - 1025, 1024, 1019, 1028, 1023, 1027, 1027, 1029, 1030, 1032, - 1021, 0, 1031, 1035, 1035, 1022, 1024, 1028, 1031, 1025, - 1039, 1033, 1036, 1030, 1041, 1029, 1033, 1036, 1042, 1032, - 1037, 1037, 1038, 1040, 1039, 1033, 1040, 1033, 1043, 1038, - 1033, 1045, 1047, 1041, 1044, 1046, 1042, 1043, 1048, 1044, - 1046, 1050, 1050, 1047, 1051, 1053, 1052, 1054, 1057, 1051, - 1045, 1052, 1054, 1056, 1055, 1058, 1059, 1048, 1055, 1060, - 1062, 1061, 1056, 1057, 1064, 1053, 1063, 1062, 1065, 1066, - 1058, 1060, 1071, 1067, 1069, 1059, 1061, 1068, 1063, 1067, + 1003, 1015, 1016, 1018, 1014, 1018, 1019, 1015, 1016, 1020, + 1021, 1019, 1022, 1023, 1024, 1025, 1026, 1022, 1027, 0, + 1030, 1031, 1025, 1020, 1021, 1032, 1033, 1034, 1023, 1040, + 1035, 1026, 1033, 1024, 1030, 1035, 1040, 1027, 1038, 1031, + 1032, 1037, 1037, 1038, 1035, 1041, 1035, 1034, 1043, 1035, + 1039, 1039, 1042, 1044, 1045, 1042, 1046, 1047, 1049, 1041, + 1048, 1046, 1050, 1045, 1055, 1048, 1142, 1043, 1142, 1049, + 1053, 1044, 1052, 1052, 1054, 1053, 1047, 1056, 1059, 1054, + 1058, 1050, 1056, 1057, 1055, 1060, 1061, 1057, 1063, 1058, + 1062, 1064, 1065, 1059, 1066, 1067, 1068, 1070, 1064, 1071, - 1070, 1071, 1073, 1064, 1074, 1075, 1076, 1066, 1073, 1065, - 1077, 1078, 1068, 1075, 1069, 1077, 1079, 1080, 1074, 1081, - 1070, 1079, 1079, 1078, 1082, 1086, 1076, 1083, 1083, 1085, - 1088, 1088, 0, 1081, 1086, 1087, 1080, 1082, 1084, 1089, - 1090, 1087, 1085, 1084, 1089, 1092, 1084, 1084, 1091, 1090, - 1092, 1084, 1095, 1093, 1091, 1094, 1094, 1084, 1093, 1096, - 1096, 1084, 1097, 1098, 1099, 1097, 1100, 1097, 1101, 1102, - 1103, 1104, 1105, 1095, 1102, 1100, 1107, 1142, 1105, 1106, - 1142, 1107, 1099, 1098, 1103, 1106, 1108, 1109, 1101, 1104, - 1108, 1110, 1110, 1112, 1111, 1111, 1109, 1111, 1114, 1115, + 1060, 1069, 1062, 1063, 1065, 1061, 1072, 1069, 1073, 1075, + 1076, 1078, 1070, 1066, 1068, 1075, 1067, 1073, 1079, 1071, + 1077, 1080, 1082, 1079, 1076, 1083, 1072, 1084, 1077, 1081, + 1087, 1078, 1089, 1080, 1081, 1081, 1085, 1085, 1089, 1083, + 1084, 1082, 1086, 1087, 1088, 1090, 1090, 1086, 1092, 1091, + 1086, 1086, 1093, 1088, 1091, 1086, 1097, 1092, 1093, 1094, + 1100, 1086, 1095, 1101, 1094, 1086, 1102, 1095, 1096, 1096, + 1098, 1098, 1103, 1099, 1104, 1102, 1099, 1097, 1099, 1104, + 1100, 1101, 1105, 1106, 1107, 1108, 1111, 1161, 1109, 1161, + 1107, 1108, 1103, 1109, 1110, 1111, 1105, 1122, 1110, 1118, - 1116, 1109, 1114, 1109, 1112, 1109, 1117, 1109, 1119, 1122, - 1124, 1118, 1123, 1120, 1115, 1117, 1118, 1118, 1116, 1120, - 1121, 1123, 1125, 1122, 1126, 1121, 1127, 1128, 1128, 1124, - 1119, 1129, 1127, 1130, 1132, 1131, 1133, 1134, 1126, 1129, - 1131, 1125, 1135, 1138, 1136, 1133, 1144, 1130, 1132, 1136, - 1137, 1137, 1139, 1139, 1140, 1134, 1140, 1143, 1138, 1145, - 1146, 1146, 1143, 1147, 1151, 1144, 1152, 1135, 1145, 1148, - 1148, 1149, 1149, 1150, 1153, 1153, 1154, 1155, 1150, 1156, - 1155, 1157, 1158, 1147, 1160, 1151, 1157, 1152, 1159, 1162, - 1159, 1158, 1162, 1163, 0, 1164, 1154, 1166, 1165, 1156, + 1111, 1106, 1111, 1114, 1111, 1117, 1111, 1112, 1112, 1113, + 1113, 1116, 1113, 1119, 1114, 1116, 1121, 1118, 1120, 1122, + 1117, 1123, 1119, 1120, 1120, 1121, 1123, 1124, 1125, 1126, + 1127, 1128, 1129, 1130, 1130, 1131, 1132, 1125, 1129, 1133, + 1134, 1124, 1135, 1131, 1133, 1128, 1136, 1137, 1126, 1127, + 1132, 1135, 1138, 1140, 1134, 1139, 1139, 1138, 1141, 1141, + 1144, 1145, 1146, 1144, 1136, 1147, 1145, 1149, 1140, 1148, + 1148, 1153, 1137, 1154, 1147, 1150, 1150, 1151, 1151, 1152, + 1156, 1146, 1155, 1155, 1152, 1157, 1158, 1149, 1157, 1160, + 1159, 1162, 1153, 1164, 1154, 1159, 1164, 1165, 1160, 1166, - 1164, 1167, 1160, 1165, 1168, 1166, 1167, 1170, 1163, 1168, - 1169, 1169, 1170, 1171, 1172, 1173, 1174, 1176, 1177, 1179, - 1172, 1178, 1173, 1176, 1177, 1179, 1178, 1180, 1181, 1174, - 1182, 1171, 1183, 1183, 1184, 1186, 1180, 1187, 1188, 1189, - 1190, 1182, 1192, 1193, 1188, 1189, 1190, 1181, 1192, 1194, - 1195, 1196, 1197, 1199, 1184, 1186, 1200, 1193, 1198, 1198, - 1187, 1201, 1195, 1193, 1204, 1196, 1202, 1203, 1203, 1194, - 1197, 1202, 1205, 1199, 1207, 0, 1209, 1205, 1208, 1201, - 1210, 1200, 1211, 1208, 1208, 1212, 1213, 1204, 1214, 1210, - 1211, 1217, 1215, 1207, 1209, 1223, 1216, 1215, 1216, 1212, + 1156, 1173, 1167, 1168, 1166, 1169, 1158, 1167, 1170, 1162, + 1169, 1168, 1165, 1170, 1171, 1171, 1172, 1174, 1175, 1173, + 1176, 1172, 1178, 1174, 1179, 1175, 1180, 1182, 1178, 1181, + 1179, 1180, 1183, 1176, 1184, 1181, 1182, 1185, 1185, 1186, + 1188, 1189, 1190, 1191, 1192, 1184, 1194, 1195, 1190, 1191, + 1192, 1183, 1194, 1196, 1197, 1198, 1199, 1200, 1200, 1186, + 1188, 1195, 1201, 1202, 1189, 1203, 1197, 1195, 1206, 1198, + 1204, 1205, 1205, 1196, 1199, 1204, 1207, 1209, 1212, 1210, + 1211, 1207, 1201, 1203, 1210, 1210, 1213, 1212, 1202, 1214, + 1215, 1206, 1216, 1218, 1213, 1218, 1209, 1219, 1211, 1226, - 1215, 1213, 1219, 1214, 1221, 1217, 1214, 1220, 1219, 1224, - 1225, 1220, 1222, 1227, 1223, 1221, 1226, 1222, 1222, 1228, - 1229, 1226, 1231, 1232, 1228, 1233, 1234, 1234, 1225, 1235, - 1236, 1227, 1237, 1235, 1239, 1224, 1231, 1240, 1238, 1241, - 1229, 1232, 1242, 1233, 1238, 1243, 1239, 1244, 1236, 1245, - 1247, 1237, 1246, 1241, 1245, 1247, 1240, 1242, 1248, 1246, - 1243, 1249, 1250, 1250, 1251, 1252, 1244, 1253, 1254, 1255, - 1249, 1252, 1256, 1254, 1263, 1255, 1248, 1264, 1256, 1251, - 1257, 1257, 1258, 1258, 1260, 1260, 1261, 1262, 1253, 1265, - 1261, 1264, 1263, 1266, 1267, 1267, 1262, 1268, 1269, 1271, + 1222, 1217, 1221, 1214, 1222, 1215, 1217, 1216, 1221, 1217, + 1216, 1219, 1223, 1224, 1225, 1228, 1227, 1229, 1224, 1224, + 1228, 1230, 1231, 1223, 1233, 1226, 1230, 1234, 1235, 1236, + 1236, 1238, 1237, 1225, 1227, 1229, 1237, 1239, 1233, 1241, + 1242, 1240, 1231, 1243, 1250, 1234, 1235, 1240, 1244, 1238, + 1245, 1241, 1246, 1247, 1248, 1249, 1239, 1243, 1247, 1242, + 1249, 1248, 1250, 1244, 1251, 1245, 1252, 1252, 1253, 1254, + 1255, 1246, 1256, 1251, 1257, 1254, 1258, 1256, 1259, 1259, + 1257, 1264, 1258, 1253, 1260, 1260, 1262, 1262, 1263, 1265, + 1264, 1255, 1263, 1268, 1266, 1267, 1269, 1269, 1270, 1272, - 1266, 1272, 1270, 1273, 1265, 1274, 1269, 1270, 1273, 1273, - 1274, 1274, 1275, 1271, 1276, 1276, 1277, 1268, 1278, 1279, - 1272, 1280, 1281, 1282, 1283, 1284, 1280, 1286, 1279, 1285, - 1287, 1284, 1275, 1288, 1285, 1277, 1287, 1278, 1289, 1290, - 1291, 1281, 1283, 1282, 1289, 1290, 1292, 1293, 1294, 1295, - 1296, 0, 1288, 1286, 1297, 1298, 1298, 1299, 1300, 1291, - 1299, 1301, 1301, 1295, 1304, 1292, 1293, 1294, 1304, 1297, - 1300, 1296, 1302, 1302, 1303, 1305, 1306, 1307, 1308, 1303, - 1308, 1310, 1311, 1312, 1308, 1306, 1310, 1313, 1305, 1314, - 1307, 1315, 1315, 1318, 1316, 1317, 1319, 1308, 1312, 1316, + 1268, 1271, 1273, 1274, 1272, 1277, 1275, 1265, 1266, 1271, + 1267, 1275, 1275, 1279, 1276, 1280, 1273, 1281, 1270, 1276, + 1276, 1283, 1274, 1278, 1278, 1277, 1281, 1284, 1282, 1286, + 1285, 1287, 1279, 1282, 1280, 1286, 1287, 1288, 1289, 1290, + 1283, 1293, 1294, 1291, 1289, 1292, 1295, 1284, 1285, 1291, + 1296, 1292, 1297, 1298, 0, 1299, 1300, 1300, 1290, 1301, + 1293, 1294, 1301, 1288, 1302, 1295, 1297, 1303, 1303, 1296, + 1299, 1304, 1304, 1305, 1298, 1306, 1302, 1307, 1305, 1306, + 1308, 1309, 1310, 1314, 1310, 1312, 1313, 1315, 1310, 1308, + 1307, 1313, 1316, 1319, 1309, 1317, 1317, 1318, 1314, 1319, - 1321, 1317, 1311, 1323, 1321, 1314, 1320, 1313, 1318, 1319, - 1322, 1320, 1324, 1325, 1322, 1326, 1327, 1327, 1329, 1331, - 1332, 1326, 1334, 1323, 1335, 1332, 1333, 1333, 1334, 1341, - 1324, 1337, 1337, 1325, 1339, 1342, 1329, 1339, 1340, 1340, - 1331, 1345, 1348, 1344, 1335, 1341, 1344, 1346, 1347, 1347, - 1349, 1342, 1352, 1350, 1351, 1354, 1346, 1348, 1356, 1351, - 1355, 1345, 1353, 1353, 1357, 1357, 1352, 1358, 1359, 1360, - 1361, 1349, 1350, 1354, 1360, 1355, 1362, 1362, 1363, 1364, - 1366, 1358, 1363, 1356, 1367, 1361, 1359, 1365, 1365, 1368, - 1369, 1370, 1373, 1368, 1374, 1367, 1370, 1372, 1372, 1364, + 1320, 1310, 1318, 1312, 1321, 1322, 1325, 1315, 1316, 1323, + 1322, 1326, 1324, 1323, 1327, 1320, 1324, 1321, 1328, 1329, + 1329, 1331, 1333, 1334, 1328, 1337, 1325, 1336, 1334, 1326, + 1335, 1335, 1343, 1336, 1327, 1339, 1339, 1341, 1344, 1331, + 1341, 1342, 1342, 1333, 1346, 1337, 1347, 1346, 1343, 1348, + 1349, 1349, 1350, 1351, 1344, 1353, 1352, 1354, 1348, 1356, + 1353, 1355, 1355, 1357, 1358, 1360, 1347, 1350, 1359, 1359, + 1361, 1354, 1363, 1366, 1351, 1352, 1362, 1356, 1357, 1360, + 1365, 1362, 1364, 1364, 1365, 1367, 1367, 1363, 1361, 1358, + 1368, 1369, 1370, 1366, 1371, 1372, 1370, 1374, 1374, 1375, - 1375, 1376, 1366, 1377, 1378, 1378, 1379, 1380, 1374, 1369, - 1373, 1379, 1381, 1382, 1384, 1376, 1383, 1388, 0, 1375, - 1375, 1383, 1382, 1385, 1386, 1385, 1391, 1380, 1377, 1386, - 1387, 1393, 1381, 1389, 1384, 1397, 1387, 1388, 1394, 1389, - 1391, 1392, 1392, 1396, 1394, 1398, 1398, 1400, 1396, 1401, - 1393, 1399, 1399, 1402, 1403, 1404, 1404, 1403, 1405, 1397, - 1406, 1400, 1414, 1407, 0, 1408, 1407, 1401, 1402, 1407, - 1405, 1408, 1409, 1410, 1412, 1415, 1410, 1409, 1415, 1413, - 1406, 1407, 1416, 1412, 1413, 1417, 1422, 1414, 1416, 1423, - 1417, 1420, 1410, 1418, 1418, 1419, 1419, 1420, 1421, 1422, + 1372, 1376, 1369, 1377, 1378, 1379, 1380, 1380, 1382, 1381, + 1384, 1383, 1368, 1371, 1381, 1376, 1385, 1375, 1378, 1384, + 1386, 1385, 1377, 1377, 1387, 1390, 1387, 1388, 1382, 1389, + 1379, 1383, 1388, 1391, 1393, 1389, 1394, 1394, 1395, 1391, + 1386, 1396, 1399, 1403, 1398, 1390, 1402, 1396, 1393, 1398, + 1400, 1400, 1401, 1401, 1404, 1405, 1407, 1395, 1405, 1408, + 1402, 1403, 1406, 1406, 1409, 1410, 1399, 1409, 1407, 1404, + 1409, 1410, 1411, 1412, 1414, 1415, 1412, 1411, 1416, 1408, + 1415, 1417, 1409, 1414, 1417, 1418, 1420, 1420, 1419, 1421, + 1421, 1418, 1412, 1419, 1422, 1424, 1423, 1425, 1426, 1427, - 1424, 1425, 1426, 1421, 1427, 1426, 1428, 1423, 1429, 1430, - 1427, 1431, 1428, 1429, 1435, 1430, 1436, 1432, 1437, 1424, - 1434, 1425, 1432, 1433, 1433, 1434, 1438, 1439, 1443, 1442, - 1440, 1441, 1435, 1444, 1431, 1442, 1436, 1445, 1437, 1446, - 1438, 1439, 1440, 1449, 1441, 1448, 1448, 1450, 1443, 1451, - 1451, 1445, 1450, 1444, 1452, 1454, 1453, 1455, 1456, 1457, - 1446, 1458, 1460, 1449, 1459, 1462, 1464, 1456, 1458, 1452, - 1453, 1466, 1466, 1459, 1457, 1455, 1459, 1468, 1460, 1454, - 1462, 1465, 1467, 1467, 1465, 1462, 1469, 1470, 1472, 1468, - 1470, 1464, 1471, 1471, 1473, 1474, 1476, 1475, 1477, 1478, + 1422, 1423, 1428, 1416, 1429, 1428, 1430, 1432, 1424, 1431, + 1429, 1433, 1430, 1432, 1431, 1425, 1434, 1426, 1437, 1427, + 1436, 1434, 1435, 1435, 1438, 1436, 1439, 1440, 1441, 1444, + 1445, 1442, 1443, 1446, 1433, 1444, 1437, 1447, 1448, 1450, + 1450, 1440, 1441, 1442, 1438, 1443, 1439, 1451, 1454, 1452, + 1445, 1447, 1455, 1446, 1452, 1453, 1453, 1456, 1457, 1448, + 1458, 1460, 1459, 1454, 1462, 1466, 1455, 1451, 1460, 1458, + 1461, 1464, 1467, 1468, 1468, 1467, 1457, 1459, 1471, 1461, + 1462, 1456, 1461, 1469, 1469, 1470, 1464, 1473, 1473, 1472, + 1466, 1464, 1472, 1474, 1475, 1476, 1471, 1470, 1477, 1478, - 1474, 1472, 1475, 1479, 1469, 1482, 1484, 1480, 1478, 1481, - 1485, 1482, 1486, 1473, 1477, 1476, 1480, 1487, 1481, 1480, - 1483, 1483, 1479, 1485, 1488, 1489, 1484, 1492, 1493, 1495, - 1486, 1487, 1494, 1494, 1496, 1499, 1497, 1489, 1498, 1498, - 1488, 1497, 1500, 1496, 1499, 1495, 1493, 1499, 1501, 1502, - 1504, 1503, 1492, 1498, 1508, 1504, 1504, 1506, 1507, 1509, - 1500, 1510, 1511, 0, 1509, 1512, 1512, 1510, 1501, 1503, - 1502, 1506, 1513, 1507, 1514, 1515, 1508, 1516, 1513, 1514, - 1511, 1515, 1518, 1516, 1519, 1520, 1521, 1522, 1523, 1525, - 1522, 1520, 1527, 1528, 1523, 1529, 1522, 1525, 1519, 1521, + 1476, 1479, 1480, 1477, 1481, 1483, 1474, 1482, 1486, 1484, + 1489, 1480, 1487, 1475, 1483, 1484, 1482, 1479, 1478, 1482, + 1485, 1485, 1488, 1481, 1489, 1487, 1490, 1491, 1486, 1494, + 1495, 1496, 1496, 1497, 1498, 1501, 1499, 1500, 1500, 1491, + 1488, 1499, 1490, 1498, 1501, 1502, 1503, 1501, 1495, 1497, + 1502, 1504, 1500, 1505, 1494, 1506, 1508, 1510, 1509, 1512, + 1506, 1506, 1511, 1513, 1503, 1512, 1520, 1511, 1514, 1514, + 1508, 1505, 1504, 1509, 1515, 1523, 1521, 1516, 1517, 1510, + 1515, 1513, 1516, 1518, 1517, 1522, 1520, 1525, 1523, 1518, + 1521, 1522, 1524, 1525, 1527, 1524, 1529, 1530, 1531, 1532, - 1530, 1531, 1518, 1529, 1532, 1533, 1534, 1535, 1535, 1530, - 1536, 1527, 1528, 1538, 1531, 1537, 1536, 1532, 1539, 1533, - 1534, 1537, 1540, 1541, 1542, 1543, 1538, 1544, 1545, 1535, - 1546, 1543, 1548, 1548, 1549, 1550, 1551, 1542, 1539, 1550, - 1540, 1551, 1541, 1554, 1545, 1552, 1553, 1555, 1546, 1544, - 1552, 1553, 1554, 1557, 1549, 1558, 1558, 1559, 1561, 1560, - 1562, 1562, 1564, 1565, 1563, 1567, 1568, 1566, 1557, 1564, - 1555, 1560, 1571, 1570, 1569, 1565, 1559, 1561, 1563, 1566, - 1569, 1572, 1573, 1573, 1567, 1570, 1568, 1572, 1574, 1577, - 1571, 1574, 1575, 1575, 1577, 1578, 1579, 1580, 1580, 1581, + 1533, 1524, 1527, 1541, 1534, 1535, 1531, 1536, 1532, 1537, + 1537, 1540, 1538, 1533, 1539, 1529, 1530, 1534, 1538, 1535, + 1539, 1536, 1542, 1541, 1540, 1543, 1544, 1545, 1546, 1547, + 1548, 1537, 1551, 1545, 1550, 1550, 1557, 1552, 1553, 1544, + 1542, 1552, 1554, 1553, 1543, 1547, 1555, 1554, 1548, 1556, + 1546, 1555, 1551, 1559, 1560, 1560, 1561, 1562, 1556, 1557, + 1563, 1564, 1564, 1565, 1566, 1569, 1567, 1570, 1559, 1562, + 1568, 1566, 1573, 1572, 1571, 1561, 1579, 1565, 1567, 1563, + 1571, 1579, 1568, 1574, 1569, 1572, 1587, 1570, 1580, 1574, + 1573, 1575, 1575, 1576, 1577, 1577, 1576, 1580, 1581, 1582, - 1584, 1582, 1579, 1582, 1578, 1583, 1585, 1586, 1583, 1587, - 1588, 1581, 1589, 1592, 1590, 1588, 1591, 1594, 1592, 1597, - 1584, 1589, 1600, 1593, 1595, 1586, 1590, 1587, 1585, 1595, - 1596, 1591, 1593, 1601, 1597, 1596, 1595, 1594, 1598, 1598, - 1599, 1602, 1603, 1600, 1605, 1593, 1599, 1604, 1609, 1604, - 1606, 1606, 1601, 1607, 1607, 1608, 1608, 1602, 1605, 1612, - 1605, 1613, 1603, 1610, 1610, 1611, 1611, 1615, 1609, 1614, - 1614, 1615, 1616, 1617, 1620, 1619, 1617, 1621, 1616, 1622, - 1612, 1619, 1613, 1621, 1623, 1624, 1624, 1623, 1625, 1625, - 1626, 1628, 1620, 1627, 1629, 1630, 1626, 1631, 1635, 1634, + 1582, 1583, 1586, 1584, 1581, 1584, 1585, 1588, 1587, 1585, + 1589, 1590, 1591, 1583, 1592, 1593, 1590, 1596, 1594, 1597, + 1595, 1591, 1586, 1594, 1597, 1588, 1592, 1598, 1589, 1595, + 1593, 1597, 1598, 1599, 1600, 1600, 1602, 1596, 1601, 1603, + 1604, 1605, 1595, 1606, 1601, 1606, 1607, 1611, 1599, 1608, + 1608, 1609, 1609, 1610, 1610, 1614, 1604, 1602, 1603, 1615, + 1607, 1605, 1607, 1612, 1612, 1613, 1613, 1611, 1616, 1616, + 1617, 1618, 1619, 1621, 1617, 1619, 1614, 1618, 1622, 1621, + 1615, 1623, 1624, 1625, 1626, 1626, 1625, 1623, 1627, 1627, + 1629, 1628, 1630, 1631, 1632, 1633, 1622, 1628, 1642, 1637, - 1635, 1630, 1641, 1633, 1622, 1627, 1627, 1627, 1633, 1633, - 1636, 1628, 1627, 1634, 1629, 1637, 1638, 1631, 1639, 1640, - 1643, 1636, 1638, 1641, 1642, 1642, 1646, 1639, 1644, 1644, - 1637, 1645, 1647, 1647, 1648, 1648, 1649, 1652, 1652, 1640, - 1653, 1654, 1657, 1656, 1659, 1659, 1643, 1658, 1646, 1660, - 1654, 1645, 1656, 1658, 1661, 1662, 1649, 1663, 1664, 1665, - 1665, 1666, 1662, 1657, 1667, 1653, 1663, 1669, 1670, 1661, - 1660, 1671, 1669, 1673, 1670, 1672, 1676, 1674, 1678, 1673, - 1667, 1676, 1672, 1674, 1664, 1675, 1675, 1666, 1677, 1679, - 1680, 1671, 1681, 1682, 1683, 1681, 1687, 1677, 1678, 1684, + 1632, 1637, 1629, 1629, 1629, 1635, 1636, 1624, 1638, 1629, + 1635, 1635, 1630, 1631, 1639, 1633, 1640, 1641, 1642, 1638, + 1636, 1643, 1640, 1644, 1644, 1645, 1641, 1646, 1646, 1639, + 1647, 1648, 1649, 1649, 1650, 1650, 1651, 1654, 1654, 1655, + 1656, 1659, 1643, 1658, 1661, 1661, 1662, 1666, 1660, 1656, + 1647, 1645, 1658, 1648, 1660, 1663, 1651, 1665, 1664, 1667, + 1667, 1668, 1659, 1669, 1655, 1664, 1665, 1662, 1673, 1671, + 1663, 1672, 1675, 1666, 1671, 1674, 1678, 1672, 1675, 1669, + 1676, 1678, 1674, 1677, 1677, 1679, 1676, 1668, 1673, 1680, + 1682, 1681, 1683, 1684, 1679, 1683, 1685, 1686, 1686, 1687, - 1684, 1685, 1680, 1686, 1688, 1689, 1691, 1685, 1679, 1689, - 1692, 1682, 1693, 1694, 1694, 1686, 1687, 1693, 1695, 1688, - 1683, 1696, 1698, 1699, 1700, 1689, 1691, 1699, 1704, 1701, - 1700, 1703, 1692, 1702, 1702, 1703, 1696, 1695, 1701, 1704, - 1706, 1698, 1705, 1705, 1704, 1707, 1708, 1709, 1710, 1711, - 1712, 1713, 1709, 1714, 1715, 1715, 1712, 1721, 1714, 1707, - 1717, 1706, 1716, 1716, 1717, 1708, 1713, 1719, 1710, 1711, - 1720, 1722, 1722, 1723, 1723, 1727, 1719, 1721, 1724, 1725, - 1735, 1720, 1726, 1724, 1724, 1725, 1720, 1728, 1726, 1730, - 1729, 1732, 1728, 1733, 1734, 1730, 1737, 1733, 1736, 1739, + 1688, 1689, 1682, 1690, 1691, 1687, 1688, 1693, 1691, 1680, + 1681, 1684, 1694, 1697, 1695, 1696, 1696, 1700, 1690, 1695, + 1698, 1689, 1685, 1711, 1691, 1701, 1708, 1693, 1711, 1701, + 1703, 1702, 1697, 1706, 1694, 1698, 1700, 1702, 1705, 1703, + 1704, 1704, 1705, 1709, 1706, 1707, 1707, 1708, 1710, 1706, + 1712, 1713, 1714, 1715, 1716, 1717, 1717, 1709, 1714, 1716, + 1718, 1718, 1719, 1721, 1722, 1723, 1719, 1710, 1715, 1729, + 1712, 1713, 1721, 1724, 1724, 1722, 1725, 1725, 1726, 0, + 1722, 1727, 1728, 1726, 1726, 1723, 1730, 1727, 1728, 1731, + 1732, 1730, 1734, 1735, 1736, 1729, 1732, 1735, 1737, 1738, - 1741, 1727, 1729, 1732, 1736, 1735, 1734, 1738, 1742, 1743, - 1749, 1739, 1741, 1738, 1743, 1804, 1745, 1804, 1737, 1745, - 1746, 1746, 1747, 1747, 1748, 1748, 1750, 1742, 1751, 1753, - 1749, 1752, 1750, 1754, 1751, 1753, 1752, 1758, 1756, 1759, - 1758, 1762, 1754, 1756, 1760, 1760, 1763, 1764, 1765, 1765, - 1766, 1759, 1764, 1762, 1770, 1767, 1768, 1771, 1763, 1766, - 1767, 1768, 1769, 1769, 1772, 1773, 1771, 1774, 1775, 1776, - 1777, 1774, 1778, 1775, 1770, 1776, 1779, 1780, 1782, 1782, - 1783, 1778, 1772, 1784, 1773, 1785, 1785, 1786, 1777, 1787, - 1782, 1780, 1784, 1788, 1779, 1789, 1786, 1790, 1783, 1796, + 1739, 1731, 1740, 1741, 1734, 1738, 1736, 1743, 1740, 1744, + 1747, 1745, 1751, 1747, 0, 1741, 1745, 1748, 1748, 1743, + 1749, 1749, 1739, 1737, 1750, 1750, 1754, 1752, 1744, 1753, + 1755, 1754, 1751, 1752, 1756, 1753, 1755, 1758, 1760, 1761, + 1764, 1760, 1758, 1756, 1762, 1762, 1765, 1768, 1766, 1767, + 1767, 1761, 1764, 1766, 1769, 1770, 1768, 1772, 1765, 1769, + 1770, 1771, 1771, 1773, 1774, 1775, 1776, 1779, 1777, 1778, + 1776, 1780, 1773, 1777, 1781, 1778, 1782, 1772, 1785, 1786, + 1780, 1790, 1774, 1789, 1775, 1779, 1784, 1784, 1786, 0, + 1782, 1788, 1781, 1787, 1787, 1789, 1785, 1792, 1784, 1791, - 1789, 1787, 1793, 1793, 1795, 1797, 1800, 1795, 1799, 1802, - 1790, 1801, 1803, 1803, 1788, 1796, 1806, 1801, 1805, 1805, - 1800, 1797, 1808, 1799, 1806, 1809, 1802, 1810, 1810, 1808, - 1811, 1812, 1813, 1816, 1814, 1815, 1817, 1818, 1820, 1811, - 0, 1821, 1823, 1818, 1813, 1809, 1814, 1815, 1822, 1822, - 1824, 1817, 1812, 1821, 1825, 1827, 1818, 1825, 1820, 1816, - 1823, 1826, 1829, 1830, 1831, 1830, 1826, 1829, 1832, 1833, - 1824, 1835, 1837, 1832, 1838, 1827, 1833, 1839, 1841, 1840, - 1835, 1840, 1831, 1838, 1843, 1844, 1843, 1845, 1845, 1839, - 1837, 1846, 1848, 1847, 1848, 1849, 1850, 1841, 1847, 1844, + 1788, 1798, 1790, 1799, 1791, 1795, 1795, 1801, 1797, 1802, + 1792, 1797, 1803, 1804, 1805, 1805, 1811, 1798, 1803, 1799, + 1807, 1807, 1801, 1802, 1806, 1808, 1806, 1810, 1812, 1812, + 1804, 1813, 1814, 1808, 1810, 1815, 1811, 1816, 1817, 1818, + 1813, 1819, 1820, 1822, 1825, 1823, 1826, 1815, 1820, 1816, + 1817, 1824, 1824, 1814, 1828, 1827, 1819, 1823, 1827, 1828, + 1829, 1820, 1825, 1822, 1831, 1818, 1826, 1833, 1832, 1831, + 1832, 1834, 1835, 1837, 1839, 1840, 1834, 1841, 1843, 1835, + 1829, 1842, 1837, 1842, 1840, 1833, 1845, 1846, 1845, 1841, + 1847, 1847, 1839, 1848, 1849, 1851, 1850, 1843, 1850, 1849, - 1849, 1850, 1851, 1852, 1853, 1855, 1854, 1856, 1858, 1862, - 1853, 1854, 1859, 1860, 1860, 1856, 1863, 1846, 1855, 1864, - 1851, 1861, 1861, 1852, 1862, 1864, 1859, 1858, 1865, 1866, - 1867, 1866, 1870, 1865, 1868, 1868, 1863, 1875, 1867, 1869, - 1869, 1871, 1871, 1873, 1870, 1874, 1867, 1872, 1872, 1877, - 1874, 1878, 1873, 1878, 1879, 1875, 1881, 1880, 1877, 1882, - 1884, 1877, 1880, 1880, 1885, 1881, 1888, 1889, 1886, 1885, - 1892, 1882, 1884, 1886, 1890, 1879, 1891, 1891, 1893, 1888, - 1895, 1894, 1900, 1890, 1896, 1901, 1898, 1889, 1892, 1899, - 1901, 1909, 1910, 1912, 1895, 1902, 1893, 1894, 1898, 1896, + 1851, 1846, 1852, 1853, 1854, 1855, 1858, 1852, 1856, 1857, + 1860, 1855, 1861, 1856, 1858, 1862, 1862, 1863, 1863, 1848, + 1864, 1853, 1857, 1865, 1854, 1866, 1861, 1867, 1868, 1860, + 1868, 1866, 1867, 1869, 1870, 1864, 1871, 1871, 1873, 1873, + 1872, 1877, 1870, 1865, 1874, 1874, 1875, 1881, 1876, 1879, + 1870, 1869, 1872, 1876, 1880, 1875, 1880, 1882, 1879, 1877, + 1883, 1879, 1882, 1882, 1884, 1886, 1887, 1888, 1881, 1883, + 1890, 1887, 1888, 1891, 1894, 1892, 1884, 1886, 1893, 1893, + 1895, 1896, 1897, 1890, 1892, 1898, 1902, 1900, 1914, 1901, + 1903, 1911, 1894, 1891, 1905, 1903, 1897, 1896, 1895, 1900, - 1902, 1899, 1900, 1903, 1906, 1908, 1911, 1910, 1913, 1917, - 1906, 1908, 1903, 1915, 1909, 1914, 1914, 1913, 1912, 1916, - 1916, 1918, 1915, 1906, 1911, 1918, 1919, 1920, 1917, 1921, - 1922, 1919, 1923, 1925, 1921, 1921, 1922, 1926, 1923, 1924, - 1920, 1925, 1924, 1929, 1929, 1930, 1930, 1931, 1932, 1932, - 1933, 1933, 1934, 1936, 1935, 0, 1931, 1926, 1937, 1936, - 1930, 1938, 1938, 1937, 1934, 1939, 1939, 1944, 1940, 1941, - 1943, 1930, 1935, 1940, 1943, 1941, 1945, 1947, 1948, 1950, - 1945, 1949, 1952, 1948, 1951, 1953, 1954, 1944, 1955, 1951, - 1956, 1957, 1957, 1955, 1950, 1958, 1959, 1961, 1960, 1958, + 1898, 1901, 1904, 1905, 1908, 1910, 1902, 1904, 1913, 1912, + 1908, 1910, 1915, 1914, 1911, 1916, 1916, 1919, 1917, 1918, + 1918, 1915, 1922, 1908, 1912, 1920, 1913, 1917, 1921, 1920, + 0, 1928, 1923, 1921, 1924, 1922, 1919, 1923, 1923, 1925, + 1924, 1926, 1927, 1933, 1926, 1925, 1931, 1931, 1932, 1932, + 1927, 1928, 1933, 1934, 1934, 1935, 1935, 1936, 1937, 1938, + 1945, 1939, 1946, 1932, 1945, 1938, 1939, 1940, 1940, 1936, + 1941, 1941, 1942, 1943, 1932, 1949, 1937, 1942, 1950, 1943, + 1947, 1951, 1946, 1950, 1947, 1953, 1952, 1954, 1956, 1957, + 1953, 1955, 1958, 1960, 1957, 1959, 1959, 1960, 1961, 1963, - 1952, 1953, 1947, 1960, 1949, 1962, 1954, 1963, 1964, 1965, - 1966, 1959, 1956, 1964, 1967, 1967, 1969, 1962, 1970, 1971, - 1972, 1973, 1965, 1961, 1969, 1974, 1963, 1975, 1966, 1976, - 1977, 1979, 1980, 1980, 1982, 1983, 1981, 1970, 1971, 1981, - 1984, 1976, 0, 1972, 1974, 1973, 1979, 1982, 1975, 1983, - 1988, 1977, 0, 1984, 1985, 1985, 1986, 1986, 1987, 1987, - 1989, 1990, 1990, 1991, 1993, 1988, 1992, 1992, 1996, 1993, - 1997, 1995, 1991, 1989, 1998, 1991, 1995, 1999, 1999, 2000, - 2000, 2001, 2002, 2002, 2003, 2009, 1998, 2012, 1996, 2005, - 1997, 2004, 2004, 2006, 2007, 2007, 2008, 2008, 2006, 2009, + 1949, 1952, 1965, 1964, 1951, 1954, 1962, 1955, 1956, 1967, + 1968, 1962, 1966, 1961, 1958, 1964, 1971, 1966, 1969, 1969, + 1972, 1965, 1967, 1973, 1971, 1963, 1974, 1975, 1968, 1976, + 1981, 1977, 1978, 1979, 1982, 1982, 1985, 1983, 1990, 1972, + 1983, 2021, 1973, 1984, 1978, 1981, 1986, 2021, 1976, 1974, + 1985, 1975, 1977, 1990, 1979, 1991, 1984, 1987, 1987, 1986, + 1988, 1988, 1989, 1989, 1992, 1992, 1993, 1995, 1991, 1994, + 1994, 1997, 1995, 1998, 1999, 1993, 1997, 2000, 1993, 2001, + 2001, 2002, 2002, 2003, 2004, 2004, 2005, 2006, 2006, 2000, + 2007, 2008, 2011, 1998, 1999, 2013, 2008, 2009, 2009, 2010, - 2001, 2010, 2003, 2011, 2005, 2016, 2012, 2014, 2015, 2015, - 2010, 2018, 2014, 2017, 2017, 2019, 2020, 2011, 2023, 2020, - 2024, 2019, 2021, 2021, 2016, 2022, 2022, 2025, 2028, 2018, - 2026, 2026, 2029, 2033, 2030, 2024, 2031, 2023, 2021, 2034, - 2031, 2032, 2032, 2035, 2038, 2038, 2025, 2039, 2028, 2030, - 2040, 2041, 2033, 2042, 2034, 2029, 2043, 2040, 2035, 2044, - 2045, 2045, 2047, 2046, 2047, 2041, 2048, 2039, 2050, 2048, - 2051, 2042, 2046, 2052, 2043, 2051, 2053, 2054, 2052, 2055, - 2050, 2057, 2056, 2059, 2048, 2044, 2048, 2056, 2059, 2060, - 2054, 2061, 2062, 2063, 2060, 2067, 2064, 2068, 2062, 2065, + 2010, 2012, 2003, 2014, 2005, 2007, 2011, 2016, 2018, 2013, + 2012, 2020, 2016, 2017, 2017, 2019, 2019, 2022, 2023, 2023, + 2022, 2025, 2014, 2024, 2024, 2027, 2026, 2018, 2030, 2020, + 2028, 2028, 2031, 2033, 2023, 2032, 2041, 2033, 2034, 2034, + 2025, 2026, 2035, 2037, 2027, 2038, 2036, 2042, 2030, 2043, + 2032, 2036, 2040, 2040, 2042, 2031, 2041, 2044, 2037, 2045, + 2038, 2035, 2046, 2043, 2047, 2047, 2049, 2048, 2049, 2050, + 2052, 2055, 2050, 2053, 2054, 2044, 2048, 2045, 2053, 2054, + 2056, 2057, 2052, 2059, 2063, 2058, 2061, 2050, 2046, 2050, + 2058, 2061, 2062, 2056, 2064, 2065, 2055, 2062, 2066, 2063, - 2055, 2053, 2064, 2066, 2065, 2074, 2061, 2057, 2066, 2069, - 2068, 2079, 2069, 2070, 2063, 2071, 2072, 2073, 2085, 2074, - 2067, 2075, 2070, 2076, 2071, 2072, 2073, 2075, 2077, 2076, - 2081, 2079, 2077, 2082, 2082, 2083, 2084, 2084, 2085, 2081, - 2085, 2083, 2087, 2088, 2091, 2084, 2089, 2089, 2090, 2093, - 2094, 2098, 2095, 2091, 2098, 2099, 2096, 2100, 2087, 2088, - 2099, 2093, 2101, 2090, 2102, 2102, 2094, 2095, 2096, 2103, - 2103, 2105, 2105, 2106, 2101, 2107, 2106, 2100, 2108, 2109, - 2107, 2110, 2110, 2111, 2108, 2109, 2112, 2112, 2113, 2114, - 2115, 2116, 2116, 2117, 2118, 0, 2119, 2111, 2121, 2117, + 2064, 2067, 2057, 2068, 2066, 2069, 2067, 2070, 2068, 2059, + 2071, 2076, 2072, 2071, 2073, 2074, 2065, 2075, 2081, 0, + 2070, 2072, 2077, 2073, 2074, 2076, 2075, 2078, 2077, 2089, + 2069, 2079, 2083, 2078, 2085, 2079, 2084, 2084, 2081, 2087, + 2085, 2083, 2086, 2086, 2090, 2089, 2091, 2091, 2092, 2093, + 2095, 2086, 2096, 2098, 2097, 2102, 2104, 2104, 2093, 2087, + 2090, 2087, 2095, 2092, 2100, 2098, 2101, 2100, 2096, 2097, + 2103, 2101, 2105, 2105, 2109, 2102, 2107, 2107, 2108, 2109, + 2110, 2108, 2103, 2111, 2112, 2112, 2110, 2113, 2115, 2111, + 2114, 2114, 2116, 2117, 2118, 2118, 2119, 2120, 2121, 2128, - 2113, 2119, 2121, 2114, 2122, 2123, 2123, 2122, 2118, 2115, - 2124, 2125, 2126, 2127, 2129, 2124, 2131, 2127, 2128, 2128, - 2125, 2131, 2132, 2133, 2134, 2135, 2136, 2129, 2137, 2135, - 2138, 2139, 2126, 2137, 2140, 2142, 2138, 2139, 2134, 2143, - 2145, 2144, 2132, 2133, 2143, 2149, 2136, 2144, 2145, 2150, - 2150, 2142, 2140, 2146, 2151, 2146, 2152, 2151, 2155, 2149, - 2153, 2153, 2155, 2156, 2157, 2158, 2158, 2164, 2159, 2156, - 2162, 2162, 2166, 2167, 2170, 2171, 2157, 2159, 2172, 2170, - 2174, 2174, 2152, 2172, 2180, 2164, 2166, 2173, 2178, 2167, - 2176, 2176, 2173, 2181, 2178, 2179, 2179, 2182, 2184, 2185, + 2115, 2113, 2119, 2121, 2123, 0, 2116, 2124, 2123, 2127, + 2124, 2120, 2117, 2125, 2125, 2126, 2131, 2129, 2127, 2128, + 2126, 2129, 2130, 2130, 2134, 2133, 2135, 2136, 2137, 2131, + 2133, 2138, 2137, 2139, 2140, 2142, 2141, 2147, 2139, 2144, + 2140, 2136, 2141, 2145, 2134, 2147, 2135, 2148, 2145, 2148, + 2146, 2138, 2151, 2142, 2154, 2144, 2146, 2152, 2152, 2153, + 2155, 2155, 2153, 2157, 2158, 2159, 2151, 2157, 2160, 2160, + 2158, 2166, 2161, 2164, 2164, 2169, 2168, 2159, 2172, 2173, + 2154, 2161, 2174, 2172, 2176, 2176, 2180, 2174, 2175, 2166, + 2168, 2169, 2180, 2175, 2178, 2178, 2181, 2181, 2182, 2183, - 2180, 2171, 2182, 2186, 2186, 2188, 2189, 2190, 2191, 2193, - 2193, 2185, 2189, 2194, 2188, 2181, 2195, 2184, 2197, 2197, - 2198, 2198, 2199, 2191, 2200, 2190, 2201, 2199, 2202, 2203, - 2204, 2203, 2194, 2202, 2195, 2201, 2205, 2206, 2207, 2208, - 2209, 0, 2200, 2207, 2204, 2209, 2210, 2210, 2214, 2206, - 2205, 2211, 2211, 2212, 2212, 2213, 2213, 2215, 2216, 2208, - 2214, 2217, 2217, 2216, 2218, 2218, 2219, 2220, 2221, 2222, - 2223, 2223, 2224, 2225, 2225, 2215, 2226, 2226, 2219, 2220, - 2229, 2227, 2228, 2230, 2231, 2222, 2233, 2229, 2221, 2234, - 2236, 2224, 2227, 2232, 2228, 2230, 2235, 2235, 2232, 2236, + 2186, 2184, 2190, 2187, 2191, 2173, 2184, 2188, 2188, 2192, + 2191, 2190, 2197, 2193, 2182, 2187, 2195, 2195, 2198, 2186, + 2196, 2183, 2203, 2196, 2200, 2200, 2204, 2192, 2193, 2201, + 2201, 2197, 2202, 2205, 2207, 2204, 2198, 2202, 2205, 2206, + 2203, 2206, 2208, 2209, 2210, 2211, 2212, 0, 2207, 2210, + 2218, 2212, 2213, 2213, 2217, 2209, 2208, 2214, 2214, 2215, + 2215, 2216, 2216, 2222, 2219, 2211, 2217, 2223, 2218, 2219, + 2220, 2220, 2221, 2221, 2224, 2222, 2225, 2226, 2226, 2223, + 2227, 2228, 2228, 2229, 2229, 2230, 2231, 2234, 2232, 2233, + 2236, 2237, 2225, 2240, 2224, 2232, 2230, 2235, 2231, 2227, - 2237, 2238, 2239, 2240, 2231, 2241, 2233, 2242, 2242, 2234, - 2244, 2243, 2247, 2245, 2248, 2239, 2249, 2251, 2252, 2241, - 2243, 2238, 2271, 2252, 2271, 2244, 2237, 2240, 2245, 2250, - 2247, 2251, 2250, 2253, 2254, 2254, 2248, 2261, 2253, 2249, - 2255, 2255, 2256, 2256, 2258, 2258, 2260, 2260, 2262, 2263, - 2265, 2266, 2267, 2268, 2269, 2261, 2270, 2272, 2278, 2262, - 2273, 2274, 2279, 2269, 2275, 2275, 2277, 2277, 2263, 2266, - 2265, 2279, 2284, 2268, 2267, 2282, 2270, 2272, 2273, 2274, - 2278, 2280, 2280, 2285, 2282, 2283, 2283, 2286, 2287, 2288, - 2284, 2289, 2290, 2291, 2286, 2292, 2292, 2293, 2293, 2294, + 2239, 2233, 2235, 2238, 2238, 2241, 2243, 2234, 2242, 2239, + 2236, 2237, 2244, 2245, 2245, 2246, 2247, 2248, 2250, 2240, + 2251, 2242, 2252, 2255, 2246, 2241, 2244, 2254, 2255, 0, + 2243, 2247, 2248, 2256, 2253, 2264, 2250, 2253, 2256, 2257, + 2257, 2254, 2251, 2258, 2258, 2252, 2259, 2259, 2261, 2261, + 2263, 2263, 2265, 2264, 2266, 2268, 2269, 2270, 2271, 2272, + 2273, 2275, 2274, 2265, 2274, 2276, 2277, 2281, 2272, 2278, + 2278, 2280, 2280, 2266, 2269, 2268, 2282, 2287, 2271, 2270, + 2273, 2275, 2285, 2276, 2277, 2282, 2283, 2283, 2288, 2281, + 2289, 2285, 2286, 2286, 2290, 2287, 2291, 2289, 2292, 2293, - 2295, 2285, 2296, 2287, 2297, 2294, 2298, 2288, 2290, 2289, - 2299, 2298, 2291, 2300, 2301, 2303, 2303, 2296, 2295, 2301, - 2302, 2307, 2302, 2297, 2304, 2309, 2304, 2305, 2305, 2310, - 2299, 2311, 2312, 2300, 2309, 2314, 2313, 2315, 2318, 2319, - 2307, 2313, 2319, 2311, 2320, 2320, 2321, 2322, 2310, 2323, - 2323, 2326, 2312, 2324, 2331, 2314, 2315, 2324, 2318, 2327, - 2329, 2321, 2332, 2327, 2335, 2322, 2326, 2328, 2328, 2333, - 2333, 2336, 2339, 2329, 2331, 2337, 2335, 2338, 2338, 2337, - 2336, 2341, 2332, 2340, 2340, 2342, 2341, 2343, 2344, 2345, - 2345, 2339, 2350, 2350, 2342, 2351, 2352, 2352, 2353, 2354, + 2294, 2295, 2295, 2296, 2296, 2297, 2288, 2298, 2299, 2290, + 2300, 2297, 2301, 2302, 2291, 2293, 2292, 2301, 2303, 2294, + 2305, 2304, 2305, 2299, 2310, 2298, 2304, 2306, 2306, 2300, + 2307, 2312, 2307, 2302, 2308, 2308, 2313, 2314, 2303, 2315, + 2312, 2316, 2317, 2310, 2318, 2321, 2316, 2322, 2325, 2314, + 2322, 2323, 2323, 2324, 2327, 2313, 2326, 2326, 2327, 2315, + 2329, 2332, 2317, 2318, 2334, 2321, 2325, 2330, 2324, 2331, + 2331, 2330, 2335, 2336, 2332, 2329, 2337, 2337, 2339, 2334, + 2340, 2341, 2342, 2342, 2343, 2341, 2344, 2344, 2346, 2340, + 2339, 2345, 2335, 2336, 2347, 2348, 2345, 2346, 2349, 2349, - 2344, 2355, 2365, 2343, 2356, 2357, 2357, 2358, 2360, 2360, - 2355, 2353, 2354, 2356, 2363, 2364, 2365, 2351, 2366, 2363, - 2364, 2367, 2358, 2366, 2368, 2369, 2372, 2370, 2373, 2367, - 2375, 2374, 2380, 2373, 2369, 2370, 2374, 2376, 2376, 2377, - 2377, 2372, 2378, 2368, 2381, 2375, 2379, 2382, 2385, 2378, - 2380, 2379, 2383, 2382, 2384, 2384, 2386, 2383, 2387, 2387, - 2391, 2386, 2381, 2385, 2388, 2388, 2392, 2392, 2393, 2394, - 0, 2393, 2395, 2391, 2394, 2394, 2396, 2395, 2397, 2398, - 2399, 2396, 2400, 2398, 2397, 2399, 2401, 2402, 2403, 2406, - 2404, 2400, 2405, 2407, 2406, 2402, 2404, 2409, 2405, 2412, + 2354, 2354, 2355, 2343, 2356, 2356, 2357, 2348, 2358, 2359, + 2347, 2360, 2361, 2361, 2362, 2364, 2364, 2367, 2359, 2357, + 2360, 2358, 2367, 2368, 2355, 2369, 2370, 2371, 2368, 2362, + 2372, 2370, 2373, 2376, 2374, 2371, 2379, 2382, 2377, 2369, + 2378, 2373, 2374, 2377, 2382, 2378, 2380, 2380, 2376, 2372, + 2383, 2379, 2381, 2381, 2384, 2383, 2385, 2386, 2389, 2387, + 2388, 2388, 2390, 2386, 2387, 2391, 2391, 2390, 2392, 2392, + 2395, 0, 2384, 2389, 2385, 2396, 2396, 2397, 2407, 2398, + 2397, 2399, 2400, 2395, 2398, 2398, 2399, 2400, 2401, 2402, + 2403, 2404, 2405, 2402, 2401, 2403, 2406, 2408, 2411, 2407, - 2410, 2401, 2409, 2410, 2416, 2407, 2417, 2414, 2415, 2403, - 2424, 2412, 2414, 2415, 2418, 2419, 2420, 2420, 2421, 2417, - 2425, 2430, 2416, 2418, 2419, 2426, 2428, 2421, 2429, 2424, - 2427, 2427, 2431, 2431, 2432, 2434, 2430, 2429, 2436, 2437, - 2425, 2438, 2438, 2437, 2426, 2428, 2439, 2445, 2440, 2441, - 2434, 2442, 2445, 2432, 2440, 2441, 2444, 2442, 2436, 2443, - 2443, 2447, 2448, 2450, 2444, 2451, 2452, 2450, 2454, 2454, - 2447, 2439, 2455, 2455, 2459, 2448, 2456, 2456, 2459, 2451, - 2460, 2452, 2458, 2458, 2464, 2460, 2462, 2462, 2465, 2466, - 2467, 2469, 2477, 2465, 2475, 2467, 2467, 2470, 2470, 2472, + 2404, 2410, 2409, 2408, 2406, 2416, 2410, 2405, 2409, 2413, + 2411, 2418, 2414, 2419, 2413, 2414, 2418, 2416, 2419, 2420, + 2421, 2422, 2423, 2424, 2424, 2425, 2428, 2429, 2434, 2430, + 2422, 2423, 2432, 2421, 2425, 2431, 2431, 2420, 2435, 2435, + 2433, 2436, 2438, 2434, 2440, 2428, 2441, 2429, 2430, 2433, + 2441, 2432, 2442, 2442, 2443, 2444, 2445, 2438, 0, 2446, + 2436, 2444, 2445, 2448, 2440, 2446, 2447, 2447, 2449, 2451, + 2452, 2448, 2454, 2449, 2455, 2456, 2454, 2459, 2451, 2443, + 2458, 2458, 2469, 2452, 2460, 2460, 2461, 2461, 2455, 2464, + 2456, 2463, 2463, 2464, 2465, 2459, 2467, 2467, 2470, 2465, - 2472, 2466, 2473, 2473, 2464, 2474, 2479, 2475, 2474, 2483, - 2477, 2469, 2480, 2480, 2481, 2481, 2482, 2482, 2484, 2484, - 2485, 2486, 2487, 2488, 2483, 2494, 2479, 2489, 2489, 2488, - 2490, 2495, 2493, 2485, 2490, 2496, 2487, 2493, 2493, 2486, - 2497, 2498, 2499, 2501, 2501, 2500, 2497, 2498, 2494, 2500, - 2506, 2495, 2504, 2507, 2509, 2496, 2507, 2504, 2506, 2510, - 2511, 2512, 2510, 2513, 2514, 0, 2512, 2499, 2515, 2516, - 2516, 2517, 2518, 2519, 2520, 2518, 2523, 2511, 2511, 2509, - 2521, 2513, 2515, 2518, 2514, 2517, 2522, 2519, 2521, 2524, - 2524, 2522, 2522, 2520, 2529, 2523, 2525, 2525, 2526, 2526, + 2471, 2472, 2469, 2470, 2474, 2482, 2472, 2472, 2475, 2475, + 2477, 2477, 2471, 2478, 2478, 2479, 2480, 2484, 2479, 2485, + 2485, 2486, 2486, 2482, 2474, 2487, 2487, 2488, 2490, 2480, + 2489, 2489, 2491, 2492, 2493, 2494, 2494, 2484, 2499, 2495, + 2493, 2490, 2488, 2495, 2500, 2501, 2498, 2492, 2502, 2503, + 2491, 2498, 2498, 2504, 2502, 2503, 2505, 2506, 2506, 2514, + 2505, 2499, 2509, 2511, 2500, 2501, 2512, 2509, 2516, 2512, + 2515, 2511, 2517, 2515, 2518, 2519, 2520, 2517, 2504, 2521, + 2521, 2525, 2522, 2524, 2514, 2516, 2516, 2528, 2523, 2534, + 2520, 2523, 2518, 2526, 2537, 2519, 2522, 2524, 2527, 2523, - 2527, 2527, 2528, 2528, 2530, 2531, 2532, 2533, 2534, 2530, - 2529, 2535, 2537, 2537, 2538, 2539, 2533, 2538, 2541, 2541, - 2542, 2543, 2543, 2551, 2544, 2531, 0, 2542, 2534, 2544, - 2547, 2535, 2532, 2539, 2546, 2546, 2548, 2549, 2554, 2547, - 2553, 2551, 2552, 2552, 2553, 2548, 2549, 2554, 2555, 2556, - 2558, 2557, 2562, 2566, 2556, 2556, 2567, 2562, 2568, 2558, - 2563, 2563, 2570, 2555, 2557, 2565, 2565, 2566, 2571, 2574, - 2575, 2570, 2576, 2579, 2581, 0, 2568, 2577, 2627, 2575, - 2571, 2567, 2583, 2577, 2584, 2579, 2627, 2583, 2586, 2584, - 2585, 2585, 2576, 2588, 2574, 2581, 2595, 2586, 2588, 2589, + 2525, 2526, 0, 2527, 2527, 2534, 2528, 2529, 2529, 2530, + 2530, 2531, 2531, 2532, 2532, 2533, 2533, 2535, 2536, 2538, + 2537, 2539, 2535, 2540, 2542, 2542, 2543, 2544, 2538, 2543, + 2546, 2546, 2547, 2548, 2548, 2549, 2551, 2551, 2536, 2547, + 2549, 2539, 2552, 2540, 2553, 2544, 2554, 2556, 2557, 2557, + 2558, 2552, 2559, 2553, 2558, 2554, 2560, 2561, 2563, 2562, + 2564, 2559, 2561, 2561, 2564, 2556, 2572, 2563, 2568, 2569, + 2569, 2560, 2562, 2568, 2571, 2571, 2573, 2574, 2576, 2577, + 2572, 2580, 2582, 2581, 2583, 2585, 2587, 2576, 2589, 2590, + 2583, 2577, 2581, 2589, 2590, 2574, 2592, 2585, 2591, 2591, - 2589, 2591, 2591, 2589, 2592, 2592, 2593, 2593, 2594, 2596, - 2597, 2603, 2599, 2604, 2600, 2597, 2595, 2594, 2599, 2600, - 2601, 2602, 2602, 2606, 2607, 2601, 2605, 2608, 2596, 2603, - 2607, 2605, 2609, 2609, 2604, 2611, 2615, 2612, 2613, 2611, - 2617, 2606, 2612, 2613, 2614, 2614, 2616, 2619, 2619, 2621, - 2622, 2625, 2608, 2623, 2626, 2615, 2624, 2623, 2629, 2628, - 2617, 2616, 2621, 2622, 2628, 2624, 2631, 2625, 2630, 2630, - 2633, 2633, 2636, 2626, 2634, 2634, 2638, 2638, 2640, 2641, - 2642, 2643, 2645, 2645, 2629, 2631, 2643, 2646, 2647, 2648, - 2650, 2650, 2651, 2636, 2640, 2641, 2642, 2652, 2652, 2655, + 2601, 2573, 2582, 2594, 2602, 2592, 2580, 2587, 2594, 2595, + 2595, 2597, 2597, 2595, 2598, 2598, 2599, 2599, 2600, 2603, + 2601, 2606, 2605, 2602, 2603, 2607, 2606, 2600, 2605, 2609, + 2607, 2608, 2608, 2610, 2611, 2612, 2613, 2614, 2618, 2611, + 2615, 2615, 2613, 2618, 2617, 2619, 2621, 2609, 2617, 2622, + 2619, 2620, 2620, 2612, 2610, 2623, 2625, 2625, 2627, 2628, + 2630, 2631, 2614, 2629, 2622, 2621, 2632, 2629, 2633, 2630, + 2635, 2627, 2628, 2634, 2637, 2623, 2633, 2631, 2634, 2636, + 2636, 2639, 2639, 2640, 2640, 2632, 2642, 2644, 2644, 2646, + 2647, 2652, 2648, 2637, 2649, 2653, 2635, 2651, 2651, 2649, - 2657, 2658, 2661, 2656, 2665, 2657, 2651, 2646, 2648, 2656, - 2663, 2647, 2659, 2659, 2660, 2660, 2662, 2662, 2664, 2655, - 2666, 2663, 2661, 2658, 2665, 2667, 2666, 2664, 2668, 2669, - 2670, 2670, 2671, 2672, 2672, 2671, 2662, 2677, 2676, 2678, - 2668, 2679, 2679, 2680, 2667, 2678, 2680, 2681, 2682, 2669, - 2676, 2684, 2686, 2681, 2685, 2687, 2684, 2677, 2688, 2685, - 2691, 2687, 2689, 2689, 2692, 2693, 2682, 2694, 2695, 2695, - 2696, 2686, 2691, 2702, 2697, 2688, 2688, 2699, 2699, 0, - 2694, 2701, 2692, 2697, 2700, 2700, 2701, 2702, 2703, 2696, - 2693, 2704, 2704, 2703, 2705, 2705, 2706, 2706, 2707, 2709, + 2654, 2656, 2656, 2657, 2658, 2646, 2647, 2642, 2648, 2659, + 2659, 2652, 2662, 2665, 2663, 2674, 2664, 2657, 2653, 2654, + 2663, 2664, 2668, 2658, 2666, 2666, 2667, 2667, 2669, 2669, + 2670, 2671, 2662, 2672, 2674, 2665, 2676, 2673, 2675, 0, + 2671, 2670, 2668, 2673, 2677, 2677, 2678, 2683, 2669, 2678, + 2675, 2679, 2679, 2672, 2684, 2685, 2676, 2686, 2686, 2683, + 2687, 2685, 2688, 2687, 2689, 2691, 2692, 2693, 2688, 2694, + 2691, 2692, 2695, 2698, 2684, 2694, 2696, 2696, 2699, 2700, + 2701, 2703, 2689, 2702, 2702, 2698, 2693, 2709, 2704, 2695, + 2695, 2706, 2706, 2701, 2707, 2707, 2699, 2704, 2708, 2719, - 2709, 2712, 2714, 2707, 2715, 2716, 2717, 2717, 2719, 2719, - 2721, 2720, 2722, 2723, 2723, 2726, 2725, 2727, 2728, 0, - 2712, 2722, 2725, 2728, 2714, 2720, 2715, 2716, 2731, 2731, - 2721, 2733, 2733, 2734, 2735, 2726, 2727, 2736, 2734, 2737, - 2742, 2738, 2740, 2736, 2739, 2739, 2743, 2740, 2735, 2738, - 2744, 2737, 2745, 2746, 2748, 2744, 2749, 2750, 2751, 2746, - 2742, 2752, 2748, 2759, 2745, 2753, 2743, 2754, 2755, 2756, - 2763, 2758, 2767, 2767, 2756, 2749, 2758, 2750, 2751, 2752, - 2760, 2753, 2761, 2759, 2754, 2754, 2760, 2761, 2764, 2755, - 2763, 2768, 2768, 2769, 2773, 2773, 2779, 2769, 2775, 2775, + 2703, 2709, 2710, 2708, 2700, 2711, 2711, 2710, 2712, 2712, + 2713, 2713, 2714, 2716, 2716, 2721, 2722, 2714, 2719, 2723, + 2724, 2724, 2726, 2726, 2728, 2727, 2729, 2730, 2730, 2731, + 2731, 2734, 2777, 2735, 2733, 2729, 2777, 2721, 2722, 2727, + 2733, 2723, 2736, 2743, 2728, 2739, 2739, 2736, 2741, 2741, + 2742, 2734, 2735, 2744, 2745, 2742, 2746, 2743, 2748, 2744, + 2747, 2747, 2750, 2748, 2746, 2751, 2745, 2752, 2753, 2754, + 2756, 2757, 2752, 2758, 2759, 2754, 2761, 2760, 2756, 2762, + 2753, 2763, 2750, 2764, 2766, 2751, 2767, 2771, 2764, 2766, + 2757, 2844, 2761, 2758, 2759, 2760, 2762, 2762, 2768, 2772, - 2779, 2764, 2776, 2776, 2782, 2776, 2777, 2777, 2785, 2777, - 2778, 2778, 2783, 2778, 2781, 2781, 2786, 2791, 2787, 2788, - 2788, 2793, 2782, 2787, 2792, 2793, 2783, 2806, 2785, 2794, - 2795, 2792, 2797, 2806, 2798, 2832, 2786, 2802, 2794, 2799, - 2799, 2807, 2791, 2798, 2832, 2795, 2800, 2800, 2801, 2801, - 2797, 2803, 2802, 2804, 2805, 2808, 2803, 2809, 2810, 2805, - 2805, 2812, 2804, 2810, 2811, 2804, 2807, 2813, 2813, 2811, - 2808, 2814, 2884, 2815, 2816, 2816, 2884, 2814, 2809, 2815, - 2812, 2817, 2817, 2818, 2821, 2821, 2824, 2824, 2818, 2825, - 2825, 2826, 2826, 2827, 2827, 2828, 2828, 2829, 2829, 2830, + 2769, 0, 2763, 2844, 2768, 2769, 2767, 2771, 2775, 2775, + 2776, 2776, 2772, 2781, 2781, 2783, 2783, 2784, 2784, 2787, + 2784, 2785, 2785, 2787, 2785, 2786, 2786, 2790, 2786, 2789, + 2789, 2794, 2791, 2795, 2796, 2797, 2797, 2800, 2802, 2796, + 2801, 2803, 2802, 2804, 0, 2790, 2791, 2801, 2806, 2811, + 2803, 2794, 2807, 2795, 2808, 2808, 2809, 2809, 2804, 2810, + 2810, 2807, 2800, 2812, 2811, 2813, 2806, 2814, 2812, 2815, + 2816, 2817, 2814, 2814, 2813, 2815, 2818, 2813, 2819, 2820, + 2821, 2822, 2822, 2819, 2820, 2823, 2817, 2824, 2825, 2825, + 2851, 2823, 2893, 2824, 0, 2816, 2893, 2818, 2827, 2821, - 2830, 2833, 2833, 2834, 2835, 2836, 2840, 2838, 2839, 2839, - 2841, 2848, 2834, 2843, 2843, 2842, 2835, 2844, 2845, 2845, - 2850, 2840, 2852, 2841, 2855, 2836, 2838, 2842, 2849, 2848, - 2855, 2849, 2844, 2851, 2851, 2854, 2856, 2857, 2854, 2858, - 2852, 2859, 2857, 2862, 2860, 2863, 2850, 2866, 2875, 2862, - 2856, 2875, 2877, 2882, 2863, 2878, 2878, 2885, 2858, 2859, - 2860, 2883, 2866, 2879, 2879, 2877, 2880, 2880, 2886, 2888, - 2883, 2892, 2889, 2890, 2893, 2893, 2882, 2885, 2890, 2891, - 2894, 2891, 2886, 2889, 2895, 2897, 2892, 2896, 2898, 2899, - 2900, 2902, 2888, 2894, 2901, 2903, 2908, 2904, 2909, 2900, + 2826, 2826, 2851, 2827, 2830, 2830, 2833, 2833, 2834, 2834, + 2835, 2835, 2836, 2836, 2837, 2837, 2838, 2838, 2839, 2839, + 2841, 2842, 2842, 2843, 2845, 2849, 2847, 2848, 2848, 2841, + 2850, 2853, 2843, 2852, 2852, 2854, 2854, 2857, 2858, 2859, + 2849, 2858, 2861, 2850, 2845, 2847, 2853, 2860, 2860, 2863, + 2864, 2867, 2863, 2865, 2866, 2857, 2864, 2868, 2869, 2866, + 2861, 2875, 2871, 2872, 2886, 2859, 2884, 2865, 2871, 2884, + 2867, 2891, 2872, 2895, 2869, 2868, 2875, 2886, 2887, 2887, + 2888, 2888, 2889, 2889, 2892, 2894, 2897, 2895, 2898, 2900, + 2899, 2900, 2901, 2892, 2891, 2899, 2902, 2902, 2903, 2898, - 2911, 2897, 2904, 2895, 2899, 2896, 2901, 2910, 2910, 2911, - 2908, 2916, 2902, 2898, 2917, 2903, 2912, 2912, 2909, 2913, - 2913, 2914, 2914, 2915, 2915, 2918, 2919, 2920, 2918, 2921, - 2916, 2919, 2920, 2922, 2917, 2923, 2924, 2925, 2926, 2927, - 2929, 2923, 2930, 2926, 2928, 2928, 2931, 2931, 2922, 2925, - 2924, 2933, 2935, 2941, 2921, 2929, 2938, 2938, 2942, 2927, - 2940, 2930, 2939, 2939, 2942, 2943, 2933, 2944, 2940, 2945, - 2935, 2943, 2941, 2946, 2947, 2948, 2948, 2949, 2949, 2947, - 2951, 2944, 2945, 2952, 2954, 2955, 2957, 2960, 2958, 2955, - 2959, 2961, 2946, 2958, 2962, 2965, 2965, 2963, 2954, 2968, + 2904, 2906, 2905, 2907, 2909, 2894, 2908, 2901, 2911, 2897, + 2910, 2903, 2912, 2909, 2918, 0, 2917, 2906, 2913, 2904, + 2905, 2908, 2910, 2913, 2919, 2919, 2920, 2925, 2907, 2911, + 2917, 2926, 2912, 2930, 2918, 2920, 2921, 2921, 2922, 2922, + 2923, 2923, 2924, 2924, 2927, 2928, 2925, 2927, 2929, 2931, + 2928, 2926, 2933, 2929, 2932, 2934, 2935, 2936, 2930, 2938, + 2932, 2935, 2937, 2937, 2931, 2939, 2933, 2934, 2940, 2940, + 2942, 2944, 2947, 2947, 2938, 2948, 2948, 2936, 2949, 2950, + 2953, 2951, 2952, 2954, 2939, 2942, 2949, 2951, 2952, 2944, + 2955, 2960, 2956, 2961, 2953, 2966, 2954, 2956, 2950, 2957, - 2960, 2951, 2963, 2952, 2961, 2964, 2957, 2969, 2970, 2959, - 2964, 2971, 2971, 2962, 2978, 2972, 2973, 2974, 2974, 2968, - 2972, 2975, 2973, 2976, 2977, 2969, 2975, 2970, 2976, 2977, - 2979, 2981, 2981, 2978, 2982, 2986, 2979, 2983, 2983, 2982, - 2985, 2987, 2988, 2989, 2985, 2990, 2991, 2992, 2987, 2994, - 2994, 2990, 2996, 2996, 2986, 2997, 2999, 3000, 2998, 3001, - 2992, 2988, 2989, 2998, 2997, 2991, 3003, 2997, 3002, 3002, - 3004, 3003, 3001, 3006, 3008, 2999, 3000, 3007, 3007, 3009, - 3009, 3010, 3010, 3004, 3011, 3012, 3013, 3014, 3014, 3011, - 3015, 3020, 3012, 3008, 3016, 3015, 3016, 3017, 3017, 3006, + 2957, 2958, 2958, 2963, 2964, 2967, 2968, 2969, 2964, 2955, + 2967, 2970, 2960, 2961, 2971, 2966, 2972, 2963, 2973, 2977, + 2969, 2972, 2978, 2973, 2970, 2968, 2974, 2974, 2979, 2980, + 2980, 2981, 2982, 2971, 2983, 2983, 2981, 2984, 2982, 2977, + 2978, 2985, 2984, 2986, 2987, 2988, 2985, 2979, 2986, 2990, + 2990, 2988, 2991, 2992, 2992, 2994, 2995, 2991, 2996, 2994, + 2997, 2998, 2999, 2987, 3000, 2996, 3003, 3003, 2999, 3001, + 3005, 3005, 3006, 3007, 3008, 2995, 3009, 3010, 3007, 2997, + 2998, 3006, 3001, 3000, 3006, 3011, 3011, 3012, 3013, 3015, + 3010, 3017, 3012, 3008, 3022, 3009, 3016, 3016, 3018, 3018, - 3018, 3019, 3022, 3025, 3021, 3013, 3029, 3018, 3019, 3021, - 3020, 3024, 3024, 3027, 3028, 3030, 3031, 3031, 3027, 3028, - 3034, 3022, 3025, 3033, 3033, 3029, 3035, 3036, 3036, 3037, - 3037, 3038, 3040, 3040, 3030, 3041, 3041, 3042, 3038, 3034, - 3048, 3044, 3047, 3049, 3042, 3035, 3044, 3047, 3050, 3050, - 3051, 3051, 0, 0, 0, 0, 0, 0, 0, 3048, - 0, 0, 3049, 3055, 3055, 3055, 3055, 3055, 3055, 3055, - 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3057, 3057, 3057, - 3057, 3057, 3057, 3057, 3058, 3058, 3058, 3058, 3058, 3058, - 3058, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3061, 3061, + 3020, 3013, 3019, 3019, 3021, 3020, 3023, 3023, 3029, 3024, + 3017, 3021, 3031, 3022, 3024, 3015, 3025, 3027, 3025, 3026, + 3026, 3028, 3033, 3033, 3027, 3030, 3034, 3029, 3028, 3036, + 3030, 3031, 3037, 3038, 3036, 3039, 3043, 3037, 3040, 3040, + 3042, 3042, 3044, 3045, 3045, 3034, 3046, 3046, 0, 3047, + 3049, 3049, 3038, 3051, 3039, 3043, 3047, 3050, 3050, 3053, + 3051, 3044, 3056, 3057, 3053, 3058, 0, 3056, 3059, 3059, + 3060, 3060, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3057, 0, 3058, 3064, 3064, 3064, 3064, 3064, + 3064, 3064, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3066, - 0, 3061, 3061, 3061, 3061, 3062, 3062, 0, 0, 0, - 3062, 3062, 3063, 3063, 0, 0, 3063, 0, 3063, 3064, - 0, 0, 0, 0, 0, 3064, 3065, 3065, 0, 0, - 0, 3065, 3065, 3066, 0, 0, 0, 0, 0, 3066, - 3067, 3067, 0, 3067, 3067, 3067, 3067, 3068, 3068, 0, - 3068, 3068, 3068, 3068, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054 + 3066, 3066, 3066, 3066, 3066, 3066, 3067, 3067, 3067, 3067, + 3067, 3067, 3067, 3068, 3068, 3068, 3068, 3068, 3068, 3068, + 3070, 3070, 0, 3070, 3070, 3070, 3070, 3071, 3071, 0, + 0, 0, 3071, 3071, 3072, 3072, 0, 0, 3072, 0, + 3072, 3073, 0, 0, 0, 0, 0, 3073, 3074, 3074, + 0, 0, 0, 3074, 3074, 3075, 0, 0, 0, 0, + 0, 3075, 3076, 3076, 0, 3076, 3076, 3076, 3076, 3077, + 3077, 0, 3077, 3077, 3077, 3077, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3063, 3063, 3063, 3063, 3063, 3063, 3063 } ; static yy_state_type yy_last_accepting_state; @@ -2949,7 +2956,7 @@ static void config_end_include(void) } #endif -#line 2951 "" +#line 2958 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2958,9 +2965,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2960 "" +#line 2967 "" -#line 2962 "" +#line 2969 "" #define INITIAL 0 #define quotedstring 1 @@ -3182,7 +3189,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3184 "" +#line 3191 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3215,13 +3222,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3055 ) + if ( yy_current_state >= 3064 ) 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] != 5955 ); + while ( yy_base[yy_current_state] != 5977 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4682,7 +4689,7 @@ YY_RULE_SETUP case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISSETTTL) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 286: YY_RULE_SETUP @@ -4903,7 +4910,7 @@ YY_RULE_SETUP #line 604 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4905 "" +#line 4912 "" case YY_END_OF_BUFFER: { @@ -5198,7 +5205,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3055 ) + if ( yy_current_state >= 3064 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5226,11 +5233,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3055 ) + if ( yy_current_state >= 3064 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3054); + yy_is_jam = (yy_current_state == 3063); return yy_is_jam ? 0 : yy_current_state; } diff --git a/util/configlexer.lex b/util/configlexer.lex index 8bc5f0831..f4e275e89 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -500,7 +500,7 @@ secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) } redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) } redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } -redis-set-ttl{COLON} { YDVAR(1, VAR_CACHEDB_REDISSETTTL) } +redis-expire-records{COLON} { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } ipset{COLON} { YDVAR(0, VAR_IPSET) } name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } diff --git a/util/configparser.c b/util/configparser.c index 07950b8b4..f8d7db131 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -381,7 +381,7 @@ extern int yydebug; VAR_CACHEDB_REDISHOST = 503, VAR_CACHEDB_REDISPORT = 504, VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_CACHEDB_REDISSETTTL = 506, + VAR_CACHEDB_REDISEXPIRERECORDS = 506, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 507, VAR_FOR_UPSTREAM = 508, VAR_AUTH_ZONE = 509, @@ -668,7 +668,7 @@ extern int yydebug; #define VAR_CACHEDB_REDISHOST 503 #define VAR_CACHEDB_REDISPORT 504 #define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_CACHEDB_REDISSETTTL 506 +#define VAR_CACHEDB_REDISEXPIRERECORDS 506 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 507 #define VAR_FOR_UPSTREAM 508 #define VAR_AUTH_ZONE 509 @@ -1207,7 +1207,7 @@ static const char *const yytname[] = "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_REDISSETTTL", + "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS", "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", @@ -1342,7 +1342,7 @@ static const char *const yytname[] = "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", "cachedbstart", "contents_cachedb", "content_cachedb", "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", - "redis_server_port", "redis_timeout", "redis_set_ttl", + "redis_server_port", "redis_timeout", "redis_expire_records", "server_tcp_connection_limit", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; @@ -6331,10 +6331,10 @@ yyreduce: #line 3147 "./util/configparser.y" /* yacc.c:1652 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) - OUTYY(("P(redis_set_ttl:%s)\n", (yyvsp[0].str))); + 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_set_ttl = (strcmp((yyvsp[0].str), "yes")==0); + else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif diff --git a/util/configparser.h b/util/configparser.h index f2598c773..659dfe74d 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -297,7 +297,7 @@ extern int yydebug; VAR_CACHEDB_REDISHOST = 503, VAR_CACHEDB_REDISPORT = 504, VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_CACHEDB_REDISSETTTL = 506, + VAR_CACHEDB_REDISEXPIRERECORDS = 506, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 507, VAR_FOR_UPSTREAM = 508, VAR_AUTH_ZONE = 509, @@ -584,7 +584,7 @@ extern int yydebug; #define VAR_CACHEDB_REDISHOST 503 #define VAR_CACHEDB_REDISPORT 504 #define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_CACHEDB_REDISSETTTL 506 +#define VAR_CACHEDB_REDISEXPIRERECORDS 506 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 507 #define VAR_FOR_UPSTREAM 508 #define VAR_AUTH_ZONE 509 diff --git a/util/configparser.y b/util/configparser.y index 5ff37d093..30d95a5ac 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -161,7 +161,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED -%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT VAR_CACHEDB_REDISSETTTL +%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT VAR_CACHEDB_REDISEXPIRERECORDS %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL @@ -3077,7 +3077,7 @@ cachedbstart: VAR_CACHEDB contents_cachedb: contents_cachedb content_cachedb | ; content_cachedb: cachedb_backend_name | cachedb_secret_seed | - redis_server_host | redis_server_port | redis_timeout | redis_set_ttl + redis_server_host | redis_server_port | redis_timeout | redis_expire_records ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { @@ -3143,13 +3143,13 @@ redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG free($2); } ; -redis_set_ttl: VAR_CACHEDB_REDISSETTTL STRING_ARG +redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) - OUTYY(("P(redis_set_ttl:%s)\n", $2)); + OUTYY(("P(redis_expire_records:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); - else cfg_parser->cfg->redis_set_ttl = (strcmp($2, "yes")==0); + else cfg_parser->cfg->redis_expire_records = (strcmp($2, "yes")==0); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif From e7b45298c1db607d5dd9273d4bf17e782caf8bd9 Mon Sep 17 00:00:00 2001 From: Talkabout Date: Wed, 1 Apr 2020 13:32:13 +0200 Subject: [PATCH 198/235] changed init logic of redis backend as per review request --- cachedb/redis.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cachedb/redis.c b/cachedb/redis.c index dbdd9c3f4..6fc5496d6 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -130,12 +130,12 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) redis_reply_type = rep->type; freeReplyObject(rep); switch (redis_reply_type) { - case REDIS_REPLY_ERROR: + case REDIS_REPLY_STATUS: + break; + default: /** init failed, setex command not supported */ log_err("redis_init: failed to init redis, the redis-expire-records option requires the SETEX command (redis >= 2.0.0)"); return 0; - default: - break; } } From 557a309f9d80bc33fcebc7c740bd9c759f19bc19 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 1 Apr 2020 17:14:58 +0200 Subject: [PATCH 199/235] - Changes for PR #206 (formatting and remade lex and yacc output). --- cachedb/redis.c | 36 +- doc/unbound.conf.5.in | 10 +- util/config_file.h | 2 +- util/configlexer.c | 12 +- util/configparser.c | 1286 +++++++++++++++++++++-------------------- util/configparser.h | 9 +- util/configparser.y | 6 +- 7 files changed, 688 insertions(+), 673 deletions(-) diff --git a/cachedb/redis.c b/cachedb/redis.c index 6fc5496d6..16c3741f7 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -93,8 +93,6 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) { int i; struct redis_moddata* moddata = NULL; - redisReply* rep; - int redis_reply_type = 0; verbose(VERB_ALGO, "redis_init"); @@ -119,22 +117,29 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) for(i = 0; i < moddata->numctxs; i++) moddata->ctxs[i] = redis_connect(moddata); cachedb_env->backend_data = moddata; - if (env->cfg->redis_expire_records) { + if(env->cfg->redis_expire_records) { + redisReply* rep = NULL; + int redis_reply_type = 0; /** check if setex command is supported */ - rep = redis_command(env, cachedb_env, "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0); + rep = redis_command(env, cachedb_env, + "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0); if(!rep) { /** init failed, no response from redis server*/ - log_err("redis_init: failed to init redis, the redis-expire-records option requires the SETEX command (redis >= 2.0.0)"); + log_err("redis_init: failed to init redis, the " + "redis-expire-records option requires the SETEX command " + "(redis >= 2.0.0)"); return 0; } redis_reply_type = rep->type; freeReplyObject(rep); - switch (redis_reply_type) { + switch(redis_reply_type) { case REDIS_REPLY_STATUS: break; default: /** init failed, setex command not supported */ - log_err("redis_init: failed to init redis, the redis-expire-records option requires the SETEX command (redis >= 2.0.0)"); + log_err("redis_init: failed to init redis, the " + "redis-expire-records option requires the SETEX command " + "(redis >= 2.0.0)"); return 0; } } @@ -244,7 +249,7 @@ redis_lookup(struct module_env* env, struct cachedb_env* cachedb_env, rep = redis_command(env, cachedb_env, cmdbuf, NULL, 0); if(!rep) return 0; - switch (rep->type) { + switch(rep->type) { case REDIS_REPLY_NIL: verbose(VERB_ALGO, "redis_lookup: no data cached"); break; @@ -278,8 +283,13 @@ redis_store(struct module_env* env, struct cachedb_env* cachedb_env, { redisReply* rep; int n; - int set_ttl = (int)(env->cfg->redis_expire_records && (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); - char cmdbuf[6+(CACHEDB_HASHSIZE/8)*2+11+3+1]; /* "SETEX " + key + " " + ttl + " %b" or "SET " + key + " %b"*/ + int set_ttl = (env->cfg->redis_expire_records && + (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); + /* Supported commands: + * - "SET " + key + " %b" + * - "SETEX " + key + " " + ttl + " %b" + */ + char cmdbuf[6+(CACHEDB_HASHSIZE/8)*2+11+3+1]; if (!set_ttl) { verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); @@ -288,9 +298,11 @@ redis_store(struct module_env* env, struct cachedb_env* cachedb_env, } else { /* add expired ttl time to redis ttl to avoid premature eviction of key */ ttl += env->cfg->serve_expired_ttl; - verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u", key, (int)data_len, (uint32_t)ttl); + verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u", + key, (int)data_len, (uint32_t)ttl); /* build command to set to a binary safe string */ - n = snprintf(cmdbuf, sizeof(cmdbuf), "SETEX %s %u %%b", key, (uint32_t)ttl); + n = snprintf(cmdbuf, sizeof(cmdbuf), "SETEX %s %u %%b", key, + (uint32_t)ttl); } diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 12e3efa5f..19fb2e5eb 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2132,11 +2132,11 @@ re-establish a new connection later. This option defaults to 100 milliseconds. .TP .B redis-expire-records: \fI -If redis record expiration is enabled. If yes, unbound sets ttl for redis -records so that redis can evict keys that have expired automatically. If -unbound is configured to serve expired entries and there is no expired ttl -set, this option is internally reverted to "no". Redis SETEX support required -(redis >= 2.0.0). +If Redis record expiration is enabled. If yes, unbound sets timeout for Redis +records so that Redis can evict keys that have expired automatically. If +unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0, +this option is internally reverted to "no". Redis SETEX support is required +for this option (Redis >= 2.0.0). This option defaults to no. .SS DNSTAP Logging Options DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. diff --git a/util/config_file.h b/util/config_file.h index 0099fb77b..338dbd9d8 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -598,7 +598,7 @@ struct config_file { int redis_server_port; /** timeout (in ms) for communication with the redis server */ int redis_timeout; - /** set redis ttl value based on dns response ttl */ + /** set timeout on redis records based on DNS response ttl */ int redis_expire_records; #endif #endif diff --git a/util/configlexer.c b/util/configlexer.c index ec2790d86..74674e309 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 3 "" +#line 2 "" #define YY_INT_ALIGNED short int @@ -2956,7 +2956,7 @@ static void config_end_include(void) } #endif -#line 2958 "" +#line 2957 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2965,9 +2965,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2967 "" +#line 2966 "" -#line 2969 "" +#line 2968 "" #define INITIAL 0 #define quotedstring 1 @@ -3189,7 +3189,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3191 "" +#line 3190 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -4910,7 +4910,7 @@ YY_RULE_SETUP #line 604 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4912 "" +#line 4911 "" case YY_END_OF_BUFFER: { diff --git a/util/configparser.c b/util/configparser.c index f8d7db131..f02209a19 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.4.1. */ /* Bison implementation for Yacc-like parsers in C @@ -48,7 +48,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.3.2" +#define YYBISON_VERSION "3.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -66,7 +66,7 @@ /* First part of user prologue. */ -#line 38 "./util/configparser.y" /* yacc.c:337 */ +#line 38 "./util/configparser.y" #include "config.h" @@ -95,7 +95,8 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" /* yacc.c:337 */ +#line 99 "util/configparser.c" + # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -116,8 +117,8 @@ extern struct config_parser_state* cfg_parser; # define YYERROR_VERBOSE 0 #endif -/* In a future release of Bison, this section will be replaced - by #include "configparser.h". */ +/* Use api.header.include to #include this header + instead of duplicating it here. */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -707,16 +708,15 @@ extern int yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 66 "./util/configparser.y" /* yacc.c:352 */ +#line 66 "./util/configparser.y" char* str; -#line 718 "util/configparser.c" /* yacc.c:352 */ -}; +#line 718 "util/configparser.c" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -831,6 +831,8 @@ typedef short yytype_int16; #endif +#define YY_ASSERT(E) ((void) (0 && (E))) + #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -1046,66 +1048,66 @@ static const yytype_uint16 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 178, 178, 178, 179, 179, 180, 180, 181, 181, - 181, 182, 182, 183, 183, 184, 188, 193, 194, 195, - 195, 195, 196, 196, 197, 197, 197, 198, 198, 199, - 199, 199, 200, 200, 201, 201, 201, 202, 202, 202, - 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, - 208, 208, 209, 209, 210, 210, 211, 211, 211, 212, - 212, 212, 213, 213, 213, 214, 214, 215, 215, 216, - 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, - 221, 221, 221, 222, 222, 223, 223, 224, 224, 225, - 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, - 230, 230, 231, 231, 231, 232, 232, 233, 233, 233, - 234, 234, 234, 235, 235, 235, 236, 236, 236, 236, - 237, 238, 238, 238, 239, 239, 239, 240, 240, 241, - 241, 242, 242, 242, 243, 243, 244, 244, 244, 245, - 246, 246, 247, 247, 248, 249, 249, 250, 250, 251, - 251, 252, 253, 253, 254, 254, 255, 255, 256, 256, - 257, 257, 258, 258, 258, 259, 259, 260, 260, 261, - 261, 262, 262, 263, 263, 264, 264, 265, 265, 265, - 266, 266, 266, 267, 267, 267, 268, 268, 269, 270, - 270, 271, 271, 272, 272, 273, 273, 274, 274, 274, - 275, 275, 275, 276, 276, 276, 277, 277, 278, 278, - 279, 279, 281, 293, 294, 295, 295, 295, 295, 295, - 296, 296, 298, 310, 311, 312, 312, 312, 312, 313, - 313, 315, 329, 330, 331, 331, 331, 331, 332, 332, - 332, 334, 351, 352, 353, 353, 353, 353, 354, 354, - 354, 355, 358, 377, 394, 402, 412, 420, 437, 438, - 439, 439, 439, 439, 439, 440, 440, 440, 441, 441, - 443, 452, 461, 472, 481, 490, 499, 510, 519, 531, - 545, 560, 571, 588, 605, 622, 639, 654, 669, 682, - 697, 706, 715, 724, 733, 742, 751, 760, 769, 778, - 787, 796, 805, 814, 823, 836, 845, 858, 867, 876, - 885, 892, 899, 908, 915, 924, 932, 939, 946, 954, - 963, 972, 986, 995, 1004, 1013, 1022, 1031, 1040, 1047, - 1054, 1080, 1088, 1095, 1102, 1109, 1116, 1124, 1132, 1140, - 1147, 1158, 1169, 1176, 1185, 1194, 1203, 1210, 1217, 1225, - 1233, 1243, 1253, 1263, 1277, 1285, 1298, 1309, 1317, 1330, - 1339, 1348, 1357, 1367, 1377, 1385, 1398, 1407, 1415, 1424, - 1432, 1445, 1454, 1461, 1471, 1481, 1491, 1501, 1511, 1521, - 1531, 1541, 1548, 1555, 1562, 1571, 1580, 1589, 1598, 1605, - 1615, 1635, 1642, 1660, 1673, 1686, 1695, 1704, 1713, 1722, - 1732, 1742, 1753, 1762, 1771, 1780, 1789, 1798, 1807, 1820, - 1833, 1842, 1849, 1858, 1867, 1876, 1885, 1893, 1906, 1914, - 1955, 1962, 1977, 1987, 1997, 2004, 2011, 2018, 2027, 2035, - 2049, 2070, 2091, 2103, 2115, 2127, 2136, 2157, 2167, 2176, - 2184, 2192, 2205, 2218, 2233, 2248, 2257, 2266, 2272, 2281, - 2290, 2300, 2310, 2323, 2336, 2348, 2362, 2374, 2388, 2398, - 2405, 2412, 2421, 2430, 2440, 2450, 2460, 2467, 2474, 2483, - 2492, 2502, 2512, 2519, 2526, 2533, 2541, 2551, 2561, 2571, - 2581, 2620, 2630, 2638, 2646, 2661, 2670, 2675, 2676, 2677, - 2677, 2677, 2678, 2678, 2678, 2679, 2679, 2681, 2691, 2700, - 2707, 2714, 2721, 2728, 2735, 2742, 2747, 2748, 2749, 2749, - 2750, 2750, 2750, 2751, 2752, 2752, 2753, 2753, 2754, 2754, - 2755, 2756, 2757, 2758, 2759, 2760, 2762, 2771, 2778, 2785, - 2794, 2801, 2808, 2815, 2822, 2831, 2840, 2847, 2854, 2864, - 2874, 2884, 2894, 2904, 2914, 2919, 2920, 2921, 2923, 2929, - 2939, 2946, 2955, 2963, 2968, 2969, 2971, 2971, 2971, 2972, - 2972, 2973, 2974, 2975, 2976, 2977, 2979, 2989, 2998, 3005, - 3014, 3021, 3030, 3038, 3051, 3059, 3072, 3077, 3078, 3079, - 3079, 3080, 3080, 3080, 3080, 3082, 3094, 3106, 3118, 3133, - 3146, 3159, 3170, 3175, 3176, 3177, 3177, 3179, 3194 + 0, 179, 179, 179, 180, 180, 181, 181, 182, 182, + 182, 183, 183, 184, 184, 185, 189, 194, 195, 196, + 196, 196, 197, 197, 198, 198, 198, 199, 199, 200, + 200, 200, 201, 201, 202, 202, 202, 203, 203, 203, + 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, + 209, 209, 210, 210, 211, 211, 212, 212, 212, 213, + 213, 213, 214, 214, 214, 215, 215, 216, 216, 217, + 217, 218, 218, 219, 219, 219, 220, 220, 221, 221, + 222, 222, 222, 223, 223, 224, 224, 225, 225, 226, + 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, + 231, 231, 232, 232, 232, 233, 233, 234, 234, 234, + 235, 235, 235, 236, 236, 236, 237, 237, 237, 237, + 238, 239, 239, 239, 240, 240, 240, 241, 241, 242, + 242, 243, 243, 243, 244, 244, 245, 245, 245, 246, + 247, 247, 248, 248, 249, 250, 250, 251, 251, 252, + 252, 253, 254, 254, 255, 255, 256, 256, 257, 257, + 258, 258, 259, 259, 259, 260, 260, 261, 261, 262, + 262, 263, 263, 264, 264, 265, 265, 266, 266, 266, + 267, 267, 267, 268, 268, 268, 269, 269, 270, 271, + 271, 272, 272, 273, 273, 274, 274, 275, 275, 275, + 276, 276, 276, 277, 277, 277, 278, 278, 279, 279, + 280, 280, 282, 294, 295, 296, 296, 296, 296, 296, + 297, 297, 299, 311, 312, 313, 313, 313, 313, 314, + 314, 316, 330, 331, 332, 332, 332, 332, 333, 333, + 333, 335, 352, 353, 354, 354, 354, 354, 355, 355, + 355, 356, 359, 378, 395, 403, 413, 421, 438, 439, + 440, 440, 440, 440, 440, 441, 441, 441, 442, 442, + 444, 453, 462, 473, 482, 491, 500, 511, 520, 532, + 546, 561, 572, 589, 606, 623, 640, 655, 670, 683, + 698, 707, 716, 725, 734, 743, 752, 761, 770, 779, + 788, 797, 806, 815, 824, 837, 846, 859, 868, 877, + 886, 893, 900, 909, 916, 925, 933, 940, 947, 955, + 964, 973, 987, 996, 1005, 1014, 1023, 1032, 1041, 1048, + 1055, 1081, 1089, 1096, 1103, 1110, 1117, 1125, 1133, 1141, + 1148, 1159, 1170, 1177, 1186, 1195, 1204, 1211, 1218, 1226, + 1234, 1244, 1254, 1264, 1278, 1286, 1299, 1310, 1318, 1331, + 1340, 1349, 1358, 1368, 1378, 1386, 1399, 1408, 1416, 1425, + 1433, 1446, 1455, 1462, 1472, 1482, 1492, 1502, 1512, 1522, + 1532, 1542, 1549, 1556, 1563, 1572, 1581, 1590, 1599, 1606, + 1616, 1636, 1643, 1661, 1674, 1687, 1696, 1705, 1714, 1723, + 1733, 1743, 1754, 1763, 1772, 1781, 1790, 1799, 1808, 1821, + 1834, 1843, 1850, 1859, 1868, 1877, 1886, 1894, 1907, 1915, + 1956, 1963, 1978, 1988, 1998, 2005, 2012, 2019, 2028, 2036, + 2050, 2071, 2092, 2104, 2116, 2128, 2137, 2158, 2168, 2177, + 2185, 2193, 2206, 2219, 2234, 2249, 2258, 2267, 2273, 2282, + 2291, 2301, 2311, 2324, 2337, 2349, 2363, 2375, 2389, 2399, + 2406, 2413, 2422, 2431, 2441, 2451, 2461, 2468, 2475, 2484, + 2493, 2503, 2513, 2520, 2527, 2534, 2542, 2552, 2562, 2572, + 2582, 2621, 2631, 2639, 2647, 2662, 2671, 2676, 2677, 2678, + 2678, 2678, 2679, 2679, 2679, 2680, 2680, 2682, 2692, 2701, + 2708, 2715, 2722, 2729, 2736, 2743, 2748, 2749, 2750, 2750, + 2751, 2751, 2751, 2752, 2753, 2753, 2754, 2754, 2755, 2755, + 2756, 2757, 2758, 2759, 2760, 2761, 2763, 2772, 2779, 2786, + 2795, 2802, 2809, 2816, 2823, 2832, 2841, 2848, 2855, 2865, + 2875, 2885, 2895, 2905, 2915, 2920, 2921, 2922, 2924, 2930, + 2940, 2947, 2956, 2964, 2969, 2970, 2972, 2972, 2972, 2973, + 2973, 2974, 2975, 2976, 2977, 2978, 2980, 2990, 2999, 3006, + 3015, 3022, 3031, 3039, 3052, 3060, 3073, 3078, 3079, 3080, + 3080, 3081, 3081, 3081, 3082, 3084, 3096, 3108, 3120, 3135, + 3148, 3161, 3172, 3177, 3178, 3179, 3179, 3181, 3196 }; #endif @@ -2532,6 +2534,8 @@ yynewstate: | yynewstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); *yyssp = (yytype_int16) yystate; if (yyss + yystacksize - 1 <= yyssp) @@ -2594,8 +2598,6 @@ yysetstate: } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - if (yystate == YYFINAL) YYACCEPT; @@ -2663,7 +2665,6 @@ yybackup: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END - goto yynewstate; @@ -2698,16 +2699,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 189 "./util/configparser.y" /* yacc.c:1652 */ + case 16: +#line 190 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2707 "util/configparser.c" /* yacc.c:1652 */ +#line 2708 "util/configparser.c" break; case 212: -#line 282 "./util/configparser.y" /* yacc.c:1652 */ +#line 283 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2718,11 +2719,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2722 "util/configparser.c" /* yacc.c:1652 */ +#line 2723 "util/configparser.c" break; case 222: -#line 299 "./util/configparser.y" /* yacc.c:1652 */ +#line 300 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2733,11 +2734,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2737 "util/configparser.c" /* yacc.c:1652 */ +#line 2738 "util/configparser.c" break; case 231: -#line 316 "./util/configparser.y" /* yacc.c:1652 */ +#line 317 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2750,11 +2751,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2754 "util/configparser.c" /* yacc.c:1652 */ +#line 2755 "util/configparser.c" break; case 241: -#line 335 "./util/configparser.y" /* yacc.c:1652 */ +#line 336 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2770,11 +2771,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2774 "util/configparser.c" /* yacc.c:1652 */ +#line 2775 "util/configparser.c" break; case 252: -#line 359 "./util/configparser.y" /* yacc.c:1652 */ +#line 360 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2791,11 +2792,11 @@ yyreduce: } } -#line 2795 "util/configparser.c" /* yacc.c:1652 */ +#line 2796 "util/configparser.c" break; case 253: -#line 378 "./util/configparser.y" /* yacc.c:1652 */ +#line 379 "./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 && @@ -2810,21 +2811,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2814 "util/configparser.c" /* yacc.c:1652 */ +#line 2815 "util/configparser.c" break; case 254: -#line 395 "./util/configparser.y" /* yacc.c:1652 */ +#line 396 "./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 2824 "util/configparser.c" /* yacc.c:1652 */ +#line 2825 "util/configparser.c" break; case 255: -#line 403 "./util/configparser.y" /* yacc.c:1652 */ +#line 404 "./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) @@ -2832,21 +2833,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2836 "util/configparser.c" /* yacc.c:1652 */ +#line 2837 "util/configparser.c" break; case 256: -#line 413 "./util/configparser.y" /* yacc.c:1652 */ +#line 414 "./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 2846 "util/configparser.c" /* yacc.c:1652 */ +#line 2847 "util/configparser.c" break; case 257: -#line 421 "./util/configparser.y" /* yacc.c:1652 */ +#line 422 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2862,11 +2863,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2866 "util/configparser.c" /* yacc.c:1652 */ +#line 2867 "util/configparser.c" break; case 270: -#line 444 "./util/configparser.y" /* yacc.c:1652 */ +#line 445 "./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) @@ -2874,11 +2875,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2878 "util/configparser.c" /* yacc.c:1652 */ +#line 2879 "util/configparser.c" break; case 271: -#line 453 "./util/configparser.y" /* yacc.c:1652 */ +#line 454 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2886,11 +2887,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2890 "util/configparser.c" /* yacc.c:1652 */ +#line 2891 "util/configparser.c" break; case 272: -#line 462 "./util/configparser.y" /* yacc.c:1652 */ +#line 463 "./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) @@ -2900,11 +2901,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2904 "util/configparser.c" /* yacc.c:1652 */ +#line 2905 "util/configparser.c" break; case 273: -#line 473 "./util/configparser.y" /* yacc.c:1652 */ +#line 474 "./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) @@ -2912,11 +2913,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2916 "util/configparser.c" /* yacc.c:1652 */ +#line 2917 "util/configparser.c" break; case 274: -#line 482 "./util/configparser.y" /* yacc.c:1652 */ +#line 483 "./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) @@ -2924,11 +2925,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2928 "util/configparser.c" /* yacc.c:1652 */ +#line 2929 "util/configparser.c" break; case 275: -#line 491 "./util/configparser.y" /* yacc.c:1652 */ +#line 492 "./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) @@ -2936,11 +2937,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2940 "util/configparser.c" /* yacc.c:1652 */ +#line 2941 "util/configparser.c" break; case 276: -#line 500 "./util/configparser.y" /* yacc.c:1652 */ +#line 501 "./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) @@ -2950,11 +2951,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2954 "util/configparser.c" /* yacc.c:1652 */ +#line 2955 "util/configparser.c" break; case 277: -#line 511 "./util/configparser.y" /* yacc.c:1652 */ +#line 512 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2962,11 +2963,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2966 "util/configparser.c" /* yacc.c:1652 */ +#line 2967 "util/configparser.c" break; case 278: -#line 520 "./util/configparser.y" /* yacc.c:1652 */ +#line 521 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2977,11 +2978,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2981 "util/configparser.c" /* yacc.c:1652 */ +#line 2982 "util/configparser.c" break; case 279: -#line 532 "./util/configparser.y" /* yacc.c:1652 */ +#line 533 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2993,11 +2994,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2997 "util/configparser.c" /* yacc.c:1652 */ +#line 2998 "util/configparser.c" break; case 280: -#line 546 "./util/configparser.y" /* yacc.c:1652 */ +#line 547 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3011,11 +3012,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3015 "util/configparser.c" /* yacc.c:1652 */ +#line 3016 "util/configparser.c" break; case 281: -#line 561 "./util/configparser.y" /* yacc.c:1652 */ +#line 562 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3025,11 +3026,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3029 "util/configparser.c" /* yacc.c:1652 */ +#line 3030 "util/configparser.c" break; case 282: -#line 572 "./util/configparser.y" /* yacc.c:1652 */ +#line 573 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3045,11 +3046,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3049 "util/configparser.c" /* yacc.c:1652 */ +#line 3050 "util/configparser.c" break; case 283: -#line 589 "./util/configparser.y" /* yacc.c:1652 */ +#line 590 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3065,11 +3066,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3069 "util/configparser.c" /* yacc.c:1652 */ +#line 3070 "util/configparser.c" break; case 284: -#line 606 "./util/configparser.y" /* yacc.c:1652 */ +#line 607 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3085,11 +3086,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3089 "util/configparser.c" /* yacc.c:1652 */ +#line 3090 "util/configparser.c" break; case 285: -#line 623 "./util/configparser.y" /* yacc.c:1652 */ +#line 624 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3105,11 +3106,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3109 "util/configparser.c" /* yacc.c:1652 */ +#line 3110 "util/configparser.c" break; case 286: -#line 640 "./util/configparser.y" /* yacc.c:1652 */ +#line 641 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3123,11 +3124,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3127 "util/configparser.c" /* yacc.c:1652 */ +#line 3128 "util/configparser.c" break; case 287: -#line 655 "./util/configparser.y" /* yacc.c:1652 */ +#line 656 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3141,11 +3142,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3145 "util/configparser.c" /* yacc.c:1652 */ +#line 3146 "util/configparser.c" break; case 288: -#line 670 "./util/configparser.y" /* yacc.c:1652 */ +#line 671 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3157,11 +3158,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3161 "util/configparser.c" /* yacc.c:1652 */ +#line 3162 "util/configparser.c" break; case 289: -#line 683 "./util/configparser.y" /* yacc.c:1652 */ +#line 684 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3175,11 +3176,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3179 "util/configparser.c" /* yacc.c:1652 */ +#line 3180 "util/configparser.c" break; case 290: -#line 698 "./util/configparser.y" /* yacc.c:1652 */ +#line 699 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3187,11 +3188,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3191 "util/configparser.c" /* yacc.c:1652 */ +#line 3192 "util/configparser.c" break; case 291: -#line 707 "./util/configparser.y" /* yacc.c:1652 */ +#line 708 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3199,11 +3200,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3203 "util/configparser.c" /* yacc.c:1652 */ +#line 3204 "util/configparser.c" break; case 292: -#line 716 "./util/configparser.y" /* yacc.c:1652 */ +#line 717 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3211,11 +3212,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3215 "util/configparser.c" /* yacc.c:1652 */ +#line 3216 "util/configparser.c" break; case 293: -#line 725 "./util/configparser.y" /* yacc.c:1652 */ +#line 726 "./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) @@ -3223,11 +3224,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3227 "util/configparser.c" /* yacc.c:1652 */ +#line 3228 "util/configparser.c" break; case 294: -#line 734 "./util/configparser.y" /* yacc.c:1652 */ +#line 735 "./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) @@ -3235,11 +3236,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3239 "util/configparser.c" /* yacc.c:1652 */ +#line 3240 "util/configparser.c" break; case 295: -#line 743 "./util/configparser.y" /* yacc.c:1652 */ +#line 744 "./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) @@ -3247,11 +3248,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3251 "util/configparser.c" /* yacc.c:1652 */ +#line 3252 "util/configparser.c" break; case 296: -#line 752 "./util/configparser.y" /* yacc.c:1652 */ +#line 753 "./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) @@ -3259,11 +3260,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3263 "util/configparser.c" /* yacc.c:1652 */ +#line 3264 "util/configparser.c" break; case 297: -#line 761 "./util/configparser.y" /* yacc.c:1652 */ +#line 762 "./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) @@ -3271,11 +3272,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3275 "util/configparser.c" /* yacc.c:1652 */ +#line 3276 "util/configparser.c" break; case 298: -#line 770 "./util/configparser.y" /* yacc.c:1652 */ +#line 771 "./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) @@ -3283,11 +3284,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3287 "util/configparser.c" /* yacc.c:1652 */ +#line 3288 "util/configparser.c" break; case 299: -#line 779 "./util/configparser.y" /* yacc.c:1652 */ +#line 780 "./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) @@ -3295,11 +3296,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3299 "util/configparser.c" /* yacc.c:1652 */ +#line 3300 "util/configparser.c" break; case 300: -#line 788 "./util/configparser.y" /* yacc.c:1652 */ +#line 789 "./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) @@ -3307,11 +3308,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3311 "util/configparser.c" /* yacc.c:1652 */ +#line 3312 "util/configparser.c" break; case 301: -#line 797 "./util/configparser.y" /* yacc.c:1652 */ +#line 798 "./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) @@ -3319,11 +3320,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3323 "util/configparser.c" /* yacc.c:1652 */ +#line 3324 "util/configparser.c" break; case 302: -#line 806 "./util/configparser.y" /* yacc.c:1652 */ +#line 807 "./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) @@ -3331,11 +3332,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3335 "util/configparser.c" /* yacc.c:1652 */ +#line 3336 "util/configparser.c" break; case 303: -#line 815 "./util/configparser.y" /* yacc.c:1652 */ +#line 816 "./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) @@ -3343,11 +3344,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3347 "util/configparser.c" /* yacc.c:1652 */ +#line 3348 "util/configparser.c" break; case 304: -#line 824 "./util/configparser.y" /* yacc.c:1652 */ +#line 825 "./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) @@ -3359,11 +3360,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3363 "util/configparser.c" /* yacc.c:1652 */ +#line 3364 "util/configparser.c" break; case 305: -#line 837 "./util/configparser.y" /* yacc.c:1652 */ +#line 838 "./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) @@ -3371,11 +3372,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3375 "util/configparser.c" /* yacc.c:1652 */ +#line 3376 "util/configparser.c" break; case 306: -#line 846 "./util/configparser.y" /* yacc.c:1652 */ +#line 847 "./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) @@ -3387,11 +3388,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3391 "util/configparser.c" /* yacc.c:1652 */ +#line 3392 "util/configparser.c" break; case 307: -#line 859 "./util/configparser.y" /* yacc.c:1652 */ +#line 860 "./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) @@ -3399,11 +3400,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3403 "util/configparser.c" /* yacc.c:1652 */ +#line 3404 "util/configparser.c" break; case 308: -#line 868 "./util/configparser.y" /* yacc.c:1652 */ +#line 869 "./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) @@ -3411,11 +3412,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3415 "util/configparser.c" /* yacc.c:1652 */ +#line 3416 "util/configparser.c" break; case 309: -#line 877 "./util/configparser.y" /* yacc.c:1652 */ +#line 878 "./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) @@ -3423,31 +3424,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3427 "util/configparser.c" /* yacc.c:1652 */ +#line 3428 "util/configparser.c" break; case 310: -#line 886 "./util/configparser.y" /* yacc.c:1652 */ +#line 887 "./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 3437 "util/configparser.c" /* yacc.c:1652 */ +#line 3438 "util/configparser.c" break; case 311: -#line 893 "./util/configparser.y" /* yacc.c:1652 */ +#line 894 "./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 3447 "util/configparser.c" /* yacc.c:1652 */ +#line 3448 "util/configparser.c" break; case 312: -#line 900 "./util/configparser.y" /* yacc.c:1652 */ +#line 901 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3455,21 +3456,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3459 "util/configparser.c" /* yacc.c:1652 */ +#line 3460 "util/configparser.c" break; case 313: -#line 909 "./util/configparser.y" /* yacc.c:1652 */ +#line 910 "./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 3469 "util/configparser.c" /* yacc.c:1652 */ +#line 3470 "util/configparser.c" break; case 314: -#line 916 "./util/configparser.y" /* yacc.c:1652 */ +#line 917 "./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) @@ -3477,53 +3478,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3481 "util/configparser.c" /* yacc.c:1652 */ +#line 3482 "util/configparser.c" break; case 315: -#line 925 "./util/configparser.y" /* yacc.c:1652 */ +#line 926 "./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 3492 "util/configparser.c" /* yacc.c:1652 */ +#line 3493 "util/configparser.c" break; case 316: -#line 933 "./util/configparser.y" /* yacc.c:1652 */ +#line 934 "./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 3502 "util/configparser.c" /* yacc.c:1652 */ +#line 3503 "util/configparser.c" break; case 317: -#line 940 "./util/configparser.y" /* yacc.c:1652 */ +#line 941 "./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 3512 "util/configparser.c" /* yacc.c:1652 */ +#line 3513 "util/configparser.c" break; case 318: -#line 947 "./util/configparser.y" /* yacc.c:1652 */ +#line 948 "./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 3523 "util/configparser.c" /* yacc.c:1652 */ +#line 3524 "util/configparser.c" break; case 319: -#line 955 "./util/configparser.y" /* yacc.c:1652 */ +#line 956 "./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) @@ -3531,11 +3532,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3535 "util/configparser.c" /* yacc.c:1652 */ +#line 3536 "util/configparser.c" break; case 320: -#line 964 "./util/configparser.y" /* yacc.c:1652 */ +#line 965 "./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) @@ -3543,11 +3544,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3547 "util/configparser.c" /* yacc.c:1652 */ +#line 3548 "util/configparser.c" break; case 321: -#line 973 "./util/configparser.y" /* yacc.c:1652 */ +#line 974 "./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) @@ -3560,11 +3561,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3564 "util/configparser.c" /* yacc.c:1652 */ +#line 3565 "util/configparser.c" break; case 322: -#line 987 "./util/configparser.y" /* yacc.c:1652 */ +#line 988 "./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) @@ -3572,11 +3573,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3576 "util/configparser.c" /* yacc.c:1652 */ +#line 3577 "util/configparser.c" break; case 323: -#line 996 "./util/configparser.y" /* yacc.c:1652 */ +#line 997 "./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) @@ -3584,11 +3585,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3588 "util/configparser.c" /* yacc.c:1652 */ +#line 3589 "util/configparser.c" break; case 324: -#line 1005 "./util/configparser.y" /* yacc.c:1652 */ +#line 1006 "./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) @@ -3596,11 +3597,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3600 "util/configparser.c" /* yacc.c:1652 */ +#line 3601 "util/configparser.c" break; case 325: -#line 1014 "./util/configparser.y" /* yacc.c:1652 */ +#line 1015 "./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) @@ -3608,11 +3609,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3612 "util/configparser.c" /* yacc.c:1652 */ +#line 3613 "util/configparser.c" break; case 326: -#line 1023 "./util/configparser.y" /* yacc.c:1652 */ +#line 1024 "./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) @@ -3620,11 +3621,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3624 "util/configparser.c" /* yacc.c:1652 */ +#line 3625 "util/configparser.c" break; case 327: -#line 1032 "./util/configparser.y" /* yacc.c:1652 */ +#line 1033 "./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) @@ -3632,31 +3633,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3636 "util/configparser.c" /* yacc.c:1652 */ +#line 3637 "util/configparser.c" break; case 328: -#line 1041 "./util/configparser.y" /* yacc.c:1652 */ +#line 1042 "./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 3646 "util/configparser.c" /* yacc.c:1652 */ +#line 3647 "util/configparser.c" break; case 329: -#line 1048 "./util/configparser.y" /* yacc.c:1652 */ +#line 1049 "./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 3656 "util/configparser.c" /* yacc.c:1652 */ +#line 3657 "util/configparser.c" break; case 330: -#line 1055 "./util/configparser.y" /* yacc.c:1652 */ +#line 1056 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3681,105 +3682,105 @@ yyreduce: } } } -#line 3685 "util/configparser.c" /* yacc.c:1652 */ +#line 3686 "util/configparser.c" break; case 331: -#line 1081 "./util/configparser.y" /* yacc.c:1652 */ +#line 1082 "./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 3696 "util/configparser.c" /* yacc.c:1652 */ +#line 3697 "util/configparser.c" break; case 332: -#line 1089 "./util/configparser.y" /* yacc.c:1652 */ +#line 1090 "./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 3706 "util/configparser.c" /* yacc.c:1652 */ +#line 3707 "util/configparser.c" break; case 333: -#line 1096 "./util/configparser.y" /* yacc.c:1652 */ +#line 1097 "./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 3716 "util/configparser.c" /* yacc.c:1652 */ +#line 3717 "util/configparser.c" break; case 334: -#line 1103 "./util/configparser.y" /* yacc.c:1652 */ +#line 1104 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3726 "util/configparser.c" /* yacc.c:1652 */ +#line 3727 "util/configparser.c" break; case 335: -#line 1110 "./util/configparser.y" /* yacc.c:1652 */ +#line 1111 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3736 "util/configparser.c" /* yacc.c:1652 */ +#line 3737 "util/configparser.c" break; case 336: -#line 1117 "./util/configparser.y" /* yacc.c:1652 */ +#line 1118 "./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 3747 "util/configparser.c" /* yacc.c:1652 */ +#line 3748 "util/configparser.c" break; case 337: -#line 1125 "./util/configparser.y" /* yacc.c:1652 */ +#line 1126 "./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 3758 "util/configparser.c" /* yacc.c:1652 */ +#line 3759 "util/configparser.c" break; case 338: -#line 1133 "./util/configparser.y" /* yacc.c:1652 */ +#line 1134 "./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 3769 "util/configparser.c" /* yacc.c:1652 */ +#line 3770 "util/configparser.c" break; case 339: -#line 1141 "./util/configparser.y" /* yacc.c:1652 */ +#line 1142 "./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 3779 "util/configparser.c" /* yacc.c:1652 */ +#line 3780 "util/configparser.c" break; case 340: -#line 1148 "./util/configparser.y" /* yacc.c:1652 */ +#line 1149 "./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) @@ -3789,11 +3790,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3793 "util/configparser.c" /* yacc.c:1652 */ +#line 3794 "util/configparser.c" break; case 341: -#line 1159 "./util/configparser.y" /* yacc.c:1652 */ +#line 1160 "./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) @@ -3803,21 +3804,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3807 "util/configparser.c" /* yacc.c:1652 */ +#line 3808 "util/configparser.c" break; case 342: -#line 1170 "./util/configparser.y" /* yacc.c:1652 */ +#line 1171 "./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 3817 "util/configparser.c" /* yacc.c:1652 */ +#line 3818 "util/configparser.c" break; case 343: -#line 1177 "./util/configparser.y" /* yacc.c:1652 */ +#line 1178 "./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) @@ -3825,11 +3826,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3829 "util/configparser.c" /* yacc.c:1652 */ +#line 3830 "util/configparser.c" break; case 344: -#line 1186 "./util/configparser.y" /* yacc.c:1652 */ +#line 1187 "./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) @@ -3837,11 +3838,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3841 "util/configparser.c" /* yacc.c:1652 */ +#line 3842 "util/configparser.c" break; case 345: -#line 1195 "./util/configparser.y" /* yacc.c:1652 */ +#line 1196 "./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) @@ -3849,53 +3850,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3853 "util/configparser.c" /* yacc.c:1652 */ +#line 3854 "util/configparser.c" break; case 346: -#line 1204 "./util/configparser.y" /* yacc.c:1652 */ +#line 1205 "./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 3863 "util/configparser.c" /* yacc.c:1652 */ +#line 3864 "util/configparser.c" break; case 347: -#line 1211 "./util/configparser.y" /* yacc.c:1652 */ +#line 1212 "./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 3873 "util/configparser.c" /* yacc.c:1652 */ +#line 3874 "util/configparser.c" break; case 348: -#line 1218 "./util/configparser.y" /* yacc.c:1652 */ +#line 1219 "./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 3884 "util/configparser.c" /* yacc.c:1652 */ +#line 3885 "util/configparser.c" break; case 349: -#line 1226 "./util/configparser.y" /* yacc.c:1652 */ +#line 1227 "./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 3895 "util/configparser.c" /* yacc.c:1652 */ +#line 3896 "util/configparser.c" break; case 350: -#line 1234 "./util/configparser.y" /* yacc.c:1652 */ +#line 1235 "./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) @@ -3904,11 +3905,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3908 "util/configparser.c" /* yacc.c:1652 */ +#line 3909 "util/configparser.c" break; case 351: -#line 1244 "./util/configparser.y" /* yacc.c:1652 */ +#line 1245 "./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) @@ -3917,11 +3918,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3921 "util/configparser.c" /* yacc.c:1652 */ +#line 3922 "util/configparser.c" break; case 352: -#line 1254 "./util/configparser.y" /* yacc.c:1652 */ +#line 1255 "./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) @@ -3930,11 +3931,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3934 "util/configparser.c" /* yacc.c:1652 */ +#line 3935 "util/configparser.c" break; case 353: -#line 1264 "./util/configparser.y" /* yacc.c:1652 */ +#line 1265 "./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) @@ -3947,22 +3948,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3951 "util/configparser.c" /* yacc.c:1652 */ +#line 3952 "util/configparser.c" break; case 354: -#line 1278 "./util/configparser.y" /* yacc.c:1652 */ +#line 1279 "./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 3962 "util/configparser.c" /* yacc.c:1652 */ +#line 3963 "util/configparser.c" break; case 355: -#line 1286 "./util/configparser.y" /* yacc.c:1652 */ +#line 1287 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3974,11 +3975,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3978 "util/configparser.c" /* yacc.c:1652 */ +#line 3979 "util/configparser.c" break; case 356: -#line 1299 "./util/configparser.y" /* yacc.c:1652 */ +#line 1300 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3988,22 +3989,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" /* yacc.c:1652 */ +#line 3993 "util/configparser.c" break; case 357: -#line 1310 "./util/configparser.y" /* yacc.c:1652 */ +#line 1311 "./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 4003 "util/configparser.c" /* yacc.c:1652 */ +#line 4004 "util/configparser.c" break; case 358: -#line 1318 "./util/configparser.y" /* yacc.c:1652 */ +#line 1319 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4015,11 +4016,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4019 "util/configparser.c" /* yacc.c:1652 */ +#line 4020 "util/configparser.c" break; case 359: -#line 1331 "./util/configparser.y" /* yacc.c:1652 */ +#line 1332 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4027,11 +4028,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4031 "util/configparser.c" /* yacc.c:1652 */ +#line 4032 "util/configparser.c" break; case 360: -#line 1340 "./util/configparser.y" /* yacc.c:1652 */ +#line 1341 "./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) @@ -4039,11 +4040,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4043 "util/configparser.c" /* yacc.c:1652 */ +#line 4044 "util/configparser.c" break; case 361: -#line 1349 "./util/configparser.y" /* yacc.c:1652 */ +#line 1350 "./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) @@ -4051,11 +4052,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4055 "util/configparser.c" /* yacc.c:1652 */ +#line 4056 "util/configparser.c" break; case 362: -#line 1358 "./util/configparser.y" /* yacc.c:1652 */ +#line 1359 "./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) @@ -4064,11 +4065,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4068 "util/configparser.c" /* yacc.c:1652 */ +#line 4069 "util/configparser.c" break; case 363: -#line 1368 "./util/configparser.y" /* yacc.c:1652 */ +#line 1369 "./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) @@ -4077,22 +4078,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4081 "util/configparser.c" /* yacc.c:1652 */ +#line 4082 "util/configparser.c" break; case 364: -#line 1378 "./util/configparser.y" /* yacc.c:1652 */ +#line 1379 "./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 4092 "util/configparser.c" /* yacc.c:1652 */ +#line 4093 "util/configparser.c" break; case 365: -#line 1386 "./util/configparser.y" /* yacc.c:1652 */ +#line 1387 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4104,11 +4105,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4108 "util/configparser.c" /* yacc.c:1652 */ +#line 4109 "util/configparser.c" break; case 366: -#line 1399 "./util/configparser.y" /* yacc.c:1652 */ +#line 1400 "./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) @@ -4116,22 +4117,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4120 "util/configparser.c" /* yacc.c:1652 */ +#line 4121 "util/configparser.c" break; case 367: -#line 1408 "./util/configparser.y" /* yacc.c:1652 */ +#line 1409 "./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 4131 "util/configparser.c" /* yacc.c:1652 */ +#line 4132 "util/configparser.c" break; case 368: -#line 1416 "./util/configparser.y" /* yacc.c:1652 */ +#line 1417 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4139,22 +4140,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4143 "util/configparser.c" /* yacc.c:1652 */ +#line 4144 "util/configparser.c" break; case 369: -#line 1425 "./util/configparser.y" /* yacc.c:1652 */ +#line 1426 "./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 4154 "util/configparser.c" /* yacc.c:1652 */ +#line 4155 "util/configparser.c" break; case 370: -#line 1433 "./util/configparser.y" /* yacc.c:1652 */ +#line 1434 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4166,11 +4167,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4170 "util/configparser.c" /* yacc.c:1652 */ +#line 4171 "util/configparser.c" break; case 371: -#line 1446 "./util/configparser.y" /* yacc.c:1652 */ +#line 1447 "./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) @@ -4178,21 +4179,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4182 "util/configparser.c" /* yacc.c:1652 */ +#line 4183 "util/configparser.c" break; case 372: -#line 1455 "./util/configparser.y" /* yacc.c:1652 */ +#line 1456 "./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 4192 "util/configparser.c" /* yacc.c:1652 */ +#line 4193 "util/configparser.c" break; case 373: -#line 1462 "./util/configparser.y" /* yacc.c:1652 */ +#line 1463 "./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) @@ -4201,11 +4202,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4205 "util/configparser.c" /* yacc.c:1652 */ +#line 4206 "util/configparser.c" break; case 374: -#line 1472 "./util/configparser.y" /* yacc.c:1652 */ +#line 1473 "./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) @@ -4214,11 +4215,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" /* yacc.c:1652 */ +#line 4219 "util/configparser.c" break; case 375: -#line 1482 "./util/configparser.y" /* yacc.c:1652 */ +#line 1483 "./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) @@ -4227,11 +4228,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4231 "util/configparser.c" /* yacc.c:1652 */ +#line 4232 "util/configparser.c" break; case 376: -#line 1492 "./util/configparser.y" /* yacc.c:1652 */ +#line 1493 "./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) @@ -4240,11 +4241,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4244 "util/configparser.c" /* yacc.c:1652 */ +#line 4245 "util/configparser.c" break; case 377: -#line 1502 "./util/configparser.y" /* yacc.c:1652 */ +#line 1503 "./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) @@ -4253,11 +4254,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4257 "util/configparser.c" /* yacc.c:1652 */ +#line 4258 "util/configparser.c" break; case 378: -#line 1512 "./util/configparser.y" /* yacc.c:1652 */ +#line 1513 "./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) @@ -4266,11 +4267,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4270 "util/configparser.c" /* yacc.c:1652 */ +#line 4271 "util/configparser.c" break; case 379: -#line 1522 "./util/configparser.y" /* yacc.c:1652 */ +#line 1523 "./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) @@ -4279,11 +4280,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4283 "util/configparser.c" /* yacc.c:1652 */ +#line 4284 "util/configparser.c" break; case 380: -#line 1532 "./util/configparser.y" /* yacc.c:1652 */ +#line 1533 "./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) @@ -4292,41 +4293,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4296 "util/configparser.c" /* yacc.c:1652 */ +#line 4297 "util/configparser.c" break; case 381: -#line 1542 "./util/configparser.y" /* yacc.c:1652 */ +#line 1543 "./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 4306 "util/configparser.c" /* yacc.c:1652 */ +#line 4307 "util/configparser.c" break; case 382: -#line 1549 "./util/configparser.y" /* yacc.c:1652 */ +#line 1550 "./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 4316 "util/configparser.c" /* yacc.c:1652 */ +#line 4317 "util/configparser.c" break; case 383: -#line 1556 "./util/configparser.y" /* yacc.c:1652 */ +#line 1557 "./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 4326 "util/configparser.c" /* yacc.c:1652 */ +#line 4327 "util/configparser.c" break; case 384: -#line 1563 "./util/configparser.y" /* yacc.c:1652 */ +#line 1564 "./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) @@ -4334,11 +4335,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4338 "util/configparser.c" /* yacc.c:1652 */ +#line 4339 "util/configparser.c" break; case 385: -#line 1572 "./util/configparser.y" /* yacc.c:1652 */ +#line 1573 "./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) @@ -4346,11 +4347,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" /* yacc.c:1652 */ +#line 4351 "util/configparser.c" break; case 386: -#line 1581 "./util/configparser.y" /* yacc.c:1652 */ +#line 1582 "./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) @@ -4358,11 +4359,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4362 "util/configparser.c" /* yacc.c:1652 */ +#line 4363 "util/configparser.c" break; case 387: -#line 1590 "./util/configparser.y" /* yacc.c:1652 */ +#line 1591 "./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) @@ -4370,21 +4371,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4374 "util/configparser.c" /* yacc.c:1652 */ +#line 4375 "util/configparser.c" break; case 388: -#line 1599 "./util/configparser.y" /* yacc.c:1652 */ +#line 1600 "./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 4384 "util/configparser.c" /* yacc.c:1652 */ +#line 4385 "util/configparser.c" break; case 389: -#line 1606 "./util/configparser.y" /* yacc.c:1652 */ +#line 1607 "./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) @@ -4393,11 +4394,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4397 "util/configparser.c" /* yacc.c:1652 */ +#line 4398 "util/configparser.c" break; case 390: -#line 1616 "./util/configparser.y" /* yacc.c:1652 */ +#line 1617 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4416,21 +4417,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4420 "util/configparser.c" /* yacc.c:1652 */ +#line 4421 "util/configparser.c" break; case 391: -#line 1636 "./util/configparser.y" /* yacc.c:1652 */ +#line 1637 "./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 4430 "util/configparser.c" /* yacc.c:1652 */ +#line 4431 "util/configparser.c" break; case 392: -#line 1643 "./util/configparser.y" /* yacc.c:1652 */ +#line 1644 "./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) { @@ -4447,11 +4448,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4451 "util/configparser.c" /* yacc.c:1652 */ +#line 4452 "util/configparser.c" break; case 393: -#line 1661 "./util/configparser.y" /* yacc.c:1652 */ +#line 1662 "./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) { @@ -4463,11 +4464,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4467 "util/configparser.c" /* yacc.c:1652 */ +#line 4468 "util/configparser.c" break; case 394: -#line 1674 "./util/configparser.y" /* yacc.c:1652 */ +#line 1675 "./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) { @@ -4479,11 +4480,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4483 "util/configparser.c" /* yacc.c:1652 */ +#line 4484 "util/configparser.c" break; case 395: -#line 1687 "./util/configparser.y" /* yacc.c:1652 */ +#line 1688 "./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) @@ -4491,11 +4492,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4495 "util/configparser.c" /* yacc.c:1652 */ +#line 4496 "util/configparser.c" break; case 396: -#line 1696 "./util/configparser.y" /* yacc.c:1652 */ +#line 1697 "./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) @@ -4503,11 +4504,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4507 "util/configparser.c" /* yacc.c:1652 */ +#line 4508 "util/configparser.c" break; case 397: -#line 1705 "./util/configparser.y" /* yacc.c:1652 */ +#line 1706 "./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) @@ -4515,11 +4516,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4519 "util/configparser.c" /* yacc.c:1652 */ +#line 4520 "util/configparser.c" break; case 398: -#line 1714 "./util/configparser.y" /* yacc.c:1652 */ +#line 1715 "./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) @@ -4527,11 +4528,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4531 "util/configparser.c" /* yacc.c:1652 */ +#line 4532 "util/configparser.c" break; case 399: -#line 1723 "./util/configparser.y" /* yacc.c:1652 */ +#line 1724 "./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) @@ -4540,11 +4541,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4544 "util/configparser.c" /* yacc.c:1652 */ +#line 4545 "util/configparser.c" break; case 400: -#line 1733 "./util/configparser.y" /* yacc.c:1652 */ +#line 1734 "./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) @@ -4553,11 +4554,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4557 "util/configparser.c" /* yacc.c:1652 */ +#line 4558 "util/configparser.c" break; case 401: -#line 1743 "./util/configparser.y" /* yacc.c:1652 */ +#line 1744 "./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) @@ -4567,11 +4568,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4571 "util/configparser.c" /* yacc.c:1652 */ +#line 4572 "util/configparser.c" break; case 402: -#line 1754 "./util/configparser.y" /* yacc.c:1652 */ +#line 1755 "./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) @@ -4579,11 +4580,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4583 "util/configparser.c" /* yacc.c:1652 */ +#line 4584 "util/configparser.c" break; case 403: -#line 1763 "./util/configparser.y" /* yacc.c:1652 */ +#line 1764 "./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) @@ -4591,11 +4592,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4595 "util/configparser.c" /* yacc.c:1652 */ +#line 4596 "util/configparser.c" break; case 404: -#line 1772 "./util/configparser.y" /* yacc.c:1652 */ +#line 1773 "./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) @@ -4603,11 +4604,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4607 "util/configparser.c" /* yacc.c:1652 */ +#line 4608 "util/configparser.c" break; case 405: -#line 1781 "./util/configparser.y" /* yacc.c:1652 */ +#line 1782 "./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) @@ -4615,11 +4616,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4619 "util/configparser.c" /* yacc.c:1652 */ +#line 4620 "util/configparser.c" break; case 406: -#line 1790 "./util/configparser.y" /* yacc.c:1652 */ +#line 1791 "./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) @@ -4627,11 +4628,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4631 "util/configparser.c" /* yacc.c:1652 */ +#line 4632 "util/configparser.c" break; case 407: -#line 1799 "./util/configparser.y" /* yacc.c:1652 */ +#line 1800 "./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) @@ -4639,11 +4640,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4643 "util/configparser.c" /* yacc.c:1652 */ +#line 4644 "util/configparser.c" break; case 408: -#line 1808 "./util/configparser.y" /* yacc.c:1652 */ +#line 1809 "./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) @@ -4655,11 +4656,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4659 "util/configparser.c" /* yacc.c:1652 */ +#line 4660 "util/configparser.c" break; case 409: -#line 1821 "./util/configparser.y" /* yacc.c:1652 */ +#line 1822 "./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) @@ -4671,11 +4672,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4675 "util/configparser.c" /* yacc.c:1652 */ +#line 4676 "util/configparser.c" break; case 410: -#line 1834 "./util/configparser.y" /* yacc.c:1652 */ +#line 1835 "./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) @@ -4683,21 +4684,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4687 "util/configparser.c" /* yacc.c:1652 */ +#line 4688 "util/configparser.c" break; case 411: -#line 1843 "./util/configparser.y" /* yacc.c:1652 */ +#line 1844 "./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 4697 "util/configparser.c" /* yacc.c:1652 */ +#line 4698 "util/configparser.c" break; case 412: -#line 1850 "./util/configparser.y" /* yacc.c:1652 */ +#line 1851 "./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) @@ -4705,11 +4706,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4709 "util/configparser.c" /* yacc.c:1652 */ +#line 4710 "util/configparser.c" break; case 413: -#line 1859 "./util/configparser.y" /* yacc.c:1652 */ +#line 1860 "./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) @@ -4717,11 +4718,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4721 "util/configparser.c" /* yacc.c:1652 */ +#line 4722 "util/configparser.c" break; case 414: -#line 1868 "./util/configparser.y" /* yacc.c:1652 */ +#line 1869 "./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) @@ -4729,11 +4730,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4733 "util/configparser.c" /* yacc.c:1652 */ +#line 4734 "util/configparser.c" break; case 415: -#line 1877 "./util/configparser.y" /* yacc.c:1652 */ +#line 1878 "./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) @@ -4742,22 +4743,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4746 "util/configparser.c" /* yacc.c:1652 */ +#line 4747 "util/configparser.c" break; case 416: -#line 1886 "./util/configparser.y" /* yacc.c:1652 */ +#line 1887 "./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 4757 "util/configparser.c" /* yacc.c:1652 */ +#line 4758 "util/configparser.c" break; case 417: -#line 1894 "./util/configparser.y" /* yacc.c:1652 */ +#line 1895 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4769,22 +4770,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4773 "util/configparser.c" /* yacc.c:1652 */ +#line 4774 "util/configparser.c" break; case 418: -#line 1907 "./util/configparser.y" /* yacc.c:1652 */ +#line 1908 "./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 4784 "util/configparser.c" /* yacc.c:1652 */ +#line 4785 "util/configparser.c" break; case 419: -#line 1915 "./util/configparser.y" /* yacc.c:1652 */ +#line 1916 "./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 && @@ -4824,21 +4825,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4828 "util/configparser.c" /* yacc.c:1652 */ +#line 4829 "util/configparser.c" break; case 420: -#line 1956 "./util/configparser.y" /* yacc.c:1652 */ +#line 1957 "./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 4838 "util/configparser.c" /* yacc.c:1652 */ +#line 4839 "util/configparser.c" break; case 421: -#line 1963 "./util/configparser.y" /* yacc.c:1652 */ +#line 1964 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4852,11 +4853,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4856 "util/configparser.c" /* yacc.c:1652 */ +#line 4857 "util/configparser.c" break; case 422: -#line 1978 "./util/configparser.y" /* yacc.c:1652 */ +#line 1979 "./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) @@ -4865,11 +4866,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4869 "util/configparser.c" /* yacc.c:1652 */ +#line 4870 "util/configparser.c" break; case 423: -#line 1988 "./util/configparser.y" /* yacc.c:1652 */ +#line 1989 "./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) @@ -4878,41 +4879,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4882 "util/configparser.c" /* yacc.c:1652 */ +#line 4883 "util/configparser.c" break; case 424: -#line 1998 "./util/configparser.y" /* yacc.c:1652 */ +#line 1999 "./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 4892 "util/configparser.c" /* yacc.c:1652 */ +#line 4893 "util/configparser.c" break; case 425: -#line 2005 "./util/configparser.y" /* yacc.c:1652 */ +#line 2006 "./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 4902 "util/configparser.c" /* yacc.c:1652 */ +#line 4903 "util/configparser.c" break; case 426: -#line 2012 "./util/configparser.y" /* yacc.c:1652 */ +#line 2013 "./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 4912 "util/configparser.c" /* yacc.c:1652 */ +#line 4913 "util/configparser.c" break; case 427: -#line 2019 "./util/configparser.y" /* yacc.c:1652 */ +#line 2020 "./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) @@ -4920,22 +4921,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4924 "util/configparser.c" /* yacc.c:1652 */ +#line 4925 "util/configparser.c" break; case 428: -#line 2028 "./util/configparser.y" /* yacc.c:1652 */ +#line 2029 "./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 4935 "util/configparser.c" /* yacc.c:1652 */ +#line 4936 "util/configparser.c" break; case 429: -#line 2036 "./util/configparser.y" /* yacc.c:1652 */ +#line 2037 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4948,11 +4949,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4952 "util/configparser.c" /* yacc.c:1652 */ +#line 4953 "util/configparser.c" break; case 430: -#line 2050 "./util/configparser.y" /* yacc.c:1652 */ +#line 2051 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4972,11 +4973,11 @@ yyreduce: } } } -#line 4976 "util/configparser.c" /* yacc.c:1652 */ +#line 4977 "util/configparser.c" break; case 431: -#line 2071 "./util/configparser.y" /* yacc.c:1652 */ +#line 2072 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4996,11 +4997,11 @@ yyreduce: } } } -#line 5000 "util/configparser.c" /* yacc.c:1652 */ +#line 5001 "util/configparser.c" break; case 432: -#line 2092 "./util/configparser.y" /* yacc.c:1652 */ +#line 2093 "./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, @@ -5011,11 +5012,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5015 "util/configparser.c" /* yacc.c:1652 */ +#line 5016 "util/configparser.c" break; case 433: -#line 2104 "./util/configparser.y" /* yacc.c:1652 */ +#line 2105 "./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, @@ -5026,11 +5027,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5030 "util/configparser.c" /* yacc.c:1652 */ +#line 5031 "util/configparser.c" break; case 434: -#line 2116 "./util/configparser.y" /* yacc.c:1652 */ +#line 2117 "./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, @@ -5041,11 +5042,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5045 "util/configparser.c" /* yacc.c:1652 */ +#line 5046 "util/configparser.c" break; case 435: -#line 2128 "./util/configparser.y" /* yacc.c:1652 */ +#line 2129 "./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, @@ -5053,11 +5054,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5057 "util/configparser.c" /* yacc.c:1652 */ +#line 5058 "util/configparser.c" break; case 436: -#line 2137 "./util/configparser.y" /* yacc.c:1652 */ +#line 2138 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5077,11 +5078,11 @@ yyreduce: } } } -#line 5081 "util/configparser.c" /* yacc.c:1652 */ +#line 5082 "util/configparser.c" break; case 437: -#line 2158 "./util/configparser.y" /* yacc.c:1652 */ +#line 2159 "./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) @@ -5089,11 +5090,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5093 "util/configparser.c" /* yacc.c:1652 */ +#line 5094 "util/configparser.c" break; case 438: -#line 2168 "./util/configparser.y" /* yacc.c:1652 */ +#line 2169 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5101,33 +5102,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5105 "util/configparser.c" /* yacc.c:1652 */ +#line 5106 "util/configparser.c" break; case 439: -#line 2177 "./util/configparser.y" /* yacc.c:1652 */ +#line 2178 "./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 5116 "util/configparser.c" /* yacc.c:1652 */ +#line 5117 "util/configparser.c" break; case 440: -#line 2185 "./util/configparser.y" /* yacc.c:1652 */ +#line 2186 "./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 5127 "util/configparser.c" /* yacc.c:1652 */ +#line 5128 "util/configparser.c" break; case 441: -#line 2193 "./util/configparser.y" /* yacc.c:1652 */ +#line 2194 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5139,11 +5140,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5143 "util/configparser.c" /* yacc.c:1652 */ +#line 5144 "util/configparser.c" break; case 442: -#line 2206 "./util/configparser.y" /* yacc.c:1652 */ +#line 2207 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5155,11 +5156,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5159 "util/configparser.c" /* yacc.c:1652 */ +#line 5160 "util/configparser.c" break; case 443: -#line 2219 "./util/configparser.y" /* yacc.c:1652 */ +#line 2220 "./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) { @@ -5173,11 +5174,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5177 "util/configparser.c" /* yacc.c:1652 */ +#line 5178 "util/configparser.c" break; case 444: -#line 2234 "./util/configparser.y" /* yacc.c:1652 */ +#line 2235 "./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) { @@ -5191,11 +5192,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5195 "util/configparser.c" /* yacc.c:1652 */ +#line 5196 "util/configparser.c" break; case 445: -#line 2249 "./util/configparser.y" /* yacc.c:1652 */ +#line 2250 "./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) @@ -5203,11 +5204,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5207 "util/configparser.c" /* yacc.c:1652 */ +#line 5208 "util/configparser.c" break; case 446: -#line 2258 "./util/configparser.y" /* yacc.c:1652 */ +#line 2259 "./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) @@ -5215,20 +5216,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5219 "util/configparser.c" /* yacc.c:1652 */ +#line 5220 "util/configparser.c" break; case 447: -#line 2267 "./util/configparser.y" /* yacc.c:1652 */ +#line 2268 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5228 "util/configparser.c" /* yacc.c:1652 */ +#line 5229 "util/configparser.c" break; case 448: -#line 2273 "./util/configparser.y" /* yacc.c:1652 */ +#line 2274 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5236,11 +5237,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5240 "util/configparser.c" /* yacc.c:1652 */ +#line 5241 "util/configparser.c" break; case 449: -#line 2282 "./util/configparser.y" /* yacc.c:1652 */ +#line 2283 "./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) @@ -5248,11 +5249,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5252 "util/configparser.c" /* yacc.c:1652 */ +#line 5253 "util/configparser.c" break; case 450: -#line 2291 "./util/configparser.y" /* yacc.c:1652 */ +#line 2292 "./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) @@ -5261,11 +5262,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5265 "util/configparser.c" /* yacc.c:1652 */ +#line 5266 "util/configparser.c" break; case 451: -#line 2301 "./util/configparser.y" /* yacc.c:1652 */ +#line 2302 "./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) @@ -5274,11 +5275,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5278 "util/configparser.c" /* yacc.c:1652 */ +#line 5279 "util/configparser.c" break; case 452: -#line 2311 "./util/configparser.y" /* yacc.c:1652 */ +#line 2312 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5290,11 +5291,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5294 "util/configparser.c" /* yacc.c:1652 */ +#line 5295 "util/configparser.c" break; case 453: -#line 2324 "./util/configparser.y" /* yacc.c:1652 */ +#line 2325 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5306,11 +5307,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5310 "util/configparser.c" /* yacc.c:1652 */ +#line 5311 "util/configparser.c" break; case 454: -#line 2337 "./util/configparser.y" /* yacc.c:1652 */ +#line 2338 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5321,11 +5322,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5325 "util/configparser.c" /* yacc.c:1652 */ +#line 5326 "util/configparser.c" break; case 455: -#line 2349 "./util/configparser.y" /* yacc.c:1652 */ +#line 2350 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5338,11 +5339,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5342 "util/configparser.c" /* yacc.c:1652 */ +#line 5343 "util/configparser.c" break; case 456: -#line 2363 "./util/configparser.y" /* yacc.c:1652 */ +#line 2364 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5353,11 +5354,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5357 "util/configparser.c" /* yacc.c:1652 */ +#line 5358 "util/configparser.c" break; case 457: -#line 2375 "./util/configparser.y" /* yacc.c:1652 */ +#line 2376 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5370,11 +5371,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5374 "util/configparser.c" /* yacc.c:1652 */ +#line 5375 "util/configparser.c" break; case 458: -#line 2389 "./util/configparser.y" /* yacc.c:1652 */ +#line 2390 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5383,31 +5384,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5387 "util/configparser.c" /* yacc.c:1652 */ +#line 5388 "util/configparser.c" break; case 459: -#line 2399 "./util/configparser.y" /* yacc.c:1652 */ +#line 2400 "./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 5397 "util/configparser.c" /* yacc.c:1652 */ +#line 5398 "util/configparser.c" break; case 460: -#line 2406 "./util/configparser.y" /* yacc.c:1652 */ +#line 2407 "./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 5407 "util/configparser.c" /* yacc.c:1652 */ +#line 5408 "util/configparser.c" break; case 461: -#line 2413 "./util/configparser.y" /* yacc.c:1652 */ +#line 2414 "./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) @@ -5415,11 +5416,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5419 "util/configparser.c" /* yacc.c:1652 */ +#line 5420 "util/configparser.c" break; case 462: -#line 2422 "./util/configparser.y" /* yacc.c:1652 */ +#line 2423 "./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) @@ -5427,11 +5428,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5431 "util/configparser.c" /* yacc.c:1652 */ +#line 5432 "util/configparser.c" break; case 463: -#line 2431 "./util/configparser.y" /* yacc.c:1652 */ +#line 2432 "./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) @@ -5440,11 +5441,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5444 "util/configparser.c" /* yacc.c:1652 */ +#line 5445 "util/configparser.c" break; case 464: -#line 2441 "./util/configparser.y" /* yacc.c:1652 */ +#line 2442 "./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) @@ -5453,11 +5454,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5457 "util/configparser.c" /* yacc.c:1652 */ +#line 5458 "util/configparser.c" break; case 465: -#line 2451 "./util/configparser.y" /* yacc.c:1652 */ +#line 2452 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5466,31 +5467,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5470 "util/configparser.c" /* yacc.c:1652 */ +#line 5471 "util/configparser.c" break; case 466: -#line 2461 "./util/configparser.y" /* yacc.c:1652 */ +#line 2462 "./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 5480 "util/configparser.c" /* yacc.c:1652 */ +#line 5481 "util/configparser.c" break; case 467: -#line 2468 "./util/configparser.y" /* yacc.c:1652 */ +#line 2469 "./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 5490 "util/configparser.c" /* yacc.c:1652 */ +#line 5491 "util/configparser.c" break; case 468: -#line 2475 "./util/configparser.y" /* yacc.c:1652 */ +#line 2476 "./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) @@ -5498,11 +5499,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5502 "util/configparser.c" /* yacc.c:1652 */ +#line 5503 "util/configparser.c" break; case 469: -#line 2484 "./util/configparser.y" /* yacc.c:1652 */ +#line 2485 "./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) @@ -5510,11 +5511,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5514 "util/configparser.c" /* yacc.c:1652 */ +#line 5515 "util/configparser.c" break; case 470: -#line 2493 "./util/configparser.y" /* yacc.c:1652 */ +#line 2494 "./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) @@ -5523,11 +5524,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5527 "util/configparser.c" /* yacc.c:1652 */ +#line 5528 "util/configparser.c" break; case 471: -#line 2503 "./util/configparser.y" /* yacc.c:1652 */ +#line 2504 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5536,52 +5537,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5540 "util/configparser.c" /* yacc.c:1652 */ +#line 5541 "util/configparser.c" break; case 472: -#line 2513 "./util/configparser.y" /* yacc.c:1652 */ +#line 2514 "./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 5550 "util/configparser.c" /* yacc.c:1652 */ +#line 5551 "util/configparser.c" break; case 473: -#line 2520 "./util/configparser.y" /* yacc.c:1652 */ +#line 2521 "./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 5560 "util/configparser.c" /* yacc.c:1652 */ +#line 5561 "util/configparser.c" break; case 474: -#line 2527 "./util/configparser.y" /* yacc.c:1652 */ +#line 2528 "./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 5570 "util/configparser.c" /* yacc.c:1652 */ +#line 5571 "util/configparser.c" break; case 475: -#line 2534 "./util/configparser.y" /* yacc.c:1652 */ +#line 2535 "./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 5581 "util/configparser.c" /* yacc.c:1652 */ +#line 5582 "util/configparser.c" break; case 476: -#line 2542 "./util/configparser.y" /* yacc.c:1652 */ +#line 2543 "./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) @@ -5590,11 +5591,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5594 "util/configparser.c" /* yacc.c:1652 */ +#line 5595 "util/configparser.c" break; case 477: -#line 2552 "./util/configparser.y" /* yacc.c:1652 */ +#line 2553 "./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) @@ -5603,11 +5604,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5607 "util/configparser.c" /* yacc.c:1652 */ +#line 5608 "util/configparser.c" break; case 478: -#line 2562 "./util/configparser.y" /* yacc.c:1652 */ +#line 2563 "./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) @@ -5616,11 +5617,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5620 "util/configparser.c" /* yacc.c:1652 */ +#line 5621 "util/configparser.c" break; case 479: -#line 2572 "./util/configparser.y" /* yacc.c:1652 */ +#line 2573 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5629,11 +5630,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5633 "util/configparser.c" /* yacc.c:1652 */ +#line 5634 "util/configparser.c" break; case 480: -#line 2582 "./util/configparser.y" /* yacc.c:1652 */ +#line 2583 "./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 && @@ -5671,11 +5672,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5675 "util/configparser.c" /* yacc.c:1652 */ +#line 5676 "util/configparser.c" break; case 481: -#line 2621 "./util/configparser.y" /* yacc.c:1652 */ +#line 2622 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5684,33 +5685,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5688 "util/configparser.c" /* yacc.c:1652 */ +#line 5689 "util/configparser.c" break; case 482: -#line 2631 "./util/configparser.y" /* yacc.c:1652 */ +#line 2632 "./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 5699 "util/configparser.c" /* yacc.c:1652 */ +#line 5700 "util/configparser.c" break; case 483: -#line 2639 "./util/configparser.y" /* yacc.c:1652 */ +#line 2640 "./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 5710 "util/configparser.c" /* yacc.c:1652 */ +#line 5711 "util/configparser.c" break; case 484: -#line 2647 "./util/configparser.y" /* yacc.c:1652 */ +#line 2648 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5724,11 +5725,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5728 "util/configparser.c" /* yacc.c:1652 */ +#line 5729 "util/configparser.c" break; case 485: -#line 2662 "./util/configparser.y" /* yacc.c:1652 */ +#line 2663 "./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) @@ -5736,19 +5737,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5740 "util/configparser.c" /* yacc.c:1652 */ +#line 5741 "util/configparser.c" break; case 486: -#line 2671 "./util/configparser.y" /* yacc.c:1652 */ +#line 2672 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5748 "util/configparser.c" /* yacc.c:1652 */ +#line 5749 "util/configparser.c" break; case 497: -#line 2682 "./util/configparser.y" /* yacc.c:1652 */ +#line 2683 "./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) @@ -5757,11 +5758,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5761 "util/configparser.c" /* yacc.c:1652 */ +#line 5762 "util/configparser.c" break; case 498: -#line 2692 "./util/configparser.y" /* yacc.c:1652 */ +#line 2693 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5769,79 +5770,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5773 "util/configparser.c" /* yacc.c:1652 */ +#line 5774 "util/configparser.c" break; case 499: -#line 2701 "./util/configparser.y" /* yacc.c:1652 */ +#line 2702 "./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 5783 "util/configparser.c" /* yacc.c:1652 */ +#line 5784 "util/configparser.c" break; case 500: -#line 2708 "./util/configparser.y" /* yacc.c:1652 */ +#line 2709 "./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 5793 "util/configparser.c" /* yacc.c:1652 */ +#line 5794 "util/configparser.c" break; case 501: -#line 2715 "./util/configparser.y" /* yacc.c:1652 */ +#line 2716 "./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 5803 "util/configparser.c" /* yacc.c:1652 */ +#line 5804 "util/configparser.c" break; case 502: -#line 2722 "./util/configparser.y" /* yacc.c:1652 */ +#line 2723 "./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 5813 "util/configparser.c" /* yacc.c:1652 */ +#line 5814 "util/configparser.c" break; case 503: -#line 2729 "./util/configparser.y" /* yacc.c:1652 */ +#line 2730 "./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 5823 "util/configparser.c" /* yacc.c:1652 */ +#line 5824 "util/configparser.c" break; case 504: -#line 2736 "./util/configparser.y" /* yacc.c:1652 */ +#line 2737 "./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 5833 "util/configparser.c" /* yacc.c:1652 */ +#line 5834 "util/configparser.c" break; case 505: -#line 2743 "./util/configparser.y" /* yacc.c:1652 */ +#line 2744 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5841 "util/configparser.c" /* yacc.c:1652 */ +#line 5842 "util/configparser.c" break; case 526: -#line 2763 "./util/configparser.y" /* yacc.c:1652 */ +#line 2764 "./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) @@ -5849,31 +5850,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5853 "util/configparser.c" /* yacc.c:1652 */ +#line 5854 "util/configparser.c" break; case 527: -#line 2772 "./util/configparser.y" /* yacc.c:1652 */ +#line 2773 "./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 5863 "util/configparser.c" /* yacc.c:1652 */ +#line 5864 "util/configparser.c" break; case 528: -#line 2779 "./util/configparser.y" /* yacc.c:1652 */ +#line 2780 "./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 5873 "util/configparser.c" /* yacc.c:1652 */ +#line 5874 "util/configparser.c" break; case 529: -#line 2786 "./util/configparser.y" /* yacc.c:1652 */ +#line 2787 "./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) @@ -5881,51 +5882,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5885 "util/configparser.c" /* yacc.c:1652 */ +#line 5886 "util/configparser.c" break; case 530: -#line 2795 "./util/configparser.y" /* yacc.c:1652 */ +#line 2796 "./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 5895 "util/configparser.c" /* yacc.c:1652 */ +#line 5896 "util/configparser.c" break; case 531: -#line 2802 "./util/configparser.y" /* yacc.c:1652 */ +#line 2803 "./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 5905 "util/configparser.c" /* yacc.c:1652 */ +#line 5906 "util/configparser.c" break; case 532: -#line 2809 "./util/configparser.y" /* yacc.c:1652 */ +#line 2810 "./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 5915 "util/configparser.c" /* yacc.c:1652 */ +#line 5916 "util/configparser.c" break; case 533: -#line 2816 "./util/configparser.y" /* yacc.c:1652 */ +#line 2817 "./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 5925 "util/configparser.c" /* yacc.c:1652 */ +#line 5926 "util/configparser.c" break; case 534: -#line 2823 "./util/configparser.y" /* yacc.c:1652 */ +#line 2824 "./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) @@ -5933,11 +5934,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5937 "util/configparser.c" /* yacc.c:1652 */ +#line 5938 "util/configparser.c" break; case 535: -#line 2832 "./util/configparser.y" /* yacc.c:1652 */ +#line 2833 "./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) @@ -5945,31 +5946,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5949 "util/configparser.c" /* yacc.c:1652 */ +#line 5950 "util/configparser.c" break; case 536: -#line 2841 "./util/configparser.y" /* yacc.c:1652 */ +#line 2842 "./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 5959 "util/configparser.c" /* yacc.c:1652 */ +#line 5960 "util/configparser.c" break; case 537: -#line 2848 "./util/configparser.y" /* yacc.c:1652 */ +#line 2849 "./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 5969 "util/configparser.c" /* yacc.c:1652 */ +#line 5970 "util/configparser.c" break; case 538: -#line 2855 "./util/configparser.y" /* yacc.c:1652 */ +#line 2856 "./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) @@ -5978,11 +5979,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5982 "util/configparser.c" /* yacc.c:1652 */ +#line 5983 "util/configparser.c" break; case 539: -#line 2865 "./util/configparser.y" /* yacc.c:1652 */ +#line 2866 "./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) @@ -5991,11 +5992,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5995 "util/configparser.c" /* yacc.c:1652 */ +#line 5996 "util/configparser.c" break; case 540: -#line 2875 "./util/configparser.y" /* yacc.c:1652 */ +#line 2876 "./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) @@ -6004,11 +6005,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6008 "util/configparser.c" /* yacc.c:1652 */ +#line 6009 "util/configparser.c" break; case 541: -#line 2885 "./util/configparser.y" /* yacc.c:1652 */ +#line 2886 "./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) @@ -6017,11 +6018,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6021 "util/configparser.c" /* yacc.c:1652 */ +#line 6022 "util/configparser.c" break; case 542: -#line 2895 "./util/configparser.y" /* yacc.c:1652 */ +#line 2896 "./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) @@ -6030,11 +6031,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6034 "util/configparser.c" /* yacc.c:1652 */ +#line 6035 "util/configparser.c" break; case 543: -#line 2905 "./util/configparser.y" /* yacc.c:1652 */ +#line 2906 "./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) @@ -6043,29 +6044,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6047 "util/configparser.c" /* yacc.c:1652 */ +#line 6048 "util/configparser.c" break; case 544: -#line 2915 "./util/configparser.y" /* yacc.c:1652 */ +#line 2916 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6055 "util/configparser.c" /* yacc.c:1652 */ +#line 6056 "util/configparser.c" break; case 548: -#line 2924 "./util/configparser.y" /* yacc.c:1652 */ +#line 2925 "./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 6065 "util/configparser.c" /* yacc.c:1652 */ +#line 6066 "util/configparser.c" break; case 549: -#line 2930 "./util/configparser.y" /* yacc.c:1652 */ +#line 2931 "./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) @@ -6074,21 +6075,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6078 "util/configparser.c" /* yacc.c:1652 */ +#line 6079 "util/configparser.c" break; case 550: -#line 2940 "./util/configparser.y" /* yacc.c:1652 */ +#line 2941 "./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 6088 "util/configparser.c" /* yacc.c:1652 */ +#line 6089 "util/configparser.c" break; case 551: -#line 2947 "./util/configparser.y" /* yacc.c:1652 */ +#line 2948 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6096,30 +6097,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6100 "util/configparser.c" /* yacc.c:1652 */ +#line 6101 "util/configparser.c" break; case 552: -#line 2956 "./util/configparser.y" /* yacc.c:1652 */ +#line 2957 "./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 6111 "util/configparser.c" /* yacc.c:1652 */ +#line 6112 "util/configparser.c" break; case 553: -#line 2964 "./util/configparser.y" /* yacc.c:1652 */ +#line 2965 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6119 "util/configparser.c" /* yacc.c:1652 */ +#line 6120 "util/configparser.c" break; case 566: -#line 2980 "./util/configparser.y" /* yacc.c:1652 */ +#line 2981 "./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) @@ -6127,11 +6128,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6131 "util/configparser.c" /* yacc.c:1652 */ +#line 6132 "util/configparser.c" break; case 567: -#line 2990 "./util/configparser.y" /* yacc.c:1652 */ +#line 2991 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6139,21 +6140,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6143 "util/configparser.c" /* yacc.c:1652 */ +#line 6144 "util/configparser.c" break; case 568: -#line 2999 "./util/configparser.y" /* yacc.c:1652 */ +#line 3000 "./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 6153 "util/configparser.c" /* yacc.c:1652 */ +#line 6154 "util/configparser.c" break; case 569: -#line 3006 "./util/configparser.y" /* yacc.c:1652 */ +#line 3007 "./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))) @@ -6161,21 +6162,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6165 "util/configparser.c" /* yacc.c:1652 */ +#line 6166 "util/configparser.c" break; case 570: -#line 3015 "./util/configparser.y" /* yacc.c:1652 */ +#line 3016 "./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 6175 "util/configparser.c" /* yacc.c:1652 */ +#line 6176 "util/configparser.c" break; case 571: -#line 3022 "./util/configparser.y" /* yacc.c:1652 */ +#line 3023 "./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))) @@ -6183,22 +6184,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6187 "util/configparser.c" /* yacc.c:1652 */ +#line 6188 "util/configparser.c" break; case 572: -#line 3031 "./util/configparser.y" /* yacc.c:1652 */ +#line 3032 "./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 6198 "util/configparser.c" /* yacc.c:1652 */ +#line 6199 "util/configparser.c" break; case 573: -#line 3039 "./util/configparser.y" /* yacc.c:1652 */ +#line 3040 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6210,22 +6211,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6214 "util/configparser.c" /* yacc.c:1652 */ +#line 6215 "util/configparser.c" break; case 574: -#line 3052 "./util/configparser.y" /* yacc.c:1652 */ +#line 3053 "./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 6225 "util/configparser.c" /* yacc.c:1652 */ +#line 6226 "util/configparser.c" break; case 575: -#line 3060 "./util/configparser.y" /* yacc.c:1652 */ +#line 3061 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6237,19 +6238,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6241 "util/configparser.c" /* yacc.c:1652 */ +#line 6242 "util/configparser.c" break; case 576: -#line 3073 "./util/configparser.y" /* yacc.c:1652 */ +#line 3074 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6249 "util/configparser.c" /* yacc.c:1652 */ +#line 6250 "util/configparser.c" break; case 585: -#line 3083 "./util/configparser.y" /* yacc.c:1652 */ +#line 3085 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6260,11 +6261,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6264 "util/configparser.c" /* yacc.c:1652 */ +#line 6265 "util/configparser.c" break; case 586: -#line 3095 "./util/configparser.y" /* yacc.c:1652 */ +#line 3097 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6275,11 +6276,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6279 "util/configparser.c" /* yacc.c:1652 */ +#line 6280 "util/configparser.c" break; case 587: -#line 3107 "./util/configparser.y" /* yacc.c:1652 */ +#line 3109 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6290,11 +6291,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6294 "util/configparser.c" /* yacc.c:1652 */ +#line 6295 "util/configparser.c" break; case 588: -#line 3119 "./util/configparser.y" /* yacc.c:1652 */ +#line 3121 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6308,11 +6309,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6312 "util/configparser.c" /* yacc.c:1652 */ +#line 6313 "util/configparser.c" break; case 589: -#line 3134 "./util/configparser.y" /* yacc.c:1652 */ +#line 3136 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6324,11 +6325,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6328 "util/configparser.c" /* yacc.c:1652 */ +#line 6329 "util/configparser.c" break; case 590: -#line 3147 "./util/configparser.y" /* yacc.c:1652 */ +#line 3149 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6340,11 +6341,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6344 "util/configparser.c" /* yacc.c:1652 */ +#line 6345 "util/configparser.c" break; case 591: -#line 3160 "./util/configparser.y" /* yacc.c:1652 */ +#line 3162 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6354,19 +6355,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6358 "util/configparser.c" /* yacc.c:1652 */ +#line 6359 "util/configparser.c" break; case 592: -#line 3171 "./util/configparser.y" /* yacc.c:1652 */ +#line 3173 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6366 "util/configparser.c" /* yacc.c:1652 */ +#line 6367 "util/configparser.c" break; case 597: -#line 3180 "./util/configparser.y" /* yacc.c:1652 */ +#line 3182 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6380,11 +6381,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6384 "util/configparser.c" /* yacc.c:1652 */ +#line 6385 "util/configparser.c" break; case 598: -#line 3195 "./util/configparser.y" /* yacc.c:1652 */ +#line 3197 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6398,11 +6399,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6402 "util/configparser.c" /* yacc.c:1652 */ +#line 6403 "util/configparser.c" break; -#line 6406 "util/configparser.c" /* yacc.c:1652 */ +#line 6407 "util/configparser.c" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6633,7 +6635,7 @@ yyreturn: #endif return yyresult; } -#line 3209 "./util/configparser.y" /* yacc.c:1918 */ +#line 3211 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 659dfe74d..2e4567b41 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.4.1. */ /* Bison interface for Yacc-like parsers in C @@ -623,16 +623,15 @@ extern int yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 66 "./util/configparser.y" /* yacc.c:1921 */ +#line 66 "./util/configparser.y" char* str; -#line 634 "util/configparser.h" /* yacc.c:1921 */ -}; +#line 633 "util/configparser.h" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index 30d95a5ac..0f6e06b97 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -161,7 +161,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED -%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT VAR_CACHEDB_REDISEXPIRERECORDS +%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT +%token VAR_CACHEDB_REDISEXPIRERECORDS %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL @@ -3077,7 +3078,8 @@ cachedbstart: VAR_CACHEDB contents_cachedb: contents_cachedb content_cachedb | ; content_cachedb: cachedb_backend_name | cachedb_secret_seed | - redis_server_host | redis_server_port | redis_timeout | redis_expire_records + redis_server_host | redis_server_port | redis_timeout | + redis_expire_records ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { From 33a2613a490bc53a99001976af00566afc03eb6f Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 6 Apr 2020 12:32:18 +0200 Subject: [PATCH 200/235] - More documentation for redis-expire-records option. --- doc/Changelog | 3 +++ doc/example.conf.in | 4 +++- doc/unbound.conf.5.in | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 446bc6f5f..3e5a93ffa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +6 April 2020: George + - More documentation for redis-expire-records option. + 1 April 2020: George - Merge PR #206: Redis TTL, by Talkabout. diff --git a/doc/example.conf.in b/doc/example.conf.in index 091948e2d..47c16ca2e 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1013,10 +1013,12 @@ remote-control: # redis-server-port: 6379 # # timeout (in ms) for communication with the redis server # redis-timeout: 100 +# # set timeout on redis records based on DNS response TTL +# redis-expire-records: no # IPSet # Add specify domain into set via ipset. -# Note: To enable ipset needs run unbound as root user. +# Note: To enable ipset unbound needs to run as root user. # ipset: # # set name for ip v4 addresses # name-v4: "list-v4" diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 19fb2e5eb..598f3e8b0 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2076,6 +2076,11 @@ even if some data have expired in terms of DNS TTL or the Redis server has cached too much data; if necessary the Redis server must be configured to limit the cache size, preferably with some kind of least-recently-used eviction policy. +Additionaly, the \fBredis\-expire\-records\fR option can be used in order to +set the relative DNS TTL of the message as timeout to the Redis records; keep +in mind that some additional memory is used per key and that the expire +information is stored as absolute Unix timestamps in Redis (computer time must +be stable). This backend uses synchronous communication with the Redis server based on the assumption that the communication is stable and sufficiently fast. From 03a37d1ff6744308493bfa5c20dc2dd2f2522022 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 6 Apr 2020 18:00:06 +0200 Subject: [PATCH 201/235] - Keep track of number of timeouts. Use this counter to determine if capsforid fallback should be started. --- doc/Changelog | 4 ++++ iterator/iterator.c | 11 ++++++----- iterator/iterator.h | 5 +++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 3e5a93ffa..c095c47eb 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +6 April 2020: Ralph + - Keep track of number of timeouts. Use this counter to determine if + capsforid fallback should be started. + 6 April 2020: George - More documentation for redis-expire-records option. diff --git a/iterator/iterator.c b/iterator/iterator.c index 1e0113a87..eea2f2fb2 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -159,7 +159,7 @@ iter_new(struct module_qstate* qstate, int id) iq->qchase = qstate->qinfo; outbound_list_init(&iq->outlist); iq->minimise_count = 0; - iq->minimise_timeout_count = 0; + iq->timeout_count = 0; if (qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; else @@ -2190,7 +2190,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->qinfo_out.qname = iq->qchase.qname; iq->qinfo_out.qname_len = iq->qchase.qname_len; iq->minimise_count++; - iq->minimise_timeout_count = 0; + iq->timeout_count = 0; iter_dec_attempts(iq->dp, 1); @@ -2249,7 +2249,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { - if(iq->minimise_timeout_count < MAX_MINIMISE_TIMEOUT_COUNT) + if(iq->timeout_count < MAX_MINIMISE_TIMEOUT_COUNT) /* Do not increment qname, continue incrementing next * iteration */ iq->minimisation_state = MINIMISE_STATE; @@ -2586,14 +2586,15 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, if(iq->response == NULL) { /* Don't increment qname when QNAME minimisation is enabled */ if(qstate->env->cfg->qname_minimisation) { - iq->minimise_timeout_count++; iq->minimisation_state = SKIP_MINIMISE_STATE; } + iq->timeout_count++; iq->chase_to_rd = 0; iq->dnssec_lame_query = 0; verbose(VERB_ALGO, "query response was timeout"); return next_state(iq, QUERYTARGETS_STATE); } + iq->timeout_count = 0; type = response_type_from_server( (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd), iq->response, &iq->qinfo_out, iq->dp); @@ -3599,7 +3600,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, iq->response = NULL; iq->state = QUERY_RESP_STATE; if(event == module_event_noreply || event == module_event_error) { - if(event == module_event_noreply && iq->sent_count >= 3 && + if(event == module_event_noreply && iq->timeout_count >= 3 && qstate->env->cfg->use_caps_bits_for_id && !iq->caps_fallback && !is_caps_whitelisted(ie, iq)) { /* start fallback */ diff --git a/iterator/iterator.h b/iterator/iterator.h index a2f1b5705..26ff39559 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -388,8 +388,9 @@ struct iter_qstate { /** * Count number of time-outs. Used to prevent resolving failures when - * the QNAME minimisation QTYPE is blocked. */ - int minimise_timeout_count; + * the QNAME minimisation QTYPE is blocked. Used to determine if + * capsforid fallback should be started.*/ + int timeout_count; /** True if the current response is from auth_zone */ int auth_zone_response; From 22ab2552310474cef2f66f00de5daf6d3cb0b8ef Mon Sep 17 00:00:00 2001 From: Gearnode Date: Tue, 7 Apr 2020 13:19:36 +0200 Subject: [PATCH 202/235] fix unbound-control-setup is not idempotent --- smallapp/unbound-control-setup.sh.in | 203 +++++++++++++++++---------- 1 file changed, 125 insertions(+), 78 deletions(-) diff --git a/smallapp/unbound-control-setup.sh.in b/smallapp/unbound-control-setup.sh.in index f4024b435..d901ad6cf 100644 --- a/smallapp/unbound-control-setup.sh.in +++ b/smallapp/unbound-control-setup.sh.in @@ -5,22 +5,22 @@ # Copyright (c) 2008, NLnet Labs. All rights reserved. # # This software is open source. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: -# +# # Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# +# # Neither the name of the NLNET LABS nor the names of its contributors may # be used to endorse or promote products derived from this software without # specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -57,87 +57,144 @@ SVR_BASE=unbound_server # base name for unbound-control keys CTL_BASE=unbound_control +# flag to recreate generated certificates +RECREATE=0 + # we want -rw-r----- access (say you run this as root: grp=yes (server), all=no). umask 0027 # end of options -# functions: -error ( ) { - echo "$0 fatal error: $1" - exit 1 +set -eu + +cleanup() { + echo "removing artifacts" + + rm -rf \ + server.cnf \ + client.cnf \ + "${SVR_BASE}_trust.pem" \ + "${CTL_BASE}_trust.pem" \ + "${SVR_BASE}_trust.srl" } -# check arguments: -while test $# -ne 0; do - case $1 in - -d) - if test $# -eq 1; then error "need argument for -d"; fi - DESTDIR="$2" - shift - ;; - *) - echo "unbound-control-setup.sh - setup SSL keys for unbound-control" - echo " -d dir use directory to store keys and certificates." - echo " default: $DESTDIR" - echo "please run this command using the same user id that the " - echo "unbound daemon uses, it needs read privileges." - exit 1 - ;; - esac - shift +fatal() { + printf "fatal error: $*\n" >/dev/stderr + exit 1 +} + +usage() { + cat < used directory to store keys and certificates (default: $DESTDIR) +-h show help notice +-r recreate certificates +EOF +} + +OPTIND=1 +while getopts 'd:hr' arg; do + case "$arg" in + d) DESTDIR="$OPTARG" ;; + h) usage; exit 0 ;; + r) RECREATE=1 ;; + ?) fatal "'$arg' unknown option" ;; + esac done +shift $((OPTIND - 1)) + -# go!: echo "setup in directory $DESTDIR" -cd "$DESTDIR" || error "could not cd to $DESTDIR" +cd "$DESTDIR" -# create certificate keys; do not recreate if they already exist. -if test -f $SVR_BASE.key; then - echo "$SVR_BASE.key exists" -else - echo "generating $SVR_BASE.key" - openssl genrsa -out $SVR_BASE.key $BITS || error "could not genrsa" -fi -if test -f $CTL_BASE.key; then - echo "$CTL_BASE.key exists" -else - echo "generating $CTL_BASE.key" - openssl genrsa -out $CTL_BASE.key $BITS || error "could not genrsa" +trap cleanup SIGINT + +# === +# Generate server certificate +# === + +# generate private key; do no recreate it if they already exist. +if [ ! -f "$SVR_BASE.key" ]; then + openssl genrsa -out "$SVR_BASE.key" "$BITS" fi -# create self-signed cert for server -echo "[req]" > request.cfg -echo "default_bits=$BITS" >> request.cfg -echo "default_md=$HASH" >> request.cfg -echo "prompt=no" >> request.cfg -echo "distinguished_name=req_distinguished_name" >> request.cfg -echo "" >> request.cfg -echo "[req_distinguished_name]" >> request.cfg -echo "commonName=$SERVERNAME" >> request.cfg +cat >server.cnf < request.cfg -echo "default_bits=$BITS" >> request.cfg -echo "default_md=$HASH" >> request.cfg -echo "prompt=no" >> request.cfg -echo "distinguished_name=req_distinguished_name" >> request.cfg -echo "" >> request.cfg -echo "[req_distinguished_name]" >> request.cfg -echo "commonName=$CLIENTNAME" >> request.cfg + [ ! -f "SVR_BASE.pem" ] || fatal "cannot create server certificate" +fi -test -f request.cfg || error "could not create request.cfg" +# === +# Generate client certificate +# === + +# generate private key; do no recreate it if they already exist. +if [ ! -f "$CTL_BASE.key" ]; then + openssl genrsa -out "$CTL_BASE.key" "$BITS" +fi + +cat >client.cnf < Date: Tue, 7 Apr 2020 13:49:25 +0200 Subject: [PATCH 203/235] - Merge PR #214 from gearnode: unbound-control-setup recreate certificates. With the -r option the certificates are created again, without it, only the files that do not exist are created. --- doc/Changelog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index c095c47eb..7e92f5d8a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +7 April 2020: Wouter + - Merge PR #214 from gearnode: unbound-control-setup recreate + certificates. With the -r option the certificates are created + again, without it, only the files that do not exist are created. + 6 April 2020: Ralph - Keep track of number of timeouts. Use this counter to determine if capsforid fallback should be started. From 8a87fc6ae7e17490b9bbb79c31f78977e2744ac3 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 15 Apr 2020 17:57:02 +0200 Subject: [PATCH 204/235] - Fix #220: auth-zone section in config may lead to segfault. --- doc/Changelog | 3 +++ services/authzone.c | 16 ++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 7e92f5d8a..fd271ea5f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +15 April 2020: George + - Fix #220: auth-zone section in config may lead to segfault. + 7 April 2020: Wouter - Merge PR #214 from gearnode: unbound-control-setup recreate certificates. With the -r option the certificates are created diff --git a/services/authzone.c b/services/authzone.c index 70fe27a5e..9b0568c8c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5334,7 +5334,7 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf, log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -5773,7 +5773,7 @@ auth_xfer_transfer_timer_callback(void* arg) log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -5815,7 +5815,7 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } @@ -5896,7 +5896,7 @@ auth_xfer_transfer_http_callback(struct comm_point* c, void* arg, int err, log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } @@ -6110,7 +6110,7 @@ auth_xfer_probe_timer_callback(void* arg) log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -6146,7 +6146,7 @@ auth_xfer_probe_udp_callback(struct comm_point* c, void* arg, int err, log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } @@ -6391,7 +6391,7 @@ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf, log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -6468,7 +6468,7 @@ auth_xfer_timer(void* arg) log_assert(xfr->task_nextprobe); lock_basic_lock(&xfr->lock); env = xfr->task_nextprobe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } From eed157d36e38396fe56a9599fb4921819b9b7c63 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 16 Apr 2020 11:47:27 +0200 Subject: [PATCH 205/235] - Fix help return code in unbound-control-setup script. --- doc/Changelog | 3 +++ smallapp/unbound-control-setup.sh.in | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 7e92f5d8a..70e71ab93 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +16 April 2020: Wouter + - Fix help return code in unbound-control-setup script. + 7 April 2020: Wouter - Merge PR #214 from gearnode: unbound-control-setup recreate certificates. With the -r option the certificates are created diff --git a/smallapp/unbound-control-setup.sh.in b/smallapp/unbound-control-setup.sh.in index d901ad6cf..edfac7ffa 100644 --- a/smallapp/unbound-control-setup.sh.in +++ b/smallapp/unbound-control-setup.sh.in @@ -97,7 +97,7 @@ OPTIND=1 while getopts 'd:hr' arg; do case "$arg" in d) DESTDIR="$OPTARG" ;; - h) usage; exit 0 ;; + h) usage; exit 1 ;; r) RECREATE=1 ;; ?) fatal "'$arg' unknown option" ;; esac From 3cd288a9f27ead351686eed1374e8ee0ff0e7317 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 16 Apr 2020 13:14:50 +0200 Subject: [PATCH 206/235] - Fix for posix shell syntax for trap in nsd-control-setup. --- doc/Changelog | 1 + smallapp/unbound-control-setup.sh.in | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index b779a58c4..8f6a5758e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 16 April 2020: Wouter - Fix help return code in unbound-control-setup script. + - Fix for posix shell syntax for trap in nsd-control-setup. 15 April 2020: George - Fix #220: auth-zone section in config may lead to segfault. diff --git a/smallapp/unbound-control-setup.sh.in b/smallapp/unbound-control-setup.sh.in index edfac7ffa..3e506e84e 100644 --- a/smallapp/unbound-control-setup.sh.in +++ b/smallapp/unbound-control-setup.sh.in @@ -108,7 +108,7 @@ shift $((OPTIND - 1)) echo "setup in directory $DESTDIR" cd "$DESTDIR" -trap cleanup SIGINT +trap cleanup INT # === # Generate server certificate From 963cfb58beb5d1a92ba22b0727abc91684fa476a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 16 Apr 2020 13:17:33 +0200 Subject: [PATCH 207/235] - Fix for posix shell syntax for trap in run_msg.sh test script. --- doc/Changelog | 1 + testcode/run_vm.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 8f6a5758e..56a454d97 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 16 April 2020: Wouter - Fix help return code in unbound-control-setup script. - Fix for posix shell syntax for trap in nsd-control-setup. + - Fix for posix shell syntax for trap in run_msg.sh test script. 15 April 2020: George - Fix #220: auth-zone section in config may lead to segfault. diff --git a/testcode/run_vm.sh b/testcode/run_vm.sh index d4c2a2e11..d14c63742 100644 --- a/testcode/run_vm.sh +++ b/testcode/run_vm.sh @@ -34,7 +34,7 @@ cleanup() { if test -f "$t.bak"; then mv "$t.bak" "$t"; fi exit 0 } -trap cleanup SIGINT +trap cleanup INT for t in $RUNLIST do From e18ab07c62f5d8483d3a2a3e14b5e03377390201 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Thu, 16 Apr 2020 13:56:40 +0200 Subject: [PATCH 208/235] - Add doxygen documentation for DSCP. --- doc/Changelog | 3 +++ services/listen_dnsport.c | 1 + services/listen_dnsport.h | 2 ++ services/outside_network.c | 1 + services/outside_network.h | 1 + 5 files changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 56a454d97..4c433586c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +16 April 2020: George + - Add doxygen documentation for DSCP. + 16 April 2020: Wouter - Fix help return code in unbound-control-setup script. - Fix for posix shell syntax for trap in nsd-control-setup. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 096f382ba..51d5a3fdb 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1203,6 +1203,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. * @param dnscrypt_port: dnscrypt service port number + * @param dscp: DSCP to use. * @return: returns false on error. */ static int diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index c3cc0a92d..ddd1b63a4 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -205,6 +205,7 @@ void listen_start_accept(struct listen_dnsport* listen); * @param transparent: set IP_TRANSPARENT socket option. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. + * @param dscp: DSCP to use. * @return: the socket. -1 on error. */ int create_udp_sock(int family, int socktype, struct sockaddr* addr, @@ -222,6 +223,7 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr, * @param mss: maximum segment size of the socket. if zero, leaves the default. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. + * @param dscp: DSCP to use. * @return: the socket. -1 on error. */ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, diff --git a/services/outside_network.c b/services/outside_network.c index 978e98b0e..2ed2f5ea5 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1051,6 +1051,7 @@ sai6_putrandom(struct sockaddr_in6 *sa, int pfxlen, struct ub_randstate *rnd) * @param port: port override for addr. * @param inuse: if -1 is returned, this bool means the port was in use. * @param rnd: random state (for address randomisation). + * @param dscp: DSCP to use. * @return fd or -1 */ static int diff --git a/services/outside_network.h b/services/outside_network.h index 3fc5dde45..6a26806fa 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -403,6 +403,7 @@ struct serviced_query { * @param do_ip4: service IP4. * @param do_ip6: service IP6. * @param num_tcp: number of outgoing tcp buffers to preallocate. + * @param dscp: DSCP to use. * @param infra: pointer to infra cached used for serviced queries. * @param rnd: stored to create random numbers for serviced queries. * @param use_caps_for_id: enable to use 0x20 bits to encode id randomness. From e430e95d3027f3f02df1e0581bea2e1b2ef96a08 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Thu, 16 Apr 2020 13:48:47 +0200 Subject: [PATCH 209/235] - Add SNI support on more TLS connections (fixes #193). - Add SNI support to unbound-anchor. --- daemon/worker.c | 2 +- dnstap/dtstream.c | 4 +- dnstap/dtstream.h | 2 + doc/example.conf.in | 4 + doc/unbound.conf.5.in | 5 + libunbound/libworker.c | 2 +- services/outside_network.c | 11 +- services/outside_network.h | 5 +- smallapp/unbound-anchor.c | 33 +- testcode/fake_event.c | 3 +- util/config_file.c | 3 + util/config_file.h | 2 + util/configlexer.c | 4403 ++++++++++++++++++------------------ util/configlexer.lex | 1 + util/configparser.c | 2722 +++++++++++----------- util/configparser.h | 44 +- util/configparser.y | 14 +- util/net_help.c | 6 +- util/net_help.h | 3 +- 19 files changed, 3677 insertions(+), 3592 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 201e77336..23e3244c5 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1815,7 +1815,7 @@ worker_init(struct worker* worker, struct config_file *cfg, &worker_alloc_cleanup, worker, cfg->do_udp || cfg->udp_upstream_without_downstream, worker->daemon->connect_sslctx, cfg->delay_close, - dtenv); + cfg->tls_use_sni, dtenv); if(!worker->back) { log_err("could not create outgoing sockets"); worker_delete(worker); diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index bb862d441..4081a6372 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -351,6 +351,7 @@ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) log_err("could not setup SSL CTX"); return 0; } + dtio->tls_use_sni = cfg->tls_use_sni; #endif /* HAVE_SSL */ } return 1; @@ -1661,7 +1662,8 @@ static int dtio_setup_ssl(struct dt_io_thread* dtio) dtio->ssl_handshake_done = 0; dtio->ssl_brief_read = 0; - if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name)) { + if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name, + dtio->tls_use_sni)) { return 0; } return 1; diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 4bb027d5b..03346c213 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -109,6 +109,8 @@ struct dt_io_thread { int started; /** ssl context for the io thread, for tls connections. type SSL_CTX* */ void* ssl_ctx; + /** if SNI will be used for TLS connections. */ + int tls_use_sni; /** file descriptor that the thread writes to */ int fd; diff --git a/doc/example.conf.in b/doc/example.conf.in index 47c16ca2e..3871e6ff0 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -746,6 +746,10 @@ server: # cipher setting for TLSv1.3 # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256" + # Use the SNI extension for TLS connections. Default is yes. + # Changing the value requires a reload. + # tls-use-sni: yes + # Add the secret file for TLS Session Ticket. # Secret file must be 80 bytes of random data. # First key use to encrypt and decrypt TLS session tickets. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 598f3e8b0..d76655195 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -546,6 +546,11 @@ and that is the default. Set the list of ciphersuites to allow when serving TLS. This is for newer TLS 1.3 connections. Use "" for defaults, and that is the default. .TP +.B tls\-use\-sni: \fI +Enable or disable sending the SNI extension on TLS connections. +Default is yes. +Changing the value requires a reload. +.TP .B use\-systemd: \fI Enable or disable systemd socket activation. Default is no. diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 24233f1d0..44b8d7905 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -238,7 +238,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) ports, numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx, - cfg->delay_close, NULL); + cfg->delay_close, cfg->tls_use_sni, NULL); w->env->outnet = w->back; if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); diff --git a/services/outside_network.c b/services/outside_network.c index 978e98b0e..3dbd5f9a4 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -386,7 +386,8 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl); #endif pend->c->ssl_shake_state = comm_ssl_shake_write; - if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name)) { + if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name, + w->outnet->tls_use_sni)) { pend->c->fd = s; #ifdef HAVE_SSL SSL_free(pend->c->ssl); @@ -736,7 +737,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, struct dt_env* dtenv) + void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv) { struct outside_network* outnet = (struct outside_network*) calloc(1, sizeof(struct outside_network)); @@ -752,6 +753,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->infra = infra; outnet->rnd = rnd; outnet->sslctx = sslctx; + outnet->tls_use_sni = tls_use_sni; #ifdef USE_DNSTAP outnet->dtenv = dtenv; #else @@ -2296,6 +2298,11 @@ setup_comm_ssl(struct comm_point* cp, struct outside_network* outnet, #endif cp->ssl_shake_state = comm_ssl_shake_write; /* https verification */ +#ifdef HAVE_SSL + if(outnet->tls_use_sni) { + (void)SSL_set_tlsext_host_name(cp->ssl, host); + } +#endif #ifdef HAVE_SSL_SET1_HOST if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) { /* because we set SSL_VERIFY_PEER, in netevent in diff --git a/services/outside_network.h b/services/outside_network.h index 3fc5dde45..ddfda5fd9 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -132,6 +132,8 @@ struct outside_network { struct ub_randstate* rnd; /** ssl context to create ssl wrapped TCP with DNS connections */ void* sslctx; + /** if SNI will be used for TLS connections */ + int tls_use_sni; #ifdef USE_DNSTAP /** dnstap environment */ struct dt_env* dtenv; @@ -416,6 +418,7 @@ struct serviced_query { * @param sslctx: context to create outgoing connections with (if enabled). * @param delayclose: if not 0, udp sockets are delayed before timeout closure. * msec to wait on timeouted udp sockets. + * @param tls_use_sni: if SNI is used for TLS connections. * @param dtenv: environment to send dnstap events with (if enabled). * @return: the new structure (with no pending answers) or NULL on error. */ @@ -425,7 +428,7 @@ struct outside_network* outside_network_create(struct comm_base* base, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, struct dt_env *dtenv); + void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv); /** * Delete outside_network structure. diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index b8bd1b850..b8aa10fe2 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -187,6 +187,7 @@ usage(void) printf("-c file cert file, default %s\n", ROOT_CERT_FILE); printf("-l list builtin key and cert on stdout\n"); printf("-u name server in https url, default %s\n", URLNAME); + printf("-S use SNI for the https connection\n"); printf("-x path pathname to xml in url, default %s\n", XMLNAME); printf("-s path pathname to p7s in url, default %s\n", P7SNAME); printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER); @@ -772,7 +773,7 @@ setup_sslctx(void) /** initiate TLS on a connection */ static SSL* -TLS_initiate(SSL_CTX* sslctx, int fd) +TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni) { X509* x; int r; @@ -788,6 +789,9 @@ TLS_initiate(SSL_CTX* sslctx, int fd) SSL_free(ssl); return NULL; } + if(use_sni) { + (void)SSL_set_tlsext_host_name(ssl, urlname); + } while(1) { ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) @@ -1123,7 +1127,7 @@ read_http_result(SSL* ssl) /** https to an IP addr, return BIO with pathname or NULL */ static BIO* https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, - struct ip_list* src) + struct ip_list* src, int use_sni) { int fd; SSL* ssl; @@ -1137,7 +1141,7 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, SSL_CTX_free(sslctx); return NULL; } - ssl = TLS_initiate(sslctx, fd); + ssl = TLS_initiate(sslctx, fd, urlname, use_sni); if(!ssl) { SSL_CTX_free(sslctx); fd_close(fd); @@ -1161,11 +1165,12 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, * @param pathname: pathname of file on server to GET. * @param urlname: name to pass as the virtual host for this request. * @param src: if nonNULL, source address to bind to. + * @param use_sni: if SNI will be used. * @return a memory BIO with the file in it. */ static BIO* https(struct ip_list* ip_list, const char* pathname, const char* urlname, - struct ip_list* src) + struct ip_list* src, int use_sni) { struct ip_list* ip; BIO* bio = NULL; @@ -1173,7 +1178,7 @@ https(struct ip_list* ip_list, const char* pathname, const char* urlname, wipe_ip_usage(ip_list); while( (ip = pick_random_ip(ip_list)) ) { ip->used = 1; - bio = https_to_ip(ip, pathname, urlname, src); + bio = https_to_ip(ip, pathname, urlname, src, use_sni); if(bio) break; } if(!bio) { @@ -1929,7 +1934,7 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int port) + int port, int use_sni) { STACK_OF(X509)* cert; @@ -1963,8 +1968,8 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, #endif /* fetch the necessary files over HTTPS */ - xml = https(ip_list, xmlname, urlname, src); - p7s = https(ip_list, p7sname, urlname, src); + xml = https(ip_list, xmlname, urlname, src, use_sni); + p7s = https(ip_list, p7sname, urlname, src, use_sni); /* verify and update the root anchor */ verify_and_update_anchor(root_anchor_file, xml, p7s, cert, p7signer); @@ -2235,7 +2240,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int force, int res_conf_fallback, int port) + int force, int res_conf_fallback, int port, int use_sni) { struct ub_result* dnskey; int used_builtin = 0; @@ -2278,7 +2283,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, probe_date_allows_certupdate(root_anchor_file)) || force) { if(do_certupdate(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, - debugconf, srcaddr, ip4only, ip6only, port)) + debugconf, srcaddr, ip4only, ip6only, port, use_sni)) return 1; return used_builtin; } @@ -2307,8 +2312,9 @@ int main(int argc, char* argv[]) const char* srcaddr = NULL; int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT; int res_conf_fallback = 0; + int use_sni = 0; /* parse the options */ - while( (c=getopt(argc, argv, "46C:FRP:a:b:c:f:hln:r:s:u:vx:")) != -1) { + while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) { switch(c) { case 'l': dolist = 1; @@ -2331,6 +2337,9 @@ int main(int argc, char* argv[]) case 'u': urlname = optarg; break; + case 'S': + use_sni = 1; + break; case 'x': xmlname = optarg; break; @@ -2397,5 +2406,5 @@ int main(int argc, char* argv[]) return do_root_update_work(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, debugconf, - srcaddr, ip4only, ip6only, force, res_conf_fallback, port); + srcaddr, ip4only, ip6only, force, res_conf_fallback, port, use_sni); } diff --git a/testcode/fake_event.c b/testcode/fake_event.c index c69fb9bfd..d89eedce8 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1039,7 +1039,8 @@ outside_network_create(struct comm_base* base, size_t bufsize, int ATTR_UNUSED(outgoing_tcp_mss), void (*unwanted_action)(void*), void* ATTR_UNUSED(unwanted_param), int ATTR_UNUSED(do_udp), void* ATTR_UNUSED(sslctx), - int ATTR_UNUSED(delayclose), struct dt_env* ATTR_UNUSED(dtenv)) + int ATTR_UNUSED(delayclose), int ATTR_UNUSED(tls_use_sni), + struct dt_env* ATTR_UNUSED(dtenv)) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct outside_network* outnet = calloc(1, diff --git a/util/config_file.c b/util/config_file.c index a53095caa..91a2c19d7 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -116,6 +116,7 @@ config_create(void) cfg->ssl_upstream = 0; cfg->tls_cert_bundle = NULL; cfg->tls_win_cert = 0; + cfg->tls_use_sni = 1; cfg->use_syslog = 1; cfg->log_identity = NULL; /* changed later with argv[0] */ cfg->log_time_ascii = 0; @@ -507,6 +508,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys) else S_STR("tls-ciphers:", tls_ciphers) else S_STR("tls-ciphersuites:", tls_ciphersuites) + else S_YNO("tls-use-sni:", tls_use_sni) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -961,6 +963,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first) else O_STR(opt, "tls-ciphers", tls_ciphers) else O_STR(opt, "tls-ciphersuites", tls_ciphersuites) + else O_YNO(opt, "tls-use-sni", tls_use_sni) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) diff --git a/util/config_file.h b/util/config_file.h index 338dbd9d8..cc3fe4ae1 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -128,6 +128,8 @@ struct config_file { char* tls_ciphers; /** TLS chiphersuites (TLSv1.3) */ char* tls_ciphersuites; + /** if SNI is to be used */ + int tls_use_sni; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; diff --git a/util/configlexer.c b/util/configlexer.c index 74674e309..09fd4b003 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 311 -#define YY_END_OF_BUFFER 312 +#define YY_NUM_RULES 312 +#define YY_END_OF_BUFFER 313 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,345 +363,345 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3064] = +static const flex_int16_t yy_accept[3071] = { 0, - 1, 1, 293, 293, 297, 297, 301, 301, 305, 305, - 1, 1, 312, 309, 1, 291, 291, 310, 2, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 293, 294, 294, 295, 310, 297, 298, 298, - 299, 310, 304, 301, 302, 302, 303, 310, 305, 306, - 306, 307, 310, 308, 292, 2, 296, 310, 308, 309, - 0, 1, 2, 2, 2, 2, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 1, 1, 294, 294, 298, 298, 302, 302, 306, 306, + 1, 1, 313, 310, 1, 292, 292, 311, 2, 311, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 294, 295, 295, 296, 311, 298, 299, 299, + 300, 311, 305, 302, 303, 303, 304, 311, 306, 307, + 307, 308, 311, 309, 293, 2, 297, 311, 309, 310, + 0, 1, 2, 2, 2, 2, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 293, 0, 297, 0, 304, 0, 301, 305, 0, 308, - 0, 2, 2, 308, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 294, 0, 298, 0, 305, 0, 302, 306, 0, 309, + 0, 2, 2, 309, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 308, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 309, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 114, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 122, 309, 309, 309, - 309, 309, 309, 309, 308, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 115, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 123, 310, 310, 310, + 310, 310, 310, 310, 309, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 98, 309, 309, 309, 309, 309, 309, 8, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 115, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 127, 309, 308, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 99, 310, 310, 310, 310, 310, 310, 8, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 116, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 128, 310, 309, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 286, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 287, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 308, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 56, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 224, 309, 14, 15, 309, 19, - 18, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 309, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 57, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 225, 310, 14, 15, 310, + 19, 18, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 121, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 208, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 3, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 122, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 209, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 3, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 308, 309, - 309, 309, 309, 309, 309, 309, 280, 309, 309, 279, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 300, 309, 309, 309, 309, - 309, 309, 309, 55, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 309, 310, 310, 310, 310, 310, 310, 310, 281, 310, + 310, 280, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 301, 310, 310, + 310, 310, 310, 310, 310, 56, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 59, 309, 254, 309, 309, 309, 309, 309, 309, 309, - 309, 287, 288, 309, 309, 309, 309, 309, 60, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 118, 309, 309, 309, 309, - 309, 309, 309, 309, 197, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 21, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 60, 310, 255, 310, 310, 310, 310, 310, + 310, 310, 310, 288, 289, 310, 310, 310, 310, 310, + 61, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 119, 310, 310, + 310, 310, 310, 310, 310, 310, 198, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 21, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 146, 309, 309, 300, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 96, 309, 309, - 309, 309, 309, 309, 309, 262, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 169, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 145, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 147, 310, 310, 301, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 97, 310, 310, 310, 310, 310, 310, 310, 263, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 170, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 146, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 95, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 32, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 33, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 57, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 120, 309, 309, 309, - 309, 309, 113, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 96, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 32, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 33, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 58, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 121, 310, 310, 310, 310, 310, 114, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 58, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 227, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 170, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 46, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 59, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 228, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 171, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 47, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 245, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 50, - 309, 51, 309, 309, 309, 309, 309, 99, 309, 100, - 309, 309, 309, 309, 97, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 7, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 217, 309, 309, 309, 309, 148, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 246, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 51, 310, 52, 310, 310, 310, 310, + 310, 100, 310, 101, 310, 310, 310, 310, 98, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 7, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 218, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 228, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 47, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 189, 309, 188, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 16, 17, 309, 309, 309, 309, 309, 309, 309, + 310, 149, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 229, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 48, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 190, 310, 189, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 16, 17, 310, 310, - 309, 309, 309, 309, 309, 309, 61, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 196, 309, - 309, 309, 309, 309, 309, 102, 309, 101, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 180, 309, - 309, 309, 309, 309, 309, 309, 309, 128, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 80, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 62, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 197, 310, 310, 310, 310, 310, 310, + 103, 310, 102, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 181, 310, 310, 310, 310, 310, + 310, 310, 310, 129, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 81, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 84, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 54, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 183, 184, 309, 309, 309, 256, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 6, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 260, 309, 309, 309, 309, 309, 309, 281, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 85, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 55, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 184, 185, 310, + 310, 310, 257, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 6, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 261, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 42, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 44, 309, 309, 309, 309, 309, 309, 309, - 309, 176, 309, 309, 309, 123, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 201, 309, 177, 309, - 309, 309, 214, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 45, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 125, 107, 309, 108, 309, 309, 309, 106, + 310, 310, 310, 310, 282, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 42, 310, 310, 310, 310, + 44, 310, 310, 310, 310, 310, 310, 310, 310, 45, + 310, 310, 310, 310, 310, 310, 310, 310, 177, 310, + 310, 310, 124, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 202, 310, 178, 310, 310, 310, 215, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 46, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 126, - 309, 309, 309, 309, 309, 309, 309, 309, 143, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 244, 309, 309, 309, 309, 309, 309, 309, 309, 178, - 309, 309, 309, 309, 309, 181, 309, 187, 309, 309, - 309, 309, 309, 213, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 94, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 119, 309, 309, - 309, 309, 309, 309, 52, 309, 309, 309, 26, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 20, 309, + 108, 310, 109, 310, 310, 310, 107, 310, 310, 310, + 310, 310, 310, 310, 310, 144, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 245, 310, 310, + 310, 310, 310, 310, 310, 310, 179, 310, 310, 310, + 310, 310, 182, 310, 188, 310, 310, 310, 310, 310, + 214, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 95, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 120, 310, 310, 310, 310, 310, + 310, 53, 310, 310, 310, 26, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 27, 36, 309, 153, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 69, 71, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 264, 309, 309, 309, 225, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 109, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 142, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 275, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 20, 310, 310, 310, 310, + 310, 310, 27, 36, 310, 154, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 70, 72, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 265, 310, 310, 310, 226, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 110, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 143, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 147, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 207, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 284, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 164, 309, 309, 309, 309, 309, 309, 309, 309, 103, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 159, - 309, 171, 309, 309, 309, 309, 309, 131, 309, 309, - 309, 309, 309, 90, 309, 309, 309, 309, 199, 309, + 310, 310, 276, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 148, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 208, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 285, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 165, 310, 310, + 310, 310, 310, 310, 310, 310, 104, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 160, 310, 172, 310, + 310, 310, 310, 310, 132, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 215, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 236, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 124, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 163, 309, 309, 309, 309, 309, 72, 73, - 309, 309, 309, 309, 309, 53, 309, 309, 309, 309, - 309, 79, 172, 309, 190, 309, 218, 309, 309, 182, - 257, 309, 309, 309, 309, 309, 65, 309, 174, 309, - 309, 309, 309, 309, 9, 309, 309, 309, 93, 309, - 309, 309, 309, 249, 309, 309, 309, 309, 198, 309, + 91, 310, 310, 310, 310, 200, 310, 310, 310, 310, + 310, 310, 216, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 237, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 125, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 164, + 310, 310, 310, 310, 310, 73, 74, 310, 310, 310, + 310, 310, 54, 310, 310, 310, 310, 310, 80, 173, + 310, 191, 310, 219, 310, 310, 183, 258, 310, 310, + 310, 310, 310, 66, 310, 175, 310, 310, 310, 310, + 310, 9, 310, 310, 310, 94, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 162, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 149, - 309, 263, 309, 309, 309, 309, 235, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 209, 309, - 309, 309, 309, 255, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 250, 310, 310, 310, 310, 199, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 163, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 150, 310, 264, 310, + 310, 310, 310, 236, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 210, 310, 310, 310, 310, + 256, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 278, 309, - 173, 309, 309, 309, 309, 309, 309, 309, 64, 66, - 309, 309, 309, 309, 309, 309, 309, 92, 309, 309, - 309, 309, 247, 309, 309, 309, 309, 259, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 203, - 34, 28, 30, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 35, 309, 29, 31, 309, 309, 309, 309, - 309, 309, 309, 309, 89, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 205, 202, 309, 309, 309, 309, 309, 309, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 279, 310, 174, 310, 310, + 310, 310, 310, 310, 310, 65, 67, 310, 310, 310, + 310, 310, 310, 310, 93, 310, 310, 310, 310, 248, + 310, 310, 310, 310, 260, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 204, 34, 28, 30, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 35, + 310, 29, 31, 310, 310, 310, 310, 310, 310, 310, + 310, 90, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 206, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 63, 309, 309, 126, 309, 110, 309, 309, 309, - 309, 309, 309, 309, 309, 144, 13, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 273, 309, 276, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 12, - 309, 309, 22, 309, 309, 309, 253, 309, 309, 309, - 309, 261, 309, 309, 309, 67, 309, 211, 309, 309, - 309, 309, 204, 309, 309, 62, 309, 309, 309, 309, - 23, 309, 43, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 158, 157, 309, 309, 309, + 203, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 64, 310, + 310, 127, 310, 111, 310, 310, 310, 310, 310, 310, + 310, 310, 145, 13, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 274, 310, 277, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 12, 310, 310, 22, + 310, 310, 310, 254, 310, 310, 310, 310, 262, 310, + 310, 310, 68, 310, 212, 310, 310, 310, 310, 205, + 310, 310, 63, 310, 310, 310, 310, 23, 310, 43, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 206, 200, 309, 216, - 309, 309, 265, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 74, 309, 309, 309, 248, 309, 309, 309, 309, 186, - 309, 309, 309, 309, 210, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 282, 283, 155, 309, 309, 68, - 309, 309, 309, 309, 165, 309, 309, 104, 105, 309, - 309, 309, 309, 150, 309, 152, 309, 191, 309, 309, - 309, 309, 156, 309, 309, 219, 309, 309, 309, 309, + 310, 310, 159, 158, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 207, 201, 310, 217, 310, 310, 266, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 75, 310, 310, + 310, 249, 310, 310, 310, 310, 187, 310, 310, 310, + 310, 211, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 283, 284, 156, 310, 310, 69, 310, 310, 310, + 310, 166, 310, 310, 105, 106, 310, 310, 310, 310, + 151, 310, 153, 310, 192, 310, 310, 310, 310, 157, - 309, 309, 309, 133, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 226, 309, 309, 309, 309, - 309, 309, 309, 24, 309, 258, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 192, 309, 309, - 246, 309, 277, 309, 185, 309, 309, 309, 309, 48, - 309, 309, 309, 309, 4, 309, 309, 309, 309, 117, - 132, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 222, - 37, 38, 309, 309, 309, 309, 309, 309, 309, 266, - 309, 309, 309, 309, 309, 309, 234, 309, 309, 309, + 310, 310, 220, 310, 310, 310, 310, 310, 310, 310, + 134, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 227, 310, 310, 310, 310, 310, 310, 310, + 24, 310, 259, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 193, 310, 310, 247, 310, 278, + 310, 186, 310, 310, 310, 310, 49, 310, 310, 310, + 310, 4, 310, 310, 310, 310, 118, 133, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 223, 37, 38, 310, + 310, 310, 310, 310, 310, 310, 267, 310, 310, 310, - 309, 309, 309, 309, 195, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 77, 309, 49, 252, 309, 223, - 309, 309, 309, 309, 11, 309, 309, 309, 309, 309, - 309, 116, 309, 309, 309, 309, 193, 81, 309, 40, - 309, 309, 309, 309, 309, 309, 309, 309, 161, 309, - 309, 309, 309, 309, 135, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 233, 309, 309, 309, 309, 129, - 309, 309, 111, 112, 309, 309, 309, 83, 87, 82, - 309, 75, 309, 309, 309, 309, 309, 10, 309, 309, - 309, 250, 285, 309, 309, 309, 309, 290, 39, 309, + 310, 310, 310, 235, 310, 310, 310, 310, 310, 310, + 310, 196, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 78, 310, 50, 253, 310, 224, 310, 310, 310, + 310, 11, 310, 310, 310, 310, 310, 310, 117, 310, + 310, 310, 310, 194, 82, 310, 40, 310, 310, 310, + 310, 310, 310, 310, 310, 162, 310, 310, 310, 310, + 310, 136, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 234, 310, 310, 310, 310, 130, 310, 310, 112, + 113, 310, 310, 310, 84, 88, 83, 310, 76, 310, + 310, 310, 310, 310, 10, 310, 310, 310, 251, 286, - 309, 309, 309, 309, 160, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 88, 86, 309, - 76, 274, 309, 309, 309, 309, 309, 309, 309, 179, - 309, 309, 309, 309, 309, 194, 309, 309, 309, 309, - 309, 309, 309, 309, 151, 70, 309, 309, 309, 309, - 309, 267, 309, 309, 309, 309, 309, 309, 309, 230, - 309, 309, 229, 130, 309, 85, 136, 137, 140, 141, - 138, 139, 78, 309, 251, 309, 309, 309, 309, 154, - 309, 309, 309, 309, 309, 221, 309, 309, 309, 309, + 310, 310, 310, 310, 291, 39, 310, 310, 310, 310, + 310, 161, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 89, 87, 310, 77, 275, 310, + 310, 310, 310, 310, 310, 310, 180, 310, 310, 310, + 310, 310, 195, 310, 310, 310, 310, 310, 310, 310, + 310, 152, 71, 310, 310, 310, 310, 310, 268, 310, + 310, 310, 310, 310, 310, 310, 231, 310, 310, 230, + 131, 310, 86, 137, 138, 141, 142, 139, 140, 79, + 310, 252, 310, 310, 310, 310, 155, 310, 310, 310, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 167, 166, 41, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 91, 309, 220, 309, 243, 271, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 5, 309, - 309, 212, 309, 309, 272, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 231, 25, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 232, 309, - 309, 309, 134, 309, 309, 309, 309, 309, 309, 309, + 310, 310, 222, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 168, 167, 41, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 92, 310, 221, + 310, 244, 272, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 5, 310, 310, 213, 310, + 310, 273, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 232, 25, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 233, 310, 310, 310, 135, - 309, 168, 309, 175, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 268, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 289, 309, 309, 239, 309, 309, 309, 309, 309, - 269, 309, 309, 309, 309, 309, 309, 270, 309, 309, - 309, 237, 309, 240, 241, 309, 309, 309, 309, 309, - 238, 242, 0 + 310, 310, 310, 310, 310, 310, 310, 310, 169, 310, + 176, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 269, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 290, 310, + 310, 240, 310, 310, 310, 310, 310, 270, 310, 310, + 310, 310, 310, 310, 271, 310, 310, 310, 238, 310, + 241, 242, 310, 310, 310, 310, 310, 239, 243, 0 } ; static const YY_CHAR yy_ec[256] = @@ -744,15 +744,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3078] = +static const flex_int16_t yy_base[3085] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 1947, 1851, 81, 5977, 5977, 5977, 96, 52, + 90, 112, 2197, 2057, 81, 5988, 5988, 5988, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1532, 5977, 5977, 5977, 107, 1331, 5977, 5977, - 5977, 165, 1302, 1259, 5977, 5977, 5977, 211, 1131, 5977, - 5977, 5977, 180, 948, 5977, 217, 5977, 221, 168, 767, + 189, 152, 1959, 5988, 5988, 5988, 107, 1846, 5988, 5988, + 5988, 165, 1569, 1315, 5988, 5988, 5988, 211, 1269, 5988, + 5988, 5988, 180, 948, 5988, 217, 5988, 221, 168, 767, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -781,9 +781,9 @@ static const flex_int16_t yy_base[3078] = 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 5977, 760, 773, 771, 774, + 756, 757, 761, 768, 769, 5988, 760, 773, 771, 774, 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 5977, 815, 807, 849, + 825, 791, 801, 804, 814, 795, 5988, 815, 807, 849, 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, @@ -793,642 +793,644 @@ static const flex_int16_t yy_base[3078] = 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 5977, 1007, 1009, 1011, 1012, 1013, 1010, 5977, 1014, 1015, + 5988, 1007, 1009, 1011, 1012, 1013, 1010, 5988, 1014, 1015, 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 5977, 1071, 1077, 1080, - 1079, 1085, 1082, 1090, 1097, 1100, 1093, 1106, 1116, 1103, - 1117, 1111, 1113, 1072, 1118, 1122, 1124, 1125, 1126, 1127, - 1128, 1130, 1129, 1132, 1140, 1136, 5977, 1144, 1145, 1154, + 1061, 1064, 1065, 1068, 1070, 1088, 5988, 1071, 1077, 1080, + 1079, 1085, 1082, 1090, 1097, 1100, 1103, 1106, 1116, 1093, + 1117, 1111, 1113, 1072, 1118, 1123, 1125, 1126, 1127, 1128, + 1129, 1130, 1132, 1131, 1137, 1139, 5988, 1144, 1154, 1155, - 1147, 1152, 1156, 1157, 1158, 1160, 1161, 1163, 1162, 1166, - 1169, 1183, 1170, 1185, 1172, 1186, 1180, 1181, 1187, 1188, - 1190, 1195, 1203, 1200, 1205, 1208, 1216, 1215, 1218, 1225, - 1201, 1220, 1193, 1212, 1221, 1224, 1228, 1226, 1232, 1230, - 1241, 1236, 1237, 1238, 1239, 1248, 1245, 1244, 1253, 1246, - 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5977, 1280, 1269, - 1276, 1277, 1282, 1283, 1284, 1285, 1288, 813, 1291, 1290, - 1292, 1294, 1296, 1297, 1298, 1299, 1307, 1315, 1311, 1310, - 1323, 1322, 1324, 1300, 1326, 1333, 1330, 1334, 1336, 1332, - 1344, 1341, 1342, 1345, 1352, 1347, 1348, 1351, 1349, 1358, + 1136, 1146, 1156, 1157, 1159, 1160, 1162, 1163, 1165, 1164, + 1169, 1179, 1170, 1183, 1180, 1181, 1185, 1186, 1188, 1187, + 1189, 1191, 1203, 1196, 1195, 1211, 1206, 1213, 1215, 1222, + 1204, 1217, 1218, 1219, 1221, 1224, 1226, 1228, 1230, 1232, + 1239, 1237, 1234, 1235, 1242, 1250, 1243, 1245, 1253, 1246, + 1254, 1257, 1247, 1266, 1267, 1260, 1258, 5988, 1276, 1268, + 1278, 1279, 1280, 1284, 1286, 1282, 1288, 813, 1289, 1290, + 1292, 1294, 1299, 1296, 1297, 1300, 1304, 1307, 1311, 1318, + 1322, 1323, 1324, 1310, 1325, 1333, 1330, 1337, 1338, 1340, + 1348, 1336, 1343, 1346, 1350, 1334, 1352, 1354, 1355, 1357, - 1353, 1367, 1368, 1361, 1371, 1378, 1374, 1363, 1379, 1380, - 1382, 1383, 1386, 1387, 1389, 1390, 1397, 1392, 1393, 1394, - 1398, 1400, 1395, 1403, 1406, 1417, 1412, 1407, 1416, 1420, - 1423, 1422, 1425, 1424, 1428, 1429, 1430, 1431, 1433, 1434, - 1438, 1436, 1451, 1443, 1445, 1452, 1454, 1455, 1462, 1458, - 1466, 1457, 1467, 1468, 1470, 1472, 1473, 1478, 1476, 1482, - 1480, 1487, 1488, 1490, 1489, 1492, 1497, 1500, 1493, 5977, - 1495, 1507, 1505, 1508, 1509, 1511, 1513, 1522, 1515, 1517, - 1519, 1518, 1520, 1544, 5977, 1526, 5977, 5977, 1528, 5977, - 5977, 1529, 1527, 1530, 1535, 1547, 1550, 1554, 1534, 1555, + 1360, 1368, 1369, 1362, 1372, 1379, 1380, 1364, 1382, 1376, + 1383, 1314, 1370, 1387, 1390, 1391, 1398, 1393, 1394, 1399, + 1400, 1401, 1402, 1396, 1407, 1410, 1406, 1412, 1413, 1416, + 1423, 1418, 1417, 1425, 1426, 1428, 1429, 1437, 1430, 1438, + 1439, 1441, 1440, 1448, 1446, 1449, 1450, 1457, 1455, 1459, + 1456, 1465, 1467, 1469, 1471, 1472, 1473, 1475, 1474, 1478, + 1484, 1477, 1483, 1489, 1493, 1490, 1495, 1496, 1499, 1500, + 5988, 1501, 1508, 1503, 1506, 1512, 1513, 1514, 1521, 1517, + 1519, 1516, 1518, 1522, 1544, 5988, 1530, 5988, 5988, 1529, + 5988, 5988, 1527, 1531, 1535, 1548, 1539, 1554, 1547, 1541, - 1542, 1567, 1570, 1568, 1557, 1558, 1559, 1580, 1586, 1587, - 1590, 1560, 1592, 1595, 1596, 1597, 1604, 1579, 1598, 1601, - 1605, 1606, 1608, 1607, 1611, 1613, 1616, 1617, 1614, 1619, - 1621, 1629, 1633, 1625, 1640, 5977, 1636, 1648, 1650, 1646, - 1653, 1649, 1654, 1637, 1656, 1658, 1659, 1661, 1663, 1662, - 1664, 1666, 1671, 1670, 1681, 1672, 5977, 1673, 1676, 1674, - 1684, 1677, 1687, 1688, 1692, 1694, 1695, 1622, 1702, 1699, - 1697, 1703, 1705, 1707, 1710, 5977, 1709, 1716, 1708, 1718, - 1717, 1720, 1724, 1725, 1726, 1727, 1728, 1730, 1732, 1733, - 1741, 1739, 1737, 1742, 1743, 1753, 1754, 1755, 1763, 1745, + 1557, 1550, 1567, 1572, 1528, 1560, 1562, 1568, 1575, 1583, + 1585, 1586, 1588, 1594, 1596, 1597, 1599, 1606, 1607, 1565, + 1589, 1598, 1610, 1612, 1611, 1613, 1617, 1615, 1620, 1616, + 1623, 1618, 1628, 1633, 1625, 1642, 5988, 1639, 1643, 1651, + 1647, 1654, 1646, 1650, 1653, 1627, 1658, 1655, 1659, 1660, + 1662, 1664, 1667, 1670, 1668, 1678, 1671, 5988, 1673, 1675, + 1674, 1680, 1686, 1688, 1687, 1689, 1681, 1693, 1694, 1705, + 1696, 1700, 1701, 1708, 1709, 1710, 5988, 1712, 1719, 1711, + 1722, 1716, 1723, 1724, 1725, 1726, 1729, 1728, 1730, 1731, + 1735, 1742, 1739, 1740, 1741, 1745, 1750, 1753, 1757, 1764, - 1758, 1756, 1764, 1766, 1769, 1770, 1773, 1777, 1774, 1781, - 1778, 1785, 1790, 1783, 1780, 1782, 1792, 1795, 1800, 1809, - 1804, 1796, 1805, 1812, 1808, 1811, 1813, 1815, 1822, 1817, - 1819, 1824, 1826, 1827, 1829, 1830, 5977, 1833, 1836, 5977, - 1835, 1837, 1859, 1838, 1840, 1841, 1843, 1846, 1861, 1845, - 1852, 1867, 1863, 1879, 1869, 1881, 1874, 1886, 1876, 1882, - 1884, 1890, 1892, 1893, 1900, 1902, 1854, 1908, 1910, 1895, - 1905, 1907, 1926, 1909, 1913, 1914, 1919, 1915, 1930, 1912, - 1922, 1923, 1929, 1938, 1939, 5977, 1947, 1950, 1944, 1949, - 1957, 1954, 1955, 5977, 1956, 1958, 1960, 1970, 1966, 1961, + 1755, 1761, 1758, 1765, 1766, 1768, 1769, 1771, 1780, 1782, + 1779, 1783, 1772, 1787, 1795, 1794, 1784, 1785, 1796, 1799, + 1806, 1808, 1809, 1800, 1804, 1816, 1811, 1814, 1815, 1819, + 1822, 1823, 1825, 1826, 1828, 1832, 1830, 1834, 5988, 1836, + 1837, 5988, 1839, 1840, 1862, 1841, 1843, 1848, 1845, 1849, + 1854, 1855, 1866, 1864, 1868, 1885, 1872, 1877, 1875, 1887, + 1876, 1889, 1891, 1895, 1896, 1897, 1904, 1906, 1857, 1912, + 1914, 1899, 1901, 1909, 1928, 1911, 1913, 1917, 1925, 1932, + 1919, 1922, 1926, 1938, 1939, 1944, 1941, 5988, 1952, 1950, + 1949, 1951, 1961, 1960, 1956, 5988, 1962, 1963, 1966, 1973, - 1968, 1969, 1971, 1972, 1978, 1977, 1979, 1981, 1982, 1997, - 5977, 1984, 5977, 1993, 1983, 1994, 1995, 1996, 2001, 2005, - 2006, 5977, 5977, 2012, 2015, 2018, 2004, 2008, 5977, 2020, - 2028, 2025, 2030, 2023, 2031, 2032, 2034, 2040, 2035, 2044, - 2039, 2047, 2042, 2049, 2046, 5977, 2055, 2043, 2056, 2062, - 2063, 2065, 2066, 2068, 5977, 2069, 2072, 2076, 2083, 2074, - 2078, 2081, 2086, 2084, 2090, 2091, 2092, 2093, 2094, 2101, - 2103, 2100, 2104, 2106, 2119, 5977, 2098, 2102, 2120, 2118, - 2125, 2117, 2121, 2115, 2128, 2129, 2127, 2134, 2135, 2136, - 2143, 2145, 2141, 2144, 2151, 2140, 2146, 2142, 2157, 2148, + 1969, 1970, 1974, 1915, 1976, 1977, 1980, 1984, 1985, 1981, + 1983, 2001, 5988, 1986, 5988, 1991, 1988, 1996, 1998, 1999, + 2003, 2004, 2006, 5988, 5988, 2014, 2007, 2020, 2028, 2010, + 5988, 2013, 2031, 2032, 2024, 2026, 2034, 2035, 2037, 2039, + 2038, 2047, 2042, 2049, 2044, 2045, 2046, 5988, 2058, 2048, + 2063, 2065, 2056, 2066, 2073, 2064, 5988, 2074, 2067, 2075, + 2085, 2087, 2082, 2077, 2089, 2093, 2084, 2088, 2090, 2096, + 2098, 2103, 2106, 2104, 2108, 2112, 2120, 5988, 2101, 2105, + 2121, 2118, 2127, 2122, 2124, 2116, 2128, 2129, 2135, 2130, + 2136, 2137, 2139, 2146, 2148, 2144, 2145, 2152, 2143, 2153, - 2158, 2161, 2162, 5977, 2163, 2165, 124, 2169, 2170, 2172, - 2168, 2177, 2175, 2171, 2194, 2195, 2176, 2190, 2193, 2196, - 2197, 2199, 2200, 2201, 2202, 2203, 2205, 5977, 2179, 2207, - 2208, 2212, 2213, 2214, 2217, 5977, 2228, 2225, 2238, 2216, - 2232, 2239, 2235, 2240, 2241, 2243, 2244, 2247, 2245, 2249, - 5977, 2260, 2257, 2261, 2251, 2264, 2270, 2267, 2265, 2272, - 2273, 2277, 2275, 2278, 2279, 2281, 2282, 2283, 2288, 2284, - 2286, 2293, 2295, 5977, 2302, 2297, 2307, 2298, 2305, 2308, - 2322, 2309, 2312, 2314, 2323, 2329, 2317, 2331, 2325, 2332, - 2336, 2335, 2345, 2346, 2349, 2355, 2343, 2357, 2360, 2347, + 2156, 2161, 2155, 2160, 2163, 2164, 5988, 2165, 2171, 124, + 2166, 2172, 2174, 2176, 2179, 2178, 2175, 2191, 2196, 2192, + 2198, 2194, 2193, 2201, 2203, 2202, 2204, 2205, 2206, 2209, + 5988, 2211, 2213, 2214, 2216, 2218, 2219, 2229, 5988, 2225, + 2230, 2237, 2233, 2238, 2241, 2242, 2246, 2247, 2249, 2250, + 2253, 2251, 2255, 5988, 2260, 2263, 2265, 2257, 2266, 2272, + 2273, 2275, 2278, 2267, 2279, 2280, 2281, 2284, 2283, 2285, + 2287, 2292, 2289, 2294, 2297, 2299, 5988, 2307, 2309, 2303, + 2300, 2310, 2312, 2319, 2316, 2322, 2321, 2325, 2337, 2327, + 2329, 2339, 2330, 2343, 2332, 2353, 2344, 2352, 2354, 2351, - 2350, 2353, 2359, 2361, 2369, 2370, 2377, 2378, 2375, 2381, - 2373, 2394, 2399, 2390, 5977, 2398, 2392, 2386, 2400, 2411, - 2403, 2384, 2408, 2414, 2415, 2416, 2417, 2418, 2425, 2420, - 2422, 2423, 2426, 2427, 2429, 2433, 2434, 2439, 2443, 2440, - 2446, 2253, 5977, 2447, 2448, 2449, 2452, 2457, 2454, 2463, - 2464, 2466, 2458, 2460, 2470, 2467, 2472, 2473, 2477, 2476, - 2374, 2478, 5977, 2480, 2484, 2486, 2489, 2490, 2492, 2495, - 2501, 2503, 2488, 2504, 2505, 2507, 5977, 2515, 2517, 2513, - 2522, 2514, 2519, 2521, 2525, 2526, 5977, 2527, 2528, 2535, - 2536, 2531, 5977, 2539, 2534, 2540, 2541, 2542, 2543, 2544, + 2358, 2361, 2362, 2363, 2365, 2367, 2368, 2369, 2370, 2377, + 2384, 2375, 2385, 2386, 2390, 2396, 2392, 5988, 2397, 2398, + 2399, 2405, 2416, 2409, 2407, 2419, 2408, 2411, 2412, 2421, + 2423, 2432, 2427, 2425, 2430, 2434, 2435, 2436, 2438, 2441, + 2442, 2451, 2443, 2453, 2220, 5988, 2376, 2454, 2446, 2448, + 2461, 2455, 2463, 2467, 2464, 2470, 2471, 2473, 2474, 2476, + 2477, 2478, 2480, 2482, 2481, 5988, 2485, 2486, 2490, 2493, + 2498, 2496, 2500, 2506, 2508, 2510, 2502, 2512, 2514, 2513, + 5988, 2522, 2523, 2519, 2531, 2527, 2528, 2529, 2533, 2530, + 5988, 2534, 2535, 2543, 2544, 2539, 5988, 2548, 2541, 2546, - 2549, 2550, 2552, 2557, 2559, 2555, 2563, 5977, 2564, 2572, - 2567, 2565, 2573, 2576, 2577, 2579, 2588, 2580, 2584, 5977, - 2595, 2587, 2599, 2606, 2601, 2586, 2603, 2602, 2604, 2608, - 2609, 5977, 2611, 2614, 2615, 2616, 2619, 2618, 2624, 2634, - 2626, 2627, 2630, 2635, 2637, 2639, 2640, 2641, 2642, 2631, - 2651, 2653, 2655, 2656, 2657, 2659, 2667, 2669, 2665, 2671, - 5977, 2674, 2675, 2668, 2676, 2681, 2682, 2680, 2683, 2685, - 2688, 2686, 2689, 2690, 2699, 2707, 2692, 2710, 2700, 2702, - 2704, 2715, 2708, 2714, 2717, 2722, 2718, 2724, 2731, 2726, - 2730, 2738, 2728, 2729, 2733, 2737, 2739, 2740, 2742, 2743, + 2551, 2553, 2552, 2556, 2549, 2559, 2560, 2568, 2565, 2562, + 2571, 5988, 2572, 2580, 2575, 2577, 2581, 2582, 2583, 2587, + 2592, 2588, 2594, 5988, 2601, 2599, 2604, 2612, 2607, 2609, + 2610, 2613, 2614, 2616, 2617, 5988, 2619, 2620, 2622, 2623, + 2625, 2627, 2630, 2642, 2631, 2634, 2641, 2639, 2644, 2646, + 2647, 2650, 2651, 2648, 2658, 2660, 2662, 2663, 2664, 2668, + 2676, 2678, 2674, 2679, 5988, 2682, 2683, 2684, 2671, 2686, + 2688, 2690, 2691, 2694, 2696, 2701, 2695, 2698, 2708, 2711, + 2699, 2712, 2715, 2716, 2718, 2720, 2721, 2722, 2723, 2730, + 2726, 2728, 2738, 2729, 2733, 2743, 2736, 2744, 2745, 2746, - 2746, 2751, 2755, 2759, 2760, 2762, 2764, 2767, 2768, 2769, - 5977, 2772, 2773, 2770, 2774, 2779, 2783, 2784, 2786, 2787, - 2791, 2792, 2796, 2799, 2793, 2798, 2801, 2811, 2807, 5977, - 2808, 5977, 2809, 2810, 2817, 2820, 2812, 5977, 2823, 5977, - 2824, 2829, 2819, 2825, 5977, 2831, 2833, 2836, 2837, 2839, - 2840, 2843, 2842, 2844, 2848, 2846, 2850, 2851, 2855, 2852, - 2857, 2863, 2859, 2870, 2867, 2860, 2872, 2877, 2878, 2879, - 2881, 2882, 5977, 2885, 2886, 2888, 2890, 2891, 2892, 2893, - 2896, 2895, 2898, 2897, 2903, 2907, 2911, 2914, 2922, 2912, - 2926, 5977, 2921, 2924, 2925, 2928, 5977, 2931, 2929, 2937, + 2747, 2749, 2751, 2752, 2756, 2750, 2758, 2768, 2769, 2771, + 2760, 2772, 2776, 2777, 5988, 2780, 2782, 2778, 2784, 2785, + 2791, 2792, 2794, 2795, 2786, 2800, 2802, 2803, 2808, 2809, + 2811, 2818, 2814, 5988, 2815, 5988, 2816, 2817, 2819, 2829, + 2821, 5988, 2825, 5988, 2832, 2839, 2826, 2830, 5988, 2840, + 2834, 2836, 2847, 2844, 2849, 2850, 2851, 2852, 2857, 2853, + 2855, 2860, 2861, 2863, 2865, 2867, 2871, 2868, 2878, 2880, + 2872, 2881, 2874, 2887, 2889, 2888, 2890, 5988, 2900, 2891, + 2894, 2897, 2901, 2902, 2903, 2905, 2906, 2911, 2912, 2913, + 2914, 2920, 2919, 2929, 2925, 2936, 5988, 2928, 2933, 2935, - 2939, 2933, 2930, 2941, 2942, 2949, 2943, 2946, 2951, 2958, - 2959, 2960, 5977, 2961, 2962, 2965, 2968, 2978, 2975, 2973, - 2976, 2987, 2983, 2982, 2984, 2985, 2986, 2989, 2997, 2999, - 2996, 3000, 2998, 3003, 3010, 3007, 3005, 3011, 3013, 3014, - 3015, 3018, 3019, 3022, 3017, 3020, 3024, 3025, 5977, 3027, - 3034, 3036, 3042, 3035, 3039, 3044, 3045, 3047, 3049, 3048, - 3057, 3051, 5977, 3058, 5977, 3052, 3059, 3061, 3071, 3072, - 3065, 3076, 3075, 3080, 3081, 3082, 3085, 3086, 3088, 3089, - 3091, 3094, 3092, 3102, 3108, 3095, 3099, 3109, 3097, 3113, - 3114, 5977, 5977, 3116, 3117, 3118, 3120, 3121, 3123, 3124, + 2937, 5988, 2939, 2938, 2940, 2946, 2949, 2948, 2950, 2952, + 2956, 2958, 2951, 2961, 2959, 2968, 2969, 5988, 2974, 2975, + 2960, 2978, 2982, 2984, 2986, 2990, 2998, 2994, 2993, 2977, + 2996, 2997, 3000, 3007, 3008, 3004, 3011, 3010, 3013, 3020, + 3016, 3012, 3014, 3022, 3023, 3024, 3027, 3028, 3031, 3026, + 3029, 3036, 3032, 5988, 3044, 3035, 3040, 3047, 3051, 3054, + 3052, 3056, 3058, 3057, 3062, 3061, 3059, 5988, 3063, 5988, + 3060, 3077, 3065, 3082, 3079, 3071, 3084, 3093, 3086, 3088, + 3090, 3096, 3094, 3098, 3097, 3100, 3103, 3102, 3110, 3109, + 3105, 3116, 3117, 3118, 3120, 3121, 5988, 5988, 3122, 3123, - 3122, 3132, 3133, 3138, 3140, 3148, 5977, 3143, 3145, 3144, - 3149, 3152, 3150, 3156, 3167, 3164, 3171, 3170, 5977, 3153, - 3163, 3178, 3162, 3179, 3180, 5977, 3181, 5977, 3183, 3184, - 3185, 3186, 3187, 3191, 3192, 3194, 3197, 3205, 3207, 3198, - 3190, 3209, 3212, 3213, 3220, 3215, 3216, 3217, 5977, 3222, - 3219, 3224, 3225, 3229, 3233, 3236, 3223, 5977, 3240, 3242, - 3243, 3244, 3247, 3249, 3250, 3251, 3253, 3257, 3252, 3254, - 3267, 3260, 3259, 3270, 3279, 3280, 3282, 5977, 3263, 3275, - 3291, 3287, 3288, 3290, 3293, 3289, 3273, 3294, 3297, 3298, - 3299, 3301, 3302, 3305, 3307, 3304, 3306, 3314, 3320, 3322, + 3126, 3124, 3128, 3134, 3130, 3142, 3138, 3144, 3146, 3148, + 3156, 5988, 3149, 3153, 3152, 3159, 3171, 3157, 3161, 3176, + 3172, 3179, 3178, 5988, 3169, 3180, 3187, 3182, 3183, 3191, + 5988, 3188, 5988, 3190, 3193, 3197, 3198, 3200, 3201, 3202, + 3203, 3211, 3221, 3224, 3206, 3223, 3208, 3220, 3225, 3226, + 3233, 3229, 3230, 3231, 5988, 3235, 3236, 3237, 3199, 3240, + 3242, 3243, 3248, 5988, 3250, 3254, 3255, 3257, 3258, 3260, + 3261, 3263, 3264, 3266, 3262, 3267, 3279, 3268, 3272, 3282, + 3284, 3286, 3292, 5988, 3293, 3285, 3301, 3297, 3299, 3300, + 3303, 3304, 3305, 3307, 3308, 3309, 3310, 3316, 3315, 3312, - 3331, 3323, 3326, 3327, 3328, 3330, 3333, 3336, 3339, 3341, - 3334, 3351, 3352, 3342, 3346, 3356, 3357, 3364, 3359, 5977, - 3366, 3365, 3374, 3369, 3370, 3372, 3375, 3384, 3377, 3379, - 3380, 3387, 3382, 5977, 3398, 3393, 3386, 3395, 3401, 3409, - 3404, 3385, 3408, 3411, 3412, 3414, 3417, 3418, 3419, 3422, - 3423, 5977, 5977, 3425, 3426, 3427, 5977, 3430, 3428, 3441, - 3432, 3433, 3442, 3445, 3444, 3434, 3446, 3448, 3450, 5977, - 3456, 3464, 3455, 3462, 3465, 3473, 3471, 3463, 3472, 3476, - 3478, 3477, 3479, 3480, 3483, 3484, 3492, 3493, 3488, 3490, - 3491, 5977, 3494, 3499, 3501, 3503, 3500, 3507, 5977, 3504, + 3313, 3318, 3329, 3331, 3332, 3321, 3339, 3323, 3337, 3342, + 3340, 3343, 3348, 3349, 3352, 3354, 3346, 3368, 3369, 3355, + 3357, 3372, 3359, 3379, 3374, 5988, 3381, 3365, 3386, 3382, + 3384, 3389, 3390, 3398, 3396, 3385, 3393, 3400, 3397, 5988, + 3412, 3402, 3399, 3403, 3404, 3424, 3420, 3421, 3422, 3426, + 3423, 3427, 3430, 3431, 3432, 3435, 3436, 5988, 5988, 3438, + 3439, 3442, 5988, 3445, 3440, 3452, 3448, 3444, 3455, 3459, + 3458, 3457, 3462, 3460, 3468, 5988, 3469, 3477, 3472, 3473, + 3481, 3482, 3479, 3485, 3487, 3488, 3491, 3489, 3494, 3493, + 3495, 3498, 3506, 3509, 3502, 3504, 3512, 5988, 3505, 3507, - 3512, 3518, 3517, 3528, 3525, 3520, 3533, 3513, 3530, 3535, - 3510, 3537, 3538, 3545, 3540, 3541, 3543, 3547, 3549, 5977, - 3550, 3551, 3552, 3561, 3564, 3571, 3574, 3575, 3556, 3573, - 3576, 3583, 5977, 3579, 3580, 3581, 3585, 3592, 3587, 3595, - 3590, 5977, 3594, 3596, 3598, 5977, 3597, 3604, 3608, 3612, - 3599, 3620, 3616, 3613, 3617, 3621, 5977, 3624, 5977, 3625, - 3626, 3631, 5977, 3627, 3633, 3635, 3637, 3634, 3641, 3642, - 3649, 3644, 3650, 3651, 3652, 3653, 3655, 3662, 3654, 3658, - 3661, 3663, 5977, 3673, 3665, 3666, 3680, 3678, 3670, 3668, - 3686, 3684, 5977, 5977, 3693, 5977, 3695, 3688, 3690, 5977, + 3513, 3515, 3517, 3520, 5988, 3523, 3524, 3527, 3530, 3538, + 3540, 3534, 3547, 3531, 3541, 3543, 3548, 3549, 3551, 3560, + 3557, 3556, 3559, 3563, 3566, 5988, 3565, 3567, 3568, 3576, + 5988, 3580, 3587, 3590, 3591, 3573, 3577, 3589, 3598, 5988, + 3593, 3596, 3594, 3595, 3603, 3602, 3610, 3607, 5988, 3609, + 3608, 3611, 5988, 3612, 3613, 3618, 3623, 3625, 3632, 3628, + 3630, 3631, 3629, 5988, 3636, 5988, 3639, 3640, 3643, 5988, + 3646, 3647, 3648, 3650, 3651, 3656, 3657, 3655, 3663, 3664, + 3666, 3667, 3665, 3670, 3674, 3671, 3672, 3676, 3677, 5988, + 3678, 3680, 3687, 3692, 3688, 3695, 3682, 3699, 3700, 5988, - 3694, 3696, 3705, 3700, 3701, 3711, 3708, 3712, 5977, 3714, - 3703, 3715, 3718, 3719, 3722, 3724, 3725, 3726, 3728, 3729, - 5977, 3730, 3732, 3739, 3731, 3733, 3742, 3741, 3747, 5977, - 3751, 3755, 3754, 3758, 3759, 5977, 3760, 5977, 3761, 3762, - 3764, 3768, 3765, 5977, 3773, 3774, 3778, 3780, 3781, 3783, - 3782, 3789, 3790, 3791, 3798, 3795, 3796, 3793, 5977, 3797, - 3799, 3803, 3804, 3807, 3810, 3818, 3814, 3815, 3820, 3821, - 3824, 3827, 3825, 3831, 3833, 3835, 3828, 5977, 3836, 3841, - 3834, 3850, 3847, 3851, 5977, 3852, 3853, 3854, 5977, 3857, - 3860, 3862, 3866, 3861, 3867, 3868, 3869, 3872, 5977, 3874, + 5988, 3702, 5988, 3705, 3706, 3709, 5988, 3711, 3710, 3718, + 3714, 3715, 3717, 3721, 3727, 5988, 3723, 3728, 3732, 3729, + 3734, 3737, 3739, 3740, 3736, 3741, 3744, 5988, 3745, 3742, + 3747, 3743, 3753, 3757, 3759, 3758, 5988, 3766, 3767, 3768, + 3770, 3772, 5988, 3774, 5988, 3776, 3780, 3781, 3782, 3777, + 5988, 3785, 3788, 3791, 3792, 3795, 3797, 3798, 3801, 3804, + 3805, 3813, 3809, 3808, 3811, 5988, 3810, 3812, 3816, 3823, + 3817, 3820, 3833, 3830, 3834, 3828, 3831, 3838, 3841, 3842, + 3844, 3848, 3849, 3850, 5988, 3851, 3856, 3852, 3865, 3861, + 3855, 5988, 3862, 3866, 3872, 5988, 3869, 3875, 3876, 3879, - 3876, 3873, 3877, 3889, 3881, 5977, 5977, 3891, 5977, 3892, - 3878, 3896, 3895, 3875, 3899, 3903, 3905, 3907, 3904, 3912, - 3915, 3909, 3925, 3927, 3932, 3928, 3929, 3918, 5977, 5977, - 3934, 3935, 3930, 3941, 3942, 3944, 3945, 3952, 3948, 3954, - 3958, 3959, 3966, 5977, 3947, 3949, 3967, 5977, 3962, 3965, - 3968, 3973, 3972, 3974, 3978, 3975, 3976, 3979, 3983, 3980, - 3985, 3993, 3986, 3990, 3989, 3999, 3996, 3997, 4006, 5977, - 4003, 4007, 4010, 4013, 4014, 4016, 4018, 4019, 4020, 5977, - 4017, 4022, 4024, 4030, 4023, 4033, 4044, 4048, 4050, 4025, - 4042, 4051, 4053, 4057, 4054, 5977, 4058, 4060, 4061, 4064, + 3880, 3881, 3884, 3883, 3886, 5988, 3890, 3891, 3887, 3888, + 3889, 3896, 5988, 5988, 3904, 5988, 3906, 3892, 3909, 3908, + 3911, 3913, 3917, 3918, 3920, 3914, 3921, 3929, 3928, 3938, + 3945, 3946, 3944, 3935, 3930, 5988, 5988, 3949, 3951, 3953, + 3955, 3956, 3958, 3942, 3965, 3963, 3971, 3974, 3964, 3967, + 5988, 3975, 3976, 3978, 5988, 3980, 3981, 3983, 3984, 3985, + 3989, 3987, 3988, 3992, 3991, 3994, 3998, 3995, 4004, 4000, + 4011, 4001, 4012, 4014, 4015, 4019, 5988, 4016, 4021, 4022, + 4025, 4028, 4030, 4029, 4031, 4032, 5988, 4036, 4035, 4039, + 4044, 4045, 4047, 4037, 4055, 4062, 4056, 4063, 4064, 4058, - 4067, 4069, 4070, 4072, 4073, 4075, 4077, 4078, 4085, 4087, - 4079, 4088, 4082, 4090, 5977, 4094, 4101, 4095, 4103, 4098, - 4028, 4104, 4105, 4111, 4108, 4113, 4112, 4118, 5977, 4115, - 4119, 4122, 4120, 4126, 4129, 4133, 4130, 4132, 5977, 4140, - 4123, 4134, 4136, 4144, 4146, 4149, 4151, 4154, 4153, 4156, - 5977, 4157, 4160, 4161, 4158, 4167, 4168, 4172, 4170, 5977, - 4173, 4179, 4171, 4187, 4182, 4191, 4188, 4190, 4192, 4194, - 4197, 4199, 4201, 4202, 4204, 4198, 4215, 4220, 4218, 5977, - 4205, 5977, 4219, 4223, 4227, 4229, 4226, 5977, 4216, 4231, - 4234, 4235, 4236, 5977, 4237, 4239, 4241, 4240, 5977, 4251, + 4069, 4072, 5988, 4073, 4046, 4074, 4075, 4080, 4082, 4083, + 4085, 4086, 4089, 4090, 4091, 4093, 4098, 4095, 4099, 4100, + 4101, 5988, 4106, 4113, 4103, 4116, 4107, 4117, 4118, 4126, + 4129, 4119, 4124, 4130, 4132, 5988, 4133, 4134, 4135, 4136, + 4144, 4137, 4141, 4145, 4147, 5988, 4152, 4148, 4154, 4155, + 4158, 4159, 4163, 4164, 4166, 4170, 4178, 5988, 4167, 4180, + 4182, 4174, 4171, 4173, 4183, 4186, 5988, 4190, 4192, 4191, + 4207, 4193, 4208, 4200, 4204, 4203, 4210, 4213, 4211, 4215, + 4217, 4218, 4219, 4231, 4235, 4230, 5988, 4221, 5988, 4236, + 4237, 4246, 4242, 4232, 5988, 4239, 4244, 4248, 4249, 4250, - 4253, 4242, 4257, 4244, 4259, 5977, 4264, 4265, 4261, 4273, - 4276, 4272, 4274, 4277, 4275, 4279, 4280, 4281, 4289, 4284, - 4285, 5977, 4291, 4294, 4301, 4302, 4296, 4286, 4304, 4310, - 4303, 5977, 4312, 4311, 4313, 4314, 4315, 4318, 4320, 4327, - 4323, 4322, 5977, 4326, 4330, 4343, 4324, 4334, 5977, 5977, - 4339, 4344, 4346, 4341, 4347, 5977, 4350, 4357, 4352, 4356, - 4359, 5977, 5977, 4361, 5977, 4358, 5977, 4363, 4362, 5977, - 5977, 4365, 4366, 4369, 4375, 4372, 5977, 4382, 5977, 4379, - 4383, 4385, 4386, 4388, 5977, 4387, 4390, 4395, 5977, 4389, - 4397, 4396, 4400, 5977, 4404, 4407, 4399, 4405, 5977, 4411, + 5988, 4253, 4256, 4258, 4257, 5988, 4263, 4262, 4261, 4268, + 4271, 4274, 5988, 4277, 4279, 4278, 4290, 4291, 4287, 4288, + 4292, 4289, 4294, 4295, 4296, 4304, 4299, 4300, 5988, 4303, + 4306, 4311, 4312, 4315, 4316, 4318, 4320, 4321, 5988, 4323, + 4325, 4326, 4327, 4329, 4330, 4332, 4344, 4342, 4331, 5988, + 4335, 4347, 4359, 4354, 4355, 5988, 5988, 4356, 4339, 4358, + 4343, 4363, 5988, 4367, 4366, 4365, 4373, 4374, 5988, 5988, + 4376, 5988, 4368, 5988, 4378, 4379, 5988, 5988, 4380, 4381, + 4382, 4384, 4391, 5988, 4394, 5988, 4402, 4397, 4388, 4399, + 4400, 5988, 4401, 4403, 4409, 5988, 4410, 4412, 4411, 4413, - 4417, 4419, 4409, 4413, 4420, 4426, 4421, 4429, 4430, 4431, - 4432, 4433, 4440, 4445, 4447, 4449, 4441, 4437, 4451, 4457, - 4459, 4450, 4454, 4461, 4463, 4465, 4467, 4469, 4471, 4472, - 4473, 4475, 4476, 4474, 4484, 4477, 4478, 4491, 4487, 4480, - 4492, 4495, 4493, 4499, 4500, 4502, 4503, 4504, 5977, 4505, - 4507, 4509, 4521, 4514, 4510, 4520, 4527, 4531, 4533, 5977, - 4535, 5977, 4537, 4522, 4539, 4541, 5977, 4542, 4543, 4544, - 4545, 4546, 4547, 4549, 4548, 4552, 4553, 4556, 5977, 4559, - 4554, 4563, 4574, 5977, 4569, 4580, 4564, 4575, 4577, 4581, - 4583, 4585, 4586, 4587, 4589, 4591, 4598, 4594, 4595, 4597, + 5988, 4417, 4422, 4414, 4418, 5988, 4423, 4427, 4430, 4431, + 4432, 4434, 4438, 4437, 4442, 4443, 4445, 4444, 4447, 4454, + 4458, 4460, 4462, 4463, 4448, 4465, 4467, 4471, 4469, 4473, + 4474, 4476, 4478, 4479, 4483, 4487, 4480, 4484, 4488, 4489, + 4490, 4497, 4493, 4499, 4504, 4500, 4505, 4506, 4507, 4508, + 4511, 4514, 4512, 4518, 4522, 5988, 4516, 4517, 4523, 4524, + 4528, 4530, 4536, 4544, 4548, 4549, 5988, 4551, 5988, 4553, + 4538, 4529, 4545, 5988, 4555, 4558, 4557, 4560, 4559, 4561, + 4563, 4562, 4566, 4567, 4569, 5988, 4572, 4573, 4574, 4578, + 5988, 4587, 4589, 4586, 4590, 4591, 4592, 4593, 4594, 4597, - 4599, 4600, 4605, 4608, 4607, 4615, 4617, 4622, 5977, 4611, - 5977, 4618, 4623, 4624, 4626, 4628, 4629, 4631, 5977, 5977, - 4632, 4634, 4639, 4640, 4635, 4644, 4641, 5977, 4647, 4654, - 4657, 4648, 5977, 4651, 4659, 4660, 4664, 5977, 4665, 4667, - 4668, 4670, 4671, 4674, 4678, 4675, 4681, 4682, 4686, 5977, - 5977, 5977, 5977, 4687, 4689, 4692, 4693, 4695, 4696, 4698, - 4700, 4701, 5977, 4703, 5977, 5977, 4704, 4710, 4712, 4713, - 4714, 4717, 4719, 4721, 5977, 4720, 4725, 4727, 4723, 4734, - 4740, 4724, 4737, 4741, 4743, 4750, 4746, 4747, 4745, 4749, - 4753, 4756, 5977, 5977, 4757, 4763, 4764, 4772, 4768, 4769, + 4599, 4601, 4603, 4615, 4605, 4606, 4610, 4614, 4616, 4617, + 4620, 4622, 4627, 4628, 4632, 5988, 4633, 5988, 4634, 4635, + 4638, 4639, 4640, 4641, 4644, 5988, 5988, 4642, 4646, 4648, + 4651, 4653, 4656, 4660, 5988, 4657, 4665, 4668, 4670, 5988, + 4658, 4674, 4675, 4677, 5988, 4678, 4679, 4680, 4682, 4685, + 4687, 4691, 4689, 4692, 4693, 4700, 5988, 5988, 5988, 5988, + 4701, 4697, 4707, 4703, 4709, 4711, 4712, 4714, 4710, 5988, + 4718, 5988, 5988, 4723, 4724, 4726, 4727, 4730, 4715, 4733, + 4731, 5988, 4735, 4736, 4743, 4737, 4745, 4747, 4749, 4753, + 4751, 4754, 4761, 4757, 4759, 4763, 4765, 4767, 4774, 5988, - 4781, 4776, 4777, 4778, 4779, 4783, 4765, 4790, 4795, 4788, - 4785, 5977, 4796, 4799, 5977, 4792, 5977, 4798, 4800, 4806, - 4807, 4808, 4809, 4810, 4812, 5977, 5977, 4813, 4814, 4816, - 4823, 4819, 4827, 4815, 4826, 4828, 5977, 4829, 5977, 4831, - 4833, 4840, 4841, 4848, 4849, 4852, 4854, 4850, 4855, 5977, - 4856, 4857, 5977, 4859, 4861, 4862, 5977, 4867, 4864, 4872, - 4874, 5977, 4879, 4876, 4881, 5977, 4884, 5977, 4869, 4885, - 4887, 4894, 5977, 4891, 4895, 5977, 4898, 4901, 4902, 4903, - 5977, 4892, 5977, 4904, 4907, 4908, 4913, 4914, 4918, 4915, - 4919, 4920, 4927, 4923, 4926, 5977, 5977, 4939, 4925, 4931, + 5988, 4764, 4776, 4768, 4785, 4781, 4782, 4789, 4788, 4790, + 4791, 4793, 4794, 4780, 4803, 4804, 4805, 4799, 5988, 4807, + 4806, 5988, 4813, 5988, 4814, 4815, 4816, 4817, 4818, 4822, + 4823, 4826, 5988, 5988, 4821, 4828, 4832, 4837, 4833, 4829, + 4839, 4842, 4843, 5988, 4844, 5988, 4845, 4846, 4856, 4847, + 4863, 4864, 4866, 4868, 4853, 4869, 5988, 4870, 4871, 5988, + 4873, 4875, 4876, 5988, 4880, 4878, 4883, 4886, 5988, 4888, + 4890, 4892, 5988, 4899, 5988, 4893, 4895, 4902, 4907, 5988, + 4903, 4904, 5988, 4909, 4911, 4912, 4916, 5988, 4917, 5988, + 4918, 4920, 4921, 4925, 4926, 4928, 4930, 4931, 4932, 4939, - 4932, 4935, 4942, 4940, 4943, 4945, 5977, 5977, 4949, 5977, - 4950, 4953, 5977, 4946, 4957, 4955, 4959, 4961, 4962, 4963, - 4967, 4969, 4975, 4970, 4968, 4980, 4991, 4974, 4995, 4996, - 4998, 5000, 5002, 4976, 5004, 5005, 4981, 5006, 5008, 5010, - 5977, 5012, 5013, 5014, 5977, 5018, 5019, 5021, 5022, 5977, - 5024, 5029, 5031, 5033, 5977, 5034, 5036, 5037, 5039, 5043, - 5050, 5046, 5045, 5047, 5977, 5977, 5977, 5055, 5057, 5977, - 5062, 5053, 5063, 5064, 5977, 5065, 5066, 5977, 5977, 5068, - 5070, 5069, 5077, 5977, 5072, 5977, 5073, 5977, 5075, 5076, - 5085, 5083, 5977, 5090, 5096, 5977, 5099, 5102, 5104, 5105, + 4937, 4940, 5988, 5988, 4948, 4934, 4945, 4950, 4952, 4959, + 4951, 4956, 4955, 5988, 5988, 4961, 5988, 4963, 4964, 5988, + 4962, 4969, 4968, 4973, 4974, 4975, 4977, 4980, 4982, 4990, + 4983, 4981, 4994, 5004, 4988, 5006, 5008, 5010, 5012, 5014, + 5016, 4984, 4999, 5017, 5018, 5020, 5021, 5988, 5023, 5025, + 5024, 5988, 5030, 5026, 5035, 5031, 5988, 5038, 5039, 5044, + 5045, 5988, 5046, 5050, 5047, 5052, 5055, 5063, 5056, 5058, + 5068, 5988, 5988, 5988, 5060, 5074, 5988, 5076, 5066, 5059, + 5071, 5988, 5077, 5078, 5988, 5988, 5079, 5082, 5081, 5093, + 5988, 5083, 5988, 5085, 5988, 5092, 5094, 5102, 5096, 5988, - 5087, 5091, 5106, 5977, 5115, 5108, 5112, 5119, 5116, 5120, - 5121, 5122, 5129, 5124, 5128, 5977, 5131, 5125, 5132, 5138, - 5133, 5136, 5142, 5977, 5144, 5977, 5145, 5146, 5150, 5147, - 5148, 5153, 5155, 5160, 5157, 5167, 5161, 5977, 5169, 5171, - 5977, 5173, 5977, 5175, 5977, 5176, 5177, 5179, 5181, 5977, - 5185, 5178, 5182, 5187, 5977, 5188, 5190, 5191, 5197, 5977, - 5977, 5199, 5207, 5203, 5200, 5212, 5214, 5209, 5216, 5217, - 5218, 5220, 5230, 5202, 5225, 5223, 5232, 5233, 5238, 5977, - 5977, 5977, 5234, 5241, 5248, 5245, 5247, 5255, 5251, 5977, - 5252, 5253, 5254, 5262, 5259, 5264, 5977, 5260, 5265, 5266, + 5107, 5109, 5988, 5115, 5117, 5119, 5111, 5088, 5121, 5122, + 5988, 5129, 5125, 5126, 5133, 5124, 5128, 5134, 5135, 5143, + 5136, 5145, 5988, 5146, 5147, 5151, 5154, 5138, 5148, 5158, + 5988, 5160, 5988, 5162, 5164, 5165, 5167, 5166, 5168, 5171, + 5180, 5170, 5173, 5174, 5988, 5184, 5189, 5988, 5181, 5988, + 5191, 5988, 5192, 5194, 5195, 5198, 5988, 5200, 5186, 5197, + 5204, 5988, 5212, 5201, 5205, 5217, 5988, 5988, 5207, 5225, + 5209, 5218, 5222, 5229, 5226, 5231, 5232, 5233, 5234, 5241, + 5236, 5237, 5238, 5245, 5248, 5252, 5988, 5988, 5988, 5247, + 5256, 5263, 5261, 5262, 5270, 5266, 5988, 5267, 5268, 5269, - 5267, 5271, 5268, 5275, 5977, 5279, 5282, 5285, 5274, 5289, - 5293, 5296, 5298, 5299, 5977, 5301, 5977, 5977, 5286, 5977, - 5302, 5303, 5306, 5307, 5977, 5310, 5312, 5311, 5313, 5315, - 5317, 5977, 5327, 5318, 5320, 5329, 5977, 5977, 5333, 5977, - 5336, 5337, 5330, 5346, 5341, 5343, 5348, 5345, 5977, 5349, - 5352, 5354, 5355, 5356, 5977, 5357, 5358, 5360, 5361, 5364, - 5363, 5366, 5368, 5370, 5977, 5371, 5373, 5391, 5387, 5977, - 5374, 5386, 5977, 5977, 5396, 5398, 5319, 5977, 5977, 5977, - 5401, 5977, 5403, 5407, 5411, 5415, 5406, 5977, 5417, 5414, - 5419, 5977, 5977, 5418, 5420, 5421, 5423, 5977, 5977, 5424, + 5277, 5274, 5279, 5988, 5275, 5280, 5281, 5282, 5286, 5283, + 5290, 5988, 5294, 5297, 5300, 5289, 5304, 5308, 5311, 5313, + 5314, 5988, 5316, 5988, 5988, 5301, 5988, 5317, 5318, 5321, + 5322, 5988, 5325, 5327, 5326, 5328, 5330, 5332, 5988, 5342, + 5333, 5335, 5344, 5988, 5988, 5348, 5988, 5351, 5352, 5345, + 5361, 5356, 5358, 5363, 5360, 5988, 5364, 5367, 5369, 5370, + 5371, 5988, 5372, 5373, 5375, 5376, 5379, 5378, 5381, 5383, + 5385, 5988, 5386, 5388, 5406, 5402, 5988, 5389, 5401, 5988, + 5988, 5411, 5413, 5334, 5988, 5988, 5988, 5416, 5988, 5418, + 5422, 5426, 5430, 5421, 5988, 5432, 5429, 5434, 5988, 5988, - 5427, 5425, 5428, 5430, 5977, 5435, 5439, 5441, 5444, 5447, - 5436, 5450, 5452, 5460, 5462, 5457, 5458, 5463, 5465, 5466, - 5467, 5469, 5478, 5474, 5476, 5488, 5485, 5977, 5977, 5492, - 5977, 5977, 5494, 5496, 5498, 5500, 5502, 5504, 5506, 5977, - 5507, 5509, 5510, 5378, 5511, 5977, 5513, 5515, 5512, 5517, - 5477, 5520, 5518, 5523, 5977, 5977, 5524, 5525, 5526, 5534, - 5529, 5977, 5536, 5543, 5540, 5541, 5538, 5544, 5545, 5977, - 5549, 5550, 5977, 5977, 5548, 5977, 5977, 5977, 5977, 5977, - 5977, 5977, 5977, 5553, 5977, 5551, 5566, 5568, 5570, 5977, - 5558, 5571, 5479, 5572, 5560, 5977, 5573, 5575, 5577, 5576, + 5433, 5435, 5436, 5438, 5988, 5988, 5439, 5442, 5440, 5443, + 5445, 5988, 5450, 5454, 5456, 5459, 5462, 5451, 5465, 5467, + 5475, 5477, 5472, 5473, 5478, 5480, 5481, 5482, 5484, 5493, + 5489, 5491, 5503, 5500, 5988, 5988, 5507, 5988, 5988, 5509, + 5511, 5513, 5515, 5517, 5519, 5521, 5988, 5522, 5524, 5525, + 5393, 5526, 5988, 5528, 5530, 5527, 5532, 5492, 5535, 5533, + 5538, 5988, 5988, 5539, 5540, 5541, 5549, 5544, 5988, 5551, + 5558, 5555, 5556, 5553, 5559, 5560, 5988, 5564, 5565, 5988, + 5988, 5563, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988, + 5568, 5988, 5566, 5581, 5583, 5585, 5988, 5573, 5586, 5494, - 5579, 5583, 5585, 5587, 5589, 5588, 5590, 5593, 5591, 5597, - 5595, 5599, 5605, 5977, 5977, 5977, 5603, 5601, 5612, 5613, - 5624, 5625, 5628, 5630, 5614, 5618, 5631, 5632, 5635, 5620, - 5636, 5647, 5639, 5642, 5643, 5644, 5650, 5646, 5652, 5656, - 5977, 5657, 5977, 5658, 5977, 5977, 5660, 5662, 5665, 5666, - 5674, 5675, 5667, 5670, 5677, 5679, 5687, 5689, 5977, 5678, - 5680, 5977, 5690, 5691, 5977, 5682, 5692, 5693, 5694, 5698, - 5701, 5703, 5705, 5714, 5977, 5977, 5706, 5709, 5715, 5717, - 5718, 5725, 5721, 5724, 5728, 5730, 5731, 5738, 5977, 5737, - 5739, 5741, 5977, 5742, 5743, 5745, 5747, 5748, 5755, 5751, + 5587, 5575, 5988, 5588, 5590, 5592, 5098, 5591, 5593, 5599, + 5598, 5600, 5603, 5602, 5605, 5604, 5609, 5608, 5610, 5623, + 5988, 5988, 5988, 5622, 5614, 5616, 5624, 5626, 5631, 5638, + 5640, 5635, 5641, 5642, 5643, 5644, 5646, 5647, 5656, 5651, + 5652, 5653, 5655, 5660, 5657, 5663, 5667, 5988, 5668, 5988, + 5669, 5988, 5988, 5674, 5676, 5670, 5679, 5686, 5690, 5681, + 5688, 5685, 5689, 5692, 5697, 5988, 5693, 5699, 5988, 5702, + 5703, 5988, 5700, 5705, 5706, 5708, 5709, 5711, 5712, 5713, + 5724, 5988, 5988, 5715, 5726, 5727, 5729, 5731, 5738, 5733, + 5737, 5740, 5743, 5739, 5747, 5988, 5750, 5751, 5753, 5988, - 5756, 5977, 5753, 5977, 5758, 5759, 5760, 5761, 5763, 5764, - 5772, 5774, 5775, 5977, 5776, 5783, 5778, 5785, 5789, 5787, - 5791, 5781, 5794, 5796, 5803, 5807, 5804, 5808, 5795, 5812, - 5799, 5977, 5810, 5813, 5977, 5816, 5819, 5820, 5822, 5825, - 5977, 5828, 5823, 5829, 5830, 5834, 5836, 5977, 5838, 5845, - 5840, 5977, 5846, 5977, 5977, 5849, 5850, 5852, 5856, 5858, - 5977, 5977, 5977, 5885, 5892, 5899, 5906, 5913, 88, 5920, - 5927, 5934, 5941, 5948, 5955, 5962, 5969 + 5755, 5754, 5757, 5760, 5761, 5768, 5763, 5765, 5988, 5766, + 5988, 5770, 5772, 5771, 5774, 5775, 5777, 5785, 5783, 5787, + 5988, 5789, 5791, 5795, 5796, 5798, 5801, 5802, 5803, 5805, + 5807, 5808, 5817, 5811, 5813, 5819, 5821, 5823, 5988, 5825, + 5827, 5988, 5828, 5829, 5830, 5831, 5835, 5988, 5840, 5832, + 5837, 5843, 5848, 5845, 5988, 5854, 5858, 5855, 5988, 5859, + 5988, 5988, 5860, 5861, 5863, 5867, 5869, 5988, 5988, 5988, + 5896, 5903, 5910, 5917, 5924, 88, 5931, 5938, 5945, 5952, + 5959, 5966, 5973, 5980 } ; -static const flex_int16_t yy_def[3078] = +static const flex_int16_t yy_def[3085] = { 0, - 3063, 1, 3064, 3064, 3065, 3065, 3066, 3066, 3067, 3067, - 3068, 3068, 3063, 3069, 3063, 3063, 3063, 3063, 3070, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3071, 3063, 3063, 3063, 3071, 3072, 3063, 3063, - 3063, 3072, 3073, 3063, 3063, 3063, 3063, 3073, 3074, 3063, - 3063, 3063, 3074, 3075, 3063, 3076, 3063, 3075, 3075, 3069, - 3069, 3063, 3077, 3070, 3077, 3070, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3070, 1, 3071, 3071, 3072, 3072, 3073, 3073, 3074, 3074, + 3075, 3075, 3070, 3076, 3070, 3070, 3070, 3070, 3077, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3078, 3070, 3070, 3070, 3078, 3079, 3070, 3070, + 3070, 3079, 3080, 3070, 3070, 3070, 3070, 3080, 3081, 3070, + 3070, 3070, 3081, 3082, 3070, 3083, 3070, 3082, 3082, 3076, + 3076, 3070, 3084, 3077, 3084, 3077, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3071, 3071, 3072, 3072, 3073, 3073, 3063, 3074, 3074, 3075, - 3075, 3076, 3076, 3075, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3078, 3078, 3079, 3079, 3080, 3080, 3070, 3081, 3081, 3082, + 3082, 3083, 3083, 3082, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3075, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3082, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3075, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3082, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3075, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3082, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3075, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3063, 3069, 3063, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3082, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3070, 3076, + 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3075, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3082, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3063, 3069, 3069, 3075, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3082, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3063, 3069, 3063, 3069, 3069, 3069, 3063, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, + 3070, 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3063, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3063, 3063, 3069, 3063, 3069, 3063, 3069, 3069, 3063, - 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, + 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3070, + 3076, 3070, 3076, 3070, 3076, 3076, 3070, 3070, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3063, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3069, 3063, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3070, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3063, 3069, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3063, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3063, 3063, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3063, 3063, 3069, - 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3063, 3069, 3069, - 3069, 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3070, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3070, 3070, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, + 3070, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3063, 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, 3076, 3070, + 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3063, 3063, 3069, 3063, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3063, 3063, 3063, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3063, 3063, 3069, + 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, + 3070, 3076, 3076, 3076, 3070, 3070, 3070, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, 3070, - 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3063, 3069, - 3063, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3063, 3063, 3069, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3063, - 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, + 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, + 3070, 3076, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3063, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3063, 3069, 3063, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3063, 3063, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, - 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3069, + 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, + 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, - 3069, 3063, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, - 3069, 3063, 3069, 3069, 3063, 3069, 3069, 3069, 3069, 3069, - 3063, 3069, 3069, 3069, 3069, 3069, 3069, 3063, 3069, 3069, - 3069, 3063, 3069, 3063, 3063, 3069, 3069, 3069, 3069, 3069, - 3063, 3063, 0, 3063, 3063, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063 + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, + 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, 3076, + 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 0, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3070, 3070, 3070, 3070 } ; -static const flex_int16_t yy_nxt[6018] = +static const flex_int16_t yy_nxt[6029] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1521,7 +1523,7 @@ static const flex_int16_t yy_nxt[6018] = 455, 458, 71, 466, 71, 460, 456, 464, 71, 71, 71, 459, 467, 71, 71, 468, 71, 71, 461, 469, 71, 462, 483, 463, 479, 470, 71, 71, 71, 471, - 71, 484, 481, 732, 486, 480, 71, 472, 71, 473, + 71, 484, 481, 733, 486, 480, 71, 472, 71, 473, 71, 474, 482, 71, 71, 494, 496, 485, 151, 495, 498, 497, 71, 71, 475, 500, 71, 476, 501, 477, 504, 478, 71, 71, 487, 488, 71, 71, 71, 499, @@ -1548,553 +1550,554 @@ static const flex_int16_t yy_nxt[6018] = 71, 596, 71, 71, 595, 599, 71, 602, 597, 71, 603, 598, 604, 71, 605, 71, 71, 600, 71, 71, 71, 601, 71, 608, 71, 71, 611, 71, 71, 607, - 612, 71, 614, 71, 71, 71, 644, 610, 606, 613, + 612, 71, 614, 71, 71, 71, 645, 610, 606, 613, 71, 609, 71, 71, 615, 71, 617, 628, 71, 631, 616, 71, 618, 71, 626, 627, 71, 619, 632, 620, 71, 629, 633, 71, 630, 621, 71, 622, 635, 71, - 623, 624, 636, 638, 71, 634, 71, 625, 637, 71, - 71, 71, 640, 641, 639, 71, 646, 71, 71, 71, - 71, 71, 71, 71, 149, 71, 643, 642, 652, 71, - 648, 653, 647, 71, 649, 656, 645, 71, 151, 650, - 71, 659, 658, 651, 654, 71, 657, 71, 655, 71, - 71, 71, 660, 71, 71, 71, 71, 668, 666, 71, - 661, 670, 71, 71, 663, 71, 664, 669, 662, 667, - 671, 665, 673, 71, 71, 672, 71, 674, 71, 71, + 623, 624, 641, 639, 71, 634, 71, 625, 638, 71, + 71, 71, 636, 642, 640, 637, 71, 647, 71, 71, + 71, 71, 71, 71, 71, 71, 644, 643, 653, 71, + 71, 649, 71, 648, 654, 650, 646, 71, 657, 71, + 651, 661, 660, 655, 652, 656, 658, 151, 71, 71, + 71, 659, 71, 71, 662, 71, 71, 71, 71, 667, + 669, 671, 71, 71, 664, 670, 672, 665, 663, 668, + 674, 666, 71, 71, 71, 673, 71, 676, 71, 71, - 71, 71, 675, 71, 679, 678, 71, 676, 71, 677, - 684, 695, 680, 71, 71, 685, 71, 687, 71, 681, - 688, 71, 682, 689, 683, 71, 686, 690, 71, 71, - 691, 71, 692, 71, 71, 693, 694, 71, 71, 71, - 698, 71, 697, 71, 696, 71, 699, 702, 703, 71, - 71, 71, 71, 704, 71, 708, 706, 71, 71, 71, - 147, 71, 700, 709, 701, 71, 71, 71, 705, 711, - 71, 710, 707, 71, 712, 71, 715, 714, 713, 71, - 71, 720, 71, 716, 718, 719, 717, 722, 721, 71, - 71, 723, 724, 71, 725, 71, 71, 71, 71, 728, + 71, 71, 71, 680, 71, 675, 679, 688, 71, 71, + 685, 681, 677, 690, 678, 686, 71, 71, 682, 71, + 684, 683, 687, 689, 71, 691, 71, 692, 71, 693, + 71, 71, 71, 695, 71, 71, 696, 71, 694, 71, + 699, 71, 698, 71, 700, 71, 704, 71, 71, 703, + 71, 697, 71, 707, 705, 71, 71, 709, 71, 71, + 71, 710, 702, 71, 701, 706, 71, 71, 716, 712, + 71, 71, 711, 71, 713, 708, 718, 715, 714, 71, + 71, 71, 149, 723, 719, 720, 722, 721, 717, 71, + 724, 71, 71, 71, 725, 71, 726, 71, 728, 71, - 727, 71, 729, 71, 71, 71, 736, 71, 734, 71, - 71, 71, 71, 71, 730, 146, 726, 733, 737, 731, - 71, 740, 742, 71, 71, 735, 744, 739, 71, 738, - 743, 749, 741, 745, 746, 71, 71, 71, 747, 71, - 751, 753, 748, 71, 144, 71, 71, 71, 752, 71, - 755, 756, 754, 750, 71, 71, 757, 71, 71, 763, - 71, 71, 71, 760, 71, 71, 71, 758, 759, 766, - 765, 71, 768, 769, 71, 772, 71, 761, 762, 764, - 71, 71, 767, 770, 71, 775, 773, 71, 777, 774, - 776, 71, 71, 71, 779, 71, 71, 781, 771, 71, + 729, 71, 71, 71, 730, 71, 737, 71, 735, 71, + 71, 731, 71, 71, 743, 734, 147, 71, 727, 732, + 71, 738, 741, 71, 71, 736, 740, 71, 739, 742, + 744, 71, 746, 747, 745, 71, 71, 71, 71, 748, + 752, 750, 749, 71, 754, 783, 71, 71, 753, 71, + 71, 71, 751, 71, 755, 757, 71, 764, 756, 71, + 758, 71, 759, 71, 761, 71, 765, 71, 71, 760, + 71, 769, 767, 71, 766, 71, 773, 71, 762, 763, + 770, 71, 71, 71, 771, 71, 776, 774, 768, 71, + 775, 777, 71, 71, 778, 71, 71, 780, 782, 772, - 71, 778, 71, 71, 787, 71, 71, 71, 71, 788, - 71, 71, 780, 71, 782, 789, 71, 783, 784, 71, - 71, 785, 790, 786, 796, 71, 791, 793, 794, 71, - 71, 792, 798, 71, 795, 71, 71, 71, 71, 797, - 801, 71, 71, 71, 71, 809, 71, 71, 799, 71, - 810, 71, 800, 802, 803, 804, 71, 808, 71, 805, - 806, 807, 812, 813, 71, 71, 811, 71, 71, 814, - 71, 71, 815, 819, 818, 71, 821, 816, 817, 71, - 71, 71, 820, 71, 822, 71, 71, 824, 823, 71, - 825, 151, 830, 71, 827, 71, 829, 826, 828, 831, + 71, 784, 779, 71, 71, 788, 71, 71, 781, 71, + 789, 71, 71, 71, 71, 71, 790, 797, 785, 71, + 71, 795, 786, 71, 787, 71, 71, 791, 792, 71, + 71, 71, 793, 798, 794, 796, 71, 799, 71, 71, + 802, 71, 71, 71, 811, 800, 804, 809, 801, 803, + 71, 71, 71, 71, 71, 812, 805, 806, 807, 71, + 808, 71, 71, 71, 810, 814, 816, 815, 71, 71, + 71, 813, 71, 821, 823, 817, 819, 820, 71, 822, + 71, 818, 71, 824, 71, 71, 71, 151, 71, 826, + 71, 71, 831, 827, 832, 829, 71, 71, 825, 828, - 71, 71, 71, 71, 837, 71, 71, 832, 71, 833, - 71, 838, 840, 71, 843, 841, 834, 835, 71, 839, - 71, 71, 71, 836, 71, 845, 71, 842, 71, 849, - 71, 71, 71, 71, 846, 71, 850, 851, 844, 71, - 71, 71, 71, 71, 848, 142, 864, 71, 71, 847, - 852, 863, 866, 854, 861, 71, 853, 71, 862, 865, - 71, 867, 855, 71, 868, 870, 856, 71, 71, 857, - 71, 71, 71, 71, 873, 872, 858, 859, 869, 860, - 71, 71, 871, 71, 874, 875, 881, 876, 889, 883, - 877, 882, 71, 71, 895, 878, 885, 884, 886, 71, + 830, 833, 71, 71, 834, 835, 71, 839, 71, 71, + 840, 842, 71, 71, 71, 845, 71, 836, 841, 71, + 837, 71, 843, 847, 838, 71, 71, 71, 851, 71, + 71, 71, 71, 844, 71, 71, 846, 848, 852, 853, + 71, 71, 71, 71, 71, 850, 883, 854, 71, 865, + 866, 849, 71, 869, 71, 856, 855, 71, 863, 864, + 71, 71, 857, 71, 867, 868, 858, 71, 870, 859, + 71, 871, 872, 71, 875, 71, 860, 861, 71, 862, + 71, 71, 146, 874, 873, 71, 876, 877, 71, 878, + 898, 887, 879, 885, 884, 888, 71, 880, 71, 71, - 71, 879, 880, 71, 888, 71, 890, 887, 71, 71, - 71, 71, 892, 891, 71, 893, 894, 71, 71, 71, - 71, 71, 898, 896, 71, 902, 71, 71, 901, 71, - 71, 905, 71, 897, 71, 71, 909, 911, 71, 899, - 900, 903, 71, 904, 907, 906, 71, 912, 944, 71, - 71, 910, 913, 71, 914, 915, 908, 916, 921, 71, - 918, 71, 71, 71, 917, 919, 71, 71, 922, 71, - 923, 71, 71, 920, 71, 71, 71, 71, 929, 71, - 924, 926, 927, 71, 71, 71, 71, 71, 932, 71, - 71, 931, 925, 930, 71, 934, 928, 71, 935, 938, + 890, 71, 71, 881, 882, 889, 886, 71, 892, 71, + 71, 71, 71, 894, 893, 900, 891, 895, 896, 71, + 71, 899, 897, 71, 71, 71, 71, 904, 71, 71, + 71, 71, 903, 71, 907, 911, 71, 913, 71, 924, + 71, 71, 906, 901, 902, 905, 71, 908, 909, 914, + 917, 912, 71, 910, 915, 71, 71, 916, 918, 71, + 71, 920, 921, 71, 71, 919, 71, 71, 71, 922, + 925, 71, 71, 71, 923, 71, 926, 71, 928, 931, + 71, 71, 929, 71, 71, 934, 71, 71, 71, 933, + 927, 71, 932, 71, 71, 936, 930, 937, 939, 71, - 71, 71, 937, 939, 933, 71, 940, 71, 71, 945, - 71, 936, 71, 947, 946, 71, 71, 943, 71, 941, - 71, 71, 71, 71, 954, 948, 952, 950, 955, 71, - 71, 71, 942, 71, 953, 949, 957, 71, 71, 71, - 71, 71, 956, 71, 951, 71, 71, 965, 968, 963, - 71, 958, 71, 959, 71, 71, 71, 960, 71, 962, - 961, 969, 970, 966, 964, 967, 71, 71, 71, 71, - 972, 71, 973, 975, 971, 976, 71, 71, 977, 71, - 978, 974, 71, 71, 985, 980, 71, 71, 987, 979, - 71, 71, 989, 71, 71, 71, 71, 990, 71, 981, + 71, 71, 71, 935, 941, 942, 71, 71, 940, 71, + 949, 938, 947, 71, 71, 945, 943, 948, 71, 944, + 946, 71, 71, 71, 71, 71, 954, 956, 950, 71, + 952, 957, 71, 951, 955, 71, 71, 71, 71, 71, + 959, 71, 71, 71, 71, 958, 953, 967, 71, 970, + 960, 965, 71, 71, 71, 71, 961, 962, 71, 964, + 963, 971, 968, 71, 966, 972, 71, 969, 71, 975, + 71, 71, 974, 973, 71, 977, 978, 71, 71, 71, + 976, 71, 71, 980, 71, 71, 982, 987, 979, 988, + 990, 981, 71, 71, 992, 71, 71, 71, 71, 983, - 991, 986, 983, 71, 982, 71, 984, 993, 71, 71, - 995, 988, 992, 71, 997, 994, 998, 71, 71, 1002, - 999, 71, 71, 1004, 71, 71, 71, 1000, 71, 996, - 71, 1001, 71, 1006, 1007, 151, 1009, 71, 1010, 71, - 71, 1003, 71, 71, 1005, 1008, 71, 1013, 71, 71, - 71, 71, 1025, 71, 71, 1028, 71, 1026, 71, 71, - 1012, 1011, 1014, 1016, 71, 71, 1051, 71, 1017, 1027, - 1015, 1018, 71, 1031, 71, 1019, 71, 1020, 1030, 1032, - 71, 1021, 71, 1022, 1029, 1033, 1035, 71, 1023, 71, - 1034, 1036, 71, 1024, 71, 71, 1037, 71, 1038, 71, + 71, 985, 993, 984, 986, 991, 989, 71, 71, 71, + 996, 994, 71, 71, 998, 1001, 995, 71, 997, 71, + 1000, 71, 71, 1005, 71, 1002, 1007, 71, 71, 71, + 1004, 1003, 71, 999, 1010, 151, 71, 1009, 71, 71, + 1013, 71, 1012, 71, 1006, 71, 1008, 71, 1016, 71, + 71, 1011, 71, 71, 71, 1028, 71, 1031, 71, 144, + 1029, 71, 71, 1014, 1019, 1015, 1017, 71, 71, 1054, + 71, 1033, 1020, 1018, 1021, 71, 1030, 71, 1022, 71, + 1023, 71, 1036, 1034, 1024, 71, 1025, 1032, 71, 71, + 71, 1026, 1038, 1035, 1041, 1037, 1027, 1039, 71, 1040, - 1044, 1043, 1040, 71, 1041, 71, 71, 1049, 71, 1050, - 1039, 1045, 1048, 71, 1042, 71, 1052, 1053, 71, 1047, - 71, 71, 71, 71, 1046, 71, 71, 71, 71, 1068, - 1054, 1065, 71, 1070, 1064, 71, 71, 1055, 1056, 71, - 1057, 1066, 71, 71, 1067, 1058, 3063, 1059, 1069, 1071, - 1074, 71, 71, 1060, 1076, 1072, 1075, 71, 1061, 1062, - 71, 1073, 71, 71, 1080, 1063, 1077, 71, 71, 71, - 71, 71, 1081, 71, 71, 1079, 1078, 1086, 1083, 71, - 1084, 71, 71, 71, 71, 71, 1089, 1082, 1087, 1085, - 71, 71, 71, 1088, 71, 71, 71, 71, 1091, 1094, + 71, 1046, 71, 1043, 71, 1044, 1042, 1047, 71, 71, + 71, 1052, 71, 1053, 71, 1045, 1051, 71, 1048, 71, + 1055, 1056, 71, 1050, 71, 71, 71, 71, 71, 1049, + 71, 1068, 71, 1058, 1057, 71, 1067, 1072, 71, 71, + 1059, 71, 1060, 1073, 1069, 71, 1071, 1061, 1093, 1062, + 1070, 71, 71, 1074, 71, 1063, 1077, 71, 1078, 1079, + 1064, 1065, 71, 71, 71, 71, 1080, 1066, 1083, 71, + 1075, 1076, 142, 71, 71, 71, 71, 1082, 1084, 71, + 1089, 1081, 71, 71, 1086, 1087, 71, 71, 1085, 71, + 71, 1090, 1092, 71, 71, 1088, 71, 71, 71, 71, - 1096, 1095, 1090, 1093, 1098, 1092, 71, 71, 71, 71, - 71, 1111, 1097, 1099, 71, 3063, 1101, 71, 71, 71, - 1100, 71, 1103, 1106, 1107, 71, 1102, 1104, 71, 1105, - 1108, 71, 1110, 71, 1112, 1114, 71, 1109, 71, 1116, - 1115, 71, 1117, 71, 71, 71, 1118, 71, 71, 1113, - 1119, 1125, 71, 71, 1127, 71, 71, 71, 3063, 71, - 71, 1121, 71, 1124, 1120, 1122, 1123, 1129, 71, 71, - 1128, 1131, 1126, 1130, 1133, 71, 71, 1132, 71, 71, - 1134, 71, 71, 1136, 1137, 71, 1143, 71, 1139, 71, - 1142, 71, 1135, 1138, 71, 1141, 71, 71, 1147, 71, + 1099, 71, 1091, 1094, 71, 1096, 1097, 1098, 1101, 71, + 1095, 71, 71, 1100, 71, 1102, 71, 71, 1103, 71, + 71, 1104, 1109, 71, 1110, 1106, 71, 71, 1105, 1112, + 1107, 1108, 1111, 71, 1113, 1114, 1115, 71, 1117, 71, + 1121, 71, 1116, 1118, 71, 71, 1119, 71, 71, 1120, + 71, 71, 71, 1122, 1128, 71, 1130, 71, 71, 71, + 71, 71, 71, 1132, 1124, 1126, 1127, 1123, 1125, 71, + 71, 71, 1131, 1133, 1134, 1129, 71, 71, 71, 71, + 71, 1136, 1135, 1137, 1139, 1138, 71, 71, 71, 1141, + 71, 1140, 1145, 1142, 1144, 71, 1143, 71, 71, 1146, - 1144, 1140, 1146, 71, 71, 71, 71, 71, 1153, 1151, - 1154, 71, 1145, 71, 71, 71, 71, 71, 1155, 71, - 1152, 1148, 1156, 1149, 1157, 1150, 1158, 1161, 71, 1159, - 71, 71, 71, 71, 71, 1160, 1162, 1163, 71, 1164, - 71, 71, 71, 1165, 1167, 1168, 1166, 71, 71, 71, - 1173, 1169, 1174, 71, 71, 71, 71, 71, 71, 71, - 1171, 71, 1176, 1177, 71, 1170, 1181, 1180, 1172, 1175, - 71, 71, 1178, 1179, 71, 71, 71, 1187, 71, 1182, - 1183, 71, 71, 71, 71, 71, 1191, 1193, 71, 71, - 71, 1208, 71, 1184, 1197, 1186, 1188, 1190, 1189, 1192, + 71, 71, 71, 71, 1147, 1149, 71, 1150, 1148, 71, + 1156, 71, 1154, 1157, 71, 1151, 71, 71, 71, 71, + 1152, 71, 1158, 1153, 1155, 71, 1159, 1161, 1164, 71, + 1160, 71, 1162, 71, 71, 71, 1165, 71, 1163, 1166, + 71, 71, 71, 71, 1167, 1171, 1168, 1169, 71, 71, + 71, 1172, 71, 1177, 1173, 1178, 71, 71, 71, 71, + 1170, 71, 1175, 1180, 1181, 71, 71, 1174, 71, 71, + 1185, 1176, 1179, 71, 71, 1182, 71, 71, 71, 71, + 1183, 1184, 1187, 1191, 71, 71, 1186, 71, 71, 71, + 1197, 71, 71, 1192, 1195, 1188, 3070, 1190, 1199, 1194, - 1185, 1195, 1196, 71, 1194, 1198, 71, 71, 71, 71, - 71, 1199, 71, 71, 71, 71, 71, 1202, 71, 3063, - 71, 71, 1205, 1200, 1201, 71, 71, 71, 1203, 71, - 71, 1206, 1212, 1204, 1209, 1214, 1221, 1207, 71, 1210, - 1211, 71, 1218, 1219, 1215, 71, 1216, 1213, 71, 1217, - 1220, 71, 71, 71, 71, 1223, 71, 71, 71, 1222, - 71, 1227, 71, 1226, 71, 1229, 71, 1224, 1333, 1230, - 71, 1225, 1232, 71, 71, 1233, 1228, 71, 71, 1234, - 71, 1231, 1236, 71, 1235, 71, 71, 1237, 71, 1238, - 71, 71, 71, 1239, 71, 71, 71, 71, 1244, 71, + 1193, 1196, 1189, 1200, 71, 71, 71, 71, 1198, 71, + 1201, 71, 1203, 1202, 71, 71, 71, 71, 71, 71, + 1204, 1206, 71, 1212, 71, 1209, 71, 71, 1205, 71, + 1207, 71, 71, 71, 1210, 1337, 1208, 1216, 71, 1222, + 1213, 1211, 71, 71, 1215, 1214, 71, 1218, 1223, 1224, + 71, 71, 1217, 1225, 71, 71, 1219, 1227, 1220, 71, + 71, 1221, 71, 71, 71, 1226, 71, 1231, 71, 1230, + 71, 1233, 1236, 71, 1228, 1234, 71, 1229, 71, 71, + 71, 1237, 1232, 1238, 1240, 71, 71, 1235, 71, 1241, + 1239, 71, 71, 71, 71, 1242, 71, 71, 71, 1245, - 1240, 71, 1242, 1243, 1245, 1241, 71, 1249, 71, 1254, - 71, 71, 1250, 1246, 1248, 71, 1247, 1253, 71, 1251, - 71, 71, 71, 1258, 1255, 71, 1252, 71, 1256, 1260, - 71, 1257, 1274, 1259, 1261, 71, 71, 1265, 71, 1263, - 1264, 1262, 71, 1272, 71, 71, 1275, 1266, 71, 71, - 1267, 1268, 1278, 1273, 1276, 1269, 71, 1277, 71, 71, - 71, 1270, 71, 71, 1279, 1271, 71, 1280, 71, 1281, - 71, 1283, 71, 71, 71, 1288, 1284, 1282, 1285, 1290, - 1286, 1287, 71, 71, 1293, 1294, 71, 71, 71, 1351, - 71, 71, 1289, 1295, 71, 1297, 1291, 71, 1296, 71, + 71, 1248, 71, 1243, 1246, 71, 1244, 71, 1247, 1249, + 71, 1253, 71, 71, 1258, 1250, 71, 1254, 1252, 1251, + 71, 1257, 71, 71, 1260, 71, 1264, 1255, 1262, 71, + 1256, 1265, 71, 1261, 71, 71, 1259, 1263, 71, 1269, + 71, 3070, 71, 71, 1279, 71, 1278, 1268, 1266, 1267, + 71, 1277, 71, 1276, 1281, 1270, 71, 71, 1271, 1272, + 1282, 1280, 1283, 1273, 71, 71, 71, 71, 1285, 1274, + 1284, 71, 1287, 1275, 71, 71, 71, 1288, 71, 1289, + 71, 71, 71, 71, 1297, 1286, 1294, 1292, 71, 71, + 71, 1298, 1338, 1299, 1291, 1290, 1295, 71, 71, 71, - 1298, 1292, 1299, 71, 1300, 71, 1301, 71, 1302, 1303, - 1304, 71, 71, 71, 1305, 1306, 71, 1308, 1310, 1313, - 1307, 71, 1309, 1311, 71, 1312, 1314, 71, 71, 71, - 71, 71, 1320, 71, 1321, 71, 71, 1316, 71, 71, - 71, 1315, 71, 1322, 1324, 1319, 71, 71, 1317, 1318, - 1323, 1326, 71, 71, 1325, 1330, 71, 1329, 1332, 71, - 71, 71, 71, 1334, 1327, 71, 1335, 71, 1331, 1338, - 71, 71, 1328, 71, 1337, 1340, 71, 71, 1341, 71, - 71, 1336, 1345, 71, 1342, 71, 71, 1339, 1347, 71, - 71, 71, 1343, 71, 1344, 1349, 1353, 71, 1350, 71, + 1293, 1296, 1300, 71, 1306, 71, 1307, 1308, 1301, 71, + 71, 71, 71, 1302, 1310, 1303, 1309, 1304, 71, 1305, + 71, 71, 71, 1314, 71, 71, 1311, 1313, 1315, 71, + 1312, 1316, 71, 1320, 71, 1319, 71, 1318, 71, 1324, + 71, 1325, 1317, 71, 1321, 71, 1326, 71, 71, 71, + 1323, 71, 1328, 1322, 71, 71, 71, 1327, 1330, 71, + 1333, 71, 1329, 1334, 71, 1336, 71, 71, 71, 1331, + 1341, 1335, 1339, 1342, 71, 1344, 71, 71, 1340, 1332, + 71, 1345, 1346, 71, 71, 1349, 71, 71, 1343, 71, + 71, 71, 1351, 71, 71, 71, 1353, 1355, 71, 71, - 1346, 71, 71, 71, 1355, 71, 1348, 1356, 71, 1352, - 1358, 1357, 1354, 1359, 71, 1360, 71, 71, 71, 1362, - 71, 1361, 1366, 1363, 1367, 1364, 71, 71, 71, 1369, - 71, 1368, 71, 1365, 71, 71, 1370, 1373, 71, 71, - 71, 71, 1377, 1378, 71, 1372, 1380, 71, 71, 71, - 1379, 1371, 71, 71, 71, 71, 71, 71, 1387, 1374, - 1375, 1381, 71, 71, 1376, 71, 1384, 1382, 71, 1385, - 71, 1392, 71, 1383, 1386, 1391, 71, 71, 71, 1396, - 71, 1394, 1388, 1390, 1397, 71, 71, 1399, 1389, 71, - 71, 1393, 71, 71, 1400, 1407, 1395, 71, 1398, 71, + 3070, 1357, 1354, 71, 1347, 1348, 71, 1350, 1359, 71, + 1352, 71, 1356, 71, 1358, 71, 1361, 1362, 1363, 71, + 1360, 71, 1365, 71, 1364, 71, 71, 71, 1366, 1371, + 1372, 1368, 71, 1367, 1369, 71, 71, 1373, 1374, 1370, + 71, 71, 71, 71, 71, 1378, 71, 71, 71, 1375, + 1382, 1383, 71, 1377, 71, 1385, 71, 71, 1384, 71, + 1376, 71, 71, 1379, 71, 71, 71, 1380, 1386, 71, + 1392, 1381, 71, 71, 1387, 71, 1389, 1397, 71, 1388, + 1390, 71, 1393, 1391, 71, 71, 1396, 1401, 71, 1399, + 71, 1395, 1402, 71, 71, 71, 71, 1394, 1398, 1404, - 71, 71, 1409, 1401, 1410, 1402, 1405, 1403, 71, 1406, - 1404, 1408, 71, 1412, 71, 71, 71, 71, 1413, 71, - 1417, 71, 71, 1411, 71, 1415, 1419, 71, 71, 71, - 1424, 71, 71, 1414, 1416, 1418, 1425, 71, 1421, 71, - 71, 1428, 1420, 71, 71, 1422, 1423, 71, 71, 1426, - 71, 1429, 71, 71, 71, 71, 1427, 1431, 1435, 1430, - 1437, 1436, 1438, 1432, 71, 1433, 71, 1440, 71, 71, - 71, 1434, 71, 1439, 1445, 1442, 1446, 1444, 71, 1447, - 71, 71, 71, 1441, 71, 1448, 1449, 71, 71, 71, - 1451, 1443, 1450, 71, 71, 71, 71, 1456, 71, 71, + 71, 71, 1405, 1412, 1400, 71, 1403, 71, 1414, 1406, + 1410, 1407, 71, 1411, 71, 1408, 1415, 71, 1409, 1417, + 71, 1413, 71, 71, 1418, 71, 71, 71, 1416, 71, + 71, 1422, 71, 71, 1424, 71, 71, 1429, 71, 1419, + 71, 1421, 1430, 71, 71, 1423, 1426, 71, 1420, 1433, + 1425, 1427, 71, 1428, 71, 71, 1434, 71, 1431, 71, + 71, 71, 1432, 71, 71, 1440, 1435, 1437, 1436, 1442, + 1441, 71, 1438, 71, 1445, 71, 71, 71, 1439, 1443, + 1444, 71, 1447, 1450, 71, 1451, 1449, 71, 1452, 71, + 1446, 71, 71, 1453, 1454, 71, 71, 71, 1448, 71, - 1455, 71, 71, 71, 1459, 71, 1462, 1452, 1453, 1458, - 1454, 1463, 71, 71, 1464, 71, 1460, 71, 1457, 1465, - 71, 71, 1461, 71, 1467, 1466, 1470, 71, 71, 1475, - 71, 71, 1468, 1471, 1469, 71, 1476, 71, 1478, 71, - 1472, 71, 71, 71, 71, 1481, 71, 1473, 1474, 1480, - 71, 71, 71, 71, 3063, 71, 71, 1489, 1479, 71, - 1482, 1483, 1490, 1477, 71, 1484, 1486, 1492, 71, 1485, - 1488, 1493, 71, 71, 1487, 71, 1491, 71, 1494, 1495, - 71, 71, 71, 71, 1499, 71, 71, 71, 1500, 1497, - 1496, 1503, 71, 1509, 1498, 1507, 71, 71, 1504, 71, + 1455, 71, 1457, 71, 71, 1461, 1456, 71, 71, 71, + 1460, 71, 71, 1458, 71, 1467, 1459, 1463, 1469, 1464, + 1468, 71, 1465, 1470, 71, 71, 1472, 1462, 71, 71, + 1466, 71, 1471, 71, 71, 71, 71, 1480, 1476, 71, + 1475, 71, 71, 71, 1481, 1483, 71, 1473, 1474, 71, + 1486, 71, 1485, 1477, 1479, 1478, 71, 71, 71, 71, + 71, 1484, 71, 71, 71, 71, 1494, 1482, 1487, 71, + 1497, 71, 1495, 71, 1491, 1496, 1488, 1489, 1490, 1493, + 1498, 71, 71, 1492, 71, 71, 1501, 1499, 1500, 71, + 71, 71, 1504, 71, 1502, 71, 1505, 71, 71, 71, - 71, 1501, 1508, 1502, 71, 71, 71, 1505, 1506, 71, - 1512, 71, 71, 1513, 71, 1510, 1514, 1511, 1518, 1519, - 71, 71, 71, 71, 71, 71, 1515, 1524, 1522, 1516, - 71, 1523, 71, 71, 1517, 1526, 71, 71, 71, 1520, - 1527, 1528, 71, 1521, 71, 1525, 71, 1531, 1529, 71, - 71, 1534, 71, 71, 1530, 71, 71, 71, 1533, 71, - 1538, 71, 1540, 71, 71, 71, 1532, 1535, 71, 1544, - 71, 1539, 71, 71, 1536, 1537, 71, 1541, 1542, 1545, - 71, 1547, 1549, 71, 1550, 71, 1552, 1548, 1546, 1543, - 71, 71, 71, 1551, 71, 71, 1555, 1558, 71, 71, + 1508, 1514, 1503, 1512, 71, 71, 1509, 71, 71, 1506, + 1513, 1507, 1516, 71, 1511, 71, 71, 1510, 1517, 1518, + 1519, 71, 71, 1515, 71, 1523, 1524, 71, 71, 71, + 71, 71, 71, 1528, 71, 1527, 1529, 1531, 71, 71, + 1521, 1520, 71, 71, 1522, 71, 1525, 71, 1532, 71, + 1526, 1533, 71, 71, 1530, 1534, 1536, 71, 1538, 1535, + 71, 1539, 71, 71, 71, 71, 71, 1537, 71, 1543, + 71, 1545, 1540, 71, 71, 1546, 71, 1550, 71, 1544, + 71, 71, 1542, 1541, 71, 71, 1547, 71, 1548, 1553, + 1555, 71, 1551, 71, 71, 1558, 1554, 1556, 1552, 1549, - 1557, 71, 1554, 71, 71, 71, 71, 1565, 71, 71, - 71, 71, 1553, 1556, 1566, 1560, 71, 1559, 1563, 1569, - 71, 1570, 1561, 1562, 71, 71, 1572, 71, 1567, 1574, - 1564, 1568, 1573, 1576, 71, 71, 1578, 71, 71, 71, - 1571, 71, 71, 71, 71, 1575, 71, 1580, 1577, 1581, - 71, 1583, 71, 1584, 71, 71, 71, 1579, 1588, 71, - 1585, 1586, 71, 1589, 71, 1595, 1582, 1592, 1590, 1587, - 1593, 71, 71, 71, 71, 71, 1597, 1596, 71, 1591, - 1600, 71, 1594, 1599, 1602, 1603, 71, 1605, 71, 71, - 1606, 71, 1598, 1604, 1607, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 1557, 1561, 71, 1563, 1559, + 71, 1560, 1564, 71, 71, 71, 71, 1571, 71, 71, + 1562, 1566, 1565, 1572, 71, 71, 71, 71, 1569, 1567, + 1568, 1576, 71, 71, 1575, 1578, 1580, 1579, 71, 1573, + 1570, 71, 71, 1582, 1574, 1584, 71, 1577, 71, 71, + 71, 71, 71, 71, 1589, 1583, 1586, 1587, 1581, 71, + 1590, 71, 71, 71, 71, 71, 1601, 1585, 1594, 71, + 1595, 71, 71, 71, 71, 1588, 1591, 1598, 1593, 1592, + 1599, 71, 71, 1596, 1597, 1603, 1602, 71, 71, 1609, + 71, 71, 1600, 1606, 1608, 71, 1605, 71, 1607, 71, - 71, 1608, 71, 1601, 1614, 1613, 1615, 1617, 1609, 71, - 71, 71, 71, 71, 1616, 1610, 71, 1611, 71, 1612, - 71, 1619, 1620, 71, 71, 1621, 71, 71, 71, 1629, - 71, 71, 71, 71, 1618, 71, 1622, 71, 71, 1634, - 71, 1625, 1626, 1627, 1623, 1628, 1624, 71, 71, 71, - 1630, 1632, 71, 1631, 1636, 71, 1637, 71, 71, 1633, - 71, 71, 71, 1638, 71, 71, 1639, 1635, 1644, 1642, - 71, 71, 71, 1652, 71, 1651, 1641, 1643, 71, 1645, - 1647, 1640, 1646, 1653, 71, 71, 1648, 1657, 71, 71, - 1650, 1649, 1656, 71, 71, 71, 1655, 1654, 71, 71, + 1611, 1604, 1610, 71, 1612, 1613, 71, 71, 1616, 71, + 71, 71, 1614, 71, 1620, 1621, 1619, 71, 1623, 1615, + 71, 71, 1622, 71, 71, 71, 71, 71, 1617, 71, + 1618, 1625, 1626, 71, 1627, 71, 71, 71, 1635, 71, + 71, 71, 71, 1628, 71, 71, 1624, 1629, 71, 71, + 1631, 1632, 1633, 71, 1634, 1630, 1640, 71, 1642, 1636, + 71, 1643, 1637, 1638, 71, 71, 1639, 71, 1641, 71, + 71, 71, 71, 71, 71, 71, 71, 1658, 71, 1644, + 1648, 1645, 1650, 1651, 71, 1649, 1652, 1647, 1653, 1646, + 71, 1654, 71, 1657, 1659, 71, 1655, 71, 1656, 71, - 1660, 71, 71, 1661, 71, 71, 1658, 71, 71, 1669, - 71, 1664, 71, 1659, 1668, 71, 1666, 1663, 1662, 1667, - 1670, 71, 71, 1665, 1674, 1672, 71, 71, 1671, 71, - 71, 71, 1679, 71, 71, 71, 71, 71, 1683, 1676, - 1673, 1682, 1675, 1681, 1685, 71, 71, 1686, 1678, 1680, - 1687, 71, 1684, 71, 1677, 1691, 71, 71, 71, 1697, - 1692, 71, 71, 71, 1688, 71, 71, 1696, 1699, 71, - 1693, 1690, 1689, 1694, 1700, 71, 71, 71, 1702, 1695, - 71, 1698, 1701, 71, 71, 1706, 1704, 1710, 1707, 1703, - 1705, 71, 71, 71, 71, 1708, 71, 71, 71, 71, + 1662, 71, 1661, 71, 1660, 1663, 71, 71, 1666, 71, + 71, 71, 1664, 71, 1667, 71, 71, 1675, 71, 1670, + 1665, 1676, 71, 71, 1674, 1672, 1668, 1669, 1673, 71, + 71, 71, 1671, 71, 71, 71, 71, 71, 1677, 71, + 1685, 71, 1678, 71, 1689, 1680, 1682, 71, 1679, 1681, + 1687, 71, 1688, 1686, 1684, 71, 1693, 71, 1690, 71, + 1683, 71, 71, 1697, 1691, 71, 71, 1692, 1698, 71, + 71, 3070, 71, 1705, 71, 1694, 1699, 1702, 1703, 1696, + 1695, 1700, 71, 1706, 71, 71, 1708, 1701, 1704, 71, + 1707, 71, 71, 71, 1712, 71, 71, 1709, 1716, 1714, - 71, 1709, 1711, 71, 71, 71, 1714, 71, 1715, 1720, - 71, 71, 1722, 1716, 1723, 1712, 1713, 1717, 71, 1718, - 71, 1719, 71, 1725, 1724, 71, 71, 1729, 71, 71, - 71, 1721, 71, 71, 1733, 71, 71, 71, 71, 1728, - 1726, 1735, 71, 1736, 1727, 1731, 71, 1737, 1732, 71, - 1730, 1738, 1734, 71, 1742, 71, 71, 71, 1739, 1740, - 71, 1746, 71, 71, 71, 71, 71, 71, 1741, 1744, - 71, 1748, 71, 71, 1753, 1743, 71, 1747, 1749, 1745, - 71, 1760, 1750, 71, 1751, 1754, 71, 1752, 71, 1756, - 1755, 1757, 71, 71, 1759, 71, 1758, 1761, 1762, 1763, + 71, 71, 1710, 71, 71, 1715, 71, 1711, 1713, 1717, + 71, 71, 71, 71, 71, 71, 71, 1743, 1720, 71, + 1721, 71, 1718, 1726, 71, 1719, 1722, 1723, 1728, 1724, + 1725, 1729, 1730, 71, 71, 1731, 71, 71, 71, 71, + 1736, 1732, 71, 71, 71, 1727, 71, 1740, 71, 71, + 71, 1733, 1735, 71, 1742, 71, 71, 1734, 1744, 1738, + 1745, 71, 1739, 71, 1737, 1746, 1749, 71, 71, 1741, + 71, 71, 1753, 71, 71, 71, 71, 71, 1748, 71, + 71, 71, 1751, 1755, 1747, 71, 1760, 1750, 1754, 1756, + 1752, 1757, 71, 1761, 1758, 71, 1764, 71, 71, 71, - 71, 71, 71, 71, 71, 1765, 71, 71, 1768, 1766, - 71, 71, 71, 1764, 71, 71, 1771, 71, 71, 71, - 71, 1772, 1767, 1775, 1779, 1769, 1773, 71, 1770, 1776, - 1774, 1780, 1781, 71, 1783, 71, 71, 1778, 1784, 71, - 71, 71, 1777, 71, 71, 1789, 71, 71, 1782, 71, - 1792, 1793, 71, 1794, 71, 71, 1787, 1785, 1786, 71, - 1790, 1788, 1791, 1796, 71, 71, 1797, 1795, 1800, 71, - 71, 1802, 71, 1804, 1801, 1803, 1798, 71, 71, 71, - 1799, 1806, 71, 71, 1809, 71, 1808, 71, 71, 1810, - 71, 1811, 71, 71, 1818, 71, 1805, 71, 71, 71, + 1759, 1763, 1765, 1762, 1766, 71, 71, 1768, 1769, 1770, + 71, 1767, 71, 71, 71, 1772, 71, 71, 71, 1773, + 71, 71, 71, 71, 1771, 71, 71, 1778, 71, 71, + 1782, 71, 1779, 1790, 71, 1783, 71, 1774, 1776, 1777, + 1775, 1780, 71, 1781, 71, 71, 1791, 1786, 1784, 1788, + 71, 1785, 71, 71, 1787, 71, 71, 1792, 1796, 71, + 1789, 71, 71, 1799, 1800, 71, 1801, 71, 71, 1793, + 71, 1794, 71, 1795, 3070, 1797, 1808, 1798, 71, 1802, + 1803, 71, 71, 1804, 1807, 71, 1809, 71, 1811, 1805, + 1810, 1806, 71, 1813, 71, 71, 1812, 71, 71, 71, - 71, 1823, 1812, 1813, 1814, 1820, 71, 1807, 71, 1815, - 1821, 71, 1816, 1817, 71, 1819, 1826, 71, 1828, 1824, - 1822, 71, 71, 1830, 71, 71, 1827, 71, 1832, 1825, - 71, 71, 71, 1835, 1836, 71, 71, 1838, 71, 71, - 71, 71, 1829, 71, 1844, 71, 71, 71, 1843, 1840, - 1833, 1831, 1841, 1834, 71, 71, 1837, 71, 71, 71, - 1850, 71, 1842, 71, 1839, 1847, 1848, 1845, 71, 71, - 1846, 1854, 1857, 1849, 1853, 71, 71, 71, 71, 1852, - 1858, 1860, 1856, 1859, 71, 71, 71, 1851, 1855, 71, - 71, 71, 71, 71, 1861, 1865, 71, 71, 1868, 1869, + 1815, 1816, 71, 71, 1817, 1818, 71, 1825, 3070, 71, + 71, 71, 71, 71, 1830, 71, 71, 71, 1823, 1827, + 1814, 1819, 1820, 1821, 1828, 71, 1824, 1831, 1822, 1829, + 1826, 1833, 1832, 71, 71, 71, 71, 71, 1837, 71, + 71, 1839, 1834, 71, 71, 71, 1842, 1843, 71, 71, + 1845, 71, 71, 71, 1835, 71, 1836, 71, 71, 1850, + 1851, 71, 1838, 1840, 1847, 71, 1841, 1848, 71, 1844, + 71, 71, 71, 71, 1849, 71, 1857, 1846, 1852, 1854, + 1855, 71, 71, 1853, 1861, 71, 71, 1860, 1864, 1865, + 71, 1866, 71, 1863, 71, 71, 1856, 1859, 71, 1858, - 1870, 71, 1864, 71, 71, 71, 71, 71, 1873, 1862, - 1863, 1866, 71, 71, 71, 1878, 71, 71, 1872, 1877, - 71, 1871, 1867, 71, 1874, 71, 71, 1875, 1893, 1882, - 71, 71, 1879, 71, 1876, 1880, 1881, 1883, 71, 1884, - 1885, 71, 1886, 71, 1887, 1889, 71, 1890, 71, 1888, - 71, 71, 1896, 71, 71, 1899, 71, 1891, 71, 1898, - 71, 1900, 71, 71, 71, 71, 1901, 1892, 1897, 71, - 1894, 1895, 1902, 1906, 71, 1903, 1907, 71, 1908, 3063, - 1904, 1910, 1911, 1909, 71, 1905, 71, 71, 71, 71, - 1915, 1913, 71, 71, 71, 1912, 71, 1917, 71, 1920, + 71, 71, 71, 1867, 71, 1862, 71, 71, 71, 1868, + 1872, 71, 1875, 1876, 1871, 71, 1877, 71, 71, 71, + 71, 1869, 71, 1870, 1873, 71, 71, 1885, 71, 1880, + 71, 1884, 1879, 71, 1874, 1878, 71, 71, 1882, 3070, + 71, 1889, 1883, 71, 71, 1881, 1890, 71, 1887, 1886, + 1892, 71, 1891, 71, 71, 1888, 71, 1893, 1894, 1896, + 71, 71, 71, 1895, 71, 1897, 1900, 1903, 1898, 71, + 71, 1906, 71, 71, 1905, 1899, 71, 1907, 71, 71, + 71, 71, 1901, 1908, 1902, 1904, 71, 1909, 1913, 71, + 71, 1910, 1914, 71, 1915, 1920, 1911, 1917, 1918, 1916, - 71, 1914, 1922, 71, 1916, 71, 1918, 71, 71, 71, - 71, 71, 71, 1927, 3063, 1923, 1926, 71, 1928, 1924, - 1929, 71, 1921, 1919, 1930, 71, 71, 1932, 1925, 71, - 71, 1934, 1931, 71, 71, 1933, 1935, 71, 71, 71, - 71, 1938, 1937, 1936, 71, 1940, 71, 71, 71, 1944, - 71, 1939, 1941, 1943, 71, 71, 1945, 71, 1942, 1946, - 1947, 1948, 71, 71, 71, 71, 71, 71, 71, 1955, - 1953, 71, 1950, 1954, 71, 71, 71, 1949, 71, 71, - 1957, 71, 1951, 71, 1952, 1956, 71, 1960, 1963, 3063, - 1959, 71, 1958, 71, 1964, 1966, 1962, 71, 1961, 71, + 71, 1912, 71, 71, 71, 1922, 71, 71, 71, 71, + 1927, 71, 1919, 1924, 1921, 71, 71, 1929, 1923, 1925, + 71, 71, 71, 71, 71, 71, 71, 1935, 1934, 1933, + 1936, 71, 1930, 1926, 1931, 1937, 71, 1928, 71, 1939, + 1932, 71, 71, 71, 71, 71, 3070, 1940, 1941, 71, + 1942, 1943, 71, 71, 1944, 1945, 71, 1947, 1938, 71, + 71, 71, 1951, 71, 71, 1946, 1950, 1955, 71, 71, + 71, 1948, 1949, 1952, 1953, 1954, 71, 71, 71, 71, + 71, 1962, 1960, 71, 71, 71, 1957, 71, 1961, 71, + 71, 71, 1967, 71, 1964, 71, 1956, 1958, 3070, 1959, - 1965, 71, 1967, 71, 1968, 1970, 71, 71, 71, 71, - 1969, 1971, 1976, 71, 71, 1978, 71, 1972, 71, 1973, - 1980, 71, 1974, 1975, 71, 71, 1979, 71, 71, 1984, - 1977, 71, 71, 1981, 1982, 71, 1983, 71, 71, 71, - 1985, 71, 71, 71, 71, 71, 71, 1987, 1992, 1988, - 1989, 1996, 71, 1986, 71, 71, 1991, 1995, 1999, 2000, - 71, 1993, 1997, 1994, 71, 1990, 1998, 71, 71, 2002, - 2003, 71, 71, 71, 71, 71, 2005, 71, 71, 2006, - 2001, 71, 2007, 2011, 2009, 2004, 71, 71, 2013, 2010, - 2015, 71, 2008, 71, 71, 71, 71, 2012, 2018, 2017, + 71, 71, 1963, 1968, 1966, 71, 1971, 1965, 71, 1970, + 1972, 1969, 71, 71, 1977, 71, 1974, 1975, 71, 71, + 1973, 1978, 71, 71, 71, 1983, 1976, 71, 71, 1985, + 71, 71, 1986, 1987, 71, 1979, 71, 1982, 1980, 1981, + 71, 71, 71, 1989, 1984, 71, 1991, 71, 1988, 71, + 71, 1992, 71, 71, 71, 71, 71, 71, 71, 2003, + 71, 1990, 1994, 1999, 1995, 1996, 71, 2002, 1993, 1998, + 71, 71, 71, 2006, 2004, 1997, 2000, 2007, 2001, 71, + 71, 71, 2010, 71, 2009, 71, 2005, 71, 2012, 71, + 71, 2008, 2013, 71, 71, 71, 2014, 2018, 71, 2011, - 2019, 2014, 71, 71, 71, 2023, 71, 2020, 71, 71, - 71, 71, 71, 2024, 2026, 2029, 71, 71, 2030, 2016, - 71, 2021, 2025, 71, 2022, 2033, 2028, 71, 71, 2027, - 2035, 71, 2034, 71, 71, 2031, 2039, 71, 71, 2041, - 71, 71, 2037, 2032, 71, 2042, 71, 71, 71, 71, - 2038, 2036, 2040, 2044, 71, 2043, 2048, 2050, 2046, 2045, - 71, 2047, 2051, 71, 71, 71, 71, 71, 2049, 2052, - 71, 2055, 2056, 71, 71, 71, 2053, 2054, 2060, 71, - 71, 71, 71, 2057, 2059, 71, 71, 71, 71, 71, - 71, 71, 2061, 2058, 71, 2069, 2064, 2063, 2062, 2066, + 2020, 71, 2016, 2022, 71, 71, 2017, 2015, 71, 2019, + 71, 71, 2025, 2024, 71, 2021, 2026, 71, 71, 2027, + 2030, 71, 71, 71, 71, 71, 71, 2031, 2036, 71, + 71, 2023, 2033, 71, 2032, 2028, 71, 2037, 2029, 2035, + 2040, 71, 2034, 71, 71, 2038, 71, 71, 2041, 2042, + 2046, 71, 2044, 2039, 71, 71, 2048, 71, 2049, 2043, + 2045, 71, 71, 71, 71, 71, 2047, 2051, 71, 71, + 2050, 2055, 2057, 2053, 71, 71, 2054, 2058, 71, 71, + 2060, 2052, 71, 2059, 2062, 71, 2056, 2061, 71, 71, + 2063, 2067, 71, 71, 71, 2064, 71, 71, 2066, 71, - 2065, 2067, 71, 2071, 71, 71, 2068, 2070, 71, 71, - 2072, 2074, 71, 2078, 2075, 2080, 71, 71, 71, 2082, - 71, 2079, 71, 2073, 2076, 71, 2077, 2081, 71, 2084, - 3063, 71, 2087, 2085, 2089, 2086, 2083, 2088, 71, 2090, - 71, 71, 71, 71, 2091, 71, 2094, 71, 71, 2095, - 2092, 2093, 2098, 2099, 71, 71, 2100, 71, 71, 2103, - 71, 71, 71, 2096, 2109, 71, 2104, 71, 2105, 2101, - 2106, 71, 71, 2108, 2097, 71, 2102, 2107, 71, 71, - 71, 71, 2110, 2113, 2111, 71, 71, 71, 71, 71, - 2116, 71, 71, 71, 2120, 2122, 71, 2123, 71, 71, + 71, 71, 71, 71, 71, 71, 2076, 2077, 2065, 71, + 2071, 2068, 2069, 2070, 2072, 2073, 2074, 71, 2078, 71, + 2075, 71, 71, 2079, 71, 2081, 71, 71, 2082, 2087, + 71, 71, 2089, 71, 71, 2086, 2080, 2083, 2091, 2084, + 2088, 71, 71, 71, 3070, 2094, 2090, 2092, 71, 2085, + 2095, 71, 2096, 2097, 2093, 71, 2099, 71, 71, 71, + 2098, 2101, 71, 2100, 71, 2102, 71, 2106, 71, 71, + 2107, 71, 2110, 2109, 2115, 2105, 71, 71, 71, 2103, + 71, 2111, 2114, 2108, 71, 2112, 2113, 71, 71, 71, + 2104, 71, 2116, 71, 71, 2118, 71, 71, 71, 2120, - 2112, 2115, 71, 71, 2114, 2117, 71, 2118, 2119, 71, - 71, 2125, 71, 2124, 2121, 2127, 71, 2129, 2132, 71, - 71, 2128, 2130, 71, 2133, 2126, 71, 71, 2131, 71, - 71, 71, 71, 71, 2143, 71, 71, 71, 71, 2134, - 2144, 71, 2135, 71, 2140, 2142, 71, 2181, 2138, 2136, - 2146, 2137, 2139, 2151, 2141, 71, 2145, 71, 2148, 2147, - 2149, 71, 2150, 71, 71, 2153, 71, 71, 2152, 2156, - 71, 71, 2157, 71, 71, 2154, 2158, 71, 2155, 2162, - 71, 2163, 71, 71, 2165, 71, 71, 2167, 71, 2161, - 71, 71, 71, 2159, 2160, 71, 2169, 2170, 71, 2171, + 71, 71, 71, 2123, 71, 71, 2129, 71, 71, 2117, + 2127, 71, 2122, 71, 71, 2130, 2125, 71, 2119, 2121, + 2124, 2126, 2132, 2131, 71, 71, 2128, 71, 71, 71, + 2136, 2139, 71, 2135, 71, 71, 2134, 2140, 71, 2133, + 2137, 71, 71, 71, 71, 71, 2138, 2150, 71, 71, + 71, 2155, 71, 2141, 2142, 2151, 2147, 71, 71, 71, + 71, 2143, 2145, 2146, 2149, 2144, 2148, 2156, 71, 71, + 2152, 71, 2153, 2154, 2157, 71, 71, 71, 2160, 2166, + 2161, 2163, 71, 2162, 2158, 71, 71, 71, 71, 2159, + 2164, 2165, 2169, 71, 2170, 71, 71, 2172, 71, 71, - 71, 71, 2164, 71, 2166, 2168, 2172, 71, 71, 2174, - 2173, 71, 2176, 2177, 71, 2179, 71, 71, 71, 2183, - 2182, 71, 2175, 2185, 71, 71, 71, 2178, 71, 2180, - 2189, 71, 71, 71, 2184, 71, 71, 2193, 2194, 71, - 2186, 2187, 71, 71, 2188, 71, 71, 71, 2190, 71, - 2192, 2196, 2199, 71, 2201, 2191, 2200, 71, 2197, 71, - 2198, 2195, 71, 2202, 71, 2206, 71, 71, 2208, 71, - 71, 71, 2209, 71, 71, 2203, 2207, 2204, 2213, 2214, - 71, 71, 2212, 71, 71, 71, 71, 2210, 2205, 2211, - 2218, 2220, 71, 2216, 2223, 71, 2215, 2221, 2225, 2222, + 2168, 2174, 71, 71, 71, 2177, 71, 2167, 71, 2176, + 2178, 71, 71, 71, 71, 2171, 71, 2173, 2175, 71, + 71, 2180, 2179, 3070, 2183, 2184, 71, 2181, 2186, 71, + 71, 71, 71, 2182, 2189, 2185, 2188, 71, 2187, 71, + 2190, 2192, 71, 71, 2196, 71, 71, 71, 71, 71, + 71, 2193, 2194, 2200, 71, 2191, 2201, 71, 71, 2203, + 71, 71, 2195, 2199, 2206, 71, 2197, 71, 71, 2202, + 2198, 71, 71, 2204, 2208, 2205, 71, 71, 2213, 71, + 71, 2207, 2209, 71, 71, 2215, 71, 71, 2214, 2210, + 2211, 71, 2219, 71, 2216, 71, 71, 2223, 2220, 71, - 71, 71, 2217, 71, 71, 71, 2226, 71, 2227, 2219, - 71, 71, 71, 2230, 71, 71, 2224, 71, 71, 3063, - 2229, 2231, 2236, 2232, 2233, 2235, 2234, 2237, 71, 71, - 2228, 71, 71, 71, 2242, 2238, 71, 2241, 2239, 71, - 71, 2240, 71, 2243, 71, 2247, 2249, 71, 71, 71, - 71, 2244, 71, 71, 71, 71, 2260, 71, 2251, 2245, - 2248, 2246, 2252, 2250, 71, 2255, 71, 2256, 2253, 2254, - 71, 2257, 71, 2261, 71, 2258, 2262, 71, 71, 2264, - 2265, 2263, 2259, 2266, 2267, 71, 71, 71, 71, 71, - 71, 2269, 71, 71, 71, 2273, 2274, 71, 71, 71, + 2221, 2225, 2212, 71, 71, 71, 71, 2224, 2227, 2217, + 2228, 2218, 2222, 71, 2230, 2232, 71, 71, 2233, 2229, + 71, 71, 2234, 71, 71, 2226, 71, 2231, 71, 2237, + 71, 71, 71, 2238, 71, 3070, 2236, 2239, 2243, 2240, + 2241, 2235, 2244, 71, 71, 71, 2242, 2245, 71, 71, + 71, 2248, 71, 2249, 2246, 71, 2250, 71, 2247, 71, + 2256, 71, 71, 71, 2251, 2252, 71, 2253, 2254, 71, + 71, 71, 2258, 2255, 71, 71, 71, 2257, 2259, 2263, + 2264, 71, 2262, 2267, 71, 2260, 2261, 71, 2268, 2269, + 71, 71, 71, 2266, 2265, 2270, 2271, 2272, 2273, 2274, - 2270, 2268, 71, 2276, 71, 3063, 2271, 71, 2277, 71, - 2278, 2275, 2272, 2279, 71, 71, 71, 71, 2281, 2282, - 2280, 2283, 2284, 71, 71, 71, 71, 71, 71, 2285, - 2286, 71, 2290, 71, 2293, 71, 71, 71, 2292, 71, - 71, 2289, 2294, 71, 2287, 2299, 2288, 71, 2297, 2300, - 2298, 2291, 71, 2295, 71, 2296, 71, 71, 2302, 71, - 71, 2305, 2303, 71, 2307, 71, 2301, 2306, 2309, 71, - 71, 71, 71, 2311, 71, 71, 71, 2308, 71, 71, - 2304, 2310, 71, 2315, 2319, 71, 2321, 2317, 71, 2312, - 2313, 2314, 71, 2318, 2320, 71, 71, 2322, 71, 71, + 71, 71, 71, 71, 71, 71, 2276, 71, 71, 71, + 2280, 2281, 71, 71, 2277, 2275, 71, 71, 2283, 71, + 2284, 2278, 2285, 2286, 71, 71, 2282, 2279, 71, 71, + 2287, 71, 2291, 71, 71, 2290, 71, 2288, 71, 71, + 71, 2293, 71, 71, 71, 71, 2297, 2292, 71, 2289, + 2299, 2300, 71, 2309, 2296, 71, 71, 71, 2294, 2295, + 71, 2301, 2302, 2298, 2303, 2304, 2305, 71, 71, 71, + 2307, 71, 71, 2314, 2310, 2306, 71, 2312, 71, 71, + 71, 71, 2311, 2308, 2313, 2316, 71, 71, 2318, 71, + 2315, 71, 71, 71, 71, 71, 2317, 71, 2322, 2319, - 71, 71, 71, 71, 2330, 2316, 2325, 2328, 71, 71, - 71, 2329, 71, 71, 2323, 2327, 2333, 71, 71, 2326, - 71, 2324, 71, 2334, 71, 2337, 71, 2331, 2332, 2338, - 71, 2335, 71, 71, 71, 2341, 2336, 2339, 2342, 71, - 2340, 2343, 71, 71, 71, 71, 71, 3063, 2344, 2347, - 71, 2349, 2350, 71, 71, 2346, 2345, 2351, 71, 2352, - 71, 2353, 71, 71, 71, 2348, 2354, 71, 2355, 2356, - 71, 2357, 71, 2358, 71, 2359, 71, 2363, 71, 2360, - 71, 2365, 71, 2366, 71, 71, 71, 71, 71, 71, - 71, 71, 2362, 71, 2361, 2369, 2367, 71, 2368, 2364, + 2324, 71, 2325, 2326, 71, 2320, 2327, 71, 2321, 2328, + 71, 2329, 71, 71, 71, 71, 71, 2330, 2332, 2337, + 2323, 2335, 71, 71, 71, 71, 71, 71, 2334, 2340, + 71, 71, 2336, 2333, 2331, 71, 71, 2344, 2341, 2345, + 71, 2339, 2338, 71, 71, 71, 2342, 71, 2346, 2343, + 71, 71, 2349, 2350, 2348, 71, 71, 71, 71, 3070, + 71, 71, 2347, 2354, 2351, 2356, 2357, 71, 2353, 2352, + 2358, 71, 2359, 71, 2360, 71, 71, 2355, 71, 2362, + 71, 2364, 71, 2363, 71, 2365, 71, 71, 2361, 71, + 2370, 71, 71, 71, 2366, 2372, 71, 71, 2367, 2373, - 71, 2370, 2372, 2375, 71, 71, 71, 2371, 71, 2376, - 2373, 2374, 71, 71, 2382, 71, 71, 71, 71, 2377, - 71, 2379, 71, 71, 2383, 2378, 2381, 71, 2391, 3063, - 2380, 2384, 2385, 71, 71, 71, 2386, 2389, 2392, 2393, - 71, 2390, 2387, 2394, 71, 2388, 71, 2395, 71, 2396, - 71, 2397, 71, 2398, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 2399, 2407, 71, 71, 71, 2405, 71, - 2411, 2412, 71, 2400, 2402, 2401, 71, 71, 2404, 2403, - 2406, 2408, 71, 2409, 2410, 2414, 2415, 71, 71, 2413, - 71, 2416, 2417, 71, 71, 2418, 71, 2420, 71, 71, + 71, 71, 71, 71, 2374, 2369, 71, 2368, 2376, 2375, + 71, 2371, 71, 71, 2377, 2379, 2382, 71, 71, 71, + 71, 71, 2383, 2378, 71, 71, 2380, 71, 2389, 71, + 71, 71, 2381, 2386, 2390, 71, 71, 71, 2388, 2385, + 2396, 71, 71, 71, 2384, 2387, 2391, 2393, 2398, 71, + 2392, 71, 2394, 2406, 2399, 2397, 2400, 71, 71, 2395, + 2401, 71, 71, 2402, 71, 2403, 71, 2404, 71, 2405, + 71, 71, 71, 71, 71, 71, 71, 2407, 2414, 71, + 71, 2412, 71, 2418, 2419, 71, 71, 71, 2408, 2409, + 2422, 71, 2410, 2411, 2413, 2415, 2421, 2416, 2417, 71, - 71, 2426, 71, 2427, 71, 2428, 2419, 71, 71, 2421, - 71, 71, 71, 71, 2422, 2424, 2423, 2432, 71, 2425, - 71, 71, 2436, 2430, 71, 2429, 2435, 2437, 71, 2431, - 71, 71, 2438, 2433, 2439, 71, 71, 71, 2434, 71, - 2441, 71, 71, 2440, 71, 71, 2445, 71, 71, 2443, - 2449, 2450, 71, 71, 71, 2442, 2453, 71, 2454, 2444, - 71, 71, 2446, 2447, 71, 2448, 2452, 71, 2451, 2457, - 71, 2456, 71, 71, 2458, 2455, 2462, 71, 71, 2459, - 71, 71, 2466, 71, 71, 2465, 2468, 71, 71, 2464, - 2463, 71, 2460, 2461, 71, 71, 2469, 2470, 2473, 71, + 71, 2424, 71, 71, 71, 71, 71, 71, 2420, 2423, + 71, 2427, 71, 2433, 71, 2434, 71, 2425, 71, 71, + 2428, 2426, 2435, 71, 2429, 2430, 2431, 71, 71, 71, + 71, 2432, 2439, 71, 2437, 71, 2436, 2443, 2442, 2444, + 71, 71, 2438, 2445, 2446, 71, 71, 71, 71, 2440, + 2441, 71, 71, 71, 71, 71, 2448, 71, 2452, 71, + 2457, 71, 2456, 2450, 71, 2447, 71, 2449, 2460, 71, + 71, 71, 2451, 71, 2453, 2455, 2454, 2461, 71, 2458, + 2464, 71, 2463, 71, 2459, 2462, 2466, 71, 71, 2469, + 71, 71, 71, 71, 2473, 71, 2465, 2472, 71, 2475, - 71, 2474, 71, 2467, 2476, 71, 71, 2472, 71, 71, - 2471, 71, 2481, 71, 71, 2483, 71, 71, 2479, 2477, - 2480, 2478, 2484, 71, 2475, 71, 71, 71, 2485, 2482, - 71, 2487, 71, 71, 71, 2488, 71, 71, 71, 2486, - 71, 2490, 2491, 2493, 2498, 2494, 2496, 71, 2492, 2489, - 71, 2495, 2497, 71, 71, 2499, 71, 2502, 71, 71, - 71, 2504, 71, 71, 2503, 2507, 71, 2506, 2508, 71, - 71, 3063, 2500, 2505, 2501, 2510, 71, 71, 71, 2512, - 2511, 71, 71, 2509, 2513, 71, 2514, 2515, 2516, 71, - 71, 71, 71, 2517, 71, 2518, 71, 2523, 71, 2522, + 71, 2471, 71, 2470, 71, 71, 71, 2467, 2468, 2476, + 71, 2477, 2480, 71, 71, 2481, 71, 2474, 2479, 2483, + 71, 2478, 71, 71, 71, 71, 2488, 71, 71, 2484, + 2490, 71, 2482, 2486, 2487, 2485, 71, 71, 2489, 71, + 71, 2491, 2492, 71, 71, 2494, 71, 2496, 71, 71, + 71, 2495, 2498, 2493, 2500, 2497, 71, 2503, 71, 2504, + 71, 2501, 71, 2499, 71, 2502, 71, 71, 2509, 2505, + 71, 2506, 71, 2511, 71, 2510, 71, 71, 71, 2514, + 71, 71, 2507, 2513, 2518, 2508, 2515, 71, 2517, 71, + 2516, 2512, 2519, 71, 71, 71, 2523, 2520, 71, 2521, - 2519, 71, 2524, 71, 2521, 71, 2525, 2520, 71, 71, - 2526, 71, 71, 71, 2527, 2528, 2530, 2529, 2531, 71, - 71, 71, 71, 71, 2536, 71, 71, 71, 71, 71, - 2534, 2535, 71, 2533, 2537, 2541, 71, 2532, 2545, 71, - 71, 71, 71, 2544, 71, 2538, 71, 2539, 2540, 2543, - 2549, 2542, 2550, 71, 71, 2552, 2553, 2547, 3063, 2554, - 2546, 71, 71, 71, 2548, 71, 2555, 71, 71, 71, - 71, 2556, 71, 2557, 71, 71, 2560, 71, 2558, 2551, - 71, 2563, 71, 2559, 2565, 71, 2566, 71, 2561, 71, - 2562, 2567, 71, 2568, 71, 2564, 2570, 71, 71, 2569, + 2522, 71, 71, 71, 71, 2524, 71, 71, 2525, 3070, + 2530, 2531, 71, 2526, 2529, 2528, 71, 71, 71, 71, + 71, 2527, 2535, 2532, 2533, 2534, 71, 71, 71, 71, + 71, 71, 2537, 2538, 71, 71, 71, 2543, 2536, 71, + 2541, 71, 71, 2540, 2542, 71, 71, 2539, 2544, 2548, + 71, 2550, 71, 2545, 2552, 71, 71, 71, 71, 71, + 71, 2546, 3070, 2556, 2547, 2549, 71, 2551, 2557, 71, + 2559, 2560, 2554, 2561, 2563, 2553, 71, 71, 2555, 71, + 2562, 71, 71, 71, 71, 2558, 71, 2564, 71, 71, + 2567, 71, 2565, 71, 2570, 2572, 71, 2566, 2573, 71, - 71, 2574, 2571, 2572, 71, 71, 2575, 71, 71, 2577, - 2578, 71, 2573, 2579, 71, 71, 71, 71, 2580, 2584, - 71, 71, 2585, 2582, 2576, 2586, 71, 71, 71, 2581, - 2588, 71, 71, 71, 2592, 2593, 71, 2583, 71, 71, - 71, 2589, 2587, 2594, 71, 71, 2595, 2591, 71, 2601, - 2590, 2596, 71, 71, 2600, 71, 71, 2604, 71, 71, - 2603, 2597, 71, 71, 2598, 2599, 71, 2605, 71, 2607, - 71, 2606, 71, 2609, 71, 71, 71, 2612, 2602, 2616, - 71, 71, 71, 71, 2608, 2610, 2611, 71, 71, 71, - 2615, 2618, 2613, 71, 71, 2614, 2617, 2620, 2623, 2619, + 2574, 71, 2568, 71, 2569, 71, 71, 2575, 71, 2571, + 2576, 2577, 71, 2579, 2581, 71, 71, 71, 2584, 2582, + 71, 2585, 71, 2586, 71, 71, 2578, 2580, 2587, 71, + 71, 71, 2591, 71, 71, 2592, 2583, 2593, 71, 71, + 2595, 71, 2588, 71, 71, 71, 2599, 71, 2589, 2600, + 71, 2590, 71, 71, 2594, 2602, 2596, 2601, 71, 2598, + 2603, 71, 2597, 71, 71, 71, 2608, 2611, 71, 71, + 2604, 2607, 71, 2610, 71, 71, 71, 71, 2605, 2612, + 2614, 71, 71, 2606, 2613, 2616, 71, 71, 71, 2609, + 71, 2619, 2623, 71, 71, 71, 71, 71, 2617, 2618, - 2621, 2622, 3063, 2624, 71, 2631, 2625, 2626, 71, 71, - 2627, 71, 2628, 71, 2629, 71, 2630, 71, 71, 71, - 2634, 71, 2632, 71, 2638, 71, 71, 71, 2635, 2639, - 2641, 71, 71, 2643, 71, 71, 2645, 71, 2633, 2642, - 2644, 2636, 71, 2637, 71, 2640, 71, 71, 2650, 71, - 71, 2646, 71, 2647, 2651, 2648, 71, 2654, 71, 71, - 71, 2652, 2655, 71, 2658, 2649, 71, 2657, 71, 2660, - 71, 2653, 2656, 2659, 2661, 71, 71, 71, 71, 71, - 2662, 71, 71, 71, 2670, 71, 71, 2665, 71, 71, - 71, 2666, 2668, 2673, 2674, 2664, 71, 2671, 71, 2675, + 2615, 71, 2639, 71, 2622, 2620, 2625, 71, 2621, 2624, + 2627, 2630, 71, 2628, 2626, 2629, 2631, 71, 2633, 71, + 2632, 71, 2634, 71, 2635, 71, 2636, 71, 2637, 71, + 71, 71, 2640, 71, 71, 2645, 71, 71, 71, 71, + 2642, 2646, 2648, 71, 71, 2638, 2649, 2650, 71, 2651, + 2652, 71, 71, 2643, 2644, 2647, 2641, 71, 71, 71, + 71, 2653, 2657, 71, 2658, 71, 2654, 2655, 71, 71, + 2661, 71, 71, 71, 2659, 2662, 71, 2656, 2666, 71, + 2664, 71, 2663, 2660, 71, 2665, 2667, 71, 2668, 71, + 71, 71, 71, 2669, 71, 71, 71, 2670, 71, 2672, - 71, 2663, 2669, 71, 71, 2676, 2667, 2672, 2677, 71, - 2678, 2680, 71, 2679, 2681, 71, 2682, 71, 71, 71, - 2684, 71, 2687, 2685, 2686, 71, 2688, 2683, 71, 71, - 2689, 2690, 71, 71, 71, 71, 2695, 71, 71, 2693, - 2697, 71, 71, 2699, 71, 71, 71, 2691, 2698, 71, - 2700, 71, 2701, 2694, 2692, 71, 2705, 71, 71, 71, - 71, 71, 2696, 71, 2703, 2702, 71, 2708, 71, 2709, - 71, 2706, 2707, 71, 71, 2704, 2712, 2710, 2713, 2715, - 71, 2717, 71, 2718, 71, 2711, 71, 2720, 71, 71, - 71, 71, 71, 2716, 71, 71, 2714, 2725, 71, 2724, + 2677, 71, 2671, 2673, 2675, 71, 71, 71, 2678, 71, + 2680, 71, 2681, 2932, 2676, 71, 2682, 2674, 2683, 2679, + 71, 2691, 71, 2685, 71, 2684, 2686, 2687, 71, 2688, + 71, 2689, 71, 2690, 71, 71, 2694, 71, 71, 71, + 2693, 71, 71, 2695, 2696, 2697, 71, 71, 71, 71, + 2702, 71, 2700, 2692, 3070, 2698, 71, 2704, 71, 71, + 71, 71, 2699, 2705, 71, 2706, 2701, 71, 2708, 2707, + 2709, 71, 2712, 71, 2703, 71, 2710, 71, 71, 71, + 71, 71, 2715, 71, 71, 2722, 71, 71, 2713, 2716, + 2714, 2711, 2719, 71, 71, 2717, 2724, 71, 2720, 71, - 71, 71, 2729, 71, 71, 2721, 2722, 2719, 2723, 2732, - 71, 2726, 71, 71, 2734, 71, 71, 2730, 2727, 2728, - 71, 2735, 71, 2731, 2737, 71, 2738, 71, 2740, 71, - 71, 71, 2733, 71, 2746, 2736, 71, 2745, 71, 3063, - 2743, 2742, 2739, 71, 2749, 71, 71, 71, 2741, 2750, - 2747, 71, 2751, 2744, 71, 2754, 2748, 2755, 71, 2752, - 71, 71, 2757, 2756, 71, 71, 71, 71, 71, 2762, - 2759, 2760, 71, 71, 2753, 71, 2765, 71, 71, 71, - 71, 71, 2758, 2770, 71, 2766, 2761, 71, 71, 2763, - 2764, 2773, 71, 2769, 2774, 71, 2767, 2772, 71, 71, + 2718, 2725, 71, 2727, 71, 71, 2723, 71, 71, 2721, + 71, 71, 2732, 71, 71, 2726, 2731, 71, 71, 2733, + 71, 2728, 71, 2729, 2730, 71, 2736, 2742, 2737, 2739, + 71, 71, 2741, 2734, 2744, 71, 2735, 2738, 71, 71, + 2740, 2745, 71, 2747, 71, 71, 71, 71, 2752, 71, + 71, 71, 3070, 2743, 71, 2750, 2749, 2756, 71, 2746, + 71, 71, 2754, 2748, 2757, 71, 2758, 2751, 2753, 71, + 2761, 2755, 2759, 2762, 71, 71, 71, 2764, 2763, 71, + 71, 71, 71, 71, 2769, 2766, 2767, 71, 71, 2760, + 71, 2772, 71, 71, 71, 71, 71, 2765, 2777, 71, - 2771, 2776, 71, 2775, 2768, 2778, 71, 2777, 2779, 71, - 2780, 71, 71, 2782, 71, 71, 71, 2781, 2783, 71, - 71, 2787, 2788, 71, 71, 71, 71, 2792, 71, 2793, - 71, 71, 71, 71, 2794, 2791, 2830, 2784, 2785, 2789, - 71, 2786, 71, 71, 2790, 2798, 71, 2797, 2799, 71, - 71, 2795, 2796, 2802, 71, 2800, 71, 2801, 71, 71, - 2805, 71, 71, 2806, 2804, 71, 2803, 71, 71, 71, - 71, 71, 2809, 71, 71, 2811, 71, 71, 2812, 71, - 2810, 71, 2807, 71, 71, 2808, 71, 71, 2821, 2822, - 2813, 71, 2817, 2814, 2815, 2816, 2818, 2819, 2824, 71, + 2773, 2768, 71, 71, 2770, 2771, 2780, 71, 2776, 2781, + 71, 2774, 2779, 71, 71, 2778, 2783, 71, 2782, 2775, + 2785, 71, 2784, 2786, 71, 2787, 71, 71, 2789, 71, + 71, 71, 2788, 2790, 71, 71, 2794, 2795, 71, 71, + 71, 71, 2799, 71, 2800, 71, 71, 71, 71, 2801, + 2798, 2837, 2791, 2792, 2796, 71, 2793, 71, 71, 2797, + 2805, 71, 2804, 2806, 71, 71, 2802, 2803, 2809, 71, + 2807, 71, 2808, 71, 71, 2812, 71, 71, 2813, 2811, + 71, 2810, 71, 71, 71, 71, 71, 2816, 71, 71, + 2818, 71, 71, 2819, 71, 2817, 71, 2814, 71, 71, - 71, 3063, 2820, 2887, 71, 2825, 2823, 2826, 2828, 71, - 2829, 71, 2827, 2831, 71, 2832, 71, 2833, 2834, 71, - 71, 2835, 2836, 2839, 71, 2837, 2838, 71, 71, 2840, - 71, 71, 71, 71, 71, 2846, 71, 71, 71, 2845, - 71, 71, 2849, 71, 3063, 2841, 2842, 2848, 71, 71, - 2850, 2843, 71, 2844, 71, 2854, 2855, 71, 2851, 2856, - 71, 2853, 2847, 71, 2857, 71, 2852, 2861, 2858, 2863, - 71, 71, 2862, 71, 2859, 71, 71, 2860, 71, 71, - 71, 2870, 71, 2867, 2868, 2871, 2865, 71, 2873, 71, - 71, 71, 71, 2872, 3063, 2864, 2919, 2866, 71, 2869, + 2815, 71, 71, 2828, 2829, 2820, 71, 2824, 2821, 2822, + 2823, 2825, 2826, 2831, 71, 71, 3070, 2827, 2894, 71, + 2832, 2830, 2833, 2835, 71, 2836, 71, 2834, 2838, 71, + 2839, 71, 2840, 2841, 71, 71, 2842, 2843, 2846, 71, + 2844, 2845, 71, 71, 2847, 71, 71, 71, 71, 71, + 2853, 71, 71, 71, 2852, 71, 71, 2856, 71, 3070, + 2848, 2849, 2855, 71, 71, 2857, 2850, 71, 2851, 71, + 2861, 2862, 71, 2858, 2863, 71, 2860, 2854, 71, 2864, + 71, 2859, 2868, 2865, 2870, 71, 71, 2869, 71, 2866, + 71, 71, 2867, 71, 71, 71, 2877, 71, 2874, 2875, - 2874, 71, 2893, 2875, 2876, 71, 2877, 71, 2878, 71, - 2879, 71, 2880, 71, 2881, 71, 2882, 71, 2883, 71, - 71, 2885, 71, 71, 71, 71, 71, 2890, 71, 2884, - 71, 71, 2886, 71, 2894, 2896, 71, 71, 71, 71, - 2891, 2898, 71, 2892, 2888, 2889, 2895, 71, 2900, 71, - 2903, 71, 2902, 71, 71, 2897, 71, 71, 71, 2905, - 2901, 71, 71, 71, 71, 2899, 71, 2904, 2909, 2912, - 2906, 71, 2910, 71, 2908, 2907, 2911, 2913, 2914, 71, - 2915, 71, 2916, 71, 71, 71, 71, 2921, 71, 71, - 71, 2925, 71, 2918, 2917, 2924, 71, 2927, 71, 2923, + 2878, 2872, 71, 2880, 71, 71, 71, 71, 2879, 3070, + 2871, 2926, 2873, 71, 2876, 2881, 71, 2900, 2882, 2883, + 71, 2884, 71, 2885, 71, 2886, 71, 2887, 71, 2888, + 71, 2889, 71, 2890, 71, 71, 2892, 71, 71, 71, + 71, 71, 2897, 71, 2891, 71, 71, 2893, 71, 2901, + 2903, 71, 71, 71, 71, 2898, 2905, 71, 2899, 2895, + 2896, 2902, 71, 2907, 71, 2910, 71, 2909, 71, 71, + 2904, 71, 71, 71, 2912, 2908, 71, 71, 71, 71, + 2906, 71, 2911, 2916, 2919, 2913, 71, 2917, 71, 2915, + 2914, 2918, 2920, 2921, 71, 2922, 71, 2923, 71, 71, - 71, 71, 71, 71, 71, 2920, 71, 2926, 71, 2922, - 71, 2928, 71, 2934, 71, 3063, 71, 2931, 71, 2929, - 2930, 2933, 2935, 2938, 2941, 71, 71, 71, 2932, 2936, - 2939, 71, 2937, 71, 2940, 2942, 2943, 71, 71, 2944, - 2945, 71, 2946, 71, 71, 71, 2947, 2949, 71, 71, - 2950, 2948, 71, 2951, 2954, 71, 71, 71, 2952, 71, - 71, 2957, 2959, 71, 2953, 71, 2955, 2956, 2962, 71, - 71, 71, 2965, 71, 2960, 71, 2966, 2958, 71, 71, - 71, 2969, 2970, 71, 2961, 2963, 2967, 71, 71, 2964, - 71, 71, 71, 71, 2971, 71, 2972, 2974, 2968, 2975, + 71, 71, 2928, 71, 71, 71, 71, 2934, 2925, 2924, + 2931, 71, 71, 71, 2930, 71, 71, 71, 71, 2933, + 2927, 71, 71, 71, 2929, 2935, 2941, 71, 2948, 71, + 2936, 2937, 2938, 2940, 2942, 71, 71, 71, 2950, 71, + 2939, 2945, 2943, 2944, 71, 2951, 2949, 2947, 71, 2946, + 2952, 71, 2953, 71, 71, 71, 71, 71, 2956, 71, + 71, 2957, 2958, 2961, 71, 71, 71, 2954, 71, 71, + 71, 2964, 2966, 71, 2955, 2960, 71, 2963, 2962, 2969, + 71, 71, 71, 71, 2959, 2967, 2972, 71, 2965, 71, + 2973, 2974, 71, 2976, 71, 2968, 2970, 2977, 71, 71, - 71, 2976, 71, 71, 71, 71, 71, 71, 2980, 2973, - 2982, 71, 2977, 2978, 71, 2981, 71, 2979, 71, 71, - 2984, 2987, 71, 2988, 2985, 2983, 2989, 71, 71, 2993, - 71, 71, 2995, 2986, 71, 2996, 2994, 71, 71, 2990, - 2991, 71, 2997, 71, 71, 3001, 2998, 2992, 2999, 3002, - 71, 71, 71, 3004, 71, 71, 71, 3003, 71, 3005, - 71, 71, 3010, 3000, 71, 3007, 71, 3013, 71, 71, - 3014, 71, 71, 71, 71, 3006, 71, 71, 3017, 3008, - 3009, 3015, 3012, 3011, 3016, 71, 3021, 71, 71, 71, - 3020, 71, 3022, 3018, 71, 3019, 71, 3025, 71, 3027, + 2971, 71, 71, 71, 2982, 71, 71, 2981, 2978, 2983, + 71, 2975, 71, 71, 2979, 71, 71, 2980, 71, 71, + 2987, 71, 71, 2989, 71, 71, 71, 2984, 71, 2986, + 2994, 2995, 2985, 2988, 2991, 2992, 2996, 71, 2990, 71, + 71, 3000, 71, 2993, 71, 3002, 71, 3003, 2997, 3001, + 71, 71, 71, 71, 3008, 3004, 71, 2998, 3005, 2999, + 71, 3006, 3009, 71, 71, 3011, 71, 71, 71, 3010, + 71, 3007, 3012, 71, 71, 3017, 71, 3014, 71, 71, + 3020, 71, 3021, 71, 71, 71, 3013, 71, 71, 3024, + 71, 3019, 3015, 3016, 3022, 3018, 71, 3023, 71, 3028, - 71, 3023, 71, 3028, 71, 3029, 3032, 71, 71, 71, - 3026, 3030, 71, 3031, 3033, 3024, 71, 71, 3034, 3035, - 71, 71, 3041, 71, 3036, 71, 71, 3038, 3037, 71, - 3039, 3040, 71, 71, 3043, 71, 71, 3044, 71, 3047, - 3048, 71, 71, 71, 3051, 3042, 3052, 71, 3063, 71, - 3054, 71, 3045, 71, 3046, 3049, 3053, 3055, 71, 71, - 3056, 3050, 71, 71, 3057, 71, 3063, 3058, 3061, 71, - 3062, 71, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3059, 3063, 3060, 43, 43, 43, 43, 43, - 43, 43, 48, 48, 48, 48, 48, 48, 48, 53, + 71, 3029, 71, 3027, 71, 3032, 3025, 3026, 71, 71, + 3034, 71, 3035, 3030, 71, 71, 71, 3039, 71, 3036, + 71, 71, 3037, 3041, 71, 3040, 71, 3033, 3031, 3042, + 71, 3043, 71, 3044, 71, 3038, 71, 3048, 71, 3046, + 71, 71, 71, 71, 71, 71, 3050, 3051, 71, 3054, + 71, 3045, 3055, 71, 3070, 3047, 71, 3058, 71, 3049, + 3059, 71, 3052, 3053, 3056, 3060, 3061, 71, 71, 3057, + 3062, 71, 71, 71, 71, 3063, 71, 3064, 3065, 3068, + 71, 3069, 71, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3070, 3070, 3070, 3066, 3070, 3067, 43, 43, 43, 43, - 53, 53, 53, 53, 53, 53, 59, 59, 59, 59, - 59, 59, 59, 64, 64, 64, 64, 64, 64, 64, - 74, 74, 3063, 74, 74, 74, 74, 141, 141, 3063, - 3063, 3063, 141, 141, 143, 143, 3063, 3063, 143, 3063, - 143, 145, 3063, 3063, 3063, 3063, 3063, 145, 148, 148, - 3063, 3063, 3063, 148, 148, 150, 3063, 3063, 3063, 3063, - 3063, 150, 152, 152, 3063, 152, 152, 152, 152, 75, - 75, 3063, 75, 75, 75, 75, 13, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, + 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, + 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, + 64, 74, 74, 3070, 74, 74, 74, 74, 141, 141, + 3070, 3070, 3070, 141, 141, 143, 143, 3070, 3070, 143, + 3070, 143, 145, 3070, 3070, 3070, 3070, 3070, 145, 148, + 148, 3070, 3070, 3070, 148, 148, 150, 3070, 3070, 3070, + 3070, 3070, 150, 152, 152, 3070, 152, 152, 152, 152, + 75, 75, 3070, 75, 75, 75, 75, 13, 3070, 3070, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063 + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070 } ; -static const flex_int16_t yy_chk[6018] = +static const flex_int16_t yy_chk[6029] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2104,13 +2107,13 @@ static const flex_int16_t yy_chk[6018] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3069, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3076, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1007, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 1010, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, @@ -2217,547 +2220,548 @@ static const flex_int16_t yy_chk[6018] = 460, 464, 462, 465, 468, 484, 484, 458, 454, 461, 469, 457, 471, 470, 463, 473, 465, 470, 472, 473, - 464, 466, 466, 474, 468, 469, 477, 466, 474, 466, - 475, 471, 474, 476, 472, 466, 480, 466, 476, 478, - 466, 466, 477, 479, 482, 475, 483, 466, 478, 479, - 481, 485, 480, 481, 479, 486, 486, 487, 488, 489, - 490, 491, 493, 492, 59, 494, 483, 482, 492, 496, - 488, 493, 487, 495, 489, 496, 485, 498, 499, 490, - 501, 500, 499, 491, 494, 502, 498, 500, 495, 503, - 504, 505, 501, 506, 507, 509, 508, 509, 507, 510, - 502, 511, 511, 513, 504, 515, 505, 510, 503, 508, - 512, 506, 514, 517, 518, 513, 512, 515, 514, 516, + 464, 466, 466, 474, 468, 469, 480, 466, 474, 466, + 475, 471, 474, 476, 472, 466, 477, 466, 476, 478, + 466, 466, 480, 479, 482, 475, 483, 466, 478, 479, + 481, 485, 477, 481, 479, 477, 486, 486, 487, 488, + 489, 490, 491, 492, 494, 493, 483, 482, 492, 501, + 495, 488, 496, 487, 493, 489, 485, 498, 496, 502, + 490, 501, 500, 494, 491, 495, 498, 499, 500, 503, + 504, 499, 505, 506, 502, 507, 508, 510, 509, 507, + 509, 511, 511, 513, 504, 510, 512, 505, 503, 508, + 514, 506, 512, 515, 516, 513, 514, 516, 517, 518, - 519, 520, 516, 521, 520, 519, 533, 517, 522, 518, - 523, 533, 521, 524, 531, 523, 523, 525, 525, 521, - 526, 526, 521, 527, 522, 534, 524, 528, 528, 527, - 529, 529, 530, 532, 535, 531, 532, 536, 530, 538, - 536, 537, 535, 540, 534, 539, 537, 540, 541, 542, - 543, 544, 545, 542, 541, 546, 544, 548, 547, 550, - 54, 546, 538, 547, 539, 552, 549, 556, 543, 549, - 553, 548, 545, 557, 549, 551, 551, 550, 549, 554, - 555, 556, 560, 552, 554, 555, 553, 559, 557, 561, - 562, 560, 561, 559, 562, 563, 564, 565, 566, 564, + 520, 519, 521, 520, 522, 515, 519, 525, 525, 524, + 523, 521, 517, 527, 518, 523, 523, 531, 521, 527, + 522, 521, 524, 526, 526, 528, 528, 529, 529, 530, + 532, 533, 534, 532, 535, 530, 533, 536, 531, 537, + 536, 538, 535, 539, 537, 540, 541, 543, 544, 540, + 542, 534, 541, 544, 542, 545, 547, 546, 548, 550, + 553, 547, 539, 546, 538, 543, 549, 551, 551, 549, + 552, 557, 548, 556, 549, 545, 553, 550, 549, 554, + 555, 560, 59, 559, 554, 555, 557, 556, 552, 559, + 560, 561, 562, 563, 561, 566, 562, 564, 563, 565, - 563, 567, 565, 570, 569, 571, 572, 572, 570, 573, - 574, 575, 576, 584, 566, 53, 562, 569, 573, 567, - 577, 576, 578, 580, 579, 571, 580, 575, 578, 574, - 579, 584, 577, 581, 581, 582, 581, 583, 582, 585, - 586, 588, 583, 587, 48, 590, 586, 588, 587, 589, - 590, 591, 589, 585, 592, 593, 591, 591, 594, 595, - 596, 597, 599, 594, 598, 595, 601, 592, 593, 598, - 597, 600, 600, 601, 604, 603, 608, 594, 594, 596, - 602, 603, 599, 602, 605, 606, 604, 607, 607, 605, - 606, 606, 609, 610, 609, 611, 612, 611, 602, 613, + 564, 567, 569, 570, 565, 571, 572, 572, 570, 574, + 575, 566, 573, 576, 578, 569, 54, 577, 562, 567, + 578, 573, 576, 584, 579, 571, 575, 612, 574, 577, + 579, 580, 581, 581, 580, 581, 582, 583, 585, 582, + 586, 584, 583, 587, 588, 612, 586, 596, 587, 592, + 588, 589, 585, 590, 589, 591, 593, 595, 590, 594, + 591, 591, 592, 595, 594, 597, 596, 598, 599, 593, + 600, 600, 598, 601, 597, 604, 603, 608, 594, 594, + 601, 602, 603, 613, 602, 605, 606, 604, 599, 610, + 605, 606, 606, 607, 607, 609, 611, 609, 611, 602, - 614, 608, 615, 616, 617, 618, 619, 620, 623, 618, - 617, 621, 610, 622, 612, 619, 624, 613, 614, 625, - 628, 615, 620, 616, 626, 627, 621, 623, 624, 629, - 626, 622, 628, 630, 625, 632, 631, 634, 633, 627, - 631, 635, 636, 637, 638, 638, 639, 640, 629, 642, - 639, 641, 630, 632, 633, 634, 644, 637, 645, 635, - 635, 636, 641, 642, 643, 646, 640, 647, 648, 643, - 652, 650, 644, 648, 647, 649, 650, 645, 646, 651, - 653, 654, 649, 655, 651, 656, 657, 653, 652, 659, - 654, 658, 659, 661, 656, 660, 658, 655, 657, 660, + 614, 613, 608, 615, 616, 617, 618, 619, 610, 624, + 618, 617, 620, 621, 622, 623, 619, 626, 614, 627, + 625, 624, 615, 626, 616, 628, 629, 620, 621, 630, + 633, 632, 622, 627, 623, 625, 631, 628, 634, 635, + 631, 636, 637, 639, 639, 629, 633, 637, 630, 632, + 638, 640, 641, 643, 642, 640, 634, 635, 635, 645, + 636, 644, 646, 647, 638, 642, 644, 643, 649, 651, + 648, 641, 650, 649, 651, 645, 647, 648, 652, 650, + 653, 646, 654, 652, 655, 656, 657, 659, 658, 654, + 662, 660, 659, 655, 660, 657, 663, 661, 653, 656, - 662, 663, 665, 664, 666, 666, 669, 661, 671, 662, - 667, 667, 668, 668, 672, 669, 663, 664, 673, 667, - 672, 674, 675, 665, 676, 674, 677, 671, 679, 678, - 680, 682, 681, 683, 675, 678, 679, 680, 673, 686, - 693, 689, 692, 694, 677, 43, 693, 699, 695, 676, - 681, 692, 695, 683, 686, 701, 682, 684, 689, 694, - 696, 696, 684, 697, 697, 699, 684, 698, 700, 684, - 705, 706, 707, 712, 702, 701, 684, 684, 698, 684, - 702, 704, 700, 703, 703, 703, 704, 703, 712, 706, - 703, 705, 718, 708, 718, 703, 708, 707, 709, 709, + 658, 661, 664, 666, 662, 663, 665, 667, 667, 668, + 668, 669, 669, 670, 672, 673, 674, 664, 668, 675, + 665, 673, 670, 675, 666, 676, 677, 678, 679, 682, + 680, 683, 681, 672, 679, 684, 674, 676, 680, 681, + 693, 705, 690, 687, 694, 678, 705, 682, 695, 693, + 694, 677, 697, 697, 700, 684, 683, 685, 687, 690, + 699, 696, 685, 702, 695, 696, 685, 698, 698, 685, + 701, 699, 700, 706, 703, 707, 685, 685, 720, 685, + 703, 708, 53, 702, 701, 704, 704, 704, 709, 704, + 720, 709, 704, 707, 706, 710, 710, 704, 711, 712, - 710, 703, 703, 711, 711, 713, 713, 710, 714, 715, - 716, 719, 715, 714, 720, 716, 717, 717, 721, 722, - 724, 723, 721, 719, 725, 725, 726, 729, 724, 727, - 728, 728, 730, 720, 731, 768, 732, 734, 734, 722, - 723, 726, 732, 727, 730, 729, 733, 735, 768, 737, - 744, 733, 735, 735, 737, 738, 731, 739, 744, 740, - 741, 738, 742, 739, 740, 742, 741, 743, 745, 745, - 746, 746, 747, 743, 748, 750, 749, 751, 752, 752, - 747, 749, 750, 754, 753, 756, 758, 760, 755, 759, - 762, 754, 748, 753, 755, 758, 751, 761, 759, 762, + 712, 713, 721, 704, 704, 711, 708, 714, 714, 715, + 716, 722, 717, 716, 715, 722, 713, 717, 718, 718, + 719, 721, 719, 723, 725, 724, 726, 726, 728, 730, + 727, 732, 725, 729, 729, 733, 731, 735, 735, 746, + 746, 733, 728, 723, 724, 727, 734, 730, 731, 736, + 739, 734, 738, 732, 736, 736, 739, 738, 740, 743, + 741, 742, 743, 744, 740, 741, 745, 742, 748, 744, + 747, 747, 749, 750, 745, 751, 748, 752, 750, 753, + 753, 755, 751, 754, 757, 756, 759, 761, 760, 755, + 749, 756, 754, 762, 767, 759, 752, 760, 762, 763, - 763, 764, 761, 763, 756, 765, 764, 766, 767, 769, - 771, 760, 770, 770, 769, 769, 772, 767, 773, 765, - 774, 779, 777, 775, 777, 771, 775, 773, 778, 778, - 781, 780, 766, 782, 775, 772, 780, 783, 784, 785, - 786, 787, 779, 788, 774, 789, 790, 788, 791, 786, - 793, 781, 792, 782, 791, 794, 795, 783, 800, 785, - 784, 792, 793, 789, 787, 790, 796, 797, 798, 802, - 795, 801, 796, 798, 794, 799, 799, 803, 800, 804, - 801, 797, 805, 806, 808, 803, 807, 809, 810, 802, - 808, 811, 812, 815, 810, 816, 814, 813, 812, 804, + 765, 764, 766, 757, 764, 765, 768, 769, 763, 771, + 771, 761, 770, 772, 773, 768, 766, 770, 770, 767, + 769, 774, 775, 776, 780, 778, 776, 778, 772, 782, + 774, 779, 779, 773, 776, 781, 783, 784, 785, 786, + 781, 788, 787, 789, 790, 780, 775, 789, 791, 792, + 782, 787, 793, 794, 795, 792, 783, 784, 796, 786, + 785, 793, 790, 797, 788, 794, 798, 791, 801, 797, + 799, 803, 796, 795, 802, 799, 800, 800, 804, 805, + 798, 806, 807, 802, 808, 813, 804, 809, 801, 810, + 812, 803, 811, 809, 814, 810, 812, 817, 818, 805, - 814, 809, 806, 813, 805, 817, 807, 816, 818, 822, - 817, 811, 815, 819, 819, 816, 820, 821, 823, 824, - 821, 825, 820, 826, 826, 824, 827, 822, 828, 818, - 830, 823, 831, 828, 829, 829, 831, 832, 832, 833, - 834, 825, 835, 836, 827, 830, 838, 835, 841, 839, - 842, 844, 844, 845, 846, 847, 847, 845, 850, 848, - 834, 833, 836, 839, 14, 851, 867, 867, 841, 846, - 838, 842, 843, 850, 849, 843, 853, 843, 849, 851, - 852, 843, 855, 843, 848, 852, 854, 857, 843, 859, - 853, 854, 854, 843, 856, 860, 855, 861, 856, 858, + 814, 807, 815, 806, 808, 813, 811, 816, 815, 819, + 818, 816, 820, 824, 819, 822, 817, 825, 818, 821, + 821, 822, 823, 826, 827, 823, 828, 828, 829, 826, + 825, 824, 830, 820, 831, 831, 832, 830, 833, 834, + 834, 835, 833, 837, 827, 836, 829, 838, 837, 840, + 841, 832, 843, 844, 846, 846, 847, 849, 849, 48, + 847, 848, 850, 835, 841, 836, 838, 851, 852, 869, + 869, 851, 843, 840, 844, 845, 848, 854, 845, 853, + 845, 855, 854, 852, 845, 857, 845, 850, 859, 861, + 858, 845, 856, 853, 858, 855, 845, 856, 856, 857, - 860, 859, 857, 862, 858, 863, 864, 865, 870, 866, - 856, 861, 864, 865, 858, 866, 868, 869, 871, 863, - 872, 868, 874, 869, 862, 880, 875, 876, 878, 878, - 870, 875, 877, 880, 874, 881, 882, 871, 872, 873, - 873, 876, 883, 879, 877, 873, 13, 873, 879, 881, - 884, 884, 885, 873, 887, 882, 885, 889, 873, 873, - 887, 883, 890, 888, 891, 873, 888, 892, 893, 895, - 891, 896, 892, 897, 900, 890, 889, 898, 895, 899, - 896, 901, 902, 898, 903, 904, 901, 893, 899, 897, - 906, 905, 907, 900, 908, 909, 915, 912, 903, 906, + 860, 861, 862, 859, 863, 860, 858, 862, 864, 865, + 866, 867, 872, 868, 873, 860, 866, 867, 863, 868, + 870, 871, 874, 865, 876, 870, 877, 871, 904, 864, + 878, 877, 881, 873, 872, 882, 876, 881, 879, 883, + 874, 875, 875, 882, 878, 880, 880, 875, 904, 875, + 879, 884, 885, 883, 887, 875, 886, 886, 887, 889, + 875, 875, 891, 890, 892, 889, 890, 875, 893, 895, + 884, 885, 43, 894, 893, 897, 898, 892, 894, 899, + 900, 891, 901, 902, 897, 898, 900, 903, 895, 905, + 906, 901, 903, 907, 910, 899, 911, 908, 909, 914, - 908, 907, 902, 905, 910, 904, 914, 916, 917, 918, - 910, 927, 909, 912, 919, 0, 915, 927, 920, 921, - 914, 928, 917, 920, 921, 924, 916, 918, 925, 919, - 924, 926, 926, 930, 928, 931, 934, 925, 932, 932, - 931, 931, 932, 933, 935, 936, 933, 937, 939, 930, - 934, 940, 941, 938, 942, 943, 948, 940, 0, 945, - 942, 936, 944, 939, 935, 937, 938, 944, 947, 949, - 943, 947, 941, 945, 949, 950, 951, 948, 952, 953, - 950, 954, 956, 952, 953, 957, 960, 960, 956, 958, - 959, 961, 951, 954, 962, 958, 959, 964, 964, 963, + 910, 917, 902, 905, 916, 907, 908, 909, 912, 918, + 906, 919, 920, 911, 912, 914, 921, 922, 916, 923, + 927, 917, 922, 930, 923, 919, 932, 926, 918, 927, + 920, 921, 926, 928, 928, 929, 930, 935, 933, 936, + 935, 929, 932, 933, 933, 934, 934, 937, 938, 934, + 939, 941, 940, 936, 942, 943, 944, 945, 946, 947, + 942, 950, 944, 946, 938, 940, 941, 937, 939, 953, + 14, 949, 945, 947, 949, 943, 951, 956, 952, 954, + 959, 951, 950, 952, 954, 953, 955, 958, 960, 956, + 964, 955, 961, 958, 960, 963, 959, 967, 961, 962, - 961, 957, 963, 965, 966, 967, 968, 969, 970, 968, - 971, 977, 962, 972, 970, 978, 971, 973, 972, 974, - 969, 965, 973, 966, 974, 967, 975, 979, 984, 977, - 982, 980, 975, 979, 983, 978, 980, 981, 981, 982, - 987, 985, 986, 983, 985, 986, 984, 988, 989, 990, - 991, 987, 992, 996, 993, 998, 991, 994, 992, 997, - 989, 1000, 994, 995, 995, 988, 999, 998, 990, 993, - 999, 1001, 996, 997, 1002, 1003, 1005, 1006, 1006, 1000, - 1001, 1011, 1008, 1009, 1014, 1010, 1011, 1013, 1013, 1017, - 1012, 1029, 1029, 1002, 1017, 1005, 1008, 1010, 1009, 1012, + 962, 968, 965, 969, 963, 965, 966, 966, 964, 970, + 972, 971, 970, 973, 979, 967, 972, 974, 980, 973, + 968, 975, 974, 969, 971, 976, 975, 977, 981, 986, + 976, 982, 979, 977, 981, 984, 982, 985, 980, 983, + 983, 987, 988, 990, 984, 988, 985, 986, 989, 991, + 992, 989, 993, 994, 990, 995, 999, 996, 997, 994, + 987, 995, 992, 997, 998, 998, 1000, 991, 1003, 1001, + 1002, 993, 996, 1004, 1002, 999, 1005, 1006, 1008, 1011, + 1000, 1001, 1004, 1009, 1009, 1012, 1003, 1013, 1017, 1014, + 1016, 1016, 1015, 1011, 1014, 1005, 13, 1008, 1018, 1013, - 1003, 1015, 1016, 1018, 1014, 1018, 1019, 1015, 1016, 1020, - 1021, 1019, 1022, 1023, 1024, 1025, 1026, 1022, 1027, 0, - 1030, 1031, 1025, 1020, 1021, 1032, 1033, 1034, 1023, 1040, - 1035, 1026, 1033, 1024, 1030, 1035, 1040, 1027, 1038, 1031, - 1032, 1037, 1037, 1038, 1035, 1041, 1035, 1034, 1043, 1035, - 1039, 1039, 1042, 1044, 1045, 1042, 1046, 1047, 1049, 1041, - 1048, 1046, 1050, 1045, 1055, 1048, 1142, 1043, 1142, 1049, - 1053, 1044, 1052, 1052, 1054, 1053, 1047, 1056, 1059, 1054, - 1058, 1050, 1056, 1057, 1055, 1060, 1061, 1057, 1063, 1058, - 1062, 1064, 1065, 1059, 1066, 1067, 1068, 1070, 1064, 1071, + 1012, 1015, 1006, 1019, 1018, 1020, 1023, 1022, 1017, 1019, + 1020, 1021, 1022, 1021, 1024, 1026, 1025, 1027, 1028, 1029, + 1023, 1025, 1030, 1032, 1032, 1028, 1033, 1034, 1024, 1035, + 1026, 1036, 1037, 1145, 1029, 1145, 1027, 1036, 1040, 1040, + 1033, 1030, 1038, 1041, 1035, 1034, 1043, 1038, 1041, 1042, + 1042, 1044, 1037, 1043, 1045, 1046, 1038, 1045, 1038, 1047, + 1048, 1038, 1049, 1050, 1052, 1044, 1051, 1049, 1053, 1048, + 1058, 1051, 1055, 1055, 1046, 1052, 1056, 1047, 1057, 1059, + 1064, 1056, 1050, 1057, 1059, 1060, 1061, 1053, 1062, 1060, + 1058, 1063, 1065, 1066, 1067, 1061, 1069, 1068, 1070, 1064, - 1060, 1069, 1062, 1063, 1065, 1061, 1072, 1069, 1073, 1075, - 1076, 1078, 1070, 1066, 1068, 1075, 1067, 1073, 1079, 1071, - 1077, 1080, 1082, 1079, 1076, 1083, 1072, 1084, 1077, 1081, - 1087, 1078, 1089, 1080, 1081, 1081, 1085, 1085, 1089, 1083, - 1084, 1082, 1086, 1087, 1088, 1090, 1090, 1086, 1092, 1091, - 1086, 1086, 1093, 1088, 1091, 1086, 1097, 1092, 1093, 1094, - 1100, 1086, 1095, 1101, 1094, 1086, 1102, 1095, 1096, 1096, - 1098, 1098, 1103, 1099, 1104, 1102, 1099, 1097, 1099, 1104, - 1100, 1101, 1105, 1106, 1107, 1108, 1111, 1161, 1109, 1161, - 1107, 1108, 1103, 1109, 1110, 1111, 1105, 1122, 1110, 1118, + 1071, 1067, 1073, 1062, 1065, 1072, 1063, 1074, 1066, 1068, + 1075, 1072, 1076, 1081, 1078, 1069, 1080, 1073, 1071, 1070, + 1078, 1076, 1079, 1082, 1080, 1083, 1084, 1074, 1082, 1085, + 1075, 1084, 1084, 1081, 1087, 1086, 1079, 1083, 1088, 1088, + 1090, 0, 1091, 1093, 1093, 1095, 1092, 1087, 1085, 1086, + 1089, 1091, 1092, 1090, 1095, 1089, 1094, 1097, 1089, 1089, + 1096, 1094, 1097, 1089, 1100, 1098, 1096, 1099, 1099, 1089, + 1098, 1101, 1101, 1089, 1102, 1103, 1104, 1102, 1105, 1102, + 1106, 1107, 1108, 1109, 1110, 1100, 1107, 1105, 1112, 1147, + 1110, 1111, 1147, 1112, 1104, 1103, 1108, 1111, 1113, 1114, - 1111, 1106, 1111, 1114, 1111, 1117, 1111, 1112, 1112, 1113, - 1113, 1116, 1113, 1119, 1114, 1116, 1121, 1118, 1120, 1122, - 1117, 1123, 1119, 1120, 1120, 1121, 1123, 1124, 1125, 1126, - 1127, 1128, 1129, 1130, 1130, 1131, 1132, 1125, 1129, 1133, - 1134, 1124, 1135, 1131, 1133, 1128, 1136, 1137, 1126, 1127, - 1132, 1135, 1138, 1140, 1134, 1139, 1139, 1138, 1141, 1141, - 1144, 1145, 1146, 1144, 1136, 1147, 1145, 1149, 1140, 1148, - 1148, 1153, 1137, 1154, 1147, 1150, 1150, 1151, 1151, 1152, - 1156, 1146, 1155, 1155, 1152, 1157, 1158, 1149, 1157, 1160, - 1159, 1162, 1153, 1164, 1154, 1159, 1164, 1165, 1160, 1166, + 1106, 1109, 1113, 1115, 1115, 1117, 1116, 1116, 1114, 1116, + 1119, 1120, 1121, 1114, 1119, 1114, 1117, 1114, 1122, 1114, + 1125, 1127, 1124, 1123, 1128, 1129, 1120, 1122, 1123, 1123, + 1121, 1124, 1126, 1128, 1130, 1127, 1131, 1126, 1134, 1132, + 1133, 1133, 1125, 1135, 1129, 1132, 1134, 1136, 1137, 1138, + 1131, 1139, 1136, 1130, 1140, 1141, 1143, 1135, 1138, 1149, + 1141, 1150, 1137, 1142, 1142, 1144, 1144, 1148, 1152, 1139, + 1150, 1143, 1148, 1151, 1151, 1153, 1153, 1155, 1149, 1140, + 1154, 1154, 1155, 1156, 1157, 1158, 1158, 1159, 1152, 1160, + 1161, 1162, 1160, 1163, 1165, 1164, 1162, 1164, 1167, 1168, - 1156, 1173, 1167, 1168, 1166, 1169, 1158, 1167, 1170, 1162, - 1169, 1168, 1165, 1170, 1171, 1171, 1172, 1174, 1175, 1173, - 1176, 1172, 1178, 1174, 1179, 1175, 1180, 1182, 1178, 1181, - 1179, 1180, 1183, 1176, 1184, 1181, 1182, 1185, 1185, 1186, - 1188, 1189, 1190, 1191, 1192, 1184, 1194, 1195, 1190, 1191, - 1192, 1183, 1194, 1196, 1197, 1198, 1199, 1200, 1200, 1186, - 1188, 1195, 1201, 1202, 1189, 1203, 1197, 1195, 1206, 1198, - 1204, 1205, 1205, 1196, 1199, 1204, 1207, 1209, 1212, 1210, - 1211, 1207, 1201, 1203, 1210, 1210, 1213, 1212, 1202, 1214, - 1215, 1206, 1216, 1218, 1213, 1218, 1209, 1219, 1211, 1226, + 0, 1167, 1163, 1169, 1156, 1157, 1170, 1159, 1169, 1172, + 1161, 1171, 1165, 1173, 1168, 1177, 1171, 1172, 1173, 1174, + 1170, 1175, 1175, 1176, 1174, 1178, 1180, 1179, 1176, 1182, + 1183, 1178, 1184, 1177, 1179, 1182, 1183, 1184, 1185, 1180, + 1186, 1187, 1188, 1190, 1185, 1189, 1189, 1192, 1193, 1186, + 1194, 1195, 1196, 1188, 1199, 1198, 1194, 1195, 1196, 1200, + 1187, 1198, 1205, 1190, 1201, 1203, 1202, 1192, 1199, 1204, + 1204, 1193, 1206, 1207, 1199, 1210, 1201, 1209, 1209, 1200, + 1202, 1208, 1205, 1203, 1211, 1213, 1208, 1214, 1215, 1211, + 1216, 1207, 1214, 1214, 1217, 1218, 1219, 1206, 1210, 1216, - 1222, 1217, 1221, 1214, 1222, 1215, 1217, 1216, 1221, 1217, - 1216, 1219, 1223, 1224, 1225, 1228, 1227, 1229, 1224, 1224, - 1228, 1230, 1231, 1223, 1233, 1226, 1230, 1234, 1235, 1236, - 1236, 1238, 1237, 1225, 1227, 1229, 1237, 1239, 1233, 1241, - 1242, 1240, 1231, 1243, 1250, 1234, 1235, 1240, 1244, 1238, - 1245, 1241, 1246, 1247, 1248, 1249, 1239, 1243, 1247, 1242, - 1249, 1248, 1250, 1244, 1251, 1245, 1252, 1252, 1253, 1254, - 1255, 1246, 1256, 1251, 1257, 1254, 1258, 1256, 1259, 1259, - 1257, 1264, 1258, 1253, 1260, 1260, 1262, 1262, 1263, 1265, - 1264, 1255, 1263, 1268, 1266, 1267, 1269, 1269, 1270, 1272, + 1220, 1222, 1217, 1222, 1213, 1221, 1215, 1223, 1225, 1218, + 1221, 1219, 1226, 1221, 1225, 1220, 1226, 1227, 1220, 1228, + 1229, 1223, 1230, 1231, 1228, 1228, 1232, 1233, 1227, 1234, + 1235, 1232, 1237, 1238, 1234, 1239, 1240, 1240, 1241, 1229, + 1242, 1231, 1241, 1243, 1245, 1233, 1237, 1246, 1230, 1244, + 1235, 1238, 1248, 1239, 1247, 1244, 1245, 1249, 1242, 1250, + 1251, 1254, 1243, 1252, 1253, 1251, 1246, 1248, 1247, 1253, + 1252, 1255, 1249, 1256, 1256, 1257, 1258, 1259, 1250, 1254, + 1255, 1260, 1258, 1261, 1269, 1262, 1260, 1263, 1263, 1261, + 1257, 1262, 1264, 1264, 1266, 1266, 1267, 1268, 1259, 1270, - 1268, 1271, 1273, 1274, 1272, 1277, 1275, 1265, 1266, 1271, - 1267, 1275, 1275, 1279, 1276, 1280, 1273, 1281, 1270, 1276, - 1276, 1283, 1274, 1278, 1278, 1277, 1281, 1284, 1282, 1286, - 1285, 1287, 1279, 1282, 1280, 1286, 1287, 1288, 1289, 1290, - 1283, 1293, 1294, 1291, 1289, 1292, 1295, 1284, 1285, 1291, - 1296, 1292, 1297, 1298, 0, 1299, 1300, 1300, 1290, 1301, - 1293, 1294, 1301, 1288, 1302, 1295, 1297, 1303, 1303, 1296, - 1299, 1304, 1304, 1305, 1298, 1306, 1302, 1307, 1305, 1306, - 1308, 1309, 1310, 1314, 1310, 1312, 1313, 1315, 1310, 1308, - 1307, 1313, 1316, 1319, 1309, 1317, 1317, 1318, 1314, 1319, + 1267, 1271, 1269, 1272, 1273, 1273, 1268, 1274, 1277, 1275, + 1272, 1278, 1281, 1270, 1276, 1279, 1271, 1275, 1280, 1276, + 1279, 1279, 1277, 1280, 1280, 1282, 1282, 1274, 1283, 1284, + 1278, 1285, 1281, 1286, 1287, 1288, 1289, 1290, 1286, 1291, + 1285, 1292, 1294, 1290, 1291, 1293, 1295, 1283, 1284, 1297, + 1296, 1293, 1295, 1287, 1289, 1288, 1296, 1298, 1299, 1300, + 1301, 1294, 1302, 1306, 1303, 1304, 1304, 1292, 1297, 1305, + 1307, 1307, 1305, 1311, 1301, 1306, 1298, 1299, 1300, 1303, + 1308, 1308, 1309, 1302, 1310, 1312, 1311, 1309, 1310, 1313, + 1314, 1318, 1314, 1316, 1312, 1317, 1314, 1319, 1320, 1325, - 1320, 1310, 1318, 1312, 1321, 1322, 1325, 1315, 1316, 1323, - 1322, 1326, 1324, 1323, 1327, 1320, 1324, 1321, 1328, 1329, - 1329, 1331, 1333, 1334, 1328, 1337, 1325, 1336, 1334, 1326, - 1335, 1335, 1343, 1336, 1327, 1339, 1339, 1341, 1344, 1331, - 1341, 1342, 1342, 1333, 1346, 1337, 1347, 1346, 1343, 1348, - 1349, 1349, 1350, 1351, 1344, 1353, 1352, 1354, 1348, 1356, - 1353, 1355, 1355, 1357, 1358, 1360, 1347, 1350, 1359, 1359, - 1361, 1354, 1363, 1366, 1351, 1352, 1362, 1356, 1357, 1360, - 1365, 1362, 1364, 1364, 1365, 1367, 1367, 1363, 1361, 1358, - 1368, 1369, 1370, 1366, 1371, 1372, 1370, 1374, 1374, 1375, + 1317, 1323, 1313, 1321, 1321, 1322, 1318, 1323, 1324, 1314, + 1322, 1316, 1325, 1326, 1320, 1327, 1328, 1319, 1326, 1327, + 1328, 1329, 1330, 1324, 1331, 1332, 1333, 1333, 1335, 1337, + 1338, 1332, 1339, 1339, 1341, 1338, 1340, 1343, 1343, 1347, + 1330, 1329, 1340, 1348, 1331, 1345, 1335, 1351, 1345, 1352, + 1337, 1346, 1346, 1350, 1341, 1347, 1350, 1354, 1352, 1348, + 1353, 1353, 1355, 1356, 1357, 1358, 1360, 1351, 1361, 1357, + 1359, 1359, 1354, 1362, 1363, 1360, 1364, 1364, 1365, 1358, + 1366, 1368, 1356, 1355, 1367, 1371, 1361, 1373, 1362, 1367, + 1369, 1369, 1365, 1370, 1372, 1372, 1368, 1370, 1366, 1363, - 1372, 1376, 1369, 1377, 1378, 1379, 1380, 1380, 1382, 1381, - 1384, 1383, 1368, 1371, 1381, 1376, 1385, 1375, 1378, 1384, - 1386, 1385, 1377, 1377, 1387, 1390, 1387, 1388, 1382, 1389, - 1379, 1383, 1388, 1391, 1393, 1389, 1394, 1394, 1395, 1391, - 1386, 1396, 1399, 1403, 1398, 1390, 1402, 1396, 1393, 1398, - 1400, 1400, 1401, 1401, 1404, 1405, 1407, 1395, 1405, 1408, - 1402, 1403, 1406, 1406, 1409, 1410, 1399, 1409, 1407, 1404, - 1409, 1410, 1411, 1412, 1414, 1415, 1412, 1411, 1416, 1408, - 1415, 1417, 1409, 1414, 1417, 1418, 1420, 1420, 1419, 1421, - 1421, 1418, 1412, 1419, 1422, 1424, 1423, 1425, 1426, 1427, + 1374, 1376, 1375, 1377, 1380, 1371, 1375, 1381, 1377, 1373, + 1382, 1374, 1379, 1379, 1383, 1384, 1385, 1385, 1386, 1387, + 1376, 1381, 1380, 1386, 1388, 1389, 1390, 1391, 1383, 1382, + 1382, 1390, 1393, 1392, 1389, 1392, 1394, 1393, 1395, 1387, + 1384, 1398, 1394, 1396, 1388, 1399, 1399, 1391, 1400, 1396, + 1401, 1404, 1403, 1405, 1405, 1398, 1401, 1403, 1395, 1406, + 1406, 1408, 1407, 1409, 1413, 1410, 1415, 1400, 1410, 1411, + 1411, 1412, 1415, 1421, 1414, 1404, 1407, 1414, 1409, 1408, + 1414, 1416, 1417, 1412, 1413, 1417, 1416, 1419, 1420, 1423, + 1430, 1422, 1414, 1420, 1422, 1423, 1419, 1424, 1421, 1425, - 1422, 1423, 1428, 1416, 1429, 1428, 1430, 1432, 1424, 1431, - 1429, 1433, 1430, 1432, 1431, 1425, 1434, 1426, 1437, 1427, - 1436, 1434, 1435, 1435, 1438, 1436, 1439, 1440, 1441, 1444, - 1445, 1442, 1443, 1446, 1433, 1444, 1437, 1447, 1448, 1450, - 1450, 1440, 1441, 1442, 1438, 1443, 1439, 1451, 1454, 1452, - 1445, 1447, 1455, 1446, 1452, 1453, 1453, 1456, 1457, 1448, - 1458, 1460, 1459, 1454, 1462, 1466, 1455, 1451, 1460, 1458, - 1461, 1464, 1467, 1468, 1468, 1467, 1457, 1459, 1471, 1461, - 1462, 1456, 1461, 1469, 1469, 1470, 1464, 1473, 1473, 1472, - 1466, 1464, 1472, 1474, 1475, 1476, 1471, 1470, 1477, 1478, + 1425, 1417, 1424, 1426, 1426, 1427, 1429, 1428, 1430, 1431, + 1432, 1427, 1428, 1433, 1434, 1435, 1433, 1436, 1437, 1429, + 1434, 1435, 1436, 1438, 1437, 1442, 1439, 1443, 1431, 1441, + 1432, 1439, 1440, 1440, 1441, 1444, 1445, 1446, 1449, 1450, + 1447, 1448, 1451, 1442, 1449, 1453, 1438, 1443, 1456, 1452, + 1445, 1446, 1447, 1457, 1448, 1444, 1455, 1455, 1457, 1450, + 1458, 1458, 1451, 1452, 1459, 1461, 1453, 1460, 1456, 1462, + 1464, 1463, 1467, 1471, 1466, 1465, 1469, 1473, 1473, 1459, + 1463, 1460, 1465, 1466, 1476, 1464, 1466, 1462, 1467, 1461, + 1472, 1469, 1475, 1472, 1474, 1474, 1469, 1477, 1471, 1479, - 1476, 1479, 1480, 1477, 1481, 1483, 1474, 1482, 1486, 1484, - 1489, 1480, 1487, 1475, 1483, 1484, 1482, 1479, 1478, 1482, - 1485, 1485, 1488, 1481, 1489, 1487, 1490, 1491, 1486, 1494, - 1495, 1496, 1496, 1497, 1498, 1501, 1499, 1500, 1500, 1491, - 1488, 1499, 1490, 1498, 1501, 1502, 1503, 1501, 1495, 1497, - 1502, 1504, 1500, 1505, 1494, 1506, 1508, 1510, 1509, 1512, - 1506, 1506, 1511, 1513, 1503, 1512, 1520, 1511, 1514, 1514, - 1508, 1505, 1504, 1509, 1515, 1523, 1521, 1516, 1517, 1510, - 1515, 1513, 1516, 1518, 1517, 1522, 1520, 1525, 1523, 1518, - 1521, 1522, 1524, 1525, 1527, 1524, 1529, 1530, 1531, 1532, + 1477, 1480, 1476, 1481, 1475, 1478, 1478, 1483, 1481, 1482, + 1485, 1484, 1479, 1486, 1482, 1488, 1487, 1489, 1491, 1485, + 1480, 1490, 1490, 1489, 1488, 1487, 1483, 1484, 1487, 1492, + 1493, 1494, 1486, 1495, 1496, 1499, 1500, 1502, 1491, 1501, + 1501, 1503, 1492, 1505, 1505, 1494, 1496, 1504, 1493, 1495, + 1503, 1507, 1504, 1502, 1500, 1506, 1507, 1508, 1505, 1509, + 1499, 1510, 1513, 1511, 1506, 1515, 1514, 1506, 1511, 1511, + 1518, 0, 1516, 1519, 1519, 1508, 1513, 1516, 1517, 1510, + 1509, 1514, 1525, 1520, 1517, 1521, 1522, 1515, 1518, 1520, + 1521, 1523, 1522, 1526, 1527, 1528, 1529, 1523, 1530, 1529, - 1533, 1524, 1527, 1541, 1534, 1535, 1531, 1536, 1532, 1537, - 1537, 1540, 1538, 1533, 1539, 1529, 1530, 1534, 1538, 1535, - 1539, 1536, 1542, 1541, 1540, 1543, 1544, 1545, 1546, 1547, - 1548, 1537, 1551, 1545, 1550, 1550, 1557, 1552, 1553, 1544, - 1542, 1552, 1554, 1553, 1543, 1547, 1555, 1554, 1548, 1556, - 1546, 1555, 1551, 1559, 1560, 1560, 1561, 1562, 1556, 1557, - 1563, 1564, 1564, 1565, 1566, 1569, 1567, 1570, 1559, 1562, - 1568, 1566, 1573, 1572, 1571, 1561, 1579, 1565, 1567, 1563, - 1571, 1579, 1568, 1574, 1569, 1572, 1587, 1570, 1580, 1574, - 1573, 1575, 1575, 1576, 1577, 1577, 1576, 1580, 1581, 1582, + 1527, 1532, 1525, 1534, 1530, 1529, 1535, 1526, 1528, 1532, + 1536, 1537, 1559, 1538, 1539, 1540, 1541, 1559, 1536, 1545, + 1537, 1547, 1534, 1542, 1542, 1535, 1538, 1539, 1543, 1540, + 1541, 1544, 1545, 1548, 1543, 1546, 1546, 1544, 1549, 1550, + 1551, 1547, 1552, 1553, 1554, 1542, 1551, 1556, 1556, 1557, + 1558, 1548, 1550, 1560, 1558, 1561, 1562, 1549, 1560, 1553, + 1561, 1563, 1554, 1565, 1552, 1562, 1566, 1566, 1567, 1557, + 1568, 1569, 1570, 1570, 1571, 1575, 1572, 1573, 1565, 1574, + 1576, 1578, 1568, 1572, 1563, 1579, 1577, 1567, 1571, 1573, + 1569, 1574, 1577, 1578, 1575, 1580, 1581, 1581, 1586, 1582, - 1582, 1583, 1586, 1584, 1581, 1584, 1585, 1588, 1587, 1585, - 1589, 1590, 1591, 1583, 1592, 1593, 1590, 1596, 1594, 1597, - 1595, 1591, 1586, 1594, 1597, 1588, 1592, 1598, 1589, 1595, - 1593, 1597, 1598, 1599, 1600, 1600, 1602, 1596, 1601, 1603, - 1604, 1605, 1595, 1606, 1601, 1606, 1607, 1611, 1599, 1608, - 1608, 1609, 1609, 1610, 1610, 1614, 1604, 1602, 1603, 1615, - 1607, 1605, 1607, 1612, 1612, 1613, 1613, 1611, 1616, 1616, - 1617, 1618, 1619, 1621, 1617, 1619, 1614, 1618, 1622, 1621, - 1615, 1623, 1624, 1625, 1626, 1626, 1625, 1623, 1627, 1627, - 1629, 1628, 1630, 1631, 1632, 1633, 1622, 1628, 1642, 1637, + 1576, 1580, 1582, 1579, 1583, 1583, 1585, 1586, 1587, 1588, + 1588, 1585, 1589, 1590, 1587, 1590, 1591, 1592, 1593, 1591, + 1594, 1595, 1596, 1597, 1589, 1600, 1601, 1596, 1599, 1598, + 1600, 1602, 1597, 1606, 1606, 1601, 1608, 1592, 1594, 1595, + 1593, 1598, 1603, 1599, 1604, 1605, 1607, 1603, 1601, 1604, + 1609, 1602, 1607, 1611, 1603, 1610, 1612, 1608, 1612, 1617, + 1605, 1613, 1614, 1614, 1615, 1615, 1616, 1616, 1620, 1609, + 1621, 1610, 1623, 1611, 0, 1613, 1623, 1613, 1628, 1617, + 1618, 1618, 1619, 1619, 1622, 1622, 1624, 1625, 1627, 1620, + 1625, 1621, 1624, 1629, 1627, 1630, 1628, 1631, 1636, 1629, - 1632, 1637, 1629, 1629, 1629, 1635, 1636, 1624, 1638, 1629, - 1635, 1635, 1630, 1631, 1639, 1633, 1640, 1641, 1642, 1638, - 1636, 1643, 1640, 1644, 1644, 1645, 1641, 1646, 1646, 1639, - 1647, 1648, 1649, 1649, 1650, 1650, 1651, 1654, 1654, 1655, - 1656, 1659, 1643, 1658, 1661, 1661, 1662, 1666, 1660, 1656, - 1647, 1645, 1658, 1648, 1660, 1663, 1651, 1665, 1664, 1667, - 1667, 1668, 1659, 1669, 1655, 1664, 1665, 1662, 1673, 1671, - 1663, 1672, 1675, 1666, 1671, 1674, 1678, 1672, 1675, 1669, - 1676, 1678, 1674, 1677, 1677, 1679, 1676, 1668, 1673, 1680, - 1682, 1681, 1683, 1684, 1679, 1683, 1685, 1686, 1686, 1687, + 1631, 1632, 1632, 1633, 1633, 1634, 1637, 1638, 0, 1635, + 1639, 1634, 1643, 1638, 1643, 1642, 1644, 1645, 1636, 1641, + 1630, 1635, 1635, 1635, 1641, 1641, 1637, 1644, 1635, 1642, + 1639, 1646, 1645, 1647, 1648, 1649, 1651, 1646, 1650, 1650, + 1652, 1652, 1647, 1653, 1654, 1655, 1655, 1656, 1656, 1657, + 1660, 1660, 1661, 1665, 1648, 1662, 1649, 1668, 1664, 1666, + 1667, 1667, 1651, 1653, 1662, 1666, 1654, 1664, 1669, 1657, + 1672, 1671, 1670, 1674, 1665, 1673, 1673, 1661, 1668, 1670, + 1671, 1675, 1677, 1669, 1678, 1679, 1680, 1677, 1681, 1682, + 1678, 1683, 1683, 1680, 1681, 1682, 1672, 1675, 1684, 1674, - 1688, 1689, 1682, 1690, 1691, 1687, 1688, 1693, 1691, 1680, - 1681, 1684, 1694, 1697, 1695, 1696, 1696, 1700, 1690, 1695, - 1698, 1689, 1685, 1711, 1691, 1701, 1708, 1693, 1711, 1701, - 1703, 1702, 1697, 1706, 1694, 1698, 1700, 1702, 1705, 1703, - 1704, 1704, 1705, 1709, 1706, 1707, 1707, 1708, 1710, 1706, - 1712, 1713, 1714, 1715, 1716, 1717, 1717, 1709, 1714, 1716, - 1718, 1718, 1719, 1721, 1722, 1723, 1719, 1710, 1715, 1729, - 1712, 1713, 1721, 1724, 1724, 1722, 1725, 1725, 1726, 0, - 1722, 1727, 1728, 1726, 1726, 1723, 1730, 1727, 1728, 1731, - 1732, 1730, 1734, 1735, 1736, 1729, 1732, 1735, 1737, 1738, + 1685, 1686, 1688, 1684, 1687, 1679, 1690, 1689, 1691, 1685, + 1689, 1692, 1692, 1693, 1688, 1695, 1694, 1696, 1699, 1693, + 1700, 1686, 1694, 1687, 1690, 1697, 1701, 1702, 1702, 1697, + 1703, 1701, 1696, 1704, 1691, 1695, 1706, 1707, 1699, 0, + 1708, 1707, 1700, 1709, 1714, 1697, 1708, 1712, 1704, 1703, + 1710, 1710, 1709, 1711, 1715, 1706, 1716, 1711, 1712, 1713, + 1713, 1717, 1718, 1712, 1719, 1714, 1717, 1720, 1715, 1722, + 1721, 1723, 1723, 1720, 1722, 1716, 1724, 1724, 1727, 1725, + 1728, 1729, 1718, 1725, 1719, 1721, 1736, 1727, 1730, 1730, + 1737, 1728, 1732, 1732, 1733, 1737, 1728, 1734, 1735, 1733, - 1739, 1731, 1740, 1741, 1734, 1738, 1736, 1743, 1740, 1744, - 1747, 1745, 1751, 1747, 0, 1741, 1745, 1748, 1748, 1743, - 1749, 1749, 1739, 1737, 1750, 1750, 1754, 1752, 1744, 1753, - 1755, 1754, 1751, 1752, 1756, 1753, 1755, 1758, 1760, 1761, - 1764, 1760, 1758, 1756, 1762, 1762, 1765, 1768, 1766, 1767, - 1767, 1761, 1764, 1766, 1769, 1770, 1768, 1772, 1765, 1769, - 1770, 1771, 1771, 1773, 1774, 1775, 1776, 1779, 1777, 1778, - 1776, 1780, 1773, 1777, 1781, 1778, 1782, 1772, 1785, 1786, - 1780, 1790, 1774, 1789, 1775, 1779, 1784, 1784, 1786, 0, - 1782, 1788, 1781, 1787, 1787, 1789, 1785, 1792, 1784, 1791, + 1733, 1729, 1738, 1734, 1735, 1739, 1741, 1743, 1744, 1742, + 1745, 1739, 1736, 1742, 1738, 1746, 1745, 1747, 1741, 1743, + 1748, 1751, 1750, 1747, 1752, 1754, 1755, 1755, 1754, 1752, + 1756, 1756, 1748, 1744, 1750, 1757, 1757, 1746, 1758, 1759, + 1751, 1760, 1763, 1761, 1762, 1759, 0, 1760, 1761, 1765, + 1762, 1763, 1767, 1768, 1765, 1767, 1769, 1769, 1758, 1771, + 1772, 1773, 1774, 1774, 1775, 1768, 1773, 1778, 1778, 1776, + 1777, 1771, 1772, 1775, 1776, 1777, 1779, 1780, 1783, 1781, + 1782, 1785, 1783, 1784, 1786, 1787, 1780, 1785, 1784, 1788, + 1789, 1791, 1791, 1792, 1787, 1797, 1779, 1781, 0, 1782, - 1788, 1798, 1790, 1799, 1791, 1795, 1795, 1801, 1797, 1802, - 1792, 1797, 1803, 1804, 1805, 1805, 1811, 1798, 1803, 1799, - 1807, 1807, 1801, 1802, 1806, 1808, 1806, 1810, 1812, 1812, - 1804, 1813, 1814, 1808, 1810, 1815, 1811, 1816, 1817, 1818, - 1813, 1819, 1820, 1822, 1825, 1823, 1826, 1815, 1820, 1816, - 1817, 1824, 1824, 1814, 1828, 1827, 1819, 1823, 1827, 1828, - 1829, 1820, 1825, 1822, 1831, 1818, 1826, 1833, 1832, 1831, - 1832, 1834, 1835, 1837, 1839, 1840, 1834, 1841, 1843, 1835, - 1829, 1842, 1837, 1842, 1840, 1833, 1845, 1846, 1845, 1841, - 1847, 1847, 1839, 1848, 1849, 1851, 1850, 1843, 1850, 1849, + 1793, 1795, 1786, 1791, 1789, 1794, 1794, 1788, 1796, 1793, + 1795, 1792, 1798, 1799, 1802, 1802, 1797, 1798, 1804, 1805, + 1796, 1804, 1806, 1809, 1808, 1810, 1799, 1811, 1812, 1812, + 1813, 1810, 1813, 1814, 1814, 1805, 1817, 1809, 1806, 1808, + 1815, 1818, 1820, 1817, 1811, 1819, 1819, 1821, 1815, 1825, + 1822, 1820, 1823, 1824, 1826, 1830, 1832, 1827, 1829, 1831, + 1831, 1818, 1822, 1827, 1823, 1824, 1833, 1830, 1821, 1826, + 1834, 1836, 1835, 1834, 1832, 1825, 1827, 1835, 1829, 1838, + 1839, 1840, 1839, 1841, 1838, 1842, 1833, 1844, 1841, 1846, + 1850, 1836, 1842, 1847, 1848, 1849, 1844, 1849, 1852, 1840, - 1851, 1846, 1852, 1853, 1854, 1855, 1858, 1852, 1856, 1857, - 1860, 1855, 1861, 1856, 1858, 1862, 1862, 1863, 1863, 1848, - 1864, 1853, 1857, 1865, 1854, 1866, 1861, 1867, 1868, 1860, - 1868, 1866, 1867, 1869, 1870, 1864, 1871, 1871, 1873, 1873, - 1872, 1877, 1870, 1865, 1874, 1874, 1875, 1881, 1876, 1879, - 1870, 1869, 1872, 1876, 1880, 1875, 1880, 1882, 1879, 1877, - 1883, 1879, 1882, 1882, 1884, 1886, 1887, 1888, 1881, 1883, - 1890, 1887, 1888, 1891, 1894, 1892, 1884, 1886, 1893, 1893, - 1895, 1896, 1897, 1890, 1892, 1898, 1902, 1900, 1914, 1901, - 1903, 1911, 1894, 1891, 1905, 1903, 1897, 1896, 1895, 1900, + 1852, 1853, 1847, 1854, 1854, 1855, 1848, 1846, 1856, 1850, + 1857, 1858, 1857, 1856, 1859, 1853, 1858, 1860, 1861, 1859, + 1862, 1864, 1863, 1867, 1865, 1868, 1862, 1863, 1869, 1869, + 1871, 1855, 1865, 1872, 1864, 1860, 1870, 1870, 1861, 1868, + 1873, 1876, 1867, 1874, 1877, 1871, 1873, 1875, 1874, 1875, + 1878, 1878, 1877, 1872, 1879, 1880, 1880, 1881, 1881, 1876, + 1877, 1882, 1883, 1884, 1886, 1888, 1879, 1883, 1891, 1887, + 1882, 1887, 1889, 1886, 1890, 1893, 1886, 1889, 1889, 1894, + 1891, 1884, 1897, 1890, 1894, 1895, 1888, 1893, 1898, 1899, + 1895, 1900, 1900, 1901, 1902, 1897, 1904, 1903, 1899, 1905, - 1898, 1901, 1904, 1905, 1908, 1910, 1902, 1904, 1913, 1912, - 1908, 1910, 1915, 1914, 1911, 1916, 1916, 1919, 1917, 1918, - 1918, 1915, 1922, 1908, 1912, 1920, 1913, 1917, 1921, 1920, - 0, 1928, 1923, 1921, 1924, 1922, 1919, 1923, 1923, 1925, - 1924, 1926, 1927, 1933, 1926, 1925, 1931, 1931, 1932, 1932, - 1927, 1928, 1933, 1934, 1934, 1935, 1935, 1936, 1937, 1938, - 1945, 1939, 1946, 1932, 1945, 1938, 1939, 1940, 1940, 1936, - 1941, 1941, 1942, 1943, 1932, 1949, 1937, 1942, 1950, 1943, - 1947, 1951, 1946, 1950, 1947, 1953, 1952, 1954, 1956, 1957, - 1953, 1955, 1958, 1960, 1957, 1959, 1959, 1960, 1961, 1963, + 1909, 1910, 1911, 1907, 1908, 1918, 1910, 1911, 1898, 1912, + 1904, 1901, 1902, 1903, 1905, 1907, 1908, 1915, 1912, 1917, + 1909, 1920, 1919, 1915, 1921, 1917, 1922, 1926, 1918, 1923, + 1923, 1924, 1925, 1925, 1927, 1922, 1915, 1919, 1927, 1920, + 1924, 1929, 1928, 1935, 0, 1930, 1926, 1928, 1934, 1921, + 1930, 1930, 1931, 1932, 1929, 1944, 1934, 1933, 1931, 1932, + 1933, 1938, 1938, 1935, 1939, 1939, 1940, 1941, 1941, 1942, + 1942, 1943, 1945, 1944, 1950, 1940, 1946, 1949, 1945, 1939, + 1950, 1946, 1949, 1943, 1947, 1947, 1948, 1948, 1952, 1953, + 1939, 1954, 1952, 1956, 1957, 1954, 1958, 1959, 1960, 1957, - 1949, 1952, 1965, 1964, 1951, 1954, 1962, 1955, 1956, 1967, - 1968, 1962, 1966, 1961, 1958, 1964, 1971, 1966, 1969, 1969, - 1972, 1965, 1967, 1973, 1971, 1963, 1974, 1975, 1968, 1976, - 1981, 1977, 1978, 1979, 1982, 1982, 1985, 1983, 1990, 1972, - 1983, 2021, 1973, 1984, 1978, 1981, 1986, 2021, 1976, 1974, - 1985, 1975, 1977, 1990, 1979, 1991, 1984, 1987, 1987, 1986, - 1988, 1988, 1989, 1989, 1992, 1992, 1993, 1995, 1991, 1994, - 1994, 1997, 1995, 1998, 1999, 1993, 1997, 2000, 1993, 2001, - 2001, 2002, 2002, 2003, 2004, 2004, 2005, 2006, 2006, 2000, - 2007, 2008, 2011, 1998, 1999, 2013, 2008, 2009, 2009, 2010, + 1962, 1963, 1961, 1960, 1965, 1964, 1966, 1966, 1968, 1953, + 1964, 1967, 1959, 1970, 1972, 1967, 1962, 1969, 1956, 1958, + 1961, 1963, 1969, 1968, 1971, 1973, 1965, 1974, 1975, 1978, + 1973, 1976, 1976, 1972, 1979, 1980, 1971, 1978, 1981, 1970, + 1974, 1982, 1984, 1983, 1985, 1986, 1975, 1989, 1989, 1988, + 1994, 1994, 1990, 1979, 1980, 1990, 1985, 1991, 1992, 2005, + 1993, 1981, 1983, 1984, 1988, 1982, 1986, 1995, 1995, 1997, + 1991, 2000, 1992, 1993, 1996, 1996, 1998, 1999, 1999, 2005, + 2000, 2001, 2001, 2000, 1997, 2002, 2004, 2006, 2007, 1998, + 2002, 2004, 2008, 2008, 2009, 2009, 2010, 2011, 2011, 2012, - 2010, 2012, 2003, 2014, 2005, 2007, 2011, 2016, 2018, 2013, - 2012, 2020, 2016, 2017, 2017, 2019, 2019, 2022, 2023, 2023, - 2022, 2025, 2014, 2024, 2024, 2027, 2026, 2018, 2030, 2020, - 2028, 2028, 2031, 2033, 2023, 2032, 2041, 2033, 2034, 2034, - 2025, 2026, 2035, 2037, 2027, 2038, 2036, 2042, 2030, 2043, - 2032, 2036, 2040, 2040, 2042, 2031, 2041, 2044, 2037, 2045, - 2038, 2035, 2046, 2043, 2047, 2047, 2049, 2048, 2049, 2050, - 2052, 2055, 2050, 2053, 2054, 2044, 2048, 2045, 2053, 2054, - 2056, 2057, 2052, 2059, 2063, 2058, 2061, 2050, 2046, 2050, - 2058, 2061, 2062, 2056, 2064, 2065, 2055, 2062, 2066, 2063, + 2007, 2013, 2013, 2014, 2015, 2016, 2016, 2006, 2018, 2015, + 2017, 2017, 2019, 2020, 2021, 2010, 2025, 2012, 2014, 2023, + 2027, 2019, 2018, 0, 2023, 2024, 2024, 2020, 2026, 2026, + 2028, 2029, 2032, 2021, 2029, 2025, 2028, 2033, 2027, 2030, + 2030, 2031, 2031, 2034, 2035, 2035, 2037, 2038, 2039, 2040, + 2042, 2032, 2033, 2040, 2043, 2030, 2041, 2041, 2044, 2043, + 2045, 2048, 2034, 2039, 2047, 2047, 2037, 2049, 2050, 2042, + 2038, 2051, 2052, 2044, 2049, 2045, 2053, 2054, 2054, 2055, + 2059, 2048, 2050, 2056, 2063, 2056, 2064, 2062, 2055, 2051, + 2052, 2057, 2059, 2060, 2057, 2061, 2065, 2063, 2060, 2066, - 2064, 2067, 2057, 2068, 2066, 2069, 2067, 2070, 2068, 2059, - 2071, 2076, 2072, 2071, 2073, 2074, 2065, 2075, 2081, 0, - 2070, 2072, 2077, 2073, 2074, 2076, 2075, 2078, 2077, 2089, - 2069, 2079, 2083, 2078, 2085, 2079, 2084, 2084, 2081, 2087, - 2085, 2083, 2086, 2086, 2090, 2089, 2091, 2091, 2092, 2093, - 2095, 2086, 2096, 2098, 2097, 2102, 2104, 2104, 2093, 2087, - 2090, 2087, 2095, 2092, 2100, 2098, 2101, 2100, 2096, 2097, - 2103, 2101, 2105, 2105, 2109, 2102, 2107, 2107, 2108, 2109, - 2110, 2108, 2103, 2111, 2112, 2112, 2110, 2113, 2115, 2111, - 2114, 2114, 2116, 2117, 2118, 2118, 2119, 2120, 2121, 2128, + 2061, 2065, 2053, 2068, 2070, 2069, 2072, 2064, 2068, 2057, + 2069, 2057, 2062, 2074, 2071, 2073, 2076, 2075, 2074, 2070, + 2071, 2073, 2075, 2077, 2079, 2066, 2078, 2072, 2080, 2078, + 2081, 2082, 2083, 2079, 2088, 0, 2077, 2080, 2084, 2081, + 2082, 2076, 2085, 2086, 2084, 2094, 2083, 2086, 2085, 2090, + 2091, 2091, 2096, 2092, 2088, 2093, 2093, 2097, 2090, 2092, + 2098, 2098, 2099, 2100, 2093, 2094, 2102, 2094, 2096, 2103, + 2105, 2104, 2100, 2097, 2109, 2108, 2107, 2099, 2102, 2107, + 2108, 2110, 2105, 2111, 2111, 2103, 2104, 2112, 2112, 2114, + 2114, 2116, 2115, 2110, 2109, 2115, 2116, 2117, 2118, 2119, - 2115, 2113, 2119, 2121, 2123, 0, 2116, 2124, 2123, 2127, - 2124, 2120, 2117, 2125, 2125, 2126, 2131, 2129, 2127, 2128, - 2126, 2129, 2130, 2130, 2134, 2133, 2135, 2136, 2137, 2131, - 2133, 2138, 2137, 2139, 2140, 2142, 2141, 2147, 2139, 2144, - 2140, 2136, 2141, 2145, 2134, 2147, 2135, 2148, 2145, 2148, - 2146, 2138, 2151, 2142, 2154, 2144, 2146, 2152, 2152, 2153, - 2155, 2155, 2153, 2157, 2158, 2159, 2151, 2157, 2160, 2160, - 2158, 2166, 2161, 2164, 2164, 2169, 2168, 2159, 2172, 2173, - 2154, 2161, 2174, 2172, 2176, 2176, 2180, 2174, 2175, 2166, - 2168, 2169, 2180, 2175, 2178, 2178, 2181, 2181, 2182, 2183, + 2119, 2120, 2122, 2117, 2118, 2121, 2121, 2123, 2124, 2125, + 2125, 2126, 2127, 2128, 2122, 2120, 2130, 2126, 2128, 2131, + 2130, 2123, 2131, 2132, 2132, 2133, 2127, 2124, 2134, 2135, + 2133, 2136, 2137, 2137, 2138, 2136, 2140, 2134, 2141, 2142, + 2143, 2140, 2144, 2145, 2149, 2146, 2144, 2138, 2151, 2135, + 2146, 2147, 2159, 2159, 2143, 2148, 2161, 2147, 2141, 2142, + 2152, 2148, 2149, 2145, 2151, 2152, 2153, 2154, 2155, 2158, + 2155, 2160, 2153, 2165, 2160, 2154, 2162, 2162, 2166, 2165, + 2164, 2173, 2161, 2158, 2164, 2167, 2167, 2168, 2171, 2171, + 2166, 2175, 2176, 2179, 2180, 2181, 2168, 2182, 2179, 2173, - 2186, 2184, 2190, 2187, 2191, 2173, 2184, 2188, 2188, 2192, - 2191, 2190, 2197, 2193, 2182, 2187, 2195, 2195, 2198, 2186, - 2196, 2183, 2203, 2196, 2200, 2200, 2204, 2192, 2193, 2201, - 2201, 2197, 2202, 2205, 2207, 2204, 2198, 2202, 2205, 2206, - 2203, 2206, 2208, 2209, 2210, 2211, 2212, 0, 2207, 2210, - 2218, 2212, 2213, 2213, 2217, 2209, 2208, 2214, 2214, 2215, - 2215, 2216, 2216, 2222, 2219, 2211, 2217, 2223, 2218, 2219, - 2220, 2220, 2221, 2221, 2224, 2222, 2225, 2226, 2226, 2223, - 2227, 2228, 2228, 2229, 2229, 2230, 2231, 2234, 2232, 2233, - 2236, 2237, 2225, 2240, 2224, 2232, 2230, 2235, 2231, 2227, + 2181, 2189, 2182, 2183, 2183, 2175, 2185, 2185, 2176, 2187, + 2188, 2188, 2190, 2191, 2193, 2187, 2194, 2189, 2191, 2198, + 2180, 2195, 2195, 2197, 2199, 2198, 2200, 2204, 2194, 2202, + 2202, 2205, 2197, 2193, 2190, 2203, 2207, 2207, 2203, 2208, + 2208, 2200, 2199, 2209, 2210, 2211, 2204, 2212, 2209, 2205, + 2214, 2213, 2212, 2213, 2211, 2215, 2216, 2218, 2217, 0, + 2219, 2225, 2210, 2217, 2214, 2219, 2220, 2220, 2216, 2215, + 2221, 2221, 2222, 2222, 2223, 2223, 2224, 2218, 2226, 2225, + 2227, 2227, 2229, 2226, 2228, 2228, 2230, 2231, 2224, 2232, + 2233, 2233, 2234, 2237, 2229, 2235, 2235, 2238, 2230, 2236, - 2239, 2233, 2235, 2238, 2238, 2241, 2243, 2234, 2242, 2239, - 2236, 2237, 2244, 2245, 2245, 2246, 2247, 2248, 2250, 2240, - 2251, 2242, 2252, 2255, 2246, 2241, 2244, 2254, 2255, 0, - 2243, 2247, 2248, 2256, 2253, 2264, 2250, 2253, 2256, 2257, - 2257, 2254, 2251, 2258, 2258, 2252, 2259, 2259, 2261, 2261, - 2263, 2263, 2265, 2264, 2266, 2268, 2269, 2270, 2271, 2272, - 2273, 2275, 2274, 2265, 2274, 2276, 2277, 2281, 2272, 2278, - 2278, 2280, 2280, 2266, 2269, 2268, 2282, 2287, 2271, 2270, - 2273, 2275, 2285, 2276, 2277, 2282, 2283, 2283, 2288, 2281, - 2289, 2285, 2286, 2286, 2290, 2287, 2291, 2289, 2292, 2293, + 2236, 2239, 2240, 2241, 2237, 2232, 2243, 2231, 2239, 2238, + 2242, 2234, 2244, 2246, 2240, 2242, 2245, 2245, 2247, 2248, + 2249, 2250, 2246, 2241, 2251, 2253, 2243, 2252, 2252, 2257, + 2258, 2254, 2244, 2249, 2253, 2255, 2259, 2260, 2251, 2248, + 2260, 2261, 2272, 2262, 2247, 2250, 2254, 2257, 2262, 2263, + 2255, 2271, 2258, 2272, 2263, 2261, 2264, 2264, 2273, 2259, + 2265, 2265, 2266, 2266, 2268, 2268, 2270, 2270, 2275, 2271, + 2277, 2276, 2279, 2278, 2280, 2282, 2281, 2273, 2281, 2283, + 2284, 2279, 2285, 2285, 2287, 2287, 2288, 2289, 2275, 2276, + 2290, 2290, 2277, 2278, 2280, 2282, 2289, 2283, 2284, 2294, - 2294, 2295, 2295, 2296, 2296, 2297, 2288, 2298, 2299, 2290, - 2300, 2297, 2301, 2302, 2291, 2293, 2292, 2301, 2303, 2294, - 2305, 2304, 2305, 2299, 2310, 2298, 2304, 2306, 2306, 2300, - 2307, 2312, 2307, 2302, 2308, 2308, 2313, 2314, 2303, 2315, - 2312, 2316, 2317, 2310, 2318, 2321, 2316, 2322, 2325, 2314, - 2322, 2323, 2323, 2324, 2327, 2313, 2326, 2326, 2327, 2315, - 2329, 2332, 2317, 2318, 2334, 2321, 2325, 2330, 2324, 2331, - 2331, 2330, 2335, 2336, 2332, 2329, 2337, 2337, 2339, 2334, - 2340, 2341, 2342, 2342, 2343, 2341, 2344, 2344, 2346, 2340, - 2339, 2345, 2335, 2336, 2347, 2348, 2345, 2346, 2349, 2349, + 2292, 2293, 2293, 2295, 2296, 2297, 2298, 2299, 2288, 2292, + 2300, 2296, 2301, 2302, 2302, 2303, 2303, 2294, 2305, 2306, + 2297, 2295, 2304, 2307, 2298, 2299, 2300, 2308, 2304, 2309, + 2310, 2301, 2308, 2311, 2306, 2312, 2305, 2312, 2311, 2313, + 2313, 2314, 2307, 2314, 2315, 2315, 2317, 2319, 2320, 2309, + 2310, 2321, 2322, 2323, 2324, 2328, 2319, 2325, 2323, 2329, + 2330, 2330, 2329, 2321, 2331, 2317, 2332, 2320, 2333, 2333, + 2336, 2341, 2322, 2334, 2324, 2328, 2325, 2334, 2337, 2331, + 2338, 2338, 2337, 2339, 2332, 2336, 2341, 2342, 2343, 2344, + 2344, 2346, 2347, 2348, 2349, 2349, 2339, 2348, 2350, 2351, - 2354, 2354, 2355, 2343, 2356, 2356, 2357, 2348, 2358, 2359, - 2347, 2360, 2361, 2361, 2362, 2364, 2364, 2367, 2359, 2357, - 2360, 2358, 2367, 2368, 2355, 2369, 2370, 2371, 2368, 2362, - 2372, 2370, 2373, 2376, 2374, 2371, 2379, 2382, 2377, 2369, - 2378, 2373, 2374, 2377, 2382, 2378, 2380, 2380, 2376, 2372, - 2383, 2379, 2381, 2381, 2384, 2383, 2385, 2386, 2389, 2387, - 2388, 2388, 2390, 2386, 2387, 2391, 2391, 2390, 2392, 2392, - 2395, 0, 2384, 2389, 2385, 2396, 2396, 2397, 2407, 2398, - 2397, 2399, 2400, 2395, 2398, 2398, 2399, 2400, 2401, 2402, - 2403, 2404, 2405, 2402, 2401, 2403, 2406, 2408, 2411, 2407, + 2351, 2347, 2353, 2346, 2352, 2354, 2355, 2342, 2343, 2352, + 2362, 2353, 2356, 2356, 2361, 2361, 2364, 2350, 2355, 2363, + 2363, 2354, 2365, 2369, 2366, 2367, 2368, 2368, 2379, 2364, + 2371, 2371, 2362, 2366, 2367, 2365, 2374, 2375, 2369, 2376, + 2377, 2374, 2375, 2378, 2381, 2377, 2380, 2379, 2383, 2384, + 2386, 2378, 2381, 2376, 2384, 2380, 2385, 2387, 2387, 2388, + 2388, 2385, 2389, 2383, 2391, 2386, 2390, 2392, 2393, 2389, + 2394, 2390, 2395, 2395, 2393, 2394, 2396, 2402, 2397, 2398, + 2398, 2404, 2391, 2397, 2404, 2392, 2399, 2399, 2403, 2403, + 2402, 2396, 2405, 2414, 2406, 2407, 2408, 2405, 2405, 2406, - 2404, 2410, 2409, 2408, 2406, 2416, 2410, 2405, 2409, 2413, - 2411, 2418, 2414, 2419, 2413, 2414, 2418, 2416, 2419, 2420, - 2421, 2422, 2423, 2424, 2424, 2425, 2428, 2429, 2434, 2430, - 2422, 2423, 2432, 2421, 2425, 2431, 2431, 2420, 2435, 2435, - 2433, 2436, 2438, 2434, 2440, 2428, 2441, 2429, 2430, 2433, - 2441, 2432, 2442, 2442, 2443, 2444, 2445, 2438, 0, 2446, - 2436, 2444, 2445, 2448, 2440, 2446, 2447, 2447, 2449, 2451, - 2452, 2448, 2454, 2449, 2455, 2456, 2454, 2459, 2451, 2443, - 2458, 2458, 2469, 2452, 2460, 2460, 2461, 2461, 2455, 2464, - 2456, 2463, 2463, 2464, 2465, 2459, 2467, 2467, 2470, 2465, + 2407, 2409, 2408, 2410, 2411, 2409, 2412, 2413, 2410, 0, + 2415, 2416, 2418, 2411, 2414, 2413, 2415, 2416, 2417, 2421, + 2420, 2412, 2421, 2417, 2418, 2420, 2423, 2425, 2426, 2427, + 2428, 2429, 2425, 2426, 2435, 2430, 2431, 2431, 2423, 2432, + 2429, 2436, 2440, 2428, 2430, 2437, 2439, 2427, 2432, 2438, + 2438, 2440, 2441, 2435, 2442, 2442, 2443, 2445, 2447, 2448, + 2450, 2436, 0, 2448, 2437, 2439, 2455, 2441, 2449, 2449, + 2451, 2452, 2445, 2453, 2455, 2443, 2451, 2452, 2447, 2453, + 2454, 2454, 2456, 2458, 2459, 2450, 2461, 2456, 2462, 2463, + 2461, 2466, 2458, 2465, 2465, 2467, 2467, 2459, 2468, 2468, - 2471, 2472, 2469, 2470, 2474, 2482, 2472, 2472, 2475, 2475, - 2477, 2477, 2471, 2478, 2478, 2479, 2480, 2484, 2479, 2485, - 2485, 2486, 2486, 2482, 2474, 2487, 2487, 2488, 2490, 2480, - 2489, 2489, 2491, 2492, 2493, 2494, 2494, 2484, 2499, 2495, - 2493, 2490, 2488, 2495, 2500, 2501, 2498, 2492, 2502, 2503, - 2491, 2498, 2498, 2504, 2502, 2503, 2505, 2506, 2506, 2514, - 2505, 2499, 2509, 2511, 2500, 2501, 2512, 2509, 2516, 2512, - 2515, 2511, 2517, 2515, 2518, 2519, 2520, 2517, 2504, 2521, - 2521, 2525, 2522, 2524, 2514, 2516, 2516, 2528, 2523, 2534, - 2520, 2523, 2518, 2526, 2537, 2519, 2522, 2524, 2527, 2523, + 2470, 2470, 2462, 2471, 2463, 2472, 2476, 2471, 2477, 2466, + 2472, 2474, 2474, 2477, 2479, 2478, 2481, 2482, 2482, 2479, + 2479, 2484, 2484, 2485, 2485, 2486, 2476, 2478, 2486, 2487, + 2489, 2491, 2492, 2492, 2493, 2493, 2481, 2494, 2494, 2495, + 2496, 2496, 2487, 2497, 2498, 2499, 2500, 2506, 2489, 2501, + 2501, 2491, 2500, 2502, 2495, 2505, 2497, 2502, 2507, 2499, + 2505, 2505, 2498, 2508, 2511, 2509, 2510, 2513, 2513, 2512, + 2506, 2509, 2510, 2512, 2516, 2521, 2518, 2519, 2507, 2516, + 2519, 2523, 2522, 2508, 2518, 2522, 2524, 2525, 2526, 2511, + 2527, 2524, 2528, 2528, 2532, 2529, 2531, 2542, 2523, 2523, - 2525, 2526, 0, 2527, 2527, 2534, 2528, 2529, 2529, 2530, - 2530, 2531, 2531, 2532, 2532, 2533, 2533, 2535, 2536, 2538, - 2537, 2539, 2535, 2540, 2542, 2542, 2543, 2544, 2538, 2543, - 2546, 2546, 2547, 2548, 2548, 2549, 2551, 2551, 2536, 2547, - 2549, 2539, 2552, 2540, 2553, 2544, 2554, 2556, 2557, 2557, - 2558, 2552, 2559, 2553, 2558, 2554, 2560, 2561, 2563, 2562, - 2564, 2559, 2561, 2561, 2564, 2556, 2572, 2563, 2568, 2569, - 2569, 2560, 2562, 2568, 2571, 2571, 2573, 2574, 2576, 2577, - 2572, 2580, 2582, 2581, 2583, 2585, 2587, 2576, 2589, 2590, - 2583, 2577, 2581, 2589, 2590, 2574, 2592, 2585, 2591, 2591, + 2521, 2535, 2542, 2530, 2527, 2525, 2530, 2533, 2526, 2529, + 2531, 2534, 2543, 2532, 2530, 2533, 2534, 2534, 2536, 2536, + 2535, 2537, 2537, 2538, 2538, 2539, 2539, 2540, 2540, 2541, + 2544, 2545, 2543, 2546, 2547, 2549, 2549, 2551, 2550, 2554, + 2545, 2550, 2553, 2553, 2556, 2541, 2554, 2555, 2555, 2556, + 2558, 2558, 2559, 2546, 2547, 2551, 2544, 2560, 2561, 2563, + 2565, 2559, 2564, 2564, 2565, 2566, 2560, 2561, 2567, 2569, + 2568, 2570, 2580, 2575, 2566, 2568, 2568, 2563, 2575, 2579, + 2570, 2571, 2569, 2567, 2581, 2571, 2576, 2576, 2578, 2578, + 2583, 2584, 2587, 2579, 2589, 2588, 2592, 2580, 2594, 2583, - 2601, 2573, 2582, 2594, 2602, 2592, 2580, 2587, 2594, 2595, - 2595, 2597, 2597, 2595, 2598, 2598, 2599, 2599, 2600, 2603, - 2601, 2606, 2605, 2602, 2603, 2607, 2606, 2600, 2605, 2609, - 2607, 2608, 2608, 2610, 2611, 2612, 2613, 2614, 2618, 2611, - 2615, 2615, 2613, 2618, 2617, 2619, 2621, 2609, 2617, 2622, - 2619, 2620, 2620, 2612, 2610, 2623, 2625, 2625, 2627, 2628, - 2630, 2631, 2614, 2629, 2622, 2621, 2632, 2629, 2633, 2630, - 2635, 2627, 2628, 2634, 2637, 2623, 2633, 2631, 2634, 2636, - 2636, 2639, 2639, 2640, 2640, 2632, 2642, 2644, 2644, 2646, - 2647, 2652, 2648, 2637, 2649, 2653, 2635, 2651, 2651, 2649, + 2590, 2608, 2581, 2584, 2588, 2596, 2590, 2597, 2592, 2599, + 2596, 2907, 2597, 2907, 2589, 2598, 2598, 2587, 2599, 2594, + 2601, 2608, 2602, 2602, 2607, 2601, 2602, 2604, 2604, 2605, + 2605, 2606, 2606, 2607, 2609, 2610, 2612, 2616, 2613, 2614, + 2610, 2617, 2612, 2613, 2614, 2615, 2615, 2618, 2619, 2621, + 2620, 2628, 2618, 2609, 0, 2616, 2620, 2622, 2622, 2624, + 2625, 2629, 2617, 2624, 2626, 2625, 2619, 2627, 2627, 2626, + 2628, 2630, 2632, 2632, 2621, 2634, 2629, 2635, 2636, 2638, + 2637, 2639, 2636, 2642, 2640, 2643, 2643, 2644, 2634, 2637, + 2635, 2630, 2640, 2641, 2649, 2638, 2646, 2646, 2641, 2659, - 2654, 2656, 2656, 2657, 2658, 2646, 2647, 2642, 2648, 2659, - 2659, 2652, 2662, 2665, 2663, 2674, 2664, 2657, 2653, 2654, - 2663, 2664, 2668, 2658, 2666, 2666, 2667, 2667, 2669, 2669, - 2670, 2671, 2662, 2672, 2674, 2665, 2676, 2673, 2675, 0, - 2671, 2670, 2668, 2673, 2677, 2677, 2678, 2683, 2669, 2678, - 2675, 2679, 2679, 2672, 2684, 2685, 2676, 2686, 2686, 2683, - 2687, 2685, 2688, 2687, 2689, 2691, 2692, 2693, 2688, 2694, - 2691, 2692, 2695, 2698, 2684, 2694, 2696, 2696, 2699, 2700, - 2701, 2703, 2689, 2702, 2702, 2698, 2693, 2709, 2704, 2695, - 2695, 2706, 2706, 2701, 2707, 2707, 2699, 2704, 2708, 2719, + 2639, 2647, 2647, 2651, 2651, 2653, 2644, 2654, 2655, 2642, + 2660, 2656, 2658, 2658, 2664, 2649, 2656, 2661, 2665, 2659, + 2669, 2653, 2671, 2654, 2655, 2663, 2663, 2671, 2664, 2666, + 2666, 2672, 2670, 2660, 2673, 2673, 2661, 2665, 2670, 2675, + 2669, 2674, 2674, 2676, 2676, 2677, 2678, 2679, 2680, 2681, + 2682, 2683, 0, 2672, 2680, 2678, 2677, 2684, 2684, 2675, + 2690, 2685, 2682, 2676, 2685, 2686, 2686, 2679, 2681, 2691, + 2692, 2683, 2690, 2693, 2693, 2694, 2692, 2695, 2694, 2696, + 2698, 2699, 2700, 2695, 2701, 2698, 2699, 2702, 2705, 2691, + 2701, 2703, 2703, 2706, 2707, 2708, 2710, 2696, 2709, 2709, - 2703, 2709, 2710, 2708, 2700, 2711, 2711, 2710, 2712, 2712, - 2713, 2713, 2714, 2716, 2716, 2721, 2722, 2714, 2719, 2723, - 2724, 2724, 2726, 2726, 2728, 2727, 2729, 2730, 2730, 2731, - 2731, 2734, 2777, 2735, 2733, 2729, 2777, 2721, 2722, 2727, - 2733, 2723, 2736, 2743, 2728, 2739, 2739, 2736, 2741, 2741, - 2742, 2734, 2735, 2744, 2745, 2742, 2746, 2743, 2748, 2744, - 2747, 2747, 2750, 2748, 2746, 2751, 2745, 2752, 2753, 2754, - 2756, 2757, 2752, 2758, 2759, 2754, 2761, 2760, 2756, 2762, - 2753, 2763, 2750, 2764, 2766, 2751, 2767, 2771, 2764, 2766, - 2757, 2844, 2761, 2758, 2759, 2760, 2762, 2762, 2768, 2772, + 2705, 2700, 2716, 2711, 2702, 2702, 2713, 2713, 2708, 2714, + 2714, 2706, 2711, 2715, 2726, 2710, 2716, 2717, 2715, 2707, + 2718, 2718, 2717, 2719, 2719, 2720, 2720, 2721, 2723, 2723, + 2728, 2729, 2721, 2726, 2730, 2731, 2731, 2733, 2733, 2735, + 2734, 2736, 2737, 2737, 2738, 2738, 2741, 2784, 2742, 2740, + 2736, 2784, 2728, 2729, 2734, 2740, 2730, 2743, 2750, 2735, + 2746, 2746, 2743, 2748, 2748, 2749, 2741, 2742, 2751, 2752, + 2749, 2753, 2750, 2755, 2751, 2754, 2754, 2757, 2755, 2753, + 2758, 2752, 2759, 2760, 2761, 2763, 2764, 2759, 2765, 2766, + 2761, 2768, 2767, 2763, 2769, 2760, 2770, 2757, 2771, 2773, - 2769, 0, 2763, 2844, 2768, 2769, 2767, 2771, 2775, 2775, - 2776, 2776, 2772, 2781, 2781, 2783, 2783, 2784, 2784, 2787, - 2784, 2785, 2785, 2787, 2785, 2786, 2786, 2790, 2786, 2789, - 2789, 2794, 2791, 2795, 2796, 2797, 2797, 2800, 2802, 2796, - 2801, 2803, 2802, 2804, 0, 2790, 2791, 2801, 2806, 2811, - 2803, 2794, 2807, 2795, 2808, 2808, 2809, 2809, 2804, 2810, - 2810, 2807, 2800, 2812, 2811, 2813, 2806, 2814, 2812, 2815, - 2816, 2817, 2814, 2814, 2813, 2815, 2818, 2813, 2819, 2820, - 2821, 2822, 2822, 2819, 2820, 2823, 2817, 2824, 2825, 2825, - 2851, 2823, 2893, 2824, 0, 2816, 2893, 2818, 2827, 2821, + 2758, 2774, 2778, 2771, 2773, 2764, 2851, 2768, 2765, 2766, + 2767, 2769, 2769, 2775, 2779, 2776, 0, 2770, 2851, 2775, + 2776, 2774, 2778, 2782, 2782, 2783, 2783, 2779, 2788, 2788, + 2790, 2790, 2791, 2791, 2794, 2791, 2792, 2792, 2794, 2792, + 2793, 2793, 2797, 2793, 2796, 2796, 2801, 2798, 2802, 2803, + 2804, 2804, 2807, 2809, 2803, 2808, 2810, 2809, 2811, 0, + 2797, 2798, 2808, 2813, 2818, 2810, 2801, 2814, 2802, 2815, + 2815, 2816, 2816, 2811, 2817, 2817, 2814, 2807, 2819, 2818, + 2820, 2813, 2821, 2819, 2822, 2823, 2824, 2821, 2821, 2820, + 2822, 2825, 2820, 2826, 2827, 2828, 2829, 2829, 2826, 2827, - 2826, 2826, 2851, 2827, 2830, 2830, 2833, 2833, 2834, 2834, - 2835, 2835, 2836, 2836, 2837, 2837, 2838, 2838, 2839, 2839, - 2841, 2842, 2842, 2843, 2845, 2849, 2847, 2848, 2848, 2841, - 2850, 2853, 2843, 2852, 2852, 2854, 2854, 2857, 2858, 2859, - 2849, 2858, 2861, 2850, 2845, 2847, 2853, 2860, 2860, 2863, - 2864, 2867, 2863, 2865, 2866, 2857, 2864, 2868, 2869, 2866, - 2861, 2875, 2871, 2872, 2886, 2859, 2884, 2865, 2871, 2884, - 2867, 2891, 2872, 2895, 2869, 2868, 2875, 2886, 2887, 2887, - 2888, 2888, 2889, 2889, 2892, 2894, 2897, 2895, 2898, 2900, - 2899, 2900, 2901, 2892, 2891, 2899, 2902, 2902, 2903, 2898, + 2830, 2824, 2831, 2832, 2832, 2858, 2830, 2900, 2831, 0, + 2823, 2900, 2825, 2834, 2828, 2833, 2833, 2858, 2834, 2837, + 2837, 2840, 2840, 2841, 2841, 2842, 2842, 2843, 2843, 2844, + 2844, 2845, 2845, 2846, 2846, 2848, 2849, 2849, 2850, 2852, + 2856, 2854, 2855, 2855, 2848, 2857, 2860, 2850, 2859, 2859, + 2861, 2861, 2864, 2865, 2866, 2856, 2865, 2868, 2857, 2852, + 2854, 2860, 2867, 2867, 2870, 2871, 2874, 2870, 2872, 2873, + 2864, 2871, 2875, 2876, 2873, 2868, 2882, 2878, 2879, 2893, + 2866, 2891, 2872, 2878, 2891, 2874, 2898, 2879, 2902, 2876, + 2875, 2882, 2893, 2894, 2894, 2895, 2895, 2896, 2896, 2899, - 2904, 2906, 2905, 2907, 2909, 2894, 2908, 2901, 2911, 2897, - 2910, 2903, 2912, 2909, 2918, 0, 2917, 2906, 2913, 2904, - 2905, 2908, 2910, 2913, 2919, 2919, 2920, 2925, 2907, 2911, - 2917, 2926, 2912, 2930, 2918, 2920, 2921, 2921, 2922, 2922, - 2923, 2923, 2924, 2924, 2927, 2928, 2925, 2927, 2929, 2931, - 2928, 2926, 2933, 2929, 2932, 2934, 2935, 2936, 2930, 2938, - 2932, 2935, 2937, 2937, 2931, 2939, 2933, 2934, 2940, 2940, - 2942, 2944, 2947, 2947, 2938, 2948, 2948, 2936, 2949, 2950, - 2953, 2951, 2952, 2954, 2939, 2942, 2949, 2951, 2952, 2944, - 2955, 2960, 2956, 2961, 2953, 2966, 2954, 2956, 2950, 2957, + 2901, 2904, 2902, 2905, 2908, 2906, 2909, 2909, 2899, 2898, + 2906, 2911, 2910, 2912, 2905, 2914, 2913, 2916, 2915, 2908, + 2901, 2918, 2917, 2919, 2904, 2910, 2916, 2925, 2926, 2926, + 2911, 2912, 2913, 2915, 2917, 2924, 2920, 2927, 2928, 2928, + 2914, 2920, 2918, 2919, 2929, 2929, 2927, 2925, 2932, 2924, + 2930, 2930, 2931, 2931, 2933, 2934, 2935, 2936, 2934, 2937, + 2938, 2935, 2936, 2939, 2940, 2941, 2942, 2932, 2943, 2939, + 2945, 2942, 2944, 2944, 2933, 2938, 2946, 2941, 2940, 2947, + 2947, 2949, 2951, 2956, 2937, 2945, 2954, 2954, 2943, 2955, + 2955, 2956, 2957, 2958, 2960, 2946, 2949, 2959, 2962, 2958, - 2957, 2958, 2958, 2963, 2964, 2967, 2968, 2969, 2964, 2955, - 2967, 2970, 2960, 2961, 2971, 2966, 2972, 2963, 2973, 2977, - 2969, 2972, 2978, 2973, 2970, 2968, 2974, 2974, 2979, 2980, - 2980, 2981, 2982, 2971, 2983, 2983, 2981, 2984, 2982, 2977, - 2978, 2985, 2984, 2986, 2987, 2988, 2985, 2979, 2986, 2990, - 2990, 2988, 2991, 2992, 2992, 2994, 2995, 2991, 2996, 2994, - 2997, 2998, 2999, 2987, 3000, 2996, 3003, 3003, 2999, 3001, - 3005, 3005, 3006, 3007, 3008, 2995, 3009, 3010, 3007, 2997, - 2998, 3006, 3001, 3000, 3006, 3011, 3011, 3012, 3013, 3015, - 3010, 3017, 3012, 3008, 3022, 3009, 3016, 3016, 3018, 3018, + 2951, 2961, 2963, 2959, 2964, 2964, 2967, 2963, 2960, 2965, + 2965, 2957, 2968, 2973, 2961, 2970, 2971, 2962, 2974, 2975, + 2971, 2976, 2977, 2974, 2978, 2979, 2980, 2967, 2984, 2970, + 2979, 2980, 2968, 2973, 2976, 2977, 2981, 2981, 2975, 2985, + 2986, 2987, 2987, 2978, 2988, 2989, 2990, 2990, 2984, 2988, + 2991, 2989, 2994, 2992, 2995, 2991, 2993, 2985, 2992, 2986, + 2995, 2993, 2997, 2997, 2998, 2999, 2999, 3002, 3001, 2998, + 3003, 2994, 3001, 3004, 3005, 3006, 3007, 3003, 3008, 3010, + 3010, 3006, 3012, 3012, 3014, 3013, 3002, 3015, 3016, 3014, + 3017, 3008, 3004, 3005, 3013, 3007, 3019, 3013, 3018, 3018, - 3020, 3013, 3019, 3019, 3021, 3020, 3023, 3023, 3029, 3024, - 3017, 3021, 3031, 3022, 3024, 3015, 3025, 3027, 3025, 3026, - 3026, 3028, 3033, 3033, 3027, 3030, 3034, 3029, 3028, 3036, - 3030, 3031, 3037, 3038, 3036, 3039, 3043, 3037, 3040, 3040, - 3042, 3042, 3044, 3045, 3045, 3034, 3046, 3046, 0, 3047, - 3049, 3049, 3038, 3051, 3039, 3043, 3047, 3050, 3050, 3053, - 3051, 3044, 3056, 3057, 3053, 3058, 0, 3056, 3059, 3059, - 3060, 3060, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3057, 0, 3058, 3064, 3064, 3064, 3064, 3064, - 3064, 3064, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3066, + 3020, 3019, 3022, 3017, 3023, 3023, 3015, 3016, 3024, 3025, + 3025, 3026, 3026, 3020, 3027, 3028, 3029, 3030, 3030, 3027, + 3031, 3032, 3028, 3032, 3034, 3031, 3035, 3024, 3022, 3033, + 3033, 3034, 3036, 3035, 3037, 3029, 3038, 3040, 3040, 3037, + 3041, 3043, 3044, 3045, 3046, 3050, 3043, 3044, 3047, 3047, + 3051, 3036, 3049, 3049, 0, 3038, 3052, 3052, 3054, 3041, + 3053, 3053, 3045, 3046, 3050, 3054, 3056, 3056, 3058, 3051, + 3057, 3057, 3060, 3063, 3064, 3058, 3065, 3060, 3063, 3066, + 3066, 3067, 3067, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3064, 0, 3065, 3071, 3071, 3071, 3071, - 3066, 3066, 3066, 3066, 3066, 3066, 3067, 3067, 3067, 3067, - 3067, 3067, 3067, 3068, 3068, 3068, 3068, 3068, 3068, 3068, - 3070, 3070, 0, 3070, 3070, 3070, 3070, 3071, 3071, 0, - 0, 0, 3071, 3071, 3072, 3072, 0, 0, 3072, 0, - 3072, 3073, 0, 0, 0, 0, 0, 3073, 3074, 3074, - 0, 0, 0, 3074, 3074, 3075, 0, 0, 0, 0, - 0, 3075, 3076, 3076, 0, 3076, 3076, 3076, 3076, 3077, - 3077, 0, 3077, 3077, 3077, 3077, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, + 3071, 3071, 3071, 3072, 3072, 3072, 3072, 3072, 3072, 3072, + 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3074, 3074, 3074, + 3074, 3074, 3074, 3074, 3075, 3075, 3075, 3075, 3075, 3075, + 3075, 3077, 3077, 0, 3077, 3077, 3077, 3077, 3078, 3078, + 0, 0, 0, 3078, 3078, 3079, 3079, 0, 0, 3079, + 0, 3079, 3080, 0, 0, 0, 0, 0, 3080, 3081, + 3081, 0, 0, 0, 3081, 3081, 3082, 0, 0, 0, + 0, 0, 3082, 3083, 3083, 0, 3083, 3083, 3083, 3083, + 3084, 3084, 0, 3084, 3084, 3084, 3084, 3070, 3070, 3070, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, 3063, - 3063, 3063, 3063, 3063, 3063, 3063, 3063 + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070 } ; static yy_state_type yy_last_accepting_state; @@ -2956,7 +2960,7 @@ static void config_end_include(void) } #endif -#line 2957 "" +#line 2961 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2965,9 +2969,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2966 "" +#line 2970 "" -#line 2968 "" +#line 2972 "" #define INITIAL 0 #define quotedstring 1 @@ -3189,7 +3193,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3190 "" +#line 3194 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3222,13 +3226,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3064 ) + if ( yy_current_state >= 3071 ) 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] != 5977 ); + while ( yy_base[yy_current_state] != 5988 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3473,17 +3477,17 @@ YY_RULE_SETUP case 44: YY_RULE_SETUP #line 251 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_TLS_USE_SNI) } YY_BREAK case 45: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 46: YY_RULE_SETUP #line 253 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 47: YY_RULE_SETUP @@ -3493,287 +3497,287 @@ YY_RULE_SETUP case 48: YY_RULE_SETUP #line 255 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 49: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 50: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 51: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 52: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 53: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 54: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 55: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_DSCP) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 56: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_DSCP) } YY_BREAK case 57: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 58: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 59: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 60: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 61: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 62: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 63: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 64: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 65: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 66: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 67: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 68: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 69: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 70: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 71: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 72: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 73: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 74: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 75: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 76: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 77: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 78: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 79: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 80: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 81: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 82: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 83: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 84: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 85: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 86: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 87: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 88: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 89: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 90: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 91: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 92: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 93: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 94: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 95: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 96: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 97: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 98: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 99: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 100: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 101: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 102: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 103: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 104: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 105: YY_RULE_SETUP @@ -3783,32 +3787,32 @@ YY_RULE_SETUP case 106: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 107: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 108: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 109: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 110: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 111: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 112: YY_RULE_SETUP @@ -3818,731 +3822,731 @@ YY_RULE_SETUP case 113: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 114: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 115: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 116: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 117: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 118: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 119: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 120: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 121: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 122: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 123: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 124: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 125: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 126: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 127: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 128: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 129: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 130: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 131: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 132: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 133: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 134: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 135: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 136: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 137: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 138: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 139: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 140: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 141: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 142: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 143: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 144: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 145: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 146: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 147: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 148: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 149: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 150: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 153: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 154: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 155: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 156: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 157: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 158: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 159: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 160: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 161: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 162: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 163: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 164: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 165: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 166: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 167: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 168: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 169: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 170: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 171: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 172: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 173: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 174: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 175: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 176: YY_RULE_SETUP -#line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 383 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 177: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 231: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 232: YY_RULE_SETUP -#line 441 "./util/configlexer.lex" +#line 440 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 233: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 442 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 234: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 235: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 236: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 237: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 238: YY_RULE_SETUP -#line 449 "./util/configlexer.lex" +#line 448 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 239: YY_RULE_SETUP -#line 451 "./util/configlexer.lex" +#line 450 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 240: YY_RULE_SETUP -#line 453 "./util/configlexer.lex" +#line 452 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 455 "./util/configlexer.lex" +#line 454 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 457 "./util/configlexer.lex" +#line 456 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP -#line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 458 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 244: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 245: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 246: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 256: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 257: YY_RULE_SETUP @@ -4557,200 +4561,205 @@ YY_RULE_SETUP case 259: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 260: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 270: YY_RULE_SETUP -#line 487 "./util/configlexer.lex" +#line 486 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 271: YY_RULE_SETUP -#line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 488 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 272: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 273: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 290: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 291: -/* rule 291 can match eol */ YY_RULE_SETUP #line 509 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 292: +/* rule 292 can match eol */ +YY_RULE_SETUP +#line 510 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 292: +case 293: YY_RULE_SETUP -#line 512 "./util/configlexer.lex" +#line 513 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 513 "./util/configlexer.lex" +#line 514 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 293: -YY_RULE_SETUP -#line 518 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 294: -/* rule 294 can match eol */ YY_RULE_SETUP #line 519 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 295: +/* rule 295 can match eol */ +YY_RULE_SETUP +#line 520 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 295: +case 296: YY_RULE_SETUP -#line 521 "./util/configlexer.lex" +#line 522 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4763,34 +4772,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 296: +case 297: YY_RULE_SETUP -#line 533 "./util/configlexer.lex" +#line 534 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 534 "./util/configlexer.lex" +#line 535 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 297: -YY_RULE_SETUP -#line 539 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 298: -/* rule 298 can match eol */ YY_RULE_SETUP #line 540 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 299: +/* rule 299 can match eol */ +YY_RULE_SETUP +#line 541 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 299: +case 300: YY_RULE_SETUP -#line 542 "./util/configlexer.lex" +#line 543 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4803,38 +4812,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 300: +case 301: YY_RULE_SETUP -#line 554 "./util/configlexer.lex" +#line 555 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 556 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 301: -YY_RULE_SETUP -#line 560 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 302: -/* rule 302 can match eol */ YY_RULE_SETUP #line 561 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 303: +/* rule 303 can match eol */ YY_RULE_SETUP #line 562 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 304: YY_RULE_SETUP #line 563 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 305: +YY_RULE_SETUP +#line 564 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4842,27 +4851,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 568 "./util/configlexer.lex" +#line 569 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 305: -YY_RULE_SETUP -#line 572 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 306: -/* rule 306 can match eol */ YY_RULE_SETUP #line 573 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 307: +/* rule 307 can match eol */ +YY_RULE_SETUP +#line 574 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 307: +case 308: YY_RULE_SETUP -#line 575 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4872,7 +4881,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 581 "./util/configlexer.lex" +#line 582 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4884,33 +4893,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 308: +case 309: YY_RULE_SETUP -#line 592 "./util/configlexer.lex" +#line 593 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 309: +case 310: YY_RULE_SETUP -#line 596 "./util/configlexer.lex" +#line 597 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 310: +case 311: YY_RULE_SETUP -#line 600 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 311: +case 312: YY_RULE_SETUP -#line 604 "./util/configlexer.lex" +#line 605 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4911 "" +#line 4920 "" case YY_END_OF_BUFFER: { @@ -5205,7 +5214,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3064 ) + if ( yy_current_state >= 3071 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5233,11 +5242,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3064 ) + if ( yy_current_state >= 3071 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3063); + yy_is_jam = (yy_current_state == 3070); return yy_is_jam ? 0 : yy_current_state; } @@ -5876,6 +5885,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 604 "./util/configlexer.lex" +#line 605 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index f4e275e89..d60eb147a 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -248,6 +248,7 @@ tls-additional-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) } tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) } +tls-use-sni{COLON} { YDVAR(1, VAR_TLS_USE_SNI) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } diff --git a/util/configparser.c b/util/configparser.c index f02209a19..66f34071a 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -408,16 +408,17 @@ extern int yydebug; VAR_STREAM_WAIT_SIZE = 529, VAR_TLS_CIPHERS = 530, VAR_TLS_CIPHERSUITES = 531, - VAR_IPSET = 532, - VAR_IPSET_NAME_V4 = 533, - VAR_IPSET_NAME_V6 = 534, - VAR_TLS_SESSION_TICKET_KEYS = 535, - VAR_RPZ = 536, - VAR_TAGS = 537, - VAR_RPZ_ACTION_OVERRIDE = 538, - VAR_RPZ_CNAME_OVERRIDE = 539, - VAR_RPZ_LOG = 540, - VAR_RPZ_LOG_NAME = 541 + VAR_TLS_USE_SNI = 532, + VAR_IPSET = 533, + VAR_IPSET_NAME_V4 = 534, + VAR_IPSET_NAME_V6 = 535, + VAR_TLS_SESSION_TICKET_KEYS = 536, + VAR_RPZ = 537, + VAR_TAGS = 538, + VAR_RPZ_ACTION_OVERRIDE = 539, + VAR_RPZ_CNAME_OVERRIDE = 540, + VAR_RPZ_LOG = 541, + VAR_RPZ_LOG_NAME = 542 }; #endif /* Tokens. */ @@ -695,16 +696,17 @@ extern int yydebug; #define VAR_STREAM_WAIT_SIZE 529 #define VAR_TLS_CIPHERS 530 #define VAR_TLS_CIPHERSUITES 531 -#define VAR_IPSET 532 -#define VAR_IPSET_NAME_V4 533 -#define VAR_IPSET_NAME_V6 534 -#define VAR_TLS_SESSION_TICKET_KEYS 535 -#define VAR_RPZ 536 -#define VAR_TAGS 537 -#define VAR_RPZ_ACTION_OVERRIDE 538 -#define VAR_RPZ_CNAME_OVERRIDE 539 -#define VAR_RPZ_LOG 540 -#define VAR_RPZ_LOG_NAME 541 +#define VAR_TLS_USE_SNI 532 +#define VAR_IPSET 533 +#define VAR_IPSET_NAME_V4 534 +#define VAR_IPSET_NAME_V6 535 +#define VAR_TLS_SESSION_TICKET_KEYS 536 +#define VAR_RPZ 537 +#define VAR_TAGS 538 +#define VAR_RPZ_ACTION_OVERRIDE 539 +#define VAR_RPZ_CNAME_OVERRIDE 540 +#define VAR_RPZ_LOG 541 +#define VAR_RPZ_LOG_NAME 542 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -714,7 +716,7 @@ union YYSTYPE char* str; -#line 718 "util/configparser.c" +#line 720 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -964,19 +966,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 608 +#define YYLAST 609 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 287 +#define YYNTOKENS 288 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 310 +#define YYNNTS 311 /* YYNRULES -- Number of rules. */ -#define YYNRULES 598 +#define YYNRULES 600 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 890 +#define YYNSTATES 893 #define YYUNDEFTOK 2 -#define YYMAXUTOK 541 +#define YYMAXUTOK 542 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1041,7 +1043,7 @@ static const yytype_uint16 yytranslate[] = 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 + 285, 286, 287 }; #if YYDEBUG @@ -1069,45 +1071,46 @@ static const yytype_uint16 yyrline[] = 267, 267, 267, 268, 268, 268, 269, 269, 270, 271, 271, 272, 272, 273, 273, 274, 274, 275, 275, 275, 276, 276, 276, 277, 277, 277, 278, 278, 279, 279, - 280, 280, 282, 294, 295, 296, 296, 296, 296, 296, - 297, 297, 299, 311, 312, 313, 313, 313, 313, 314, - 314, 316, 330, 331, 332, 332, 332, 332, 333, 333, - 333, 335, 352, 353, 354, 354, 354, 354, 355, 355, - 355, 356, 359, 378, 395, 403, 413, 421, 438, 439, - 440, 440, 440, 440, 440, 441, 441, 441, 442, 442, - 444, 453, 462, 473, 482, 491, 500, 511, 520, 532, - 546, 561, 572, 589, 606, 623, 640, 655, 670, 683, - 698, 707, 716, 725, 734, 743, 752, 761, 770, 779, - 788, 797, 806, 815, 824, 837, 846, 859, 868, 877, - 886, 893, 900, 909, 916, 925, 933, 940, 947, 955, - 964, 973, 987, 996, 1005, 1014, 1023, 1032, 1041, 1048, - 1055, 1081, 1089, 1096, 1103, 1110, 1117, 1125, 1133, 1141, - 1148, 1159, 1170, 1177, 1186, 1195, 1204, 1211, 1218, 1226, - 1234, 1244, 1254, 1264, 1278, 1286, 1299, 1310, 1318, 1331, - 1340, 1349, 1358, 1368, 1378, 1386, 1399, 1408, 1416, 1425, - 1433, 1446, 1455, 1462, 1472, 1482, 1492, 1502, 1512, 1522, - 1532, 1542, 1549, 1556, 1563, 1572, 1581, 1590, 1599, 1606, - 1616, 1636, 1643, 1661, 1674, 1687, 1696, 1705, 1714, 1723, - 1733, 1743, 1754, 1763, 1772, 1781, 1790, 1799, 1808, 1821, - 1834, 1843, 1850, 1859, 1868, 1877, 1886, 1894, 1907, 1915, - 1956, 1963, 1978, 1988, 1998, 2005, 2012, 2019, 2028, 2036, - 2050, 2071, 2092, 2104, 2116, 2128, 2137, 2158, 2168, 2177, - 2185, 2193, 2206, 2219, 2234, 2249, 2258, 2267, 2273, 2282, - 2291, 2301, 2311, 2324, 2337, 2349, 2363, 2375, 2389, 2399, - 2406, 2413, 2422, 2431, 2441, 2451, 2461, 2468, 2475, 2484, - 2493, 2503, 2513, 2520, 2527, 2534, 2542, 2552, 2562, 2572, - 2582, 2621, 2631, 2639, 2647, 2662, 2671, 2676, 2677, 2678, - 2678, 2678, 2679, 2679, 2679, 2680, 2680, 2682, 2692, 2701, - 2708, 2715, 2722, 2729, 2736, 2743, 2748, 2749, 2750, 2750, - 2751, 2751, 2751, 2752, 2753, 2753, 2754, 2754, 2755, 2755, - 2756, 2757, 2758, 2759, 2760, 2761, 2763, 2772, 2779, 2786, - 2795, 2802, 2809, 2816, 2823, 2832, 2841, 2848, 2855, 2865, - 2875, 2885, 2895, 2905, 2915, 2920, 2921, 2922, 2924, 2930, - 2940, 2947, 2956, 2964, 2969, 2970, 2972, 2972, 2972, 2973, - 2973, 2974, 2975, 2976, 2977, 2978, 2980, 2990, 2999, 3006, - 3015, 3022, 3031, 3039, 3052, 3060, 3073, 3078, 3079, 3080, - 3080, 3081, 3081, 3081, 3082, 3084, 3096, 3108, 3120, 3135, - 3148, 3161, 3172, 3177, 3178, 3179, 3179, 3181, 3196 + 280, 280, 281, 283, 295, 296, 297, 297, 297, 297, + 297, 298, 298, 300, 312, 313, 314, 314, 314, 314, + 315, 315, 317, 331, 332, 333, 333, 333, 333, 334, + 334, 334, 336, 353, 354, 355, 355, 355, 355, 356, + 356, 356, 357, 360, 379, 396, 404, 414, 422, 439, + 440, 441, 441, 441, 441, 441, 442, 442, 442, 443, + 443, 445, 454, 463, 474, 483, 492, 501, 512, 521, + 533, 547, 562, 573, 590, 607, 624, 641, 656, 671, + 684, 699, 708, 717, 726, 735, 744, 753, 762, 771, + 780, 789, 798, 807, 816, 825, 838, 847, 860, 869, + 878, 887, 894, 901, 910, 917, 926, 934, 941, 948, + 956, 965, 974, 983, 997, 1006, 1015, 1024, 1033, 1042, + 1051, 1058, 1065, 1091, 1099, 1106, 1113, 1120, 1127, 1135, + 1143, 1151, 1158, 1169, 1180, 1187, 1196, 1205, 1214, 1221, + 1228, 1236, 1244, 1254, 1264, 1274, 1288, 1296, 1309, 1320, + 1328, 1341, 1350, 1359, 1368, 1378, 1388, 1396, 1409, 1418, + 1426, 1435, 1443, 1456, 1465, 1472, 1482, 1492, 1502, 1512, + 1522, 1532, 1542, 1552, 1559, 1566, 1573, 1582, 1591, 1600, + 1609, 1616, 1626, 1646, 1653, 1671, 1684, 1697, 1706, 1715, + 1724, 1733, 1743, 1753, 1764, 1773, 1782, 1791, 1800, 1809, + 1818, 1831, 1844, 1853, 1860, 1869, 1878, 1887, 1896, 1904, + 1917, 1925, 1966, 1973, 1988, 1998, 2008, 2015, 2022, 2029, + 2038, 2046, 2060, 2081, 2102, 2114, 2126, 2138, 2147, 2168, + 2178, 2187, 2195, 2203, 2216, 2229, 2244, 2259, 2268, 2277, + 2283, 2292, 2301, 2311, 2321, 2334, 2347, 2359, 2373, 2385, + 2399, 2409, 2416, 2423, 2432, 2441, 2451, 2461, 2471, 2478, + 2485, 2494, 2503, 2513, 2523, 2530, 2537, 2544, 2552, 2562, + 2572, 2582, 2592, 2631, 2641, 2649, 2657, 2672, 2681, 2686, + 2687, 2688, 2688, 2688, 2689, 2689, 2689, 2690, 2690, 2692, + 2702, 2711, 2718, 2725, 2732, 2739, 2746, 2753, 2758, 2759, + 2760, 2760, 2761, 2761, 2761, 2762, 2763, 2763, 2764, 2764, + 2765, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2773, 2782, + 2789, 2796, 2805, 2812, 2819, 2826, 2833, 2842, 2851, 2858, + 2865, 2875, 2885, 2895, 2905, 2915, 2925, 2930, 2931, 2932, + 2934, 2940, 2950, 2957, 2966, 2974, 2979, 2980, 2982, 2982, + 2982, 2983, 2983, 2984, 2985, 2986, 2987, 2988, 2990, 3000, + 3009, 3016, 3025, 3032, 3041, 3049, 3062, 3070, 3083, 3088, + 3089, 3090, 3090, 3091, 3091, 3091, 3092, 3094, 3106, 3118, + 3130, 3145, 3158, 3171, 3182, 3187, 3188, 3189, 3189, 3191, + 3206 }; #endif @@ -1218,17 +1221,17 @@ static const char *const yytname[] = "VAR_TCP_CONNECTION_LIMIT", "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_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", "$accept", "toplevelvars", - "toplevelvar", "serverstart", "contents_server", "content_server", - "stubstart", "contents_stub", "content_stub", "forwardstart", - "contents_forward", "content_forward", "viewstart", "contents_view", - "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", - "server_verbosity", "server_statistics_interval", + "VAR_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", "$accept", + "toplevelvars", "toplevelvar", "serverstart", "contents_server", + "content_server", "stubstart", "contents_stub", "content_stub", + "forwardstart", "contents_forward", "content_forward", "viewstart", + "contents_view", "content_view", "authstart", "contents_auth", + "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", + "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", + "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1249,9 +1252,9 @@ static const char *const yytname[] = "server_tls_cert_bundle", "server_tls_win_cert", "server_tls_additional_port", "server_tls_ciphers", "server_tls_ciphersuites", "server_tls_session_ticket_keys", - "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_tls_use_sni", "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_local_actions", "server_chroot", "server_username", "server_directory", "server_logfile", "server_pidfile", "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", @@ -1383,14 +1386,14 @@ static const yytype_uint16 yytoknum[] = 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 + 535, 536, 537, 538, 539, 540, 541, 542 }; # endif -#define YYPACT_NINF -271 +#define YYPACT_NINF -272 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-271))) + (!!((Yystate) == (-272))) #define YYTABLE_NINF -1 @@ -1401,13 +1404,13 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -271, 0, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, 270, -42, - -37, -41, -21, -43, -44, -87, -106, -205, -229, -270, - 2, 3, 4, 24, 25, 26, 27, 28, 31, 32, - 33, 34, 36, 37, 38, 39, 40, 50, 51, 52, - 53, 74, 75, 76, 77, 78, 79, 80, 81, 82, + -272, 0, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 271, -42, + -37, -41, -7, -43, -30, -136, -106, -177, -172, -271, + 2, 3, 4, 25, 26, 28, 31, 32, 33, 34, + 36, 37, 38, 39, 40, 52, 53, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 87, 88, 91, 93, 94, 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, @@ -1420,76 +1423,77 @@ static const yytype_int16 yypact[] = 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 201, 205, 206, 207, 208, 209, 210, 211, 213, 214, 215, 216, 219, - 220, 223, 236, 237, 238, 239, 240, 241, 242, 243, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 220, 222, 223, 224, 225, 226, 227, 228, 229, 237, + 243, 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 268, 269, 304, 305, 306, 307, 311, 312, - 313, 355, 356, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 357, 358, 359, - 360, 361, 362, 363, -271, -271, -271, -271, -271, -271, - -271, -271, 367, 371, 372, 397, 398, 399, -271, -271, - -271, -271, -271, -271, -271, 401, 412, 413, 414, 415, - 416, 417, -271, -271, -271, -271, -271, -271, -271, -271, - 418, 419, 420, 421, 422, 423, 424, 425, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 426, 427, 428, - 429, 430, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, 470, 472, 488, 489, 490, 491, 492, - 493, -271, -271, -271, -271, -271, -271, -271, -271, -271, - 494, 495, 496, 497, 498, 505, 506, 507, 508, 509, - 510, 511, 513, 514, 515, 516, 517, 518, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 519, -271, -271, - 522, 525, 528, 529, 537, 538, 539, 541, 542, 543, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, 544, 545, 546, 547, 548, 549, -271, -271, -271, - -271, -271, -271, -271, 550, 551, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, 552, - 553, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, 554, 555, 556, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, 557, - 558, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - 559, 560, 561, 562, 563, 564, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, 565, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, 566, -271, -271, 567, - 568, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, 569, - 570, 571, -271, -271, -271, -271, -271, -271, -271, -271 + 265, 266, 267, 269, 270, 305, 306, 307, 308, 312, + 313, 314, 356, 357, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, 358, + 359, 360, 361, 362, 363, 364, -272, -272, -272, -272, + -272, -272, -272, -272, 368, 372, 373, 398, 399, 400, + -272, -272, -272, -272, -272, -272, -272, 402, 413, 414, + 415, 416, 417, 418, -272, -272, -272, -272, -272, -272, + -272, -272, 419, 420, 421, 422, 423, 424, 425, 426, + -272, -272, -272, -272, -272, -272, -272, -272, -272, 427, + 428, 429, 430, 431, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, 471, 473, 489, 490, 491, + 492, 493, 494, -272, -272, -272, -272, -272, -272, -272, + -272, -272, 495, 496, 497, 498, 499, 506, 507, 508, + 509, 510, 511, 512, 514, 515, 516, 517, 518, 519, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, 520, + -272, -272, 523, 526, 529, 530, 539, 540, 541, 543, + 544, 545, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, 546, 547, 548, 549, 550, 551, -272, + -272, -272, -272, -272, -272, -272, 552, 553, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, 554, 555, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 556, 557, + 558, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, 559, 560, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, 561, 562, 563, 564, 565, 566, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, 567, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, 568, + -272, -272, 569, 570, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, 571, 572, 573, -272, -272, -272, -272, -272, + -272, -272, -272 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1497,9 +1501,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, - 553, 576, 241, 592, 257, 3, 18, 214, 224, 233, - 243, 259, 488, 507, 546, 555, 578, 594, 4, 5, + 2, 0, 1, 16, 213, 223, 488, 546, 507, 232, + 555, 578, 242, 594, 258, 3, 18, 215, 225, 234, + 244, 260, 490, 509, 548, 557, 580, 596, 4, 5, 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1520,144 +1524,147 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 19, 20, 83, 86, 95, 183, - 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, - 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, - 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, - 209, 210, 211, 179, 84, 73, 99, 116, 117, 207, - 204, 120, 35, 36, 37, 38, 39, 75, 89, 90, - 105, 61, 71, 62, 187, 188, 100, 55, 56, 186, - 57, 58, 109, 113, 127, 136, 162, 139, 208, 110, - 68, 40, 41, 42, 97, 128, 129, 130, 43, 44, - 46, 47, 49, 50, 48, 134, 51, 52, 53, 59, - 78, 114, 92, 135, 85, 158, 93, 94, 111, 112, - 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, - 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, - 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, - 69, 70, 91, 80, 81, 96, 124, 125, 206, 126, - 131, 132, 133, 163, 164, 166, 168, 169, 167, 170, - 180, 137, 138, 142, 143, 140, 141, 144, 145, 147, - 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, - 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, - 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, - 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, - 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, - 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, - 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, - 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, - 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, + 0, 0, 0, 0, 17, 19, 20, 83, 86, 95, + 183, 184, 21, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 34, 74, 22, 87, 88, 45, 67, + 82, 23, 24, 27, 28, 25, 26, 29, 30, 31, + 32, 33, 118, 195, 119, 121, 122, 123, 197, 202, + 198, 209, 210, 211, 212, 179, 84, 73, 99, 116, + 117, 207, 204, 120, 35, 36, 37, 38, 39, 75, + 89, 90, 105, 61, 71, 62, 187, 188, 100, 55, + 56, 186, 57, 58, 109, 113, 127, 136, 162, 139, + 208, 110, 68, 40, 41, 42, 97, 128, 129, 130, + 43, 44, 46, 47, 49, 50, 48, 134, 51, 52, + 53, 59, 78, 114, 92, 135, 85, 158, 93, 94, + 111, 112, 205, 98, 54, 76, 79, 60, 63, 101, + 102, 77, 159, 103, 64, 65, 66, 196, 115, 172, + 173, 174, 175, 176, 177, 185, 104, 72, 106, 107, + 108, 160, 69, 70, 91, 80, 81, 96, 124, 125, + 206, 126, 131, 132, 133, 163, 164, 166, 168, 169, + 167, 170, 180, 137, 138, 142, 143, 140, 141, 144, + 145, 147, 146, 199, 201, 200, 161, 171, 189, 191, + 190, 192, 193, 194, 165, 178, 181, 182, 203, 0, + 0, 0, 0, 0, 0, 0, 214, 216, 217, 218, + 220, 221, 222, 219, 0, 0, 0, 0, 0, 0, + 224, 226, 227, 228, 229, 230, 231, 0, 0, 0, + 0, 0, 0, 0, 233, 235, 236, 239, 240, 237, + 241, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 245, 246, 247, 248, 252, 249, 250, 251, 0, + 0, 0, 0, 0, 263, 267, 268, 269, 270, 259, + 261, 262, 264, 265, 266, 0, 0, 0, 0, 0, + 0, 0, 0, 489, 491, 493, 492, 498, 494, 495, + 496, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, - 565, 0, 0, 0, 0, 0, 0, 577, 579, 580, - 581, 582, 583, 584, 0, 0, 593, 595, 596, 271, - 270, 277, 290, 288, 300, 296, 297, 301, 298, 299, - 302, 303, 304, 305, 306, 328, 329, 330, 331, 332, - 357, 358, 359, 364, 365, 293, 366, 367, 370, 368, - 369, 372, 373, 374, 388, 343, 344, 346, 347, 375, - 391, 337, 339, 392, 398, 399, 400, 294, 356, 416, - 417, 338, 411, 321, 289, 333, 389, 395, 376, 0, - 0, 420, 295, 272, 320, 380, 273, 291, 292, 334, - 335, 418, 378, 382, 383, 274, 421, 360, 387, 322, - 342, 393, 394, 397, 410, 336, 414, 412, 413, 348, - 355, 384, 385, 349, 350, 377, 402, 323, 324, 327, - 307, 309, 310, 311, 312, 313, 422, 423, 425, 361, - 362, 363, 371, 426, 427, 428, 0, 0, 0, 379, - 351, 353, 549, 437, 441, 439, 438, 442, 440, 0, - 0, 445, 446, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 381, 396, 415, 450, 451, 352, 429, - 0, 0, 0, 0, 0, 0, 403, 404, 405, 406, - 407, 408, 409, 550, 345, 340, 401, 319, 275, 276, - 341, 452, 454, 453, 455, 456, 457, 308, 315, 447, - 449, 448, 314, 0, 326, 386, 424, 325, 354, 316, - 317, 318, 458, 459, 460, 464, 463, 461, 462, 465, - 466, 467, 468, 470, 469, 479, 0, 483, 484, 0, - 0, 485, 471, 477, 472, 473, 474, 476, 478, 475, - 252, 253, 254, 255, 256, 497, 499, 498, 501, 502, - 503, 504, 500, 526, 527, 528, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 548, 566, 567, 568, 571, 569, 570, 572, 573, - 574, 575, 585, 586, 587, 588, 589, 590, 597, 598, - 390, 419, 436, 551, 552, 443, 444, 430, 431, 0, - 0, 0, 435, 591, 480, 481, 482, 434, 432, 433 + 508, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 0, + 547, 549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 556, 558, 559, 560, 562, 563, 561, 564, + 565, 566, 567, 0, 0, 0, 0, 0, 0, 579, + 581, 582, 583, 584, 585, 586, 0, 0, 595, 597, + 598, 272, 271, 278, 291, 289, 301, 297, 298, 302, + 299, 300, 303, 304, 305, 306, 307, 330, 331, 332, + 333, 334, 359, 360, 361, 366, 367, 294, 368, 369, + 372, 370, 371, 374, 375, 376, 390, 345, 346, 348, + 349, 377, 393, 339, 341, 394, 400, 401, 402, 295, + 358, 418, 419, 340, 413, 323, 290, 335, 391, 397, + 378, 0, 0, 422, 296, 273, 322, 382, 274, 292, + 293, 336, 337, 420, 380, 384, 385, 275, 423, 362, + 389, 324, 344, 395, 396, 399, 412, 338, 416, 414, + 415, 350, 357, 386, 387, 351, 352, 379, 404, 325, + 326, 329, 308, 310, 311, 312, 313, 314, 424, 425, + 427, 363, 364, 365, 373, 428, 429, 430, 0, 0, + 0, 381, 353, 355, 551, 439, 443, 441, 440, 444, + 442, 0, 0, 447, 448, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 383, 398, 417, 452, 453, + 354, 431, 0, 0, 0, 0, 0, 0, 405, 406, + 407, 408, 409, 410, 411, 552, 347, 342, 403, 321, + 276, 277, 343, 454, 456, 455, 457, 458, 459, 309, + 316, 449, 451, 450, 315, 0, 328, 388, 426, 327, + 356, 317, 318, 320, 319, 460, 461, 462, 466, 465, + 463, 464, 467, 468, 469, 470, 472, 471, 481, 0, + 485, 486, 0, 0, 487, 473, 479, 474, 475, 476, + 478, 480, 477, 253, 254, 255, 256, 257, 499, 501, + 500, 503, 504, 505, 506, 502, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 550, 568, 569, 570, 573, 571, + 572, 574, 575, 576, 577, 587, 588, 589, 590, 591, + 592, 599, 600, 392, 421, 438, 553, 554, 445, 446, + 432, 433, 0, 0, 0, 437, 593, 482, 483, 484, + 436, 434, 435 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -23, 572, 573, - 574, 575, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271 + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -23, 248, + 574, 575, 576, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, - 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, - 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 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, 435, 436, 437, 438, 439, 440, - 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, - 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, - 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, - 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 26, 38, 587, 588, 589, - 590, 591, 592, 593, 426, 27, 39, 596, 597, 598 + -1, 1, 15, 16, 28, 234, 17, 29, 436, 18, + 30, 450, 19, 31, 464, 20, 32, 480, 494, 495, + 496, 497, 498, 21, 33, 499, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 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, 437, 438, 439, 440, 441, + 442, 443, 451, 452, 453, 454, 455, 456, 481, 482, + 483, 484, 485, 486, 487, 488, 465, 466, 467, 468, + 469, 470, 471, 22, 34, 513, 514, 515, 516, 517, + 518, 519, 520, 521, 23, 35, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 24, 36, 560, 561, 424, + 425, 426, 427, 25, 37, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 26, 38, 589, 590, + 591, 592, 593, 594, 595, 428, 27, 39, 598, 599, + 600 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1665,80 +1672,80 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 470, 427, 455, 428, 429, 557, 442, 594, 595, - 498, 3, 599, 600, 601, 443, 444, 581, 582, 583, - 584, 585, 586, 470, 560, 561, 562, 563, 564, 565, - 566, 567, 568, 569, 602, 603, 604, 605, 606, 456, - 457, 607, 608, 609, 610, 4, 611, 612, 613, 614, - 615, 5, 503, 504, 505, 506, 507, 508, 509, 510, - 616, 617, 618, 619, 458, 430, 520, 521, 522, 523, - 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 620, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 630, 6, 431, 631, 632, 432, - 445, 633, 446, 634, 635, 636, 637, 638, 639, 640, - 641, 7, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, - 660, 459, 460, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 8, 680, 681, 682, 683, 684, 685, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 461, 698, 699, 700, 701, 702, 703, 704, 705, - 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, - 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, - 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, - 9, 736, 472, 473, 474, 737, 738, 739, 740, 741, - 742, 743, 477, 744, 745, 746, 747, 433, 10, 748, - 749, 447, 471, 750, 472, 473, 474, 475, 476, 487, - 488, 489, 490, 491, 477, 11, 751, 752, 753, 754, - 755, 756, 757, 758, 12, 759, 760, 761, 762, 763, - 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, - 774, 775, 776, 777, 778, 779, 780, 13, 781, 782, - 0, 14, 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, 783, 784, 785, 786, 72, 73, - 74, 787, 788, 789, 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, 790, 791, 792, 793, 794, - 795, 796, 797, 798, 116, 117, 118, 799, 119, 120, - 121, 800, 801, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 802, 803, 804, - 146, 805, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 806, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, - 824, 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, - 825, 196, 826, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 827, 828, - 829, 830, 831, 832, 833, 834, 835, 836, 837, 212, - 213, 214, 215, 216, 217, 838, 839, 840, 841, 842, - 843, 844, 218, 845, 846, 847, 848, 849, 850, 851, - 219, 220, 852, 221, 222, 853, 223, 224, 854, 855, - 225, 226, 227, 228, 229, 230, 231, 856, 857, 858, - 232, 859, 860, 861, 862, 863, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 472, 429, 457, 430, 431, 559, 444, 596, 597, + 500, 3, 601, 602, 603, 445, 446, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 604, 605, 472, 606, 458, + 459, 607, 608, 609, 610, 4, 611, 612, 613, 614, + 615, 5, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 616, 617, 460, 432, 505, 506, 507, 508, + 509, 510, 511, 512, 583, 584, 585, 586, 587, 588, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 628, 629, 630, 631, 632, 6, 433, 633, 634, 434, + 447, 635, 448, 636, 637, 638, 639, 640, 641, 642, + 643, 7, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 461, 462, 663, 664, 665, 666, 667, 668, 669, + 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 8, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 463, 700, 701, 702, 703, 704, 705, 706, 707, + 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, + 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, + 9, 738, 474, 475, 476, 739, 740, 741, 742, 743, + 744, 745, 479, 746, 747, 748, 749, 435, 10, 750, + 751, 449, 752, 753, 754, 755, 756, 757, 758, 759, + 489, 490, 491, 492, 493, 11, 473, 760, 474, 475, + 476, 477, 478, 761, 12, 762, 763, 764, 479, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 13, 784, + 785, 501, 14, 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, 786, 787, 788, 789, 72, + 73, 74, 790, 791, 792, 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, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 116, 117, 118, 802, 119, + 120, 121, 803, 804, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 805, 806, + 807, 146, 808, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 809, 810, 811, 812, 813, 814, 815, + 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 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, 828, 196, 829, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 212, 213, 214, 215, 216, 217, 841, 842, 843, 844, + 845, 846, 847, 218, 848, 849, 850, 851, 852, 853, + 854, 219, 220, 855, 221, 222, 856, 223, 224, 857, + 858, 225, 226, 227, 228, 229, 230, 231, 232, 859, + 860, 861, 233, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 499, 500, 501, 502 + 0, 0, 0, 0, 0, 0, 0, 502, 503, 504 }; static const yytype_int16 yycheck[] = { - 0, 44, 44, 44, 46, 47, 112, 44, 278, 279, - 33, 11, 10, 10, 10, 52, 53, 246, 247, 248, - 249, 250, 251, 44, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 10, 10, 10, 10, 10, 80, + 0, 44, 44, 44, 46, 47, 112, 44, 279, 280, + 33, 11, 10, 10, 10, 52, 53, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 10, 10, 44, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, - 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, - 10, 10, 10, 10, 105, 107, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 10, 10, 10, 10, 10, 10, + 10, 51, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 10, 10, 105, 107, 96, 97, 98, 99, + 100, 101, 102, 103, 246, 247, 248, 249, 250, 251, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1753,54 +1760,54 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 210, 10, 255, 256, 257, 10, 10, 10, 10, 10, 10, 10, 265, 10, 10, 10, 10, 269, 228, 10, - 10, 268, 253, 10, 255, 256, 257, 258, 259, 282, - 283, 284, 285, 286, 265, 245, 10, 10, 10, 10, - 10, 10, 10, 10, 254, 10, 10, 10, 10, 10, + 10, 268, 10, 10, 10, 10, 10, 10, 10, 10, + 283, 284, 285, 286, 287, 245, 253, 10, 255, 256, + 257, 258, 259, 10, 254, 10, 10, 10, 265, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 277, 10, 10, - -1, 281, 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, 10, 10, 10, 10, 48, 49, - 50, 10, 10, 10, 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, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 104, 105, 106, 10, 108, 109, - 110, 10, 10, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 10, 10, 10, - 140, 10, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 278, 10, + 10, 33, 282, 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, 10, 10, 10, 10, 48, + 49, 50, 10, 10, 10, 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, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 104, 105, 106, 10, 108, + 109, 110, 10, 10, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 10, 10, + 10, 140, 10, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 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, - 10, 211, 10, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 239, - 240, 241, 242, 243, 244, 10, 10, 10, 10, 10, - 10, 10, 252, 10, 10, 10, 10, 10, 10, 10, - 260, 261, 10, 263, 264, 10, 266, 267, 10, 10, - 270, 271, 272, 273, 274, 275, 276, 10, 10, 10, - 280, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 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, 10, 211, 10, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 239, 240, 241, 242, 243, 244, 10, 10, 10, 10, + 10, 10, 10, 252, 10, 10, 10, 10, 10, 10, + 10, 260, 261, 10, 263, 264, 10, 266, 267, 10, + 10, 270, 271, 272, 273, 274, 275, 276, 277, 10, + 10, 10, 281, 10, 10, 10, 10, 10, 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, + 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, 33, 33, 33, 33 + -1, -1, -1, -1, -1, -1, -1, 33, 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 288, 0, 11, 45, 51, 95, 111, 152, 210, - 228, 245, 254, 277, 281, 289, 290, 293, 296, 299, - 302, 310, 529, 540, 561, 569, 582, 592, 291, 294, - 297, 300, 303, 311, 530, 541, 562, 570, 583, 593, + 0, 289, 0, 11, 45, 51, 95, 111, 152, 210, + 228, 245, 254, 278, 282, 290, 291, 294, 297, 300, + 303, 311, 531, 542, 563, 571, 584, 594, 292, 295, + 298, 301, 304, 312, 532, 543, 564, 572, 585, 595, 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, @@ -1820,7 +1827,7 @@ static const yytype_uint16 yystos[] = 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 239, 240, 241, 242, 243, 244, 252, 260, 261, 263, 264, 266, 267, 270, 271, 272, 273, 274, - 275, 276, 280, 292, 313, 314, 315, 316, 317, 318, + 275, 276, 277, 281, 293, 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, @@ -1839,24 +1846,25 @@ static const yytype_uint16 yystos[] = 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, 565, 566, 567, 568, 591, 44, 46, 47, - 107, 138, 141, 269, 295, 501, 502, 503, 504, 505, - 506, 507, 44, 52, 53, 137, 139, 268, 298, 508, - 509, 510, 511, 512, 513, 44, 80, 81, 105, 172, - 173, 212, 301, 522, 523, 524, 525, 526, 527, 528, - 44, 253, 255, 256, 257, 258, 259, 265, 304, 514, - 515, 516, 517, 518, 519, 520, 521, 282, 283, 284, - 285, 286, 305, 306, 307, 308, 309, 312, 514, 515, - 516, 517, 518, 96, 97, 98, 99, 100, 101, 102, - 103, 531, 532, 533, 534, 535, 536, 537, 538, 539, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 542, 543, + 499, 500, 501, 502, 567, 568, 569, 570, 593, 44, + 46, 47, 107, 138, 141, 269, 296, 503, 504, 505, + 506, 507, 508, 509, 44, 52, 53, 137, 139, 268, + 299, 510, 511, 512, 513, 514, 515, 44, 80, 81, + 105, 172, 173, 212, 302, 524, 525, 526, 527, 528, + 529, 530, 44, 253, 255, 256, 257, 258, 259, 265, + 305, 516, 517, 518, 519, 520, 521, 522, 523, 283, + 284, 285, 286, 287, 306, 307, 308, 309, 310, 313, + 516, 517, 518, 519, 520, 96, 97, 98, 99, 100, + 101, 102, 103, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 112, 563, 564, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, - 581, 246, 247, 248, 249, 250, 251, 584, 585, 586, - 587, 588, 589, 590, 278, 279, 594, 595, 596, 10, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 112, + 565, 566, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 246, 247, 248, 249, 250, 251, 586, + 587, 588, 589, 590, 591, 592, 279, 280, 596, 597, + 598, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1885,39 +1893,39 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 287, 288, 288, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 290, 291, 291, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 293, 294, 294, 295, 295, 295, 295, 295, - 295, 295, 296, 297, 297, 298, 298, 298, 298, 298, - 298, 299, 300, 300, 301, 301, 301, 301, 301, 301, - 301, 302, 303, 303, 304, 304, 304, 304, 304, 304, - 304, 304, 305, 306, 307, 308, 309, 310, 311, 311, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 0, 288, 289, 289, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 291, 292, 292, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 294, 295, 295, 296, 296, 296, 296, + 296, 296, 296, 297, 298, 298, 299, 299, 299, 299, + 299, 299, 300, 301, 301, 302, 302, 302, 302, 302, + 302, 302, 303, 304, 304, 305, 305, 305, 305, 305, + 305, 305, 305, 306, 307, 308, 309, 310, 311, 312, + 312, 313, 313, 313, 313, 313, 313, 313, 313, 313, 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, @@ -1939,18 +1947,19 @@ static const yytype_uint16 yyr1[] = 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, 530, 531, - 531, 531, 531, 531, 531, 531, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 541, 542, 542, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, - 542, 542, 542, 542, 542, 542, 543, 544, 545, 546, + 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 532, 533, 533, 533, 533, 533, 533, 533, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 543, + 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, + 544, 544, 544, 544, 544, 544, 544, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, - 557, 558, 559, 560, 561, 562, 562, 563, 564, 565, - 566, 567, 568, 569, 570, 570, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 583, 584, - 584, 584, 584, 584, 584, 585, 586, 587, 588, 589, - 590, 591, 592, 593, 593, 594, 594, 595, 596 + 557, 558, 559, 560, 561, 562, 563, 564, 564, 565, + 566, 567, 568, 569, 570, 571, 572, 572, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 574, 575, + 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 585, 586, 586, 586, 586, 586, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 595, 596, 596, 597, + 598 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1977,45 +1986,46 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 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, 2, 2, 2, 2, 1, 2, 0, + 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, + 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, - 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 3, 1, 2, 0, 1, 1, 2, 2 + 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, + 2 }; @@ -2704,11 +2714,11 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2708 "util/configparser.c" +#line 2718 "util/configparser.c" break; - case 212: -#line 283 "./util/configparser.y" + case 213: +#line 284 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2719,11 +2729,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2723 "util/configparser.c" +#line 2733 "util/configparser.c" break; - case 222: -#line 300 "./util/configparser.y" + case 223: +#line 301 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2734,11 +2744,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2738 "util/configparser.c" +#line 2748 "util/configparser.c" break; - case 231: -#line 317 "./util/configparser.y" + case 232: +#line 318 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2751,11 +2761,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2755 "util/configparser.c" +#line 2765 "util/configparser.c" break; - case 241: -#line 336 "./util/configparser.y" + case 242: +#line 337 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2771,11 +2781,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2775 "util/configparser.c" +#line 2785 "util/configparser.c" break; - case 252: -#line 360 "./util/configparser.y" + case 253: +#line 361 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2792,11 +2802,11 @@ yyreduce: } } -#line 2796 "util/configparser.c" +#line 2806 "util/configparser.c" break; - case 253: -#line 379 "./util/configparser.y" + case 254: +#line 380 "./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 && @@ -2811,21 +2821,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2815 "util/configparser.c" +#line 2825 "util/configparser.c" break; - case 254: -#line 396 "./util/configparser.y" + case 255: +#line 397 "./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 2825 "util/configparser.c" +#line 2835 "util/configparser.c" break; - case 255: -#line 404 "./util/configparser.y" + case 256: +#line 405 "./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) @@ -2833,21 +2843,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2837 "util/configparser.c" +#line 2847 "util/configparser.c" break; - case 256: -#line 414 "./util/configparser.y" + case 257: +#line 415 "./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 2847 "util/configparser.c" +#line 2857 "util/configparser.c" break; - case 257: -#line 422 "./util/configparser.y" + case 258: +#line 423 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2863,11 +2873,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2867 "util/configparser.c" +#line 2877 "util/configparser.c" break; - case 270: -#line 445 "./util/configparser.y" + case 271: +#line 446 "./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) @@ -2875,11 +2885,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2879 "util/configparser.c" +#line 2889 "util/configparser.c" break; - case 271: -#line 454 "./util/configparser.y" + case 272: +#line 455 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2887,11 +2897,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2891 "util/configparser.c" +#line 2901 "util/configparser.c" break; - case 272: -#line 463 "./util/configparser.y" + case 273: +#line 464 "./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) @@ -2901,11 +2911,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2905 "util/configparser.c" +#line 2915 "util/configparser.c" break; - case 273: -#line 474 "./util/configparser.y" + case 274: +#line 475 "./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) @@ -2913,11 +2923,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2917 "util/configparser.c" +#line 2927 "util/configparser.c" break; - case 274: -#line 483 "./util/configparser.y" + case 275: +#line 484 "./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) @@ -2925,11 +2935,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2929 "util/configparser.c" +#line 2939 "util/configparser.c" break; - case 275: -#line 492 "./util/configparser.y" + case 276: +#line 493 "./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) @@ -2937,11 +2947,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2941 "util/configparser.c" +#line 2951 "util/configparser.c" break; - case 276: -#line 501 "./util/configparser.y" + case 277: +#line 502 "./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) @@ -2951,11 +2961,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2955 "util/configparser.c" +#line 2965 "util/configparser.c" break; - case 277: -#line 512 "./util/configparser.y" + case 278: +#line 513 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2963,11 +2973,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2967 "util/configparser.c" +#line 2977 "util/configparser.c" break; - case 278: -#line 521 "./util/configparser.y" + case 279: +#line 522 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2978,11 +2988,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2982 "util/configparser.c" +#line 2992 "util/configparser.c" break; - case 279: -#line 533 "./util/configparser.y" + case 280: +#line 534 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2994,11 +3004,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2998 "util/configparser.c" +#line 3008 "util/configparser.c" break; - case 280: -#line 547 "./util/configparser.y" + case 281: +#line 548 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3012,11 +3022,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3016 "util/configparser.c" +#line 3026 "util/configparser.c" break; - case 281: -#line 562 "./util/configparser.y" + case 282: +#line 563 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3026,11 +3036,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3030 "util/configparser.c" +#line 3040 "util/configparser.c" break; - case 282: -#line 573 "./util/configparser.y" + case 283: +#line 574 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3046,11 +3056,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3050 "util/configparser.c" +#line 3060 "util/configparser.c" break; - case 283: -#line 590 "./util/configparser.y" + case 284: +#line 591 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3066,11 +3076,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3070 "util/configparser.c" +#line 3080 "util/configparser.c" break; - case 284: -#line 607 "./util/configparser.y" + case 285: +#line 608 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3086,11 +3096,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3090 "util/configparser.c" +#line 3100 "util/configparser.c" break; - case 285: -#line 624 "./util/configparser.y" + case 286: +#line 625 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3106,11 +3116,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3110 "util/configparser.c" +#line 3120 "util/configparser.c" break; - case 286: -#line 641 "./util/configparser.y" + case 287: +#line 642 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3124,11 +3134,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3128 "util/configparser.c" +#line 3138 "util/configparser.c" break; - case 287: -#line 656 "./util/configparser.y" + case 288: +#line 657 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3142,11 +3152,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3146 "util/configparser.c" +#line 3156 "util/configparser.c" break; - case 288: -#line 671 "./util/configparser.y" + case 289: +#line 672 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3158,11 +3168,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3162 "util/configparser.c" +#line 3172 "util/configparser.c" break; - case 289: -#line 684 "./util/configparser.y" + case 290: +#line 685 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3176,11 +3186,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3180 "util/configparser.c" +#line 3190 "util/configparser.c" break; - case 290: -#line 699 "./util/configparser.y" + case 291: +#line 700 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3188,11 +3198,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3192 "util/configparser.c" +#line 3202 "util/configparser.c" break; - case 291: -#line 708 "./util/configparser.y" + case 292: +#line 709 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3200,11 +3210,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3204 "util/configparser.c" +#line 3214 "util/configparser.c" break; - case 292: -#line 717 "./util/configparser.y" + case 293: +#line 718 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3212,11 +3222,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3216 "util/configparser.c" +#line 3226 "util/configparser.c" break; - case 293: -#line 726 "./util/configparser.y" + case 294: +#line 727 "./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) @@ -3224,11 +3234,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3228 "util/configparser.c" +#line 3238 "util/configparser.c" break; - case 294: -#line 735 "./util/configparser.y" + case 295: +#line 736 "./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) @@ -3236,11 +3246,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3240 "util/configparser.c" +#line 3250 "util/configparser.c" break; - case 295: -#line 744 "./util/configparser.y" + case 296: +#line 745 "./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) @@ -3248,11 +3258,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3252 "util/configparser.c" +#line 3262 "util/configparser.c" break; - case 296: -#line 753 "./util/configparser.y" + case 297: +#line 754 "./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) @@ -3260,11 +3270,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3264 "util/configparser.c" +#line 3274 "util/configparser.c" break; - case 297: -#line 762 "./util/configparser.y" + case 298: +#line 763 "./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) @@ -3272,11 +3282,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3276 "util/configparser.c" +#line 3286 "util/configparser.c" break; - case 298: -#line 771 "./util/configparser.y" + case 299: +#line 772 "./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) @@ -3284,11 +3294,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3288 "util/configparser.c" +#line 3298 "util/configparser.c" break; - case 299: -#line 780 "./util/configparser.y" + case 300: +#line 781 "./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) @@ -3296,11 +3306,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3300 "util/configparser.c" +#line 3310 "util/configparser.c" break; - case 300: -#line 789 "./util/configparser.y" + case 301: +#line 790 "./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) @@ -3308,11 +3318,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3312 "util/configparser.c" +#line 3322 "util/configparser.c" break; - case 301: -#line 798 "./util/configparser.y" + case 302: +#line 799 "./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) @@ -3320,11 +3330,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3324 "util/configparser.c" +#line 3334 "util/configparser.c" break; - case 302: -#line 807 "./util/configparser.y" + case 303: +#line 808 "./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) @@ -3332,11 +3342,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3336 "util/configparser.c" +#line 3346 "util/configparser.c" break; - case 303: -#line 816 "./util/configparser.y" + case 304: +#line 817 "./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) @@ -3344,11 +3354,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3348 "util/configparser.c" +#line 3358 "util/configparser.c" break; - case 304: -#line 825 "./util/configparser.y" + case 305: +#line 826 "./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) @@ -3360,11 +3370,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3364 "util/configparser.c" +#line 3374 "util/configparser.c" break; - case 305: -#line 838 "./util/configparser.y" + case 306: +#line 839 "./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) @@ -3372,11 +3382,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3376 "util/configparser.c" +#line 3386 "util/configparser.c" break; - case 306: -#line 847 "./util/configparser.y" + case 307: +#line 848 "./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) @@ -3388,11 +3398,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3392 "util/configparser.c" +#line 3402 "util/configparser.c" break; - case 307: -#line 860 "./util/configparser.y" + case 308: +#line 861 "./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) @@ -3400,11 +3410,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3404 "util/configparser.c" +#line 3414 "util/configparser.c" break; - case 308: -#line 869 "./util/configparser.y" + case 309: +#line 870 "./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) @@ -3412,11 +3422,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3416 "util/configparser.c" +#line 3426 "util/configparser.c" break; - case 309: -#line 878 "./util/configparser.y" + case 310: +#line 879 "./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) @@ -3424,31 +3434,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3428 "util/configparser.c" +#line 3438 "util/configparser.c" break; - case 310: -#line 887 "./util/configparser.y" + case 311: +#line 888 "./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 3438 "util/configparser.c" +#line 3448 "util/configparser.c" break; - case 311: -#line 894 "./util/configparser.y" + case 312: +#line 895 "./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 3448 "util/configparser.c" +#line 3458 "util/configparser.c" break; - case 312: -#line 901 "./util/configparser.y" + case 313: +#line 902 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3456,21 +3466,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3460 "util/configparser.c" +#line 3470 "util/configparser.c" break; - case 313: -#line 910 "./util/configparser.y" + case 314: +#line 911 "./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 3470 "util/configparser.c" +#line 3480 "util/configparser.c" break; - case 314: -#line 917 "./util/configparser.y" + case 315: +#line 918 "./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) @@ -3478,53 +3488,65 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3482 "util/configparser.c" +#line 3492 "util/configparser.c" break; - case 315: -#line 926 "./util/configparser.y" + case 316: +#line 927 "./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 3493 "util/configparser.c" +#line 3503 "util/configparser.c" break; - case 316: -#line 934 "./util/configparser.y" + case 317: +#line 935 "./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 3503 "util/configparser.c" +#line 3513 "util/configparser.c" break; - case 317: -#line 941 "./util/configparser.y" + case 318: +#line 942 "./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 3513 "util/configparser.c" +#line 3523 "util/configparser.c" break; - case 318: -#line 948 "./util/configparser.y" + case 319: +#line 949 "./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 3524 "util/configparser.c" +#line 3534 "util/configparser.c" break; - case 319: -#line 956 "./util/configparser.y" + case 320: +#line 957 "./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 3546 "util/configparser.c" + break; + + case 321: +#line 966 "./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) @@ -3532,11 +3554,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3536 "util/configparser.c" +#line 3558 "util/configparser.c" break; - case 320: -#line 965 "./util/configparser.y" + case 322: +#line 975 "./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) @@ -3544,11 +3566,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3548 "util/configparser.c" +#line 3570 "util/configparser.c" break; - case 321: -#line 974 "./util/configparser.y" + case 323: +#line 984 "./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) @@ -3561,11 +3583,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3565 "util/configparser.c" +#line 3587 "util/configparser.c" break; - case 322: -#line 988 "./util/configparser.y" + case 324: +#line 998 "./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) @@ -3573,11 +3595,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3577 "util/configparser.c" +#line 3599 "util/configparser.c" break; - case 323: -#line 997 "./util/configparser.y" + case 325: +#line 1007 "./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) @@ -3585,11 +3607,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3589 "util/configparser.c" +#line 3611 "util/configparser.c" break; - case 324: -#line 1006 "./util/configparser.y" + case 326: +#line 1016 "./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) @@ -3597,11 +3619,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3601 "util/configparser.c" +#line 3623 "util/configparser.c" break; - case 325: -#line 1015 "./util/configparser.y" + case 327: +#line 1025 "./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) @@ -3609,11 +3631,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3613 "util/configparser.c" +#line 3635 "util/configparser.c" break; - case 326: -#line 1024 "./util/configparser.y" + case 328: +#line 1034 "./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) @@ -3621,11 +3643,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3625 "util/configparser.c" +#line 3647 "util/configparser.c" break; - case 327: -#line 1033 "./util/configparser.y" + case 329: +#line 1043 "./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) @@ -3633,31 +3655,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3637 "util/configparser.c" +#line 3659 "util/configparser.c" break; - case 328: -#line 1042 "./util/configparser.y" + case 330: +#line 1052 "./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 3647 "util/configparser.c" +#line 3669 "util/configparser.c" break; - case 329: -#line 1049 "./util/configparser.y" + case 331: +#line 1059 "./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 3657 "util/configparser.c" +#line 3679 "util/configparser.c" break; - case 330: -#line 1056 "./util/configparser.y" + case 332: +#line 1066 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3682,105 +3704,105 @@ yyreduce: } } } -#line 3686 "util/configparser.c" +#line 3708 "util/configparser.c" break; - case 331: -#line 1082 "./util/configparser.y" + case 333: +#line 1092 "./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 3697 "util/configparser.c" +#line 3719 "util/configparser.c" break; - case 332: -#line 1090 "./util/configparser.y" + case 334: +#line 1100 "./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 3707 "util/configparser.c" +#line 3729 "util/configparser.c" break; - case 333: -#line 1097 "./util/configparser.y" + case 335: +#line 1107 "./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 3717 "util/configparser.c" +#line 3739 "util/configparser.c" break; - case 334: -#line 1104 "./util/configparser.y" + case 336: +#line 1114 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3727 "util/configparser.c" - break; - - case 335: -#line 1111 "./util/configparser.y" - { - OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3737 "util/configparser.c" - break; - - case 336: -#line 1118 "./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 3748 "util/configparser.c" +#line 3749 "util/configparser.c" break; case 337: -#line 1126 "./util/configparser.y" +#line 1121 "./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))) + OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } #line 3759 "util/configparser.c" break; case 338: -#line 1134 "./util/configparser.y" +#line 1128 "./util/configparser.y" { - OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> - trusted_keys_file_list, (yyvsp[0].str))) + auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } #line 3770 "util/configparser.c" break; case 339: -#line 1142 "./util/configparser.y" +#line 1136 "./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 3781 "util/configparser.c" + break; + + case 340: +#line 1144 "./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 3792 "util/configparser.c" + break; + + case 341: +#line 1152 "./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 3780 "util/configparser.c" +#line 3802 "util/configparser.c" break; - case 340: -#line 1149 "./util/configparser.y" + case 342: +#line 1159 "./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) @@ -3790,11 +3812,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3794 "util/configparser.c" +#line 3816 "util/configparser.c" break; - case 341: -#line 1160 "./util/configparser.y" + case 343: +#line 1170 "./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) @@ -3804,21 +3826,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3808 "util/configparser.c" +#line 3830 "util/configparser.c" break; - case 342: -#line 1171 "./util/configparser.y" + case 344: +#line 1181 "./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 3818 "util/configparser.c" +#line 3840 "util/configparser.c" break; - case 343: -#line 1178 "./util/configparser.y" + case 345: +#line 1188 "./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) @@ -3826,11 +3848,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" +#line 3852 "util/configparser.c" break; - case 344: -#line 1187 "./util/configparser.y" + case 346: +#line 1197 "./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) @@ -3838,11 +3860,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3842 "util/configparser.c" +#line 3864 "util/configparser.c" break; - case 345: -#line 1196 "./util/configparser.y" + case 347: +#line 1206 "./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) @@ -3850,53 +3872,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3854 "util/configparser.c" +#line 3876 "util/configparser.c" break; - case 346: -#line 1205 "./util/configparser.y" + case 348: +#line 1215 "./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 3864 "util/configparser.c" +#line 3886 "util/configparser.c" break; - case 347: -#line 1212 "./util/configparser.y" + case 349: +#line 1222 "./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 3874 "util/configparser.c" +#line 3896 "util/configparser.c" break; - case 348: -#line 1219 "./util/configparser.y" + case 350: +#line 1229 "./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 3885 "util/configparser.c" +#line 3907 "util/configparser.c" break; - case 349: -#line 1227 "./util/configparser.y" + case 351: +#line 1237 "./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 3896 "util/configparser.c" +#line 3918 "util/configparser.c" break; - case 350: -#line 1235 "./util/configparser.y" + case 352: +#line 1245 "./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) @@ -3905,11 +3927,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3909 "util/configparser.c" +#line 3931 "util/configparser.c" break; - case 351: -#line 1245 "./util/configparser.y" + case 353: +#line 1255 "./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) @@ -3918,11 +3940,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3922 "util/configparser.c" +#line 3944 "util/configparser.c" break; - case 352: -#line 1255 "./util/configparser.y" + case 354: +#line 1265 "./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) @@ -3931,11 +3953,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3935 "util/configparser.c" +#line 3957 "util/configparser.c" break; - case 353: -#line 1265 "./util/configparser.y" + case 355: +#line 1275 "./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) @@ -3948,22 +3970,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3952 "util/configparser.c" +#line 3974 "util/configparser.c" break; - case 354: -#line 1279 "./util/configparser.y" + case 356: +#line 1289 "./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 3963 "util/configparser.c" +#line 3985 "util/configparser.c" break; - case 355: -#line 1287 "./util/configparser.y" + case 357: +#line 1297 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3975,11 +3997,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3979 "util/configparser.c" +#line 4001 "util/configparser.c" break; - case 356: -#line 1300 "./util/configparser.y" + case 358: +#line 1310 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3989,22 +4011,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3993 "util/configparser.c" +#line 4015 "util/configparser.c" break; - case 357: -#line 1311 "./util/configparser.y" + case 359: +#line 1321 "./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 4004 "util/configparser.c" +#line 4026 "util/configparser.c" break; - case 358: -#line 1319 "./util/configparser.y" + case 360: +#line 1329 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4016,11 +4038,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4020 "util/configparser.c" +#line 4042 "util/configparser.c" break; - case 359: -#line 1332 "./util/configparser.y" + case 361: +#line 1342 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4028,11 +4050,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4032 "util/configparser.c" +#line 4054 "util/configparser.c" break; - case 360: -#line 1341 "./util/configparser.y" + case 362: +#line 1351 "./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) @@ -4040,11 +4062,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4044 "util/configparser.c" +#line 4066 "util/configparser.c" break; - case 361: -#line 1350 "./util/configparser.y" + case 363: +#line 1360 "./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) @@ -4052,11 +4074,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4056 "util/configparser.c" +#line 4078 "util/configparser.c" break; - case 362: -#line 1359 "./util/configparser.y" + case 364: +#line 1369 "./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) @@ -4065,11 +4087,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4069 "util/configparser.c" +#line 4091 "util/configparser.c" break; - case 363: -#line 1369 "./util/configparser.y" + case 365: +#line 1379 "./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) @@ -4078,22 +4100,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4082 "util/configparser.c" +#line 4104 "util/configparser.c" break; - case 364: -#line 1379 "./util/configparser.y" + case 366: +#line 1389 "./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 4093 "util/configparser.c" +#line 4115 "util/configparser.c" break; - case 365: -#line 1387 "./util/configparser.y" + case 367: +#line 1397 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4105,11 +4127,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4109 "util/configparser.c" +#line 4131 "util/configparser.c" break; - case 366: -#line 1400 "./util/configparser.y" + case 368: +#line 1410 "./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) @@ -4117,22 +4139,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4121 "util/configparser.c" +#line 4143 "util/configparser.c" break; - case 367: -#line 1409 "./util/configparser.y" + case 369: +#line 1419 "./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 4132 "util/configparser.c" +#line 4154 "util/configparser.c" break; - case 368: -#line 1417 "./util/configparser.y" + case 370: +#line 1427 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4140,22 +4162,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4144 "util/configparser.c" +#line 4166 "util/configparser.c" break; - case 369: -#line 1426 "./util/configparser.y" + case 371: +#line 1436 "./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 4155 "util/configparser.c" +#line 4177 "util/configparser.c" break; - case 370: -#line 1434 "./util/configparser.y" + case 372: +#line 1444 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4167,11 +4189,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4171 "util/configparser.c" +#line 4193 "util/configparser.c" break; - case 371: -#line 1447 "./util/configparser.y" + case 373: +#line 1457 "./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) @@ -4179,21 +4201,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4183 "util/configparser.c" +#line 4205 "util/configparser.c" break; - case 372: -#line 1456 "./util/configparser.y" + case 374: +#line 1466 "./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 4193 "util/configparser.c" +#line 4215 "util/configparser.c" break; - case 373: -#line 1463 "./util/configparser.y" + case 375: +#line 1473 "./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) @@ -4202,11 +4224,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4206 "util/configparser.c" +#line 4228 "util/configparser.c" break; - case 374: -#line 1473 "./util/configparser.y" + case 376: +#line 1483 "./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) @@ -4215,11 +4237,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4219 "util/configparser.c" +#line 4241 "util/configparser.c" break; - case 375: -#line 1483 "./util/configparser.y" + case 377: +#line 1493 "./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) @@ -4228,11 +4250,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4232 "util/configparser.c" +#line 4254 "util/configparser.c" break; - case 376: -#line 1493 "./util/configparser.y" + case 378: +#line 1503 "./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) @@ -4241,11 +4263,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4245 "util/configparser.c" +#line 4267 "util/configparser.c" break; - case 377: -#line 1503 "./util/configparser.y" + case 379: +#line 1513 "./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) @@ -4254,11 +4276,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4258 "util/configparser.c" +#line 4280 "util/configparser.c" break; - case 378: -#line 1513 "./util/configparser.y" + case 380: +#line 1523 "./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) @@ -4267,11 +4289,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4271 "util/configparser.c" +#line 4293 "util/configparser.c" break; - case 379: -#line 1523 "./util/configparser.y" + case 381: +#line 1533 "./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) @@ -4280,11 +4302,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4284 "util/configparser.c" +#line 4306 "util/configparser.c" break; - case 380: -#line 1533 "./util/configparser.y" + case 382: +#line 1543 "./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) @@ -4293,41 +4315,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4297 "util/configparser.c" +#line 4319 "util/configparser.c" break; - case 381: -#line 1543 "./util/configparser.y" + case 383: +#line 1553 "./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 4307 "util/configparser.c" +#line 4329 "util/configparser.c" break; - case 382: -#line 1550 "./util/configparser.y" + case 384: +#line 1560 "./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 4317 "util/configparser.c" +#line 4339 "util/configparser.c" break; - case 383: -#line 1557 "./util/configparser.y" + case 385: +#line 1567 "./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 4327 "util/configparser.c" +#line 4349 "util/configparser.c" break; - case 384: -#line 1564 "./util/configparser.y" + case 386: +#line 1574 "./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) @@ -4335,11 +4357,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4339 "util/configparser.c" +#line 4361 "util/configparser.c" break; - case 385: -#line 1573 "./util/configparser.y" + case 387: +#line 1583 "./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) @@ -4347,11 +4369,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4351 "util/configparser.c" +#line 4373 "util/configparser.c" break; - case 386: -#line 1582 "./util/configparser.y" + case 388: +#line 1592 "./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) @@ -4359,11 +4381,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4363 "util/configparser.c" +#line 4385 "util/configparser.c" break; - case 387: -#line 1591 "./util/configparser.y" + case 389: +#line 1601 "./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) @@ -4371,21 +4393,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4375 "util/configparser.c" +#line 4397 "util/configparser.c" break; - case 388: -#line 1600 "./util/configparser.y" + case 390: +#line 1610 "./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 4385 "util/configparser.c" +#line 4407 "util/configparser.c" break; - case 389: -#line 1607 "./util/configparser.y" + case 391: +#line 1617 "./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) @@ -4394,11 +4416,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4398 "util/configparser.c" +#line 4420 "util/configparser.c" break; - case 390: -#line 1617 "./util/configparser.y" + case 392: +#line 1627 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4417,21 +4439,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4421 "util/configparser.c" +#line 4443 "util/configparser.c" break; - case 391: -#line 1637 "./util/configparser.y" + case 393: +#line 1647 "./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 4431 "util/configparser.c" +#line 4453 "util/configparser.c" break; - case 392: -#line 1644 "./util/configparser.y" + case 394: +#line 1654 "./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) { @@ -4448,11 +4470,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4452 "util/configparser.c" +#line 4474 "util/configparser.c" break; - case 393: -#line 1662 "./util/configparser.y" + case 395: +#line 1672 "./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) { @@ -4464,11 +4486,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4468 "util/configparser.c" +#line 4490 "util/configparser.c" break; - case 394: -#line 1675 "./util/configparser.y" + case 396: +#line 1685 "./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) { @@ -4480,11 +4502,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4484 "util/configparser.c" +#line 4506 "util/configparser.c" break; - case 395: -#line 1688 "./util/configparser.y" + case 397: +#line 1698 "./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) @@ -4492,11 +4514,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4496 "util/configparser.c" +#line 4518 "util/configparser.c" break; - case 396: -#line 1697 "./util/configparser.y" + case 398: +#line 1707 "./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) @@ -4504,11 +4526,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4508 "util/configparser.c" +#line 4530 "util/configparser.c" break; - case 397: -#line 1706 "./util/configparser.y" + case 399: +#line 1716 "./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) @@ -4516,11 +4538,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4520 "util/configparser.c" +#line 4542 "util/configparser.c" break; - case 398: -#line 1715 "./util/configparser.y" + case 400: +#line 1725 "./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) @@ -4528,11 +4550,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4532 "util/configparser.c" +#line 4554 "util/configparser.c" break; - case 399: -#line 1724 "./util/configparser.y" + case 401: +#line 1734 "./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) @@ -4541,11 +4563,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4545 "util/configparser.c" +#line 4567 "util/configparser.c" break; - case 400: -#line 1734 "./util/configparser.y" + case 402: +#line 1744 "./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) @@ -4554,11 +4576,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4558 "util/configparser.c" +#line 4580 "util/configparser.c" break; - case 401: -#line 1744 "./util/configparser.y" + case 403: +#line 1754 "./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) @@ -4568,11 +4590,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4572 "util/configparser.c" +#line 4594 "util/configparser.c" break; - case 402: -#line 1755 "./util/configparser.y" + case 404: +#line 1765 "./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) @@ -4580,11 +4602,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4584 "util/configparser.c" +#line 4606 "util/configparser.c" break; - case 403: -#line 1764 "./util/configparser.y" + case 405: +#line 1774 "./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) @@ -4592,11 +4614,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4596 "util/configparser.c" +#line 4618 "util/configparser.c" break; - case 404: -#line 1773 "./util/configparser.y" + case 406: +#line 1783 "./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) @@ -4604,11 +4626,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4608 "util/configparser.c" +#line 4630 "util/configparser.c" break; - case 405: -#line 1782 "./util/configparser.y" + case 407: +#line 1792 "./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) @@ -4616,11 +4638,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4620 "util/configparser.c" +#line 4642 "util/configparser.c" break; - case 406: -#line 1791 "./util/configparser.y" + case 408: +#line 1801 "./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) @@ -4628,11 +4650,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4632 "util/configparser.c" +#line 4654 "util/configparser.c" break; - case 407: -#line 1800 "./util/configparser.y" + case 409: +#line 1810 "./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) @@ -4640,11 +4662,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4644 "util/configparser.c" +#line 4666 "util/configparser.c" break; - case 408: -#line 1809 "./util/configparser.y" + case 410: +#line 1819 "./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) @@ -4656,11 +4678,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4660 "util/configparser.c" +#line 4682 "util/configparser.c" break; - case 409: -#line 1822 "./util/configparser.y" + case 411: +#line 1832 "./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) @@ -4672,11 +4694,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4676 "util/configparser.c" +#line 4698 "util/configparser.c" break; - case 410: -#line 1835 "./util/configparser.y" + case 412: +#line 1845 "./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) @@ -4684,21 +4706,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4688 "util/configparser.c" +#line 4710 "util/configparser.c" break; - case 411: -#line 1844 "./util/configparser.y" + case 413: +#line 1854 "./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 4698 "util/configparser.c" +#line 4720 "util/configparser.c" break; - case 412: -#line 1851 "./util/configparser.y" + case 414: +#line 1861 "./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) @@ -4706,11 +4728,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4710 "util/configparser.c" +#line 4732 "util/configparser.c" break; - case 413: -#line 1860 "./util/configparser.y" + case 415: +#line 1870 "./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) @@ -4718,11 +4740,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4722 "util/configparser.c" +#line 4744 "util/configparser.c" break; - case 414: -#line 1869 "./util/configparser.y" + case 416: +#line 1879 "./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) @@ -4730,11 +4752,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4734 "util/configparser.c" +#line 4756 "util/configparser.c" break; - case 415: -#line 1878 "./util/configparser.y" + case 417: +#line 1888 "./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) @@ -4743,22 +4765,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4747 "util/configparser.c" +#line 4769 "util/configparser.c" break; - case 416: -#line 1887 "./util/configparser.y" + case 418: +#line 1897 "./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 4758 "util/configparser.c" +#line 4780 "util/configparser.c" break; - case 417: -#line 1895 "./util/configparser.y" + case 419: +#line 1905 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4770,22 +4792,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4774 "util/configparser.c" +#line 4796 "util/configparser.c" break; - case 418: -#line 1908 "./util/configparser.y" + case 420: +#line 1918 "./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 4785 "util/configparser.c" +#line 4807 "util/configparser.c" break; - case 419: -#line 1916 "./util/configparser.y" + case 421: +#line 1926 "./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 && @@ -4825,21 +4847,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4829 "util/configparser.c" +#line 4851 "util/configparser.c" break; - case 420: -#line 1957 "./util/configparser.y" + case 422: +#line 1967 "./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 4839 "util/configparser.c" +#line 4861 "util/configparser.c" break; - case 421: -#line 1964 "./util/configparser.y" + case 423: +#line 1974 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4853,11 +4875,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4857 "util/configparser.c" +#line 4879 "util/configparser.c" break; - case 422: -#line 1979 "./util/configparser.y" + case 424: +#line 1989 "./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) @@ -4866,11 +4888,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4870 "util/configparser.c" +#line 4892 "util/configparser.c" break; - case 423: -#line 1989 "./util/configparser.y" + case 425: +#line 1999 "./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) @@ -4879,41 +4901,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4883 "util/configparser.c" +#line 4905 "util/configparser.c" break; - case 424: -#line 1999 "./util/configparser.y" + case 426: +#line 2009 "./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 4893 "util/configparser.c" +#line 4915 "util/configparser.c" break; - case 425: -#line 2006 "./util/configparser.y" + case 427: +#line 2016 "./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 4903 "util/configparser.c" +#line 4925 "util/configparser.c" break; - case 426: -#line 2013 "./util/configparser.y" + case 428: +#line 2023 "./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 4913 "util/configparser.c" +#line 4935 "util/configparser.c" break; - case 427: -#line 2020 "./util/configparser.y" + case 429: +#line 2030 "./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) @@ -4921,22 +4943,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4925 "util/configparser.c" +#line 4947 "util/configparser.c" break; - case 428: -#line 2029 "./util/configparser.y" + case 430: +#line 2039 "./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 4936 "util/configparser.c" +#line 4958 "util/configparser.c" break; - case 429: -#line 2037 "./util/configparser.y" + case 431: +#line 2047 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4949,11 +4971,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4953 "util/configparser.c" +#line 4975 "util/configparser.c" break; - case 430: -#line 2051 "./util/configparser.y" + case 432: +#line 2061 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4973,11 +4995,11 @@ yyreduce: } } } -#line 4977 "util/configparser.c" +#line 4999 "util/configparser.c" break; - case 431: -#line 2072 "./util/configparser.y" + case 433: +#line 2082 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4997,11 +5019,11 @@ yyreduce: } } } -#line 5001 "util/configparser.c" +#line 5023 "util/configparser.c" break; - case 432: -#line 2093 "./util/configparser.y" + case 434: +#line 2103 "./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, @@ -5012,11 +5034,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5016 "util/configparser.c" +#line 5038 "util/configparser.c" break; - case 433: -#line 2105 "./util/configparser.y" + case 435: +#line 2115 "./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, @@ -5027,11 +5049,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5031 "util/configparser.c" +#line 5053 "util/configparser.c" break; - case 434: -#line 2117 "./util/configparser.y" + case 436: +#line 2127 "./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, @@ -5042,11 +5064,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5046 "util/configparser.c" +#line 5068 "util/configparser.c" break; - case 435: -#line 2129 "./util/configparser.y" + case 437: +#line 2139 "./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, @@ -5054,11 +5076,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5058 "util/configparser.c" +#line 5080 "util/configparser.c" break; - case 436: -#line 2138 "./util/configparser.y" + case 438: +#line 2148 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5078,11 +5100,11 @@ yyreduce: } } } -#line 5082 "util/configparser.c" +#line 5104 "util/configparser.c" break; - case 437: -#line 2159 "./util/configparser.y" + case 439: +#line 2169 "./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) @@ -5090,11 +5112,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5094 "util/configparser.c" +#line 5116 "util/configparser.c" break; - case 438: -#line 2169 "./util/configparser.y" + case 440: +#line 2179 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5102,33 +5124,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5106 "util/configparser.c" +#line 5128 "util/configparser.c" break; - case 439: -#line 2178 "./util/configparser.y" + case 441: +#line 2188 "./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 5117 "util/configparser.c" +#line 5139 "util/configparser.c" break; - case 440: -#line 2186 "./util/configparser.y" + case 442: +#line 2196 "./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 5128 "util/configparser.c" +#line 5150 "util/configparser.c" break; - case 441: -#line 2194 "./util/configparser.y" + case 443: +#line 2204 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5140,11 +5162,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5144 "util/configparser.c" +#line 5166 "util/configparser.c" break; - case 442: -#line 2207 "./util/configparser.y" + case 444: +#line 2217 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5156,11 +5178,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5160 "util/configparser.c" +#line 5182 "util/configparser.c" break; - case 443: -#line 2220 "./util/configparser.y" + case 445: +#line 2230 "./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) { @@ -5174,11 +5196,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5178 "util/configparser.c" +#line 5200 "util/configparser.c" break; - case 444: -#line 2235 "./util/configparser.y" + case 446: +#line 2245 "./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) { @@ -5192,11 +5214,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5196 "util/configparser.c" +#line 5218 "util/configparser.c" break; - case 445: -#line 2250 "./util/configparser.y" + case 447: +#line 2260 "./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) @@ -5204,11 +5226,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5208 "util/configparser.c" +#line 5230 "util/configparser.c" break; - case 446: -#line 2259 "./util/configparser.y" + case 448: +#line 2269 "./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) @@ -5216,20 +5238,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5220 "util/configparser.c" +#line 5242 "util/configparser.c" break; - case 447: -#line 2268 "./util/configparser.y" + case 449: +#line 2278 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5229 "util/configparser.c" +#line 5251 "util/configparser.c" break; - case 448: -#line 2274 "./util/configparser.y" + case 450: +#line 2284 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5237,11 +5259,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5241 "util/configparser.c" +#line 5263 "util/configparser.c" break; - case 449: -#line 2283 "./util/configparser.y" + case 451: +#line 2293 "./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) @@ -5249,11 +5271,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5253 "util/configparser.c" +#line 5275 "util/configparser.c" break; - case 450: -#line 2292 "./util/configparser.y" + case 452: +#line 2302 "./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) @@ -5262,11 +5284,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5266 "util/configparser.c" +#line 5288 "util/configparser.c" break; - case 451: -#line 2302 "./util/configparser.y" + case 453: +#line 2312 "./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) @@ -5275,11 +5297,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5279 "util/configparser.c" +#line 5301 "util/configparser.c" break; - case 452: -#line 2312 "./util/configparser.y" + case 454: +#line 2322 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5291,11 +5313,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5295 "util/configparser.c" +#line 5317 "util/configparser.c" break; - case 453: -#line 2325 "./util/configparser.y" + case 455: +#line 2335 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5307,11 +5329,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5311 "util/configparser.c" +#line 5333 "util/configparser.c" break; - case 454: -#line 2338 "./util/configparser.y" + case 456: +#line 2348 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5322,11 +5344,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5326 "util/configparser.c" +#line 5348 "util/configparser.c" break; - case 455: -#line 2350 "./util/configparser.y" + case 457: +#line 2360 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5339,11 +5361,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5343 "util/configparser.c" +#line 5365 "util/configparser.c" break; - case 456: -#line 2364 "./util/configparser.y" + case 458: +#line 2374 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5354,11 +5376,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5358 "util/configparser.c" +#line 5380 "util/configparser.c" break; - case 457: -#line 2376 "./util/configparser.y" + case 459: +#line 2386 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5371,11 +5393,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5375 "util/configparser.c" +#line 5397 "util/configparser.c" break; - case 458: -#line 2390 "./util/configparser.y" + case 460: +#line 2400 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5384,31 +5406,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5388 "util/configparser.c" +#line 5410 "util/configparser.c" break; - case 459: -#line 2400 "./util/configparser.y" + case 461: +#line 2410 "./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 5398 "util/configparser.c" +#line 5420 "util/configparser.c" break; - case 460: -#line 2407 "./util/configparser.y" + case 462: +#line 2417 "./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 5408 "util/configparser.c" +#line 5430 "util/configparser.c" break; - case 461: -#line 2414 "./util/configparser.y" + case 463: +#line 2424 "./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) @@ -5416,11 +5438,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5420 "util/configparser.c" +#line 5442 "util/configparser.c" break; - case 462: -#line 2423 "./util/configparser.y" + case 464: +#line 2433 "./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) @@ -5428,11 +5450,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5432 "util/configparser.c" +#line 5454 "util/configparser.c" break; - case 463: -#line 2432 "./util/configparser.y" + case 465: +#line 2442 "./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) @@ -5441,11 +5463,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5445 "util/configparser.c" +#line 5467 "util/configparser.c" break; - case 464: -#line 2442 "./util/configparser.y" + case 466: +#line 2452 "./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) @@ -5454,11 +5476,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5458 "util/configparser.c" +#line 5480 "util/configparser.c" break; - case 465: -#line 2452 "./util/configparser.y" + case 467: +#line 2462 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5467,31 +5489,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5471 "util/configparser.c" +#line 5493 "util/configparser.c" break; - case 466: -#line 2462 "./util/configparser.y" + case 468: +#line 2472 "./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 5481 "util/configparser.c" +#line 5503 "util/configparser.c" break; - case 467: -#line 2469 "./util/configparser.y" + case 469: +#line 2479 "./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 5491 "util/configparser.c" +#line 5513 "util/configparser.c" break; - case 468: -#line 2476 "./util/configparser.y" + case 470: +#line 2486 "./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) @@ -5499,11 +5521,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5503 "util/configparser.c" +#line 5525 "util/configparser.c" break; - case 469: -#line 2485 "./util/configparser.y" + case 471: +#line 2495 "./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) @@ -5511,11 +5533,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5515 "util/configparser.c" +#line 5537 "util/configparser.c" break; - case 470: -#line 2494 "./util/configparser.y" + case 472: +#line 2504 "./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) @@ -5524,11 +5546,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5528 "util/configparser.c" +#line 5550 "util/configparser.c" break; - case 471: -#line 2504 "./util/configparser.y" + case 473: +#line 2514 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5537,52 +5559,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5541 "util/configparser.c" +#line 5563 "util/configparser.c" break; - case 472: -#line 2514 "./util/configparser.y" + case 474: +#line 2524 "./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 5551 "util/configparser.c" +#line 5573 "util/configparser.c" break; - case 473: -#line 2521 "./util/configparser.y" + case 475: +#line 2531 "./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 5561 "util/configparser.c" +#line 5583 "util/configparser.c" break; - case 474: -#line 2528 "./util/configparser.y" + case 476: +#line 2538 "./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 5571 "util/configparser.c" +#line 5593 "util/configparser.c" break; - case 475: -#line 2535 "./util/configparser.y" + case 477: +#line 2545 "./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 5582 "util/configparser.c" +#line 5604 "util/configparser.c" break; - case 476: -#line 2543 "./util/configparser.y" + case 478: +#line 2553 "./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) @@ -5591,11 +5613,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5595 "util/configparser.c" +#line 5617 "util/configparser.c" break; - case 477: -#line 2553 "./util/configparser.y" + case 479: +#line 2563 "./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) @@ -5604,11 +5626,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5608 "util/configparser.c" +#line 5630 "util/configparser.c" break; - case 478: -#line 2563 "./util/configparser.y" + case 480: +#line 2573 "./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) @@ -5617,11 +5639,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5621 "util/configparser.c" +#line 5643 "util/configparser.c" break; - case 479: -#line 2573 "./util/configparser.y" + case 481: +#line 2583 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5630,11 +5652,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5634 "util/configparser.c" +#line 5656 "util/configparser.c" break; - case 480: -#line 2583 "./util/configparser.y" + case 482: +#line 2593 "./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 && @@ -5672,11 +5694,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5676 "util/configparser.c" +#line 5698 "util/configparser.c" break; - case 481: -#line 2622 "./util/configparser.y" + case 483: +#line 2632 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5685,33 +5707,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5689 "util/configparser.c" +#line 5711 "util/configparser.c" break; - case 482: -#line 2632 "./util/configparser.y" + case 484: +#line 2642 "./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 5700 "util/configparser.c" +#line 5722 "util/configparser.c" break; - case 483: -#line 2640 "./util/configparser.y" + case 485: +#line 2650 "./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 5711 "util/configparser.c" +#line 5733 "util/configparser.c" break; - case 484: -#line 2648 "./util/configparser.y" + case 486: +#line 2658 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5725,11 +5747,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5729 "util/configparser.c" +#line 5751 "util/configparser.c" break; - case 485: -#line 2663 "./util/configparser.y" + case 487: +#line 2673 "./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) @@ -5737,19 +5759,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5741 "util/configparser.c" +#line 5763 "util/configparser.c" break; - case 486: -#line 2672 "./util/configparser.y" + case 488: +#line 2682 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5749 "util/configparser.c" +#line 5771 "util/configparser.c" break; - case 497: -#line 2683 "./util/configparser.y" + case 499: +#line 2693 "./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) @@ -5758,11 +5780,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5762 "util/configparser.c" +#line 5784 "util/configparser.c" break; - case 498: -#line 2693 "./util/configparser.y" + case 500: +#line 2703 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5770,79 +5792,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5774 "util/configparser.c" +#line 5796 "util/configparser.c" break; - case 499: -#line 2702 "./util/configparser.y" + case 501: +#line 2712 "./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 5784 "util/configparser.c" +#line 5806 "util/configparser.c" break; - case 500: -#line 2709 "./util/configparser.y" + case 502: +#line 2719 "./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 5794 "util/configparser.c" +#line 5816 "util/configparser.c" break; - case 501: -#line 2716 "./util/configparser.y" + case 503: +#line 2726 "./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 5804 "util/configparser.c" +#line 5826 "util/configparser.c" break; - case 502: -#line 2723 "./util/configparser.y" + case 504: +#line 2733 "./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 5814 "util/configparser.c" +#line 5836 "util/configparser.c" break; - case 503: -#line 2730 "./util/configparser.y" + case 505: +#line 2740 "./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 5824 "util/configparser.c" +#line 5846 "util/configparser.c" break; - case 504: -#line 2737 "./util/configparser.y" + case 506: +#line 2747 "./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 5834 "util/configparser.c" +#line 5856 "util/configparser.c" break; - case 505: -#line 2744 "./util/configparser.y" + case 507: +#line 2754 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5842 "util/configparser.c" +#line 5864 "util/configparser.c" break; - case 526: -#line 2764 "./util/configparser.y" + case 528: +#line 2774 "./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) @@ -5850,31 +5872,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5854 "util/configparser.c" +#line 5876 "util/configparser.c" break; - case 527: -#line 2773 "./util/configparser.y" + case 529: +#line 2783 "./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 5864 "util/configparser.c" +#line 5886 "util/configparser.c" break; - case 528: -#line 2780 "./util/configparser.y" + case 530: +#line 2790 "./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 5874 "util/configparser.c" +#line 5896 "util/configparser.c" break; - case 529: -#line 2787 "./util/configparser.y" + case 531: +#line 2797 "./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) @@ -5882,51 +5904,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5886 "util/configparser.c" +#line 5908 "util/configparser.c" break; - case 530: -#line 2796 "./util/configparser.y" + case 532: +#line 2806 "./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 5896 "util/configparser.c" +#line 5918 "util/configparser.c" break; - case 531: -#line 2803 "./util/configparser.y" + case 533: +#line 2813 "./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 5906 "util/configparser.c" +#line 5928 "util/configparser.c" break; - case 532: -#line 2810 "./util/configparser.y" + case 534: +#line 2820 "./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 5916 "util/configparser.c" +#line 5938 "util/configparser.c" break; - case 533: -#line 2817 "./util/configparser.y" + case 535: +#line 2827 "./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 5926 "util/configparser.c" +#line 5948 "util/configparser.c" break; - case 534: -#line 2824 "./util/configparser.y" + case 536: +#line 2834 "./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) @@ -5934,11 +5956,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5938 "util/configparser.c" +#line 5960 "util/configparser.c" break; - case 535: -#line 2833 "./util/configparser.y" + case 537: +#line 2843 "./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) @@ -5946,31 +5968,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5950 "util/configparser.c" +#line 5972 "util/configparser.c" break; - case 536: -#line 2842 "./util/configparser.y" + case 538: +#line 2852 "./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 5960 "util/configparser.c" +#line 5982 "util/configparser.c" break; - case 537: -#line 2849 "./util/configparser.y" + case 539: +#line 2859 "./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 5970 "util/configparser.c" +#line 5992 "util/configparser.c" break; - case 538: -#line 2856 "./util/configparser.y" + case 540: +#line 2866 "./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) @@ -5979,11 +6001,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5983 "util/configparser.c" +#line 6005 "util/configparser.c" break; - case 539: -#line 2866 "./util/configparser.y" + case 541: +#line 2876 "./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) @@ -5992,11 +6014,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5996 "util/configparser.c" +#line 6018 "util/configparser.c" break; - case 540: -#line 2876 "./util/configparser.y" + case 542: +#line 2886 "./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) @@ -6005,11 +6027,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6009 "util/configparser.c" +#line 6031 "util/configparser.c" break; - case 541: -#line 2886 "./util/configparser.y" + case 543: +#line 2896 "./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) @@ -6018,11 +6040,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6022 "util/configparser.c" +#line 6044 "util/configparser.c" break; - case 542: -#line 2896 "./util/configparser.y" + case 544: +#line 2906 "./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) @@ -6031,11 +6053,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6035 "util/configparser.c" +#line 6057 "util/configparser.c" break; - case 543: -#line 2906 "./util/configparser.y" + case 545: +#line 2916 "./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) @@ -6044,29 +6066,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6048 "util/configparser.c" +#line 6070 "util/configparser.c" break; - case 544: -#line 2916 "./util/configparser.y" + case 546: +#line 2926 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6056 "util/configparser.c" +#line 6078 "util/configparser.c" break; - case 548: -#line 2925 "./util/configparser.y" + case 550: +#line 2935 "./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 6066 "util/configparser.c" +#line 6088 "util/configparser.c" break; - case 549: -#line 2931 "./util/configparser.y" + case 551: +#line 2941 "./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) @@ -6075,21 +6097,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6079 "util/configparser.c" +#line 6101 "util/configparser.c" break; - case 550: -#line 2941 "./util/configparser.y" + case 552: +#line 2951 "./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 6089 "util/configparser.c" +#line 6111 "util/configparser.c" break; - case 551: -#line 2948 "./util/configparser.y" + case 553: +#line 2958 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6097,30 +6119,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6101 "util/configparser.c" +#line 6123 "util/configparser.c" break; - case 552: -#line 2957 "./util/configparser.y" + case 554: +#line 2967 "./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 6112 "util/configparser.c" +#line 6134 "util/configparser.c" break; - case 553: -#line 2965 "./util/configparser.y" + case 555: +#line 2975 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6120 "util/configparser.c" +#line 6142 "util/configparser.c" break; - case 566: -#line 2981 "./util/configparser.y" + case 568: +#line 2991 "./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) @@ -6128,11 +6150,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6132 "util/configparser.c" +#line 6154 "util/configparser.c" break; - case 567: -#line 2991 "./util/configparser.y" + case 569: +#line 3001 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6140,21 +6162,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6144 "util/configparser.c" +#line 6166 "util/configparser.c" break; - case 568: -#line 3000 "./util/configparser.y" + case 570: +#line 3010 "./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 6154 "util/configparser.c" +#line 6176 "util/configparser.c" break; - case 569: -#line 3007 "./util/configparser.y" + case 571: +#line 3017 "./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))) @@ -6162,21 +6184,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6166 "util/configparser.c" +#line 6188 "util/configparser.c" break; - case 570: -#line 3016 "./util/configparser.y" + case 572: +#line 3026 "./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 6176 "util/configparser.c" +#line 6198 "util/configparser.c" break; - case 571: -#line 3023 "./util/configparser.y" + case 573: +#line 3033 "./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))) @@ -6184,22 +6206,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6188 "util/configparser.c" +#line 6210 "util/configparser.c" break; - case 572: -#line 3032 "./util/configparser.y" + case 574: +#line 3042 "./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 6199 "util/configparser.c" +#line 6221 "util/configparser.c" break; - case 573: -#line 3040 "./util/configparser.y" + case 575: +#line 3050 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6211,22 +6233,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6215 "util/configparser.c" +#line 6237 "util/configparser.c" break; - case 574: -#line 3053 "./util/configparser.y" + case 576: +#line 3063 "./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 6226 "util/configparser.c" +#line 6248 "util/configparser.c" break; - case 575: -#line 3061 "./util/configparser.y" + case 577: +#line 3071 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6238,19 +6260,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6242 "util/configparser.c" +#line 6264 "util/configparser.c" break; - case 576: -#line 3074 "./util/configparser.y" + case 578: +#line 3084 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6250 "util/configparser.c" +#line 6272 "util/configparser.c" break; - case 585: -#line 3085 "./util/configparser.y" + case 587: +#line 3095 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6261,11 +6283,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6265 "util/configparser.c" +#line 6287 "util/configparser.c" break; - case 586: -#line 3097 "./util/configparser.y" + case 588: +#line 3107 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6276,11 +6298,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6280 "util/configparser.c" +#line 6302 "util/configparser.c" break; - case 587: -#line 3109 "./util/configparser.y" + case 589: +#line 3119 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6291,11 +6313,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6295 "util/configparser.c" +#line 6317 "util/configparser.c" break; - case 588: -#line 3121 "./util/configparser.y" + case 590: +#line 3131 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6309,11 +6331,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6313 "util/configparser.c" +#line 6335 "util/configparser.c" break; - case 589: -#line 3136 "./util/configparser.y" + case 591: +#line 3146 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6325,11 +6347,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6329 "util/configparser.c" +#line 6351 "util/configparser.c" break; - case 590: -#line 3149 "./util/configparser.y" + case 592: +#line 3159 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6341,11 +6363,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6345 "util/configparser.c" +#line 6367 "util/configparser.c" break; - case 591: -#line 3162 "./util/configparser.y" + case 593: +#line 3172 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6355,19 +6377,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6359 "util/configparser.c" +#line 6381 "util/configparser.c" break; - case 592: -#line 3173 "./util/configparser.y" + case 594: +#line 3183 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6367 "util/configparser.c" +#line 6389 "util/configparser.c" break; - case 597: -#line 3182 "./util/configparser.y" + case 599: +#line 3192 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6381,11 +6403,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6385 "util/configparser.c" +#line 6407 "util/configparser.c" break; - case 598: -#line 3197 "./util/configparser.y" + case 600: +#line 3207 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6399,11 +6421,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6403 "util/configparser.c" +#line 6425 "util/configparser.c" break; -#line 6407 "util/configparser.c" +#line 6429 "util/configparser.c" default: break; } @@ -6635,7 +6657,7 @@ yyreturn: #endif return yyresult; } -#line 3211 "./util/configparser.y" +#line 3221 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 2e4567b41..184810a2a 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -323,16 +323,17 @@ extern int yydebug; VAR_STREAM_WAIT_SIZE = 529, VAR_TLS_CIPHERS = 530, VAR_TLS_CIPHERSUITES = 531, - VAR_IPSET = 532, - VAR_IPSET_NAME_V4 = 533, - VAR_IPSET_NAME_V6 = 534, - VAR_TLS_SESSION_TICKET_KEYS = 535, - VAR_RPZ = 536, - VAR_TAGS = 537, - VAR_RPZ_ACTION_OVERRIDE = 538, - VAR_RPZ_CNAME_OVERRIDE = 539, - VAR_RPZ_LOG = 540, - VAR_RPZ_LOG_NAME = 541 + VAR_TLS_USE_SNI = 532, + VAR_IPSET = 533, + VAR_IPSET_NAME_V4 = 534, + VAR_IPSET_NAME_V6 = 535, + VAR_TLS_SESSION_TICKET_KEYS = 536, + VAR_RPZ = 537, + VAR_TAGS = 538, + VAR_RPZ_ACTION_OVERRIDE = 539, + VAR_RPZ_CNAME_OVERRIDE = 540, + VAR_RPZ_LOG = 541, + VAR_RPZ_LOG_NAME = 542 }; #endif /* Tokens. */ @@ -610,16 +611,17 @@ extern int yydebug; #define VAR_STREAM_WAIT_SIZE 529 #define VAR_TLS_CIPHERS 530 #define VAR_TLS_CIPHERSUITES 531 -#define VAR_IPSET 532 -#define VAR_IPSET_NAME_V4 533 -#define VAR_IPSET_NAME_V6 534 -#define VAR_TLS_SESSION_TICKET_KEYS 535 -#define VAR_RPZ 536 -#define VAR_TAGS 537 -#define VAR_RPZ_ACTION_OVERRIDE 538 -#define VAR_RPZ_CNAME_OVERRIDE 539 -#define VAR_RPZ_LOG 540 -#define VAR_RPZ_LOG_NAME 541 +#define VAR_TLS_USE_SNI 532 +#define VAR_IPSET 533 +#define VAR_IPSET_NAME_V4 534 +#define VAR_IPSET_NAME_V6 535 +#define VAR_TLS_SESSION_TICKET_KEYS 536 +#define VAR_RPZ 537 +#define VAR_TAGS 538 +#define VAR_RPZ_ACTION_OVERRIDE 539 +#define VAR_RPZ_CNAME_OVERRIDE 540 +#define VAR_RPZ_LOG 541 +#define VAR_RPZ_LOG_NAME 542 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -629,7 +631,7 @@ union YYSTYPE char* str; -#line 633 "util/configparser.h" +#line 635 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 0f6e06b97..c72a89135 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -170,7 +170,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY -%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES +%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME @@ -277,7 +277,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_tcp_connection_limit | server_log_servfail | server_deny_any | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | - server_tls_ciphersuites | server_tls_session_ticket_keys + server_tls_ciphersuites | server_tls_session_ticket_keys | + server_tls_use_sni ; stubstart: VAR_STUB_ZONE { @@ -952,6 +953,15 @@ server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG yyerror("out of memory"); } ; +server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG + { + OUTYY(("P(server_tls_use_sni:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_use_sni = (strcmp($2, "yes")==0); + free($2); + } + ; server_use_systemd: VAR_USE_SYSTEMD STRING_ARG { OUTYY(("P(server_use_systemd:%s)\n", $2)); diff --git a/util/net_help.c b/util/net_help.c index 135d33427..26e0c89ee 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1231,11 +1231,13 @@ int check_auth_name_for_ssl(char* auth_name) } /** set the authname on an SSL structure, SSL* ssl */ -int set_auth_name_on_ssl(void* ssl, char* auth_name) +int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni) { if(!auth_name) return 1; #ifdef HAVE_SSL - (void)SSL_set_tlsext_host_name(ssl, auth_name); + if(use_sni) { + (void)SSL_set_tlsext_host_name(ssl, auth_name); + } #else (void)ssl; #endif diff --git a/util/net_help.h b/util/net_help.h index d9ee37ad0..c1bb13923 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -453,9 +453,10 @@ int check_auth_name_for_ssl(char* auth_name); * set auth name on SSL for verification * @param ssl: SSL* to set * @param auth_name: if NULL nothing happens, otherwise the name to check. + * @param use_sni: if SNI will be used. * @return 1 on success or NULL auth_name, 0 on failure. */ -int set_auth_name_on_ssl(void* ssl, char* auth_name); +int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni); /** * Initialize openssl locking for thread safety From 9d197eb11061c2a7d805c9de5f411b425a030f05 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 17 Apr 2020 10:42:58 +0200 Subject: [PATCH 210/235] - Remove SNI support from unbound-anchor; TLS is used only for encryption and not validation. --- smallapp/unbound-anchor.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index b8aa10fe2..b8bd1b850 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -187,7 +187,6 @@ usage(void) printf("-c file cert file, default %s\n", ROOT_CERT_FILE); printf("-l list builtin key and cert on stdout\n"); printf("-u name server in https url, default %s\n", URLNAME); - printf("-S use SNI for the https connection\n"); printf("-x path pathname to xml in url, default %s\n", XMLNAME); printf("-s path pathname to p7s in url, default %s\n", P7SNAME); printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER); @@ -773,7 +772,7 @@ setup_sslctx(void) /** initiate TLS on a connection */ static SSL* -TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni) +TLS_initiate(SSL_CTX* sslctx, int fd) { X509* x; int r; @@ -789,9 +788,6 @@ TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni) SSL_free(ssl); return NULL; } - if(use_sni) { - (void)SSL_set_tlsext_host_name(ssl, urlname); - } while(1) { ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) @@ -1127,7 +1123,7 @@ read_http_result(SSL* ssl) /** https to an IP addr, return BIO with pathname or NULL */ static BIO* https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, - struct ip_list* src, int use_sni) + struct ip_list* src) { int fd; SSL* ssl; @@ -1141,7 +1137,7 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, SSL_CTX_free(sslctx); return NULL; } - ssl = TLS_initiate(sslctx, fd, urlname, use_sni); + ssl = TLS_initiate(sslctx, fd); if(!ssl) { SSL_CTX_free(sslctx); fd_close(fd); @@ -1165,12 +1161,11 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, * @param pathname: pathname of file on server to GET. * @param urlname: name to pass as the virtual host for this request. * @param src: if nonNULL, source address to bind to. - * @param use_sni: if SNI will be used. * @return a memory BIO with the file in it. */ static BIO* https(struct ip_list* ip_list, const char* pathname, const char* urlname, - struct ip_list* src, int use_sni) + struct ip_list* src) { struct ip_list* ip; BIO* bio = NULL; @@ -1178,7 +1173,7 @@ https(struct ip_list* ip_list, const char* pathname, const char* urlname, wipe_ip_usage(ip_list); while( (ip = pick_random_ip(ip_list)) ) { ip->used = 1; - bio = https_to_ip(ip, pathname, urlname, src, use_sni); + bio = https_to_ip(ip, pathname, urlname, src); if(bio) break; } if(!bio) { @@ -1934,7 +1929,7 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int port, int use_sni) + int port) { STACK_OF(X509)* cert; @@ -1968,8 +1963,8 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, #endif /* fetch the necessary files over HTTPS */ - xml = https(ip_list, xmlname, urlname, src, use_sni); - p7s = https(ip_list, p7sname, urlname, src, use_sni); + xml = https(ip_list, xmlname, urlname, src); + p7s = https(ip_list, p7sname, urlname, src); /* verify and update the root anchor */ verify_and_update_anchor(root_anchor_file, xml, p7s, cert, p7signer); @@ -2240,7 +2235,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int force, int res_conf_fallback, int port, int use_sni) + int force, int res_conf_fallback, int port) { struct ub_result* dnskey; int used_builtin = 0; @@ -2283,7 +2278,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, probe_date_allows_certupdate(root_anchor_file)) || force) { if(do_certupdate(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, - debugconf, srcaddr, ip4only, ip6only, port, use_sni)) + debugconf, srcaddr, ip4only, ip6only, port)) return 1; return used_builtin; } @@ -2312,9 +2307,8 @@ int main(int argc, char* argv[]) const char* srcaddr = NULL; int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT; int res_conf_fallback = 0; - int use_sni = 0; /* parse the options */ - while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) { + while( (c=getopt(argc, argv, "46C:FRP:a:b:c:f:hln:r:s:u:vx:")) != -1) { switch(c) { case 'l': dolist = 1; @@ -2337,9 +2331,6 @@ int main(int argc, char* argv[]) case 'u': urlname = optarg; break; - case 'S': - use_sni = 1; - break; case 'x': xmlname = optarg; break; @@ -2406,5 +2397,5 @@ int main(int argc, char* argv[]) return do_root_update_work(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, debugconf, - srcaddr, ip4only, ip6only, force, res_conf_fallback, port, use_sni); + srcaddr, ip4only, ip6only, force, res_conf_fallback, port); } From 1db2ab678d1b731185a9d74276c35ac741b2c63f Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 17 Apr 2020 11:27:39 +0200 Subject: [PATCH 211/235] Revert "- Remove SNI support from unbound-anchor; TLS is used only for" This reverts commit 9d197eb11061c2a7d805c9de5f411b425a030f05. Server-side software may use SNI to pick the correct virtual host. --- smallapp/unbound-anchor.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index b8bd1b850..b8aa10fe2 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -187,6 +187,7 @@ usage(void) printf("-c file cert file, default %s\n", ROOT_CERT_FILE); printf("-l list builtin key and cert on stdout\n"); printf("-u name server in https url, default %s\n", URLNAME); + printf("-S use SNI for the https connection\n"); printf("-x path pathname to xml in url, default %s\n", XMLNAME); printf("-s path pathname to p7s in url, default %s\n", P7SNAME); printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER); @@ -772,7 +773,7 @@ setup_sslctx(void) /** initiate TLS on a connection */ static SSL* -TLS_initiate(SSL_CTX* sslctx, int fd) +TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni) { X509* x; int r; @@ -788,6 +789,9 @@ TLS_initiate(SSL_CTX* sslctx, int fd) SSL_free(ssl); return NULL; } + if(use_sni) { + (void)SSL_set_tlsext_host_name(ssl, urlname); + } while(1) { ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) @@ -1123,7 +1127,7 @@ read_http_result(SSL* ssl) /** https to an IP addr, return BIO with pathname or NULL */ static BIO* https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, - struct ip_list* src) + struct ip_list* src, int use_sni) { int fd; SSL* ssl; @@ -1137,7 +1141,7 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, SSL_CTX_free(sslctx); return NULL; } - ssl = TLS_initiate(sslctx, fd); + ssl = TLS_initiate(sslctx, fd, urlname, use_sni); if(!ssl) { SSL_CTX_free(sslctx); fd_close(fd); @@ -1161,11 +1165,12 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, * @param pathname: pathname of file on server to GET. * @param urlname: name to pass as the virtual host for this request. * @param src: if nonNULL, source address to bind to. + * @param use_sni: if SNI will be used. * @return a memory BIO with the file in it. */ static BIO* https(struct ip_list* ip_list, const char* pathname, const char* urlname, - struct ip_list* src) + struct ip_list* src, int use_sni) { struct ip_list* ip; BIO* bio = NULL; @@ -1173,7 +1178,7 @@ https(struct ip_list* ip_list, const char* pathname, const char* urlname, wipe_ip_usage(ip_list); while( (ip = pick_random_ip(ip_list)) ) { ip->used = 1; - bio = https_to_ip(ip, pathname, urlname, src); + bio = https_to_ip(ip, pathname, urlname, src, use_sni); if(bio) break; } if(!bio) { @@ -1929,7 +1934,7 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int port) + int port, int use_sni) { STACK_OF(X509)* cert; @@ -1963,8 +1968,8 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, #endif /* fetch the necessary files over HTTPS */ - xml = https(ip_list, xmlname, urlname, src); - p7s = https(ip_list, p7sname, urlname, src); + xml = https(ip_list, xmlname, urlname, src, use_sni); + p7s = https(ip_list, p7sname, urlname, src, use_sni); /* verify and update the root anchor */ verify_and_update_anchor(root_anchor_file, xml, p7s, cert, p7signer); @@ -2235,7 +2240,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int force, int res_conf_fallback, int port) + int force, int res_conf_fallback, int port, int use_sni) { struct ub_result* dnskey; int used_builtin = 0; @@ -2278,7 +2283,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, probe_date_allows_certupdate(root_anchor_file)) || force) { if(do_certupdate(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, - debugconf, srcaddr, ip4only, ip6only, port)) + debugconf, srcaddr, ip4only, ip6only, port, use_sni)) return 1; return used_builtin; } @@ -2307,8 +2312,9 @@ int main(int argc, char* argv[]) const char* srcaddr = NULL; int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT; int res_conf_fallback = 0; + int use_sni = 0; /* parse the options */ - while( (c=getopt(argc, argv, "46C:FRP:a:b:c:f:hln:r:s:u:vx:")) != -1) { + while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) { switch(c) { case 'l': dolist = 1; @@ -2331,6 +2337,9 @@ int main(int argc, char* argv[]) case 'u': urlname = optarg; break; + case 'S': + use_sni = 1; + break; case 'x': xmlname = optarg; break; @@ -2397,5 +2406,5 @@ int main(int argc, char* argv[]) return do_root_update_work(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, debugconf, - srcaddr, ip4only, ip6only, force, res_conf_fallback, port); + srcaddr, ip4only, ip6only, force, res_conf_fallback, port, use_sni); } From d2055b83d8f53ab803afd319f156e1ca8a021bfd Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 17 Apr 2020 11:33:12 +0200 Subject: [PATCH 212/235] - Enable SNI by default in unbound-anchor. --- smallapp/unbound-anchor.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index b8aa10fe2..2bf5b3ab3 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -187,7 +187,7 @@ usage(void) printf("-c file cert file, default %s\n", ROOT_CERT_FILE); printf("-l list builtin key and cert on stdout\n"); printf("-u name server in https url, default %s\n", URLNAME); - printf("-S use SNI for the https connection\n"); + printf("-S do not use SNI for the https connection\n"); printf("-x path pathname to xml in url, default %s\n", XMLNAME); printf("-s path pathname to p7s in url, default %s\n", P7SNAME); printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER); @@ -2312,7 +2312,7 @@ int main(int argc, char* argv[]) const char* srcaddr = NULL; int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT; int res_conf_fallback = 0; - int use_sni = 0; + int use_sni = 1; /* parse the options */ while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) { switch(c) { @@ -2338,7 +2338,7 @@ int main(int argc, char* argv[]) urlname = optarg; break; case 'S': - use_sni = 1; + use_sni = 0; break; case 'x': xmlname = optarg; From a4dcd5eb914fef35b2ed39cf6cdd9a663142d2fc Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 17 Apr 2020 11:41:47 +0200 Subject: [PATCH 213/235] - Update Changelog for PR #221. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 4c433586c..8125b87ea 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +17 April 2020: George + - Add SNI support on more TLS connections (fixes #193). + - Add SNI support to unbound-anchor. + 16 April 2020: George - Add doxygen documentation for DSCP. From 0c10453546eaac4c7dae63efc8ad16af45c98f3a Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 17 Apr 2020 11:47:36 +0200 Subject: [PATCH 214/235] - Document SNI support in unbound-anchor.8.in. --- doc/unbound-anchor.8.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index bccd33161..b0d8302c4 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -69,6 +69,9 @@ The server name, it connects to https://name. Specify without https:// prefix. The default is "data.iana.org". It connects to the port specified with \-P. You can pass an IPv4 address or IPv6 address (no brackets) if you want. .TP +.B \-S +Do not use SNI for the HTTPS connection. Default is to use SNI. +.TP .B \-b \fIaddress The source address to bind to for domain resolution and contacting the server on https. May be either an IPv4 address or IPv6 address (no brackets). From 52ebdd85da5df866543cff8141332d569e1ff3ed Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Apr 2020 10:04:34 +0200 Subject: [PATCH 215/235] - Fix #222: --with-rpath, fails to rpath python lib. --- acx_python.m4 | 5 +++++ configure | 14 ++++++++++++++ configure.ac | 3 +++ doc/Changelog | 3 +++ 4 files changed, 25 insertions(+) diff --git a/acx_python.m4 b/acx_python.m4 index 2940971f1..a84daa035 100644 --- a/acx_python.m4 +++ b/acx_python.m4 @@ -58,6 +58,11 @@ $ac_distutils_result]) AC_MSG_RESULT([$PYTHON_LDFLAGS]) AC_SUBST([PYTHON_LDFLAGS]) + if test -z "$PYTHON_LIBDIR"; then + PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \ + print(get_config_var('LIBDIR'));"` + fi + # # Check for site packages # diff --git a/configure b/configure index 595c156b8..fb1ce374e 100755 --- a/configure +++ b/configure @@ -17329,6 +17329,11 @@ $as_echo_n "checking for Python library path... " >&6; } $as_echo "$PYTHON_LDFLAGS" >&6; } + if test -z "$PYTHON_LIBDIR"; then + PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \ + print(get_config_var('LIBDIR'));"` + fi + # # Check for site packages # @@ -17434,6 +17439,15 @@ $as_echo "#define HAVE_PYTHON 1" >>confdefs.h else CPPFLAGS="$PYTHON_CPPFLAGS" fi + if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then + + if test "x$enable_rpath" = xyes; then + if echo "$PYTHON_LIBDIR" | grep "^/" >/dev/null; then + RUNTIME_PATH="$RUNTIME_PATH -R$PYTHON_LIBDIR" + fi + fi + + fi ub_have_python=yes if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"python\${PY_MAJOR_VERSION}\"\""; } >&5 diff --git a/configure.ac b/configure.ac index e71bc5888..f96a24ef2 100644 --- a/configure.ac +++ b/configure.ac @@ -678,6 +678,9 @@ if test x_$ub_test_python != x_no; then else CPPFLAGS="$PYTHON_CPPFLAGS" fi + if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then + ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR]) + fi ub_have_python=yes PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"], [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"], diff --git a/doc/Changelog b/doc/Changelog index 8125b87ea..796c587e2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +20 April 2020: Wouter + - Fix #222: --with-rpath, fails to rpath python lib. + 17 April 2020: George - Add SNI support on more TLS connections (fixes #193). - Add SNI support to unbound-anchor. From 5151190dbcd8382958de482ac5efd9490489e2fe Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Apr 2020 10:08:08 +0200 Subject: [PATCH 216/235] Fix that it is --enable-rpath, for #222. --- doc/Changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 796c587e2..1e43d5085 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,5 @@ 20 April 2020: Wouter - - Fix #222: --with-rpath, fails to rpath python lib. + - Fix #222: --enable-rpath, fails to rpath python lib. 17 April 2020: George - Add SNI support on more TLS connections (fixes #193). From 00323b71d7142561d5ef46522dd03a771202c8c3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Apr 2020 14:24:05 +0200 Subject: [PATCH 217/235] - Fix for count of reply states in the mesh. --- doc/Changelog | 1 + services/mesh.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 1e43d5085..4b32207cd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 20 April 2020: Wouter - Fix #222: --enable-rpath, fails to rpath python lib. + - Fix for count of reply states in the mesh. 17 April 2020: George - Add SNI support on more TLS connections (fixes #193). diff --git a/services/mesh.c b/services/mesh.c index 09c51a2be..f484df934 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1810,6 +1810,7 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, struct comm_point* cp) { + int was_mesh_reply = 0; struct mesh_reply* n, *prev = NULL; n = m->reply_list; /* when in mesh_cleanup, it sets the reply_list to NULL, so that @@ -1823,6 +1824,7 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, /* delete it, but allocated in m region */ log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; + was_mesh_reply = 1; /* prev = prev; */ n = n->next; @@ -1837,7 +1839,7 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, mesh->num_detached_states++; } /* if not replies any more in mstate, it is no longer a reply_state */ - if(!m->reply_list && !m->cb_list) { + if(!m->reply_list && !m->cb_list && was_mesh_reply) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; } @@ -1960,7 +1962,7 @@ mesh_serve_expired_callback(void* arg) r = mstate->reply_list; mstate->reply_list = NULL; - if(!mstate->reply_list && !mstate->cb_list) { + if(!mstate->reply_list && !mstate->cb_list && r) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; if(mstate->super_set.count == 0) { From cee3098e87b31e255c5cffa987f581f3d08be3d8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 20 Apr 2020 15:35:45 +0200 Subject: [PATCH 218/235] - Remove unneeded was_mesh_reply check. --- doc/Changelog | 1 + services/mesh.c | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 4b32207cd..0fa60aec0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 20 April 2020: Wouter - Fix #222: --enable-rpath, fails to rpath python lib. - Fix for count of reply states in the mesh. + - Remove unneeded was_mesh_reply check. 17 April 2020: George - Add SNI support on more TLS connections (fixes #193). diff --git a/services/mesh.c b/services/mesh.c index f484df934..4bc4341c4 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1810,7 +1810,6 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, struct comm_point* cp) { - int was_mesh_reply = 0; struct mesh_reply* n, *prev = NULL; n = m->reply_list; /* when in mesh_cleanup, it sets the reply_list to NULL, so that @@ -1824,7 +1823,6 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, /* delete it, but allocated in m region */ log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; - was_mesh_reply = 1; /* prev = prev; */ n = n->next; @@ -1839,7 +1837,7 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, mesh->num_detached_states++; } /* if not replies any more in mstate, it is no longer a reply_state */ - if(!m->reply_list && !m->cb_list && was_mesh_reply) { + if(!m->reply_list && !m->cb_list) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; } From 226d66ca9258c4e47b1e549ef9ab5e12c4925771 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 21 Apr 2020 12:58:48 +0200 Subject: [PATCH 219/235] - Change default value for 'rrset-roundrobin' to yes. --- doc/Changelog | 3 +++ doc/example.conf.in | 2 +- doc/unbound.conf.5.in | 2 +- util/config_file.c | 2 +- util/net_help.c | 4 ++-- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0fa60aec0..07535b9e2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +21 April 2020: George + - Change default value for 'rrset-roundrobin' to yes. + 20 April 2020: Wouter - Fix #222: --enable-rpath, fails to rpath python lib. - Fix for count of reply states in the mesh. diff --git a/doc/example.conf.in b/doc/example.conf.in index 3871e6ff0..a1a687422 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -473,7 +473,7 @@ server: # deny-any: no # if yes, Unbound rotates RRSet order in response. - # rrset-roundrobin: no + # rrset-roundrobin: yes # if yes, Unbound doesn't insert authority/additional sections # into response messages when those sections are not required. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index d76655195..37692db5e 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -932,7 +932,7 @@ are none. .TP .B rrset\-roundrobin: \fI If yes, Unbound rotates RRSet order in response (the random number is taken -from the query ID, for speed and thread safety). Default is no. +from the query ID, for speed and thread safety). Default is yes. .TP .B minimal-responses: \fI If yes, Unbound doesn't insert authority/additional sections into response diff --git a/util/config_file.c b/util/config_file.c index 91a2c19d7..2a809f875 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -274,7 +274,7 @@ config_create(void) cfg->control_port = UNBOUND_CONTROL_PORT; cfg->control_use_cert = 1; cfg->minimal_responses = 1; - cfg->rrset_roundrobin = 0; + cfg->rrset_roundrobin = 1; cfg->unknown_server_time_limit = 376; cfg->max_udp_size = 4096; if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key"))) diff --git a/util/net_help.c b/util/net_help.c index 26e0c89ee..e287f90aa 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -67,8 +67,8 @@ uint16_t EDNS_ADVERTISED_SIZE = 4096; /** minimal responses when positive answer: default is no */ int MINIMAL_RESPONSES = 0; -/** rrset order roundrobin: default is no */ -int RRSET_ROUNDROBIN = 0; +/** rrset order roundrobin: default is yes */ +int RRSET_ROUNDROBIN = 1; /** log tag queries with name instead of 'info' for filtering */ int LOG_TAG_QUERYREPLY = 0; From 201c15837792dda854eea761e3a7d9d6a35b52a8 Mon Sep 17 00:00:00 2001 From: Anna Khaitovich Date: Tue, 21 Apr 2020 13:40:24 +0200 Subject: [PATCH 220/235] KSK-2010 has been revoked --- smallapp/unbound-anchor.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index 2bf5b3ab3..a30523c76 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -246,9 +246,7 @@ get_builtin_ds(void) return /* The anchors must start on a new line with ". IN DS and end with \n"[;] * because the makedist script greps on the source here */ -/* anchor 19036 is from 2010 */ /* anchor 20326 is from 2017 */ -". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n" ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; } From 6320776b251fbc76a10fb69cf4717fe6ca4aa613 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 21 Apr 2020 15:11:02 +0200 Subject: [PATCH 221/235] Changelog note for PR #225 - Merge #225 from akhait: KSK-2010 has been revoked. It removes the KSK-2010 from the default list in unbound-anchor, now that the revocation period is over. KSK-2017 is the only trust anchor in the shipped default now. --- doc/Changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 07535b9e2..91d096aab 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +21 April 2020: Wouter + - Merge #225 from akhait: KSK-2010 has been revoked. It removes the + KSK-2010 from the default list in unbound-anchor, now that the + revocation period is over. KSK-2017 is the only trust anchor in + the shipped default now. + 21 April 2020: George - Change default value for 'rrset-roundrobin' to yes. From 584c2cf804590ea03553e627712a4e4ef40036c1 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 21 Apr 2020 22:02:56 +0200 Subject: [PATCH 222/235] - Fix tests for new rrset-roundrobin default. --- doc/Changelog | 1 + testcode/testbound.c | 2 ++ testcode/unitmain.c | 2 ++ 3 files changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 91d096aab..1154f0eb5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,7 @@ 21 April 2020: George - Change default value for 'rrset-roundrobin' to yes. + - Fix tests for new rrset-roundrobin default. 20 April 2020: Wouter - Fix #222: --enable-rpath, fails to rpath python lib. diff --git a/testcode/testbound.c b/testcode/testbound.c index 602dffaff..b38407637 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -274,6 +274,8 @@ setup_config(FILE* in, int* lineno, int* pass_argc, char* pass_argv[]) fprintf(cfg, " pidfile: \"\"\n"); fprintf(cfg, " val-log-level: 2\n"); fprintf(cfg, "remote-control: control-enable: no\n"); + /* some basic settings to facilitate testing */ + fprintf(cfg, "server: rrset-roundrobin: no\n"); while(fgets(line, MAX_LINE_LEN-1, in)) { parse = line; (*lineno)++; diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 4fc7e508b..a42be424e 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -867,6 +867,8 @@ main(int argc, char* argv[]) printf("\tperforms unit tests.\n"); return 1; } + /* Disable roundrobin for the unit tests */ + RRSET_ROUNDROBIN = 0; #ifdef USE_LIBEVENT printf("Start of %s+libevent unit test.\n", PACKAGE_STRING); #else From a269db3828a107fbf7601567268b41800999e427 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 22 Apr 2020 19:27:20 +0200 Subject: [PATCH 223/235] - Explicitly use 'rrset-roundrobin: no' for test cases. --- doc/Changelog | 3 +++ testcode/testbound.c | 2 -- testdata/autotrust_10key.rpl | 1 - testdata/autotrust_revtp.rpl | 1 - testdata/autotrust_revtp_read.rpl | 1 - testdata/black_data.rpl | 1 + testdata/black_prime.rpl | 1 + testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf | 1 + testdata/iter_lame_noaa.rpl | 1 + testdata/iter_lame_nosoa.rpl | 1 + testdata/iter_ns_badip.rpl | 1 + testdata/iter_pcnamech.rpl | 1 + testdata/iter_pcnamechrec.rpl | 1 + testdata/iter_ranoaa_lame.rpl | 1 + testdata/iter_reclame_one.rpl | 1 + testdata/iter_reclame_two.rpl | 1 + testdata/localdata.rpl | 1 + testdata/rpz_axfr.rpl | 1 + testdata/rpz_ixfr.rpl | 1 + testdata/rrset_updated.rpl | 1 + testdata/val_any.rpl | 1 + testdata/val_any_dname.rpl | 1 + testdata/val_nsec3_b3_optout.rpl | 3 ++- testdata/val_nsec3_b3_optout_negcache.rpl | 3 ++- testdata/val_nsec3_b3_optout_noce.rpl | 3 ++- testdata/val_nsec3_b3_optout_nonc.rpl | 2 +- testdata/val_nsec3_b4_wild.rpl | 3 ++- testdata/val_nsec3_b5_wcnodata.rpl | 2 +- testdata/val_nsec3_b5_wcnodata_noce.rpl | 2 +- testdata/val_nsec3_b5_wcnodata_nonc.rpl | 2 +- testdata/val_nsec3_b5_wcnodata_nowc.rpl | 2 +- testdata/val_nsec3_wcany.rpl | 1 + testdata/val_nx_nsec3_collision.rpl | 1 + testdata/val_refer_unsignadd.rpl | 1 + testdata/val_referglue.rpl | 1 + testdata/val_twocname.rpl | 1 + 36 files changed, 38 insertions(+), 14 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 1154f0eb5..0b2a86aa9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +22 April 2020: George + - Explicitly use 'rrset-roundrobin: no' for test cases. + 21 April 2020: Wouter - Merge #225 from akhait: KSK-2010 has been revoked. It removes the KSK-2010 from the default list in unbound-anchor, now that the diff --git a/testcode/testbound.c b/testcode/testbound.c index b38407637..602dffaff 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -274,8 +274,6 @@ setup_config(FILE* in, int* lineno, int* pass_argc, char* pass_argv[]) fprintf(cfg, " pidfile: \"\"\n"); fprintf(cfg, " val-log-level: 2\n"); fprintf(cfg, "remote-control: control-enable: no\n"); - /* some basic settings to facilitate testing */ - fprintf(cfg, "server: rrset-roundrobin: no\n"); while(fgets(line, MAX_LINE_LEN-1, in)) { parse = line; (*lineno)++; diff --git a/testdata/autotrust_10key.rpl b/testdata/autotrust_10key.rpl index 22cd53681..8e4ab5a18 100644 --- a/testdata/autotrust_10key.rpl +++ b/testdata/autotrust_10key.rpl @@ -106,7 +106,6 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END -RANGE_END RANGE_END diff --git a/testdata/autotrust_revtp.rpl b/testdata/autotrust_revtp.rpl index 4ed113f74..ec3eeaa4d 100644 --- a/testdata/autotrust_revtp.rpl +++ b/testdata/autotrust_revtp.rpl @@ -97,7 +97,6 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END -RANGE_END RANGE_END diff --git a/testdata/autotrust_revtp_read.rpl b/testdata/autotrust_revtp_read.rpl index cd48a6339..7428f7aae 100644 --- a/testdata/autotrust_revtp_read.rpl +++ b/testdata/autotrust_revtp_read.rpl @@ -85,7 +85,6 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END -RANGE_END RANGE_END diff --git a/testdata/black_data.rpl b/testdata/black_data.rpl index de6f57ec1..e6ef1b79d 100644 --- a/testdata/black_data.rpl +++ b/testdata/black_data.rpl @@ -8,6 +8,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/black_prime.rpl b/testdata/black_prime.rpl index 7e73f32f3..fbe92a721 100644 --- a/testdata/black_prime.rpl +++ b/testdata/black_prime.rpl @@ -8,6 +8,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf index 08e9d6432..5b2c8045a 100644 --- a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf @@ -10,6 +10,7 @@ server: username: "" do-not-query-localhost: no minimal-responses: no + rrset-roundrobin: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/iter_lame_noaa.rpl b/testdata/iter_lame_noaa.rpl index 7a6eb1b30..defaa5ca8 100644 --- a/testdata/iter_lame_noaa.rpl +++ b/testdata/iter_lame_noaa.rpl @@ -4,6 +4,7 @@ server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_lame_nosoa.rpl b/testdata/iter_lame_nosoa.rpl index 4914f7461..3bf6ccc18 100644 --- a/testdata/iter_lame_nosoa.rpl +++ b/testdata/iter_lame_nosoa.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_ns_badip.rpl b/testdata/iter_ns_badip.rpl index ad266c64d..e0bf96674 100644 --- a/testdata/iter_ns_badip.rpl +++ b/testdata/iter_ns_badip.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "3 2 1 0 0" qname-minimisation: "no" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_pcnamech.rpl b/testdata/iter_pcnamech.rpl index 098ae0bb5..32b3130c8 100644 --- a/testdata/iter_pcnamech.rpl +++ b/testdata/iter_pcnamech.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_pcnamechrec.rpl b/testdata/iter_pcnamechrec.rpl index ca996bb38..8bf7ad879 100644 --- a/testdata/iter_pcnamechrec.rpl +++ b/testdata/iter_pcnamechrec.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_ranoaa_lame.rpl b/testdata/iter_ranoaa_lame.rpl index 4808b25a9..0e6d98778 100644 --- a/testdata/iter_ranoaa_lame.rpl +++ b/testdata/iter_ranoaa_lame.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_reclame_one.rpl b/testdata/iter_reclame_one.rpl index 4df9b6594..4a6abfae5 100644 --- a/testdata/iter_reclame_one.rpl +++ b/testdata/iter_reclame_one.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_reclame_two.rpl b/testdata/iter_reclame_two.rpl index de4ef4165..459dcb17f 100644 --- a/testdata/iter_reclame_two.rpl +++ b/testdata/iter_reclame_two.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/localdata.rpl b/testdata/localdata.rpl index 08aec6d7d..a2e7eeba2 100644 --- a/testdata/localdata.rpl +++ b/testdata/localdata.rpl @@ -4,6 +4,7 @@ server: hide-version: no identity: "test-identity" version: "test-version" + rrset-roundrobin: no ; implicit transparent zone should not block id.server local-data: "mydata.server. CH A 10.11.12.13" diff --git a/testdata/rpz_axfr.rpl b/testdata/rpz_axfr.rpl index b5b84bfd3..f57363616 100644 --- a/testdata/rpz_axfr.rpl +++ b/testdata/rpz_axfr.rpl @@ -3,6 +3,7 @@ server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no + rrset-roundrobin: no rpz: name: "rpz.example.com." diff --git a/testdata/rpz_ixfr.rpl b/testdata/rpz_ixfr.rpl index 3f7cb3d35..ca2b62335 100644 --- a/testdata/rpz_ixfr.rpl +++ b/testdata/rpz_ixfr.rpl @@ -3,6 +3,7 @@ server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no + rrset-roundrobin: no rpz: name: "rpz.example.com." diff --git a/testdata/rrset_updated.rpl b/testdata/rrset_updated.rpl index d36ab8cc8..55da56bac 100644 --- a/testdata/rrset_updated.rpl +++ b/testdata/rrset_updated.rpl @@ -2,6 +2,7 @@ ; config options go here. server: minimal-responses: no + rrset-roundrobin: no forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END diff --git a/testdata/val_any.rpl b/testdata/val_any.rpl index 058f44925..4ce195134 100644 --- a/testdata/val_any.rpl +++ b/testdata/val_any.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_any_dname.rpl b/testdata/val_any_dname.rpl index 3957f7bae..6ab3cded7 100644 --- a/testdata/val_any_dname.rpl +++ b/testdata/val_any_dname.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout.rpl b/testdata/val_nsec3_b3_optout.rpl index 0b0569201..9d84be974 100644 --- a/testdata/val_nsec3_b3_optout.rpl +++ b/testdata/val_nsec3_b3_optout.rpl @@ -1,12 +1,13 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_negcache.rpl b/testdata/val_nsec3_b3_optout_negcache.rpl index f8ef6f87d..497a8591a 100644 --- a/testdata/val_nsec3_b3_optout_negcache.rpl +++ b/testdata/val_nsec3_b3_optout_negcache.rpl @@ -1,12 +1,13 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_noce.rpl b/testdata/val_nsec3_b3_optout_noce.rpl index ddcd4c01a..c5601e386 100644 --- a/testdata/val_nsec3_b3_optout_noce.rpl +++ b/testdata/val_nsec3_b3_optout_noce.rpl @@ -1,11 +1,12 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_nonc.rpl b/testdata/val_nsec3_b3_optout_nonc.rpl index c4b044e33..53e8898de 100644 --- a/testdata/val_nsec3_b3_optout_nonc.rpl +++ b/testdata/val_nsec3_b3_optout_nonc.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b4_wild.rpl b/testdata/val_nsec3_b4_wild.rpl index db205ab23..8bf3a5466 100644 --- a/testdata/val_nsec3_b4_wild.rpl +++ b/testdata/val_nsec3_b4_wild.rpl @@ -1,11 +1,12 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b5_wcnodata.rpl b/testdata/val_nsec3_b5_wcnodata.rpl index a10d6b75a..c8be6a48f 100644 --- a/testdata/val_nsec3_b5_wcnodata.rpl +++ b/testdata/val_nsec3_b5_wcnodata.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b5_wcnodata_noce.rpl b/testdata/val_nsec3_b5_wcnodata_noce.rpl index f35eae18d..fdd175f9e 100644 --- a/testdata/val_nsec3_b5_wcnodata_noce.rpl +++ b/testdata/val_nsec3_b5_wcnodata_noce.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b5_wcnodata_nonc.rpl b/testdata/val_nsec3_b5_wcnodata_nonc.rpl index e4c58c62a..6c35ead13 100644 --- a/testdata/val_nsec3_b5_wcnodata_nonc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nonc.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b5_wcnodata_nowc.rpl b/testdata/val_nsec3_b5_wcnodata_nowc.rpl index 27f68d614..8e972ccc8 100644 --- a/testdata/val_nsec3_b5_wcnodata_nowc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nowc.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_wcany.rpl b/testdata/val_nsec3_wcany.rpl index 24bdaeb18..b653f6bde 100644 --- a/testdata/val_nsec3_wcany.rpl +++ b/testdata/val_nsec3_wcany.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nx_nsec3_collision.rpl b/testdata/val_nx_nsec3_collision.rpl index 41cd0d6e7..8ff7e4b06 100644 --- a/testdata/val_nx_nsec3_collision.rpl +++ b/testdata/val_nx_nsec3_collision.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_refer_unsignadd.rpl b/testdata/val_refer_unsignadd.rpl index 90e0f0421..4d073016f 100644 --- a/testdata/val_refer_unsignadd.rpl +++ b/testdata/val_refer_unsignadd.rpl @@ -9,6 +9,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_referglue.rpl b/testdata/val_referglue.rpl index dd7e7de91..54b767156 100644 --- a/testdata/val_referglue.rpl +++ b/testdata/val_referglue.rpl @@ -10,6 +10,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_twocname.rpl b/testdata/val_twocname.rpl index d8e8cf316..bc7c3bcb2 100644 --- a/testdata/val_twocname.rpl +++ b/testdata/val_twocname.rpl @@ -5,6 +5,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no forward-zone: name: "." From 99fd6cf7118389128c8016d211f1f432abcab523 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 15 May 2020 13:13:49 +0200 Subject: [PATCH 224/235] - Cache ECS answers with longest scope of CNAME chain. --- doc/Changelog | 3 +++ edns-subnet/subnetmod.c | 29 ++++++++++++++++++++++------- edns-subnet/subnetmod.h | 7 +++++++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0b2a86aa9..4e0c07c42 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +15 May 2020: Ralph + - Cache ECS answers with longest scope of CNAME chain. + 22 April 2020: George - Explicitly use 'rrset-roundrobin: no' for test cases. diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 37dc550cd..f1b401b90 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -386,8 +386,7 @@ update_cache(struct module_qstate *qstate, int id) rep->flags |= (BIT_RA | BIT_QR); /* fix flags to be sensible for */ rep->flags &= ~(BIT_AA | BIT_CD);/* a reply based on the cache */ addrtree_insert(tree, (addrkey_t*)edns->subnet_addr, - edns->subnet_source_mask, - sq->ecs_server_in.subnet_scope_mask, rep, + edns->subnet_source_mask, sq->max_scope, rep, rep->ttl, *qstate->env->now); lock_rw_unlock(&lru_entry->lock); @@ -543,7 +542,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) c_out->subnet_addr_fam = c_in->subnet_addr_fam; c_out->subnet_source_mask = c_in->subnet_source_mask; memcpy(&c_out->subnet_addr, &c_in->subnet_addr, INET6_SIZE); - c_out->subnet_scope_mask = s_in->subnet_scope_mask; + c_out->subnet_scope_mask = sq->max_scope; /* Limit scope returned to client to scope used for caching. */ if(c_out->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) { if(c_out->subnet_scope_mask > @@ -648,6 +647,19 @@ ecs_query_response(struct module_qstate* qstate, struct dns_msg* response, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; memset(&sq->ecs_server_out, 0, sizeof(sq->ecs_server_out)); + } else if (!sq->track_max_scope && + FLAGS_GET_RCODE(response->rep->flags) == LDNS_RCODE_NOERROR && + response->rep->an_numrrsets > 0 + ) { + struct ub_packed_rrset_key* s = response->rep->rrsets[0]; + if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && + query_dname_compare(qstate->qinfo.qname, + s->rk.dname) == 0) { + /* CNAME response for QNAME. From now on keep track of + * longest received ECS prefix for all queries on this + * qstate. */ + sq->track_max_scope = 1; + } } return 1; } @@ -663,16 +675,19 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, return 1; if((ecs_opt = edns_opt_list_find( qstate->edns_opts_back_in, - qstate->env->cfg->client_subnet_opcode))) { - if(parse_subnet_option(ecs_opt, &sq->ecs_server_in) && - sq->subnet_sent && - sq->ecs_server_in.subnet_validdata) + qstate->env->cfg->client_subnet_opcode)) && + parse_subnet_option(ecs_opt, &sq->ecs_server_in) && + sq->subnet_sent && sq->ecs_server_in.subnet_validdata) { /* Only skip global cache store if we sent an ECS option * and received one back. Answers from non-whitelisted * servers will end up in global cache. Answers for * queries with 0 source will not (unless nameserver * does not support ECS). */ qstate->no_cache_store = 1; + if(!sq->track_max_scope || (sq->track_max_scope && + sq->ecs_server_in.subnet_scope_mask > + sq->max_scope)) + sq->max_scope = sq->ecs_server_in.subnet_scope_mask; } return 1; diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h index e408627b0..27ba2ee74 100644 --- a/edns-subnet/subnetmod.h +++ b/edns-subnet/subnetmod.h @@ -45,6 +45,7 @@ #include "util/alloc.h" #include "util/net_help.h" #include "util/storage/slabhash.h" +#include "util/data/dname.h" #include "edns-subnet/addrtree.h" #include "edns-subnet/edns-subnet.h" @@ -83,6 +84,12 @@ struct subnet_qstate { struct ecs_data ecs_server_out; int subnet_downstream; int subnet_sent; + /** keep track of longest received scope, set after receiving CNAME for + * incoming QNAME. */ + int track_max_scope; + /** longest received scope mask since track_max_scope is set. This value + * is used for caching and answereing to client. */ + uint8_t max_scope; /** has the subnet module been started with no_cache_store? */ int started_no_cache_store; }; From 2c8ebe6206135e7d660857c488cddb25f7f55a22 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 15 May 2020 14:55:36 +0200 Subject: [PATCH 225/235] - Fixed conflicts for PR #93 and make configure, yacc, lex. --- config.h.in | 6 +- doc/Changelog | 4 + util/configlexer.c | 4586 ++++++++++++++++++++++--------------------- util/configparser.c | 2825 +++++++++++++------------- util/configparser.h | 8 +- 5 files changed, 3742 insertions(+), 3687 deletions(-) diff --git a/config.h.in b/config.h.in index dcab05b6a..aa3e6665b 100644 --- a/config.h.in +++ b/config.h.in @@ -866,12 +866,12 @@ /* the version of the windows API enabled */ #undef WINVER +/* Define if you want dynlib module. */ +#undef WITH_DYNLIBMODULE + /* Define if you want Python module. */ #undef WITH_PYTHONMODULE -/* Define if you want dynamic library module. */ -#undef WITH_DYNLIBMODULE - /* Define if you want PyUnbound. */ #undef WITH_PYUNBOUND diff --git a/doc/Changelog b/doc/Changelog index 4e0c07c42..fbbe22641 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +15 May 2020: Wouter + - Merge PR #93: Add dynamic library support. + - Fixed conflicts for PR #93 and make configure, yacc, lex. + 15 May 2020: Ralph - Cache ECS answers with longest scope of CNAME chain. diff --git a/util/configlexer.c b/util/configlexer.c index 09fd4b003..a4ac74066 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 312 -#define YY_END_OF_BUFFER 313 +#define YY_NUM_RULES 314 +#define YY_END_OF_BUFFER 315 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,345 +363,347 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3071] = +static const flex_int16_t yy_accept[3083] = { 0, - 1, 1, 294, 294, 298, 298, 302, 302, 306, 306, - 1, 1, 313, 310, 1, 292, 292, 311, 2, 311, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 294, 295, 295, 296, 311, 298, 299, 299, - 300, 311, 305, 302, 303, 303, 304, 311, 306, 307, - 307, 308, 311, 309, 293, 2, 297, 311, 309, 310, - 0, 1, 2, 2, 2, 2, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 1, 1, 296, 296, 300, 300, 304, 304, 308, 308, + 1, 1, 315, 312, 1, 294, 294, 313, 2, 313, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 296, 297, 297, 298, 313, 300, 301, 301, + 302, 313, 307, 304, 305, 305, 306, 313, 308, 309, + 309, 310, 313, 311, 295, 2, 299, 313, 311, 312, + 0, 1, 2, 2, 2, 2, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 294, 0, 298, 0, 305, 0, 302, 306, 0, 309, - 0, 2, 2, 309, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 296, 0, 300, 0, 307, 0, 304, 308, 0, + 311, 0, 2, 2, 311, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 309, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 311, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 115, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 123, 310, 310, 310, - 310, 310, 310, 310, 309, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 115, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 123, + 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 99, 310, 310, 310, 310, 310, 310, 8, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 116, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 128, 310, 309, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 99, 312, 312, 312, 312, 312, + 312, 8, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 116, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 287, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 128, 312, 311, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 289, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 309, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 57, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 225, 310, 14, 15, 310, - 19, 18, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 311, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 57, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 227, 312, 14, 15, 312, 19, 18, 312, 312, 211, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 122, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 209, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 3, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 122, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 209, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 3, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 310, 310, 310, 310, 310, 310, 310, 281, 310, - 310, 280, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 301, 310, 310, - 310, 310, 310, 310, 310, 56, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, + 312, 312, 312, 312, 312, 283, 312, 312, 282, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 303, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 60, 310, 255, 310, 310, 310, 310, 310, - 310, 310, 310, 288, 289, 310, 310, 310, 310, 310, - 61, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 119, 310, 310, - 310, 310, 310, 310, 310, 310, 198, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 21, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 56, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 60, 312, 257, 312, 312, 312, 312, 312, 312, 312, + 312, 290, 291, 312, 312, 312, 312, 312, 61, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 119, 312, 312, 312, 312, + 312, 312, 312, 312, 198, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 21, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 147, 310, 310, 301, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 97, 310, 310, 310, 310, 310, 310, 310, 263, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 170, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 146, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 147, 312, 312, 303, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 97, 312, + 312, 312, 312, 312, 312, 312, 265, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 170, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 146, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 96, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 32, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 33, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 58, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 121, 310, 310, 310, 310, 310, 114, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 96, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 32, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 33, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 58, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 121, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 59, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 228, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 171, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 47, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 114, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 59, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 230, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 171, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 47, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 246, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 51, 310, 52, 310, 310, 310, 310, - 310, 100, 310, 101, 310, 310, 310, 310, 98, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 7, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 218, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 248, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 51, 312, 52, 312, 312, 312, 312, + 312, 100, 312, 101, 312, 312, 312, 312, 98, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 7, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 149, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 229, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 48, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 190, 310, 189, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 16, 17, 310, 310, + 312, 312, 312, 312, 312, 312, 220, 312, 312, 312, + 312, 149, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 231, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 48, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 190, 312, + 189, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 62, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 197, 310, 310, 310, 310, 310, 310, - 103, 310, 102, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 181, 310, 310, 310, 310, 310, - 310, 310, 310, 129, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 81, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 16, 17, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 62, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 197, 312, 312, 312, 312, 312, + 312, 103, 312, 102, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 181, 312, 312, 312, 312, + 312, 312, 312, 312, 129, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 81, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 85, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 55, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 184, 185, 310, - 310, 310, 257, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 6, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 261, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 210, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 85, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 55, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 184, + 185, 312, 312, 312, 259, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 6, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 282, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 42, 310, 310, 310, 310, - 44, 310, 310, 310, 310, 310, 310, 310, 310, 45, - 310, 310, 310, 310, 310, 310, 310, 310, 177, 310, - 310, 310, 124, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 202, 310, 178, 310, 310, 310, 215, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 46, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 126, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 263, + 312, 312, 312, 312, 312, 312, 284, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 42, 312, 312, + 312, 312, 44, 312, 312, 312, 312, 312, 312, 312, + 312, 45, 312, 312, 312, 312, 312, 312, 312, 312, + 177, 312, 312, 312, 124, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 202, 312, 178, 312, 312, + 312, 217, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 108, 310, 109, 310, 310, 310, 107, 310, 310, 310, - 310, 310, 310, 310, 310, 144, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 245, 310, 310, - 310, 310, 310, 310, 310, 310, 179, 310, 310, 310, - 310, 310, 182, 310, 188, 310, 310, 310, 310, 310, - 214, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 95, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 120, 310, 310, 310, 310, 310, - 310, 53, 310, 310, 310, 26, 310, 310, 310, 310, + 312, 46, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 126, 108, 312, 109, 312, 312, 312, 107, 312, + 312, 312, 312, 312, 312, 312, 312, 144, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 247, + 312, 312, 312, 312, 312, 312, 312, 312, 179, 312, + 312, 312, 312, 312, 182, 312, 188, 312, 312, 312, + 312, 312, 216, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 95, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 120, 312, 312, 312, - 310, 310, 310, 310, 310, 20, 310, 310, 310, 310, - 310, 310, 27, 36, 310, 154, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 70, 72, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 265, 310, 310, 310, 226, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 110, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 143, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 53, 312, 312, 312, 26, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 20, 312, 312, + 312, 312, 312, 312, 27, 36, 312, 154, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 70, 72, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 267, 312, 312, 312, 228, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 110, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 143, 312, - 310, 310, 276, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 148, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 208, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 285, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 165, 310, 310, - 310, 310, 310, 310, 310, 310, 104, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 160, 310, 172, 310, - 310, 310, 310, 310, 132, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 278, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 148, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 208, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 287, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 165, + 312, 312, 312, 312, 312, 312, 312, 312, 104, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 160, 312, - 91, 310, 310, 310, 310, 200, 310, 310, 310, 310, - 310, 310, 216, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 237, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 125, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 164, - 310, 310, 310, 310, 310, 73, 74, 310, 310, 310, - 310, 310, 54, 310, 310, 310, 310, 310, 80, 173, - 310, 191, 310, 219, 310, 310, 183, 258, 310, 310, - 310, 310, 310, 66, 310, 175, 310, 310, 310, 310, - 310, 9, 310, 310, 310, 94, 310, 310, 310, 310, + 172, 312, 312, 312, 312, 312, 132, 312, 312, 312, + 312, 312, 91, 312, 312, 312, 312, 200, 312, 312, + 312, 312, 312, 312, 218, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 239, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 125, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 164, 312, 312, 312, 312, 312, 73, 74, 312, + 312, 312, 312, 312, 54, 312, 312, 312, 312, 312, + 80, 173, 312, 191, 312, 221, 312, 312, 183, 260, + 312, 312, 312, 312, 312, 66, 312, 175, 312, 312, - 250, 310, 310, 310, 310, 199, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 163, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 150, 310, 264, 310, - 310, 310, 310, 236, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 210, 310, 310, 310, 310, - 256, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 9, 312, 312, 312, 94, 312, 312, + 312, 312, 252, 312, 312, 312, 312, 199, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 163, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 150, 312, + 266, 312, 312, 312, 312, 238, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 212, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 279, 310, 174, 310, 310, - 310, 310, 310, 310, 310, 65, 67, 310, 310, 310, - 310, 310, 310, 310, 93, 310, 310, 310, 310, 248, - 310, 310, 310, 310, 260, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 204, 34, 28, 30, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 35, - 310, 29, 31, 310, 310, 310, 310, 310, 310, 310, - 310, 90, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 206, + 312, 312, 258, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 281, 312, 174, + 312, 312, 312, 312, 312, 312, 312, 65, 67, 312, + 312, 312, 312, 312, 312, 312, 93, 312, 312, 312, + 312, 250, 312, 312, 312, 312, 262, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 204, 34, + 28, 30, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 35, 312, 29, 31, 312, 312, 312, 312, 312, + 312, 312, 312, 90, 312, 312, 312, 312, 312, 312, - 203, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 64, 310, - 310, 127, 310, 111, 310, 310, 310, 310, 310, 310, - 310, 310, 145, 13, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 274, 310, 277, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 12, 310, 310, 22, - 310, 310, 310, 254, 310, 310, 310, 310, 262, 310, - 310, 310, 68, 310, 212, 310, 310, 310, 310, 205, - 310, 310, 63, 310, 310, 310, 310, 23, 310, 43, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 206, 203, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 64, 312, 312, 127, 312, 111, 312, 312, 312, 312, + 312, 312, 312, 312, 145, 13, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 276, 312, 279, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 12, 312, + 312, 22, 312, 312, 312, 256, 312, 312, 312, 312, + 264, 312, 312, 312, 68, 312, 214, 312, 312, 312, + 312, 205, 312, 312, 63, 312, 312, 312, 312, 23, - 310, 310, 159, 158, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 207, 201, 310, 217, 310, 310, 266, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 75, 310, 310, - 310, 249, 310, 310, 310, 310, 187, 310, 310, 310, - 310, 211, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 283, 284, 156, 310, 310, 69, 310, 310, 310, - 310, 166, 310, 310, 105, 106, 310, 310, 310, 310, - 151, 310, 153, 310, 192, 310, 310, 310, 310, 157, + 312, 43, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 159, 158, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 207, 201, 312, 219, 312, + 312, 268, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 75, + 312, 312, 312, 251, 312, 312, 312, 312, 187, 312, + 312, 312, 312, 213, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 285, 286, 156, 312, 312, 69, 312, + 312, 312, 312, 166, 312, 312, 105, 106, 312, 312, - 310, 310, 220, 310, 310, 310, 310, 310, 310, 310, - 134, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 227, 310, 310, 310, 310, 310, 310, 310, - 24, 310, 259, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 193, 310, 310, 247, 310, 278, - 310, 186, 310, 310, 310, 310, 49, 310, 310, 310, - 310, 4, 310, 310, 310, 310, 118, 133, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 223, 37, 38, 310, - 310, 310, 310, 310, 310, 310, 267, 310, 310, 310, + 312, 312, 151, 312, 153, 312, 192, 312, 312, 312, + 312, 157, 312, 312, 222, 312, 312, 312, 312, 312, + 312, 312, 134, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 229, 312, 312, 312, 312, 312, + 312, 312, 24, 312, 261, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 193, 312, 312, 249, + 312, 280, 312, 186, 312, 312, 312, 312, 49, 312, + 312, 312, 312, 4, 312, 312, 312, 312, 118, 133, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 225, 37, - 310, 310, 310, 235, 310, 310, 310, 310, 310, 310, - 310, 196, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 78, 310, 50, 253, 310, 224, 310, 310, 310, - 310, 11, 310, 310, 310, 310, 310, 310, 117, 310, - 310, 310, 310, 194, 82, 310, 40, 310, 310, 310, - 310, 310, 310, 310, 310, 162, 310, 310, 310, 310, - 310, 136, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 234, 310, 310, 310, 310, 130, 310, 310, 112, - 113, 310, 310, 310, 84, 88, 83, 310, 76, 310, - 310, 310, 310, 310, 10, 310, 310, 310, 251, 286, + 38, 312, 312, 312, 312, 312, 312, 312, 269, 312, + 312, 312, 312, 312, 312, 237, 312, 312, 312, 312, + 312, 312, 312, 196, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 78, 312, 50, 255, 312, 226, 312, + 312, 312, 312, 11, 312, 312, 312, 312, 312, 312, + 117, 312, 312, 312, 312, 194, 82, 312, 40, 312, + 312, 312, 312, 312, 312, 312, 312, 162, 312, 312, + 312, 312, 312, 136, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 236, 312, 312, 312, 312, 130, 312, + 312, 112, 113, 312, 312, 312, 84, 88, 83, 312, - 310, 310, 310, 310, 291, 39, 310, 310, 310, 310, - 310, 161, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 89, 87, 310, 77, 275, 310, - 310, 310, 310, 310, 310, 310, 180, 310, 310, 310, - 310, 310, 195, 310, 310, 310, 310, 310, 310, 310, - 310, 152, 71, 310, 310, 310, 310, 310, 268, 310, - 310, 310, 310, 310, 310, 310, 231, 310, 310, 230, - 131, 310, 86, 137, 138, 141, 142, 139, 140, 79, - 310, 252, 310, 310, 310, 310, 155, 310, 310, 310, + 76, 312, 312, 312, 312, 312, 10, 312, 312, 312, + 253, 288, 312, 312, 312, 312, 293, 39, 312, 312, + 312, 312, 312, 161, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 89, 87, 312, 77, + 277, 312, 312, 312, 312, 312, 312, 312, 180, 312, + 312, 312, 312, 312, 195, 312, 312, 312, 312, 312, + 312, 312, 312, 152, 71, 312, 312, 312, 312, 312, + 270, 312, 312, 312, 312, 312, 312, 312, 233, 312, + 312, 232, 131, 312, 86, 137, 138, 141, 142, 139, - 310, 310, 222, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 168, 167, 41, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 92, 310, 221, - 310, 244, 272, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 5, 310, 310, 213, 310, - 310, 273, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 232, 25, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 233, 310, 310, 310, 135, + 140, 79, 312, 254, 312, 312, 312, 312, 155, 312, + 312, 312, 312, 312, 224, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 168, 167, 41, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 92, + 312, 223, 312, 246, 274, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 5, 312, 312, + 215, 312, 312, 275, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 234, 25, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 169, 310, - 176, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 269, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 290, 310, - 310, 240, 310, 310, 310, 310, 310, 270, 310, 310, - 310, 310, 310, 310, 271, 310, 310, 310, 238, 310, - 241, 242, 310, 310, 310, 310, 310, 239, 243, 0 + 312, 312, 312, 312, 312, 312, 312, 235, 312, 312, + 312, 135, 312, 312, 312, 312, 312, 312, 312, 312, + 169, 312, 176, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 271, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 292, 312, 312, 242, 312, 312, 312, 312, 312, 272, + 312, 312, 312, 312, 312, 312, 273, 312, 312, 312, + 240, 312, 243, 244, 312, 312, 312, 312, 312, 241, + 245, 0 } ; static const YY_CHAR yy_ec[256] = @@ -744,693 +746,697 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3085] = +static const flex_int16_t yy_base[3097] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2197, 2057, 81, 5988, 5988, 5988, 96, 52, - 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1959, 5988, 5988, 5988, 107, 1846, 5988, 5988, - 5988, 165, 1569, 1315, 5988, 5988, 5988, 211, 1269, 5988, - 5988, 5988, 180, 948, 5988, 217, 5988, 221, 168, 767, - 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, - 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, - 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, + 90, 112, 1616, 1559, 81, 6016, 6016, 6016, 96, 52, + 106, 63, 107, 128, 70, 116, 123, 134, 57, 88, + 76, 145, 151, 114, 158, 97, 169, 181, 179, 188, + 194, 129, 1447, 6016, 6016, 6016, 135, 1315, 6016, 6016, + 6016, 146, 1142, 1110, 6016, 6016, 6016, 220, 1034, 6016, + 6016, 6016, 171, 903, 6016, 224, 6016, 228, 157, 818, + 232, 167, 0, 239, 0, 0, 165, 205, 85, 166, + 226, 190, 233, 234, 228, 240, 241, 242, 98, 130, + 250, 243, 245, 248, 258, 256, 262, 267, 273, 251, - 279, 262, 282, 285, 270, 272, 291, 293, 290, 299, - 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, - 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, - 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, - 723, 379, 595, 381, 503, 388, 450, 365, 392, 278, - 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, - 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, - 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, - 453, 454, 446, 455, 456, 458, 461, 462, 477, 464, - 465, 463, 486, 472, 488, 490, 487, 498, 499, 475, + 276, 272, 264, 281, 285, 275, 284, 289, 290, 287, + 302, 301, 303, 304, 307, 310, 312, 305, 315, 313, + 326, 319, 318, 324, 332, 327, 204, 329, 336, 331, + 342, 347, 348, 351, 353, 356, 360, 359, 352, 372, + 361, 721, 372, 711, 388, 597, 392, 432, 320, 383, + 235, 396, 400, 0, 392, 394, 402, 379, 398, 401, + 403, 404, 405, 406, 410, 407, 408, 425, 418, 423, + 429, 437, 435, 432, 439, 422, 442, 444, 445, 447, + 448, 457, 454, 460, 456, 462, 463, 464, 466, 467, + 483, 469, 473, 476, 485, 490, 494, 502, 486, 504, - 506, 504, 511, 516, 512, 489, 514, 501, 517, 491, - 518, 515, 522, 524, 525, 529, 530, 537, 534, 535, - 538, 532, 547, 543, 552, 544, 551, 555, 548, 558, - 566, 569, 549, 576, 559, 572, 573, 578, 581, 585, - 582, 580, 583, 590, 587, 589, 591, 593, 592, 600, - 610, 607, 608, 620, 609, 605, 616, 617, 618, 596, - 628, 627, 623, 632, 638, 629, 636, 639, 641, 643, - 642, 644, 646, 656, 649, 659, 652, 666, 661, 667, - 664, 676, 651, 662, 672, 673, 674, 678, 677, 679, - 684, 687, 688, 690, 691, 685, 698, 696, 700, 713, + 505, 495, 513, 510, 517, 518, 519, 508, 522, 509, + 524, 520, 523, 525, 527, 534, 533, 481, 535, 545, + 536, 540, 546, 537, 553, 549, 557, 552, 556, 175, + 554, 562, 566, 570, 563, 571, 574, 575, 576, 579, + 587, 590, 583, 580, 588, 592, 591, 598, 594, 595, + 596, 607, 615, 608, 611, 618, 617, 620, 621, 622, + 623, 599, 633, 625, 635, 629, 641, 626, 642, 645, + 640, 647, 648, 649, 650, 652, 660, 655, 663, 664, + 671, 668, 673, 670, 682, 658, 667, 677, 679, 680, + 683, 684, 687, 688, 690, 693, 695, 696, 697, 706, - 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, - 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 5988, 760, 773, 771, 774, - 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 5988, 815, 807, 849, - 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, - 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, - 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, - 893, 895, 902, 905, 904, 908, 916, 909, 915, 917, - 921, 922, 925, 927, 929, 923, 926, 933, 950, 931, + 701, 703, 717, 705, 710, 718, 719, 727, 712, 720, + 739, 744, 745, 733, 731, 747, 749, 752, 754, 760, + 755, 757, 763, 764, 765, 766, 773, 768, 6016, 772, + 774, 782, 784, 786, 790, 787, 796, 794, 777, 804, + 806, 802, 810, 832, 788, 800, 809, 811, 814, 6016, + 822, 816, 856, 827, 820, 840, 837, 836, 844, 845, + 838, 846, 867, 850, 849, 852, 879, 854, 862, 864, + 874, 880, 878, 887, 890, 886, 888, 894, 898, 895, + 896, 897, 907, 899, 901, 909, 910, 911, 914, 918, + 923, 928, 921, 915, 931, 926, 932, 936, 939, 933, - 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, - 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, - 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 5988, 1007, 1009, 1011, 1012, 1013, 1010, 5988, 1014, 1015, - 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, - 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 5988, 1071, 1077, 1080, - 1079, 1085, 1082, 1090, 1097, 1100, 1103, 1106, 1116, 1093, - 1117, 1111, 1113, 1072, 1118, 1123, 1125, 1126, 1127, 1128, - 1129, 1130, 1132, 1131, 1137, 1139, 5988, 1144, 1154, 1155, + 937, 943, 955, 950, 951, 959, 961, 960, 953, 966, + 962, 969, 972, 970, 978, 980, 981, 976, 982, 984, + 987, 993, 986, 988, 995, 997, 996, 1000, 1005, 1006, + 1010, 990, 1018, 1001, 6016, 1020, 1012, 1014, 1016, 1024, + 1026, 6016, 1027, 1028, 1029, 1036, 1031, 1041, 1032, 1039, + 1046, 1049, 1042, 1050, 1061, 1051, 1059, 1064, 1060, 1063, + 1066, 1069, 1072, 1070, 1077, 1073, 1067, 935, 1080, 1094, + 6016, 1079, 1081, 1085, 1084, 1091, 1097, 1106, 1104, 1112, + 1105, 1109, 1122, 1123, 1125, 1126, 1130, 1086, 1129, 1131, + 1133, 1134, 1136, 1137, 1135, 1138, 1144, 1140, 1145, 1141, - 1136, 1146, 1156, 1157, 1159, 1160, 1162, 1163, 1165, 1164, - 1169, 1179, 1170, 1183, 1180, 1181, 1185, 1186, 1188, 1187, - 1189, 1191, 1203, 1196, 1195, 1211, 1206, 1213, 1215, 1222, - 1204, 1217, 1218, 1219, 1221, 1224, 1226, 1228, 1230, 1232, - 1239, 1237, 1234, 1235, 1242, 1250, 1243, 1245, 1253, 1246, - 1254, 1257, 1247, 1266, 1267, 1260, 1258, 5988, 1276, 1268, - 1278, 1279, 1280, 1284, 1286, 1282, 1288, 813, 1289, 1290, - 1292, 1294, 1299, 1296, 1297, 1300, 1304, 1307, 1311, 1318, - 1322, 1323, 1324, 1310, 1325, 1333, 1330, 1337, 1338, 1340, - 1348, 1336, 1343, 1346, 1350, 1334, 1352, 1354, 1355, 1357, + 6016, 1152, 1158, 1169, 1155, 1164, 1165, 1166, 1168, 1170, + 1171, 1172, 1174, 1173, 1178, 1192, 1182, 1193, 1189, 1195, + 1190, 1191, 1197, 1196, 1200, 1205, 1213, 1210, 1215, 1218, + 1226, 1225, 1228, 1235, 1237, 1211, 1230, 1203, 1222, 1234, + 1240, 1239, 1238, 1245, 1246, 1253, 1248, 1249, 1251, 1254, + 1263, 1255, 1258, 1265, 1262, 1269, 1266, 1259, 1271, 1278, + 1279, 1281, 6016, 1288, 1285, 1286, 1287, 1290, 1297, 1298, + 1292, 1299, 1302, 1301, 1305, 1304, 1307, 1311, 1312, 1316, + 1318, 1321, 1325, 1322, 1323, 1337, 1336, 1338, 1329, 1330, + 1346, 1345, 1348, 1349, 1351, 1359, 1341, 1355, 1357, 1366, - 1360, 1368, 1369, 1362, 1372, 1379, 1380, 1364, 1382, 1376, - 1383, 1314, 1370, 1387, 1390, 1391, 1398, 1393, 1394, 1399, - 1400, 1401, 1402, 1396, 1407, 1410, 1406, 1412, 1413, 1416, - 1423, 1418, 1417, 1425, 1426, 1428, 1429, 1437, 1430, 1438, - 1439, 1441, 1440, 1448, 1446, 1449, 1450, 1457, 1455, 1459, - 1456, 1465, 1467, 1469, 1471, 1472, 1473, 1475, 1474, 1478, - 1484, 1477, 1483, 1489, 1493, 1490, 1495, 1496, 1499, 1500, - 5988, 1501, 1508, 1503, 1506, 1512, 1513, 1514, 1521, 1517, - 1519, 1516, 1518, 1522, 1544, 5988, 1530, 5988, 5988, 1529, - 5988, 5988, 1527, 1531, 1535, 1548, 1539, 1554, 1547, 1541, + 1361, 1363, 1364, 1365, 1370, 1367, 1375, 1379, 1382, 1381, + 1389, 1390, 1384, 1395, 1387, 1396, 1392, 1399, 1400, 1401, + 1402, 1411, 1403, 1404, 1408, 1412, 1414, 1415, 1416, 1421, + 1425, 1424, 1429, 1426, 1430, 1431, 1433, 1437, 1439, 1440, + 1442, 1443, 1446, 1454, 1452, 1444, 1462, 1450, 1465, 1466, + 1467, 1468, 1469, 1472, 1471, 1474, 1475, 1483, 1484, 1485, + 1488, 1487, 1492, 1490, 1497, 1489, 1498, 1499, 1503, 1505, + 1506, 1510, 1513, 1516, 1511, 6016, 1507, 1523, 1521, 1524, + 1525, 1529, 1530, 1538, 1531, 1533, 1534, 1535, 1536, 1561, + 6016, 1542, 6016, 6016, 1545, 6016, 6016, 1544, 1543, 6016, - 1557, 1550, 1567, 1572, 1528, 1560, 1562, 1568, 1575, 1583, - 1585, 1586, 1588, 1594, 1596, 1597, 1599, 1606, 1607, 1565, - 1589, 1598, 1610, 1612, 1611, 1613, 1617, 1615, 1620, 1616, - 1623, 1618, 1628, 1633, 1625, 1642, 5988, 1639, 1643, 1651, - 1647, 1654, 1646, 1650, 1653, 1627, 1658, 1655, 1659, 1660, - 1662, 1664, 1667, 1670, 1668, 1678, 1671, 5988, 1673, 1675, - 1674, 1680, 1686, 1688, 1687, 1689, 1681, 1693, 1694, 1705, - 1696, 1700, 1701, 1708, 1709, 1710, 5988, 1712, 1719, 1711, - 1722, 1716, 1723, 1724, 1725, 1726, 1729, 1728, 1730, 1731, - 1735, 1742, 1739, 1740, 1741, 1745, 1750, 1753, 1757, 1764, + 1558, 1547, 1546, 1567, 1571, 1565, 1551, 1574, 1555, 1584, + 1589, 1577, 1579, 1585, 1586, 1592, 1598, 1587, 1604, 1599, + 1609, 1612, 1613, 1615, 1619, 1621, 1622, 1606, 1624, 1626, + 1629, 1627, 1630, 1632, 1636, 1637, 1633, 1640, 1639, 1649, + 1653, 1642, 1660, 6016, 1657, 1669, 1670, 1666, 1673, 1665, + 1672, 1674, 1645, 1656, 1675, 1676, 1679, 1680, 1677, 1686, + 1681, 1689, 1698, 1688, 6016, 1691, 1693, 1695, 1699, 1701, + 1703, 1708, 1709, 1705, 1711, 1712, 1722, 1714, 1717, 1718, + 1724, 1726, 1728, 6016, 1727, 1735, 1736, 1738, 1740, 1742, + 1744, 1741, 1745, 1746, 1747, 1748, 1749, 1753, 1760, 1759, - 1755, 1761, 1758, 1765, 1766, 1768, 1769, 1771, 1780, 1782, - 1779, 1783, 1772, 1787, 1795, 1794, 1784, 1785, 1796, 1799, - 1806, 1808, 1809, 1800, 1804, 1816, 1811, 1814, 1815, 1819, - 1822, 1823, 1825, 1826, 1828, 1832, 1830, 1834, 5988, 1836, - 1837, 5988, 1839, 1840, 1862, 1841, 1843, 1848, 1845, 1849, - 1854, 1855, 1866, 1864, 1868, 1885, 1872, 1877, 1875, 1887, - 1876, 1889, 1891, 1895, 1896, 1897, 1904, 1906, 1857, 1912, - 1914, 1899, 1901, 1909, 1928, 1911, 1913, 1917, 1925, 1932, - 1919, 1922, 1926, 1938, 1939, 1944, 1941, 5988, 1952, 1950, - 1949, 1951, 1961, 1960, 1956, 5988, 1962, 1963, 1966, 1973, + 1766, 1756, 1769, 1771, 1773, 1774, 1781, 1776, 1782, 1784, + 1785, 1786, 1788, 1789, 1792, 1800, 1801, 1797, 1805, 1798, + 1809, 1813, 1815, 1802, 1814, 1817, 1816, 1823, 1831, 1827, + 1820, 1828, 1835, 1832, 1840, 1833, 1842, 1844, 1845, 1846, + 1848, 1836, 1853, 1854, 1855, 6016, 1856, 1857, 6016, 1861, + 1862, 1884, 1863, 1865, 1867, 1876, 1866, 1868, 1870, 1878, + 1894, 1888, 1904, 1896, 1897, 1906, 1907, 1908, 1909, 1911, + 1915, 1916, 1877, 1917, 1924, 1932, 1928, 1934, 1937, 1919, + 1933, 1935, 1954, 1938, 1939, 1942, 1945, 1946, 1943, 1951, + 1949, 1958, 1964, 1966, 1967, 6016, 1975, 1976, 1970, 1972, - 1969, 1970, 1974, 1915, 1976, 1977, 1980, 1984, 1985, 1981, - 1983, 2001, 5988, 1986, 5988, 1991, 1988, 1996, 1998, 1999, - 2003, 2004, 2006, 5988, 5988, 2014, 2007, 2020, 2028, 2010, - 5988, 2013, 2031, 2032, 2024, 2026, 2034, 2035, 2037, 2039, - 2038, 2047, 2042, 2049, 2044, 2045, 2046, 5988, 2058, 2048, - 2063, 2065, 2056, 2066, 2073, 2064, 5988, 2074, 2067, 2075, - 2085, 2087, 2082, 2077, 2089, 2093, 2084, 2088, 2090, 2096, - 2098, 2103, 2106, 2104, 2108, 2112, 2120, 5988, 2101, 2105, - 2121, 2118, 2127, 2122, 2124, 2116, 2128, 2129, 2135, 2130, - 2136, 2137, 2139, 2146, 2148, 2144, 2145, 2152, 2143, 2153, + 1984, 1981, 1982, 6016, 1987, 1988, 1990, 1998, 1991, 1993, + 1994, 1995, 2002, 2003, 2005, 2004, 2009, 2008, 2007, 2025, + 6016, 2010, 6016, 2020, 2011, 2021, 2022, 2027, 2028, 2030, + 2032, 6016, 6016, 2033, 2039, 2041, 2050, 2046, 6016, 2047, + 2055, 2052, 2057, 2051, 2058, 2061, 2062, 2066, 2067, 2070, + 2068, 2075, 2071, 2076, 2073, 6016, 2089, 1940, 2085, 2091, + 2083, 2093, 2095, 2072, 6016, 2097, 2094, 2101, 2108, 2105, + 2106, 2109, 2111, 2112, 2116, 2117, 2118, 2119, 2120, 2129, + 2130, 2121, 2132, 2135, 2131, 6016, 2128, 2139, 2147, 2143, + 2145, 2142, 2149, 2150, 2152, 2153, 2154, 1879, 2155, 2160, - 2156, 2161, 2155, 2160, 2163, 2164, 5988, 2165, 2171, 124, - 2166, 2172, 2174, 2176, 2179, 2178, 2175, 2191, 2196, 2192, - 2198, 2194, 2193, 2201, 2203, 2202, 2204, 2205, 2206, 2209, - 5988, 2211, 2213, 2214, 2216, 2218, 2219, 2229, 5988, 2225, - 2230, 2237, 2233, 2238, 2241, 2242, 2246, 2247, 2249, 2250, - 2253, 2251, 2255, 5988, 2260, 2263, 2265, 2257, 2266, 2272, - 2273, 2275, 2278, 2267, 2279, 2280, 2281, 2284, 2283, 2285, - 2287, 2292, 2289, 2294, 2297, 2299, 5988, 2307, 2309, 2303, - 2300, 2310, 2312, 2319, 2316, 2322, 2321, 2325, 2337, 2327, - 2329, 2339, 2330, 2343, 2332, 2353, 2344, 2352, 2354, 2351, + 2161, 2169, 2170, 2162, 2174, 2166, 2167, 2175, 2176, 2182, + 2181, 2183, 2184, 2185, 6016, 2187, 2191, 147, 2193, 2194, + 2196, 2195, 2202, 2198, 2201, 2218, 2219, 2215, 2214, 2217, + 2223, 2224, 2225, 2226, 2227, 1751, 2228, 2229, 6016, 2205, + 2231, 2232, 2234, 2233, 2235, 2242, 6016, 2251, 2254, 2263, + 2253, 2257, 2264, 2265, 2268, 2266, 2269, 2270, 2273, 2272, + 2276, 2278, 6016, 2280, 2283, 2290, 2281, 2291, 2236, 2293, + 2292, 2294, 2298, 2299, 2300, 2303, 2304, 2305, 2306, 2308, + 2312, 2313, 2314, 2319, 2320, 6016, 2331, 2321, 2322, 2323, + 2332, 2333, 2342, 2338, 2340, 2346, 2347, 2360, 2349, 2344, - 2358, 2361, 2362, 2363, 2365, 2367, 2368, 2369, 2370, 2377, - 2384, 2375, 2385, 2386, 2390, 2396, 2392, 5988, 2397, 2398, - 2399, 2405, 2416, 2409, 2407, 2419, 2408, 2411, 2412, 2421, - 2423, 2432, 2427, 2425, 2430, 2434, 2435, 2436, 2438, 2441, - 2442, 2451, 2443, 2453, 2220, 5988, 2376, 2454, 2446, 2448, - 2461, 2455, 2463, 2467, 2464, 2470, 2471, 2473, 2474, 2476, - 2477, 2478, 2480, 2482, 2481, 5988, 2485, 2486, 2490, 2493, - 2498, 2496, 2500, 2506, 2508, 2510, 2502, 2512, 2514, 2513, - 5988, 2522, 2523, 2519, 2531, 2527, 2528, 2529, 2533, 2530, - 5988, 2534, 2535, 2543, 2544, 2539, 5988, 2548, 2541, 2546, + 2356, 2351, 2358, 2355, 2367, 2366, 2370, 2376, 2372, 2380, + 2382, 2374, 2378, 2386, 2384, 2392, 2388, 2389, 2405, 2406, + 2398, 2408, 2401, 2390, 2416, 2409, 6016, 2418, 2411, 2423, + 2424, 2431, 2427, 2428, 2429, 2432, 2435, 2437, 2438, 2439, + 2448, 2451, 2447, 2440, 2458, 2445, 2460, 2443, 2449, 2462, + 2465, 2466, 2471, 2473, 6016, 2476, 2472, 2468, 2480, 2483, + 2478, 2485, 2490, 2488, 2486, 2492, 2495, 2496, 2497, 2499, + 2501, 2502, 2503, 2504, 6016, 2509, 2508, 2510, 2514, 2520, + 2518, 2524, 2527, 2530, 2533, 2517, 2534, 2536, 2537, 6016, + 2545, 2547, 2544, 2548, 2546, 2551, 2552, 2554, 2556, 6016, - 2551, 2553, 2552, 2556, 2549, 2559, 2560, 2568, 2565, 2562, - 2571, 5988, 2572, 2580, 2575, 2577, 2581, 2582, 2583, 2587, - 2592, 2588, 2594, 5988, 2601, 2599, 2604, 2612, 2607, 2609, - 2610, 2613, 2614, 2616, 2617, 5988, 2619, 2620, 2622, 2623, - 2625, 2627, 2630, 2642, 2631, 2634, 2641, 2639, 2644, 2646, - 2647, 2650, 2651, 2648, 2658, 2660, 2662, 2663, 2664, 2668, - 2676, 2678, 2674, 2679, 5988, 2682, 2683, 2684, 2671, 2686, - 2688, 2690, 2691, 2694, 2696, 2701, 2695, 2698, 2708, 2711, - 2699, 2712, 2715, 2716, 2718, 2720, 2721, 2722, 2723, 2730, - 2726, 2728, 2738, 2729, 2733, 2743, 2736, 2744, 2745, 2746, + 2557, 2558, 2565, 2566, 2561, 6016, 2568, 2564, 2569, 2571, + 2572, 2573, 2574, 2579, 2580, 2582, 2585, 2588, 2592, 2593, + 6016, 2594, 2602, 2603, 2595, 2606, 2597, 2607, 2608, 2612, + 2616, 2610, 6016, 2625, 2627, 2628, 2635, 2630, 2632, 2633, + 2636, 2637, 2638, 2640, 2643, 6016, 2646, 2644, 2647, 2652, + 2650, 2648, 2655, 2667, 2657, 2659, 2668, 2664, 2670, 2671, + 2672, 2673, 2676, 2675, 2683, 2686, 2684, 2688, 2689, 2691, + 2701, 2703, 2704, 2706, 6016, 2709, 2698, 2711, 2700, 2712, + 2713, 2714, 2715, 2717, 2719, 2724, 2722, 2723, 2731, 2739, + 2732, 2734, 2740, 2741, 2744, 2743, 2745, 2746, 2747, 2755, - 2747, 2749, 2751, 2752, 2756, 2750, 2758, 2768, 2769, 2771, - 2760, 2772, 2776, 2777, 5988, 2780, 2782, 2778, 2784, 2785, - 2791, 2792, 2794, 2795, 2786, 2800, 2802, 2803, 2808, 2809, - 2811, 2818, 2814, 5988, 2815, 5988, 2816, 2817, 2819, 2829, - 2821, 5988, 2825, 5988, 2832, 2839, 2826, 2830, 5988, 2840, - 2834, 2836, 2847, 2844, 2849, 2850, 2851, 2852, 2857, 2853, - 2855, 2860, 2861, 2863, 2865, 2867, 2871, 2868, 2878, 2880, - 2872, 2881, 2874, 2887, 2889, 2888, 2890, 5988, 2900, 2891, - 2894, 2897, 2901, 2902, 2903, 2905, 2906, 2911, 2912, 2913, - 2914, 2920, 2919, 2929, 2925, 2936, 5988, 2928, 2933, 2935, + 2751, 2750, 2763, 2754, 2761, 2768, 2758, 2769, 2770, 2771, + 2772, 2774, 2778, 2779, 2781, 2775, 2783, 2792, 2794, 2796, + 2785, 2797, 2801, 2802, 6016, 2805, 2807, 2803, 2809, 2810, + 2816, 2817, 2819, 2820, 2811, 2825, 2827, 2828, 2833, 2834, + 2836, 2843, 2839, 6016, 2840, 6016, 2841, 2842, 2844, 2854, + 2846, 6016, 2850, 6016, 2857, 2864, 2851, 2855, 6016, 2865, + 2859, 2861, 2872, 2869, 2874, 2875, 2876, 2877, 2882, 2878, + 2880, 2885, 2886, 2888, 2890, 2892, 2896, 2893, 2903, 2905, + 2897, 2906, 2899, 2912, 2914, 2913, 2915, 6016, 2925, 2916, + 2919, 2922, 2926, 2927, 2928, 2930, 2931, 2936, 2937, 2938, - 2937, 5988, 2939, 2938, 2940, 2946, 2949, 2948, 2950, 2952, - 2956, 2958, 2951, 2961, 2959, 2968, 2969, 5988, 2974, 2975, - 2960, 2978, 2982, 2984, 2986, 2990, 2998, 2994, 2993, 2977, - 2996, 2997, 3000, 3007, 3008, 3004, 3011, 3010, 3013, 3020, - 3016, 3012, 3014, 3022, 3023, 3024, 3027, 3028, 3031, 3026, - 3029, 3036, 3032, 5988, 3044, 3035, 3040, 3047, 3051, 3054, - 3052, 3056, 3058, 3057, 3062, 3061, 3059, 5988, 3063, 5988, - 3060, 3077, 3065, 3082, 3079, 3071, 3084, 3093, 3086, 3088, - 3090, 3096, 3094, 3098, 3097, 3100, 3103, 3102, 3110, 3109, - 3105, 3116, 3117, 3118, 3120, 3121, 5988, 5988, 3122, 3123, + 2939, 2945, 2944, 2954, 2950, 2961, 6016, 2953, 2958, 2960, + 2962, 6016, 2964, 2963, 2965, 2971, 2974, 2973, 2975, 2977, + 2981, 2983, 2976, 2986, 2984, 2993, 2994, 6016, 2999, 3000, + 2985, 3003, 3002, 3015, 3007, 3016, 3018, 3020, 3021, 3011, + 3022, 3023, 3025, 3027, 3034, 3035, 3031, 3038, 3033, 3039, + 3047, 3043, 3037, 3041, 3049, 3050, 3051, 3054, 3057, 3058, + 3053, 3059, 3060, 3062, 6016, 3068, 3071, 3072, 3075, 3063, + 3080, 3081, 3082, 3084, 3086, 3085, 3087, 3088, 6016, 3095, + 6016, 3089, 3103, 3098, 3108, 3090, 3109, 3113, 3112, 3117, + 3118, 3119, 3120, 3121, 3122, 3123, 3126, 3134, 3133, 3135, - 3126, 3124, 3128, 3134, 3130, 3142, 3138, 3144, 3146, 3148, - 3156, 5988, 3149, 3153, 3152, 3159, 3171, 3157, 3161, 3176, - 3172, 3179, 3178, 5988, 3169, 3180, 3187, 3182, 3183, 3191, - 5988, 3188, 5988, 3190, 3193, 3197, 3198, 3200, 3201, 3202, - 3203, 3211, 3221, 3224, 3206, 3223, 3208, 3220, 3225, 3226, - 3233, 3229, 3230, 3231, 5988, 3235, 3236, 3237, 3199, 3240, - 3242, 3243, 3248, 5988, 3250, 3254, 3255, 3257, 3258, 3260, - 3261, 3263, 3264, 3266, 3262, 3267, 3279, 3268, 3272, 3282, - 3284, 3286, 3292, 5988, 3293, 3285, 3301, 3297, 3299, 3300, - 3303, 3304, 3305, 3307, 3308, 3309, 3310, 3316, 3315, 3312, + 3148, 3131, 3128, 3136, 3139, 3144, 3149, 6016, 6016, 3150, + 3152, 3155, 3157, 3158, 3159, 3162, 3169, 3166, 3165, 3168, + 3172, 3180, 6016, 3182, 3176, 3184, 3187, 3194, 3185, 3198, + 3199, 3195, 3207, 3202, 6016, 3204, 3205, 3215, 3210, 3211, + 3218, 6016, 3213, 6016, 3216, 3217, 3222, 3225, 3226, 3227, + 3228, 3229, 3232, 3244, 3247, 3233, 3249, 3237, 3245, 3250, + 3251, 3258, 3254, 3255, 3256, 6016, 3260, 3261, 3262, 3265, + 3267, 3268, 3275, 3277, 6016, 3278, 3280, 3282, 3283, 3285, + 3287, 3288, 3289, 3291, 3294, 3290, 3292, 3305, 3298, 3297, + 3307, 3317, 3308, 3319, 6016, 3320, 3314, 3327, 3329, 3322, - 3313, 3318, 3329, 3331, 3332, 3321, 3339, 3323, 3337, 3342, - 3340, 3343, 3348, 3349, 3352, 3354, 3346, 3368, 3369, 3355, - 3357, 3372, 3359, 3379, 3374, 5988, 3381, 3365, 3386, 3382, - 3384, 3389, 3390, 3398, 3396, 3385, 3393, 3400, 3397, 5988, - 3412, 3402, 3399, 3403, 3404, 3424, 3420, 3421, 3422, 3426, - 3423, 3427, 3430, 3431, 3432, 3435, 3436, 5988, 5988, 3438, - 3439, 3442, 5988, 3445, 3440, 3452, 3448, 3444, 3455, 3459, - 3458, 3457, 3462, 3460, 3468, 5988, 3469, 3477, 3472, 3473, - 3481, 3482, 3479, 3485, 3487, 3488, 3491, 3489, 3494, 3493, - 3495, 3498, 3506, 3509, 3502, 3504, 3512, 5988, 3505, 3507, + 3324, 3330, 3331, 3332, 3335, 3337, 3336, 3338, 3340, 3342, + 3339, 3349, 3343, 3356, 3345, 3359, 3365, 3366, 3346, 6016, + 3362, 3369, 3370, 3373, 3372, 3376, 3379, 3383, 3380, 3392, + 3393, 3384, 3387, 3396, 3397, 3404, 3399, 6016, 3409, 3389, + 3412, 3410, 3411, 3416, 3417, 3419, 3420, 3421, 3422, 3429, + 3424, 6016, 3431, 3426, 3436, 3437, 3428, 3451, 3446, 3427, + 3449, 3453, 3450, 3456, 3454, 3458, 3459, 3462, 3463, 6016, + 6016, 3465, 3466, 3468, 6016, 3469, 3467, 3479, 3472, 3475, + 3482, 3485, 3481, 3484, 3486, 3489, 3493, 6016, 3494, 3501, + 3498, 3500, 3508, 3511, 3504, 3512, 3513, 3506, 3514, 3516, - 3513, 3515, 3517, 3520, 5988, 3523, 3524, 3527, 3530, 3538, - 3540, 3534, 3547, 3531, 3541, 3543, 3548, 3549, 3551, 3560, - 3557, 3556, 3559, 3563, 3566, 5988, 3565, 3567, 3568, 3576, - 5988, 3580, 3587, 3590, 3591, 3573, 3577, 3589, 3598, 5988, - 3593, 3596, 3594, 3595, 3603, 3602, 3610, 3607, 5988, 3609, - 3608, 3611, 5988, 3612, 3613, 3618, 3623, 3625, 3632, 3628, - 3630, 3631, 3629, 5988, 3636, 5988, 3639, 3640, 3643, 5988, - 3646, 3647, 3648, 3650, 3651, 3656, 3657, 3655, 3663, 3664, - 3666, 3667, 3665, 3670, 3674, 3671, 3672, 3676, 3677, 5988, - 3678, 3680, 3687, 3692, 3688, 3695, 3682, 3699, 3700, 5988, + 3520, 3519, 3521, 3524, 3535, 3536, 3531, 3527, 3534, 6016, + 3532, 3539, 3540, 3544, 3541, 3548, 6016, 3546, 3549, 3550, + 3555, 3558, 3562, 3559, 3568, 3569, 3571, 3572, 3573, 3574, + 3576, 3583, 3580, 3579, 3582, 3586, 3588, 6016, 3589, 3593, + 3597, 3600, 6016, 3602, 3611, 3612, 3613, 3603, 3614, 3608, + 3621, 6016, 3616, 3618, 3623, 3624, 3631, 3626, 3633, 3630, + 6016, 3632, 3634, 3636, 6016, 3637, 3638, 3646, 3651, 3643, + 3658, 3654, 3656, 3659, 3655, 6016, 3657, 6016, 3666, 3667, + 3670, 6016, 3668, 3672, 3673, 3675, 3676, 3677, 3681, 3688, + 3683, 3689, 3690, 3691, 3692, 3694, 3701, 3693, 3697, 3700, - 5988, 3702, 5988, 3705, 3706, 3709, 5988, 3711, 3710, 3718, - 3714, 3715, 3717, 3721, 3727, 5988, 3723, 3728, 3732, 3729, - 3734, 3737, 3739, 3740, 3736, 3741, 3744, 5988, 3745, 3742, - 3747, 3743, 3753, 3757, 3759, 3758, 5988, 3766, 3767, 3768, - 3770, 3772, 5988, 3774, 5988, 3776, 3780, 3781, 3782, 3777, - 5988, 3785, 3788, 3791, 3792, 3795, 3797, 3798, 3801, 3804, - 3805, 3813, 3809, 3808, 3811, 5988, 3810, 3812, 3816, 3823, - 3817, 3820, 3833, 3830, 3834, 3828, 3831, 3838, 3841, 3842, - 3844, 3848, 3849, 3850, 5988, 3851, 3856, 3852, 3865, 3861, - 3855, 5988, 3862, 3866, 3872, 5988, 3869, 3875, 3876, 3879, + 3702, 6016, 3712, 3704, 3705, 3719, 3717, 3709, 3707, 3725, + 3723, 6016, 6016, 3732, 6016, 3734, 3727, 3729, 6016, 3733, + 3735, 3744, 3739, 3740, 3750, 3747, 3751, 6016, 3753, 3742, + 3754, 3757, 3758, 3761, 3763, 3764, 3765, 3767, 3768, 6016, + 3769, 3771, 3778, 3770, 3772, 3781, 3780, 3786, 6016, 3790, + 3794, 3793, 3797, 3798, 6016, 3799, 6016, 3800, 3801, 3803, + 3807, 3804, 6016, 3812, 3813, 3817, 3819, 3820, 3822, 3821, + 3828, 3829, 3830, 3837, 3834, 3835, 3832, 6016, 3836, 3838, + 3842, 3843, 3846, 3849, 3857, 3853, 3854, 3859, 3860, 3863, + 3866, 3864, 3870, 3872, 3874, 3867, 6016, 3875, 3880, 3873, - 3880, 3881, 3884, 3883, 3886, 5988, 3890, 3891, 3887, 3888, - 3889, 3896, 5988, 5988, 3904, 5988, 3906, 3892, 3909, 3908, - 3911, 3913, 3917, 3918, 3920, 3914, 3921, 3929, 3928, 3938, - 3945, 3946, 3944, 3935, 3930, 5988, 5988, 3949, 3951, 3953, - 3955, 3956, 3958, 3942, 3965, 3963, 3971, 3974, 3964, 3967, - 5988, 3975, 3976, 3978, 5988, 3980, 3981, 3983, 3984, 3985, - 3989, 3987, 3988, 3992, 3991, 3994, 3998, 3995, 4004, 4000, - 4011, 4001, 4012, 4014, 4015, 4019, 5988, 4016, 4021, 4022, - 4025, 4028, 4030, 4029, 4031, 4032, 5988, 4036, 4035, 4039, - 4044, 4045, 4047, 4037, 4055, 4062, 4056, 4063, 4064, 4058, + 3889, 3886, 3890, 6016, 3891, 3892, 3893, 6016, 3896, 3899, + 3901, 3905, 3900, 3906, 3907, 3908, 3911, 6016, 3913, 3915, + 3912, 3916, 3928, 3920, 6016, 6016, 3930, 6016, 3931, 3917, + 3935, 3934, 3914, 3938, 3942, 3944, 3946, 3943, 3951, 3954, + 3948, 3964, 3966, 3971, 3967, 3968, 3957, 6016, 6016, 3973, + 3974, 3969, 3980, 3981, 3983, 3984, 3991, 3987, 3993, 3997, + 3998, 4005, 6016, 3986, 3988, 4006, 6016, 4001, 4004, 4007, + 4012, 4011, 4013, 4017, 4014, 4015, 4018, 4022, 4019, 4024, + 4032, 4025, 4029, 4028, 4038, 4035, 4036, 4045, 6016, 4042, + 4046, 4049, 4052, 4053, 4055, 4057, 4058, 4059, 6016, 4056, - 4069, 4072, 5988, 4073, 4046, 4074, 4075, 4080, 4082, 4083, - 4085, 4086, 4089, 4090, 4091, 4093, 4098, 4095, 4099, 4100, - 4101, 5988, 4106, 4113, 4103, 4116, 4107, 4117, 4118, 4126, - 4129, 4119, 4124, 4130, 4132, 5988, 4133, 4134, 4135, 4136, - 4144, 4137, 4141, 4145, 4147, 5988, 4152, 4148, 4154, 4155, - 4158, 4159, 4163, 4164, 4166, 4170, 4178, 5988, 4167, 4180, - 4182, 4174, 4171, 4173, 4183, 4186, 5988, 4190, 4192, 4191, - 4207, 4193, 4208, 4200, 4204, 4203, 4210, 4213, 4211, 4215, - 4217, 4218, 4219, 4231, 4235, 4230, 5988, 4221, 5988, 4236, - 4237, 4246, 4242, 4232, 5988, 4239, 4244, 4248, 4249, 4250, + 4061, 4063, 4069, 4062, 4072, 4083, 4087, 4089, 4064, 4081, + 4090, 4092, 4096, 4093, 6016, 4097, 4099, 4100, 4103, 4106, + 4108, 4109, 4111, 4112, 4114, 4116, 4117, 4124, 4126, 4118, + 4127, 4121, 4129, 6016, 4133, 4140, 4134, 4142, 4137, 4067, + 4143, 4144, 4150, 4147, 4152, 4151, 4157, 6016, 4154, 4158, + 4161, 4159, 4165, 4168, 4172, 4169, 4171, 6016, 4179, 4162, + 4173, 4175, 4183, 4185, 4188, 4190, 4193, 4192, 4195, 6016, + 4196, 4199, 4200, 4197, 4206, 4207, 4211, 4209, 6016, 4212, + 4218, 4210, 4226, 4221, 4230, 4227, 4229, 4231, 4233, 4236, + 4238, 4240, 4241, 4243, 4237, 4254, 4259, 4257, 6016, 4244, - 5988, 4253, 4256, 4258, 4257, 5988, 4263, 4262, 4261, 4268, - 4271, 4274, 5988, 4277, 4279, 4278, 4290, 4291, 4287, 4288, - 4292, 4289, 4294, 4295, 4296, 4304, 4299, 4300, 5988, 4303, - 4306, 4311, 4312, 4315, 4316, 4318, 4320, 4321, 5988, 4323, - 4325, 4326, 4327, 4329, 4330, 4332, 4344, 4342, 4331, 5988, - 4335, 4347, 4359, 4354, 4355, 5988, 5988, 4356, 4339, 4358, - 4343, 4363, 5988, 4367, 4366, 4365, 4373, 4374, 5988, 5988, - 4376, 5988, 4368, 5988, 4378, 4379, 5988, 5988, 4380, 4381, - 4382, 4384, 4391, 5988, 4394, 5988, 4402, 4397, 4388, 4399, - 4400, 5988, 4401, 4403, 4409, 5988, 4410, 4412, 4411, 4413, + 6016, 4258, 4262, 4266, 4268, 4265, 6016, 4255, 4270, 4273, + 4274, 4275, 6016, 4276, 4278, 4280, 4279, 6016, 4290, 4292, + 4281, 4296, 4283, 4298, 6016, 4303, 4304, 4300, 4312, 4315, + 4311, 4313, 4316, 4314, 4318, 4319, 4320, 4328, 4323, 4324, + 6016, 4330, 4333, 4340, 4341, 4335, 4325, 4343, 4349, 4342, + 6016, 4351, 4350, 4352, 4353, 4354, 4357, 4359, 4366, 4362, + 4361, 6016, 4365, 4369, 4382, 4363, 4373, 6016, 6016, 4378, + 4383, 4385, 4380, 4386, 6016, 4389, 4396, 4391, 4395, 4398, + 6016, 6016, 4400, 6016, 4397, 6016, 4402, 4401, 6016, 6016, + 4404, 4405, 4408, 4414, 4411, 6016, 4421, 6016, 4418, 4422, - 5988, 4417, 4422, 4414, 4418, 5988, 4423, 4427, 4430, 4431, - 4432, 4434, 4438, 4437, 4442, 4443, 4445, 4444, 4447, 4454, - 4458, 4460, 4462, 4463, 4448, 4465, 4467, 4471, 4469, 4473, - 4474, 4476, 4478, 4479, 4483, 4487, 4480, 4484, 4488, 4489, - 4490, 4497, 4493, 4499, 4504, 4500, 4505, 4506, 4507, 4508, - 4511, 4514, 4512, 4518, 4522, 5988, 4516, 4517, 4523, 4524, - 4528, 4530, 4536, 4544, 4548, 4549, 5988, 4551, 5988, 4553, - 4538, 4529, 4545, 5988, 4555, 4558, 4557, 4560, 4559, 4561, - 4563, 4562, 4566, 4567, 4569, 5988, 4572, 4573, 4574, 4578, - 5988, 4587, 4589, 4586, 4590, 4591, 4592, 4593, 4594, 4597, + 4424, 4425, 4427, 6016, 4426, 4429, 4434, 6016, 4428, 4436, + 4435, 4439, 6016, 4443, 4446, 4438, 4444, 6016, 4450, 4456, + 4458, 4448, 4452, 4459, 4465, 4460, 4468, 4469, 4470, 4471, + 4472, 4479, 4484, 4486, 4488, 4480, 4476, 4490, 4496, 4498, + 4489, 4493, 4500, 4502, 4504, 4506, 4508, 4510, 4511, 4512, + 4514, 4515, 4513, 4523, 4516, 4517, 4530, 4526, 4519, 4531, + 4534, 4532, 4538, 4539, 4541, 4542, 4543, 6016, 4544, 4546, + 4548, 4560, 4553, 4549, 4559, 4566, 4570, 4572, 6016, 4574, + 6016, 4576, 4561, 4578, 4580, 6016, 4581, 4582, 4583, 4584, + 4585, 4586, 4588, 4587, 4591, 4592, 4595, 6016, 4598, 4593, - 4599, 4601, 4603, 4615, 4605, 4606, 4610, 4614, 4616, 4617, - 4620, 4622, 4627, 4628, 4632, 5988, 4633, 5988, 4634, 4635, - 4638, 4639, 4640, 4641, 4644, 5988, 5988, 4642, 4646, 4648, - 4651, 4653, 4656, 4660, 5988, 4657, 4665, 4668, 4670, 5988, - 4658, 4674, 4675, 4677, 5988, 4678, 4679, 4680, 4682, 4685, - 4687, 4691, 4689, 4692, 4693, 4700, 5988, 5988, 5988, 5988, - 4701, 4697, 4707, 4703, 4709, 4711, 4712, 4714, 4710, 5988, - 4718, 5988, 5988, 4723, 4724, 4726, 4727, 4730, 4715, 4733, - 4731, 5988, 4735, 4736, 4743, 4737, 4745, 4747, 4749, 4753, - 4751, 4754, 4761, 4757, 4759, 4763, 4765, 4767, 4774, 5988, + 4602, 4613, 6016, 4608, 4619, 4603, 4614, 4616, 4620, 4622, + 4624, 4625, 4626, 4628, 4630, 4637, 4633, 4634, 4636, 4638, + 4639, 4644, 4647, 4646, 4654, 4656, 4661, 6016, 4650, 6016, + 4657, 4662, 4663, 4665, 4667, 4668, 4670, 6016, 6016, 4671, + 4673, 4678, 4679, 4674, 4683, 4680, 6016, 4686, 4693, 4696, + 4687, 6016, 4690, 4698, 4699, 4703, 6016, 4704, 4706, 4707, + 4709, 4710, 4713, 4717, 4714, 4720, 4721, 4725, 6016, 6016, + 6016, 6016, 4726, 4728, 4731, 4732, 4734, 4735, 4737, 4739, + 4740, 6016, 4742, 6016, 6016, 4743, 4749, 4751, 4752, 4753, + 4756, 4758, 4760, 6016, 4759, 4764, 4766, 4762, 4773, 4779, - 5988, 4764, 4776, 4768, 4785, 4781, 4782, 4789, 4788, 4790, - 4791, 4793, 4794, 4780, 4803, 4804, 4805, 4799, 5988, 4807, - 4806, 5988, 4813, 5988, 4814, 4815, 4816, 4817, 4818, 4822, - 4823, 4826, 5988, 5988, 4821, 4828, 4832, 4837, 4833, 4829, - 4839, 4842, 4843, 5988, 4844, 5988, 4845, 4846, 4856, 4847, - 4863, 4864, 4866, 4868, 4853, 4869, 5988, 4870, 4871, 5988, - 4873, 4875, 4876, 5988, 4880, 4878, 4883, 4886, 5988, 4888, - 4890, 4892, 5988, 4899, 5988, 4893, 4895, 4902, 4907, 5988, - 4903, 4904, 5988, 4909, 4911, 4912, 4916, 5988, 4917, 5988, - 4918, 4920, 4921, 4925, 4926, 4928, 4930, 4931, 4932, 4939, + 4763, 4776, 4780, 4782, 4789, 4785, 4786, 4784, 4788, 4792, + 4795, 6016, 6016, 4796, 4802, 4803, 4811, 4807, 4808, 4820, + 4815, 4816, 4817, 4818, 4822, 4804, 4829, 4834, 4827, 4824, + 6016, 4835, 4838, 6016, 4831, 6016, 4837, 4839, 4845, 4846, + 4847, 4848, 4849, 4851, 6016, 6016, 4852, 4853, 4855, 4862, + 4858, 4866, 4854, 4865, 4867, 6016, 4868, 6016, 4870, 4872, + 4879, 4880, 4887, 4888, 4891, 4893, 4889, 4894, 6016, 4895, + 4896, 6016, 4898, 4900, 4901, 6016, 4906, 4903, 4911, 4913, + 6016, 4918, 4915, 4920, 6016, 4923, 6016, 4908, 4924, 4926, + 4933, 6016, 4930, 4934, 6016, 4937, 4940, 4941, 4942, 6016, - 4937, 4940, 5988, 5988, 4948, 4934, 4945, 4950, 4952, 4959, - 4951, 4956, 4955, 5988, 5988, 4961, 5988, 4963, 4964, 5988, - 4962, 4969, 4968, 4973, 4974, 4975, 4977, 4980, 4982, 4990, - 4983, 4981, 4994, 5004, 4988, 5006, 5008, 5010, 5012, 5014, - 5016, 4984, 4999, 5017, 5018, 5020, 5021, 5988, 5023, 5025, - 5024, 5988, 5030, 5026, 5035, 5031, 5988, 5038, 5039, 5044, - 5045, 5988, 5046, 5050, 5047, 5052, 5055, 5063, 5056, 5058, - 5068, 5988, 5988, 5988, 5060, 5074, 5988, 5076, 5066, 5059, - 5071, 5988, 5077, 5078, 5988, 5988, 5079, 5082, 5081, 5093, - 5988, 5083, 5988, 5085, 5988, 5092, 5094, 5102, 5096, 5988, + 4931, 6016, 4943, 4946, 4947, 4952, 4953, 4957, 4954, 4958, + 4959, 4966, 4962, 4965, 6016, 6016, 4978, 4964, 4970, 4971, + 4974, 4981, 4979, 4982, 4984, 6016, 6016, 4988, 6016, 4989, + 4992, 6016, 4985, 4996, 4994, 4998, 5000, 5001, 5002, 5006, + 5008, 5014, 5009, 5007, 5019, 5030, 5013, 5034, 5035, 5037, + 5039, 5041, 5015, 5043, 5044, 5020, 5045, 5047, 5049, 6016, + 5051, 5052, 5053, 6016, 5057, 5058, 5060, 5061, 6016, 5063, + 5068, 5070, 5072, 6016, 5073, 5075, 5076, 5078, 5082, 5089, + 5085, 5084, 5086, 6016, 6016, 6016, 5094, 5096, 6016, 5101, + 5092, 5102, 5103, 6016, 5104, 5105, 6016, 6016, 5107, 5109, - 5107, 5109, 5988, 5115, 5117, 5119, 5111, 5088, 5121, 5122, - 5988, 5129, 5125, 5126, 5133, 5124, 5128, 5134, 5135, 5143, - 5136, 5145, 5988, 5146, 5147, 5151, 5154, 5138, 5148, 5158, - 5988, 5160, 5988, 5162, 5164, 5165, 5167, 5166, 5168, 5171, - 5180, 5170, 5173, 5174, 5988, 5184, 5189, 5988, 5181, 5988, - 5191, 5988, 5192, 5194, 5195, 5198, 5988, 5200, 5186, 5197, - 5204, 5988, 5212, 5201, 5205, 5217, 5988, 5988, 5207, 5225, - 5209, 5218, 5222, 5229, 5226, 5231, 5232, 5233, 5234, 5241, - 5236, 5237, 5238, 5245, 5248, 5252, 5988, 5988, 5988, 5247, - 5256, 5263, 5261, 5262, 5270, 5266, 5988, 5267, 5268, 5269, + 5108, 5116, 6016, 5111, 6016, 5112, 6016, 5114, 5115, 5124, + 5122, 6016, 5129, 5135, 6016, 5138, 5141, 5143, 5144, 5126, + 5130, 5145, 6016, 5154, 5147, 5151, 5158, 5155, 5159, 5160, + 5161, 5168, 5163, 5167, 6016, 5170, 5164, 5171, 5177, 5172, + 5175, 5181, 6016, 5183, 6016, 5184, 5185, 5189, 5186, 5187, + 5192, 5194, 5199, 5196, 5206, 5200, 6016, 5208, 5210, 6016, + 5212, 6016, 5214, 6016, 5215, 5216, 5218, 5220, 6016, 5224, + 5217, 5221, 5226, 6016, 5227, 5229, 5230, 5236, 6016, 6016, + 5238, 5246, 5242, 5239, 5251, 5253, 5248, 5255, 5256, 5257, + 5259, 5269, 5241, 5264, 5262, 5271, 5272, 5277, 6016, 6016, - 5277, 5274, 5279, 5988, 5275, 5280, 5281, 5282, 5286, 5283, - 5290, 5988, 5294, 5297, 5300, 5289, 5304, 5308, 5311, 5313, - 5314, 5988, 5316, 5988, 5988, 5301, 5988, 5317, 5318, 5321, - 5322, 5988, 5325, 5327, 5326, 5328, 5330, 5332, 5988, 5342, - 5333, 5335, 5344, 5988, 5988, 5348, 5988, 5351, 5352, 5345, - 5361, 5356, 5358, 5363, 5360, 5988, 5364, 5367, 5369, 5370, - 5371, 5988, 5372, 5373, 5375, 5376, 5379, 5378, 5381, 5383, - 5385, 5988, 5386, 5388, 5406, 5402, 5988, 5389, 5401, 5988, - 5988, 5411, 5413, 5334, 5988, 5988, 5988, 5416, 5988, 5418, - 5422, 5426, 5430, 5421, 5988, 5432, 5429, 5434, 5988, 5988, + 6016, 5273, 5280, 5287, 5284, 5286, 5294, 5290, 6016, 5291, + 5292, 5293, 5301, 5298, 5303, 6016, 5299, 5304, 5305, 5306, + 5310, 5307, 5314, 6016, 5318, 5321, 5324, 5313, 5328, 5332, + 5335, 5337, 5338, 6016, 5340, 6016, 6016, 5325, 6016, 5341, + 5342, 5345, 5346, 6016, 5349, 5351, 5350, 5352, 5354, 5356, + 6016, 5366, 5357, 5359, 5368, 6016, 6016, 5372, 6016, 5375, + 5376, 5369, 5385, 5380, 5382, 5387, 5384, 6016, 5388, 5391, + 5393, 5394, 5395, 6016, 5396, 5397, 5399, 5400, 5403, 5402, + 5405, 5407, 5409, 6016, 5410, 5412, 5430, 5426, 6016, 5413, + 5425, 6016, 6016, 5435, 5437, 5358, 6016, 6016, 6016, 5440, - 5433, 5435, 5436, 5438, 5988, 5988, 5439, 5442, 5440, 5443, - 5445, 5988, 5450, 5454, 5456, 5459, 5462, 5451, 5465, 5467, - 5475, 5477, 5472, 5473, 5478, 5480, 5481, 5482, 5484, 5493, - 5489, 5491, 5503, 5500, 5988, 5988, 5507, 5988, 5988, 5509, - 5511, 5513, 5515, 5517, 5519, 5521, 5988, 5522, 5524, 5525, - 5393, 5526, 5988, 5528, 5530, 5527, 5532, 5492, 5535, 5533, - 5538, 5988, 5988, 5539, 5540, 5541, 5549, 5544, 5988, 5551, - 5558, 5555, 5556, 5553, 5559, 5560, 5988, 5564, 5565, 5988, - 5988, 5563, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988, - 5568, 5988, 5566, 5581, 5583, 5585, 5988, 5573, 5586, 5494, + 6016, 5442, 5446, 5450, 5454, 5445, 6016, 5456, 5453, 5458, + 6016, 6016, 5457, 5459, 5460, 5462, 6016, 6016, 5463, 5466, + 5464, 5467, 5469, 6016, 5474, 5478, 5480, 5483, 5486, 5475, + 5489, 5491, 5499, 5501, 5496, 5497, 5502, 5504, 5505, 5506, + 5508, 5517, 5513, 5515, 5527, 5524, 6016, 6016, 5531, 6016, + 6016, 5533, 5535, 5537, 5539, 5541, 5543, 5545, 6016, 5546, + 5548, 5549, 5417, 5550, 6016, 5552, 5554, 5551, 5556, 5516, + 5559, 5557, 5562, 6016, 6016, 5563, 5564, 5565, 5573, 5568, + 6016, 5575, 5582, 5579, 5580, 5577, 5583, 5584, 6016, 5588, + 5589, 6016, 6016, 5587, 6016, 6016, 6016, 6016, 6016, 6016, - 5587, 5575, 5988, 5588, 5590, 5592, 5098, 5591, 5593, 5599, - 5598, 5600, 5603, 5602, 5605, 5604, 5609, 5608, 5610, 5623, - 5988, 5988, 5988, 5622, 5614, 5616, 5624, 5626, 5631, 5638, - 5640, 5635, 5641, 5642, 5643, 5644, 5646, 5647, 5656, 5651, - 5652, 5653, 5655, 5660, 5657, 5663, 5667, 5988, 5668, 5988, - 5669, 5988, 5988, 5674, 5676, 5670, 5679, 5686, 5690, 5681, - 5688, 5685, 5689, 5692, 5697, 5988, 5693, 5699, 5988, 5702, - 5703, 5988, 5700, 5705, 5706, 5708, 5709, 5711, 5712, 5713, - 5724, 5988, 5988, 5715, 5726, 5727, 5729, 5731, 5738, 5733, - 5737, 5740, 5743, 5739, 5747, 5988, 5750, 5751, 5753, 5988, + 6016, 6016, 5592, 6016, 5590, 5605, 5607, 5609, 6016, 5597, + 5610, 5518, 5611, 5599, 6016, 5612, 5614, 5616, 5615, 5618, + 5622, 5624, 5626, 5628, 5627, 5629, 5632, 5630, 5636, 5634, + 5638, 5644, 6016, 6016, 6016, 5642, 5640, 5651, 5652, 5663, + 5664, 5667, 5669, 5653, 5657, 5670, 5671, 5674, 5659, 5675, + 5686, 5678, 5681, 5682, 5683, 5689, 5685, 5691, 5695, 6016, + 5696, 6016, 5697, 6016, 6016, 5699, 5701, 5704, 5705, 5713, + 5714, 5706, 5709, 5716, 5718, 5726, 5728, 6016, 5717, 5719, + 6016, 5729, 5730, 6016, 5721, 5731, 5732, 5733, 5737, 5740, + 5742, 5744, 5753, 6016, 6016, 5745, 5748, 5754, 5756, 5757, + + 5764, 5760, 5763, 5767, 5769, 5770, 5777, 6016, 5776, 5778, + 5780, 6016, 5781, 5782, 5784, 5786, 5787, 5794, 5790, 5795, + 6016, 5792, 6016, 5797, 5798, 5799, 5800, 5802, 5803, 5811, + 5813, 5814, 6016, 5815, 5822, 5817, 5824, 5828, 5826, 5830, + 5820, 5833, 5835, 5842, 5846, 5843, 5847, 5834, 5851, 5838, + 6016, 5849, 5852, 6016, 5855, 5858, 5859, 5861, 5864, 6016, + 5867, 5862, 5868, 5869, 5873, 5875, 6016, 5877, 5884, 5879, + 6016, 5885, 6016, 6016, 5888, 5889, 5891, 5895, 5897, 6016, + 6016, 6016, 5924, 5931, 5938, 5945, 5952, 88, 5959, 5966, + 5973, 5980, 5987, 5994, 6001, 6008 - 5755, 5754, 5757, 5760, 5761, 5768, 5763, 5765, 5988, 5766, - 5988, 5770, 5772, 5771, 5774, 5775, 5777, 5785, 5783, 5787, - 5988, 5789, 5791, 5795, 5796, 5798, 5801, 5802, 5803, 5805, - 5807, 5808, 5817, 5811, 5813, 5819, 5821, 5823, 5988, 5825, - 5827, 5988, 5828, 5829, 5830, 5831, 5835, 5988, 5840, 5832, - 5837, 5843, 5848, 5845, 5988, 5854, 5858, 5855, 5988, 5859, - 5988, 5988, 5860, 5861, 5863, 5867, 5869, 5988, 5988, 5988, - 5896, 5903, 5910, 5917, 5924, 88, 5931, 5938, 5945, 5952, - 5959, 5966, 5973, 5980 } ; -static const flex_int16_t yy_def[3085] = +static const flex_int16_t yy_def[3097] = { 0, - 3070, 1, 3071, 3071, 3072, 3072, 3073, 3073, 3074, 3074, - 3075, 3075, 3070, 3076, 3070, 3070, 3070, 3070, 3077, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3078, 3070, 3070, 3070, 3078, 3079, 3070, 3070, - 3070, 3079, 3080, 3070, 3070, 3070, 3070, 3080, 3081, 3070, - 3070, 3070, 3081, 3082, 3070, 3083, 3070, 3082, 3082, 3076, - 3076, 3070, 3084, 3077, 3084, 3077, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3082, 1, 3083, 3083, 3084, 3084, 3085, 3085, 3086, 3086, + 3087, 3087, 3082, 3088, 3082, 3082, 3082, 3082, 3089, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3090, 3082, 3082, 3082, 3090, 3091, 3082, 3082, + 3082, 3091, 3092, 3082, 3082, 3082, 3082, 3092, 3093, 3082, + 3082, 3082, 3093, 3094, 3082, 3095, 3082, 3094, 3094, 3088, + 3088, 3082, 3096, 3089, 3096, 3089, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3078, 3078, 3079, 3079, 3080, 3080, 3070, 3081, 3081, 3082, - 3082, 3083, 3083, 3082, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3090, 3090, 3091, 3091, 3092, 3092, 3082, 3093, 3093, + 3094, 3094, 3095, 3095, 3094, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3082, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3082, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3082, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3082, 3088, 3094, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3082, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3070, 3076, - 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3094, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3082, 3082, 3088, 3082, 3082, 3088, 3088, 3082, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3082, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3082, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3094, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3070, 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3082, 3088, 3082, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3070, - 3076, 3070, 3076, 3070, 3076, 3076, 3070, 3070, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3082, 3082, 3088, 3082, 3088, 3082, 3088, 3088, 3082, 3082, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, - 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3070, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, + 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, - 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3070, 3070, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, - 3070, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3082, 3082, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3082, 3082, 3088, 3088, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, 3076, 3070, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3088, 3088, 3082, 3088, 3082, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3082, + 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, - 3070, 3076, 3076, 3076, 3070, 3070, 3070, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, 3070, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3082, 3082, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3082, 3082, 3088, 3088, 3088, 3082, 3082, 3082, 3088, - 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, - 3070, 3076, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3082, 3082, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3082, 3082, 3088, 3082, 3082, 3082, 3082, 3082, 3082, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, + 3082, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3082, + 3082, 0, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082 - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, 3076, - 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 0, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070 } ; -static const flex_int16_t yy_nxt[6029] = +static const flex_int16_t yy_nxt[6057] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1440,664 +1446,667 @@ static const flex_int16_t yy_nxt[6029] = 51, 47, 51, 70, 47, 70, 70, 52, 70, 52, 54, 55, 56, 57, 70, 18, 54, 55, 56, 57, 71, 18, 58, 60, 61, 62, 71, 82, 58, 60, - 61, 62, 72, 71, 63, 102, 73, 92, 70, 71, + 61, 62, 72, 71, 63, 103, 73, 93, 70, 71, 63, 15, 16, 17, 65, 66, 67, 75, 71, 75, - 75, 71, 75, 68, 104, 157, 103, 93, 75, 76, - 141, 141, 69, 15, 16, 17, 65, 66, 67, 71, - 71, 83, 77, 78, 71, 68, 79, 71, 84, 87, - 71, 80, 85, 88, 69, 86, 89, 151, 90, 91, - 81, 71, 94, 71, 96, 71, 71, 159, 71, 105, - 98, 112, 97, 99, 71, 109, 95, 106, 71, 110, - 100, 71, 101, 107, 172, 71, 113, 108, 143, 71, - 114, 143, 118, 71, 119, 111, 115, 71, 120, 116, - 140, 151, 124, 148, 148, 125, 117, 163, 121, 122, - 71, 123, 126, 71, 133, 154, 127, 128, 71, 129, + 75, 71, 75, 68, 105, 158, 104, 94, 75, 76, + 71, 71, 69, 15, 16, 17, 65, 66, 67, 71, + 71, 83, 77, 78, 119, 68, 79, 71, 84, 71, + 95, 80, 85, 172, 69, 86, 71, 97, 142, 142, + 81, 71, 71, 71, 96, 98, 87, 71, 113, 144, + 88, 99, 144, 89, 100, 90, 91, 141, 71, 106, + 152, 101, 173, 102, 71, 110, 92, 107, 72, 111, + 152, 71, 73, 108, 149, 149, 114, 109, 71, 71, + 115, 156, 71, 120, 155, 112, 116, 121, 71, 117, + 340, 159, 71, 130, 71, 131, 118, 122, 123, 125, - 224, 130, 71, 137, 134, 158, 71, 138, 135, 136, - 131, 139, 145, 71, 145, 145, 132, 145, 75, 71, - 75, 75, 150, 75, 150, 150, 70, 150, 70, 70, - 153, 70, 72, 165, 71, 171, 73, 70, 75, 71, - 75, 75, 155, 75, 71, 71, 225, 71, 156, 75, - 76, 71, 71, 71, 160, 161, 164, 71, 71, 166, - 173, 71, 71, 169, 170, 167, 71, 168, 162, 71, - 71, 175, 177, 178, 71, 71, 184, 71, 176, 174, - 179, 182, 253, 71, 71, 71, 189, 180, 181, 183, - 71, 151, 71, 185, 191, 71, 186, 71, 71, 199, + 124, 71, 126, 71, 132, 134, 161, 71, 138, 127, + 133, 226, 139, 128, 129, 135, 140, 71, 71, 136, + 137, 146, 157, 146, 146, 75, 146, 75, 75, 151, + 75, 151, 151, 70, 151, 70, 70, 154, 70, 71, + 75, 71, 75, 75, 70, 75, 71, 71, 152, 162, + 165, 75, 76, 71, 71, 71, 71, 174, 71, 160, + 167, 71, 163, 71, 71, 164, 168, 166, 169, 71, + 176, 71, 177, 170, 171, 71, 175, 71, 186, 191, + 71, 178, 179, 180, 184, 71, 71, 182, 71, 71, + 181, 185, 187, 183, 71, 188, 193, 71, 71, 194, - 192, 194, 197, 71, 71, 195, 71, 198, 200, 187, - 188, 190, 71, 201, 71, 71, 202, 205, 71, 203, - 193, 196, 207, 71, 71, 71, 71, 204, 71, 212, - 209, 71, 71, 206, 210, 71, 214, 71, 71, 71, - 71, 208, 71, 220, 211, 215, 213, 71, 226, 229, - 217, 216, 223, 71, 221, 71, 219, 218, 222, 233, - 230, 71, 71, 71, 235, 227, 71, 71, 228, 231, - 71, 239, 71, 236, 232, 238, 71, 234, 149, 240, - 71, 242, 141, 141, 143, 237, 243, 143, 241, 145, - 151, 145, 145, 244, 145, 148, 148, 150, 248, 150, + 71, 196, 71, 71, 192, 197, 202, 199, 189, 190, + 203, 201, 200, 204, 71, 71, 71, 71, 71, 195, + 71, 198, 205, 71, 209, 71, 71, 206, 71, 214, + 211, 71, 71, 150, 212, 208, 207, 71, 213, 71, + 71, 210, 71, 216, 71, 71, 215, 219, 222, 71, + 228, 231, 217, 225, 227, 71, 221, 220, 218, 223, + 71, 71, 232, 224, 71, 71, 71, 229, 237, 71, + 230, 233, 71, 71, 71, 142, 142, 238, 241, 234, + 236, 240, 235, 243, 242, 71, 149, 149, 245, 239, + 244, 144, 71, 146, 144, 146, 146, 151, 146, 151, - 150, 75, 150, 75, 75, 71, 75, 71, 246, 71, - 245, 71, 71, 153, 71, 71, 71, 250, 71, 71, - 71, 256, 249, 247, 251, 259, 252, 255, 258, 71, - 254, 71, 260, 264, 262, 71, 263, 71, 257, 71, - 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, - 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, - 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, - 281, 71, 282, 283, 71, 71, 71, 71, 71, 288, - 289, 285, 295, 284, 286, 71, 299, 280, 71, 287, - 71, 290, 297, 298, 291, 300, 292, 302, 296, 71, + 151, 75, 151, 75, 75, 152, 75, 71, 246, 248, + 250, 71, 247, 154, 71, 71, 71, 71, 71, 71, + 71, 71, 252, 71, 249, 255, 251, 254, 258, 253, + 260, 71, 261, 148, 257, 71, 71, 256, 71, 262, + 259, 264, 71, 265, 266, 71, 267, 276, 71, 270, + 71, 268, 71, 275, 271, 71, 263, 71, 71, 272, + 71, 71, 278, 279, 282, 273, 274, 71, 269, 71, + 71, 284, 280, 71, 277, 71, 71, 71, 285, 71, + 71, 281, 71, 286, 291, 292, 71, 298, 288, 71, + 287, 289, 301, 283, 71, 290, 71, 293, 71, 71, - 71, 71, 71, 71, 71, 304, 305, 301, 293, 307, - 294, 71, 71, 308, 71, 313, 146, 71, 310, 71, - 303, 306, 309, 311, 71, 71, 317, 71, 71, 71, - 71, 71, 312, 314, 315, 71, 316, 71, 71, 318, - 320, 319, 71, 71, 325, 71, 321, 71, 71, 326, - 71, 71, 327, 322, 331, 329, 71, 71, 323, 334, - 71, 71, 71, 324, 71, 71, 328, 330, 71, 336, - 337, 71, 71, 340, 332, 333, 341, 335, 339, 71, - 338, 342, 71, 343, 344, 71, 71, 346, 348, 71, - 347, 71, 350, 71, 71, 71, 71, 351, 71, 345, + 294, 303, 295, 71, 302, 300, 299, 71, 71, 305, + 326, 307, 308, 304, 296, 71, 297, 71, 71, 306, + 311, 71, 71, 71, 313, 314, 71, 309, 312, 310, + 71, 71, 71, 71, 316, 71, 71, 71, 71, 315, + 71, 317, 318, 319, 321, 323, 71, 71, 71, 71, + 71, 322, 328, 71, 330, 320, 324, 329, 71, 71, + 334, 325, 71, 332, 337, 71, 71, 71, 327, 71, + 71, 331, 333, 343, 339, 71, 71, 344, 346, 71, + 335, 336, 342, 71, 71, 338, 341, 71, 71, 71, + 349, 350, 71, 71, 351, 345, 71, 353, 354, 347, - 71, 354, 71, 151, 71, 71, 71, 361, 144, 71, - 357, 359, 349, 71, 352, 355, 353, 362, 71, 356, - 71, 71, 71, 71, 358, 363, 364, 365, 360, 71, - 71, 71, 367, 71, 371, 372, 71, 366, 374, 370, - 71, 71, 71, 373, 369, 71, 375, 368, 376, 71, - 378, 71, 71, 379, 71, 71, 71, 71, 382, 71, - 377, 383, 71, 385, 71, 71, 387, 388, 384, 71, - 380, 381, 71, 389, 71, 71, 386, 71, 390, 71, - 71, 392, 393, 394, 395, 71, 71, 71, 399, 71, - 71, 71, 71, 396, 400, 391, 402, 71, 71, 398, + 71, 71, 348, 71, 71, 152, 357, 71, 71, 71, + 147, 71, 71, 362, 364, 355, 356, 358, 352, 360, + 71, 71, 365, 359, 71, 368, 366, 361, 71, 367, + 71, 71, 363, 71, 71, 71, 71, 374, 71, 71, + 375, 376, 71, 378, 373, 369, 71, 370, 71, 372, + 377, 379, 371, 71, 71, 71, 381, 380, 71, 382, + 71, 71, 71, 71, 385, 71, 386, 389, 71, 383, + 391, 71, 387, 71, 388, 384, 71, 71, 393, 392, + 71, 71, 390, 71, 71, 394, 71, 396, 397, 398, + 71, 399, 71, 71, 403, 71, 71, 71, 400, 404, - 71, 71, 405, 71, 71, 410, 397, 407, 401, 71, - 409, 71, 411, 71, 71, 71, 403, 71, 404, 438, - 71, 406, 421, 419, 408, 412, 71, 71, 71, 71, - 422, 425, 423, 420, 430, 413, 142, 71, 414, 431, - 71, 71, 426, 415, 416, 417, 418, 71, 424, 427, - 71, 71, 428, 429, 432, 71, 71, 71, 433, 71, - 440, 434, 435, 71, 436, 437, 71, 71, 439, 71, - 71, 442, 441, 71, 71, 447, 71, 465, 453, 443, - 71, 71, 71, 448, 71, 449, 71, 71, 444, 446, - 445, 452, 454, 451, 450, 71, 71, 71, 71, 457, + 71, 71, 395, 71, 406, 402, 71, 409, 71, 71, + 71, 401, 411, 414, 71, 405, 71, 415, 71, 71, + 407, 408, 413, 71, 145, 71, 410, 423, 416, 412, + 71, 71, 71, 71, 143, 426, 425, 427, 430, 417, + 71, 424, 418, 429, 71, 431, 71, 419, 420, 421, + 422, 434, 71, 428, 432, 433, 435, 71, 71, 439, + 71, 436, 71, 437, 442, 71, 438, 71, 71, 440, + 71, 441, 443, 71, 444, 446, 71, 71, 71, 71, + 451, 71, 452, 445, 453, 71, 71, 71, 447, 457, + 71, 469, 456, 454, 450, 71, 448, 71, 449, 71, - 455, 458, 71, 466, 71, 460, 456, 464, 71, 71, - 71, 459, 467, 71, 71, 468, 71, 71, 461, 469, - 71, 462, 483, 463, 479, 470, 71, 71, 71, 471, - 71, 484, 481, 733, 486, 480, 71, 472, 71, 473, - 71, 474, 482, 71, 71, 494, 496, 485, 151, 495, - 498, 497, 71, 71, 475, 500, 71, 476, 501, 477, - 504, 478, 71, 71, 487, 488, 71, 71, 71, 499, - 71, 71, 502, 71, 489, 503, 490, 491, 492, 505, - 508, 493, 507, 71, 71, 71, 71, 506, 513, 514, - 509, 511, 516, 510, 71, 517, 71, 71, 71, 71, + 71, 71, 458, 71, 459, 455, 461, 71, 462, 71, + 460, 470, 464, 71, 463, 71, 468, 71, 471, 71, + 472, 483, 71, 71, 71, 465, 473, 71, 466, 71, + 467, 71, 474, 71, 484, 71, 475, 485, 488, 486, + 71, 487, 499, 490, 476, 71, 477, 500, 478, 152, + 71, 71, 501, 71, 489, 498, 502, 71, 71, 71, + 506, 479, 71, 71, 480, 71, 481, 71, 482, 71, + 503, 491, 492, 505, 508, 71, 504, 71, 507, 511, + 71, 493, 510, 494, 495, 496, 512, 71, 497, 509, + 514, 71, 71, 71, 520, 515, 513, 516, 518, 71, - 515, 521, 71, 512, 71, 71, 71, 71, 71, 519, - 524, 525, 526, 520, 71, 71, 518, 71, 71, 531, - 523, 71, 71, 536, 528, 533, 527, 522, 71, 71, - 71, 529, 530, 534, 71, 71, 71, 532, 71, 71, - 71, 546, 71, 547, 71, 538, 71, 537, 535, 542, - 539, 545, 541, 540, 71, 548, 71, 549, 71, 553, - 543, 151, 544, 71, 551, 550, 71, 71, 71, 556, - 552, 71, 554, 71, 555, 558, 71, 71, 559, 71, - 561, 562, 71, 71, 557, 71, 563, 71, 71, 71, - 560, 71, 568, 566, 567, 71, 71, 71, 564, 71, + 71, 71, 517, 71, 521, 525, 519, 71, 71, 71, + 71, 71, 71, 523, 71, 528, 152, 529, 530, 522, + 71, 524, 71, 71, 71, 527, 535, 71, 71, 536, + 532, 71, 531, 526, 71, 538, 71, 534, 533, 71, + 539, 71, 541, 543, 71, 71, 71, 537, 71, 71, + 71, 551, 71, 542, 552, 540, 71, 545, 547, 546, + 544, 550, 554, 71, 71, 553, 71, 621, 71, 548, + 556, 549, 71, 71, 71, 71, 557, 558, 559, 71, + 561, 563, 71, 71, 555, 71, 560, 567, 562, 71, + 564, 71, 566, 71, 71, 71, 565, 71, 568, 71, - 569, 71, 71, 71, 574, 71, 565, 570, 578, 575, - 71, 573, 71, 577, 576, 572, 571, 71, 580, 71, - 71, 582, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 579, 584, 592, 585, 587, 594, 71, 593, 71, - 71, 581, 71, 583, 591, 588, 586, 589, 590, 71, - 71, 596, 71, 71, 595, 599, 71, 602, 597, 71, - 603, 598, 604, 71, 605, 71, 71, 600, 71, 71, - 71, 601, 71, 608, 71, 71, 611, 71, 71, 607, - 612, 71, 614, 71, 71, 71, 645, 610, 606, 613, - 71, 609, 71, 71, 615, 71, 617, 628, 71, 631, + 71, 71, 571, 71, 569, 572, 71, 573, 71, 71, + 71, 575, 579, 71, 71, 574, 570, 580, 71, 71, + 582, 576, 578, 71, 584, 71, 577, 71, 583, 71, + 581, 71, 585, 71, 587, 589, 586, 71, 590, 71, + 71, 71, 71, 597, 71, 71, 588, 150, 599, 71, + 600, 592, 71, 598, 71, 71, 596, 591, 593, 71, + 594, 595, 71, 71, 71, 604, 601, 602, 607, 605, + 603, 610, 71, 71, 71, 609, 71, 71, 606, 71, + 71, 613, 71, 71, 608, 71, 71, 612, 617, 616, + 71, 619, 71, 71, 71, 611, 620, 71, 71, 71, - 616, 71, 618, 71, 626, 627, 71, 619, 632, 620, - 71, 629, 633, 71, 630, 621, 71, 622, 635, 71, - 623, 624, 641, 639, 71, 634, 71, 625, 638, 71, - 71, 71, 636, 642, 640, 637, 71, 647, 71, 71, - 71, 71, 71, 71, 71, 71, 644, 643, 653, 71, - 71, 649, 71, 648, 654, 650, 646, 71, 657, 71, - 651, 661, 660, 655, 652, 656, 658, 151, 71, 71, - 71, 659, 71, 71, 662, 71, 71, 71, 71, 667, - 669, 671, 71, 71, 664, 670, 672, 665, 663, 668, - 674, 666, 71, 71, 71, 673, 71, 676, 71, 71, + 650, 614, 633, 615, 71, 618, 622, 71, 623, 632, + 71, 148, 631, 624, 636, 625, 634, 71, 71, 71, + 635, 626, 71, 627, 637, 71, 628, 629, 638, 644, + 640, 643, 639, 630, 641, 71, 71, 642, 71, 71, + 645, 647, 71, 71, 71, 652, 71, 71, 71, 71, + 71, 71, 646, 71, 71, 147, 658, 71, 71, 654, + 662, 653, 648, 649, 655, 71, 659, 651, 71, 656, + 657, 152, 660, 661, 663, 664, 665, 71, 71, 71, + 666, 71, 71, 71, 71, 71, 71, 71, 672, 674, + 676, 71, 667, 669, 675, 71, 670, 668, 673, 677, - 71, 71, 71, 680, 71, 675, 679, 688, 71, 71, - 685, 681, 677, 690, 678, 686, 71, 71, 682, 71, - 684, 683, 687, 689, 71, 691, 71, 692, 71, 693, - 71, 71, 71, 695, 71, 71, 696, 71, 694, 71, - 699, 71, 698, 71, 700, 71, 704, 71, 71, 703, - 71, 697, 71, 707, 705, 71, 71, 709, 71, 71, - 71, 710, 702, 71, 701, 706, 71, 71, 716, 712, - 71, 71, 711, 71, 713, 708, 718, 715, 714, 71, - 71, 71, 149, 723, 719, 720, 722, 721, 717, 71, - 724, 71, 71, 71, 725, 71, 726, 71, 728, 71, + 679, 671, 71, 71, 71, 71, 71, 678, 71, 71, + 71, 681, 685, 71, 680, 684, 71, 682, 71, 683, + 690, 703, 686, 71, 71, 691, 71, 693, 71, 687, + 694, 71, 688, 695, 689, 71, 692, 696, 71, 71, + 697, 71, 698, 71, 699, 701, 702, 71, 71, 700, + 71, 71, 71, 71, 704, 705, 706, 707, 71, 71, + 711, 71, 71, 710, 71, 712, 71, 71, 71, 714, + 716, 71, 71, 717, 708, 71, 71, 709, 71, 71, + 713, 719, 71, 723, 71, 718, 720, 715, 725, 726, + 721, 71, 71, 722, 71, 730, 727, 724, 71, 71, - 729, 71, 71, 71, 730, 71, 737, 71, 735, 71, - 71, 731, 71, 71, 743, 734, 147, 71, 727, 732, - 71, 738, 741, 71, 71, 736, 740, 71, 739, 742, - 744, 71, 746, 747, 745, 71, 71, 71, 71, 748, - 752, 750, 749, 71, 754, 783, 71, 71, 753, 71, - 71, 71, 751, 71, 755, 757, 71, 764, 756, 71, - 758, 71, 759, 71, 761, 71, 765, 71, 71, 760, - 71, 769, 767, 71, 766, 71, 773, 71, 762, 763, - 770, 71, 71, 71, 771, 71, 776, 774, 768, 71, - 775, 777, 71, 71, 778, 71, 71, 780, 782, 772, + 71, 71, 732, 71, 733, 71, 728, 731, 735, 729, + 71, 71, 71, 736, 71, 71, 737, 71, 71, 744, + 71, 738, 740, 742, 71, 71, 734, 741, 145, 71, + 739, 71, 750, 745, 71, 71, 71, 743, 71, 752, + 748, 751, 71, 71, 746, 747, 749, 753, 754, 71, + 71, 71, 755, 759, 71, 761, 756, 758, 71, 71, + 757, 71, 71, 760, 71, 762, 764, 766, 71, 763, + 71, 765, 71, 771, 71, 768, 71, 71, 71, 71, + 71, 767, 774, 71, 776, 773, 780, 777, 71, 769, + 770, 778, 71, 772, 71, 71, 783, 71, 775, 782, - 71, 784, 779, 71, 71, 788, 71, 71, 781, 71, - 789, 71, 71, 71, 71, 71, 790, 797, 785, 71, - 71, 795, 786, 71, 787, 71, 71, 791, 792, 71, - 71, 71, 793, 798, 794, 796, 71, 799, 71, 71, - 802, 71, 71, 71, 811, 800, 804, 809, 801, 803, - 71, 71, 71, 71, 71, 812, 805, 806, 807, 71, - 808, 71, 71, 71, 810, 814, 816, 815, 71, 71, - 71, 813, 71, 821, 823, 817, 819, 820, 71, 822, - 71, 818, 71, 824, 71, 71, 71, 151, 71, 826, - 71, 71, 831, 827, 832, 829, 71, 71, 825, 828, + 71, 784, 71, 71, 785, 71, 779, 781, 71, 71, + 787, 789, 71, 71, 71, 71, 71, 71, 795, 788, + 796, 71, 786, 790, 71, 71, 797, 71, 71, 71, + 791, 792, 804, 793, 71, 794, 798, 71, 71, 71, + 799, 802, 71, 71, 71, 800, 71, 801, 809, 803, + 71, 805, 71, 71, 806, 71, 71, 71, 807, 71, + 143, 816, 808, 71, 810, 71, 811, 71, 818, 819, + 812, 813, 814, 817, 815, 71, 820, 822, 71, 71, + 71, 71, 71, 823, 71, 71, 821, 71, 71, 827, + 828, 829, 830, 831, 826, 824, 71, 71, 71, 825, - 830, 833, 71, 71, 834, 835, 71, 839, 71, 71, - 840, 842, 71, 71, 71, 845, 71, 836, 841, 71, - 837, 71, 843, 847, 838, 71, 71, 71, 851, 71, - 71, 71, 71, 844, 71, 71, 846, 848, 852, 853, - 71, 71, 71, 71, 71, 850, 883, 854, 71, 865, - 866, 849, 71, 869, 71, 856, 855, 71, 863, 864, - 71, 71, 857, 71, 867, 868, 858, 71, 870, 859, - 71, 871, 872, 71, 875, 71, 860, 861, 71, 862, - 71, 71, 146, 874, 873, 71, 876, 877, 71, 878, - 898, 887, 879, 885, 884, 888, 71, 880, 71, 71, + 71, 71, 71, 152, 833, 71, 840, 834, 838, 836, + 71, 71, 71, 839, 832, 835, 71, 837, 71, 71, + 71, 842, 846, 71, 71, 841, 71, 847, 849, 71, + 852, 843, 844, 850, 71, 848, 71, 71, 71, 851, + 845, 854, 71, 71, 71, 858, 71, 71, 71, 71, + 855, 71, 859, 860, 853, 71, 71, 71, 71, 71, + 71, 857, 873, 876, 71, 861, 872, 856, 71, 863, + 870, 71, 71, 862, 71, 871, 875, 874, 71, 864, + 71, 877, 880, 865, 71, 878, 866, 71, 882, 879, + 71, 883, 71, 867, 868, 891, 869, 71, 71, 71, - 890, 71, 71, 881, 882, 889, 886, 71, 892, 71, - 71, 71, 71, 894, 893, 900, 891, 895, 896, 71, - 71, 899, 897, 71, 71, 71, 71, 904, 71, 71, - 71, 71, 903, 71, 907, 911, 71, 913, 71, 924, - 71, 71, 906, 901, 902, 905, 71, 908, 909, 914, - 917, 912, 71, 910, 915, 71, 71, 916, 918, 71, - 71, 920, 921, 71, 71, 919, 71, 71, 71, 922, - 925, 71, 71, 71, 923, 71, 926, 71, 928, 931, - 71, 71, 929, 71, 71, 934, 71, 71, 71, 933, - 927, 71, 932, 71, 71, 936, 930, 937, 939, 71, + 71, 881, 71, 884, 885, 71, 886, 897, 895, 887, + 896, 71, 71, 892, 888, 3082, 893, 71, 898, 71, + 889, 890, 71, 900, 894, 71, 71, 899, 71, 902, + 901, 904, 71, 903, 71, 71, 905, 71, 907, 71, + 71, 908, 71, 71, 912, 71, 71, 906, 911, 71, + 71, 915, 71, 71, 921, 71, 919, 932, 71, 909, + 913, 910, 71, 914, 916, 917, 71, 922, 933, 71, + 71, 920, 923, 71, 918, 924, 925, 926, 71, 71, + 928, 929, 71, 71, 927, 71, 71, 71, 71, 71, + 71, 930, 71, 71, 71, 931, 934, 936, 939, 71, - 71, 71, 71, 935, 941, 942, 71, 71, 940, 71, - 949, 938, 947, 71, 71, 945, 943, 948, 71, 944, - 946, 71, 71, 71, 71, 71, 954, 956, 950, 71, - 952, 957, 71, 951, 955, 71, 71, 71, 71, 71, - 959, 71, 71, 71, 71, 958, 953, 967, 71, 970, - 960, 965, 71, 71, 71, 71, 961, 962, 71, 964, - 963, 971, 968, 71, 966, 972, 71, 969, 71, 975, - 71, 71, 974, 973, 71, 977, 978, 71, 71, 71, - 976, 71, 71, 980, 71, 71, 982, 987, 979, 988, - 990, 981, 71, 71, 992, 71, 71, 71, 71, 983, + 937, 71, 71, 940, 71, 942, 71, 935, 71, 938, + 941, 71, 71, 944, 71, 945, 71, 947, 71, 949, + 943, 71, 71, 948, 71, 71, 950, 71, 957, 955, + 71, 71, 946, 953, 956, 71, 951, 71, 954, 71, + 71, 71, 964, 952, 962, 958, 960, 965, 71, 71, + 959, 71, 963, 71, 71, 71, 967, 71, 71, 71, + 71, 71, 71, 961, 71, 975, 71, 978, 973, 71, + 966, 1218, 71, 71, 968, 969, 971, 970, 972, 71, + 976, 979, 71, 974, 71, 977, 71, 71, 981, 71, + 983, 980, 985, 986, 71, 71, 982, 71, 71, 71, - 71, 985, 993, 984, 986, 991, 989, 71, 71, 71, - 996, 994, 71, 71, 998, 1001, 995, 71, 997, 71, - 1000, 71, 71, 1005, 71, 1002, 1007, 71, 71, 71, - 1004, 1003, 71, 999, 1010, 151, 71, 1009, 71, 71, - 1013, 71, 1012, 71, 1006, 71, 1008, 71, 1016, 71, - 71, 1011, 71, 71, 71, 1028, 71, 1031, 71, 144, - 1029, 71, 71, 1014, 1019, 1015, 1017, 71, 71, 1054, - 71, 1033, 1020, 1018, 1021, 71, 1030, 71, 1022, 71, - 1023, 71, 1036, 1034, 1024, 71, 1025, 1032, 71, 71, - 71, 1026, 1038, 1035, 1041, 1037, 1027, 1039, 71, 1040, + 984, 71, 71, 3082, 988, 71, 990, 995, 996, 987, + 71, 71, 998, 71, 71, 71, 1000, 989, 71, 991, + 1001, 993, 71, 992, 997, 994, 71, 71, 71, 71, + 71, 999, 1002, 71, 1003, 1006, 71, 1008, 1009, 1004, + 71, 71, 1013, 1010, 71, 71, 71, 1005, 71, 71, + 1007, 1011, 1015, 71, 1012, 71, 1018, 152, 71, 71, + 1017, 71, 1021, 1020, 1016, 1014, 71, 71, 71, 71, + 71, 1022, 1024, 1019, 71, 71, 71, 1036, 71, 71, + 71, 71, 1037, 71, 1027, 1041, 1023, 1025, 1039, 71, + 71, 71, 71, 1026, 1028, 1038, 1029, 71, 1042, 1059, - 71, 1046, 71, 1043, 71, 1044, 1042, 1047, 71, 71, - 71, 1052, 71, 1053, 71, 1045, 1051, 71, 1048, 71, - 1055, 1056, 71, 1050, 71, 71, 71, 71, 71, 1049, - 71, 1068, 71, 1058, 1057, 71, 1067, 1072, 71, 71, - 1059, 71, 1060, 1073, 1069, 71, 1071, 1061, 1093, 1062, - 1070, 71, 71, 1074, 71, 1063, 1077, 71, 1078, 1079, - 1064, 1065, 71, 71, 71, 71, 1080, 1066, 1083, 71, - 1075, 1076, 142, 71, 71, 71, 71, 1082, 1084, 71, - 1089, 1081, 71, 71, 1086, 1087, 71, 71, 1085, 71, - 71, 1090, 1092, 71, 71, 1088, 71, 71, 71, 71, + 1030, 71, 1031, 1182, 1040, 1043, 1032, 71, 1033, 71, + 71, 1046, 1044, 1034, 1049, 1045, 1047, 71, 1035, 71, + 71, 71, 71, 1048, 71, 1052, 1050, 1055, 71, 71, + 71, 1061, 71, 1054, 1051, 1053, 1060, 71, 1056, 1062, + 1063, 71, 1064, 1058, 1065, 71, 71, 71, 71, 1057, + 71, 71, 71, 71, 1066, 71, 71, 1077, 71, 71, + 1080, 1081, 71, 1076, 71, 1067, 1068, 71, 1069, 1078, + 1079, 71, 1082, 1070, 1144, 1071, 1083, 71, 1086, 71, + 71, 1072, 1088, 71, 1087, 71, 1073, 1074, 71, 71, + 1084, 1092, 1089, 1075, 71, 71, 1085, 71, 1091, 1093, - 1099, 71, 1091, 1094, 71, 1096, 1097, 1098, 1101, 71, - 1095, 71, 71, 1100, 71, 1102, 71, 71, 1103, 71, - 71, 1104, 1109, 71, 1110, 1106, 71, 71, 1105, 1112, - 1107, 1108, 1111, 71, 1113, 1114, 1115, 71, 1117, 71, - 1121, 71, 1116, 1118, 71, 71, 1119, 71, 71, 1120, - 71, 71, 71, 1122, 1128, 71, 1130, 71, 71, 71, - 71, 71, 71, 1132, 1124, 1126, 1127, 1123, 1125, 71, - 71, 71, 1131, 1133, 1134, 1129, 71, 71, 71, 71, - 71, 1136, 1135, 1137, 1139, 1138, 71, 71, 71, 1141, - 71, 1140, 1145, 1142, 1144, 71, 1143, 71, 71, 1146, + 71, 71, 1090, 71, 71, 1098, 71, 71, 71, 1095, + 1096, 71, 1101, 1099, 1094, 71, 71, 71, 71, 1097, + 71, 71, 71, 71, 71, 1100, 1106, 1108, 1102, 1103, + 1105, 1107, 1110, 71, 71, 71, 1104, 1109, 71, 1111, + 71, 71, 3082, 71, 1113, 71, 71, 1112, 1118, 1115, + 1119, 1120, 71, 1114, 71, 1122, 1117, 1123, 1116, 71, + 71, 1121, 1126, 71, 71, 71, 1128, 1127, 71, 1129, + 71, 71, 1124, 1130, 71, 71, 1125, 1137, 1131, 71, + 71, 71, 1139, 71, 71, 71, 71, 3082, 71, 71, + 1133, 1132, 1135, 1134, 1141, 1136, 71, 1150, 71, 1140, - 71, 71, 71, 71, 1147, 1149, 71, 1150, 1148, 71, - 1156, 71, 1154, 1157, 71, 1151, 71, 71, 71, 71, - 1152, 71, 1158, 1153, 1155, 71, 1159, 1161, 1164, 71, - 1160, 71, 1162, 71, 71, 71, 1165, 71, 1163, 1166, - 71, 71, 71, 71, 1167, 1171, 1168, 1169, 71, 71, - 71, 1172, 71, 1177, 1173, 1178, 71, 71, 71, 71, - 1170, 71, 1175, 1180, 1181, 71, 71, 1174, 71, 71, - 1185, 1176, 1179, 71, 71, 1182, 71, 71, 71, 71, - 1183, 1184, 1187, 1191, 71, 71, 1186, 71, 71, 71, - 1197, 71, 71, 1192, 1195, 1188, 3070, 1190, 1199, 1194, + 1142, 1138, 71, 1145, 71, 1143, 71, 71, 71, 1146, + 71, 1148, 1147, 1149, 71, 1154, 1151, 1155, 71, 71, + 1153, 71, 71, 1152, 71, 71, 1159, 1158, 1156, 71, + 71, 71, 71, 71, 71, 1163, 1165, 1166, 1170, 1167, + 1157, 71, 71, 71, 71, 71, 1164, 1160, 71, 1161, + 1168, 1162, 71, 1169, 1173, 71, 71, 1175, 71, 1171, + 71, 1174, 71, 71, 1176, 71, 71, 71, 71, 1180, + 1181, 1177, 1172, 71, 71, 71, 1186, 1187, 1190, 71, + 71, 1178, 71, 71, 1179, 1184, 1183, 71, 71, 71, + 1188, 1194, 1189, 1185, 71, 71, 71, 71, 71, 1191, - 1193, 1196, 1189, 1200, 71, 71, 71, 71, 1198, 71, - 1201, 71, 1203, 1202, 71, 71, 71, 71, 71, 71, - 1204, 1206, 71, 1212, 71, 1209, 71, 71, 1205, 71, - 1207, 71, 71, 71, 1210, 1337, 1208, 1216, 71, 1222, - 1213, 1211, 71, 71, 1215, 1214, 71, 1218, 1223, 1224, - 71, 71, 1217, 1225, 71, 71, 1219, 1227, 1220, 71, - 71, 1221, 71, 71, 71, 1226, 71, 1231, 71, 1230, - 71, 1233, 1236, 71, 1228, 1234, 71, 1229, 71, 71, - 71, 1237, 1232, 1238, 1240, 71, 71, 1235, 71, 1241, - 1239, 71, 71, 71, 71, 1242, 71, 71, 71, 1245, + 71, 1193, 1192, 1200, 71, 1196, 71, 71, 71, 71, + 1206, 71, 1195, 1204, 71, 71, 1197, 1221, 71, 1199, + 1201, 1203, 1202, 1198, 1205, 1208, 1209, 71, 71, 1211, + 71, 71, 71, 1210, 1207, 1212, 71, 71, 71, 71, + 71, 71, 71, 1215, 71, 71, 71, 71, 71, 71, + 1213, 1214, 1225, 1251, 1216, 71, 1219, 3082, 1222, 1217, + 1227, 1220, 1224, 1223, 71, 1231, 71, 71, 1226, 1228, + 71, 1229, 1232, 1234, 1230, 1233, 71, 71, 71, 71, + 1236, 71, 71, 71, 1235, 71, 71, 1240, 1239, 71, + 1243, 71, 1246, 71, 71, 3082, 71, 1237, 1242, 1238, - 71, 1248, 71, 1243, 1246, 71, 1244, 71, 1247, 1249, - 71, 1253, 71, 71, 1258, 1250, 71, 1254, 1252, 1251, - 71, 1257, 71, 71, 1260, 71, 1264, 1255, 1262, 71, - 1256, 1265, 71, 1261, 71, 71, 1259, 1263, 71, 1269, - 71, 3070, 71, 71, 1279, 71, 1278, 1268, 1266, 1267, - 71, 1277, 71, 1276, 1281, 1270, 71, 71, 1271, 1272, - 1282, 1280, 1283, 1273, 71, 71, 71, 71, 1285, 1274, - 1284, 71, 1287, 1275, 71, 71, 71, 1288, 71, 1289, - 71, 71, 71, 71, 1297, 1286, 1294, 1292, 71, 71, - 71, 1298, 1338, 1299, 1291, 1290, 1295, 71, 71, 71, + 1244, 1247, 1241, 71, 71, 71, 71, 71, 1248, 1250, + 1245, 71, 71, 71, 1249, 1252, 71, 71, 71, 71, + 1253, 71, 1254, 1258, 1256, 71, 71, 71, 1257, 1259, + 1255, 1263, 71, 71, 71, 71, 71, 1260, 1268, 1262, + 1261, 1264, 1267, 1270, 71, 71, 71, 1265, 1269, 1274, + 1272, 71, 1266, 71, 1275, 71, 1271, 71, 1273, 71, + 71, 1279, 71, 1288, 71, 1289, 1287, 1277, 71, 71, + 1276, 71, 1278, 71, 1292, 1286, 1290, 1291, 1280, 71, + 71, 1281, 1282, 71, 1293, 71, 1283, 71, 1294, 71, + 1295, 71, 1284, 71, 1297, 71, 1285, 71, 1298, 71, - 1293, 1296, 1300, 71, 1306, 71, 1307, 1308, 1301, 71, - 71, 71, 71, 1302, 1310, 1303, 1309, 1304, 71, 1305, - 71, 71, 71, 1314, 71, 71, 1311, 1313, 1315, 71, - 1312, 1316, 71, 1320, 71, 1319, 71, 1318, 71, 1324, - 71, 1325, 1317, 71, 1321, 71, 1326, 71, 71, 71, - 1323, 71, 1328, 1322, 71, 71, 71, 1327, 1330, 71, - 1333, 71, 1329, 1334, 71, 1336, 71, 71, 71, 1331, - 1341, 1335, 1339, 1342, 71, 1344, 71, 71, 1340, 1332, - 71, 1345, 1346, 71, 71, 1349, 71, 71, 1343, 71, - 71, 71, 1351, 71, 71, 71, 1353, 1355, 71, 71, + 1299, 71, 71, 71, 1316, 71, 1296, 1300, 1302, 1301, + 1304, 71, 1307, 1308, 71, 1305, 1309, 1303, 71, 71, + 1306, 71, 71, 1311, 71, 1310, 1317, 1318, 1312, 71, + 1313, 71, 1314, 1319, 1315, 1320, 71, 71, 1324, 1321, + 71, 71, 71, 1325, 71, 71, 1323, 1328, 71, 1326, + 71, 71, 71, 71, 1322, 1334, 71, 1330, 71, 1329, + 71, 71, 71, 1327, 71, 1335, 1333, 1337, 1336, 1331, + 1332, 71, 1339, 71, 1341, 71, 1338, 1344, 71, 71, + 1343, 71, 1340, 1346, 71, 71, 71, 1342, 1347, 71, + 1349, 71, 1348, 71, 1345, 1352, 71, 1354, 71, 71, - 3070, 1357, 1354, 71, 1347, 1348, 71, 1350, 1359, 71, - 1352, 71, 1356, 71, 1358, 71, 1361, 1362, 1363, 71, - 1360, 71, 1365, 71, 1364, 71, 71, 71, 1366, 1371, - 1372, 1368, 71, 1367, 1369, 71, 71, 1373, 1374, 1370, - 71, 71, 71, 71, 71, 1378, 71, 71, 71, 1375, - 1382, 1383, 71, 1377, 71, 1385, 71, 71, 1384, 71, - 1376, 71, 71, 1379, 71, 71, 71, 1380, 1386, 71, - 1392, 1381, 71, 71, 1387, 71, 1389, 1397, 71, 1388, - 1390, 71, 1393, 1391, 71, 71, 1396, 1401, 71, 1399, - 71, 1395, 1402, 71, 71, 71, 71, 1394, 1398, 1404, + 1350, 71, 1351, 71, 1355, 71, 1356, 1359, 71, 71, + 71, 1353, 71, 1361, 71, 71, 71, 71, 1365, 1363, + 1357, 71, 71, 71, 1364, 1367, 1358, 71, 1369, 1360, + 71, 71, 1362, 71, 3082, 1366, 1368, 71, 1371, 1372, + 71, 1370, 1373, 71, 1375, 1374, 71, 71, 1377, 71, + 71, 1376, 1381, 1378, 1382, 1384, 1379, 71, 71, 71, + 71, 71, 1383, 1380, 71, 71, 1388, 71, 1385, 71, + 71, 71, 1392, 1393, 71, 1395, 1387, 71, 71, 71, + 1394, 71, 71, 1386, 71, 71, 71, 71, 1402, 1389, + 1390, 1396, 71, 71, 1391, 71, 1399, 1397, 71, 1400, - 71, 71, 1405, 1412, 1400, 71, 1403, 71, 1414, 1406, - 1410, 1407, 71, 1411, 71, 1408, 1415, 71, 1409, 1417, - 71, 1413, 71, 71, 1418, 71, 71, 71, 1416, 71, - 71, 1422, 71, 71, 1424, 71, 71, 1429, 71, 1419, - 71, 1421, 1430, 71, 71, 1423, 1426, 71, 1420, 1433, - 1425, 1427, 71, 1428, 71, 71, 1434, 71, 1431, 71, - 71, 71, 1432, 71, 71, 1440, 1435, 1437, 1436, 1442, - 1441, 71, 1438, 71, 1445, 71, 71, 71, 1439, 1443, - 1444, 71, 1447, 1450, 71, 1451, 1449, 71, 1452, 71, - 1446, 71, 71, 1453, 1454, 71, 71, 71, 1448, 71, + 1407, 71, 1398, 1406, 1401, 71, 71, 71, 71, 1411, + 71, 1409, 1403, 1405, 1412, 71, 71, 1414, 1404, 71, + 71, 71, 3082, 71, 1416, 71, 1410, 1415, 1408, 71, + 1420, 1422, 1424, 1421, 1413, 1417, 1418, 1423, 71, 1419, + 71, 71, 1427, 71, 1425, 71, 71, 1428, 71, 71, + 71, 71, 1426, 71, 1432, 1433, 71, 71, 1435, 71, + 71, 71, 1429, 71, 1431, 71, 1440, 1441, 71, 1434, + 71, 1430, 71, 1437, 1444, 1438, 1436, 71, 1439, 1442, + 71, 71, 1445, 71, 71, 71, 71, 1443, 71, 71, + 1451, 1446, 1448, 1452, 1453, 1447, 71, 71, 1449, 71, - 1455, 71, 1457, 71, 71, 1461, 1456, 71, 71, 71, - 1460, 71, 71, 1458, 71, 1467, 1459, 1463, 1469, 1464, - 1468, 71, 1465, 1470, 71, 71, 1472, 1462, 71, 71, - 1466, 71, 1471, 71, 71, 71, 71, 1480, 1476, 71, - 1475, 71, 71, 71, 1481, 1483, 71, 1473, 1474, 71, - 1486, 71, 1485, 1477, 1479, 1478, 71, 71, 71, 71, - 71, 1484, 71, 71, 71, 71, 1494, 1482, 1487, 71, - 1497, 71, 1495, 71, 1491, 1496, 1488, 1489, 1490, 1493, - 1498, 71, 71, 1492, 71, 71, 1501, 1499, 1500, 71, - 71, 71, 1504, 71, 1502, 71, 1505, 71, 71, 71, + 1456, 71, 71, 1450, 71, 1455, 1454, 1458, 1461, 1460, + 1462, 71, 1457, 71, 71, 1466, 71, 71, 1463, 71, + 1464, 1465, 71, 1459, 71, 71, 71, 71, 71, 1472, + 71, 1468, 71, 1467, 1471, 71, 71, 71, 1478, 1469, + 1474, 1470, 1475, 1479, 71, 71, 1480, 71, 1483, 1476, + 1473, 1481, 71, 71, 71, 1477, 71, 71, 71, 71, + 71, 1487, 1491, 71, 71, 1482, 1486, 71, 71, 1492, + 1494, 71, 1484, 1485, 71, 1497, 71, 1488, 1490, 1489, + 1496, 71, 71, 71, 71, 71, 1495, 71, 71, 1493, + 1498, 71, 71, 1505, 71, 1508, 71, 1506, 71, 1502, - 1508, 1514, 1503, 1512, 71, 71, 1509, 71, 71, 1506, - 1513, 1507, 1516, 71, 1511, 71, 71, 1510, 1517, 1518, - 1519, 71, 71, 1515, 71, 1523, 1524, 71, 71, 71, - 71, 71, 71, 1528, 71, 1527, 1529, 1531, 71, 71, - 1521, 1520, 71, 71, 1522, 71, 1525, 71, 1532, 71, - 1526, 1533, 71, 71, 1530, 1534, 1536, 71, 1538, 1535, - 71, 1539, 71, 71, 71, 71, 71, 1537, 71, 1543, - 71, 1545, 1540, 71, 71, 1546, 71, 1550, 71, 1544, - 71, 71, 1542, 1541, 71, 71, 1547, 71, 1548, 1553, - 1555, 71, 1551, 71, 71, 1558, 1554, 1556, 1552, 1549, + 1507, 1499, 1500, 1501, 1509, 71, 1504, 71, 1503, 71, + 71, 1512, 1510, 1511, 71, 71, 71, 1515, 71, 1513, + 71, 1516, 71, 71, 71, 1519, 1525, 1514, 1523, 71, + 71, 1520, 71, 71, 1517, 1524, 1518, 1527, 71, 1522, + 71, 71, 1521, 1528, 1529, 1530, 71, 71, 1526, 71, + 1534, 1535, 71, 71, 71, 71, 71, 71, 1539, 71, + 1538, 1540, 1542, 71, 71, 1532, 1531, 71, 71, 1533, + 71, 1536, 71, 1543, 71, 1537, 1544, 71, 71, 1541, + 1545, 1547, 71, 1549, 1546, 71, 1550, 71, 71, 71, + 71, 71, 1548, 71, 1554, 71, 1556, 1551, 71, 71, - 71, 71, 71, 71, 71, 1557, 1561, 71, 1563, 1559, - 71, 1560, 1564, 71, 71, 71, 71, 1571, 71, 71, - 1562, 1566, 1565, 1572, 71, 71, 71, 71, 1569, 1567, - 1568, 1576, 71, 71, 1575, 1578, 1580, 1579, 71, 1573, - 1570, 71, 71, 1582, 1574, 1584, 71, 1577, 71, 71, - 71, 71, 71, 71, 1589, 1583, 1586, 1587, 1581, 71, - 1590, 71, 71, 71, 71, 71, 1601, 1585, 1594, 71, - 1595, 71, 71, 71, 71, 1588, 1591, 1598, 1593, 1592, - 1599, 71, 71, 1596, 1597, 1603, 1602, 71, 71, 1609, - 71, 71, 1600, 1606, 1608, 71, 1605, 71, 1607, 71, + 1557, 71, 1561, 71, 1555, 71, 71, 1553, 1552, 71, + 71, 1558, 71, 1559, 1564, 1566, 71, 1562, 71, 71, + 1569, 1565, 1567, 1563, 1560, 71, 71, 71, 71, 71, + 1568, 1572, 71, 1574, 1570, 71, 1571, 1575, 71, 71, + 71, 71, 1582, 71, 71, 1573, 1577, 1576, 1583, 71, + 71, 71, 71, 1580, 1578, 1579, 1587, 71, 71, 1586, + 1589, 1591, 1590, 71, 1584, 1581, 71, 71, 1593, 1585, + 1595, 71, 1588, 71, 71, 71, 71, 71, 71, 1600, + 1594, 1597, 1598, 1592, 71, 1601, 71, 71, 71, 71, + 71, 1612, 1596, 1605, 71, 1606, 71, 71, 71, 71, - 1611, 1604, 1610, 71, 1612, 1613, 71, 71, 1616, 71, - 71, 71, 1614, 71, 1620, 1621, 1619, 71, 1623, 1615, - 71, 71, 1622, 71, 71, 71, 71, 71, 1617, 71, - 1618, 1625, 1626, 71, 1627, 71, 71, 71, 1635, 71, - 71, 71, 71, 1628, 71, 71, 1624, 1629, 71, 71, - 1631, 1632, 1633, 71, 1634, 1630, 1640, 71, 1642, 1636, - 71, 1643, 1637, 1638, 71, 71, 1639, 71, 1641, 71, - 71, 71, 71, 71, 71, 71, 71, 1658, 71, 1644, - 1648, 1645, 1650, 1651, 71, 1649, 1652, 1647, 1653, 1646, - 71, 1654, 71, 1657, 1659, 71, 1655, 71, 1656, 71, + 1599, 1602, 1609, 1604, 1603, 1610, 71, 71, 1607, 1608, + 1614, 1613, 71, 71, 1620, 71, 71, 1611, 1617, 1619, + 71, 1616, 1621, 1618, 71, 1622, 1615, 1625, 71, 71, + 1623, 71, 1624, 71, 71, 71, 71, 1627, 71, 1626, + 71, 1632, 1633, 1631, 71, 1635, 71, 71, 71, 1634, + 71, 71, 71, 1628, 71, 1629, 71, 1637, 1630, 1638, + 71, 1639, 71, 71, 71, 1647, 71, 71, 1640, 1636, + 71, 71, 71, 71, 1641, 71, 71, 1643, 1644, 1645, + 1652, 71, 1642, 1646, 71, 71, 1648, 1650, 71, 1655, + 1654, 1656, 1649, 71, 71, 71, 1651, 71, 71, 71, - 1662, 71, 1661, 71, 1660, 1663, 71, 71, 1666, 71, - 71, 71, 1664, 71, 1667, 71, 71, 1675, 71, 1670, - 1665, 1676, 71, 71, 1674, 1672, 1668, 1669, 1673, 71, - 71, 71, 1671, 71, 71, 71, 71, 71, 1677, 71, - 1685, 71, 1678, 71, 1689, 1680, 1682, 71, 1679, 1681, - 1687, 71, 1688, 1686, 1684, 71, 1693, 71, 1690, 71, - 1683, 71, 71, 1697, 1691, 71, 71, 1692, 1698, 71, - 71, 3070, 71, 1705, 71, 1694, 1699, 1702, 1703, 1696, - 1695, 1700, 71, 1706, 71, 71, 1708, 1701, 1704, 71, - 1707, 71, 71, 71, 1712, 71, 71, 1709, 1716, 1714, + 71, 71, 71, 71, 1653, 1662, 1660, 1657, 71, 1663, + 1670, 71, 1664, 1659, 1661, 1672, 71, 1665, 1658, 1669, + 1671, 71, 71, 1666, 1675, 71, 71, 1668, 1667, 1674, + 71, 71, 71, 71, 71, 71, 71, 1678, 1679, 71, + 1673, 71, 1687, 1676, 71, 1682, 71, 71, 71, 71, + 1677, 1681, 71, 1680, 1690, 1686, 1684, 71, 1683, 1685, + 1688, 71, 71, 71, 1689, 71, 1692, 1691, 71, 1697, + 71, 71, 71, 1693, 1694, 71, 1701, 1700, 71, 71, + 1699, 71, 71, 1696, 1705, 71, 1698, 1709, 1695, 71, + 1702, 1703, 1710, 71, 1704, 71, 1706, 71, 71, 3082, - 71, 71, 1710, 71, 71, 1715, 71, 1711, 1713, 1717, - 71, 71, 71, 71, 71, 71, 71, 1743, 1720, 71, - 1721, 71, 1718, 1726, 71, 1719, 1722, 1723, 1728, 1724, - 1725, 1729, 1730, 71, 71, 1731, 71, 71, 71, 71, - 1736, 1732, 71, 71, 71, 1727, 71, 1740, 71, 71, - 71, 1733, 1735, 71, 1742, 71, 71, 1734, 1744, 1738, - 1745, 71, 1739, 71, 1737, 1746, 1749, 71, 71, 1741, - 71, 71, 1753, 71, 71, 71, 71, 71, 1748, 71, - 71, 71, 1751, 1755, 1747, 71, 1760, 1750, 1754, 1756, - 1752, 1757, 71, 1761, 1758, 71, 1764, 71, 71, 71, + 71, 1715, 1707, 1708, 1712, 1714, 1718, 71, 71, 1711, + 1717, 71, 71, 1719, 1720, 71, 1716, 71, 71, 1713, + 71, 1721, 1724, 71, 71, 1728, 71, 1726, 71, 71, + 71, 71, 1723, 1727, 1729, 71, 1725, 1722, 71, 71, + 71, 71, 71, 1732, 1738, 71, 71, 1733, 1730, 1731, + 71, 1740, 1734, 1735, 1741, 1736, 1737, 71, 71, 1742, + 71, 1743, 71, 71, 71, 1748, 1739, 71, 71, 71, + 1744, 71, 1752, 71, 71, 71, 1745, 1747, 71, 1754, + 71, 71, 1746, 1755, 1750, 1756, 1757, 1751, 71, 1749, + 71, 71, 1761, 71, 1753, 71, 71, 1758, 71, 1765, - 1759, 1763, 1765, 1762, 1766, 71, 71, 1768, 1769, 1770, - 71, 1767, 71, 71, 71, 1772, 71, 71, 71, 1773, - 71, 71, 71, 71, 1771, 71, 71, 1778, 71, 71, - 1782, 71, 1779, 1790, 71, 1783, 71, 1774, 1776, 1777, - 1775, 1780, 71, 1781, 71, 71, 1791, 1786, 1784, 1788, - 71, 1785, 71, 71, 1787, 71, 71, 1792, 1796, 71, - 1789, 71, 71, 1799, 1800, 71, 1801, 71, 71, 1793, - 71, 1794, 71, 1795, 3070, 1797, 1808, 1798, 71, 1802, - 1803, 71, 71, 1804, 1807, 71, 1809, 71, 1811, 1805, - 1810, 1806, 71, 1813, 71, 71, 1812, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 1760, 71, 1763, 1767, + 71, 71, 1772, 1759, 1762, 1766, 1768, 1764, 71, 1769, + 71, 71, 1770, 1773, 1777, 1771, 1775, 71, 1774, 1776, + 71, 1778, 71, 71, 1781, 71, 1780, 71, 1779, 1784, + 71, 1782, 71, 71, 71, 71, 1785, 1783, 71, 71, + 71, 71, 71, 71, 1790, 71, 71, 1794, 71, 71, + 1791, 3082, 71, 1800, 1786, 1792, 1788, 1787, 1789, 71, + 1793, 1795, 71, 1803, 1798, 71, 1797, 1802, 71, 71, + 1804, 1799, 71, 71, 1796, 71, 71, 1801, 1808, 71, + 1811, 1812, 71, 71, 1805, 1813, 71, 71, 1806, 1809, - 1815, 1816, 71, 71, 1817, 1818, 71, 1825, 3070, 71, - 71, 71, 71, 71, 1830, 71, 71, 71, 1823, 1827, - 1814, 1819, 1820, 1821, 1828, 71, 1824, 1831, 1822, 1829, - 1826, 1833, 1832, 71, 71, 71, 71, 71, 1837, 71, - 71, 1839, 1834, 71, 71, 71, 1842, 1843, 71, 71, - 1845, 71, 71, 71, 1835, 71, 1836, 71, 71, 1850, - 1851, 71, 1838, 1840, 1847, 71, 1841, 1848, 71, 1844, - 71, 71, 71, 71, 1849, 71, 1857, 1846, 1852, 1854, - 1855, 71, 71, 1853, 1861, 71, 71, 1860, 1864, 1865, - 71, 1866, 71, 1863, 71, 71, 1856, 1859, 71, 1858, + 71, 1810, 71, 1807, 1815, 71, 71, 1816, 1819, 71, + 71, 1821, 71, 1814, 1820, 1822, 1823, 71, 1817, 1825, + 1824, 1818, 71, 71, 71, 71, 1830, 1827, 1828, 71, + 71, 1829, 71, 71, 71, 71, 1837, 71, 1839, 71, + 71, 71, 71, 1840, 71, 1831, 1832, 1833, 1826, 71, + 71, 1842, 1834, 1841, 1835, 1836, 1844, 1838, 1845, 71, + 1847, 1843, 71, 71, 71, 1849, 71, 71, 1846, 71, + 1851, 71, 71, 1854, 1855, 71, 71, 1857, 71, 71, + 71, 71, 71, 1848, 1863, 71, 1862, 1852, 71, 1850, + 1859, 1860, 71, 1853, 71, 71, 1856, 71, 71, 71, - 71, 71, 71, 1867, 71, 1862, 71, 71, 71, 1868, - 1872, 71, 1875, 1876, 1871, 71, 1877, 71, 71, 71, - 71, 1869, 71, 1870, 1873, 71, 71, 1885, 71, 1880, - 71, 1884, 1879, 71, 1874, 1878, 71, 71, 1882, 3070, - 71, 1889, 1883, 71, 71, 1881, 1890, 71, 1887, 1886, - 1892, 71, 1891, 71, 71, 1888, 71, 1893, 1894, 1896, - 71, 71, 71, 1895, 71, 1897, 1900, 1903, 1898, 71, - 71, 1906, 71, 71, 1905, 1899, 71, 1907, 71, 71, - 71, 71, 1901, 1908, 1902, 1904, 71, 1909, 1913, 71, - 71, 1910, 1914, 71, 1915, 1920, 1911, 1917, 1918, 1916, + 1869, 1861, 71, 1867, 1858, 1866, 71, 71, 1873, 1864, + 1865, 71, 1872, 71, 71, 1876, 1878, 71, 1877, 71, + 1875, 71, 1871, 1868, 71, 71, 71, 71, 1870, 71, + 1879, 1874, 71, 71, 71, 1880, 1884, 71, 1887, 1881, + 71, 1883, 1888, 1889, 71, 71, 1882, 71, 71, 71, + 1885, 1892, 71, 71, 71, 1891, 1897, 71, 1896, 71, + 1886, 71, 71, 71, 1890, 1894, 1901, 1893, 71, 1902, + 1904, 71, 71, 1898, 1895, 71, 1899, 1903, 1900, 1905, + 1908, 71, 71, 1906, 71, 71, 71, 71, 1907, 71, + 1915, 1912, 71, 71, 1918, 71, 71, 1917, 1910, 71, - 71, 1912, 71, 71, 71, 1922, 71, 71, 71, 71, - 1927, 71, 1919, 1924, 1921, 71, 71, 1929, 1923, 1925, - 71, 71, 71, 71, 71, 71, 71, 1935, 1934, 1933, - 1936, 71, 1930, 1926, 1931, 1937, 71, 1928, 71, 1939, - 1932, 71, 71, 71, 71, 71, 3070, 1940, 1941, 71, - 1942, 1943, 71, 71, 1944, 1945, 71, 1947, 1938, 71, - 71, 71, 1951, 71, 71, 1946, 1950, 1955, 71, 71, - 71, 1948, 1949, 1952, 1953, 1954, 71, 71, 71, 71, - 71, 1962, 1960, 71, 71, 71, 1957, 71, 1961, 71, - 71, 71, 1967, 71, 1964, 71, 1956, 1958, 3070, 1959, + 1919, 71, 71, 1909, 1911, 1920, 71, 1913, 1916, 1914, + 71, 1921, 1925, 71, 1926, 71, 71, 1922, 1927, 1929, + 1930, 71, 1923, 1928, 71, 71, 71, 71, 1934, 71, + 1924, 71, 1932, 1933, 71, 1936, 71, 71, 1939, 71, + 1941, 1935, 1931, 71, 71, 71, 71, 71, 1937, 71, + 71, 71, 1947, 1946, 1945, 1942, 71, 1943, 1948, 71, + 3082, 1940, 1938, 1949, 71, 1951, 1944, 71, 71, 71, + 71, 71, 71, 1952, 1953, 1956, 1950, 1955, 1954, 71, + 71, 71, 1957, 71, 1959, 71, 71, 1963, 71, 71, + 71, 1962, 1958, 1960, 71, 1965, 71, 1961, 1964, 1966, - 71, 71, 1963, 1968, 1966, 71, 1971, 1965, 71, 1970, - 1972, 1969, 71, 71, 1977, 71, 1974, 1975, 71, 71, - 1973, 1978, 71, 71, 71, 1983, 1976, 71, 71, 1985, - 71, 71, 1986, 1987, 71, 1979, 71, 1982, 1980, 1981, - 71, 71, 71, 1989, 1984, 71, 1991, 71, 1988, 71, - 71, 1992, 71, 71, 71, 71, 71, 71, 71, 2003, - 71, 1990, 1994, 1999, 1995, 1996, 71, 2002, 1993, 1998, - 71, 71, 71, 2006, 2004, 1997, 2000, 2007, 2001, 71, - 71, 71, 2010, 71, 2009, 71, 2005, 71, 2012, 71, - 71, 2008, 2013, 71, 71, 71, 2014, 2018, 71, 2011, + 1967, 71, 71, 71, 71, 71, 71, 71, 1974, 1972, + 71, 1969, 1973, 71, 71, 71, 1968, 71, 71, 1976, + 71, 1970, 71, 1971, 1975, 71, 1979, 1982, 3082, 1978, + 71, 1977, 71, 1983, 1985, 1981, 71, 1980, 71, 1984, + 71, 1986, 71, 1987, 1989, 71, 71, 71, 71, 1988, + 1990, 1995, 71, 71, 1997, 71, 1991, 71, 1992, 1999, + 71, 1993, 1994, 71, 71, 1998, 71, 71, 2003, 1996, + 71, 71, 2000, 2001, 71, 2002, 71, 71, 71, 2004, + 71, 71, 71, 71, 71, 71, 2006, 2011, 2007, 2008, + 2015, 71, 2005, 71, 71, 2010, 2014, 2018, 2019, 71, - 2020, 71, 2016, 2022, 71, 71, 2017, 2015, 71, 2019, - 71, 71, 2025, 2024, 71, 2021, 2026, 71, 71, 2027, - 2030, 71, 71, 71, 71, 71, 71, 2031, 2036, 71, - 71, 2023, 2033, 71, 2032, 2028, 71, 2037, 2029, 2035, - 2040, 71, 2034, 71, 71, 2038, 71, 71, 2041, 2042, - 2046, 71, 2044, 2039, 71, 71, 2048, 71, 2049, 2043, - 2045, 71, 71, 71, 71, 71, 2047, 2051, 71, 71, - 2050, 2055, 2057, 2053, 71, 71, 2054, 2058, 71, 71, - 2060, 2052, 71, 2059, 2062, 71, 2056, 2061, 71, 71, - 2063, 2067, 71, 71, 71, 2064, 71, 71, 2066, 71, + 2012, 2016, 2013, 71, 2009, 2017, 71, 71, 2021, 2022, + 71, 71, 71, 71, 71, 2024, 71, 71, 2025, 2020, + 71, 2026, 2030, 2028, 2023, 71, 71, 2032, 2029, 2034, + 71, 2027, 71, 71, 71, 71, 2031, 2037, 2036, 2038, + 2033, 71, 71, 71, 2042, 71, 2039, 71, 71, 71, + 71, 71, 2043, 2045, 2048, 71, 71, 2049, 2035, 71, + 2040, 2044, 71, 2041, 2052, 2047, 71, 71, 2046, 2054, + 71, 2053, 71, 71, 2050, 2058, 71, 71, 2060, 71, + 71, 2056, 2051, 71, 2061, 71, 71, 71, 71, 2057, + 2055, 2059, 2063, 71, 2062, 2067, 2069, 2065, 2064, 71, - 71, 71, 71, 71, 71, 71, 2076, 2077, 2065, 71, - 2071, 2068, 2069, 2070, 2072, 2073, 2074, 71, 2078, 71, - 2075, 71, 71, 2079, 71, 2081, 71, 71, 2082, 2087, - 71, 71, 2089, 71, 71, 2086, 2080, 2083, 2091, 2084, - 2088, 71, 71, 71, 3070, 2094, 2090, 2092, 71, 2085, - 2095, 71, 2096, 2097, 2093, 71, 2099, 71, 71, 71, - 2098, 2101, 71, 2100, 71, 2102, 71, 2106, 71, 71, - 2107, 71, 2110, 2109, 2115, 2105, 71, 71, 71, 2103, - 71, 2111, 2114, 2108, 71, 2112, 2113, 71, 71, 71, - 2104, 71, 2116, 71, 71, 2118, 71, 71, 71, 2120, + 2066, 2070, 71, 71, 71, 71, 71, 2068, 2071, 71, + 2074, 2075, 71, 71, 71, 2072, 2073, 2079, 71, 71, + 71, 71, 2076, 2078, 71, 71, 71, 71, 71, 71, + 71, 2080, 2077, 71, 2088, 2083, 2082, 2081, 2085, 2084, + 2086, 71, 2090, 71, 71, 2087, 2089, 71, 71, 2091, + 2093, 71, 2097, 2094, 2099, 71, 71, 71, 2101, 71, + 2098, 71, 2092, 2095, 71, 2096, 2100, 71, 2103, 3082, + 71, 2106, 2104, 2108, 2105, 2102, 2107, 71, 2109, 71, + 71, 71, 71, 2110, 71, 2113, 71, 71, 2114, 2111, + 2112, 2117, 2118, 71, 71, 2119, 71, 71, 2122, 71, - 71, 71, 71, 2123, 71, 71, 2129, 71, 71, 2117, - 2127, 71, 2122, 71, 71, 2130, 2125, 71, 2119, 2121, - 2124, 2126, 2132, 2131, 71, 71, 2128, 71, 71, 71, - 2136, 2139, 71, 2135, 71, 71, 2134, 2140, 71, 2133, - 2137, 71, 71, 71, 71, 71, 2138, 2150, 71, 71, - 71, 2155, 71, 2141, 2142, 2151, 2147, 71, 71, 71, - 71, 2143, 2145, 2146, 2149, 2144, 2148, 2156, 71, 71, - 2152, 71, 2153, 2154, 2157, 71, 71, 71, 2160, 2166, - 2161, 2163, 71, 2162, 2158, 71, 71, 71, 71, 2159, - 2164, 2165, 2169, 71, 2170, 71, 71, 2172, 71, 71, + 71, 71, 2115, 2128, 71, 2123, 71, 2124, 2120, 2125, + 71, 71, 2127, 2116, 71, 2121, 2126, 71, 71, 71, + 71, 2129, 2132, 2130, 71, 71, 71, 71, 71, 2135, + 71, 71, 71, 2139, 2141, 71, 2142, 71, 71, 2131, + 2134, 71, 71, 2133, 2136, 71, 2137, 2138, 71, 71, + 2144, 71, 2143, 2140, 2146, 71, 2148, 2151, 71, 71, + 2147, 2149, 71, 2152, 2145, 71, 71, 2150, 71, 71, + 71, 71, 71, 2162, 71, 71, 71, 71, 2153, 2163, + 71, 2154, 71, 2159, 2161, 71, 2200, 2157, 2155, 2165, + 2156, 2158, 2170, 2160, 71, 2164, 71, 2167, 2166, 2168, - 2168, 2174, 71, 71, 71, 2177, 71, 2167, 71, 2176, - 2178, 71, 71, 71, 71, 2171, 71, 2173, 2175, 71, - 71, 2180, 2179, 3070, 2183, 2184, 71, 2181, 2186, 71, - 71, 71, 71, 2182, 2189, 2185, 2188, 71, 2187, 71, - 2190, 2192, 71, 71, 2196, 71, 71, 71, 71, 71, - 71, 2193, 2194, 2200, 71, 2191, 2201, 71, 71, 2203, - 71, 71, 2195, 2199, 2206, 71, 2197, 71, 71, 2202, - 2198, 71, 71, 2204, 2208, 2205, 71, 71, 2213, 71, - 71, 2207, 2209, 71, 71, 2215, 71, 71, 2214, 2210, - 2211, 71, 2219, 71, 2216, 71, 71, 2223, 2220, 71, + 71, 2169, 71, 71, 2172, 71, 71, 2171, 2175, 71, + 71, 2176, 71, 71, 2173, 2177, 71, 2174, 2181, 71, + 2182, 71, 71, 2184, 71, 71, 2186, 71, 2180, 71, + 71, 71, 2178, 2179, 71, 2188, 2189, 71, 2190, 71, + 71, 2183, 71, 2185, 2187, 2191, 71, 71, 2193, 2192, + 71, 2195, 2196, 71, 2198, 71, 71, 71, 2202, 2201, + 71, 2194, 2204, 71, 71, 71, 2197, 71, 2199, 2208, + 71, 71, 71, 2203, 71, 71, 2212, 2213, 71, 2205, + 2206, 71, 71, 2207, 71, 71, 71, 2209, 71, 2211, + 2215, 2218, 71, 2220, 2210, 2219, 71, 2216, 71, 2217, - 2221, 2225, 2212, 71, 71, 71, 71, 2224, 2227, 2217, - 2228, 2218, 2222, 71, 2230, 2232, 71, 71, 2233, 2229, - 71, 71, 2234, 71, 71, 2226, 71, 2231, 71, 2237, - 71, 71, 71, 2238, 71, 3070, 2236, 2239, 2243, 2240, - 2241, 2235, 2244, 71, 71, 71, 2242, 2245, 71, 71, - 71, 2248, 71, 2249, 2246, 71, 2250, 71, 2247, 71, - 2256, 71, 71, 71, 2251, 2252, 71, 2253, 2254, 71, - 71, 71, 2258, 2255, 71, 71, 71, 2257, 2259, 2263, - 2264, 71, 2262, 2267, 71, 2260, 2261, 71, 2268, 2269, - 71, 71, 71, 2266, 2265, 2270, 2271, 2272, 2273, 2274, + 2214, 71, 2221, 71, 2225, 71, 71, 2227, 71, 71, + 71, 2228, 71, 71, 2222, 2226, 2223, 2232, 2233, 71, + 71, 2231, 71, 71, 71, 71, 2229, 2224, 2230, 2237, + 2239, 71, 2235, 2242, 71, 2234, 2240, 2244, 2241, 71, + 71, 2236, 71, 71, 71, 2245, 71, 2246, 2238, 71, + 71, 71, 2249, 71, 71, 2243, 71, 71, 3082, 2248, + 2250, 2255, 2251, 2252, 2254, 2253, 2256, 71, 71, 2247, + 71, 71, 71, 2261, 2257, 71, 2260, 2258, 71, 71, + 2259, 71, 2262, 71, 2266, 2268, 71, 71, 71, 71, + 2263, 71, 71, 71, 71, 2279, 71, 2270, 2264, 2267, - 71, 71, 71, 71, 71, 71, 2276, 71, 71, 71, - 2280, 2281, 71, 71, 2277, 2275, 71, 71, 2283, 71, - 2284, 2278, 2285, 2286, 71, 71, 2282, 2279, 71, 71, - 2287, 71, 2291, 71, 71, 2290, 71, 2288, 71, 71, - 71, 2293, 71, 71, 71, 71, 2297, 2292, 71, 2289, - 2299, 2300, 71, 2309, 2296, 71, 71, 71, 2294, 2295, - 71, 2301, 2302, 2298, 2303, 2304, 2305, 71, 71, 71, - 2307, 71, 71, 2314, 2310, 2306, 71, 2312, 71, 71, - 71, 71, 2311, 2308, 2313, 2316, 71, 71, 2318, 71, - 2315, 71, 71, 71, 71, 71, 2317, 71, 2322, 2319, + 2265, 2271, 2269, 71, 2274, 71, 2275, 2272, 2273, 71, + 2276, 71, 2280, 71, 2277, 2281, 71, 71, 2283, 2284, + 2282, 2278, 2285, 2286, 71, 71, 71, 71, 71, 71, + 2288, 71, 71, 71, 2292, 2293, 71, 71, 71, 2289, + 2287, 71, 2295, 71, 3082, 2290, 71, 2296, 71, 2297, + 2294, 2291, 2298, 71, 71, 71, 71, 2300, 2301, 2299, + 2302, 2303, 71, 71, 71, 71, 71, 71, 2304, 2305, + 71, 2309, 71, 2312, 71, 71, 71, 2311, 71, 71, + 2308, 2313, 71, 2306, 2318, 2307, 71, 2316, 2319, 2317, + 2310, 71, 2314, 71, 2315, 71, 71, 2321, 71, 71, - 2324, 71, 2325, 2326, 71, 2320, 2327, 71, 2321, 2328, - 71, 2329, 71, 71, 71, 71, 71, 2330, 2332, 2337, - 2323, 2335, 71, 71, 71, 71, 71, 71, 2334, 2340, - 71, 71, 2336, 2333, 2331, 71, 71, 2344, 2341, 2345, - 71, 2339, 2338, 71, 71, 71, 2342, 71, 2346, 2343, - 71, 71, 2349, 2350, 2348, 71, 71, 71, 71, 3070, - 71, 71, 2347, 2354, 2351, 2356, 2357, 71, 2353, 2352, - 2358, 71, 2359, 71, 2360, 71, 71, 2355, 71, 2362, - 71, 2364, 71, 2363, 71, 2365, 71, 71, 2361, 71, - 2370, 71, 71, 71, 2366, 2372, 71, 71, 2367, 2373, + 2324, 2322, 71, 2326, 71, 2320, 2325, 2328, 71, 71, + 71, 71, 2330, 71, 71, 71, 2327, 71, 71, 2323, + 2329, 71, 2334, 2338, 71, 2340, 2336, 71, 2331, 2332, + 2333, 71, 2337, 2339, 71, 71, 2341, 71, 71, 71, + 71, 71, 71, 2349, 2335, 2344, 2347, 71, 71, 71, + 2348, 71, 71, 2342, 2346, 2352, 71, 71, 2345, 71, + 2343, 71, 2353, 71, 2356, 71, 2350, 2351, 2357, 71, + 2354, 71, 71, 71, 2360, 2355, 2358, 2361, 71, 2359, + 2362, 71, 71, 71, 71, 71, 3082, 2363, 2366, 71, + 2368, 2369, 71, 71, 2365, 2364, 2370, 71, 2371, 71, - 71, 71, 71, 71, 2374, 2369, 71, 2368, 2376, 2375, - 71, 2371, 71, 71, 2377, 2379, 2382, 71, 71, 71, - 71, 71, 2383, 2378, 71, 71, 2380, 71, 2389, 71, - 71, 71, 2381, 2386, 2390, 71, 71, 71, 2388, 2385, - 2396, 71, 71, 71, 2384, 2387, 2391, 2393, 2398, 71, - 2392, 71, 2394, 2406, 2399, 2397, 2400, 71, 71, 2395, - 2401, 71, 71, 2402, 71, 2403, 71, 2404, 71, 2405, - 71, 71, 71, 71, 71, 71, 71, 2407, 2414, 71, - 71, 2412, 71, 2418, 2419, 71, 71, 71, 2408, 2409, - 2422, 71, 2410, 2411, 2413, 2415, 2421, 2416, 2417, 71, + 2372, 71, 71, 71, 2367, 2373, 71, 2374, 2375, 71, + 2376, 71, 2377, 71, 2378, 71, 2382, 71, 2379, 71, + 2384, 71, 2385, 71, 71, 71, 71, 71, 71, 71, + 71, 2381, 71, 2380, 2388, 2386, 71, 2387, 2383, 71, + 2389, 2391, 2394, 71, 71, 71, 2390, 71, 2395, 2392, + 2393, 71, 71, 2401, 71, 71, 71, 71, 2396, 71, + 2398, 71, 71, 2402, 2397, 2400, 71, 2410, 3082, 2399, + 2403, 2404, 71, 71, 71, 2405, 2408, 2411, 2412, 71, + 2409, 2406, 2413, 71, 2407, 71, 2414, 71, 2415, 71, + 2416, 71, 2417, 71, 71, 71, 71, 71, 71, 71, - 71, 2424, 71, 71, 71, 71, 71, 71, 2420, 2423, - 71, 2427, 71, 2433, 71, 2434, 71, 2425, 71, 71, - 2428, 2426, 2435, 71, 2429, 2430, 2431, 71, 71, 71, - 71, 2432, 2439, 71, 2437, 71, 2436, 2443, 2442, 2444, - 71, 71, 2438, 2445, 2446, 71, 71, 71, 71, 2440, - 2441, 71, 71, 71, 71, 71, 2448, 71, 2452, 71, - 2457, 71, 2456, 2450, 71, 2447, 71, 2449, 2460, 71, - 71, 71, 2451, 71, 2453, 2455, 2454, 2461, 71, 2458, - 2464, 71, 2463, 71, 2459, 2462, 2466, 71, 71, 2469, - 71, 71, 71, 71, 2473, 71, 2465, 2472, 71, 2475, + 71, 71, 2418, 2426, 71, 71, 71, 2424, 71, 2430, + 2431, 71, 2419, 2421, 2420, 71, 71, 2423, 2422, 2425, + 2427, 71, 2428, 2429, 2433, 2434, 71, 71, 2432, 71, + 2435, 2436, 71, 71, 2437, 71, 2439, 71, 71, 71, + 2445, 71, 2446, 71, 2447, 2438, 71, 71, 2440, 71, + 71, 71, 71, 2441, 2443, 2442, 2451, 71, 2444, 71, + 71, 2455, 2449, 71, 2448, 2454, 2456, 71, 2450, 71, + 71, 2457, 2452, 2458, 71, 71, 71, 2453, 71, 2460, + 71, 71, 2459, 71, 71, 2464, 71, 71, 2462, 2468, + 2469, 71, 71, 71, 2461, 2472, 71, 2473, 2463, 71, - 71, 2471, 71, 2470, 71, 71, 71, 2467, 2468, 2476, - 71, 2477, 2480, 71, 71, 2481, 71, 2474, 2479, 2483, - 71, 2478, 71, 71, 71, 71, 2488, 71, 71, 2484, - 2490, 71, 2482, 2486, 2487, 2485, 71, 71, 2489, 71, - 71, 2491, 2492, 71, 71, 2494, 71, 2496, 71, 71, - 71, 2495, 2498, 2493, 2500, 2497, 71, 2503, 71, 2504, - 71, 2501, 71, 2499, 71, 2502, 71, 71, 2509, 2505, - 71, 2506, 71, 2511, 71, 2510, 71, 71, 71, 2514, - 71, 71, 2507, 2513, 2518, 2508, 2515, 71, 2517, 71, - 2516, 2512, 2519, 71, 71, 71, 2523, 2520, 71, 2521, + 71, 2465, 2466, 71, 2467, 2471, 71, 2470, 2476, 71, + 2475, 71, 71, 2477, 2474, 2481, 71, 71, 2478, 71, + 71, 2485, 71, 71, 2484, 2487, 71, 71, 2483, 2482, + 71, 2479, 2480, 71, 71, 2488, 2489, 2492, 71, 71, + 2493, 71, 2486, 2495, 71, 71, 2491, 71, 71, 2490, + 71, 2500, 71, 71, 2502, 71, 71, 2498, 2496, 2499, + 2497, 2503, 71, 2494, 71, 71, 71, 2504, 2501, 71, + 2506, 71, 71, 71, 2507, 71, 71, 71, 2505, 71, + 2509, 2510, 2512, 2517, 2513, 2515, 71, 2511, 2508, 71, + 2514, 2516, 71, 71, 2518, 71, 2521, 71, 71, 71, - 2522, 71, 71, 71, 71, 2524, 71, 71, 2525, 3070, - 2530, 2531, 71, 2526, 2529, 2528, 71, 71, 71, 71, - 71, 2527, 2535, 2532, 2533, 2534, 71, 71, 71, 71, - 71, 71, 2537, 2538, 71, 71, 71, 2543, 2536, 71, - 2541, 71, 71, 2540, 2542, 71, 71, 2539, 2544, 2548, - 71, 2550, 71, 2545, 2552, 71, 71, 71, 71, 71, - 71, 2546, 3070, 2556, 2547, 2549, 71, 2551, 2557, 71, - 2559, 2560, 2554, 2561, 2563, 2553, 71, 71, 2555, 71, - 2562, 71, 71, 71, 71, 2558, 71, 2564, 71, 71, - 2567, 71, 2565, 71, 2570, 2572, 71, 2566, 2573, 71, + 2523, 71, 71, 2522, 2526, 71, 2525, 2527, 71, 71, + 3082, 2519, 2524, 2520, 2529, 71, 71, 71, 2531, 2530, + 71, 71, 2528, 2532, 71, 2533, 2534, 2535, 71, 71, + 71, 71, 2536, 71, 2537, 71, 2542, 71, 2541, 2538, + 71, 2543, 71, 2540, 71, 2544, 2539, 71, 71, 2545, + 71, 71, 71, 2546, 2547, 2549, 2548, 2550, 71, 71, + 71, 71, 71, 2555, 71, 71, 71, 71, 71, 2553, + 2554, 71, 2552, 2556, 2560, 71, 2551, 2564, 71, 71, + 71, 71, 2563, 71, 2557, 71, 2558, 2559, 2562, 2568, + 2561, 2569, 71, 71, 2571, 2572, 2566, 3082, 2573, 2565, - 2574, 71, 2568, 71, 2569, 71, 71, 2575, 71, 2571, - 2576, 2577, 71, 2579, 2581, 71, 71, 71, 2584, 2582, - 71, 2585, 71, 2586, 71, 71, 2578, 2580, 2587, 71, - 71, 71, 2591, 71, 71, 2592, 2583, 2593, 71, 71, - 2595, 71, 2588, 71, 71, 71, 2599, 71, 2589, 2600, - 71, 2590, 71, 71, 2594, 2602, 2596, 2601, 71, 2598, - 2603, 71, 2597, 71, 71, 71, 2608, 2611, 71, 71, - 2604, 2607, 71, 2610, 71, 71, 71, 71, 2605, 2612, - 2614, 71, 71, 2606, 2613, 2616, 71, 71, 71, 2609, - 71, 2619, 2623, 71, 71, 71, 71, 71, 2617, 2618, + 71, 71, 71, 2567, 71, 2574, 71, 71, 71, 71, + 2575, 71, 2576, 71, 71, 2579, 71, 2577, 2570, 71, + 2582, 71, 2578, 2584, 71, 2585, 71, 2580, 71, 2581, + 2586, 71, 2587, 71, 2583, 2589, 71, 71, 2588, 71, + 2593, 2590, 2591, 71, 71, 2594, 71, 71, 2596, 2597, + 71, 2592, 2598, 71, 71, 71, 71, 2599, 2603, 71, + 71, 2604, 2601, 2595, 2605, 71, 71, 71, 2600, 2607, + 71, 71, 71, 2611, 2612, 71, 2602, 71, 71, 71, + 2608, 2606, 2613, 71, 71, 2614, 2610, 71, 2620, 2609, + 2615, 71, 71, 2619, 71, 71, 2623, 71, 71, 2622, - 2615, 71, 2639, 71, 2622, 2620, 2625, 71, 2621, 2624, - 2627, 2630, 71, 2628, 2626, 2629, 2631, 71, 2633, 71, - 2632, 71, 2634, 71, 2635, 71, 2636, 71, 2637, 71, - 71, 71, 2640, 71, 71, 2645, 71, 71, 71, 71, - 2642, 2646, 2648, 71, 71, 2638, 2649, 2650, 71, 2651, - 2652, 71, 71, 2643, 2644, 2647, 2641, 71, 71, 71, - 71, 2653, 2657, 71, 2658, 71, 2654, 2655, 71, 71, - 2661, 71, 71, 71, 2659, 2662, 71, 2656, 2666, 71, - 2664, 71, 2663, 2660, 71, 2665, 2667, 71, 2668, 71, - 71, 71, 71, 2669, 71, 71, 71, 2670, 71, 2672, + 2616, 71, 71, 2617, 2618, 71, 2624, 71, 2626, 71, + 2625, 71, 2628, 71, 71, 71, 2631, 2621, 2635, 71, + 71, 71, 71, 2627, 2629, 2630, 71, 71, 71, 2634, + 2637, 2632, 71, 71, 2633, 2636, 2639, 2642, 2638, 2640, + 2641, 3082, 2643, 71, 2650, 2644, 2645, 71, 71, 2646, + 71, 2647, 71, 2648, 71, 2649, 71, 71, 71, 2653, + 71, 2651, 71, 2657, 71, 71, 71, 2654, 2658, 2660, + 71, 71, 2662, 71, 71, 2664, 71, 2652, 2661, 2663, + 2655, 71, 2656, 71, 2659, 71, 71, 2669, 71, 71, + 2665, 71, 2666, 2670, 2667, 71, 2673, 71, 71, 71, - 2677, 71, 2671, 2673, 2675, 71, 71, 71, 2678, 71, - 2680, 71, 2681, 2932, 2676, 71, 2682, 2674, 2683, 2679, - 71, 2691, 71, 2685, 71, 2684, 2686, 2687, 71, 2688, - 71, 2689, 71, 2690, 71, 71, 2694, 71, 71, 71, - 2693, 71, 71, 2695, 2696, 2697, 71, 71, 71, 71, - 2702, 71, 2700, 2692, 3070, 2698, 71, 2704, 71, 71, - 71, 71, 2699, 2705, 71, 2706, 2701, 71, 2708, 2707, - 2709, 71, 2712, 71, 2703, 71, 2710, 71, 71, 71, - 71, 71, 2715, 71, 71, 2722, 71, 71, 2713, 2716, - 2714, 2711, 2719, 71, 71, 2717, 2724, 71, 2720, 71, + 2671, 2674, 71, 2677, 2668, 71, 2676, 71, 2679, 71, + 2672, 2675, 2678, 2680, 71, 71, 71, 71, 71, 2681, + 71, 71, 71, 2689, 71, 71, 2684, 71, 71, 71, + 2685, 2687, 2692, 2693, 2683, 71, 2690, 71, 2694, 71, + 2682, 2688, 71, 71, 2695, 2686, 2691, 2696, 71, 2697, + 2699, 71, 2698, 2700, 71, 2701, 71, 71, 71, 2703, + 71, 2706, 2704, 2705, 71, 2707, 2702, 71, 71, 2708, + 2709, 71, 71, 71, 71, 2714, 71, 71, 2712, 2716, + 71, 71, 2718, 71, 71, 71, 2710, 2717, 71, 2719, + 71, 2720, 2713, 2711, 71, 2724, 71, 71, 71, 71, - 2718, 2725, 71, 2727, 71, 71, 2723, 71, 71, 2721, - 71, 71, 2732, 71, 71, 2726, 2731, 71, 71, 2733, - 71, 2728, 71, 2729, 2730, 71, 2736, 2742, 2737, 2739, - 71, 71, 2741, 2734, 2744, 71, 2735, 2738, 71, 71, - 2740, 2745, 71, 2747, 71, 71, 71, 71, 2752, 71, - 71, 71, 3070, 2743, 71, 2750, 2749, 2756, 71, 2746, - 71, 71, 2754, 2748, 2757, 71, 2758, 2751, 2753, 71, - 2761, 2755, 2759, 2762, 71, 71, 71, 2764, 2763, 71, - 71, 71, 71, 71, 2769, 2766, 2767, 71, 71, 2760, - 71, 2772, 71, 71, 71, 71, 71, 2765, 2777, 71, + 71, 2715, 71, 2722, 2721, 71, 2727, 71, 2728, 71, + 2725, 2726, 71, 71, 2723, 2731, 2729, 2732, 2734, 71, + 2736, 71, 2737, 71, 2730, 71, 2739, 71, 71, 71, + 71, 71, 2735, 71, 71, 2733, 2744, 71, 2743, 71, + 71, 2748, 71, 71, 2740, 2741, 2738, 2742, 2751, 71, + 2745, 71, 71, 2753, 71, 71, 2749, 2746, 2747, 71, + 2754, 71, 2750, 2756, 71, 2757, 71, 2759, 71, 71, + 71, 2752, 71, 2765, 2755, 71, 2764, 71, 3082, 2762, + 2761, 2758, 71, 2768, 71, 71, 71, 2760, 2769, 2766, + 71, 2770, 2763, 71, 2773, 2767, 2774, 71, 2771, 71, - 2773, 2768, 71, 71, 2770, 2771, 2780, 71, 2776, 2781, - 71, 2774, 2779, 71, 71, 2778, 2783, 71, 2782, 2775, - 2785, 71, 2784, 2786, 71, 2787, 71, 71, 2789, 71, - 71, 71, 2788, 2790, 71, 71, 2794, 2795, 71, 71, - 71, 71, 2799, 71, 2800, 71, 71, 71, 71, 2801, - 2798, 2837, 2791, 2792, 2796, 71, 2793, 71, 71, 2797, - 2805, 71, 2804, 2806, 71, 71, 2802, 2803, 2809, 71, - 2807, 71, 2808, 71, 71, 2812, 71, 71, 2813, 2811, - 71, 2810, 71, 71, 71, 71, 71, 2816, 71, 71, - 2818, 71, 71, 2819, 71, 2817, 71, 2814, 71, 71, + 71, 2776, 2775, 71, 71, 71, 71, 71, 2781, 2778, + 2779, 71, 71, 2772, 71, 2784, 71, 71, 71, 71, + 71, 2777, 2789, 71, 2785, 2780, 71, 71, 2782, 2783, + 2792, 71, 2788, 2793, 71, 2786, 2791, 71, 71, 2790, + 2795, 71, 2794, 2787, 2797, 71, 2796, 2798, 71, 2799, + 71, 71, 2801, 71, 71, 71, 2800, 2802, 71, 71, + 2806, 2807, 71, 71, 71, 71, 2811, 71, 2812, 71, + 71, 71, 71, 2813, 2810, 2849, 2803, 2804, 2808, 71, + 2805, 71, 71, 2809, 2817, 71, 2816, 2818, 71, 71, + 2814, 2815, 2821, 71, 2819, 71, 2820, 71, 71, 2824, - 2815, 71, 71, 2828, 2829, 2820, 71, 2824, 2821, 2822, - 2823, 2825, 2826, 2831, 71, 71, 3070, 2827, 2894, 71, - 2832, 2830, 2833, 2835, 71, 2836, 71, 2834, 2838, 71, - 2839, 71, 2840, 2841, 71, 71, 2842, 2843, 2846, 71, - 2844, 2845, 71, 71, 2847, 71, 71, 71, 71, 71, - 2853, 71, 71, 71, 2852, 71, 71, 2856, 71, 3070, - 2848, 2849, 2855, 71, 71, 2857, 2850, 71, 2851, 71, - 2861, 2862, 71, 2858, 2863, 71, 2860, 2854, 71, 2864, - 71, 2859, 2868, 2865, 2870, 71, 71, 2869, 71, 2866, - 71, 71, 2867, 71, 71, 71, 2877, 71, 2874, 2875, + 71, 71, 2825, 2823, 71, 2822, 71, 71, 71, 71, + 71, 2828, 71, 71, 2830, 71, 71, 2831, 71, 2829, + 71, 2826, 71, 71, 2827, 71, 71, 2840, 2841, 2832, + 71, 2836, 2833, 2834, 2835, 2837, 2838, 2843, 71, 71, + 3082, 2839, 2906, 71, 2844, 2842, 2845, 2847, 71, 2848, + 71, 2846, 2850, 71, 2851, 71, 2852, 2853, 71, 71, + 2854, 2855, 2858, 71, 2856, 2857, 71, 71, 2859, 71, + 71, 71, 71, 71, 2865, 71, 71, 71, 2864, 71, + 71, 2868, 71, 3082, 2860, 2861, 2867, 71, 71, 2869, + 2862, 71, 2863, 71, 2873, 2874, 71, 2870, 2875, 71, - 2878, 2872, 71, 2880, 71, 71, 71, 71, 2879, 3070, - 2871, 2926, 2873, 71, 2876, 2881, 71, 2900, 2882, 2883, - 71, 2884, 71, 2885, 71, 2886, 71, 2887, 71, 2888, - 71, 2889, 71, 2890, 71, 71, 2892, 71, 71, 71, - 71, 71, 2897, 71, 2891, 71, 71, 2893, 71, 2901, - 2903, 71, 71, 71, 71, 2898, 2905, 71, 2899, 2895, - 2896, 2902, 71, 2907, 71, 2910, 71, 2909, 71, 71, - 2904, 71, 71, 71, 2912, 2908, 71, 71, 71, 71, - 2906, 71, 2911, 2916, 2919, 2913, 71, 2917, 71, 2915, - 2914, 2918, 2920, 2921, 71, 2922, 71, 2923, 71, 71, + 2872, 2866, 71, 2876, 71, 2871, 2880, 2877, 2882, 71, + 71, 2881, 71, 2878, 71, 71, 2879, 71, 71, 71, + 2889, 71, 2886, 2887, 2890, 2884, 71, 2892, 71, 71, + 71, 71, 2891, 3082, 2883, 2938, 2885, 71, 2888, 2893, + 71, 2912, 2894, 2895, 71, 2896, 71, 2897, 71, 2898, + 71, 2899, 71, 2900, 71, 2901, 71, 2902, 71, 71, + 2904, 71, 71, 71, 71, 71, 2909, 71, 2903, 71, + 71, 2905, 71, 2913, 2915, 71, 71, 71, 71, 2910, + 2917, 71, 2911, 2907, 2908, 2914, 71, 2919, 71, 2922, + 71, 2921, 71, 71, 2916, 71, 71, 71, 2924, 2920, - 71, 71, 2928, 71, 71, 71, 71, 2934, 2925, 2924, - 2931, 71, 71, 71, 2930, 71, 71, 71, 71, 2933, - 2927, 71, 71, 71, 2929, 2935, 2941, 71, 2948, 71, - 2936, 2937, 2938, 2940, 2942, 71, 71, 71, 2950, 71, - 2939, 2945, 2943, 2944, 71, 2951, 2949, 2947, 71, 2946, - 2952, 71, 2953, 71, 71, 71, 71, 71, 2956, 71, - 71, 2957, 2958, 2961, 71, 71, 71, 2954, 71, 71, - 71, 2964, 2966, 71, 2955, 2960, 71, 2963, 2962, 2969, - 71, 71, 71, 71, 2959, 2967, 2972, 71, 2965, 71, - 2973, 2974, 71, 2976, 71, 2968, 2970, 2977, 71, 71, + 71, 71, 71, 71, 2918, 71, 2923, 2928, 2931, 2925, + 71, 2929, 71, 2927, 2926, 2930, 2932, 2933, 71, 2934, + 71, 2935, 71, 71, 71, 71, 2940, 71, 71, 71, + 2944, 71, 2937, 2936, 2943, 71, 2946, 71, 2942, 71, + 71, 71, 71, 71, 2939, 71, 2945, 71, 2941, 71, + 2947, 71, 2953, 71, 3082, 71, 2950, 71, 2948, 2949, + 2952, 2954, 2957, 2960, 71, 71, 71, 2951, 2955, 2958, + 71, 2956, 71, 2959, 2961, 2962, 71, 71, 2963, 2964, + 71, 2965, 71, 71, 71, 2966, 2968, 71, 71, 2969, + 2967, 71, 2970, 2973, 71, 71, 71, 2971, 71, 71, - 2971, 71, 71, 71, 2982, 71, 71, 2981, 2978, 2983, - 71, 2975, 71, 71, 2979, 71, 71, 2980, 71, 71, - 2987, 71, 71, 2989, 71, 71, 71, 2984, 71, 2986, - 2994, 2995, 2985, 2988, 2991, 2992, 2996, 71, 2990, 71, - 71, 3000, 71, 2993, 71, 3002, 71, 3003, 2997, 3001, - 71, 71, 71, 71, 3008, 3004, 71, 2998, 3005, 2999, - 71, 3006, 3009, 71, 71, 3011, 71, 71, 71, 3010, - 71, 3007, 3012, 71, 71, 3017, 71, 3014, 71, 71, - 3020, 71, 3021, 71, 71, 71, 3013, 71, 71, 3024, - 71, 3019, 3015, 3016, 3022, 3018, 71, 3023, 71, 3028, + 2976, 2978, 71, 2972, 71, 2974, 2975, 2981, 71, 71, + 71, 2984, 71, 2979, 71, 2985, 2977, 71, 71, 71, + 2988, 2989, 71, 2980, 2982, 2986, 71, 71, 2983, 71, + 71, 71, 71, 2990, 71, 2991, 2993, 2987, 2994, 71, + 2995, 71, 71, 71, 71, 71, 71, 2999, 2992, 3001, + 71, 2996, 2997, 71, 3000, 71, 2998, 71, 71, 3003, + 3006, 71, 3007, 3004, 3002, 3008, 71, 71, 3012, 71, + 71, 3014, 3005, 71, 3015, 3013, 71, 71, 3009, 3010, + 71, 3016, 71, 71, 3020, 3017, 3011, 3018, 3021, 71, + 71, 71, 3023, 71, 71, 71, 3022, 71, 3024, 71, - 71, 3029, 71, 3027, 71, 3032, 3025, 3026, 71, 71, - 3034, 71, 3035, 3030, 71, 71, 71, 3039, 71, 3036, - 71, 71, 3037, 3041, 71, 3040, 71, 3033, 3031, 3042, - 71, 3043, 71, 3044, 71, 3038, 71, 3048, 71, 3046, - 71, 71, 71, 71, 71, 71, 3050, 3051, 71, 3054, - 71, 3045, 3055, 71, 3070, 3047, 71, 3058, 71, 3049, - 3059, 71, 3052, 3053, 3056, 3060, 3061, 71, 71, 3057, - 3062, 71, 71, 71, 71, 3063, 71, 3064, 3065, 3068, - 71, 3069, 71, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3066, 3070, 3067, 43, 43, 43, 43, + 71, 3029, 3019, 71, 3026, 71, 3032, 71, 71, 3033, + 71, 71, 71, 71, 3025, 71, 71, 3036, 3027, 3028, + 3034, 3031, 3030, 3035, 71, 3040, 71, 71, 71, 3039, + 71, 3041, 3037, 71, 3038, 71, 3044, 71, 3046, 71, + 3042, 71, 3047, 71, 3048, 3051, 71, 71, 71, 3045, + 3049, 71, 3050, 3052, 3043, 71, 71, 3053, 3054, 71, + 71, 3060, 71, 3055, 71, 71, 3057, 3056, 71, 3058, + 3059, 71, 71, 3062, 71, 71, 3063, 71, 3066, 3067, + 71, 71, 71, 3070, 3061, 3071, 71, 3082, 71, 3073, + 71, 3064, 71, 3065, 3068, 3072, 3074, 71, 71, 3075, - 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, - 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, - 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, - 64, 74, 74, 3070, 74, 74, 74, 74, 141, 141, - 3070, 3070, 3070, 141, 141, 143, 143, 3070, 3070, 143, - 3070, 143, 145, 3070, 3070, 3070, 3070, 3070, 145, 148, - 148, 3070, 3070, 3070, 148, 148, 150, 3070, 3070, 3070, - 3070, 3070, 150, 152, 152, 3070, 152, 152, 152, 152, - 75, 75, 3070, 75, 75, 75, 75, 13, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3069, 71, 71, 3076, 71, 3082, 3077, 3080, 71, 3081, + 71, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3078, 3082, 3079, 43, 43, 43, 43, 43, 43, + 43, 48, 48, 48, 48, 48, 48, 48, 53, 53, + 53, 53, 53, 53, 53, 59, 59, 59, 59, 59, + 59, 59, 64, 64, 64, 64, 64, 64, 64, 74, + 74, 3082, 74, 74, 74, 74, 142, 142, 3082, 3082, + 3082, 142, 142, 144, 144, 3082, 3082, 144, 3082, 144, + 146, 3082, 3082, 3082, 3082, 3082, 146, 149, 149, 3082, + 3082, 3082, 149, 149, 151, 3082, 3082, 3082, 3082, 3082, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070 + 151, 153, 153, 3082, 153, 153, 153, 153, 75, 75, + 3082, 75, 75, 75, 75, 13, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082 } ; -static const flex_int16_t yy_chk[6029] = +static const flex_int16_t yy_chk[6057] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2107,661 +2116,664 @@ static const flex_int16_t yy_chk[6029] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3076, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3088, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, - 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, - 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1010, 24, 24, - 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, - 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, - 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, - 35, 52, 36, 37, 37, 33, 35, 38, 37, 35, - 42, 69, 38, 63, 63, 38, 35, 84, 37, 37, - 40, 37, 38, 80, 40, 69, 38, 38, 39, 39, + 36, 89, 11, 12, 12, 12, 12, 12, 12, 21, + 23, 23, 21, 21, 36, 12, 21, 34, 23, 26, + 26, 21, 23, 89, 12, 23, 27, 27, 47, 47, + 21, 24, 42, 90, 26, 27, 24, 28, 34, 52, + 24, 28, 52, 24, 28, 24, 24, 42, 32, 32, + 1018, 28, 90, 28, 33, 33, 24, 32, 72, 33, + 69, 35, 72, 32, 63, 63, 35, 32, 77, 80, + 35, 77, 37, 37, 69, 33, 35, 37, 230, 35, + 230, 80, 39, 39, 38, 39, 35, 37, 37, 38, - 126, 39, 41, 41, 40, 80, 126, 41, 40, 40, - 39, 41, 58, 89, 58, 58, 39, 58, 66, 86, - 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, - 66, 71, 72, 86, 127, 89, 72, 71, 74, 77, - 74, 74, 77, 74, 78, 88, 127, 85, 78, 74, - 74, 82, 83, 87, 82, 83, 85, 92, 93, 87, - 91, 94, 99, 88, 88, 87, 91, 87, 83, 95, - 96, 92, 94, 94, 161, 102, 99, 97, 93, 91, - 94, 97, 161, 105, 98, 106, 101, 95, 96, 98, - 100, 150, 101, 100, 102, 103, 100, 112, 104, 106, + 37, 40, 38, 82, 39, 40, 82, 41, 41, 38, + 39, 127, 41, 38, 38, 40, 41, 127, 78, 40, + 40, 58, 78, 58, 58, 66, 58, 66, 66, 68, + 66, 68, 68, 71, 68, 71, 71, 66, 71, 81, + 74, 85, 74, 74, 71, 74, 83, 84, 151, 83, + 85, 74, 74, 86, 87, 88, 92, 91, 93, 81, + 87, 94, 83, 91, 100, 84, 87, 86, 87, 96, + 92, 95, 93, 88, 88, 97, 91, 103, 100, 102, + 98, 94, 95, 95, 98, 102, 99, 96, 106, 101, + 95, 99, 101, 97, 104, 101, 103, 107, 105, 104, - 103, 104, 105, 109, 107, 104, 108, 105, 107, 100, - 100, 101, 110, 108, 111, 113, 109, 112, 114, 110, - 103, 104, 114, 115, 117, 116, 119, 111, 118, 118, - 116, 122, 120, 113, 116, 121, 120, 123, 132, 125, - 124, 115, 129, 124, 117, 120, 119, 128, 128, 129, - 121, 120, 125, 130, 124, 131, 123, 122, 124, 132, - 129, 133, 134, 135, 134, 128, 136, 137, 128, 130, - 138, 136, 140, 134, 131, 135, 139, 133, 148, 137, - 157, 139, 142, 142, 144, 134, 140, 144, 138, 146, - 154, 146, 146, 154, 146, 149, 149, 151, 157, 151, + 110, 105, 108, 109, 102, 105, 108, 106, 101, 101, + 109, 107, 106, 110, 112, 111, 113, 114, 118, 104, + 115, 105, 111, 116, 115, 117, 120, 112, 119, 119, + 117, 123, 122, 149, 117, 114, 113, 124, 118, 121, + 126, 116, 128, 121, 130, 125, 120, 122, 125, 129, + 129, 130, 121, 126, 128, 131, 124, 123, 121, 125, + 132, 133, 130, 125, 134, 139, 135, 129, 135, 136, + 129, 131, 138, 137, 141, 143, 143, 135, 137, 132, + 134, 136, 133, 139, 138, 140, 150, 150, 141, 135, + 140, 145, 158, 147, 145, 147, 147, 152, 147, 152, - 151, 152, 151, 152, 152, 155, 152, 158, 156, 159, - 155, 162, 163, 152, 156, 160, 164, 159, 165, 166, - 168, 164, 158, 156, 159, 167, 160, 163, 166, 169, - 162, 167, 167, 171, 169, 170, 170, 175, 165, 171, - 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, - 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, - 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, - 181, 186, 182, 183, 187, 188, 192, 190, 191, 187, - 188, 185, 190, 184, 185, 194, 194, 180, 200, 186, - 189, 189, 192, 193, 189, 195, 189, 196, 191, 193, + 152, 153, 152, 153, 153, 155, 153, 156, 155, 157, + 158, 159, 156, 153, 160, 157, 161, 162, 163, 164, + 166, 167, 160, 165, 157, 162, 159, 161, 165, 160, + 167, 169, 168, 148, 164, 176, 170, 163, 168, 168, + 166, 170, 171, 171, 172, 174, 173, 176, 173, 174, + 172, 173, 175, 175, 174, 177, 169, 178, 179, 174, + 180, 181, 178, 179, 182, 174, 174, 183, 173, 185, + 182, 183, 180, 184, 177, 186, 187, 188, 184, 189, + 190, 181, 192, 185, 189, 190, 193, 192, 187, 194, + 186, 187, 195, 182, 218, 188, 191, 191, 195, 199, - 197, 195, 206, 196, 210, 198, 199, 195, 189, 200, - 189, 198, 199, 201, 208, 206, 145, 202, 203, 201, - 197, 199, 202, 204, 203, 205, 210, 207, 212, 204, - 209, 211, 205, 207, 208, 213, 209, 214, 215, 211, - 213, 212, 216, 217, 218, 222, 214, 219, 220, 218, - 218, 221, 219, 215, 223, 221, 224, 226, 216, 225, - 223, 229, 233, 217, 227, 225, 220, 222, 228, 227, - 228, 230, 235, 231, 224, 224, 232, 226, 230, 231, - 229, 233, 232, 234, 235, 236, 237, 237, 239, 234, - 238, 238, 240, 242, 239, 241, 243, 241, 240, 236, + 191, 197, 191, 196, 196, 194, 193, 197, 202, 198, + 218, 200, 201, 197, 191, 198, 191, 200, 201, 199, + 203, 208, 210, 204, 205, 206, 203, 201, 204, 202, + 205, 206, 207, 212, 208, 209, 213, 211, 214, 207, + 215, 209, 210, 211, 213, 215, 217, 216, 219, 221, + 224, 214, 220, 222, 221, 212, 216, 220, 220, 223, + 225, 217, 226, 223, 227, 228, 225, 231, 219, 229, + 227, 222, 224, 233, 229, 232, 235, 234, 236, 233, + 226, 226, 232, 234, 236, 228, 231, 237, 238, 239, + 239, 240, 240, 244, 241, 235, 243, 242, 243, 237, - 245, 243, 246, 244, 247, 249, 248, 250, 143, 260, - 246, 248, 239, 250, 241, 244, 242, 251, 256, 245, - 252, 253, 255, 251, 247, 252, 253, 254, 249, 257, - 258, 259, 256, 254, 260, 261, 263, 255, 263, 259, - 262, 261, 266, 262, 258, 264, 264, 257, 265, 267, - 267, 265, 268, 268, 269, 271, 270, 272, 271, 273, - 266, 272, 275, 274, 283, 277, 276, 277, 273, 274, - 269, 270, 276, 278, 279, 284, 275, 281, 279, 278, - 280, 280, 281, 282, 283, 285, 286, 287, 287, 282, - 289, 288, 290, 284, 288, 279, 290, 291, 296, 286, + 241, 245, 238, 242, 247, 246, 245, 249, 250, 251, + 146, 248, 262, 250, 252, 243, 244, 246, 241, 248, + 252, 254, 253, 247, 255, 256, 254, 249, 253, 255, + 257, 256, 251, 258, 259, 260, 261, 262, 264, 268, + 263, 264, 266, 266, 261, 257, 263, 258, 265, 260, + 265, 267, 259, 271, 267, 269, 269, 268, 270, 270, + 272, 273, 274, 275, 273, 276, 274, 277, 278, 271, + 279, 286, 275, 277, 276, 272, 279, 280, 281, 280, + 287, 282, 278, 284, 281, 282, 283, 283, 284, 285, + 288, 286, 289, 290, 290, 285, 291, 292, 287, 291, - 292, 293, 293, 294, 295, 297, 285, 295, 289, 298, - 296, 297, 298, 299, 301, 302, 291, 303, 292, 315, - 315, 294, 303, 301, 295, 299, 300, 304, 305, 306, - 304, 305, 304, 302, 309, 300, 141, 307, 300, 309, - 309, 311, 306, 300, 300, 300, 300, 312, 304, 307, - 308, 310, 308, 308, 310, 313, 314, 318, 311, 317, - 317, 311, 312, 316, 313, 314, 319, 320, 316, 321, - 322, 319, 318, 327, 323, 324, 336, 336, 329, 320, - 70, 324, 325, 325, 329, 325, 328, 330, 321, 323, - 322, 328, 330, 327, 325, 331, 332, 333, 335, 332, + 293, 294, 282, 295, 293, 289, 296, 296, 297, 298, + 299, 288, 298, 300, 301, 292, 302, 301, 304, 300, + 294, 295, 299, 305, 144, 309, 297, 304, 302, 298, + 303, 306, 307, 310, 142, 307, 306, 307, 309, 303, + 308, 305, 303, 308, 315, 310, 314, 303, 303, 303, + 303, 312, 311, 307, 311, 311, 312, 312, 313, 315, + 316, 313, 317, 314, 318, 318, 314, 319, 321, 316, + 322, 317, 319, 320, 320, 322, 323, 324, 325, 326, + 327, 328, 328, 321, 328, 330, 327, 331, 323, 332, + 339, 339, 331, 328, 326, 332, 324, 333, 325, 334, - 331, 332, 334, 337, 342, 334, 331, 335, 346, 337, - 339, 333, 338, 338, 343, 339, 340, 344, 334, 340, - 349, 334, 346, 334, 342, 340, 568, 345, 348, 340, - 351, 348, 344, 568, 349, 343, 356, 340, 341, 341, - 352, 341, 345, 357, 354, 351, 353, 348, 355, 352, - 354, 353, 353, 361, 341, 356, 359, 341, 357, 341, - 360, 341, 350, 358, 350, 350, 360, 362, 363, 355, - 365, 366, 358, 368, 350, 359, 350, 350, 350, 361, - 364, 350, 363, 367, 369, 370, 364, 362, 368, 369, - 364, 366, 371, 365, 372, 372, 373, 374, 371, 375, + 336, 345, 333, 335, 334, 330, 335, 338, 335, 337, + 334, 340, 337, 346, 336, 342, 338, 340, 341, 341, + 342, 345, 347, 343, 348, 337, 343, 349, 337, 352, + 337, 70, 343, 355, 346, 351, 343, 347, 351, 348, + 354, 349, 355, 352, 343, 344, 344, 356, 344, 358, + 357, 361, 356, 356, 351, 354, 357, 359, 360, 362, + 361, 344, 365, 364, 344, 366, 344, 368, 344, 353, + 358, 353, 353, 360, 363, 369, 359, 370, 362, 366, + 363, 353, 365, 353, 353, 353, 367, 371, 353, 364, + 368, 373, 367, 372, 374, 369, 367, 370, 372, 376, - 370, 376, 377, 367, 378, 379, 381, 376, 382, 374, - 379, 380, 380, 375, 380, 383, 373, 385, 384, 385, - 378, 386, 388, 388, 382, 386, 381, 377, 389, 387, - 390, 383, 384, 387, 391, 392, 396, 385, 393, 397, - 394, 396, 395, 397, 400, 390, 398, 389, 387, 394, - 391, 395, 393, 392, 405, 398, 403, 399, 401, 403, - 394, 64, 394, 399, 401, 400, 402, 404, 406, 406, - 402, 407, 404, 409, 405, 408, 408, 410, 409, 411, - 411, 412, 413, 414, 407, 415, 413, 412, 416, 417, - 410, 418, 418, 416, 417, 419, 420, 421, 414, 422, + 374, 377, 371, 375, 375, 379, 373, 378, 380, 381, + 382, 379, 384, 377, 385, 382, 64, 383, 383, 376, + 383, 378, 386, 387, 388, 381, 388, 389, 394, 389, + 385, 390, 384, 380, 393, 390, 391, 387, 386, 396, + 391, 392, 392, 394, 395, 397, 400, 389, 468, 398, + 401, 400, 399, 393, 401, 391, 402, 396, 398, 397, + 395, 399, 403, 404, 405, 402, 409, 468, 403, 398, + 405, 398, 406, 408, 407, 411, 406, 407, 408, 410, + 410, 412, 412, 414, 404, 413, 409, 416, 411, 418, + 413, 415, 415, 416, 417, 419, 414, 420, 417, 423, - 418, 423, 425, 427, 423, 424, 415, 419, 427, 424, - 428, 422, 426, 426, 425, 421, 420, 429, 429, 430, - 432, 432, 433, 437, 434, 435, 436, 439, 440, 443, - 441, 428, 434, 442, 435, 437, 444, 446, 443, 442, - 452, 430, 444, 433, 441, 439, 436, 439, 440, 445, - 447, 446, 448, 449, 445, 448, 450, 451, 447, 453, - 452, 447, 453, 451, 454, 455, 458, 449, 456, 457, - 454, 450, 459, 456, 461, 460, 459, 462, 463, 455, - 460, 464, 462, 465, 468, 484, 484, 458, 454, 461, - 469, 457, 471, 470, 463, 473, 465, 470, 472, 473, + 421, 424, 420, 432, 418, 421, 422, 422, 425, 427, + 426, 423, 427, 428, 434, 422, 419, 428, 429, 430, + 430, 424, 426, 431, 432, 437, 425, 438, 431, 439, + 429, 433, 433, 436, 436, 438, 434, 440, 439, 441, + 443, 444, 445, 446, 447, 449, 437, 59, 448, 446, + 449, 441, 450, 447, 448, 453, 445, 440, 443, 451, + 443, 444, 452, 454, 456, 452, 450, 451, 455, 453, + 451, 458, 457, 459, 455, 457, 460, 458, 454, 461, + 467, 460, 462, 464, 456, 463, 466, 459, 464, 463, + 465, 466, 472, 469, 473, 458, 467, 475, 474, 488, - 464, 466, 466, 474, 468, 469, 480, 466, 474, 466, - 475, 471, 474, 476, 472, 466, 477, 466, 476, 478, - 466, 466, 480, 479, 482, 475, 483, 466, 478, 479, - 481, 485, 477, 481, 479, 477, 486, 486, 487, 488, - 489, 490, 491, 492, 494, 493, 483, 482, 492, 501, - 495, 488, 496, 487, 493, 489, 485, 498, 496, 502, - 490, 501, 500, 494, 491, 495, 498, 499, 500, 503, - 504, 499, 505, 506, 502, 507, 508, 510, 509, 507, - 509, 511, 511, 513, 504, 510, 512, 505, 503, 508, - 514, 506, 512, 515, 516, 513, 514, 516, 517, 518, + 488, 461, 474, 462, 476, 465, 469, 470, 470, 473, + 477, 54, 472, 470, 477, 470, 475, 479, 481, 478, + 476, 470, 482, 470, 478, 480, 470, 470, 478, 483, + 480, 482, 479, 470, 481, 483, 484, 481, 485, 486, + 483, 485, 489, 487, 490, 490, 491, 492, 495, 493, + 494, 496, 484, 498, 500, 53, 496, 497, 499, 492, + 500, 491, 486, 487, 493, 502, 497, 489, 505, 494, + 495, 503, 498, 499, 502, 503, 504, 506, 507, 508, + 505, 509, 504, 510, 511, 512, 514, 513, 511, 513, + 515, 515, 506, 508, 514, 517, 509, 507, 512, 516, - 520, 519, 521, 520, 522, 515, 519, 525, 525, 524, - 523, 521, 517, 527, 518, 523, 523, 531, 521, 527, - 522, 521, 524, 526, 526, 528, 528, 529, 529, 530, - 532, 533, 534, 532, 535, 530, 533, 536, 531, 537, - 536, 538, 535, 539, 537, 540, 541, 543, 544, 540, - 542, 534, 541, 544, 542, 545, 547, 546, 548, 550, - 553, 547, 539, 546, 538, 543, 549, 551, 551, 549, - 552, 557, 548, 556, 549, 545, 553, 550, 549, 554, - 555, 560, 59, 559, 554, 555, 557, 556, 552, 559, - 560, 561, 562, 563, 561, 566, 562, 564, 563, 565, + 518, 510, 519, 521, 522, 516, 518, 517, 520, 524, + 523, 520, 524, 525, 519, 523, 538, 521, 526, 522, + 527, 538, 525, 528, 536, 527, 527, 529, 529, 525, + 530, 530, 525, 531, 526, 539, 528, 532, 532, 531, + 533, 533, 534, 537, 535, 536, 537, 540, 534, 535, + 535, 543, 542, 541, 539, 540, 541, 542, 544, 545, + 546, 547, 548, 545, 549, 547, 546, 550, 552, 549, + 551, 553, 558, 552, 543, 555, 551, 544, 554, 557, + 548, 554, 556, 556, 559, 553, 554, 550, 558, 559, + 554, 560, 561, 555, 562, 564, 560, 557, 565, 566, - 564, 567, 569, 570, 565, 571, 572, 572, 570, 574, - 575, 566, 573, 576, 578, 569, 54, 577, 562, 567, - 578, 573, 576, 584, 579, 571, 575, 612, 574, 577, - 579, 580, 581, 581, 580, 581, 582, 583, 585, 582, - 586, 584, 583, 587, 588, 612, 586, 596, 587, 592, - 588, 589, 585, 590, 589, 591, 593, 595, 590, 594, - 591, 591, 592, 595, 594, 597, 596, 598, 599, 593, - 600, 600, 598, 601, 597, 604, 603, 608, 594, 594, - 601, 602, 603, 613, 602, 605, 606, 604, 599, 610, - 605, 606, 606, 607, 607, 609, 611, 609, 611, 602, + 567, 564, 566, 568, 567, 571, 561, 565, 568, 562, + 569, 570, 572, 569, 574, 573, 570, 576, 575, 577, + 577, 571, 573, 575, 578, 579, 567, 574, 48, 580, + 572, 581, 583, 578, 582, 584, 585, 576, 583, 585, + 581, 584, 589, 590, 579, 580, 582, 586, 586, 587, + 586, 588, 587, 591, 597, 593, 588, 590, 592, 591, + 589, 593, 594, 592, 595, 594, 596, 597, 598, 595, + 599, 596, 596, 600, 601, 599, 602, 603, 604, 600, + 606, 598, 603, 605, 605, 602, 608, 606, 607, 599, + 599, 607, 608, 601, 610, 609, 611, 613, 604, 610, - 614, 613, 608, 615, 616, 617, 618, 619, 610, 624, - 618, 617, 620, 621, 622, 623, 619, 626, 614, 627, - 625, 624, 615, 626, 616, 628, 629, 620, 621, 630, - 633, 632, 622, 627, 623, 625, 631, 628, 634, 635, - 631, 636, 637, 639, 639, 629, 633, 637, 630, 632, - 638, 640, 641, 643, 642, 640, 634, 635, 635, 645, - 636, 644, 646, 647, 638, 642, 644, 643, 649, 651, - 648, 641, 650, 649, 651, 645, 647, 648, 652, 650, - 653, 646, 654, 652, 655, 656, 657, 659, 658, 654, - 662, 660, 659, 655, 660, 657, 663, 661, 653, 656, + 615, 611, 611, 612, 612, 617, 607, 609, 614, 616, + 614, 616, 618, 619, 620, 621, 623, 624, 622, 615, + 623, 625, 613, 617, 622, 626, 624, 627, 628, 629, + 618, 619, 631, 620, 630, 621, 625, 632, 631, 634, + 626, 629, 633, 635, 636, 627, 637, 628, 636, 630, + 638, 632, 639, 640, 633, 641, 642, 646, 634, 643, + 43, 642, 635, 648, 637, 645, 638, 644, 644, 645, + 639, 640, 640, 643, 641, 647, 646, 648, 649, 650, + 651, 652, 653, 649, 655, 654, 647, 656, 657, 653, + 654, 655, 656, 657, 652, 650, 658, 659, 660, 651, - 658, 661, 664, 666, 662, 663, 665, 667, 667, 668, - 668, 669, 669, 670, 672, 673, 674, 664, 668, 675, - 665, 673, 670, 675, 666, 676, 677, 678, 679, 682, - 680, 683, 681, 672, 679, 684, 674, 676, 680, 681, - 693, 705, 690, 687, 694, 678, 705, 682, 695, 693, - 694, 677, 697, 697, 700, 684, 683, 685, 687, 690, - 699, 696, 685, 702, 695, 696, 685, 698, 698, 685, - 701, 699, 700, 706, 703, 707, 685, 685, 720, 685, - 703, 708, 53, 702, 701, 704, 704, 704, 709, 704, - 720, 709, 704, 707, 706, 710, 710, 704, 711, 712, + 662, 661, 666, 664, 659, 663, 666, 660, 664, 662, + 665, 667, 668, 665, 658, 661, 669, 663, 670, 671, + 677, 668, 672, 672, 675, 667, 673, 673, 674, 674, + 678, 669, 670, 675, 679, 673, 678, 680, 681, 677, + 671, 680, 682, 683, 685, 684, 686, 687, 688, 689, + 681, 684, 685, 686, 679, 692, 699, 698, 695, 703, + 702, 683, 699, 703, 707, 687, 698, 682, 709, 689, + 692, 701, 14, 688, 690, 695, 702, 701, 706, 690, + 704, 704, 707, 690, 705, 705, 690, 708, 709, 706, + 712, 710, 713, 690, 690, 712, 690, 710, 714, 715, - 712, 713, 721, 704, 704, 711, 708, 714, 714, 715, - 716, 722, 717, 716, 715, 722, 713, 717, 718, 718, - 719, 721, 719, 723, 725, 724, 726, 726, 728, 730, - 727, 732, 725, 729, 729, 733, 731, 735, 735, 746, - 746, 733, 728, 723, 724, 727, 734, 730, 731, 736, - 739, 734, 738, 732, 736, 736, 739, 738, 740, 743, - 741, 742, 743, 744, 740, 741, 745, 742, 748, 744, - 747, 747, 749, 750, 745, 751, 748, 752, 750, 753, - 753, 755, 751, 754, 757, 756, 759, 761, 760, 755, - 749, 756, 754, 762, 767, 759, 752, 760, 762, 763, + 718, 708, 711, 711, 711, 716, 711, 718, 716, 711, + 717, 717, 720, 713, 711, 13, 714, 719, 719, 728, + 711, 711, 721, 721, 715, 722, 723, 720, 724, 723, + 722, 725, 725, 724, 726, 727, 726, 729, 728, 730, + 732, 729, 731, 733, 733, 734, 737, 727, 732, 735, + 736, 736, 739, 738, 742, 742, 740, 753, 753, 730, + 734, 731, 740, 735, 737, 738, 741, 743, 754, 754, + 745, 741, 743, 743, 739, 745, 746, 747, 750, 748, + 749, 750, 746, 747, 748, 751, 749, 752, 755, 756, + 759, 751, 757, 758, 761, 752, 755, 757, 760, 760, - 765, 764, 766, 757, 764, 765, 768, 769, 763, 771, - 771, 761, 770, 772, 773, 768, 766, 770, 770, 767, - 769, 774, 775, 776, 780, 778, 776, 778, 772, 782, - 774, 779, 779, 773, 776, 781, 783, 784, 785, 786, - 781, 788, 787, 789, 790, 780, 775, 789, 791, 792, - 782, 787, 793, 794, 795, 792, 783, 784, 796, 786, - 785, 793, 790, 797, 788, 794, 798, 791, 801, 797, - 799, 803, 796, 795, 802, 799, 800, 800, 804, 805, - 798, 806, 807, 802, 808, 813, 804, 809, 801, 810, - 812, 803, 811, 809, 814, 810, 812, 817, 818, 805, + 758, 764, 762, 761, 766, 763, 767, 756, 768, 759, + 762, 763, 769, 766, 770, 767, 771, 769, 774, 771, + 764, 772, 773, 770, 775, 776, 772, 778, 778, 777, + 779, 780, 768, 775, 777, 777, 773, 781, 776, 782, + 785, 783, 785, 774, 783, 779, 781, 786, 786, 787, + 780, 788, 783, 789, 792, 790, 788, 791, 793, 794, + 795, 796, 797, 782, 1036, 796, 798, 799, 794, 802, + 787, 1036, 800, 799, 789, 790, 792, 791, 793, 801, + 797, 800, 803, 795, 804, 798, 805, 806, 802, 808, + 804, 801, 806, 807, 807, 809, 803, 810, 811, 812, - 814, 807, 815, 806, 808, 813, 811, 816, 815, 819, - 818, 816, 820, 824, 819, 822, 817, 825, 818, 821, - 821, 822, 823, 826, 827, 823, 828, 828, 829, 826, - 825, 824, 830, 820, 831, 831, 832, 830, 833, 834, - 834, 835, 833, 837, 827, 836, 829, 838, 837, 840, - 841, 832, 843, 844, 846, 846, 847, 849, 849, 48, - 847, 848, 850, 835, 841, 836, 838, 851, 852, 869, - 869, 851, 843, 840, 844, 845, 848, 854, 845, 853, - 845, 855, 854, 852, 845, 857, 845, 850, 859, 861, - 858, 845, 856, 853, 858, 855, 845, 856, 856, 857, + 805, 813, 814, 0, 809, 815, 811, 816, 817, 808, + 818, 820, 819, 816, 817, 824, 821, 810, 819, 812, + 822, 814, 821, 813, 818, 815, 822, 825, 823, 827, + 826, 820, 823, 831, 824, 826, 828, 828, 829, 825, + 830, 832, 833, 830, 829, 834, 836, 825, 833, 842, + 827, 831, 835, 835, 832, 837, 838, 838, 839, 840, + 837, 841, 841, 840, 836, 834, 843, 844, 845, 847, + 848, 842, 844, 839, 850, 851, 853, 853, 854, 857, + 855, 858, 854, 859, 848, 858, 843, 845, 856, 856, + 873, 860, 998, 847, 850, 855, 851, 852, 859, 873, - 860, 861, 862, 859, 863, 860, 858, 862, 864, 865, - 866, 867, 872, 868, 873, 860, 866, 867, 863, 868, - 870, 871, 874, 865, 876, 870, 877, 871, 904, 864, - 878, 877, 881, 873, 872, 882, 876, 881, 879, 883, - 874, 875, 875, 882, 878, 880, 880, 875, 904, 875, - 879, 884, 885, 883, 887, 875, 886, 886, 887, 889, - 875, 875, 891, 890, 892, 889, 890, 875, 893, 895, - 884, 885, 43, 894, 893, 897, 898, 892, 894, 899, - 900, 891, 901, 902, 897, 898, 900, 903, 895, 905, - 906, 901, 903, 907, 910, 899, 911, 908, 909, 914, + 852, 862, 852, 998, 857, 860, 852, 861, 852, 864, + 865, 863, 861, 852, 865, 862, 863, 863, 852, 866, + 867, 868, 869, 864, 870, 867, 865, 869, 871, 872, + 874, 875, 880, 868, 866, 867, 874, 875, 870, 876, + 877, 877, 878, 872, 879, 876, 881, 878, 882, 871, + 879, 884, 885, 958, 880, 886, 889, 885, 887, 888, + 888, 889, 891, 884, 890, 881, 882, 883, 883, 886, + 887, 892, 890, 883, 958, 883, 891, 893, 894, 894, + 895, 883, 897, 899, 895, 900, 883, 883, 897, 898, + 892, 901, 898, 883, 902, 903, 893, 901, 900, 902, - 910, 917, 902, 905, 916, 907, 908, 909, 912, 918, - 906, 919, 920, 911, 912, 914, 921, 922, 916, 923, - 927, 917, 922, 930, 923, 919, 932, 926, 918, 927, - 920, 921, 926, 928, 928, 929, 930, 935, 933, 936, - 935, 929, 932, 933, 933, 934, 934, 937, 938, 934, - 939, 941, 940, 936, 942, 943, 944, 945, 946, 947, - 942, 950, 944, 946, 938, 940, 941, 937, 939, 953, - 14, 949, 945, 947, 949, 943, 951, 956, 952, 954, - 959, 951, 950, 952, 954, 953, 955, 958, 960, 956, - 964, 955, 961, 958, 960, 963, 959, 967, 961, 962, + 905, 906, 899, 907, 909, 908, 910, 911, 912, 905, + 906, 908, 911, 909, 903, 913, 914, 916, 915, 907, + 919, 918, 917, 922, 925, 910, 916, 918, 912, 913, + 915, 917, 920, 924, 926, 927, 914, 919, 920, 922, + 928, 929, 0, 930, 925, 931, 934, 924, 930, 927, + 931, 934, 935, 926, 936, 936, 929, 937, 928, 938, + 940, 935, 941, 937, 944, 942, 942, 941, 941, 942, + 943, 945, 938, 943, 946, 947, 940, 950, 944, 948, + 949, 951, 952, 950, 953, 964, 955, 0, 952, 954, + 946, 945, 948, 947, 954, 949, 961, 964, 959, 953, - 962, 968, 965, 969, 963, 965, 966, 966, 964, 970, - 972, 971, 970, 973, 979, 967, 972, 974, 980, 973, - 968, 975, 974, 969, 971, 976, 975, 977, 981, 986, - 976, 982, 979, 977, 981, 984, 982, 985, 980, 983, - 983, 987, 988, 990, 984, 988, 985, 986, 989, 991, - 992, 989, 993, 994, 990, 995, 999, 996, 997, 994, - 987, 995, 992, 997, 998, 998, 1000, 991, 1003, 1001, - 1002, 993, 996, 1004, 1002, 999, 1005, 1006, 1008, 1011, - 1000, 1001, 1004, 1009, 1009, 1012, 1003, 1013, 1017, 1014, - 1016, 1016, 1015, 1011, 1014, 1005, 13, 1008, 1018, 1013, + 955, 951, 957, 959, 960, 957, 962, 967, 963, 960, + 966, 962, 961, 963, 968, 969, 966, 970, 970, 971, + 968, 969, 972, 967, 973, 974, 974, 973, 971, 975, + 976, 977, 978, 979, 982, 978, 980, 981, 985, 982, + 972, 987, 980, 981, 985, 983, 979, 975, 984, 976, + 983, 977, 988, 984, 989, 992, 990, 991, 991, 987, + 989, 990, 993, 994, 992, 995, 996, 997, 999, 996, + 997, 993, 988, 1000, 1001, 1004, 1002, 1003, 1006, 1006, + 1007, 994, 1002, 1003, 995, 1000, 999, 1005, 1008, 1009, + 1004, 1010, 1005, 1001, 1011, 1010, 1012, 1013, 1014, 1007, - 1012, 1015, 1006, 1019, 1018, 1020, 1023, 1022, 1017, 1019, - 1020, 1021, 1022, 1021, 1024, 1026, 1025, 1027, 1028, 1029, - 1023, 1025, 1030, 1032, 1032, 1028, 1033, 1034, 1024, 1035, - 1026, 1036, 1037, 1145, 1029, 1145, 1027, 1036, 1040, 1040, - 1033, 1030, 1038, 1041, 1035, 1034, 1043, 1038, 1041, 1042, - 1042, 1044, 1037, 1043, 1045, 1046, 1038, 1045, 1038, 1047, - 1048, 1038, 1049, 1050, 1052, 1044, 1051, 1049, 1053, 1048, - 1058, 1051, 1055, 1055, 1046, 1052, 1056, 1047, 1057, 1059, - 1064, 1056, 1050, 1057, 1059, 1060, 1061, 1053, 1062, 1060, - 1058, 1063, 1065, 1066, 1067, 1061, 1069, 1068, 1070, 1064, + 1016, 1009, 1008, 1017, 1017, 1012, 1019, 1020, 1022, 1021, + 1024, 1024, 1011, 1022, 1025, 1023, 1013, 1040, 1040, 1016, + 1019, 1021, 1020, 1014, 1023, 1026, 1027, 1029, 1028, 1029, + 1030, 1026, 1027, 1028, 1025, 1030, 1031, 1032, 1033, 1034, + 1035, 1037, 1038, 1033, 1041, 1042, 1044, 1043, 1045, 1069, + 1031, 1032, 1044, 1069, 1034, 1046, 1037, 0, 1041, 1035, + 1046, 1038, 1043, 1042, 1048, 1048, 1051, 1049, 1045, 1046, + 1052, 1046, 1049, 1051, 1046, 1050, 1050, 1053, 1054, 1056, + 1053, 1055, 1057, 1058, 1052, 1060, 1059, 1057, 1056, 1061, + 1060, 1062, 1064, 1064, 1067, 0, 1065, 1054, 1059, 1055, - 1071, 1067, 1073, 1062, 1065, 1072, 1063, 1074, 1066, 1068, - 1075, 1072, 1076, 1081, 1078, 1069, 1080, 1073, 1071, 1070, - 1078, 1076, 1079, 1082, 1080, 1083, 1084, 1074, 1082, 1085, - 1075, 1084, 1084, 1081, 1087, 1086, 1079, 1083, 1088, 1088, - 1090, 0, 1091, 1093, 1093, 1095, 1092, 1087, 1085, 1086, - 1089, 1091, 1092, 1090, 1095, 1089, 1094, 1097, 1089, 1089, - 1096, 1094, 1097, 1089, 1100, 1098, 1096, 1099, 1099, 1089, - 1098, 1101, 1101, 1089, 1102, 1103, 1104, 1102, 1105, 1102, - 1106, 1107, 1108, 1109, 1110, 1100, 1107, 1105, 1112, 1147, - 1110, 1111, 1147, 1112, 1104, 1103, 1108, 1111, 1113, 1114, + 1061, 1065, 1058, 1066, 1068, 1071, 1070, 1072, 1066, 1068, + 1062, 1073, 1074, 1075, 1067, 1070, 1076, 1077, 1078, 1079, + 1071, 1080, 1072, 1076, 1074, 1081, 1082, 1083, 1075, 1077, + 1073, 1081, 1084, 1085, 1088, 1089, 1090, 1078, 1087, 1080, + 1079, 1082, 1085, 1089, 1087, 1091, 1092, 1083, 1088, 1093, + 1091, 1094, 1084, 1095, 1093, 1093, 1090, 1100, 1092, 1096, + 1097, 1097, 1099, 1101, 1102, 1102, 1100, 1095, 1104, 1101, + 1094, 1103, 1096, 1098, 1105, 1099, 1103, 1104, 1098, 1106, + 1105, 1098, 1098, 1107, 1106, 1109, 1098, 1112, 1107, 1108, + 1108, 1113, 1098, 1110, 1110, 1111, 1098, 1115, 1111, 1114, - 1106, 1109, 1113, 1115, 1115, 1117, 1116, 1116, 1114, 1116, - 1119, 1120, 1121, 1114, 1119, 1114, 1117, 1114, 1122, 1114, - 1125, 1127, 1124, 1123, 1128, 1129, 1120, 1122, 1123, 1123, - 1121, 1124, 1126, 1128, 1130, 1127, 1131, 1126, 1134, 1132, - 1133, 1133, 1125, 1135, 1129, 1132, 1134, 1136, 1137, 1138, - 1131, 1139, 1136, 1130, 1140, 1141, 1143, 1135, 1138, 1149, - 1141, 1150, 1137, 1142, 1142, 1144, 1144, 1148, 1152, 1139, - 1150, 1143, 1148, 1151, 1151, 1153, 1153, 1155, 1149, 1140, - 1154, 1154, 1155, 1156, 1157, 1158, 1158, 1159, 1152, 1160, - 1161, 1162, 1160, 1163, 1165, 1164, 1162, 1164, 1167, 1168, + 1111, 1117, 1118, 1124, 1124, 1116, 1109, 1112, 1114, 1113, + 1116, 1121, 1119, 1120, 1123, 1117, 1121, 1115, 1119, 1120, + 1118, 1122, 1126, 1123, 1129, 1122, 1125, 1125, 1123, 1125, + 1123, 1128, 1123, 1126, 1123, 1128, 1130, 1131, 1132, 1129, + 1133, 1134, 1135, 1132, 1132, 1136, 1131, 1135, 1137, 1133, + 1138, 1139, 1140, 1144, 1130, 1141, 1148, 1137, 1146, 1136, + 1143, 1141, 1149, 1134, 1142, 1142, 1140, 1144, 1143, 1138, + 1139, 1145, 1146, 1147, 1148, 1150, 1145, 1151, 1151, 1152, + 1150, 1158, 1147, 1153, 1153, 1157, 1154, 1149, 1154, 1156, + 1157, 1161, 1156, 1159, 1152, 1160, 1160, 1162, 1162, 1165, - 0, 1167, 1163, 1169, 1156, 1157, 1170, 1159, 1169, 1172, - 1161, 1171, 1165, 1173, 1168, 1177, 1171, 1172, 1173, 1174, - 1170, 1175, 1175, 1176, 1174, 1178, 1180, 1179, 1176, 1182, - 1183, 1178, 1184, 1177, 1179, 1182, 1183, 1184, 1185, 1180, - 1186, 1187, 1188, 1190, 1185, 1189, 1189, 1192, 1193, 1186, - 1194, 1195, 1196, 1188, 1199, 1198, 1194, 1195, 1196, 1200, - 1187, 1198, 1205, 1190, 1201, 1203, 1202, 1192, 1199, 1204, - 1204, 1193, 1206, 1207, 1199, 1210, 1201, 1209, 1209, 1200, - 1202, 1208, 1205, 1203, 1211, 1213, 1208, 1214, 1215, 1211, - 1216, 1207, 1214, 1214, 1217, 1218, 1219, 1206, 1210, 1216, + 1158, 1164, 1159, 1163, 1163, 1166, 1164, 1167, 1167, 1168, + 1169, 1161, 1170, 1169, 1171, 1172, 1173, 1174, 1173, 1171, + 1165, 1177, 1176, 1178, 1172, 1176, 1166, 1179, 1178, 1168, + 1186, 1181, 1170, 1180, 0, 1174, 1177, 1182, 1180, 1181, + 1183, 1179, 1182, 1184, 1184, 1183, 1185, 1187, 1186, 1188, + 1189, 1185, 1191, 1187, 1192, 1194, 1188, 1193, 1191, 1195, + 1192, 1194, 1193, 1189, 1196, 1197, 1198, 1198, 1195, 1199, + 1201, 1202, 1203, 1204, 1205, 1207, 1197, 1208, 1203, 1204, + 1205, 1207, 1209, 1196, 1210, 1211, 1212, 1213, 1213, 1199, + 1201, 1208, 1214, 1215, 1202, 1216, 1210, 1208, 1217, 1211, - 1220, 1222, 1217, 1222, 1213, 1221, 1215, 1223, 1225, 1218, - 1221, 1219, 1226, 1221, 1225, 1220, 1226, 1227, 1220, 1228, - 1229, 1223, 1230, 1231, 1228, 1228, 1232, 1233, 1227, 1234, - 1235, 1232, 1237, 1238, 1234, 1239, 1240, 1240, 1241, 1229, - 1242, 1231, 1241, 1243, 1245, 1233, 1237, 1246, 1230, 1244, - 1235, 1238, 1248, 1239, 1247, 1244, 1245, 1249, 1242, 1250, - 1251, 1254, 1243, 1252, 1253, 1251, 1246, 1248, 1247, 1253, - 1252, 1255, 1249, 1256, 1256, 1257, 1258, 1259, 1250, 1254, - 1255, 1260, 1258, 1261, 1269, 1262, 1260, 1263, 1263, 1261, - 1257, 1262, 1264, 1264, 1266, 1266, 1267, 1268, 1259, 1270, + 1218, 1218, 1209, 1217, 1212, 1219, 1220, 1222, 1225, 1223, + 1227, 1220, 1214, 1216, 1223, 1223, 1224, 1225, 1215, 1226, + 1228, 1229, 0, 1232, 1227, 1230, 1222, 1226, 1219, 1231, + 1230, 1231, 1234, 1230, 1224, 1228, 1229, 1232, 1234, 1229, + 1235, 1236, 1237, 1238, 1235, 1239, 1240, 1237, 1237, 1241, + 1242, 1243, 1236, 1244, 1241, 1242, 1245, 1248, 1244, 1247, + 1249, 1252, 1238, 1251, 1240, 1250, 1250, 1251, 1253, 1243, + 1255, 1239, 1256, 1247, 1254, 1248, 1245, 1258, 1249, 1252, + 1254, 1257, 1255, 1259, 1260, 1261, 1262, 1253, 1264, 1263, + 1261, 1256, 1258, 1262, 1263, 1257, 1265, 1267, 1259, 1266, - 1267, 1271, 1269, 1272, 1273, 1273, 1268, 1274, 1277, 1275, - 1272, 1278, 1281, 1270, 1276, 1279, 1271, 1275, 1280, 1276, - 1279, 1279, 1277, 1280, 1280, 1282, 1282, 1274, 1283, 1284, - 1278, 1285, 1281, 1286, 1287, 1288, 1289, 1290, 1286, 1291, - 1285, 1292, 1294, 1290, 1291, 1293, 1295, 1283, 1284, 1297, - 1296, 1293, 1295, 1287, 1289, 1288, 1296, 1298, 1299, 1300, - 1301, 1294, 1302, 1306, 1303, 1304, 1304, 1292, 1297, 1305, - 1307, 1307, 1305, 1311, 1301, 1306, 1298, 1299, 1300, 1303, - 1308, 1308, 1309, 1302, 1310, 1312, 1311, 1309, 1310, 1313, - 1314, 1318, 1314, 1316, 1312, 1317, 1314, 1319, 1320, 1325, + 1266, 1268, 1269, 1260, 1270, 1265, 1264, 1268, 1271, 1270, + 1272, 1277, 1267, 1279, 1271, 1277, 1272, 1273, 1273, 1274, + 1274, 1276, 1276, 1269, 1278, 1280, 1281, 1282, 1283, 1283, + 1284, 1279, 1285, 1278, 1282, 1287, 1288, 1286, 1289, 1280, + 1285, 1281, 1286, 1289, 1289, 1291, 1290, 1292, 1292, 1287, + 1284, 1290, 1290, 1293, 1294, 1288, 1296, 1295, 1297, 1298, + 1299, 1296, 1300, 1302, 1301, 1291, 1295, 1304, 1300, 1301, + 1303, 1307, 1293, 1294, 1305, 1306, 1303, 1297, 1299, 1298, + 1305, 1306, 1308, 1309, 1310, 1311, 1304, 1312, 1316, 1302, + 1307, 1313, 1314, 1314, 1315, 1317, 1317, 1315, 1321, 1311, - 1317, 1323, 1313, 1321, 1321, 1322, 1318, 1323, 1324, 1314, - 1322, 1316, 1325, 1326, 1320, 1327, 1328, 1319, 1326, 1327, - 1328, 1329, 1330, 1324, 1331, 1332, 1333, 1333, 1335, 1337, - 1338, 1332, 1339, 1339, 1341, 1338, 1340, 1343, 1343, 1347, - 1330, 1329, 1340, 1348, 1331, 1345, 1335, 1351, 1345, 1352, - 1337, 1346, 1346, 1350, 1341, 1347, 1350, 1354, 1352, 1348, - 1353, 1353, 1355, 1356, 1357, 1358, 1360, 1351, 1361, 1357, - 1359, 1359, 1354, 1362, 1363, 1360, 1364, 1364, 1365, 1358, - 1366, 1368, 1356, 1355, 1367, 1371, 1361, 1373, 1362, 1367, - 1369, 1369, 1365, 1370, 1372, 1372, 1368, 1370, 1366, 1363, + 1316, 1308, 1309, 1310, 1318, 1318, 1313, 1319, 1312, 1320, + 1322, 1321, 1319, 1320, 1323, 1324, 1328, 1324, 1326, 1322, + 1327, 1324, 1329, 1330, 1335, 1327, 1333, 1323, 1331, 1331, + 1332, 1328, 1333, 1334, 1324, 1332, 1326, 1335, 1336, 1330, + 1337, 1338, 1329, 1336, 1337, 1338, 1339, 1340, 1334, 1341, + 1342, 1343, 1343, 1345, 1347, 1348, 1342, 1349, 1349, 1351, + 1348, 1350, 1353, 1353, 1357, 1340, 1339, 1350, 1358, 1341, + 1355, 1345, 1361, 1355, 1362, 1347, 1356, 1356, 1360, 1351, + 1357, 1360, 1364, 1362, 1358, 1363, 1363, 1365, 1366, 1367, + 1368, 1370, 1361, 1371, 1367, 1369, 1369, 1364, 1372, 1373, - 1374, 1376, 1375, 1377, 1380, 1371, 1375, 1381, 1377, 1373, - 1382, 1374, 1379, 1379, 1383, 1384, 1385, 1385, 1386, 1387, - 1376, 1381, 1380, 1386, 1388, 1389, 1390, 1391, 1383, 1382, - 1382, 1390, 1393, 1392, 1389, 1392, 1394, 1393, 1395, 1387, - 1384, 1398, 1394, 1396, 1388, 1399, 1399, 1391, 1400, 1396, - 1401, 1404, 1403, 1405, 1405, 1398, 1401, 1403, 1395, 1406, - 1406, 1408, 1407, 1409, 1413, 1410, 1415, 1400, 1410, 1411, - 1411, 1412, 1415, 1421, 1414, 1404, 1407, 1414, 1409, 1408, - 1414, 1416, 1417, 1412, 1413, 1417, 1416, 1419, 1420, 1423, - 1430, 1422, 1414, 1420, 1422, 1423, 1419, 1424, 1421, 1425, + 1370, 1374, 1374, 1375, 1368, 1376, 1378, 1366, 1365, 1377, + 1381, 1371, 1383, 1372, 1377, 1379, 1379, 1375, 1380, 1382, + 1382, 1378, 1380, 1376, 1373, 1384, 1386, 1385, 1387, 1390, + 1381, 1385, 1391, 1387, 1383, 1392, 1384, 1389, 1389, 1393, + 1394, 1395, 1395, 1396, 1397, 1386, 1391, 1390, 1396, 1398, + 1399, 1400, 1401, 1393, 1392, 1392, 1400, 1403, 1402, 1399, + 1402, 1404, 1403, 1405, 1397, 1394, 1408, 1404, 1406, 1398, + 1409, 1409, 1401, 1410, 1406, 1411, 1414, 1413, 1415, 1415, + 1408, 1411, 1413, 1405, 1416, 1416, 1418, 1417, 1419, 1423, + 1420, 1425, 1410, 1420, 1421, 1421, 1422, 1425, 1431, 1424, - 1425, 1417, 1424, 1426, 1426, 1427, 1429, 1428, 1430, 1431, - 1432, 1427, 1428, 1433, 1434, 1435, 1433, 1436, 1437, 1429, - 1434, 1435, 1436, 1438, 1437, 1442, 1439, 1443, 1431, 1441, - 1432, 1439, 1440, 1440, 1441, 1444, 1445, 1446, 1449, 1450, - 1447, 1448, 1451, 1442, 1449, 1453, 1438, 1443, 1456, 1452, - 1445, 1446, 1447, 1457, 1448, 1444, 1455, 1455, 1457, 1450, - 1458, 1458, 1451, 1452, 1459, 1461, 1453, 1460, 1456, 1462, - 1464, 1463, 1467, 1471, 1466, 1465, 1469, 1473, 1473, 1459, - 1463, 1460, 1465, 1466, 1476, 1464, 1466, 1462, 1467, 1461, - 1472, 1469, 1475, 1472, 1474, 1474, 1469, 1477, 1471, 1479, + 1414, 1417, 1424, 1419, 1418, 1424, 1426, 1427, 1422, 1423, + 1427, 1426, 1429, 1430, 1433, 1433, 1432, 1424, 1430, 1432, + 1435, 1429, 1434, 1431, 1440, 1435, 1427, 1438, 1434, 1436, + 1436, 1437, 1437, 1438, 1439, 1441, 1442, 1440, 1443, 1439, + 1444, 1445, 1446, 1444, 1447, 1448, 1449, 1445, 1446, 1447, + 1453, 1448, 1450, 1441, 1454, 1442, 1452, 1450, 1443, 1451, + 1451, 1452, 1455, 1456, 1457, 1460, 1461, 1458, 1453, 1449, + 1459, 1460, 1462, 1463, 1454, 1464, 1470, 1456, 1457, 1458, + 1466, 1466, 1455, 1459, 1467, 1468, 1461, 1463, 1469, 1469, + 1468, 1470, 1462, 1471, 1472, 1473, 1464, 1474, 1476, 1475, - 1477, 1480, 1476, 1481, 1475, 1478, 1478, 1483, 1481, 1482, - 1485, 1484, 1479, 1486, 1482, 1488, 1487, 1489, 1491, 1485, - 1480, 1490, 1490, 1489, 1488, 1487, 1483, 1484, 1487, 1492, - 1493, 1494, 1486, 1495, 1496, 1499, 1500, 1502, 1491, 1501, - 1501, 1503, 1492, 1505, 1505, 1494, 1496, 1504, 1493, 1495, - 1503, 1507, 1504, 1502, 1500, 1506, 1507, 1508, 1505, 1509, - 1499, 1510, 1513, 1511, 1506, 1515, 1514, 1506, 1511, 1511, - 1518, 0, 1516, 1519, 1519, 1508, 1513, 1516, 1517, 1510, - 1509, 1514, 1525, 1520, 1517, 1521, 1522, 1515, 1518, 1520, - 1521, 1523, 1522, 1526, 1527, 1528, 1529, 1523, 1530, 1529, + 1477, 1478, 1482, 1486, 1467, 1476, 1474, 1471, 1480, 1477, + 1484, 1484, 1477, 1473, 1475, 1486, 1483, 1478, 1472, 1483, + 1485, 1485, 1487, 1480, 1489, 1489, 1488, 1482, 1480, 1488, + 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1492, 1493, 1497, + 1487, 1503, 1500, 1490, 1502, 1496, 1499, 1498, 1500, 1504, + 1491, 1495, 1505, 1494, 1503, 1499, 1498, 1506, 1497, 1498, + 1501, 1501, 1507, 1510, 1502, 1511, 1505, 1504, 1512, 1512, + 1513, 1514, 1515, 1506, 1507, 1516, 1516, 1515, 1519, 1518, + 1514, 1520, 1517, 1511, 1518, 1521, 1513, 1522, 1510, 1525, + 1516, 1517, 1522, 1522, 1517, 1524, 1519, 1526, 1529, 0, - 1527, 1532, 1525, 1534, 1530, 1529, 1535, 1526, 1528, 1532, - 1536, 1537, 1559, 1538, 1539, 1540, 1541, 1559, 1536, 1545, - 1537, 1547, 1534, 1542, 1542, 1535, 1538, 1539, 1543, 1540, - 1541, 1544, 1545, 1548, 1543, 1546, 1546, 1544, 1549, 1550, - 1551, 1547, 1552, 1553, 1554, 1542, 1551, 1556, 1556, 1557, - 1558, 1548, 1550, 1560, 1558, 1561, 1562, 1549, 1560, 1553, - 1561, 1563, 1554, 1565, 1552, 1562, 1566, 1566, 1567, 1557, - 1568, 1569, 1570, 1570, 1571, 1575, 1572, 1573, 1565, 1574, - 1576, 1578, 1568, 1572, 1563, 1579, 1577, 1567, 1571, 1573, - 1569, 1574, 1577, 1578, 1575, 1580, 1581, 1581, 1586, 1582, + 1527, 1528, 1520, 1521, 1525, 1527, 1531, 1528, 1532, 1524, + 1530, 1530, 1531, 1532, 1533, 1534, 1529, 1536, 1537, 1526, + 1533, 1534, 1538, 1539, 1540, 1541, 1543, 1540, 1538, 1545, + 1546, 1541, 1537, 1540, 1543, 1547, 1539, 1536, 1548, 1549, + 1550, 1551, 1552, 1547, 1553, 1553, 1556, 1548, 1545, 1546, + 1558, 1554, 1549, 1550, 1555, 1551, 1552, 1554, 1559, 1556, + 1555, 1557, 1557, 1560, 1561, 1562, 1553, 1563, 1564, 1565, + 1558, 1562, 1567, 1567, 1568, 1569, 1559, 1561, 1570, 1569, + 1571, 1572, 1560, 1570, 1564, 1571, 1572, 1565, 1573, 1563, + 1574, 1576, 1577, 1577, 1568, 1578, 1579, 1573, 1580, 1581, - 1576, 1580, 1582, 1579, 1583, 1583, 1585, 1586, 1587, 1588, - 1588, 1585, 1589, 1590, 1587, 1590, 1591, 1592, 1593, 1591, - 1594, 1595, 1596, 1597, 1589, 1600, 1601, 1596, 1599, 1598, - 1600, 1602, 1597, 1606, 1606, 1601, 1608, 1592, 1594, 1595, - 1593, 1598, 1603, 1599, 1604, 1605, 1607, 1603, 1601, 1604, - 1609, 1602, 1607, 1611, 1603, 1610, 1612, 1608, 1612, 1617, - 1605, 1613, 1614, 1614, 1615, 1615, 1616, 1616, 1620, 1609, - 1621, 1610, 1623, 1611, 0, 1613, 1623, 1613, 1628, 1617, - 1618, 1618, 1619, 1619, 1622, 1622, 1624, 1625, 1627, 1620, - 1625, 1621, 1624, 1629, 1627, 1630, 1628, 1631, 1636, 1629, + 1581, 1582, 1583, 1586, 1584, 1587, 1576, 1585, 1579, 1583, + 1590, 1589, 1588, 1574, 1578, 1582, 1584, 1580, 1588, 1585, + 1591, 1593, 1586, 1589, 1593, 1587, 1591, 1597, 1590, 1592, + 1592, 1594, 1594, 1596, 1598, 1600, 1597, 1601, 1596, 1601, + 1598, 1599, 1599, 1602, 1603, 1604, 1602, 1600, 1605, 1607, + 1606, 1608, 1611, 1609, 1607, 1610, 1613, 1611, 1615, 1619, + 1608, 0, 1612, 1615, 1603, 1609, 1605, 1604, 1606, 1614, + 1610, 1612, 1616, 1618, 1614, 1621, 1613, 1617, 1617, 1618, + 1619, 1614, 1622, 1623, 1612, 1625, 1624, 1616, 1624, 1626, + 1626, 1627, 1627, 1629, 1621, 1628, 1628, 1632, 1622, 1625, - 1631, 1632, 1632, 1633, 1633, 1634, 1637, 1638, 0, 1635, - 1639, 1634, 1643, 1638, 1643, 1642, 1644, 1645, 1636, 1641, - 1630, 1635, 1635, 1635, 1641, 1641, 1637, 1644, 1635, 1642, - 1639, 1646, 1645, 1647, 1648, 1649, 1651, 1646, 1650, 1650, - 1652, 1652, 1647, 1653, 1654, 1655, 1655, 1656, 1656, 1657, - 1660, 1660, 1661, 1665, 1648, 1662, 1649, 1668, 1664, 1666, - 1667, 1667, 1651, 1653, 1662, 1666, 1654, 1664, 1669, 1657, - 1672, 1671, 1670, 1674, 1665, 1673, 1673, 1661, 1668, 1670, - 1671, 1675, 1677, 1669, 1678, 1679, 1680, 1677, 1681, 1682, - 1678, 1683, 1683, 1680, 1681, 1682, 1672, 1675, 1684, 1674, + 1633, 1625, 1640, 1623, 1630, 1630, 1631, 1631, 1634, 1634, + 1635, 1636, 1637, 1629, 1635, 1637, 1639, 1636, 1632, 1641, + 1640, 1633, 1639, 1642, 1643, 1641, 1646, 1643, 1644, 1644, + 1645, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1653, 1654, + 1660, 1657, 1650, 1653, 1653, 1647, 1647, 1647, 1642, 1655, + 1656, 1655, 1647, 1654, 1648, 1649, 1657, 1651, 1658, 1659, + 1660, 1656, 1661, 1663, 1658, 1662, 1662, 1665, 1659, 1664, + 1664, 1666, 1667, 1667, 1668, 1668, 1669, 1672, 1672, 1673, + 1677, 1674, 1676, 1661, 1679, 1679, 1678, 1665, 1680, 1663, + 1674, 1676, 1678, 1666, 1683, 1681, 1669, 1684, 1682, 1685, - 1685, 1686, 1688, 1684, 1687, 1679, 1690, 1689, 1691, 1685, - 1689, 1692, 1692, 1693, 1688, 1695, 1694, 1696, 1699, 1693, - 1700, 1686, 1694, 1687, 1690, 1697, 1701, 1702, 1702, 1697, - 1703, 1701, 1696, 1704, 1691, 1695, 1706, 1707, 1699, 0, - 1708, 1707, 1700, 1709, 1714, 1697, 1708, 1712, 1704, 1703, - 1710, 1710, 1709, 1711, 1715, 1706, 1716, 1711, 1712, 1713, - 1713, 1717, 1718, 1712, 1719, 1714, 1717, 1720, 1715, 1722, - 1721, 1723, 1723, 1720, 1722, 1716, 1724, 1724, 1727, 1725, - 1728, 1729, 1718, 1725, 1719, 1721, 1736, 1727, 1730, 1730, - 1737, 1728, 1732, 1732, 1733, 1737, 1728, 1734, 1735, 1733, + 1685, 1677, 1686, 1683, 1673, 1682, 1687, 1689, 1690, 1680, + 1681, 1691, 1689, 1692, 1690, 1693, 1695, 1695, 1694, 1698, + 1692, 1693, 1687, 1684, 1694, 1696, 1697, 1699, 1686, 1700, + 1696, 1691, 1702, 1701, 1703, 1697, 1701, 1704, 1704, 1698, + 1708, 1700, 1705, 1706, 1707, 1711, 1699, 1709, 1705, 1706, + 1702, 1709, 1712, 1713, 1715, 1708, 1714, 1714, 1713, 1718, + 1703, 1716, 1719, 1720, 1707, 1711, 1719, 1709, 1721, 1720, + 1722, 1722, 1724, 1715, 1712, 1723, 1716, 1721, 1718, 1723, + 1725, 1725, 1726, 1724, 1727, 1728, 1729, 1730, 1724, 1731, + 1732, 1729, 1734, 1733, 1735, 1735, 1732, 1734, 1727, 1736, - 1733, 1729, 1738, 1734, 1735, 1739, 1741, 1743, 1744, 1742, - 1745, 1739, 1736, 1742, 1738, 1746, 1745, 1747, 1741, 1743, - 1748, 1751, 1750, 1747, 1752, 1754, 1755, 1755, 1754, 1752, - 1756, 1756, 1748, 1744, 1750, 1757, 1757, 1746, 1758, 1759, - 1751, 1760, 1763, 1761, 1762, 1759, 0, 1760, 1761, 1765, - 1762, 1763, 1767, 1768, 1765, 1767, 1769, 1769, 1758, 1771, - 1772, 1773, 1774, 1774, 1775, 1768, 1773, 1778, 1778, 1776, - 1777, 1771, 1772, 1775, 1776, 1777, 1779, 1780, 1783, 1781, - 1782, 1785, 1783, 1784, 1786, 1787, 1780, 1785, 1784, 1788, - 1789, 1791, 1791, 1792, 1787, 1797, 1779, 1781, 0, 1782, + 1736, 1737, 1739, 1726, 1728, 1737, 1740, 1730, 1733, 1731, + 1741, 1739, 1742, 1742, 1744, 1744, 1748, 1740, 1745, 1746, + 1747, 1750, 1740, 1745, 1745, 1746, 1747, 1749, 1751, 1753, + 1741, 1754, 1749, 1750, 1751, 1754, 1755, 1756, 1757, 1758, + 1759, 1753, 1748, 1760, 1757, 1762, 1759, 1763, 1755, 1764, + 1766, 1767, 1767, 1766, 1764, 1760, 1770, 1762, 1768, 1768, + 0, 1758, 1756, 1769, 1769, 1771, 1763, 1772, 1775, 1773, + 1777, 1771, 1774, 1772, 1773, 1777, 1770, 1775, 1774, 1779, + 1780, 1783, 1779, 1781, 1781, 1784, 1785, 1786, 1786, 1787, + 1788, 1785, 1780, 1783, 1789, 1788, 1791, 1784, 1787, 1789, - 1793, 1795, 1786, 1791, 1789, 1794, 1794, 1788, 1796, 1793, - 1795, 1792, 1798, 1799, 1802, 1802, 1797, 1798, 1804, 1805, - 1796, 1804, 1806, 1809, 1808, 1810, 1799, 1811, 1812, 1812, - 1813, 1810, 1813, 1814, 1814, 1805, 1817, 1809, 1806, 1808, - 1815, 1818, 1820, 1817, 1811, 1819, 1819, 1821, 1815, 1825, - 1822, 1820, 1823, 1824, 1826, 1830, 1832, 1827, 1829, 1831, - 1831, 1818, 1822, 1827, 1823, 1824, 1833, 1830, 1821, 1826, - 1834, 1836, 1835, 1834, 1832, 1825, 1827, 1835, 1829, 1838, - 1839, 1840, 1839, 1841, 1838, 1842, 1833, 1844, 1841, 1846, - 1850, 1836, 1842, 1847, 1848, 1849, 1844, 1849, 1852, 1840, + 1790, 1790, 1792, 1793, 1794, 1795, 1798, 1796, 1797, 1795, + 1799, 1792, 1796, 1800, 1797, 1801, 1791, 1804, 1805, 1799, + 1809, 1793, 1808, 1794, 1798, 1803, 1803, 1805, 0, 1801, + 1807, 1800, 1806, 1806, 1808, 1804, 1811, 1803, 1810, 1807, + 1817, 1809, 1818, 1810, 1814, 1814, 1820, 1816, 1821, 1811, + 1816, 1822, 1823, 1824, 1824, 1830, 1817, 1822, 1818, 1826, + 1826, 1820, 1821, 1825, 1827, 1825, 1829, 1831, 1831, 1823, + 1832, 1833, 1827, 1829, 1834, 1830, 1835, 1836, 1837, 1832, + 1838, 1839, 1841, 1844, 1842, 1845, 1834, 1839, 1835, 1836, + 1843, 1843, 1833, 1847, 1846, 1838, 1842, 1846, 1847, 1848, - 1852, 1853, 1847, 1854, 1854, 1855, 1848, 1846, 1856, 1850, - 1857, 1858, 1857, 1856, 1859, 1853, 1858, 1860, 1861, 1859, - 1862, 1864, 1863, 1867, 1865, 1868, 1862, 1863, 1869, 1869, - 1871, 1855, 1865, 1872, 1864, 1860, 1870, 1870, 1861, 1868, - 1873, 1876, 1867, 1874, 1877, 1871, 1873, 1875, 1874, 1875, - 1878, 1878, 1877, 1872, 1879, 1880, 1880, 1881, 1881, 1876, - 1877, 1882, 1883, 1884, 1886, 1888, 1879, 1883, 1891, 1887, - 1882, 1887, 1889, 1886, 1890, 1893, 1886, 1889, 1889, 1894, - 1891, 1884, 1897, 1890, 1894, 1895, 1888, 1893, 1898, 1899, - 1895, 1900, 1900, 1901, 1902, 1897, 1904, 1903, 1899, 1905, + 1839, 1844, 1841, 1850, 1837, 1845, 1852, 1851, 1850, 1851, + 1853, 1854, 1856, 1858, 1859, 1853, 1860, 1862, 1854, 1848, + 1861, 1856, 1861, 1859, 1852, 1864, 1865, 1864, 1860, 1866, + 1866, 1858, 1867, 1868, 1870, 1869, 1862, 1869, 1868, 1870, + 1865, 1871, 1872, 1873, 1874, 1877, 1871, 1875, 1876, 1879, + 1874, 1880, 1875, 1877, 1881, 1881, 1882, 1882, 1867, 1883, + 1872, 1876, 1884, 1873, 1885, 1880, 1886, 1887, 1879, 1887, + 1885, 1886, 1888, 1889, 1883, 1890, 1890, 1892, 1892, 1891, + 1896, 1889, 1884, 1893, 1893, 1894, 1900, 1895, 1898, 1889, + 1888, 1891, 1895, 1899, 1894, 1899, 1901, 1898, 1896, 1902, - 1909, 1910, 1911, 1907, 1908, 1918, 1910, 1911, 1898, 1912, - 1904, 1901, 1902, 1903, 1905, 1907, 1908, 1915, 1912, 1917, - 1909, 1920, 1919, 1915, 1921, 1917, 1922, 1926, 1918, 1923, - 1923, 1924, 1925, 1925, 1927, 1922, 1915, 1919, 1927, 1920, - 1924, 1929, 1928, 1935, 0, 1930, 1926, 1928, 1934, 1921, - 1930, 1930, 1931, 1932, 1929, 1944, 1934, 1933, 1931, 1932, - 1933, 1938, 1938, 1935, 1939, 1939, 1940, 1941, 1941, 1942, - 1942, 1943, 1945, 1944, 1950, 1940, 1946, 1949, 1945, 1939, - 1950, 1946, 1949, 1943, 1947, 1947, 1948, 1948, 1952, 1953, - 1939, 1954, 1952, 1956, 1957, 1954, 1958, 1959, 1960, 1957, + 1898, 1901, 1901, 1903, 1905, 1906, 1907, 1900, 1902, 1909, + 1906, 1907, 1910, 1913, 1911, 1903, 1905, 1912, 1912, 1914, + 1915, 1916, 1909, 1911, 1917, 1921, 1919, 1933, 1920, 1922, + 1930, 1913, 1910, 1924, 1922, 1916, 1915, 1914, 1919, 1917, + 1920, 1923, 1924, 1927, 1929, 1921, 1923, 1932, 1931, 1927, + 1929, 1934, 1933, 1930, 1935, 1935, 1938, 1936, 1937, 1937, + 1934, 1941, 1927, 1931, 1939, 1932, 1936, 1940, 1939, 0, + 1947, 1942, 1940, 1943, 1941, 1938, 1942, 1942, 1944, 1943, + 1945, 1946, 1952, 1945, 1944, 1950, 1950, 1951, 1951, 1946, + 1947, 1952, 1953, 1953, 1954, 1954, 1955, 1956, 1957, 1964, - 1962, 1963, 1961, 1960, 1965, 1964, 1966, 1966, 1968, 1953, - 1964, 1967, 1959, 1970, 1972, 1967, 1962, 1969, 1956, 1958, - 1961, 1963, 1969, 1968, 1971, 1973, 1965, 1974, 1975, 1978, - 1973, 1976, 1976, 1972, 1979, 1980, 1971, 1978, 1981, 1970, - 1974, 1982, 1984, 1983, 1985, 1986, 1975, 1989, 1989, 1988, - 1994, 1994, 1990, 1979, 1980, 1990, 1985, 1991, 1992, 2005, - 1993, 1981, 1983, 1984, 1988, 1982, 1986, 1995, 1995, 1997, - 1991, 2000, 1992, 1993, 1996, 1996, 1998, 1999, 1999, 2005, - 2000, 2001, 2001, 2000, 1997, 2002, 2004, 2006, 2007, 1998, - 2002, 2004, 2008, 2008, 2009, 2009, 2010, 2011, 2011, 2012, + 1958, 1965, 1951, 1964, 1957, 1958, 1959, 1959, 1955, 1960, + 1960, 1961, 1962, 1951, 1968, 1956, 1961, 1969, 1962, 1966, + 1970, 1965, 1969, 1966, 1972, 1971, 1973, 1975, 1976, 1972, + 1974, 1977, 1979, 1976, 1978, 1978, 1979, 1980, 1982, 1968, + 1971, 1984, 1983, 1970, 1973, 1981, 1974, 1975, 1986, 1987, + 1981, 1985, 1980, 1977, 1983, 1990, 1985, 1988, 1988, 1991, + 1984, 1986, 1992, 1990, 1982, 1993, 1994, 1987, 1995, 2000, + 1996, 1997, 1998, 2001, 2001, 2004, 2002, 2009, 1991, 2002, + 2040, 1992, 2003, 1997, 2000, 2005, 2040, 1995, 1993, 2004, + 1994, 1996, 2009, 1998, 2010, 2003, 2006, 2006, 2005, 2007, - 2007, 2013, 2013, 2014, 2015, 2016, 2016, 2006, 2018, 2015, - 2017, 2017, 2019, 2020, 2021, 2010, 2025, 2012, 2014, 2023, - 2027, 2019, 2018, 0, 2023, 2024, 2024, 2020, 2026, 2026, - 2028, 2029, 2032, 2021, 2029, 2025, 2028, 2033, 2027, 2030, - 2030, 2031, 2031, 2034, 2035, 2035, 2037, 2038, 2039, 2040, - 2042, 2032, 2033, 2040, 2043, 2030, 2041, 2041, 2044, 2043, - 2045, 2048, 2034, 2039, 2047, 2047, 2037, 2049, 2050, 2042, - 2038, 2051, 2052, 2044, 2049, 2045, 2053, 2054, 2054, 2055, - 2059, 2048, 2050, 2056, 2063, 2056, 2064, 2062, 2055, 2051, - 2052, 2057, 2059, 2060, 2057, 2061, 2065, 2063, 2060, 2066, + 2007, 2008, 2008, 2011, 2011, 2012, 2014, 2010, 2013, 2013, + 2016, 2014, 2017, 2018, 2012, 2016, 2019, 2012, 2020, 2020, + 2021, 2021, 2022, 2023, 2023, 2024, 2025, 2025, 2019, 2026, + 2027, 2030, 2017, 2018, 2032, 2027, 2028, 2028, 2029, 2029, + 2031, 2022, 2033, 2024, 2026, 2030, 2035, 2037, 2032, 2031, + 2039, 2035, 2036, 2036, 2038, 2038, 2041, 2042, 2042, 2041, + 2044, 2033, 2043, 2043, 2046, 2045, 2037, 2049, 2039, 2047, + 2047, 2050, 2052, 2042, 2051, 2060, 2052, 2053, 2053, 2044, + 2045, 2054, 2056, 2046, 2057, 2055, 2061, 2049, 2062, 2051, + 2055, 2059, 2059, 2061, 2050, 2060, 2063, 2056, 2064, 2057, - 2061, 2065, 2053, 2068, 2070, 2069, 2072, 2064, 2068, 2057, - 2069, 2057, 2062, 2074, 2071, 2073, 2076, 2075, 2074, 2070, - 2071, 2073, 2075, 2077, 2079, 2066, 2078, 2072, 2080, 2078, - 2081, 2082, 2083, 2079, 2088, 0, 2077, 2080, 2084, 2081, - 2082, 2076, 2085, 2086, 2084, 2094, 2083, 2086, 2085, 2090, - 2091, 2091, 2096, 2092, 2088, 2093, 2093, 2097, 2090, 2092, - 2098, 2098, 2099, 2100, 2093, 2094, 2102, 2094, 2096, 2103, - 2105, 2104, 2100, 2097, 2109, 2108, 2107, 2099, 2102, 2107, - 2108, 2110, 2105, 2111, 2111, 2103, 2104, 2112, 2112, 2114, - 2114, 2116, 2115, 2110, 2109, 2115, 2116, 2117, 2118, 2119, + 2054, 2065, 2062, 2066, 2066, 2068, 2067, 2068, 2069, 2071, + 2074, 2069, 2072, 2073, 2063, 2067, 2064, 2072, 2073, 2075, + 2076, 2071, 2078, 2082, 2077, 2080, 2069, 2065, 2069, 2077, + 2080, 2081, 2075, 2083, 2084, 2074, 2081, 2085, 2082, 2083, + 2086, 2076, 2087, 2085, 2088, 2086, 2089, 2087, 2078, 2090, + 2095, 2091, 2090, 2092, 2093, 2084, 2094, 2100, 0, 2089, + 2091, 2096, 2092, 2093, 2095, 2094, 2097, 2096, 2108, 2088, + 2098, 2102, 2097, 2104, 2098, 2103, 2103, 2100, 2106, 2104, + 2102, 2105, 2105, 2109, 2108, 2110, 2110, 2111, 2112, 2114, + 2105, 2115, 2117, 2116, 2121, 2123, 2123, 2112, 2106, 2109, - 2119, 2120, 2122, 2117, 2118, 2121, 2121, 2123, 2124, 2125, - 2125, 2126, 2127, 2128, 2122, 2120, 2130, 2126, 2128, 2131, - 2130, 2123, 2131, 2132, 2132, 2133, 2127, 2124, 2134, 2135, - 2133, 2136, 2137, 2137, 2138, 2136, 2140, 2134, 2141, 2142, - 2143, 2140, 2144, 2145, 2149, 2146, 2144, 2138, 2151, 2135, - 2146, 2147, 2159, 2159, 2143, 2148, 2161, 2147, 2141, 2142, - 2152, 2148, 2149, 2145, 2151, 2152, 2153, 2154, 2155, 2158, - 2155, 2160, 2153, 2165, 2160, 2154, 2162, 2162, 2166, 2165, - 2164, 2173, 2161, 2158, 2164, 2167, 2167, 2168, 2171, 2171, - 2166, 2175, 2176, 2179, 2180, 2181, 2168, 2182, 2179, 2173, + 2106, 2114, 2111, 2119, 2117, 2120, 2119, 2115, 2116, 2122, + 2120, 2124, 2124, 2128, 2121, 2126, 2126, 2127, 2128, 2129, + 2127, 2122, 2130, 2131, 2131, 2129, 2132, 2134, 2130, 2133, + 2133, 2135, 2136, 2137, 2137, 2138, 2139, 2140, 2147, 2134, + 2132, 2138, 2140, 2142, 0, 2135, 2143, 2142, 2146, 2143, + 2139, 2136, 2144, 2144, 2145, 2150, 2148, 2146, 2147, 2145, + 2148, 2149, 2149, 2153, 2152, 2154, 2155, 2156, 2150, 2152, + 2157, 2156, 2158, 2159, 2161, 2160, 2166, 2158, 2163, 2159, + 2155, 2160, 2164, 2153, 2166, 2154, 2167, 2164, 2167, 2165, + 2157, 2170, 2161, 2173, 2163, 2165, 2171, 2171, 2172, 2174, - 2181, 2189, 2182, 2183, 2183, 2175, 2185, 2185, 2176, 2187, - 2188, 2188, 2190, 2191, 2193, 2187, 2194, 2189, 2191, 2198, - 2180, 2195, 2195, 2197, 2199, 2198, 2200, 2204, 2194, 2202, - 2202, 2205, 2197, 2193, 2190, 2203, 2207, 2207, 2203, 2208, - 2208, 2200, 2199, 2209, 2210, 2211, 2204, 2212, 2209, 2205, - 2214, 2213, 2212, 2213, 2211, 2215, 2216, 2218, 2217, 0, - 2219, 2225, 2210, 2217, 2214, 2219, 2220, 2220, 2216, 2215, - 2221, 2221, 2222, 2222, 2223, 2223, 2224, 2218, 2226, 2225, - 2227, 2227, 2229, 2226, 2228, 2228, 2230, 2231, 2224, 2232, - 2233, 2233, 2234, 2237, 2229, 2235, 2235, 2238, 2230, 2236, + 2174, 2172, 2176, 2177, 2178, 2170, 2176, 2179, 2179, 2177, + 2185, 2180, 2183, 2183, 2188, 2187, 2178, 2191, 2192, 2173, + 2180, 2193, 2191, 2195, 2195, 2199, 2193, 2194, 2185, 2187, + 2188, 2199, 2194, 2197, 2197, 2200, 2200, 2201, 2202, 2205, + 2203, 2209, 2206, 2210, 2192, 2203, 2207, 2207, 2211, 2210, + 2209, 2216, 2212, 2201, 2206, 2214, 2214, 2217, 2205, 2215, + 2202, 2222, 2215, 2219, 2219, 2223, 2211, 2212, 2220, 2220, + 2216, 2221, 2224, 2226, 2223, 2217, 2221, 2224, 2225, 2222, + 2225, 2227, 2228, 2229, 2230, 2231, 0, 2226, 2229, 2237, + 2231, 2232, 2232, 2236, 2228, 2227, 2233, 2233, 2234, 2234, - 2236, 2239, 2240, 2241, 2237, 2232, 2243, 2231, 2239, 2238, - 2242, 2234, 2244, 2246, 2240, 2242, 2245, 2245, 2247, 2248, - 2249, 2250, 2246, 2241, 2251, 2253, 2243, 2252, 2252, 2257, - 2258, 2254, 2244, 2249, 2253, 2255, 2259, 2260, 2251, 2248, - 2260, 2261, 2272, 2262, 2247, 2250, 2254, 2257, 2262, 2263, - 2255, 2271, 2258, 2272, 2263, 2261, 2264, 2264, 2273, 2259, - 2265, 2265, 2266, 2266, 2268, 2268, 2270, 2270, 2275, 2271, - 2277, 2276, 2279, 2278, 2280, 2282, 2281, 2273, 2281, 2283, - 2284, 2279, 2285, 2285, 2287, 2287, 2288, 2289, 2275, 2276, - 2290, 2290, 2277, 2278, 2280, 2282, 2289, 2283, 2284, 2294, + 2235, 2235, 2241, 2238, 2230, 2236, 2242, 2237, 2238, 2239, + 2239, 2240, 2240, 2243, 2241, 2244, 2245, 2245, 2242, 2246, + 2247, 2247, 2248, 2248, 2249, 2250, 2253, 2251, 2252, 2255, + 2256, 2244, 2259, 2243, 2251, 2249, 2254, 2250, 2246, 2258, + 2252, 2254, 2257, 2257, 2260, 2262, 2253, 2261, 2258, 2255, + 2256, 2263, 2264, 2264, 2265, 2266, 2267, 2269, 2259, 2270, + 2261, 2271, 2274, 2265, 2260, 2263, 2273, 2274, 0, 2262, + 2266, 2267, 2275, 2272, 2283, 2269, 2272, 2275, 2276, 2276, + 2273, 2270, 2277, 2277, 2271, 2278, 2278, 2280, 2280, 2282, + 2282, 2284, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, - 2292, 2293, 2293, 2295, 2296, 2297, 2298, 2299, 2288, 2292, - 2300, 2296, 2301, 2302, 2302, 2303, 2303, 2294, 2305, 2306, - 2297, 2295, 2304, 2307, 2298, 2299, 2300, 2308, 2304, 2309, - 2310, 2301, 2308, 2311, 2306, 2312, 2305, 2312, 2311, 2313, - 2313, 2314, 2307, 2314, 2315, 2315, 2317, 2319, 2320, 2309, - 2310, 2321, 2322, 2323, 2324, 2328, 2319, 2325, 2323, 2329, - 2330, 2330, 2329, 2321, 2331, 2317, 2332, 2320, 2333, 2333, - 2336, 2341, 2322, 2334, 2324, 2328, 2325, 2334, 2337, 2331, - 2338, 2338, 2337, 2339, 2332, 2336, 2341, 2342, 2343, 2344, - 2344, 2346, 2347, 2348, 2349, 2349, 2339, 2348, 2350, 2351, + 2294, 2293, 2284, 2293, 2295, 2296, 2300, 2291, 2297, 2297, + 2299, 2299, 2285, 2288, 2287, 2301, 2306, 2290, 2289, 2292, + 2294, 2304, 2295, 2296, 2301, 2302, 2302, 2307, 2300, 2308, + 2304, 2305, 2305, 2309, 2306, 2310, 2308, 2311, 2312, 2313, + 2314, 2314, 2315, 2315, 2316, 2307, 2317, 2318, 2309, 2319, + 2316, 2320, 2321, 2310, 2312, 2311, 2320, 2322, 2313, 2324, + 2323, 2324, 2318, 2329, 2317, 2323, 2325, 2325, 2319, 2326, + 2331, 2326, 2321, 2327, 2327, 2332, 2333, 2322, 2334, 2331, + 2335, 2336, 2329, 2337, 2340, 2335, 2341, 2344, 2333, 2341, + 2342, 2342, 2343, 2346, 2332, 2345, 2345, 2346, 2334, 2348, - 2351, 2347, 2353, 2346, 2352, 2354, 2355, 2342, 2343, 2352, - 2362, 2353, 2356, 2356, 2361, 2361, 2364, 2350, 2355, 2363, - 2363, 2354, 2365, 2369, 2366, 2367, 2368, 2368, 2379, 2364, - 2371, 2371, 2362, 2366, 2367, 2365, 2374, 2375, 2369, 2376, - 2377, 2374, 2375, 2378, 2381, 2377, 2380, 2379, 2383, 2384, - 2386, 2378, 2381, 2376, 2384, 2380, 2385, 2387, 2387, 2388, - 2388, 2385, 2389, 2383, 2391, 2386, 2390, 2392, 2393, 2389, - 2394, 2390, 2395, 2395, 2393, 2394, 2396, 2402, 2397, 2398, - 2398, 2404, 2391, 2397, 2404, 2392, 2399, 2399, 2403, 2403, - 2402, 2396, 2405, 2414, 2406, 2407, 2408, 2405, 2405, 2406, + 2351, 2336, 2337, 2353, 2340, 2344, 2349, 2343, 2350, 2350, + 2349, 2354, 2355, 2351, 2348, 2356, 2356, 2358, 2353, 2359, + 2360, 2361, 2361, 2362, 2360, 2363, 2363, 2365, 2359, 2358, + 2364, 2354, 2355, 2366, 2367, 2364, 2365, 2368, 2368, 2373, + 2373, 2374, 2362, 2375, 2375, 2376, 2367, 2377, 2378, 2366, + 2379, 2380, 2380, 2381, 2383, 2383, 2386, 2378, 2376, 2379, + 2377, 2386, 2387, 2374, 2388, 2389, 2390, 2387, 2381, 2391, + 2389, 2392, 2395, 2393, 2390, 2398, 2401, 2396, 2388, 2397, + 2392, 2393, 2396, 2401, 2397, 2399, 2399, 2395, 2391, 2402, + 2398, 2400, 2400, 2403, 2402, 2404, 2405, 2408, 2406, 2407, - 2407, 2409, 2408, 2410, 2411, 2409, 2412, 2413, 2410, 0, - 2415, 2416, 2418, 2411, 2414, 2413, 2415, 2416, 2417, 2421, - 2420, 2412, 2421, 2417, 2418, 2420, 2423, 2425, 2426, 2427, - 2428, 2429, 2425, 2426, 2435, 2430, 2431, 2431, 2423, 2432, - 2429, 2436, 2440, 2428, 2430, 2437, 2439, 2427, 2432, 2438, - 2438, 2440, 2441, 2435, 2442, 2442, 2443, 2445, 2447, 2448, - 2450, 2436, 0, 2448, 2437, 2439, 2455, 2441, 2449, 2449, - 2451, 2452, 2445, 2453, 2455, 2443, 2451, 2452, 2447, 2453, - 2454, 2454, 2456, 2458, 2459, 2450, 2461, 2456, 2462, 2463, - 2461, 2466, 2458, 2465, 2465, 2467, 2467, 2459, 2468, 2468, + 2407, 2409, 2405, 2406, 2410, 2410, 2409, 2411, 2411, 2414, + 0, 2403, 2408, 2404, 2415, 2415, 2416, 2426, 2417, 2416, + 2418, 2419, 2414, 2417, 2417, 2418, 2419, 2420, 2421, 2422, + 2423, 2424, 2421, 2420, 2422, 2425, 2427, 2430, 2426, 2423, + 2429, 2428, 2427, 2425, 2435, 2429, 2424, 2428, 2432, 2430, + 2437, 2433, 2438, 2432, 2433, 2437, 2435, 2438, 2439, 2440, + 2441, 2442, 2443, 2443, 2444, 2447, 2448, 2453, 2449, 2441, + 2442, 2451, 2440, 2444, 2450, 2450, 2439, 2454, 2454, 2452, + 2455, 2457, 2453, 2459, 2447, 2460, 2448, 2449, 2452, 2460, + 2451, 2461, 2461, 2462, 2463, 2464, 2457, 0, 2465, 2455, - 2470, 2470, 2462, 2471, 2463, 2472, 2476, 2471, 2477, 2466, - 2472, 2474, 2474, 2477, 2479, 2478, 2481, 2482, 2482, 2479, - 2479, 2484, 2484, 2485, 2485, 2486, 2476, 2478, 2486, 2487, - 2489, 2491, 2492, 2492, 2493, 2493, 2481, 2494, 2494, 2495, - 2496, 2496, 2487, 2497, 2498, 2499, 2500, 2506, 2489, 2501, - 2501, 2491, 2500, 2502, 2495, 2505, 2497, 2502, 2507, 2499, - 2505, 2505, 2498, 2508, 2511, 2509, 2510, 2513, 2513, 2512, - 2506, 2509, 2510, 2512, 2516, 2521, 2518, 2519, 2507, 2516, - 2519, 2523, 2522, 2508, 2518, 2522, 2524, 2525, 2526, 2511, - 2527, 2524, 2528, 2528, 2532, 2529, 2531, 2542, 2523, 2523, + 2463, 2464, 2467, 2459, 2465, 2466, 2466, 2468, 2470, 2471, + 2467, 2473, 2468, 2474, 2475, 2473, 2478, 2470, 2462, 2477, + 2477, 2488, 2471, 2479, 2479, 2480, 2480, 2474, 2483, 2475, + 2482, 2482, 2483, 2484, 2478, 2486, 2486, 2489, 2484, 2490, + 2491, 2488, 2489, 2493, 2501, 2491, 2491, 2494, 2494, 2496, + 2496, 2490, 2497, 2497, 2498, 2499, 2503, 2498, 2504, 2504, + 2505, 2505, 2501, 2493, 2506, 2506, 2507, 2509, 2499, 2508, + 2508, 2510, 2511, 2512, 2513, 2513, 2503, 2518, 2514, 2512, + 2509, 2507, 2514, 2519, 2520, 2517, 2511, 2521, 2522, 2510, + 2517, 2517, 2523, 2521, 2522, 2524, 2525, 2525, 2533, 2524, - 2521, 2535, 2542, 2530, 2527, 2525, 2530, 2533, 2526, 2529, - 2531, 2534, 2543, 2532, 2530, 2533, 2534, 2534, 2536, 2536, - 2535, 2537, 2537, 2538, 2538, 2539, 2539, 2540, 2540, 2541, - 2544, 2545, 2543, 2546, 2547, 2549, 2549, 2551, 2550, 2554, - 2545, 2550, 2553, 2553, 2556, 2541, 2554, 2555, 2555, 2556, - 2558, 2558, 2559, 2546, 2547, 2551, 2544, 2560, 2561, 2563, - 2565, 2559, 2564, 2564, 2565, 2566, 2560, 2561, 2567, 2569, - 2568, 2570, 2580, 2575, 2566, 2568, 2568, 2563, 2575, 2579, - 2570, 2571, 2569, 2567, 2581, 2571, 2576, 2576, 2578, 2578, - 2583, 2584, 2587, 2579, 2589, 2588, 2592, 2580, 2594, 2583, + 2518, 2528, 2530, 2519, 2520, 2531, 2528, 2535, 2531, 2534, + 2530, 2536, 2534, 2537, 2538, 2539, 2536, 2523, 2540, 2540, + 2544, 2541, 2543, 2533, 2535, 2535, 2547, 2542, 2553, 2539, + 2542, 2537, 2545, 2556, 2538, 2541, 2543, 2546, 2542, 2544, + 2545, 0, 2546, 2546, 2553, 2547, 2548, 2548, 2549, 2549, + 2550, 2550, 2551, 2551, 2552, 2552, 2554, 2555, 2557, 2556, + 2558, 2554, 2559, 2561, 2561, 2562, 2563, 2557, 2562, 2565, + 2565, 2566, 2567, 2567, 2568, 2570, 2570, 2555, 2566, 2568, + 2558, 2571, 2559, 2572, 2563, 2573, 2575, 2576, 2576, 2577, + 2571, 2578, 2572, 2577, 2573, 2579, 2580, 2582, 2581, 2583, - 2590, 2608, 2581, 2584, 2588, 2596, 2590, 2597, 2592, 2599, - 2596, 2907, 2597, 2907, 2589, 2598, 2598, 2587, 2599, 2594, - 2601, 2608, 2602, 2602, 2607, 2601, 2602, 2604, 2604, 2605, - 2605, 2606, 2606, 2607, 2609, 2610, 2612, 2616, 2613, 2614, - 2610, 2617, 2612, 2613, 2614, 2615, 2615, 2618, 2619, 2621, - 2620, 2628, 2618, 2609, 0, 2616, 2620, 2622, 2622, 2624, - 2625, 2629, 2617, 2624, 2626, 2625, 2619, 2627, 2627, 2626, - 2628, 2630, 2632, 2632, 2621, 2634, 2629, 2635, 2636, 2638, - 2637, 2639, 2636, 2642, 2640, 2643, 2643, 2644, 2634, 2637, - 2635, 2630, 2640, 2641, 2649, 2638, 2646, 2646, 2641, 2659, + 2578, 2580, 2580, 2583, 2575, 2591, 2582, 2587, 2588, 2588, + 2579, 2581, 2587, 2590, 2590, 2592, 2593, 2595, 2596, 2591, + 2599, 2601, 2600, 2602, 2604, 2606, 2595, 2608, 2609, 2602, + 2596, 2600, 2608, 2609, 2593, 2611, 2604, 2610, 2610, 2620, + 2592, 2601, 2613, 2621, 2611, 2599, 2606, 2613, 2614, 2614, + 2616, 2616, 2614, 2617, 2617, 2618, 2618, 2619, 2622, 2620, + 2625, 2624, 2621, 2622, 2626, 2625, 2619, 2624, 2628, 2626, + 2627, 2627, 2629, 2630, 2631, 2632, 2633, 2637, 2630, 2634, + 2634, 2632, 2637, 2636, 2638, 2640, 2628, 2636, 2641, 2638, + 2639, 2639, 2631, 2629, 2642, 2644, 2644, 2646, 2647, 2649, - 2639, 2647, 2647, 2651, 2651, 2653, 2644, 2654, 2655, 2642, - 2660, 2656, 2658, 2658, 2664, 2649, 2656, 2661, 2665, 2659, - 2669, 2653, 2671, 2654, 2655, 2663, 2663, 2671, 2664, 2666, - 2666, 2672, 2670, 2660, 2673, 2673, 2661, 2665, 2670, 2675, - 2669, 2674, 2674, 2676, 2676, 2677, 2678, 2679, 2680, 2681, - 2682, 2683, 0, 2672, 2680, 2678, 2677, 2684, 2684, 2675, - 2690, 2685, 2682, 2676, 2685, 2686, 2686, 2679, 2681, 2691, - 2692, 2683, 2690, 2693, 2693, 2694, 2692, 2695, 2694, 2696, - 2698, 2699, 2700, 2695, 2701, 2698, 2699, 2702, 2705, 2691, - 2701, 2703, 2703, 2706, 2707, 2708, 2710, 2696, 2709, 2709, + 2650, 2633, 2648, 2641, 2640, 2651, 2648, 2652, 2649, 2654, + 2646, 2647, 2653, 2656, 2642, 2652, 2650, 2653, 2655, 2655, + 2658, 2658, 2659, 2659, 2651, 2661, 2663, 2663, 2665, 2666, + 2671, 2667, 2656, 2668, 2672, 2654, 2670, 2670, 2668, 2673, + 2675, 2675, 2676, 2677, 2665, 2666, 2661, 2667, 2678, 2678, + 2671, 2681, 2684, 2682, 2693, 2683, 2676, 2672, 2673, 2682, + 2683, 2687, 2677, 2685, 2685, 2686, 2686, 2688, 2688, 2689, + 2690, 2681, 2691, 2693, 2684, 2695, 2692, 2694, 0, 2690, + 2689, 2687, 2692, 2696, 2696, 2697, 2702, 2688, 2697, 2694, + 2698, 2698, 2691, 2703, 2704, 2695, 2705, 2705, 2702, 2706, - 2705, 2700, 2716, 2711, 2702, 2702, 2713, 2713, 2708, 2714, - 2714, 2706, 2711, 2715, 2726, 2710, 2716, 2717, 2715, 2707, - 2718, 2718, 2717, 2719, 2719, 2720, 2720, 2721, 2723, 2723, - 2728, 2729, 2721, 2726, 2730, 2731, 2731, 2733, 2733, 2735, - 2734, 2736, 2737, 2737, 2738, 2738, 2741, 2784, 2742, 2740, - 2736, 2784, 2728, 2729, 2734, 2740, 2730, 2743, 2750, 2735, - 2746, 2746, 2743, 2748, 2748, 2749, 2741, 2742, 2751, 2752, - 2749, 2753, 2750, 2755, 2751, 2754, 2754, 2757, 2755, 2753, - 2758, 2752, 2759, 2760, 2761, 2763, 2764, 2759, 2765, 2766, - 2761, 2768, 2767, 2763, 2769, 2760, 2770, 2757, 2771, 2773, + 2704, 2707, 2706, 2708, 2710, 2711, 2712, 2707, 2713, 2710, + 2711, 2714, 2717, 2703, 2713, 2715, 2715, 2718, 2719, 2720, + 2722, 2708, 2721, 2721, 2717, 2712, 2728, 2723, 2714, 2714, + 2725, 2725, 2720, 2726, 2726, 2718, 2723, 2727, 2738, 2722, + 2728, 2729, 2727, 2719, 2730, 2730, 2729, 2731, 2731, 2732, + 2732, 2733, 2735, 2735, 2740, 2741, 2733, 2738, 2742, 2743, + 2743, 2745, 2745, 2747, 2746, 2748, 2749, 2749, 2750, 2750, + 2753, 2796, 2754, 2752, 2748, 2796, 2740, 2741, 2746, 2752, + 2742, 2755, 2762, 2747, 2758, 2758, 2755, 2760, 2760, 2761, + 2753, 2754, 2763, 2764, 2761, 2765, 2762, 2767, 2763, 2766, - 2758, 2774, 2778, 2771, 2773, 2764, 2851, 2768, 2765, 2766, - 2767, 2769, 2769, 2775, 2779, 2776, 0, 2770, 2851, 2775, - 2776, 2774, 2778, 2782, 2782, 2783, 2783, 2779, 2788, 2788, - 2790, 2790, 2791, 2791, 2794, 2791, 2792, 2792, 2794, 2792, - 2793, 2793, 2797, 2793, 2796, 2796, 2801, 2798, 2802, 2803, - 2804, 2804, 2807, 2809, 2803, 2808, 2810, 2809, 2811, 0, - 2797, 2798, 2808, 2813, 2818, 2810, 2801, 2814, 2802, 2815, - 2815, 2816, 2816, 2811, 2817, 2817, 2814, 2807, 2819, 2818, - 2820, 2813, 2821, 2819, 2822, 2823, 2824, 2821, 2821, 2820, - 2822, 2825, 2820, 2826, 2827, 2828, 2829, 2829, 2826, 2827, + 2766, 2769, 2767, 2765, 2770, 2764, 2771, 2772, 2773, 2775, + 2776, 2771, 2777, 2778, 2773, 2780, 2779, 2775, 2781, 2772, + 2782, 2769, 2783, 2785, 2770, 2786, 2790, 2783, 2785, 2776, + 2863, 2780, 2777, 2778, 2779, 2781, 2781, 2787, 2791, 2788, + 0, 2782, 2863, 2787, 2788, 2786, 2790, 2794, 2794, 2795, + 2795, 2791, 2800, 2800, 2802, 2802, 2803, 2803, 2806, 2803, + 2804, 2804, 2806, 2804, 2805, 2805, 2809, 2805, 2808, 2808, + 2813, 2810, 2814, 2815, 2816, 2816, 2819, 2821, 2815, 2820, + 2822, 2821, 2823, 0, 2809, 2810, 2820, 2825, 2830, 2822, + 2813, 2826, 2814, 2827, 2827, 2828, 2828, 2823, 2829, 2829, - 2830, 2824, 2831, 2832, 2832, 2858, 2830, 2900, 2831, 0, - 2823, 2900, 2825, 2834, 2828, 2833, 2833, 2858, 2834, 2837, - 2837, 2840, 2840, 2841, 2841, 2842, 2842, 2843, 2843, 2844, - 2844, 2845, 2845, 2846, 2846, 2848, 2849, 2849, 2850, 2852, - 2856, 2854, 2855, 2855, 2848, 2857, 2860, 2850, 2859, 2859, - 2861, 2861, 2864, 2865, 2866, 2856, 2865, 2868, 2857, 2852, - 2854, 2860, 2867, 2867, 2870, 2871, 2874, 2870, 2872, 2873, - 2864, 2871, 2875, 2876, 2873, 2868, 2882, 2878, 2879, 2893, - 2866, 2891, 2872, 2878, 2891, 2874, 2898, 2879, 2902, 2876, - 2875, 2882, 2893, 2894, 2894, 2895, 2895, 2896, 2896, 2899, + 2826, 2819, 2831, 2830, 2832, 2825, 2833, 2831, 2834, 2835, + 2836, 2833, 2833, 2832, 2834, 2837, 2832, 2838, 2839, 2840, + 2841, 2841, 2838, 2839, 2842, 2836, 2843, 2844, 2844, 2870, + 2842, 2912, 2843, 0, 2835, 2912, 2837, 2846, 2840, 2845, + 2845, 2870, 2846, 2849, 2849, 2852, 2852, 2853, 2853, 2854, + 2854, 2855, 2855, 2856, 2856, 2857, 2857, 2858, 2858, 2860, + 2861, 2861, 2862, 2864, 2868, 2866, 2867, 2867, 2860, 2869, + 2872, 2862, 2871, 2871, 2873, 2873, 2876, 2877, 2878, 2868, + 2877, 2880, 2869, 2864, 2866, 2872, 2879, 2879, 2882, 2883, + 2886, 2882, 2884, 2885, 2876, 2883, 2887, 2888, 2885, 2880, - 2901, 2904, 2902, 2905, 2908, 2906, 2909, 2909, 2899, 2898, - 2906, 2911, 2910, 2912, 2905, 2914, 2913, 2916, 2915, 2908, - 2901, 2918, 2917, 2919, 2904, 2910, 2916, 2925, 2926, 2926, - 2911, 2912, 2913, 2915, 2917, 2924, 2920, 2927, 2928, 2928, - 2914, 2920, 2918, 2919, 2929, 2929, 2927, 2925, 2932, 2924, - 2930, 2930, 2931, 2931, 2933, 2934, 2935, 2936, 2934, 2937, - 2938, 2935, 2936, 2939, 2940, 2941, 2942, 2932, 2943, 2939, - 2945, 2942, 2944, 2944, 2933, 2938, 2946, 2941, 2940, 2947, - 2947, 2949, 2951, 2956, 2937, 2945, 2954, 2954, 2943, 2955, - 2955, 2956, 2957, 2958, 2960, 2946, 2949, 2959, 2962, 2958, + 2894, 2890, 2891, 2905, 2878, 2903, 2884, 2890, 2903, 2886, + 2910, 2891, 2914, 2888, 2887, 2894, 2905, 2906, 2906, 2907, + 2907, 2908, 2908, 2911, 2913, 2916, 2914, 2917, 2919, 2918, + 2919, 2920, 2911, 2910, 2918, 2921, 2921, 2922, 2917, 2923, + 2925, 2924, 2926, 2928, 2913, 2927, 2920, 2930, 2916, 2929, + 2922, 2931, 2928, 2937, 0, 2936, 2925, 2932, 2923, 2924, + 2927, 2929, 2932, 2938, 2938, 2939, 2944, 2926, 2930, 2936, + 2945, 2931, 2949, 2937, 2939, 2940, 2940, 2941, 2941, 2942, + 2942, 2943, 2943, 2946, 2947, 2944, 2946, 2948, 2950, 2947, + 2945, 2952, 2948, 2951, 2953, 2954, 2955, 2949, 2957, 2951, - 2951, 2961, 2963, 2959, 2964, 2964, 2967, 2963, 2960, 2965, - 2965, 2957, 2968, 2973, 2961, 2970, 2971, 2962, 2974, 2975, - 2971, 2976, 2977, 2974, 2978, 2979, 2980, 2967, 2984, 2970, - 2979, 2980, 2968, 2973, 2976, 2977, 2981, 2981, 2975, 2985, - 2986, 2987, 2987, 2978, 2988, 2989, 2990, 2990, 2984, 2988, - 2991, 2989, 2994, 2992, 2995, 2991, 2993, 2985, 2992, 2986, - 2995, 2993, 2997, 2997, 2998, 2999, 2999, 3002, 3001, 2998, - 3003, 2994, 3001, 3004, 3005, 3006, 3007, 3003, 3008, 3010, - 3010, 3006, 3012, 3012, 3014, 3013, 3002, 3015, 3016, 3014, - 3017, 3008, 3004, 3005, 3013, 3007, 3019, 3013, 3018, 3018, + 2954, 2956, 2956, 2950, 2958, 2952, 2953, 2959, 2959, 2961, + 2963, 2966, 2966, 2957, 2967, 2967, 2955, 2968, 2969, 2972, + 2970, 2971, 2973, 2958, 2961, 2968, 2970, 2971, 2963, 2974, + 2979, 2975, 2980, 2972, 2985, 2973, 2975, 2969, 2976, 2976, + 2977, 2977, 2982, 2983, 2986, 2987, 2988, 2983, 2974, 2986, + 2989, 2979, 2980, 2990, 2985, 2991, 2982, 2992, 2996, 2988, + 2991, 2997, 2992, 2989, 2987, 2993, 2993, 2998, 2999, 2999, + 3000, 3001, 2990, 3002, 3002, 3000, 3003, 3001, 2996, 2997, + 3004, 3003, 3005, 3006, 3007, 3004, 2998, 3005, 3009, 3009, + 3007, 3010, 3011, 3011, 3013, 3014, 3010, 3015, 3013, 3016, - 3020, 3019, 3022, 3017, 3023, 3023, 3015, 3016, 3024, 3025, - 3025, 3026, 3026, 3020, 3027, 3028, 3029, 3030, 3030, 3027, - 3031, 3032, 3028, 3032, 3034, 3031, 3035, 3024, 3022, 3033, - 3033, 3034, 3036, 3035, 3037, 3029, 3038, 3040, 3040, 3037, - 3041, 3043, 3044, 3045, 3046, 3050, 3043, 3044, 3047, 3047, - 3051, 3036, 3049, 3049, 0, 3038, 3052, 3052, 3054, 3041, - 3053, 3053, 3045, 3046, 3050, 3054, 3056, 3056, 3058, 3051, - 3057, 3057, 3060, 3063, 3064, 3058, 3065, 3060, 3063, 3066, - 3066, 3067, 3067, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3064, 0, 3065, 3071, 3071, 3071, 3071, + 3017, 3018, 3006, 3019, 3015, 3022, 3022, 3018, 3020, 3024, + 3024, 3025, 3026, 3027, 3014, 3028, 3029, 3026, 3016, 3017, + 3025, 3020, 3019, 3025, 3030, 3030, 3031, 3032, 3034, 3029, + 3036, 3031, 3027, 3041, 3028, 3035, 3035, 3037, 3037, 3039, + 3032, 3038, 3038, 3040, 3039, 3042, 3042, 3048, 3043, 3036, + 3040, 3050, 3041, 3043, 3034, 3044, 3046, 3044, 3045, 3045, + 3047, 3052, 3052, 3046, 3049, 3053, 3048, 3047, 3055, 3049, + 3050, 3056, 3057, 3055, 3058, 3062, 3056, 3059, 3059, 3061, + 3061, 3063, 3064, 3064, 3053, 3065, 3065, 0, 3066, 3068, + 3068, 3057, 3070, 3058, 3062, 3066, 3069, 3069, 3072, 3070, - 3071, 3071, 3071, 3072, 3072, 3072, 3072, 3072, 3072, 3072, - 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3074, 3074, 3074, - 3074, 3074, 3074, 3074, 3075, 3075, 3075, 3075, 3075, 3075, - 3075, 3077, 3077, 0, 3077, 3077, 3077, 3077, 3078, 3078, - 0, 0, 0, 3078, 3078, 3079, 3079, 0, 0, 3079, - 0, 3079, 3080, 0, 0, 0, 0, 0, 3080, 3081, - 3081, 0, 0, 0, 3081, 3081, 3082, 0, 0, 0, - 0, 0, 3082, 3083, 3083, 0, 3083, 3083, 3083, 3083, - 3084, 3084, 0, 3084, 3084, 3084, 3084, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3063, 3075, 3076, 3072, 3077, 0, 3075, 3078, 3078, 3079, + 3079, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3076, 0, 3077, 3083, 3083, 3083, 3083, 3083, 3083, + 3083, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3085, 3085, + 3085, 3085, 3085, 3085, 3085, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3089, + 3089, 0, 3089, 3089, 3089, 3089, 3090, 3090, 0, 0, + 0, 3090, 3090, 3091, 3091, 0, 0, 3091, 0, 3091, + 3092, 0, 0, 0, 0, 0, 3092, 3093, 3093, 0, + 0, 0, 3093, 3093, 3094, 0, 0, 0, 0, 0, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070 + 3094, 3095, 3095, 0, 3095, 3095, 3095, 3095, 3096, 3096, + 0, 3096, 3096, 3096, 3096, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082 } ; static yy_state_type yy_last_accepting_state; @@ -2960,7 +2972,7 @@ static void config_end_include(void) } #endif -#line 2961 "" +#line 2973 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2969,9 +2981,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2970 "" +#line 2982 "" -#line 2972 "" +#line 2984 "" #define INITIAL 0 #define quotedstring 1 @@ -3193,7 +3205,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3194 "" +#line 3206 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3226,13 +3238,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3071 ) + if ( yy_current_state >= 3083 ) 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] != 5988 ); + while ( yy_base[yy_current_state] != 6016 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4308,255 +4320,255 @@ YY_RULE_SETUP case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 231: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 232: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 233: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 441 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 234: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 442 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 235: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 444 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 236: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 237: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 238: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 239: YY_RULE_SETUP -#line 450 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 449 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 240: YY_RULE_SETUP -#line 452 "./util/configlexer.lex" +#line 450 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" +#line 452 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 456 "./util/configlexer.lex" +#line 454 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" +#line 456 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 244: YY_RULE_SETUP -#line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 458 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 245: YY_RULE_SETUP -#line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 460 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 246: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 256: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 257: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 258: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 259: YY_RULE_SETUP @@ -4566,200 +4578,210 @@ YY_RULE_SETUP case 260: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 270: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 271: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 487 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 272: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 488 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 273: YY_RULE_SETUP -#line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 490 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 290: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 291: YY_RULE_SETUP #line 509 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 292: -/* rule 292 can match eol */ YY_RULE_SETUP #line 510 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 511 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 294: +/* rule 294 can match eol */ +YY_RULE_SETUP +#line 512 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 293: +case 295: YY_RULE_SETUP -#line 513 "./util/configlexer.lex" +#line 515 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 514 "./util/configlexer.lex" +#line 516 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 294: +case 296: YY_RULE_SETUP -#line 519 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 295: -/* rule 295 can match eol */ +case 297: +/* rule 297 can match eol */ YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 522 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 296: +case 298: YY_RULE_SETUP -#line 522 "./util/configlexer.lex" +#line 524 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4772,34 +4794,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 297: +case 299: YY_RULE_SETUP -#line 534 "./util/configlexer.lex" +#line 536 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 535 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 298: +case 300: YY_RULE_SETUP -#line 540 "./util/configlexer.lex" +#line 542 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 299: -/* rule 299 can match eol */ +case 301: +/* rule 301 can match eol */ YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 543 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 300: +case 302: YY_RULE_SETUP -#line 543 "./util/configlexer.lex" +#line 545 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4812,38 +4834,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 301: +case 303: YY_RULE_SETUP -#line 555 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 557 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 302: -YY_RULE_SETUP -#line 561 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 303: -/* rule 303 can match eol */ -YY_RULE_SETUP -#line 562 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 304: YY_RULE_SETUP #line 563 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 305: +/* rule 305 can match eol */ YY_RULE_SETUP #line 564 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 306: +YY_RULE_SETUP +#line 565 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 307: +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4851,27 +4873,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 569 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 306: +case 308: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 307: -/* rule 307 can match eol */ +case 309: +/* rule 309 can match eol */ YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 308: +case 310: YY_RULE_SETUP -#line 576 "./util/configlexer.lex" +#line 578 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4881,7 +4903,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 582 "./util/configlexer.lex" +#line 584 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4893,33 +4915,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 309: +case 311: YY_RULE_SETUP -#line 593 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 310: +case 312: YY_RULE_SETUP -#line 597 "./util/configlexer.lex" +#line 599 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 311: +case 313: YY_RULE_SETUP -#line 601 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 312: +case 314: YY_RULE_SETUP -#line 605 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4920 "" +#line 4942 "" case YY_END_OF_BUFFER: { @@ -5214,7 +5236,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3071 ) + if ( yy_current_state >= 3083 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5242,11 +5264,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3071 ) + if ( yy_current_state >= 3083 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3070); + yy_is_jam = (yy_current_state == 3082); return yy_is_jam ? 0 : yy_current_state; } @@ -5885,6 +5907,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 605 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" diff --git a/util/configparser.c b/util/configparser.c index 66f34071a..2c9b0a5c4 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -418,7 +418,9 @@ extern int yydebug; VAR_RPZ_ACTION_OVERRIDE = 539, VAR_RPZ_CNAME_OVERRIDE = 540, VAR_RPZ_LOG = 541, - VAR_RPZ_LOG_NAME = 542 + VAR_RPZ_LOG_NAME = 542, + VAR_DYNLIB = 543, + VAR_DYNLIB_FILE = 544 }; #endif /* Tokens. */ @@ -707,6 +709,8 @@ extern int yydebug; #define VAR_RPZ_CNAME_OVERRIDE 540 #define VAR_RPZ_LOG 541 #define VAR_RPZ_LOG_NAME 542 +#define VAR_DYNLIB 543 +#define VAR_DYNLIB_FILE 544 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -716,7 +720,7 @@ union YYSTYPE char* str; -#line 720 "util/configparser.c" +#line 724 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -966,19 +970,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 609 +#define YYLAST 615 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 288 +#define YYNTOKENS 290 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 311 +#define YYNNTS 315 /* YYNRULES -- Number of rules. */ -#define YYNRULES 600 +#define YYNRULES 606 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 893 +#define YYNSTATES 900 #define YYUNDEFTOK 2 -#define YYMAXUTOK 542 +#define YYMAXUTOK 544 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1043,74 +1047,74 @@ static const yytype_uint16 yytranslate[] = 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 + 285, 286, 287, 288, 289 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 179, 179, 179, 180, 180, 181, 181, 182, 182, - 182, 183, 183, 184, 184, 185, 189, 194, 195, 196, - 196, 196, 197, 197, 198, 198, 198, 199, 199, 200, - 200, 200, 201, 201, 202, 202, 202, 203, 203, 203, - 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, - 209, 209, 210, 210, 211, 211, 212, 212, 212, 213, - 213, 213, 214, 214, 214, 215, 215, 216, 216, 217, - 217, 218, 218, 219, 219, 219, 220, 220, 221, 221, - 222, 222, 222, 223, 223, 224, 224, 225, 225, 226, - 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, - 231, 231, 232, 232, 232, 233, 233, 234, 234, 234, - 235, 235, 235, 236, 236, 236, 237, 237, 237, 237, - 238, 239, 239, 239, 240, 240, 240, 241, 241, 242, - 242, 243, 243, 243, 244, 244, 245, 245, 245, 246, - 247, 247, 248, 248, 249, 250, 250, 251, 251, 252, - 252, 253, 254, 254, 255, 255, 256, 256, 257, 257, - 258, 258, 259, 259, 259, 260, 260, 261, 261, 262, - 262, 263, 263, 264, 264, 265, 265, 266, 266, 266, - 267, 267, 267, 268, 268, 268, 269, 269, 270, 271, - 271, 272, 272, 273, 273, 274, 274, 275, 275, 275, - 276, 276, 276, 277, 277, 277, 278, 278, 279, 279, - 280, 280, 281, 283, 295, 296, 297, 297, 297, 297, - 297, 298, 298, 300, 312, 313, 314, 314, 314, 314, - 315, 315, 317, 331, 332, 333, 333, 333, 333, 334, - 334, 334, 336, 353, 354, 355, 355, 355, 355, 356, - 356, 356, 357, 360, 379, 396, 404, 414, 422, 439, - 440, 441, 441, 441, 441, 441, 442, 442, 442, 443, - 443, 445, 454, 463, 474, 483, 492, 501, 512, 521, - 533, 547, 562, 573, 590, 607, 624, 641, 656, 671, - 684, 699, 708, 717, 726, 735, 744, 753, 762, 771, - 780, 789, 798, 807, 816, 825, 838, 847, 860, 869, - 878, 887, 894, 901, 910, 917, 926, 934, 941, 948, - 956, 965, 974, 983, 997, 1006, 1015, 1024, 1033, 1042, - 1051, 1058, 1065, 1091, 1099, 1106, 1113, 1120, 1127, 1135, - 1143, 1151, 1158, 1169, 1180, 1187, 1196, 1205, 1214, 1221, - 1228, 1236, 1244, 1254, 1264, 1274, 1288, 1296, 1309, 1320, - 1328, 1341, 1350, 1359, 1368, 1378, 1388, 1396, 1409, 1418, - 1426, 1435, 1443, 1456, 1465, 1472, 1482, 1492, 1502, 1512, - 1522, 1532, 1542, 1552, 1559, 1566, 1573, 1582, 1591, 1600, - 1609, 1616, 1626, 1646, 1653, 1671, 1684, 1697, 1706, 1715, - 1724, 1733, 1743, 1753, 1764, 1773, 1782, 1791, 1800, 1809, - 1818, 1831, 1844, 1853, 1860, 1869, 1878, 1887, 1896, 1904, - 1917, 1925, 1966, 1973, 1988, 1998, 2008, 2015, 2022, 2029, - 2038, 2046, 2060, 2081, 2102, 2114, 2126, 2138, 2147, 2168, - 2178, 2187, 2195, 2203, 2216, 2229, 2244, 2259, 2268, 2277, - 2283, 2292, 2301, 2311, 2321, 2334, 2347, 2359, 2373, 2385, - 2399, 2409, 2416, 2423, 2432, 2441, 2451, 2461, 2471, 2478, - 2485, 2494, 2503, 2513, 2523, 2530, 2537, 2544, 2552, 2562, - 2572, 2582, 2592, 2631, 2641, 2649, 2657, 2672, 2681, 2686, - 2687, 2688, 2688, 2688, 2689, 2689, 2689, 2690, 2690, 2692, - 2702, 2711, 2718, 2725, 2732, 2739, 2746, 2753, 2758, 2759, - 2760, 2760, 2761, 2761, 2761, 2762, 2763, 2763, 2764, 2764, - 2765, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2773, 2782, - 2789, 2796, 2805, 2812, 2819, 2826, 2833, 2842, 2851, 2858, - 2865, 2875, 2885, 2895, 2905, 2915, 2925, 2930, 2931, 2932, - 2934, 2940, 2950, 2957, 2966, 2974, 2979, 2980, 2982, 2982, - 2982, 2983, 2983, 2984, 2985, 2986, 2987, 2988, 2990, 3000, - 3009, 3016, 3025, 3032, 3041, 3049, 3062, 3070, 3083, 3088, - 3089, 3090, 3090, 3091, 3091, 3091, 3092, 3094, 3106, 3118, - 3130, 3145, 3158, 3171, 3182, 3187, 3188, 3189, 3189, 3191, - 3206 + 0, 180, 180, 180, 181, 181, 182, 182, 183, 183, + 183, 184, 184, 185, 185, 186, 186, 190, 195, 196, + 197, 197, 197, 198, 198, 199, 199, 199, 200, 200, + 201, 201, 201, 202, 202, 203, 203, 203, 204, 204, + 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, + 209, 210, 210, 211, 211, 212, 212, 213, 213, 213, + 214, 214, 214, 215, 215, 215, 216, 216, 217, 217, + 218, 218, 219, 219, 220, 220, 220, 221, 221, 222, + 222, 223, 223, 223, 224, 224, 225, 225, 226, 226, + 227, 227, 227, 228, 228, 229, 229, 230, 230, 231, + 231, 232, 232, 233, 233, 233, 234, 234, 235, 235, + 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, + 238, 239, 240, 240, 240, 241, 241, 241, 242, 242, + 243, 243, 244, 244, 244, 245, 245, 246, 246, 246, + 247, 248, 248, 249, 249, 250, 251, 251, 252, 252, + 253, 253, 254, 255, 255, 256, 256, 257, 257, 258, + 258, 259, 259, 260, 260, 260, 261, 261, 262, 262, + 263, 263, 264, 264, 265, 265, 266, 266, 267, 267, + 267, 268, 268, 268, 269, 269, 269, 270, 270, 271, + 272, 272, 273, 273, 274, 274, 275, 275, 276, 276, + 276, 277, 277, 277, 278, 278, 278, 279, 279, 280, + 280, 281, 281, 282, 284, 296, 297, 298, 298, 298, + 298, 298, 299, 299, 301, 313, 314, 315, 315, 315, + 315, 316, 316, 318, 332, 333, 334, 334, 334, 334, + 335, 335, 335, 337, 354, 355, 356, 356, 356, 356, + 357, 357, 357, 358, 361, 380, 397, 405, 415, 423, + 440, 441, 442, 442, 442, 442, 442, 443, 443, 443, + 444, 444, 446, 455, 464, 475, 484, 493, 502, 513, + 522, 534, 548, 563, 574, 591, 608, 625, 642, 657, + 672, 685, 700, 709, 718, 727, 736, 745, 754, 763, + 772, 781, 790, 799, 808, 817, 826, 839, 848, 861, + 870, 879, 888, 895, 902, 911, 918, 927, 935, 942, + 949, 957, 966, 975, 984, 998, 1007, 1016, 1025, 1034, + 1043, 1052, 1059, 1066, 1092, 1100, 1107, 1114, 1121, 1128, + 1136, 1144, 1152, 1159, 1170, 1181, 1188, 1197, 1206, 1215, + 1222, 1229, 1237, 1245, 1255, 1265, 1275, 1289, 1297, 1310, + 1321, 1329, 1342, 1351, 1360, 1369, 1379, 1389, 1397, 1410, + 1419, 1427, 1436, 1444, 1457, 1466, 1473, 1483, 1493, 1503, + 1513, 1523, 1533, 1543, 1553, 1560, 1567, 1574, 1583, 1592, + 1601, 1610, 1617, 1627, 1647, 1654, 1672, 1685, 1698, 1707, + 1716, 1725, 1734, 1744, 1754, 1765, 1774, 1783, 1792, 1801, + 1810, 1819, 1832, 1845, 1854, 1861, 1870, 1879, 1888, 1897, + 1905, 1918, 1926, 1967, 1974, 1989, 1999, 2009, 2016, 2023, + 2030, 2039, 2047, 2061, 2082, 2103, 2115, 2127, 2139, 2148, + 2169, 2179, 2188, 2196, 2204, 2217, 2230, 2245, 2260, 2269, + 2278, 2284, 2293, 2302, 2312, 2322, 2335, 2348, 2360, 2374, + 2386, 2400, 2410, 2417, 2424, 2433, 2442, 2452, 2462, 2472, + 2479, 2486, 2495, 2504, 2514, 2524, 2531, 2538, 2545, 2553, + 2563, 2573, 2583, 2593, 2632, 2642, 2650, 2658, 2673, 2682, + 2687, 2688, 2689, 2689, 2689, 2690, 2690, 2690, 2691, 2691, + 2693, 2703, 2712, 2719, 2726, 2733, 2740, 2747, 2754, 2759, + 2760, 2761, 2761, 2762, 2762, 2762, 2763, 2764, 2764, 2765, + 2765, 2766, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2774, + 2783, 2790, 2797, 2806, 2813, 2820, 2827, 2834, 2843, 2852, + 2859, 2866, 2876, 2886, 2896, 2906, 2916, 2926, 2931, 2932, + 2933, 2935, 2941, 2946, 2947, 2948, 2950, 2956, 2966, 2973, + 2982, 2990, 2995, 2996, 2998, 2998, 2998, 2999, 2999, 3000, + 3001, 3002, 3003, 3004, 3006, 3016, 3025, 3032, 3041, 3048, + 3057, 3065, 3078, 3086, 3099, 3104, 3105, 3106, 3106, 3107, + 3107, 3107, 3108, 3110, 3122, 3134, 3146, 3161, 3174, 3187, + 3198, 3203, 3204, 3205, 3205, 3207, 3222 }; #endif @@ -1224,14 +1228,15 @@ static const char *const yytname[] = "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", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", "viewstart", - "contents_view", "content_view", "authstart", "contents_auth", - "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", - "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", - "server_num_threads", "server_verbosity", "server_statistics_interval", + "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", + "VAR_DYNLIB", "VAR_DYNLIB_FILE", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", + "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", + "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1336,10 +1341,10 @@ static const char *const yytname[] = "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", - "server_disable_dnssec_lame_check", "server_log_identity", - "server_response_ip", "server_response_ip_data", "dnscstart", - "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", + "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", @@ -1386,14 +1391,14 @@ static const yytype_uint16 yytoknum[] = 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 + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544 }; # endif -#define YYPACT_NINF -272 +#define YYPACT_NINF -280 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-272))) + (!!((Yystate) == (-280))) #define YYTABLE_NINF -1 @@ -1404,96 +1409,96 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -272, 0, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, 271, -42, - -37, -41, -7, -43, -30, -136, -106, -177, -172, -271, - 2, 3, 4, 25, 26, 28, 31, 32, 33, 34, - 36, 37, 38, 39, 40, 52, 53, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 87, 88, 91, 93, 94, 95, 96, 97, - 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 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, 201, 205, 206, - 207, 208, 209, 210, 211, 213, 214, 215, 216, 219, - 220, 222, 223, 224, 225, 226, 227, 228, 229, 237, - 243, 245, 246, 247, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 269, 270, 305, 306, 307, 308, 312, - 313, 314, 356, 357, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 358, - 359, 360, 361, 362, 363, 364, -272, -272, -272, -272, - -272, -272, -272, -272, 368, 372, 373, 398, 399, 400, - -272, -272, -272, -272, -272, -272, -272, 402, 413, 414, - 415, 416, 417, 418, -272, -272, -272, -272, -272, -272, - -272, -272, 419, 420, 421, 422, 423, 424, 425, 426, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 427, - 428, 429, 430, 431, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, 471, 473, 489, 490, 491, - 492, 493, 494, -272, -272, -272, -272, -272, -272, -272, - -272, -272, 495, 496, 497, 498, 499, 506, 507, 508, - 509, 510, 511, 512, 514, 515, 516, 517, 518, 519, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 520, - -272, -272, 523, 526, 529, 530, 539, 540, 541, 543, - 544, 545, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, 546, 547, 548, 549, 550, 551, -272, - -272, -272, -272, -272, -272, -272, 552, 553, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, 554, 555, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, 556, 557, - 558, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, 559, 560, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, 561, 562, 563, 564, 565, 566, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, 567, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 568, - -272, -272, 569, 570, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, 571, 572, 573, -272, -272, -272, -272, -272, - -272, -272, -272 + -280, 0, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + 277, -42, -37, -41, -7, -43, -30, -136, -106, -279, + -177, -172, -271, 2, 3, 4, 25, 26, 28, 31, + 32, 33, 34, 36, 37, 38, 39, 40, 52, 53, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 87, 88, 91, 93, 94, + 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 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, + 201, 205, 206, 207, 208, 209, 210, 211, 213, 214, + 215, 216, 219, 220, 222, 223, 224, 225, 226, 227, + 228, 229, 237, 243, 245, 246, 247, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 269, 270, 271, 273, + 274, 275, 276, 311, 312, 313, 314, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 318, 319, 320, 362, 363, 364, 365, -280, + -280, -280, -280, -280, -280, -280, -280, 366, 367, 368, + 369, 370, 374, -280, -280, -280, -280, -280, -280, -280, + 378, 379, 404, 405, 406, 408, 419, -280, -280, -280, + -280, -280, -280, -280, -280, 420, 421, 422, 423, 424, + 425, 426, 427, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 428, 429, 430, 431, 432, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 433, 434, + 435, 436, 437, 477, 479, 495, -280, -280, -280, -280, + -280, -280, -280, -280, -280, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 512, 513, 514, 515, 516, + 517, 518, 520, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 521, -280, -280, 522, -280, -280, 523, 524, + 525, 526, 529, 532, 535, 536, 545, 546, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, 547, + 549, 550, 551, 552, 553, -280, -280, -280, -280, -280, + -280, -280, 554, 555, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, 556, 557, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, 558, 559, 560, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, 561, 562, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 563, 564, + 565, 566, 567, 568, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, 569, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, 570, -280, -280, 571, 572, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, 573, + 574, 575, -280, -280, -280, -280, -280, -280, -280, -280 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1501,10 +1506,11 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 213, 223, 488, 546, 507, 232, - 555, 578, 242, 594, 258, 3, 18, 215, 225, 234, - 244, 260, 490, 509, 548, 557, 580, 596, 4, 5, - 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, + 2, 0, 1, 17, 214, 224, 489, 547, 508, 233, + 561, 584, 243, 600, 259, 552, 3, 19, 216, 226, + 235, 245, 261, 491, 510, 549, 554, 563, 586, 602, + 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, @@ -1523,148 +1529,147 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 20, 21, + 84, 87, 96, 184, 185, 22, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 35, 75, 23, 88, + 89, 46, 68, 83, 24, 25, 28, 29, 26, 27, + 30, 31, 32, 33, 34, 119, 196, 120, 122, 123, + 124, 198, 203, 199, 210, 211, 212, 213, 180, 85, + 74, 100, 117, 118, 208, 205, 121, 36, 37, 38, + 39, 40, 76, 90, 91, 106, 62, 72, 63, 188, + 189, 101, 56, 57, 187, 58, 59, 110, 114, 128, + 137, 163, 140, 209, 111, 69, 41, 42, 43, 98, + 129, 130, 131, 44, 45, 47, 48, 50, 51, 49, + 135, 52, 53, 54, 60, 79, 115, 93, 136, 86, + 159, 94, 95, 112, 113, 206, 99, 55, 77, 80, + 61, 64, 102, 103, 78, 160, 104, 65, 66, 67, + 197, 116, 173, 174, 175, 176, 177, 178, 186, 105, + 73, 107, 108, 109, 161, 70, 71, 92, 81, 82, + 97, 125, 126, 207, 127, 132, 133, 134, 164, 165, + 167, 169, 170, 168, 171, 181, 138, 139, 143, 144, + 141, 142, 145, 146, 148, 147, 200, 202, 201, 162, + 172, 190, 192, 191, 193, 194, 195, 166, 179, 182, + 183, 204, 0, 0, 0, 0, 0, 0, 0, 215, + 217, 218, 219, 221, 222, 223, 220, 0, 0, 0, + 0, 0, 0, 225, 227, 228, 229, 230, 231, 232, + 0, 0, 0, 0, 0, 0, 0, 234, 236, 237, + 240, 241, 238, 242, 239, 0, 0, 0, 0, 0, + 0, 0, 0, 244, 246, 247, 248, 249, 253, 250, + 251, 252, 0, 0, 0, 0, 0, 264, 268, 269, + 270, 271, 260, 262, 263, 265, 266, 267, 0, 0, + 0, 0, 0, 0, 0, 0, 490, 492, 494, 493, + 499, 495, 496, 497, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 19, 20, 83, 86, 95, - 183, 184, 21, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 34, 74, 22, 87, 88, 45, 67, - 82, 23, 24, 27, 28, 25, 26, 29, 30, 31, - 32, 33, 118, 195, 119, 121, 122, 123, 197, 202, - 198, 209, 210, 211, 212, 179, 84, 73, 99, 116, - 117, 207, 204, 120, 35, 36, 37, 38, 39, 75, - 89, 90, 105, 61, 71, 62, 187, 188, 100, 55, - 56, 186, 57, 58, 109, 113, 127, 136, 162, 139, - 208, 110, 68, 40, 41, 42, 97, 128, 129, 130, - 43, 44, 46, 47, 49, 50, 48, 134, 51, 52, - 53, 59, 78, 114, 92, 135, 85, 158, 93, 94, - 111, 112, 205, 98, 54, 76, 79, 60, 63, 101, - 102, 77, 159, 103, 64, 65, 66, 196, 115, 172, - 173, 174, 175, 176, 177, 185, 104, 72, 106, 107, - 108, 160, 69, 70, 91, 80, 81, 96, 124, 125, - 206, 126, 131, 132, 133, 163, 164, 166, 168, 169, - 167, 170, 180, 137, 138, 142, 143, 140, 141, 144, - 145, 147, 146, 199, 201, 200, 161, 171, 189, 191, - 190, 192, 193, 194, 165, 178, 181, 182, 203, 0, - 0, 0, 0, 0, 0, 0, 214, 216, 217, 218, - 220, 221, 222, 219, 0, 0, 0, 0, 0, 0, - 224, 226, 227, 228, 229, 230, 231, 0, 0, 0, - 0, 0, 0, 0, 233, 235, 236, 239, 240, 237, - 241, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 243, 245, 246, 247, 248, 252, 249, 250, 251, 0, - 0, 0, 0, 0, 263, 267, 268, 269, 270, 259, - 261, 262, 264, 265, 266, 0, 0, 0, 0, 0, - 0, 0, 0, 489, 491, 493, 492, 498, 494, 495, - 496, 497, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 508, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 0, - 547, 549, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 556, 558, 559, 560, 562, 563, 561, 564, - 565, 566, 567, 0, 0, 0, 0, 0, 0, 579, - 581, 582, 583, 584, 585, 586, 0, 0, 595, 597, - 598, 272, 271, 278, 291, 289, 301, 297, 298, 302, - 299, 300, 303, 304, 305, 306, 307, 330, 331, 332, - 333, 334, 359, 360, 361, 366, 367, 294, 368, 369, - 372, 370, 371, 374, 375, 376, 390, 345, 346, 348, - 349, 377, 393, 339, 341, 394, 400, 401, 402, 295, - 358, 418, 419, 340, 413, 323, 290, 335, 391, 397, - 378, 0, 0, 422, 296, 273, 322, 382, 274, 292, - 293, 336, 337, 420, 380, 384, 385, 275, 423, 362, - 389, 324, 344, 395, 396, 399, 412, 338, 416, 414, - 415, 350, 357, 386, 387, 351, 352, 379, 404, 325, - 326, 329, 308, 310, 311, 312, 313, 314, 424, 425, - 427, 363, 364, 365, 373, 428, 429, 430, 0, 0, - 0, 381, 353, 355, 551, 439, 443, 441, 440, 444, - 442, 0, 0, 447, 448, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 383, 398, 417, 452, 453, - 354, 431, 0, 0, 0, 0, 0, 0, 405, 406, - 407, 408, 409, 410, 411, 552, 347, 342, 403, 321, - 276, 277, 343, 454, 456, 455, 457, 458, 459, 309, - 316, 449, 451, 450, 315, 0, 328, 388, 426, 327, - 356, 317, 318, 320, 319, 460, 461, 462, 466, 465, - 463, 464, 467, 468, 469, 470, 472, 471, 481, 0, - 485, 486, 0, 0, 487, 473, 479, 474, 475, 476, - 478, 480, 477, 253, 254, 255, 256, 257, 499, 501, - 500, 503, 504, 505, 506, 502, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 550, 568, 569, 570, 573, 571, - 572, 574, 575, 576, 577, 587, 588, 589, 590, 591, - 592, 599, 600, 392, 421, 438, 553, 554, 445, 446, - 432, 433, 0, 0, 0, 437, 593, 482, 483, 484, - 436, 434, 435 + 0, 0, 0, 509, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 0, 548, 550, 0, 553, 555, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 562, 564, + 565, 566, 568, 569, 567, 570, 571, 572, 573, 0, + 0, 0, 0, 0, 0, 585, 587, 588, 589, 590, + 591, 592, 0, 0, 601, 603, 604, 273, 272, 279, + 292, 290, 302, 298, 299, 303, 300, 301, 304, 305, + 306, 307, 308, 331, 332, 333, 334, 335, 360, 361, + 362, 367, 368, 295, 369, 370, 373, 371, 372, 375, + 376, 377, 391, 346, 347, 349, 350, 378, 394, 340, + 342, 395, 401, 402, 403, 296, 359, 419, 420, 341, + 414, 324, 291, 336, 392, 398, 379, 0, 0, 423, + 297, 274, 323, 383, 275, 293, 294, 337, 338, 421, + 381, 385, 386, 276, 424, 363, 390, 325, 345, 396, + 397, 400, 413, 339, 417, 415, 416, 351, 358, 387, + 388, 352, 353, 380, 405, 326, 327, 330, 309, 311, + 312, 313, 314, 315, 425, 426, 428, 364, 365, 366, + 374, 429, 430, 431, 0, 0, 0, 382, 354, 356, + 557, 440, 444, 442, 441, 445, 443, 0, 0, 448, + 449, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 384, 399, 418, 453, 454, 355, 432, 0, 0, + 0, 0, 0, 0, 406, 407, 408, 409, 410, 411, + 412, 558, 348, 343, 404, 322, 277, 278, 344, 455, + 457, 456, 458, 459, 460, 310, 317, 450, 452, 451, + 316, 0, 329, 389, 427, 328, 357, 318, 319, 321, + 320, 461, 462, 463, 467, 466, 464, 465, 468, 469, + 470, 471, 473, 472, 482, 0, 486, 487, 0, 0, + 488, 474, 480, 475, 476, 477, 479, 481, 478, 254, + 255, 256, 257, 258, 500, 502, 501, 504, 505, 506, + 507, 503, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 551, 556, 574, 575, 576, 579, 577, 578, 580, 581, + 582, 583, 593, 594, 595, 596, 597, 598, 605, 606, + 393, 422, 439, 559, 560, 446, 447, 433, 434, 0, + 0, 0, 438, 599, 483, 484, 485, 437, 435, 436 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -23, 248, - 574, 575, 576, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272 + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 576, 577, + 578, 579, 580, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 234, 17, 29, 436, 18, - 30, 450, 19, 31, 464, 20, 32, 480, 494, 495, - 496, 497, 498, 21, 33, 499, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 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, 437, 438, 439, 440, 441, - 442, 443, 451, 452, 453, 454, 455, 456, 481, 482, - 483, 484, 485, 486, 487, 488, 465, 466, 467, 468, - 469, 470, 471, 22, 34, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 23, 35, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 557, 558, 24, 36, 560, 561, 424, - 425, 426, 427, 25, 37, 572, 573, 574, 575, 576, - 577, 578, 579, 580, 581, 582, 26, 38, 589, 590, - 591, 592, 593, 594, 595, 428, 27, 39, 598, 599, - 600 + -1, 1, 16, 17, 30, 237, 18, 31, 439, 19, + 32, 453, 20, 33, 467, 21, 34, 483, 497, 498, + 499, 500, 501, 22, 35, 502, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 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, 440, 441, 442, 443, 444, + 445, 446, 454, 455, 456, 457, 458, 459, 484, 485, + 486, 487, 488, 489, 490, 491, 468, 469, 470, 471, + 472, 473, 474, 23, 36, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 24, 37, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 25, 38, 563, 564, 26, + 39, 566, 567, 427, 428, 429, 430, 27, 40, 578, + 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, + 28, 41, 595, 596, 597, 598, 599, 600, 601, 431, + 29, 42, 604, 605, 606 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1672,73 +1677,74 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 472, 429, 457, 430, 431, 559, 444, 596, 597, - 500, 3, 601, 602, 603, 445, 446, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 604, 605, 472, 606, 458, - 459, 607, 608, 609, 610, 4, 611, 612, 613, 614, - 615, 5, 562, 563, 564, 565, 566, 567, 568, 569, - 570, 571, 616, 617, 460, 432, 505, 506, 507, 508, - 509, 510, 511, 512, 583, 584, 585, 586, 587, 588, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 628, 629, 630, 631, 632, 6, 433, 633, 634, 434, - 447, 635, 448, 636, 637, 638, 639, 640, 641, 642, - 643, 7, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, - 662, 461, 462, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 8, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 463, 700, 701, 702, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, - 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, - 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, - 9, 738, 474, 475, 476, 739, 740, 741, 742, 743, - 744, 745, 479, 746, 747, 748, 749, 435, 10, 750, - 751, 449, 752, 753, 754, 755, 756, 757, 758, 759, - 489, 490, 491, 492, 493, 11, 473, 760, 474, 475, - 476, 477, 478, 761, 12, 762, 763, 764, 479, 765, - 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, - 776, 777, 778, 779, 780, 781, 782, 783, 13, 784, - 785, 501, 14, 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, 786, 787, 788, 789, 72, - 73, 74, 790, 791, 792, 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, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 116, 117, 118, 802, 119, - 120, 121, 803, 804, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 805, 806, - 807, 146, 808, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, - 826, 827, 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, 828, 196, 829, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 830, - 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, - 212, 213, 214, 215, 216, 217, 841, 842, 843, 844, - 845, 846, 847, 218, 848, 849, 850, 851, 852, 853, - 854, 219, 220, 855, 221, 222, 856, 223, 224, 857, - 858, 225, 226, 227, 228, 229, 230, 231, 232, 859, - 860, 861, 233, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 0, 0, 0, 0, 0, 0, + 2, 475, 432, 460, 433, 434, 562, 447, 602, 603, + 565, 3, 607, 608, 609, 448, 449, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 610, 611, 475, 612, 461, + 462, 613, 614, 615, 616, 4, 617, 618, 619, 620, + 621, 5, 568, 569, 570, 571, 572, 573, 574, 575, + 576, 577, 622, 623, 463, 435, 508, 509, 510, 511, + 512, 513, 514, 515, 589, 590, 591, 592, 593, 594, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 6, 436, 639, 640, 437, + 450, 641, 451, 642, 643, 644, 645, 646, 647, 648, + 649, 7, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 464, 465, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, + 686, 687, 8, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 466, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, + 9, 744, 477, 478, 479, 745, 746, 747, 748, 749, + 750, 751, 482, 752, 753, 754, 755, 438, 10, 756, + 757, 452, 758, 759, 760, 761, 762, 763, 764, 765, + 492, 493, 494, 495, 496, 11, 476, 766, 477, 478, + 479, 480, 481, 767, 12, 768, 769, 770, 482, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 13, 790, + 791, 792, 14, 793, 794, 795, 796, 0, 15, 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, 797, 798, 799, 800, 75, 76, 77, 801, 802, + 803, 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, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 119, 120, 121, 813, 122, 123, 124, 814, 815, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 816, 817, 818, 149, 819, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 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, 839, 199, 840, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 215, 216, 217, 218, + 219, 220, 852, 853, 854, 855, 856, 857, 858, 221, + 859, 860, 861, 862, 863, 864, 865, 222, 223, 866, + 224, 225, 867, 226, 227, 868, 869, 228, 229, 230, + 231, 232, 233, 234, 235, 870, 871, 872, 236, 873, + 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, + 894, 895, 896, 897, 898, 899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 502, 503, 504 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 503, 504, 505, 506, 507 }; static const yytype_int16 yycheck[] = { 0, 44, 44, 44, 46, 47, 112, 44, 279, 280, - 33, 11, 10, 10, 10, 52, 53, 153, 154, 155, + 289, 11, 10, 10, 10, 52, 53, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 10, 10, 44, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, @@ -1765,106 +1771,107 @@ static const yytype_int16 yycheck[] = 257, 258, 259, 10, 254, 10, 10, 10, 265, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 278, 10, - 10, 33, 282, 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, 10, 10, 10, 10, 48, - 49, 50, 10, 10, 10, 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, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 104, 105, 106, 10, 108, - 109, 110, 10, 10, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 10, 10, - 10, 140, 10, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 282, 10, 10, 10, 10, -1, 288, 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, 10, 10, 10, 10, 48, 49, 50, 10, 10, + 10, 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, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 104, 105, 106, 10, 108, 109, 110, 10, 10, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 10, 10, 10, 140, 10, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 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, 10, 211, 10, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 239, 240, 241, 242, 243, 244, 10, 10, 10, 10, - 10, 10, 10, 252, 10, 10, 10, 10, 10, 10, - 10, 260, 261, 10, 263, 264, 10, 266, 267, 10, - 10, 270, 271, 272, 273, 274, 275, 276, 277, 10, - 10, 10, 281, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 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, 10, 211, 10, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 239, 240, 241, 242, + 243, 244, 10, 10, 10, 10, 10, 10, 10, 252, + 10, 10, 10, 10, 10, 10, 10, 260, 261, 10, + 263, 264, 10, 266, 267, 10, 10, 270, 271, 272, + 273, 274, 275, 276, 277, 10, 10, 10, 281, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33, 33, 33 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 35, 35, 35, 35, 35 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 289, 0, 11, 45, 51, 95, 111, 152, 210, - 228, 245, 254, 278, 282, 290, 291, 294, 297, 300, - 303, 311, 531, 542, 563, 571, 584, 594, 292, 295, - 298, 301, 304, 312, 532, 543, 564, 572, 585, 595, - 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, 48, 49, 50, 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, 104, 105, 106, 108, - 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 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, 211, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 239, 240, 241, 242, 243, 244, 252, 260, - 261, 263, 264, 266, 267, 270, 271, 272, 273, 274, - 275, 276, 277, 281, 293, 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, 567, 568, 569, 570, 593, 44, - 46, 47, 107, 138, 141, 269, 296, 503, 504, 505, - 506, 507, 508, 509, 44, 52, 53, 137, 139, 268, - 299, 510, 511, 512, 513, 514, 515, 44, 80, 81, - 105, 172, 173, 212, 302, 524, 525, 526, 527, 528, - 529, 530, 44, 253, 255, 256, 257, 258, 259, 265, - 305, 516, 517, 518, 519, 520, 521, 522, 523, 283, - 284, 285, 286, 287, 306, 307, 308, 309, 310, 313, - 516, 517, 518, 519, 520, 96, 97, 98, 99, 100, - 101, 102, 103, 533, 534, 535, 536, 537, 538, 539, - 540, 541, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, 562, 112, - 565, 566, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 573, 574, 575, 576, 577, 578, 579, 580, - 581, 582, 583, 246, 247, 248, 249, 250, 251, 586, - 587, 588, 589, 590, 591, 592, 279, 280, 596, 597, - 598, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 0, 291, 0, 11, 45, 51, 95, 111, 152, 210, + 228, 245, 254, 278, 282, 288, 292, 293, 296, 299, + 302, 305, 313, 533, 544, 565, 569, 577, 590, 600, + 294, 297, 300, 303, 306, 314, 534, 545, 566, 570, + 578, 591, 601, 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, 48, 49, 50, 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, 104, + 105, 106, 108, 109, 110, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 140, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 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, 211, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 239, 240, 241, 242, 243, + 244, 252, 260, 261, 263, 264, 266, 267, 270, 271, + 272, 273, 274, 275, 276, 277, 281, 295, 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, 573, 574, 575, + 576, 599, 44, 46, 47, 107, 138, 141, 269, 298, + 505, 506, 507, 508, 509, 510, 511, 44, 52, 53, + 137, 139, 268, 301, 512, 513, 514, 515, 516, 517, + 44, 80, 81, 105, 172, 173, 212, 304, 526, 527, + 528, 529, 530, 531, 532, 44, 253, 255, 256, 257, + 258, 259, 265, 307, 518, 519, 520, 521, 522, 523, + 524, 525, 283, 284, 285, 286, 287, 308, 309, 310, + 311, 312, 315, 518, 519, 520, 521, 522, 96, 97, + 98, 99, 100, 101, 102, 103, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 564, 112, 567, 568, 289, 571, 572, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 246, + 247, 248, 249, 250, 251, 592, 593, 594, 595, 596, + 597, 598, 279, 280, 602, 603, 604, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1893,80 +1900,80 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 288, 289, 289, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 291, 292, 292, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 294, 295, 295, 296, 296, 296, 296, - 296, 296, 296, 297, 298, 298, 299, 299, 299, 299, - 299, 299, 300, 301, 301, 302, 302, 302, 302, 302, - 302, 302, 303, 304, 304, 305, 305, 305, 305, 305, - 305, 305, 305, 306, 307, 308, 309, 310, 311, 312, - 312, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 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, - 532, 533, 533, 533, 533, 533, 533, 533, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 543, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, - 557, 558, 559, 560, 561, 562, 563, 564, 564, 565, - 566, 567, 568, 569, 570, 571, 572, 572, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 574, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, - 585, 586, 586, 586, 586, 586, 586, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 595, 596, 596, 597, - 598 + 0, 290, 291, 291, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 293, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 296, 297, 297, 298, 298, 298, + 298, 298, 298, 298, 299, 300, 300, 301, 301, 301, + 301, 301, 301, 302, 303, 303, 304, 304, 304, 304, + 304, 304, 304, 305, 306, 306, 307, 307, 307, 307, + 307, 307, 307, 307, 308, 309, 310, 311, 312, 313, + 314, 314, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 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, 534, 535, 535, 535, 535, 535, 535, 535, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 545, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 566, + 567, 568, 569, 570, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 578, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 591, 592, 592, 592, + 592, 592, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 601, 602, 602, 603, 604 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1986,13 +1993,13 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 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, 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, + 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2004,28 +2011,28 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, - 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, + 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 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, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 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, 2, 2, 2, - 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, - 2 + 0, 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, 1, 2, 0, + 1, 2, 1, 2, 0, 1, 2, 2, 2, 3, + 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, + 1, 2, 0, 1, 1, 2, 2 }; @@ -2709,16 +2716,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 190 "./util/configparser.y" + case 17: +#line 191 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2718 "util/configparser.c" +#line 2725 "util/configparser.c" break; - case 213: -#line 284 "./util/configparser.y" + case 214: +#line 285 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2729,11 +2736,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2733 "util/configparser.c" +#line 2740 "util/configparser.c" break; - case 223: -#line 301 "./util/configparser.y" + case 224: +#line 302 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2744,11 +2751,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2748 "util/configparser.c" +#line 2755 "util/configparser.c" break; - case 232: -#line 318 "./util/configparser.y" + case 233: +#line 319 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2761,11 +2768,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2765 "util/configparser.c" +#line 2772 "util/configparser.c" break; - case 242: -#line 337 "./util/configparser.y" + case 243: +#line 338 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2781,11 +2788,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2785 "util/configparser.c" +#line 2792 "util/configparser.c" break; - case 253: -#line 361 "./util/configparser.y" + case 254: +#line 362 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2802,11 +2809,11 @@ yyreduce: } } -#line 2806 "util/configparser.c" +#line 2813 "util/configparser.c" break; - case 254: -#line 380 "./util/configparser.y" + case 255: +#line 381 "./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 && @@ -2821,21 +2828,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2825 "util/configparser.c" +#line 2832 "util/configparser.c" break; - case 255: -#line 397 "./util/configparser.y" + case 256: +#line 398 "./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 2835 "util/configparser.c" +#line 2842 "util/configparser.c" break; - case 256: -#line 405 "./util/configparser.y" + case 257: +#line 406 "./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) @@ -2843,21 +2850,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2847 "util/configparser.c" +#line 2854 "util/configparser.c" break; - case 257: -#line 415 "./util/configparser.y" + case 258: +#line 416 "./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 2857 "util/configparser.c" +#line 2864 "util/configparser.c" break; - case 258: -#line 423 "./util/configparser.y" + case 259: +#line 424 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2873,11 +2880,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2877 "util/configparser.c" +#line 2884 "util/configparser.c" break; - case 271: -#line 446 "./util/configparser.y" + case 272: +#line 447 "./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) @@ -2885,11 +2892,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2889 "util/configparser.c" +#line 2896 "util/configparser.c" break; - case 272: -#line 455 "./util/configparser.y" + case 273: +#line 456 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2897,11 +2904,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2901 "util/configparser.c" +#line 2908 "util/configparser.c" break; - case 273: -#line 464 "./util/configparser.y" + case 274: +#line 465 "./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) @@ -2911,11 +2918,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2915 "util/configparser.c" +#line 2922 "util/configparser.c" break; - case 274: -#line 475 "./util/configparser.y" + case 275: +#line 476 "./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) @@ -2923,11 +2930,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2927 "util/configparser.c" +#line 2934 "util/configparser.c" break; - case 275: -#line 484 "./util/configparser.y" + case 276: +#line 485 "./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) @@ -2935,11 +2942,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2939 "util/configparser.c" +#line 2946 "util/configparser.c" break; - case 276: -#line 493 "./util/configparser.y" + case 277: +#line 494 "./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) @@ -2947,11 +2954,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2951 "util/configparser.c" +#line 2958 "util/configparser.c" break; - case 277: -#line 502 "./util/configparser.y" + case 278: +#line 503 "./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) @@ -2961,11 +2968,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2965 "util/configparser.c" +#line 2972 "util/configparser.c" break; - case 278: -#line 513 "./util/configparser.y" + case 279: +#line 514 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2973,11 +2980,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2977 "util/configparser.c" +#line 2984 "util/configparser.c" break; - case 279: -#line 522 "./util/configparser.y" + case 280: +#line 523 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2988,11 +2995,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2992 "util/configparser.c" +#line 2999 "util/configparser.c" break; - case 280: -#line 534 "./util/configparser.y" + case 281: +#line 535 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3004,11 +3011,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3008 "util/configparser.c" +#line 3015 "util/configparser.c" break; - case 281: -#line 548 "./util/configparser.y" + case 282: +#line 549 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3022,11 +3029,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3026 "util/configparser.c" +#line 3033 "util/configparser.c" break; - case 282: -#line 563 "./util/configparser.y" + case 283: +#line 564 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3036,11 +3043,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3040 "util/configparser.c" +#line 3047 "util/configparser.c" break; - case 283: -#line 574 "./util/configparser.y" + case 284: +#line 575 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3056,11 +3063,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3060 "util/configparser.c" +#line 3067 "util/configparser.c" break; - case 284: -#line 591 "./util/configparser.y" + case 285: +#line 592 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3076,11 +3083,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3080 "util/configparser.c" +#line 3087 "util/configparser.c" break; - case 285: -#line 608 "./util/configparser.y" + case 286: +#line 609 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3096,11 +3103,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3100 "util/configparser.c" +#line 3107 "util/configparser.c" break; - case 286: -#line 625 "./util/configparser.y" + case 287: +#line 626 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3116,11 +3123,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3120 "util/configparser.c" +#line 3127 "util/configparser.c" break; - case 287: -#line 642 "./util/configparser.y" + case 288: +#line 643 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3134,11 +3141,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3138 "util/configparser.c" +#line 3145 "util/configparser.c" break; - case 288: -#line 657 "./util/configparser.y" + case 289: +#line 658 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3152,11 +3159,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3156 "util/configparser.c" +#line 3163 "util/configparser.c" break; - case 289: -#line 672 "./util/configparser.y" + case 290: +#line 673 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3168,11 +3175,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3172 "util/configparser.c" +#line 3179 "util/configparser.c" break; - case 290: -#line 685 "./util/configparser.y" + case 291: +#line 686 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3186,11 +3193,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3190 "util/configparser.c" +#line 3197 "util/configparser.c" break; - case 291: -#line 700 "./util/configparser.y" + case 292: +#line 701 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3198,11 +3205,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3202 "util/configparser.c" +#line 3209 "util/configparser.c" break; - case 292: -#line 709 "./util/configparser.y" + case 293: +#line 710 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3210,11 +3217,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3214 "util/configparser.c" +#line 3221 "util/configparser.c" break; - case 293: -#line 718 "./util/configparser.y" + case 294: +#line 719 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3222,11 +3229,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3226 "util/configparser.c" +#line 3233 "util/configparser.c" break; - case 294: -#line 727 "./util/configparser.y" + case 295: +#line 728 "./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) @@ -3234,11 +3241,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" +#line 3245 "util/configparser.c" break; - case 295: -#line 736 "./util/configparser.y" + case 296: +#line 737 "./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) @@ -3246,11 +3253,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" +#line 3257 "util/configparser.c" break; - case 296: -#line 745 "./util/configparser.y" + case 297: +#line 746 "./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) @@ -3258,11 +3265,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" +#line 3269 "util/configparser.c" break; - case 297: -#line 754 "./util/configparser.y" + case 298: +#line 755 "./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) @@ -3270,11 +3277,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3274 "util/configparser.c" +#line 3281 "util/configparser.c" break; - case 298: -#line 763 "./util/configparser.y" + case 299: +#line 764 "./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) @@ -3282,11 +3289,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3286 "util/configparser.c" +#line 3293 "util/configparser.c" break; - case 299: -#line 772 "./util/configparser.y" + case 300: +#line 773 "./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) @@ -3294,11 +3301,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3298 "util/configparser.c" +#line 3305 "util/configparser.c" break; - case 300: -#line 781 "./util/configparser.y" + case 301: +#line 782 "./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) @@ -3306,11 +3313,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3310 "util/configparser.c" +#line 3317 "util/configparser.c" break; - case 301: -#line 790 "./util/configparser.y" + case 302: +#line 791 "./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) @@ -3318,11 +3325,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3322 "util/configparser.c" +#line 3329 "util/configparser.c" break; - case 302: -#line 799 "./util/configparser.y" + case 303: +#line 800 "./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) @@ -3330,11 +3337,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3334 "util/configparser.c" +#line 3341 "util/configparser.c" break; - case 303: -#line 808 "./util/configparser.y" + case 304: +#line 809 "./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) @@ -3342,11 +3349,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3346 "util/configparser.c" +#line 3353 "util/configparser.c" break; - case 304: -#line 817 "./util/configparser.y" + case 305: +#line 818 "./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) @@ -3354,11 +3361,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3358 "util/configparser.c" +#line 3365 "util/configparser.c" break; - case 305: -#line 826 "./util/configparser.y" + case 306: +#line 827 "./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) @@ -3370,11 +3377,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3374 "util/configparser.c" +#line 3381 "util/configparser.c" break; - case 306: -#line 839 "./util/configparser.y" + case 307: +#line 840 "./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) @@ -3382,11 +3389,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3386 "util/configparser.c" +#line 3393 "util/configparser.c" break; - case 307: -#line 848 "./util/configparser.y" + case 308: +#line 849 "./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) @@ -3398,11 +3405,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" +#line 3409 "util/configparser.c" break; - case 308: -#line 861 "./util/configparser.y" + case 309: +#line 862 "./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) @@ -3410,11 +3417,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3414 "util/configparser.c" +#line 3421 "util/configparser.c" break; - case 309: -#line 870 "./util/configparser.y" + case 310: +#line 871 "./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) @@ -3422,11 +3429,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3426 "util/configparser.c" +#line 3433 "util/configparser.c" break; - case 310: -#line 879 "./util/configparser.y" + case 311: +#line 880 "./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) @@ -3434,31 +3441,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3438 "util/configparser.c" +#line 3445 "util/configparser.c" break; - case 311: -#line 888 "./util/configparser.y" + case 312: +#line 889 "./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 3448 "util/configparser.c" +#line 3455 "util/configparser.c" break; - case 312: -#line 895 "./util/configparser.y" + case 313: +#line 896 "./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 3458 "util/configparser.c" +#line 3465 "util/configparser.c" break; - case 313: -#line 902 "./util/configparser.y" + case 314: +#line 903 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3466,21 +3473,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3470 "util/configparser.c" +#line 3477 "util/configparser.c" break; - case 314: -#line 911 "./util/configparser.y" + case 315: +#line 912 "./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 3480 "util/configparser.c" +#line 3487 "util/configparser.c" break; - case 315: -#line 918 "./util/configparser.y" + case 316: +#line 919 "./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) @@ -3488,53 +3495,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3492 "util/configparser.c" +#line 3499 "util/configparser.c" break; - case 316: -#line 927 "./util/configparser.y" + case 317: +#line 928 "./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 3503 "util/configparser.c" +#line 3510 "util/configparser.c" break; - case 317: -#line 935 "./util/configparser.y" + case 318: +#line 936 "./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 3513 "util/configparser.c" +#line 3520 "util/configparser.c" break; - case 318: -#line 942 "./util/configparser.y" + case 319: +#line 943 "./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 3523 "util/configparser.c" +#line 3530 "util/configparser.c" break; - case 319: -#line 949 "./util/configparser.y" + case 320: +#line 950 "./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 3534 "util/configparser.c" +#line 3541 "util/configparser.c" break; - case 320: -#line 957 "./util/configparser.y" + case 321: +#line 958 "./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) @@ -3542,11 +3549,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3546 "util/configparser.c" +#line 3553 "util/configparser.c" break; - case 321: -#line 966 "./util/configparser.y" + case 322: +#line 967 "./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) @@ -3554,11 +3561,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3558 "util/configparser.c" +#line 3565 "util/configparser.c" break; - case 322: -#line 975 "./util/configparser.y" + case 323: +#line 976 "./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) @@ -3566,11 +3573,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3570 "util/configparser.c" +#line 3577 "util/configparser.c" break; - case 323: -#line 984 "./util/configparser.y" + case 324: +#line 985 "./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) @@ -3583,11 +3590,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" +#line 3594 "util/configparser.c" break; - case 324: -#line 998 "./util/configparser.y" + case 325: +#line 999 "./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) @@ -3595,11 +3602,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3599 "util/configparser.c" +#line 3606 "util/configparser.c" break; - case 325: -#line 1007 "./util/configparser.y" + case 326: +#line 1008 "./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) @@ -3607,11 +3614,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3611 "util/configparser.c" +#line 3618 "util/configparser.c" break; - case 326: -#line 1016 "./util/configparser.y" + case 327: +#line 1017 "./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) @@ -3619,11 +3626,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3623 "util/configparser.c" +#line 3630 "util/configparser.c" break; - case 327: -#line 1025 "./util/configparser.y" + case 328: +#line 1026 "./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) @@ -3631,11 +3638,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3635 "util/configparser.c" +#line 3642 "util/configparser.c" break; - case 328: -#line 1034 "./util/configparser.y" + case 329: +#line 1035 "./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) @@ -3643,11 +3650,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3647 "util/configparser.c" +#line 3654 "util/configparser.c" break; - case 329: -#line 1043 "./util/configparser.y" + case 330: +#line 1044 "./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) @@ -3655,31 +3662,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3659 "util/configparser.c" +#line 3666 "util/configparser.c" break; - case 330: -#line 1052 "./util/configparser.y" + case 331: +#line 1053 "./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 3669 "util/configparser.c" +#line 3676 "util/configparser.c" break; - case 331: -#line 1059 "./util/configparser.y" + case 332: +#line 1060 "./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 3679 "util/configparser.c" +#line 3686 "util/configparser.c" break; - case 332: -#line 1066 "./util/configparser.y" + case 333: +#line 1067 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3704,105 +3711,105 @@ yyreduce: } } } -#line 3708 "util/configparser.c" +#line 3715 "util/configparser.c" break; - case 333: -#line 1092 "./util/configparser.y" + case 334: +#line 1093 "./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 3719 "util/configparser.c" +#line 3726 "util/configparser.c" break; - case 334: -#line 1100 "./util/configparser.y" + case 335: +#line 1101 "./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 3729 "util/configparser.c" +#line 3736 "util/configparser.c" break; - case 335: -#line 1107 "./util/configparser.y" + case 336: +#line 1108 "./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 3739 "util/configparser.c" +#line 3746 "util/configparser.c" break; - case 336: -#line 1114 "./util/configparser.y" + case 337: +#line 1115 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3749 "util/configparser.c" +#line 3756 "util/configparser.c" break; - case 337: -#line 1121 "./util/configparser.y" + case 338: +#line 1122 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3759 "util/configparser.c" +#line 3766 "util/configparser.c" break; - case 338: -#line 1128 "./util/configparser.y" + case 339: +#line 1129 "./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 3770 "util/configparser.c" +#line 3777 "util/configparser.c" break; - case 339: -#line 1136 "./util/configparser.y" + case 340: +#line 1137 "./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 3781 "util/configparser.c" +#line 3788 "util/configparser.c" break; - case 340: -#line 1144 "./util/configparser.y" + case 341: +#line 1145 "./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 3792 "util/configparser.c" +#line 3799 "util/configparser.c" break; - case 341: -#line 1152 "./util/configparser.y" + case 342: +#line 1153 "./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 3802 "util/configparser.c" +#line 3809 "util/configparser.c" break; - case 342: -#line 1159 "./util/configparser.y" + case 343: +#line 1160 "./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) @@ -3812,11 +3819,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3816 "util/configparser.c" +#line 3823 "util/configparser.c" break; - case 343: -#line 1170 "./util/configparser.y" + case 344: +#line 1171 "./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) @@ -3826,21 +3833,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" +#line 3837 "util/configparser.c" break; - case 344: -#line 1181 "./util/configparser.y" + case 345: +#line 1182 "./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 3840 "util/configparser.c" +#line 3847 "util/configparser.c" break; - case 345: -#line 1188 "./util/configparser.y" + case 346: +#line 1189 "./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) @@ -3848,11 +3855,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3852 "util/configparser.c" +#line 3859 "util/configparser.c" break; - case 346: -#line 1197 "./util/configparser.y" + case 347: +#line 1198 "./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) @@ -3860,11 +3867,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3864 "util/configparser.c" +#line 3871 "util/configparser.c" break; - case 347: -#line 1206 "./util/configparser.y" + case 348: +#line 1207 "./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) @@ -3872,53 +3879,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3876 "util/configparser.c" +#line 3883 "util/configparser.c" break; - case 348: -#line 1215 "./util/configparser.y" + case 349: +#line 1216 "./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 3886 "util/configparser.c" +#line 3893 "util/configparser.c" break; - case 349: -#line 1222 "./util/configparser.y" + case 350: +#line 1223 "./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 3896 "util/configparser.c" +#line 3903 "util/configparser.c" break; - case 350: -#line 1229 "./util/configparser.y" + case 351: +#line 1230 "./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 3907 "util/configparser.c" +#line 3914 "util/configparser.c" break; - case 351: -#line 1237 "./util/configparser.y" + case 352: +#line 1238 "./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 3918 "util/configparser.c" +#line 3925 "util/configparser.c" break; - case 352: -#line 1245 "./util/configparser.y" + case 353: +#line 1246 "./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) @@ -3927,11 +3934,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3931 "util/configparser.c" +#line 3938 "util/configparser.c" break; - case 353: -#line 1255 "./util/configparser.y" + case 354: +#line 1256 "./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) @@ -3940,11 +3947,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3944 "util/configparser.c" +#line 3951 "util/configparser.c" break; - case 354: -#line 1265 "./util/configparser.y" + case 355: +#line 1266 "./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) @@ -3953,11 +3960,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3957 "util/configparser.c" +#line 3964 "util/configparser.c" break; - case 355: -#line 1275 "./util/configparser.y" + case 356: +#line 1276 "./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) @@ -3970,22 +3977,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3974 "util/configparser.c" +#line 3981 "util/configparser.c" break; - case 356: -#line 1289 "./util/configparser.y" + case 357: +#line 1290 "./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 3985 "util/configparser.c" +#line 3992 "util/configparser.c" break; - case 357: -#line 1297 "./util/configparser.y" + case 358: +#line 1298 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3997,11 +4004,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4001 "util/configparser.c" +#line 4008 "util/configparser.c" break; - case 358: -#line 1310 "./util/configparser.y" + case 359: +#line 1311 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4011,22 +4018,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4015 "util/configparser.c" +#line 4022 "util/configparser.c" break; - case 359: -#line 1321 "./util/configparser.y" + case 360: +#line 1322 "./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 4026 "util/configparser.c" +#line 4033 "util/configparser.c" break; - case 360: -#line 1329 "./util/configparser.y" + case 361: +#line 1330 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4038,11 +4045,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" +#line 4049 "util/configparser.c" break; - case 361: -#line 1342 "./util/configparser.y" + case 362: +#line 1343 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4050,11 +4057,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" +#line 4061 "util/configparser.c" break; - case 362: -#line 1351 "./util/configparser.y" + case 363: +#line 1352 "./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) @@ -4062,11 +4069,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4066 "util/configparser.c" +#line 4073 "util/configparser.c" break; - case 363: -#line 1360 "./util/configparser.y" + case 364: +#line 1361 "./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) @@ -4074,11 +4081,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4078 "util/configparser.c" +#line 4085 "util/configparser.c" break; - case 364: -#line 1369 "./util/configparser.y" + case 365: +#line 1370 "./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) @@ -4087,11 +4094,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4091 "util/configparser.c" +#line 4098 "util/configparser.c" break; - case 365: -#line 1379 "./util/configparser.y" + case 366: +#line 1380 "./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) @@ -4100,22 +4107,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4104 "util/configparser.c" +#line 4111 "util/configparser.c" break; - case 366: -#line 1389 "./util/configparser.y" + case 367: +#line 1390 "./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 4115 "util/configparser.c" +#line 4122 "util/configparser.c" break; - case 367: -#line 1397 "./util/configparser.y" + case 368: +#line 1398 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4127,11 +4134,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4131 "util/configparser.c" +#line 4138 "util/configparser.c" break; - case 368: -#line 1410 "./util/configparser.y" + case 369: +#line 1411 "./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) @@ -4139,22 +4146,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4143 "util/configparser.c" +#line 4150 "util/configparser.c" break; - case 369: -#line 1419 "./util/configparser.y" + case 370: +#line 1420 "./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 4154 "util/configparser.c" +#line 4161 "util/configparser.c" break; - case 370: -#line 1427 "./util/configparser.y" + case 371: +#line 1428 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4162,22 +4169,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4166 "util/configparser.c" +#line 4173 "util/configparser.c" break; - case 371: -#line 1436 "./util/configparser.y" + case 372: +#line 1437 "./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 4177 "util/configparser.c" +#line 4184 "util/configparser.c" break; - case 372: -#line 1444 "./util/configparser.y" + case 373: +#line 1445 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4189,11 +4196,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4193 "util/configparser.c" +#line 4200 "util/configparser.c" break; - case 373: -#line 1457 "./util/configparser.y" + case 374: +#line 1458 "./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) @@ -4201,21 +4208,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4205 "util/configparser.c" +#line 4212 "util/configparser.c" break; - case 374: -#line 1466 "./util/configparser.y" + case 375: +#line 1467 "./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 4215 "util/configparser.c" +#line 4222 "util/configparser.c" break; - case 375: -#line 1473 "./util/configparser.y" + case 376: +#line 1474 "./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) @@ -4224,11 +4231,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4228 "util/configparser.c" +#line 4235 "util/configparser.c" break; - case 376: -#line 1483 "./util/configparser.y" + case 377: +#line 1484 "./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) @@ -4237,11 +4244,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4241 "util/configparser.c" +#line 4248 "util/configparser.c" break; - case 377: -#line 1493 "./util/configparser.y" + case 378: +#line 1494 "./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) @@ -4250,11 +4257,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4254 "util/configparser.c" +#line 4261 "util/configparser.c" break; - case 378: -#line 1503 "./util/configparser.y" + case 379: +#line 1504 "./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) @@ -4263,11 +4270,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4267 "util/configparser.c" +#line 4274 "util/configparser.c" break; - case 379: -#line 1513 "./util/configparser.y" + case 380: +#line 1514 "./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) @@ -4276,11 +4283,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" +#line 4287 "util/configparser.c" break; - case 380: -#line 1523 "./util/configparser.y" + case 381: +#line 1524 "./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) @@ -4289,11 +4296,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4293 "util/configparser.c" +#line 4300 "util/configparser.c" break; - case 381: -#line 1533 "./util/configparser.y" + case 382: +#line 1534 "./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) @@ -4302,11 +4309,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4306 "util/configparser.c" +#line 4313 "util/configparser.c" break; - case 382: -#line 1543 "./util/configparser.y" + case 383: +#line 1544 "./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) @@ -4315,41 +4322,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4319 "util/configparser.c" +#line 4326 "util/configparser.c" break; - case 383: -#line 1553 "./util/configparser.y" + case 384: +#line 1554 "./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 4329 "util/configparser.c" +#line 4336 "util/configparser.c" break; - case 384: -#line 1560 "./util/configparser.y" + case 385: +#line 1561 "./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 4339 "util/configparser.c" +#line 4346 "util/configparser.c" break; - case 385: -#line 1567 "./util/configparser.y" + case 386: +#line 1568 "./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 4349 "util/configparser.c" +#line 4356 "util/configparser.c" break; - case 386: -#line 1574 "./util/configparser.y" + case 387: +#line 1575 "./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) @@ -4357,11 +4364,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4368 "util/configparser.c" break; - case 387: -#line 1583 "./util/configparser.y" + case 388: +#line 1584 "./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) @@ -4369,11 +4376,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" +#line 4380 "util/configparser.c" break; - case 388: -#line 1592 "./util/configparser.y" + case 389: +#line 1593 "./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) @@ -4381,11 +4388,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4392 "util/configparser.c" break; - case 389: -#line 1601 "./util/configparser.y" + case 390: +#line 1602 "./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) @@ -4393,21 +4400,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4397 "util/configparser.c" +#line 4404 "util/configparser.c" break; - case 390: -#line 1610 "./util/configparser.y" + case 391: +#line 1611 "./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 4407 "util/configparser.c" +#line 4414 "util/configparser.c" break; - case 391: -#line 1617 "./util/configparser.y" + case 392: +#line 1618 "./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) @@ -4416,11 +4423,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4420 "util/configparser.c" +#line 4427 "util/configparser.c" break; - case 392: -#line 1627 "./util/configparser.y" + case 393: +#line 1628 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4439,21 +4446,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4443 "util/configparser.c" +#line 4450 "util/configparser.c" break; - case 393: -#line 1647 "./util/configparser.y" + case 394: +#line 1648 "./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 4453 "util/configparser.c" +#line 4460 "util/configparser.c" break; - case 394: -#line 1654 "./util/configparser.y" + case 395: +#line 1655 "./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) { @@ -4470,11 +4477,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4474 "util/configparser.c" +#line 4481 "util/configparser.c" break; - case 395: -#line 1672 "./util/configparser.y" + case 396: +#line 1673 "./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) { @@ -4486,11 +4493,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4490 "util/configparser.c" +#line 4497 "util/configparser.c" break; - case 396: -#line 1685 "./util/configparser.y" + case 397: +#line 1686 "./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) { @@ -4502,11 +4509,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4506 "util/configparser.c" +#line 4513 "util/configparser.c" break; - case 397: -#line 1698 "./util/configparser.y" + case 398: +#line 1699 "./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) @@ -4514,11 +4521,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" +#line 4525 "util/configparser.c" break; - case 398: -#line 1707 "./util/configparser.y" + case 399: +#line 1708 "./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) @@ -4526,11 +4533,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4530 "util/configparser.c" +#line 4537 "util/configparser.c" break; - case 399: -#line 1716 "./util/configparser.y" + case 400: +#line 1717 "./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) @@ -4538,11 +4545,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4542 "util/configparser.c" +#line 4549 "util/configparser.c" break; - case 400: -#line 1725 "./util/configparser.y" + case 401: +#line 1726 "./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) @@ -4550,11 +4557,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4554 "util/configparser.c" +#line 4561 "util/configparser.c" break; - case 401: -#line 1734 "./util/configparser.y" + case 402: +#line 1735 "./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) @@ -4563,11 +4570,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4567 "util/configparser.c" +#line 4574 "util/configparser.c" break; - case 402: -#line 1744 "./util/configparser.y" + case 403: +#line 1745 "./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) @@ -4576,11 +4583,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4580 "util/configparser.c" +#line 4587 "util/configparser.c" break; - case 403: -#line 1754 "./util/configparser.y" + case 404: +#line 1755 "./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) @@ -4590,11 +4597,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4594 "util/configparser.c" +#line 4601 "util/configparser.c" break; - case 404: -#line 1765 "./util/configparser.y" + case 405: +#line 1766 "./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) @@ -4602,11 +4609,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4606 "util/configparser.c" +#line 4613 "util/configparser.c" break; - case 405: -#line 1774 "./util/configparser.y" + case 406: +#line 1775 "./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) @@ -4614,11 +4621,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4618 "util/configparser.c" +#line 4625 "util/configparser.c" break; - case 406: -#line 1783 "./util/configparser.y" + case 407: +#line 1784 "./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) @@ -4626,11 +4633,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4630 "util/configparser.c" +#line 4637 "util/configparser.c" break; - case 407: -#line 1792 "./util/configparser.y" + case 408: +#line 1793 "./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) @@ -4638,11 +4645,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4642 "util/configparser.c" +#line 4649 "util/configparser.c" break; - case 408: -#line 1801 "./util/configparser.y" + case 409: +#line 1802 "./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) @@ -4650,11 +4657,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4654 "util/configparser.c" +#line 4661 "util/configparser.c" break; - case 409: -#line 1810 "./util/configparser.y" + case 410: +#line 1811 "./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) @@ -4662,11 +4669,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4666 "util/configparser.c" +#line 4673 "util/configparser.c" break; - case 410: -#line 1819 "./util/configparser.y" + case 411: +#line 1820 "./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) @@ -4678,11 +4685,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4682 "util/configparser.c" +#line 4689 "util/configparser.c" break; - case 411: -#line 1832 "./util/configparser.y" + case 412: +#line 1833 "./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) @@ -4694,11 +4701,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4698 "util/configparser.c" +#line 4705 "util/configparser.c" break; - case 412: -#line 1845 "./util/configparser.y" + case 413: +#line 1846 "./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) @@ -4706,21 +4713,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4710 "util/configparser.c" +#line 4717 "util/configparser.c" break; - case 413: -#line 1854 "./util/configparser.y" + case 414: +#line 1855 "./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 4720 "util/configparser.c" +#line 4727 "util/configparser.c" break; - case 414: -#line 1861 "./util/configparser.y" + case 415: +#line 1862 "./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) @@ -4728,11 +4735,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4732 "util/configparser.c" +#line 4739 "util/configparser.c" break; - case 415: -#line 1870 "./util/configparser.y" + case 416: +#line 1871 "./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) @@ -4740,11 +4747,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4744 "util/configparser.c" +#line 4751 "util/configparser.c" break; - case 416: -#line 1879 "./util/configparser.y" + case 417: +#line 1880 "./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) @@ -4752,11 +4759,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4756 "util/configparser.c" +#line 4763 "util/configparser.c" break; - case 417: -#line 1888 "./util/configparser.y" + case 418: +#line 1889 "./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) @@ -4765,22 +4772,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" +#line 4776 "util/configparser.c" break; - case 418: -#line 1897 "./util/configparser.y" + case 419: +#line 1898 "./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 4780 "util/configparser.c" +#line 4787 "util/configparser.c" break; - case 419: -#line 1905 "./util/configparser.y" + case 420: +#line 1906 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4792,22 +4799,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4796 "util/configparser.c" +#line 4803 "util/configparser.c" break; - case 420: -#line 1918 "./util/configparser.y" + case 421: +#line 1919 "./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 4807 "util/configparser.c" +#line 4814 "util/configparser.c" break; - case 421: -#line 1926 "./util/configparser.y" + case 422: +#line 1927 "./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 && @@ -4847,21 +4854,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4851 "util/configparser.c" +#line 4858 "util/configparser.c" break; - case 422: -#line 1967 "./util/configparser.y" + case 423: +#line 1968 "./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 4861 "util/configparser.c" +#line 4868 "util/configparser.c" break; - case 423: -#line 1974 "./util/configparser.y" + case 424: +#line 1975 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4875,11 +4882,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4879 "util/configparser.c" +#line 4886 "util/configparser.c" break; - case 424: -#line 1989 "./util/configparser.y" + case 425: +#line 1990 "./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) @@ -4888,11 +4895,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4892 "util/configparser.c" +#line 4899 "util/configparser.c" break; - case 425: -#line 1999 "./util/configparser.y" + case 426: +#line 2000 "./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) @@ -4901,41 +4908,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4905 "util/configparser.c" +#line 4912 "util/configparser.c" break; - case 426: -#line 2009 "./util/configparser.y" + case 427: +#line 2010 "./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 4915 "util/configparser.c" +#line 4922 "util/configparser.c" break; - case 427: -#line 2016 "./util/configparser.y" + case 428: +#line 2017 "./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 4925 "util/configparser.c" +#line 4932 "util/configparser.c" break; - case 428: -#line 2023 "./util/configparser.y" + case 429: +#line 2024 "./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 4935 "util/configparser.c" +#line 4942 "util/configparser.c" break; - case 429: -#line 2030 "./util/configparser.y" + case 430: +#line 2031 "./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) @@ -4943,22 +4950,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4947 "util/configparser.c" +#line 4954 "util/configparser.c" break; - case 430: -#line 2039 "./util/configparser.y" + case 431: +#line 2040 "./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 4958 "util/configparser.c" +#line 4965 "util/configparser.c" break; - case 431: -#line 2047 "./util/configparser.y" + case 432: +#line 2048 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4971,11 +4978,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4975 "util/configparser.c" +#line 4982 "util/configparser.c" break; - case 432: -#line 2061 "./util/configparser.y" + case 433: +#line 2062 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4995,11 +5002,11 @@ yyreduce: } } } -#line 4999 "util/configparser.c" +#line 5006 "util/configparser.c" break; - case 433: -#line 2082 "./util/configparser.y" + case 434: +#line 2083 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5019,11 +5026,11 @@ yyreduce: } } } -#line 5023 "util/configparser.c" +#line 5030 "util/configparser.c" break; - case 434: -#line 2103 "./util/configparser.y" + case 435: +#line 2104 "./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, @@ -5034,11 +5041,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5038 "util/configparser.c" +#line 5045 "util/configparser.c" break; - case 435: -#line 2115 "./util/configparser.y" + case 436: +#line 2116 "./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, @@ -5049,11 +5056,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5053 "util/configparser.c" +#line 5060 "util/configparser.c" break; - case 436: -#line 2127 "./util/configparser.y" + case 437: +#line 2128 "./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, @@ -5064,11 +5071,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5068 "util/configparser.c" +#line 5075 "util/configparser.c" break; - case 437: -#line 2139 "./util/configparser.y" + case 438: +#line 2140 "./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, @@ -5076,11 +5083,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5080 "util/configparser.c" +#line 5087 "util/configparser.c" break; - case 438: -#line 2148 "./util/configparser.y" + case 439: +#line 2149 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5100,11 +5107,11 @@ yyreduce: } } } -#line 5104 "util/configparser.c" +#line 5111 "util/configparser.c" break; - case 439: -#line 2169 "./util/configparser.y" + case 440: +#line 2170 "./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) @@ -5112,11 +5119,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" +#line 5123 "util/configparser.c" break; - case 440: -#line 2179 "./util/configparser.y" + case 441: +#line 2180 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5124,33 +5131,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5128 "util/configparser.c" +#line 5135 "util/configparser.c" break; - case 441: -#line 2188 "./util/configparser.y" + case 442: +#line 2189 "./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 5139 "util/configparser.c" +#line 5146 "util/configparser.c" break; - case 442: -#line 2196 "./util/configparser.y" + case 443: +#line 2197 "./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 5150 "util/configparser.c" +#line 5157 "util/configparser.c" break; - case 443: -#line 2204 "./util/configparser.y" + case 444: +#line 2205 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5162,11 +5169,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5166 "util/configparser.c" +#line 5173 "util/configparser.c" break; - case 444: -#line 2217 "./util/configparser.y" + case 445: +#line 2218 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5178,11 +5185,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5182 "util/configparser.c" +#line 5189 "util/configparser.c" break; - case 445: -#line 2230 "./util/configparser.y" + case 446: +#line 2231 "./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) { @@ -5196,11 +5203,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5200 "util/configparser.c" +#line 5207 "util/configparser.c" break; - case 446: -#line 2245 "./util/configparser.y" + case 447: +#line 2246 "./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) { @@ -5214,11 +5221,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5218 "util/configparser.c" +#line 5225 "util/configparser.c" break; - case 447: -#line 2260 "./util/configparser.y" + case 448: +#line 2261 "./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) @@ -5226,11 +5233,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5230 "util/configparser.c" +#line 5237 "util/configparser.c" break; - case 448: -#line 2269 "./util/configparser.y" + case 449: +#line 2270 "./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) @@ -5238,20 +5245,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5242 "util/configparser.c" +#line 5249 "util/configparser.c" break; - case 449: -#line 2278 "./util/configparser.y" + case 450: +#line 2279 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5251 "util/configparser.c" +#line 5258 "util/configparser.c" break; - case 450: -#line 2284 "./util/configparser.y" + case 451: +#line 2285 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5259,11 +5266,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5263 "util/configparser.c" +#line 5270 "util/configparser.c" break; - case 451: -#line 2293 "./util/configparser.y" + case 452: +#line 2294 "./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) @@ -5271,11 +5278,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5275 "util/configparser.c" +#line 5282 "util/configparser.c" break; - case 452: -#line 2302 "./util/configparser.y" + case 453: +#line 2303 "./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) @@ -5284,11 +5291,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5288 "util/configparser.c" +#line 5295 "util/configparser.c" break; - case 453: -#line 2312 "./util/configparser.y" + case 454: +#line 2313 "./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) @@ -5297,11 +5304,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5301 "util/configparser.c" +#line 5308 "util/configparser.c" break; - case 454: -#line 2322 "./util/configparser.y" + case 455: +#line 2323 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5313,11 +5320,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5317 "util/configparser.c" +#line 5324 "util/configparser.c" break; - case 455: -#line 2335 "./util/configparser.y" + case 456: +#line 2336 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5329,11 +5336,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5333 "util/configparser.c" +#line 5340 "util/configparser.c" break; - case 456: -#line 2348 "./util/configparser.y" + case 457: +#line 2349 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5344,11 +5351,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5348 "util/configparser.c" +#line 5355 "util/configparser.c" break; - case 457: -#line 2360 "./util/configparser.y" + case 458: +#line 2361 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5361,11 +5368,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5365 "util/configparser.c" +#line 5372 "util/configparser.c" break; - case 458: -#line 2374 "./util/configparser.y" + case 459: +#line 2375 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5376,11 +5383,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5380 "util/configparser.c" +#line 5387 "util/configparser.c" break; - case 459: -#line 2386 "./util/configparser.y" + case 460: +#line 2387 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5393,11 +5400,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5397 "util/configparser.c" +#line 5404 "util/configparser.c" break; - case 460: -#line 2400 "./util/configparser.y" + case 461: +#line 2401 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5406,31 +5413,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5410 "util/configparser.c" +#line 5417 "util/configparser.c" break; - case 461: -#line 2410 "./util/configparser.y" + case 462: +#line 2411 "./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 5420 "util/configparser.c" +#line 5427 "util/configparser.c" break; - case 462: -#line 2417 "./util/configparser.y" + case 463: +#line 2418 "./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 5430 "util/configparser.c" +#line 5437 "util/configparser.c" break; - case 463: -#line 2424 "./util/configparser.y" + case 464: +#line 2425 "./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) @@ -5438,11 +5445,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5442 "util/configparser.c" +#line 5449 "util/configparser.c" break; - case 464: -#line 2433 "./util/configparser.y" + case 465: +#line 2434 "./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) @@ -5450,11 +5457,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5454 "util/configparser.c" +#line 5461 "util/configparser.c" break; - case 465: -#line 2442 "./util/configparser.y" + case 466: +#line 2443 "./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) @@ -5463,11 +5470,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5467 "util/configparser.c" +#line 5474 "util/configparser.c" break; - case 466: -#line 2452 "./util/configparser.y" + case 467: +#line 2453 "./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) @@ -5476,11 +5483,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5480 "util/configparser.c" +#line 5487 "util/configparser.c" break; - case 467: -#line 2462 "./util/configparser.y" + case 468: +#line 2463 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5489,31 +5496,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5493 "util/configparser.c" +#line 5500 "util/configparser.c" break; - case 468: -#line 2472 "./util/configparser.y" + case 469: +#line 2473 "./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 5503 "util/configparser.c" +#line 5510 "util/configparser.c" break; - case 469: -#line 2479 "./util/configparser.y" + case 470: +#line 2480 "./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 5513 "util/configparser.c" +#line 5520 "util/configparser.c" break; - case 470: -#line 2486 "./util/configparser.y" + case 471: +#line 2487 "./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) @@ -5521,11 +5528,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5525 "util/configparser.c" +#line 5532 "util/configparser.c" break; - case 471: -#line 2495 "./util/configparser.y" + case 472: +#line 2496 "./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) @@ -5533,11 +5540,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5537 "util/configparser.c" +#line 5544 "util/configparser.c" break; - case 472: -#line 2504 "./util/configparser.y" + case 473: +#line 2505 "./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) @@ -5546,11 +5553,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5550 "util/configparser.c" +#line 5557 "util/configparser.c" break; - case 473: -#line 2514 "./util/configparser.y" + case 474: +#line 2515 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5559,52 +5566,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5563 "util/configparser.c" +#line 5570 "util/configparser.c" break; - case 474: -#line 2524 "./util/configparser.y" + case 475: +#line 2525 "./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 5573 "util/configparser.c" +#line 5580 "util/configparser.c" break; - case 475: -#line 2531 "./util/configparser.y" + case 476: +#line 2532 "./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 5583 "util/configparser.c" +#line 5590 "util/configparser.c" break; - case 476: -#line 2538 "./util/configparser.y" + case 477: +#line 2539 "./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 5593 "util/configparser.c" +#line 5600 "util/configparser.c" break; - case 477: -#line 2545 "./util/configparser.y" + case 478: +#line 2546 "./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 5604 "util/configparser.c" +#line 5611 "util/configparser.c" break; - case 478: -#line 2553 "./util/configparser.y" + case 479: +#line 2554 "./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) @@ -5613,11 +5620,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5617 "util/configparser.c" +#line 5624 "util/configparser.c" break; - case 479: -#line 2563 "./util/configparser.y" + case 480: +#line 2564 "./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) @@ -5626,11 +5633,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5630 "util/configparser.c" +#line 5637 "util/configparser.c" break; - case 480: -#line 2573 "./util/configparser.y" + case 481: +#line 2574 "./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) @@ -5639,11 +5646,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5643 "util/configparser.c" +#line 5650 "util/configparser.c" break; - case 481: -#line 2583 "./util/configparser.y" + case 482: +#line 2584 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5652,11 +5659,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5656 "util/configparser.c" +#line 5663 "util/configparser.c" break; - case 482: -#line 2593 "./util/configparser.y" + case 483: +#line 2594 "./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 && @@ -5694,11 +5701,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5698 "util/configparser.c" +#line 5705 "util/configparser.c" break; - case 483: -#line 2632 "./util/configparser.y" + case 484: +#line 2633 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5707,33 +5714,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5711 "util/configparser.c" +#line 5718 "util/configparser.c" break; - case 484: -#line 2642 "./util/configparser.y" + case 485: +#line 2643 "./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 5722 "util/configparser.c" +#line 5729 "util/configparser.c" break; - case 485: -#line 2650 "./util/configparser.y" + case 486: +#line 2651 "./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 5733 "util/configparser.c" +#line 5740 "util/configparser.c" break; - case 486: -#line 2658 "./util/configparser.y" + case 487: +#line 2659 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5747,11 +5754,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5751 "util/configparser.c" +#line 5758 "util/configparser.c" break; - case 487: -#line 2673 "./util/configparser.y" + case 488: +#line 2674 "./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) @@ -5759,19 +5766,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5763 "util/configparser.c" +#line 5770 "util/configparser.c" break; - case 488: -#line 2682 "./util/configparser.y" + case 489: +#line 2683 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5771 "util/configparser.c" +#line 5778 "util/configparser.c" break; - case 499: -#line 2693 "./util/configparser.y" + case 500: +#line 2694 "./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) @@ -5780,11 +5787,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5784 "util/configparser.c" +#line 5791 "util/configparser.c" break; - case 500: -#line 2703 "./util/configparser.y" + case 501: +#line 2704 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5792,79 +5799,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5796 "util/configparser.c" +#line 5803 "util/configparser.c" break; - case 501: -#line 2712 "./util/configparser.y" + case 502: +#line 2713 "./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 5806 "util/configparser.c" +#line 5813 "util/configparser.c" break; - case 502: -#line 2719 "./util/configparser.y" + case 503: +#line 2720 "./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 5816 "util/configparser.c" +#line 5823 "util/configparser.c" break; - case 503: -#line 2726 "./util/configparser.y" + case 504: +#line 2727 "./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 5826 "util/configparser.c" +#line 5833 "util/configparser.c" break; - case 504: -#line 2733 "./util/configparser.y" + case 505: +#line 2734 "./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 5836 "util/configparser.c" +#line 5843 "util/configparser.c" break; - case 505: -#line 2740 "./util/configparser.y" + case 506: +#line 2741 "./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 5846 "util/configparser.c" +#line 5853 "util/configparser.c" break; - case 506: -#line 2747 "./util/configparser.y" + case 507: +#line 2748 "./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 5856 "util/configparser.c" +#line 5863 "util/configparser.c" break; - case 507: -#line 2754 "./util/configparser.y" + case 508: +#line 2755 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5864 "util/configparser.c" +#line 5871 "util/configparser.c" break; - case 528: -#line 2774 "./util/configparser.y" + case 529: +#line 2775 "./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) @@ -5872,31 +5879,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5876 "util/configparser.c" +#line 5883 "util/configparser.c" break; - case 529: -#line 2783 "./util/configparser.y" + case 530: +#line 2784 "./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 5886 "util/configparser.c" +#line 5893 "util/configparser.c" break; - case 530: -#line 2790 "./util/configparser.y" + case 531: +#line 2791 "./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 5896 "util/configparser.c" +#line 5903 "util/configparser.c" break; - case 531: -#line 2797 "./util/configparser.y" + case 532: +#line 2798 "./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) @@ -5904,51 +5911,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5908 "util/configparser.c" +#line 5915 "util/configparser.c" break; - case 532: -#line 2806 "./util/configparser.y" + case 533: +#line 2807 "./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 5918 "util/configparser.c" +#line 5925 "util/configparser.c" break; - case 533: -#line 2813 "./util/configparser.y" + case 534: +#line 2814 "./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 5928 "util/configparser.c" +#line 5935 "util/configparser.c" break; - case 534: -#line 2820 "./util/configparser.y" + case 535: +#line 2821 "./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 5938 "util/configparser.c" +#line 5945 "util/configparser.c" break; - case 535: -#line 2827 "./util/configparser.y" + case 536: +#line 2828 "./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 5948 "util/configparser.c" +#line 5955 "util/configparser.c" break; - case 536: -#line 2834 "./util/configparser.y" + case 537: +#line 2835 "./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) @@ -5956,11 +5963,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5960 "util/configparser.c" +#line 5967 "util/configparser.c" break; - case 537: -#line 2843 "./util/configparser.y" + case 538: +#line 2844 "./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) @@ -5968,31 +5975,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5972 "util/configparser.c" +#line 5979 "util/configparser.c" break; - case 538: -#line 2852 "./util/configparser.y" + case 539: +#line 2853 "./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 5982 "util/configparser.c" +#line 5989 "util/configparser.c" break; - case 539: -#line 2859 "./util/configparser.y" + case 540: +#line 2860 "./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 5992 "util/configparser.c" +#line 5999 "util/configparser.c" break; - case 540: -#line 2866 "./util/configparser.y" + case 541: +#line 2867 "./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) @@ -6001,11 +6008,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6005 "util/configparser.c" +#line 6012 "util/configparser.c" break; - case 541: -#line 2876 "./util/configparser.y" + case 542: +#line 2877 "./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) @@ -6014,11 +6021,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6018 "util/configparser.c" +#line 6025 "util/configparser.c" break; - case 542: -#line 2886 "./util/configparser.y" + case 543: +#line 2887 "./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) @@ -6027,11 +6034,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6031 "util/configparser.c" +#line 6038 "util/configparser.c" break; - case 543: -#line 2896 "./util/configparser.y" + case 544: +#line 2897 "./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) @@ -6040,11 +6047,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6044 "util/configparser.c" +#line 6051 "util/configparser.c" break; - case 544: -#line 2906 "./util/configparser.y" + case 545: +#line 2907 "./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) @@ -6053,11 +6060,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6057 "util/configparser.c" +#line 6064 "util/configparser.c" break; - case 545: -#line 2916 "./util/configparser.y" + case 546: +#line 2917 "./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) @@ -6066,29 +6073,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6070 "util/configparser.c" +#line 6077 "util/configparser.c" break; - case 546: -#line 2926 "./util/configparser.y" + case 547: +#line 2927 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6078 "util/configparser.c" +#line 6085 "util/configparser.c" break; - case 550: -#line 2935 "./util/configparser.y" + case 551: +#line 2936 "./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 6088 "util/configparser.c" +#line 6095 "util/configparser.c" break; - case 551: -#line 2941 "./util/configparser.y" + case 552: +#line 2942 "./util/configparser.y" + { + OUTYY(("\nP(dynlib:)\n")); + } +#line 6103 "util/configparser.c" + break; + + case 556: +#line 2951 "./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 6113 "util/configparser.c" + break; + + case 557: +#line 2957 "./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) @@ -6097,21 +6122,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6101 "util/configparser.c" +#line 6126 "util/configparser.c" break; - case 552: -#line 2951 "./util/configparser.y" + case 558: +#line 2967 "./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 6111 "util/configparser.c" +#line 6136 "util/configparser.c" break; - case 553: -#line 2958 "./util/configparser.y" + case 559: +#line 2974 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6119,30 +6144,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6123 "util/configparser.c" +#line 6148 "util/configparser.c" break; - case 554: -#line 2967 "./util/configparser.y" + case 560: +#line 2983 "./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 6134 "util/configparser.c" +#line 6159 "util/configparser.c" break; - case 555: -#line 2975 "./util/configparser.y" + case 561: +#line 2991 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6142 "util/configparser.c" +#line 6167 "util/configparser.c" break; - case 568: -#line 2991 "./util/configparser.y" + case 574: +#line 3007 "./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) @@ -6150,11 +6175,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6154 "util/configparser.c" +#line 6179 "util/configparser.c" break; - case 569: -#line 3001 "./util/configparser.y" + case 575: +#line 3017 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6162,21 +6187,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6166 "util/configparser.c" +#line 6191 "util/configparser.c" break; - case 570: -#line 3010 "./util/configparser.y" + case 576: +#line 3026 "./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 6176 "util/configparser.c" +#line 6201 "util/configparser.c" break; - case 571: -#line 3017 "./util/configparser.y" + case 577: +#line 3033 "./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))) @@ -6184,21 +6209,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6188 "util/configparser.c" +#line 6213 "util/configparser.c" break; - case 572: -#line 3026 "./util/configparser.y" + case 578: +#line 3042 "./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 6198 "util/configparser.c" +#line 6223 "util/configparser.c" break; - case 573: -#line 3033 "./util/configparser.y" + case 579: +#line 3049 "./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))) @@ -6206,22 +6231,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6210 "util/configparser.c" +#line 6235 "util/configparser.c" break; - case 574: -#line 3042 "./util/configparser.y" + case 580: +#line 3058 "./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 6221 "util/configparser.c" +#line 6246 "util/configparser.c" break; - case 575: -#line 3050 "./util/configparser.y" + case 581: +#line 3066 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6233,22 +6258,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6237 "util/configparser.c" +#line 6262 "util/configparser.c" break; - case 576: -#line 3063 "./util/configparser.y" + case 582: +#line 3079 "./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 6248 "util/configparser.c" +#line 6273 "util/configparser.c" break; - case 577: -#line 3071 "./util/configparser.y" + case 583: +#line 3087 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6260,19 +6285,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6264 "util/configparser.c" +#line 6289 "util/configparser.c" break; - case 578: -#line 3084 "./util/configparser.y" + case 584: +#line 3100 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6272 "util/configparser.c" +#line 6297 "util/configparser.c" break; - case 587: -#line 3095 "./util/configparser.y" + case 593: +#line 3111 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6283,11 +6308,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6287 "util/configparser.c" +#line 6312 "util/configparser.c" break; - case 588: -#line 3107 "./util/configparser.y" + case 594: +#line 3123 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6298,11 +6323,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6302 "util/configparser.c" +#line 6327 "util/configparser.c" break; - case 589: -#line 3119 "./util/configparser.y" + case 595: +#line 3135 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6313,11 +6338,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6317 "util/configparser.c" +#line 6342 "util/configparser.c" break; - case 590: -#line 3131 "./util/configparser.y" + case 596: +#line 3147 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6331,11 +6356,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6335 "util/configparser.c" +#line 6360 "util/configparser.c" break; - case 591: -#line 3146 "./util/configparser.y" + case 597: +#line 3162 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6347,11 +6372,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6351 "util/configparser.c" +#line 6376 "util/configparser.c" break; - case 592: -#line 3159 "./util/configparser.y" + case 598: +#line 3175 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6363,11 +6388,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6367 "util/configparser.c" +#line 6392 "util/configparser.c" break; - case 593: -#line 3172 "./util/configparser.y" + case 599: +#line 3188 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6377,19 +6402,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6381 "util/configparser.c" +#line 6406 "util/configparser.c" break; - case 594: -#line 3183 "./util/configparser.y" + case 600: +#line 3199 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6389 "util/configparser.c" +#line 6414 "util/configparser.c" break; - case 599: -#line 3192 "./util/configparser.y" + case 605: +#line 3208 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6403,11 +6428,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6407 "util/configparser.c" +#line 6432 "util/configparser.c" break; - case 600: -#line 3207 "./util/configparser.y" + case 606: +#line 3223 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6421,11 +6446,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6425 "util/configparser.c" +#line 6450 "util/configparser.c" break; -#line 6429 "util/configparser.c" +#line 6454 "util/configparser.c" default: break; } @@ -6657,7 +6682,7 @@ yyreturn: #endif return yyresult; } -#line 3221 "./util/configparser.y" +#line 3237 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 184810a2a..66662409e 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -333,7 +333,9 @@ extern int yydebug; VAR_RPZ_ACTION_OVERRIDE = 539, VAR_RPZ_CNAME_OVERRIDE = 540, VAR_RPZ_LOG = 541, - VAR_RPZ_LOG_NAME = 542 + VAR_RPZ_LOG_NAME = 542, + VAR_DYNLIB = 543, + VAR_DYNLIB_FILE = 544 }; #endif /* Tokens. */ @@ -622,6 +624,8 @@ extern int yydebug; #define VAR_RPZ_CNAME_OVERRIDE 540 #define VAR_RPZ_LOG 541 #define VAR_RPZ_LOG_NAME 542 +#define VAR_DYNLIB 543 +#define VAR_DYNLIB_FILE 544 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -631,7 +635,7 @@ union YYSTYPE char* str; -#line 635 "util/configparser.h" +#line 639 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; From 510e79a053d1eee94bf0548deff23b107236d82b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 15 May 2020 16:42:45 +0200 Subject: [PATCH 226/235] - For PR #93: Fix warnings for dynlibmodule. --- doc/Changelog | 1 + dynlibmod/dynlibmod.c | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index fbbe22641..86246ad6e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. - Fixed conflicts for PR #93 and make configure, yacc, lex. + - For PR #93: Fix warnings for dynlibmodule. 15 May 2020: Ralph - Cache ECS answers with longest scope of CNAME chain. diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 5a93a7ce5..4e022a82f 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -81,7 +81,13 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); + __DYNSYM initializer; + __DYNSYM deinitializer; + __DYNSYM operate; + __DYNSYM inform; + __DYNSYM clear; + __DYNSYM get_mem; + initializer = __LOADSYM(dynamic_library,"init"); if (initializer == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -89,7 +95,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_init = (func_init_t) initializer; } - __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); + deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -97,7 +103,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_deinit = (func_deinit_t) deinitializer; } - __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); + operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -105,7 +111,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_operate = (func_operate_t) operate; } - __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); + inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -113,7 +119,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_inform = (func_inform_t) inform; } - __DYNSYM clear = __LOADSYM(dynamic_library,"clear"); + clear = __LOADSYM(dynamic_library,"clear"); if (clear == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -121,7 +127,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_clear = (func_clear_t) clear; } - __DYNSYM get_mem = __LOADSYM(dynamic_library,"get_mem"); + get_mem = __LOADSYM(dynamic_library,"get_mem"); if (get_mem == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -171,11 +177,12 @@ void dynlibmod_clear(struct module_qstate* qstate, int id) { /** dynlib module alloc size routine */ size_t dynlibmod_get_mem(struct module_env* env, int id) { struct dynlibmod_env* de = (struct dynlibmod_env*)env->modinfo[id]; + size_t size; verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); if(!de) return 0; - size_t size = de->func_get_mem(env, id); + size = de->func_get_mem(env, id); return size + sizeof(*de); } @@ -185,7 +192,7 @@ int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, struct comm_reply* repinfo, struct regional* region, int id, void* callback) { struct cb_pair* cb_pair = (struct cb_pair*) callback; - ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); + return ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); } int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, @@ -193,19 +200,19 @@ int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, int id, void* callback) { struct cb_pair* cb_pair = (struct cb_pair*) callback; - ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); + return ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); } int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, int id, void* cb_args) { struct cb_pair* cb_pair = (struct cb_pair*) cb_args; - ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); + return ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); } int dynlib_inplace_cb_query_response(struct module_qstate* qstate, struct dns_msg* response, int id, void* cb_args) { struct cb_pair* cb_pair = (struct cb_pair*) cb_args; - ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); + return ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); } int From 01db6c365c1845f9f6370ce5a7ad066f40b00c52 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:11:16 +0200 Subject: [PATCH 227/235] - For PR #93: dynlibmod can handle reloads and deinit and inits again, with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. --- doc/Changelog | 6 +++++ dynlibmod/dynlibmod.c | 19 +++++++++++++- dynlibmod/dynlibmod.h | 2 ++ smallapp/unbound-checkconf.c | 48 ++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 86246ad6e..637b31368 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +18 May 2020: Wouter + - For PR #93: dynlibmod can handle reloads and deinit and inits again, + with dlclose and dlopen of the library again. Also for multiple + modules. Fix memory leak by not closing dlopened content. Fix + to allow one dynlibmod instance by unbound-checkconf. + 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. - Fixed conflicts for PR #93 and make configure, yacc, lex. diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 4e022a82f..6ae23e86c 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -34,6 +34,11 @@ void log_dlerror() { HMODULE open_library(const char* fname) { return LoadLibrary(fname); } + +void close_library(const char* fname, __DYNMOD handle) { + (void)fname; + (void)handle; +} #else #include #define __DYNMOD void* @@ -46,11 +51,20 @@ void log_dlerror() { void* open_library(const char* fname) { return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); } + +void close_library(const char* fname, __DYNMOD handle) { + if(!handle) return; + if(dlclose(handle) != 0) { + log_err("dlclose %s: %s", fname, strerror(errno)); + } +} #endif +/** module counter for multiple dynlib modules */ +static int dynlib_mod_count = 0; + /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { - static int dynlib_mod_count; int dynlib_mod_idx = dynlib_mod_count++; struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); @@ -76,6 +90,7 @@ int dynlibmod_init(struct module_env* env, int id) { } verbose(VERB_ALGO, "dynlibmod[%d]: Trying to load library %s", dynlib_mod_idx, de->fname); dynamic_library = open_library(de->fname); + de->dynamic_library = (void*)dynamic_library; if (dynamic_library == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -147,6 +162,8 @@ void dynlibmod_deinit(struct module_env* env, int id) { if(de == NULL) return; de->func_deinit(env, id); + close_library(de->fname, (__DYNMOD)de->dynamic_library); + dynlib_mod_count--; de->fname = NULL; free(de); } diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index 1097db1e7..c34cf0e88 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -114,6 +114,8 @@ typedef int (*inplace_cb_register_wrapped_t)(void*, enum inplace_cb_list_type, v struct dynlibmod_env { /** Dynamic library filename. */ const char* fname; + /** dynamic library handle */ + void* dynamic_library; /** Module init function */ func_init_t func_init; /** Module deinit function */ diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 3fc638cae..77c558981 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -569,6 +569,54 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "python dns64 iterator") != 0 && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0 #endif +#ifdef WITH_DYNLIBMODULE + && strcmp(cfg->module_conf, "dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 + && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 + && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dns64 validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "validator cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip validator cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "validator dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "respip validator dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod respip iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib respip iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod respip validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib respip validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator dynlib iterator") != 0 +#endif #ifdef USE_CACHEDB && strcmp(cfg->module_conf, "validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator cachedb iterator") != 0 From 84e95d6c6825191ea920485f53d3611d2c279e82 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:16:40 +0200 Subject: [PATCH 228/235] - For PR #93: checkconf allow multiple dynlib in module-config, for a couple cases. --- doc/Changelog | 2 ++ smallapp/unbound-checkconf.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 637b31368..f16e6d63d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,8 @@ with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. + - For PR #93: checkconf allow multiple dynlib in module-config, for + a couple cases. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 77c558981..97cacc012 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -571,8 +571,12 @@ morechecks(struct config_file* cfg) #endif #ifdef WITH_DYNLIBMODULE && strcmp(cfg->module_conf, "dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 From a77ebed5504a8815795bed406d8a68adf8d99a57 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:18:28 +0200 Subject: [PATCH 229/235] - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. --- doc/Changelog | 4 +++- smallapp/unbound-checkconf.c | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index f16e6d63d..5413eb7fa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,7 +3,9 @@ with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. - - For PR #93: checkconf allow multiple dynlib in module-config, for + - For PR #93: checkconf allows multiple dynlib in module-config, for + a couple cases. + - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. 15 May 2020: Wouter diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 97cacc012..54a0ab78c 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -573,10 +573,16 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 From a238f35d7d87cb88906077733e04cbfe094cba76 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:22:00 +0200 Subject: [PATCH 230/235] - For PR #93: man page spelling reference fix. --- doc/Changelog | 1 + doc/unbound.conf.5.in | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 5413eb7fa..31ce01dea 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,7 @@ a couple cases. - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. + - For PR #93: man page spelling reference fix. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 03305ddd4..2f2733773 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1836,7 +1836,7 @@ added to the \fBmodule\-config:\fR option. .LP The .B dynlib: -clause gives the settings for the \fIdynlib\fR(1) module. This module is only +clause gives the settings for the \fIdynlib\fR module. This module is only a very small wrapper that allows dynamic modules to be loaded on runtime instead of being compiled into the application. To enable the dynlib module it has to be compiled into the daemon, and the word "dynlib" has to be put in the From 4ccac696caf8826995c9db78af6074a5a1381f00 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 17:26:01 +0200 Subject: [PATCH 231/235] - For PR #93: fix link of other executables for dynlibmod dependency. --- Makefile.in | 22 +++++++++++----------- doc/Changelog | 1 + 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Makefile.in b/Makefile.in index 029b4d3b3..bac212df2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -343,10 +343,10 @@ unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) @@ -364,34 +364,34 @@ anchor-update$(EXEEXT): $(ANCHORUPD_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ANCHORUPD_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) unittest$(EXEEXT): $(UNITTEST_OBJ_LINK) - $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) testbound$(EXEEXT): $(TESTBOUND_OBJ_LINK) - $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ_LINK) - $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) petal$(EXEEXT): $(PETAL_OBJ_LINK) $(LINK) -o $@ $(PETAL_OBJ_LINK) $(SSLLIB) $(LIBS) pktview$(EXEEXT): $(PKTVIEW_OBJ_LINK) - $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK) - $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) - $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) perf$(EXEEXT): $(PERF_OBJ_LINK) - $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) delayer$(EXEEXT): $(DELAYER_OBJ_LINK) - $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) signit$(EXEEXT): testcode/signit.c $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ -o $@ testcode/signit.c $(LDFLAGS) -lldns $(SSLLIB) $(LIBS) @@ -414,7 +414,7 @@ dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) - $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h diff --git a/doc/Changelog b/doc/Changelog index 31ce01dea..91e69e3f4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -8,6 +8,7 @@ - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. - For PR #93: man page spelling reference fix. + - For PR #93: fix link of other executables for dynlibmod dependency. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. From ba0f382eee814e56900a535778d13206b86b6d49 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 10:27:27 +0200 Subject: [PATCH 232/235] - CVE-2020-12662 Unbound can be tricked into amplifying an incoming query into a large number of queries directed to a target. - CVE-2020-12663 Malformed answers from upstream name servers can be used to make Unbound unresponsive. --- doc/Changelog | 6 ++ iterator/iter_delegpt.c | 51 ++++++++------ iterator/iter_delegpt.h | 28 ++++++-- iterator/iter_scrub.c | 24 +++++-- iterator/iter_utils.c | 4 +- iterator/iterator.c | 153 ++++++++++++++++++++++++++++++++-------- iterator/iterator.h | 12 +++- services/cache/dns.c | 10 +-- util/data/dname.c | 30 ++++++++ util/data/msgparse.c | 6 +- 10 files changed, 252 insertions(+), 72 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 91e69e3f4..223b13b90 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +19 May 2020: Wouter + - CVE-2020-12662 Unbound can be tricked into amplifying an incoming + query into a large number of queries directed to a target. + - CVE-2020-12663 Malformed answers from upstream name servers can be + used to make Unbound unresponsive. + 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, with dlclose and dlopen of the library again. Also for multiple diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c index f88b3e115..9a672b0af 100644 --- a/iterator/iter_delegpt.c +++ b/iterator/iter_delegpt.c @@ -84,7 +84,7 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) } for(a = dp->target_list; a; a = a->next_target) { if(!delegpt_add_addr(copy, region, &a->addr, a->addrlen, - a->bogus, a->lame, a->tls_auth_name)) + a->bogus, a->lame, a->tls_auth_name, NULL)) return NULL; } return copy; @@ -161,7 +161,7 @@ delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, int delegpt_add_target(struct delegpt* dp, struct regional* region, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame) + socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions) { struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen); log_assert(!dp->dp_type_mlc); @@ -176,13 +176,14 @@ delegpt_add_target(struct delegpt* dp, struct regional* region, if(ns->got4 && ns->got6) ns->resolved = 1; } - return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL); + return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL, + additions); } int delegpt_add_addr(struct delegpt* dp, struct regional* region, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, - uint8_t lame, char* tls_auth_name) + uint8_t lame, char* tls_auth_name, int* additions) { struct delegpt_addr* a; log_assert(!dp->dp_type_mlc); @@ -194,6 +195,8 @@ delegpt_add_addr(struct delegpt* dp, struct regional* region, a->lame = 0; return 1; } + if(additions) + *additions = 1; a = (struct delegpt_addr*)regional_alloc(region, sizeof(struct delegpt_addr)); @@ -382,10 +385,10 @@ delegpt_from_message(struct dns_msg* msg, struct regional* region) continue; if(ntohs(s->rk.type) == LDNS_RR_TYPE_A) { - if(!delegpt_add_rrset_A(dp, region, s, 0)) + if(!delegpt_add_rrset_A(dp, region, s, 0, NULL)) return NULL; } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_AAAA) { - if(!delegpt_add_rrset_AAAA(dp, region, s, 0)) + if(!delegpt_add_rrset_AAAA(dp, region, s, 0, NULL)) return NULL; } } @@ -416,7 +419,7 @@ delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region, int delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* ak, uint8_t lame) + struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; @@ -432,7 +435,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, memmove(&sa.sin_addr, d->rr_data[i]+2, INET_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, - len, (d->security==sec_status_bogus), lame)) + len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; @@ -440,7 +443,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* ak, uint8_t lame) + struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; @@ -456,7 +459,7 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, memmove(&sa.sin6_addr, d->rr_data[i]+2, INET6_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, - len, (d->security==sec_status_bogus), lame)) + len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; @@ -464,20 +467,33 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, int delegpt_add_rrset(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* rrset, uint8_t lame) + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions) { if(!rrset) return 1; if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NS) return delegpt_rrset_add_ns(dp, region, rrset, lame); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A) - return delegpt_add_rrset_A(dp, region, rrset, lame); + return delegpt_add_rrset_A(dp, region, rrset, lame, additions); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA) - return delegpt_add_rrset_AAAA(dp, region, rrset, lame); + return delegpt_add_rrset_AAAA(dp, region, rrset, lame, + additions); log_warn("Unknown rrset type added to delegpt"); return 1; } +void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype) +{ + if(ns) { + if(qtype == LDNS_RR_TYPE_A) + ns->got4 = 2; + else if(qtype == LDNS_RR_TYPE_AAAA) + ns->got6 = 2; + if(ns->got4 && ns->got6) + ns->resolved = 1; + } +} + void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) { struct reply_info* rep = (struct reply_info*)msg->entry.data; @@ -487,14 +503,7 @@ void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) if(FLAGS_GET_RCODE(rep->flags) != 0 || rep->an_numrrsets == 0) { struct delegpt_ns* ns = delegpt_find_ns(dp, msg->key.qname, msg->key.qname_len); - if(ns) { - if(msg->key.qtype == LDNS_RR_TYPE_A) - ns->got4 = 1; - else if(msg->key.qtype == LDNS_RR_TYPE_AAAA) - ns->got6 = 1; - if(ns->got4 && ns->got6) - ns->resolved = 1; - } + delegpt_mark_neg(ns, msg->key.qtype); } } diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h index 6c0882645..138eb6e1b 100644 --- a/iterator/iter_delegpt.h +++ b/iterator/iter_delegpt.h @@ -106,9 +106,10 @@ struct delegpt_ns { * and marked true if got4 and got6 are both true. */ int resolved; - /** if the ipv4 address is in the delegpt */ + /** if the ipv4 address is in the delegpt, 0=not, 1=yes 2=negative, + * negative means it was done, but no content. */ uint8_t got4; - /** if the ipv6 address is in the delegpt */ + /** if the ipv6 address is in the delegpt, 0=not, 1=yes 2=negative */ uint8_t got6; /** * If the name is parent-side only and thus dispreferred. @@ -215,11 +216,12 @@ int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional, * @param addrlen: the length of addr. * @param bogus: security status for the address, pass true if bogus. * @param lame: address is lame. + * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_target(struct delegpt* dp, struct regional* regional, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame); + socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions); /** * Add A RRset to delegpt. @@ -227,10 +229,11 @@ int delegpt_add_target(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset A to add. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add AAAA RRset to delegpt. @@ -238,10 +241,11 @@ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset AAAA to add. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add any RRset to delegpt. @@ -250,10 +254,11 @@ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset to add, NS, A, AAAA. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add address to the delegation point. No servername is associated or checked. @@ -264,11 +269,12 @@ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). + * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_addr(struct delegpt* dp, struct regional* regional, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t bogus, uint8_t lame, char* tls_auth_name); + uint8_t bogus, uint8_t lame, char* tls_auth_name, int* additions); /** * Find NS record in name list of delegation point. @@ -341,6 +347,14 @@ size_t delegpt_count_targets(struct delegpt* dp); struct delegpt* delegpt_from_message(struct dns_msg* msg, struct regional* regional); +/** + * Mark negative return in delegation point for specific nameserver. + * sets the got4 or got6 to negative, updates the ns->resolved. + * @param ns: the nameserver in the delegpt. + * @param qtype: A or AAAA (host order). + */ +void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype); + /** * Add negative message to delegation point. * @param dp: delegation point. diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index cceec3d56..aae934dd4 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -185,8 +185,9 @@ mark_additional_rrset(sldns_buffer* pkt, struct msg_parse* msg, /** Get target name of a CNAME */ static int parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, - size_t* snamelen) + size_t* snamelen, sldns_buffer* pkt) { + size_t oldpos, dlen; if(rrset->rr_count != 1) { struct rr_parse* sig; verbose(VERB_ALGO, "Found CNAME rrset with " @@ -204,6 +205,19 @@ parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, *sname = rrset->rr_first->ttl_data + sizeof(uint32_t) + sizeof(uint16_t); /* skip ttl, rdatalen */ *snamelen = rrset->rr_first->size - sizeof(uint16_t); + + if(rrset->rr_first->outside_packet) { + if(!dname_valid(*sname, *snamelen)) + return 0; + return 1; + } + oldpos = sldns_buffer_position(pkt); + sldns_buffer_set_position(pkt, (size_t)(*sname - sldns_buffer_begin(pkt))); + dlen = pkt_dname_len(pkt); + sldns_buffer_set_position(pkt, oldpos); + if(dlen == 0) + return 0; /* parse fail on the rdata name */ + *snamelen = dlen; return 1; } @@ -215,7 +229,7 @@ synth_cname(uint8_t* qname, size_t qnamelen, struct rrset_parse* dname_rrset, /* we already know that sname is a strict subdomain of DNAME owner */ uint8_t* dtarg = NULL; size_t dtarglen; - if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen)) + if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen, pkt)) return 0; if(qnamelen <= dname_rrset->dname_len) return 0; @@ -388,7 +402,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, /* check next cname */ uint8_t* t = NULL; size_t tlen = 0; - if(!parse_get_cname_target(nx, &t, &tlen)) + if(!parse_get_cname_target(nx, &t, &tlen, pkt)) return 0; if(dname_pkt_compare(pkt, alias, t) == 0) { /* it's OK and better capitalized */ @@ -439,7 +453,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, size_t tlen = 0; if(synth_cname(sname, snamelen, nx, alias, &aliaslen, pkt) && - parse_get_cname_target(rrset, &t, &tlen) && + parse_get_cname_target(rrset, &t, &tlen, pkt) && dname_pkt_compare(pkt, alias, t) == 0) { /* the synthesized CNAME equals the * current CNAME. This CNAME is the @@ -460,7 +474,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, } /* move to next name in CNAME chain */ - if(!parse_get_cname_target(rrset, &sname, &snamelen)) + if(!parse_get_cname_target(rrset, &sname, &snamelen, pkt)) return 0; prev = rrset; rrset = rrset->rrset_all_next; diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index c726ba6b3..7bc67da69 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -1199,7 +1199,7 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside4 = 1; /* a negative-cache-element has no addresses it adds */ - if(!delegpt_add_rrset_A(dp, region, akey, 1)) + if(!delegpt_add_rrset_A(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } @@ -1211,7 +1211,7 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside6 = 1; /* a negative-cache-element has no addresses it adds */ - if(!delegpt_add_rrset_AAAA(dp, region, akey, 1)) + if(!delegpt_add_rrset_AAAA(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } diff --git a/iterator/iterator.c b/iterator/iterator.c index eea2f2fb2..23b07ea90 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -72,6 +72,8 @@ /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; +static void target_count_increase_nx(struct iter_qstate* iq, int num); + int iter_init(struct module_env* env, int id) { @@ -150,6 +152,7 @@ iter_new(struct module_qstate* qstate, int id) iq->sent_count = 0; iq->ratelimit_ok = 0; iq->target_count = NULL; + iq->dp_target_count = 0; iq->wait_priming_stub = 0; iq->refetch_glue = 0; iq->dnssec_expected = 0; @@ -221,6 +224,7 @@ final_state(struct iter_qstate* iq) static void error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) { + struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* super_iq = (struct iter_qstate*)super->minfo[id]; if(qstate->qinfo.qtype == LDNS_RR_TYPE_A || @@ -246,7 +250,11 @@ error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) super->region, super_iq->dp)) log_err("out of memory adding missing"); } + delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* mark as failed */ + if((dpns->got4 == 2 || !ie->supports_ipv4) && + (dpns->got6 == 2 || !ie->supports_ipv6)) + target_count_increase_nx(super_iq, 1); } if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS) { /* prime failed to get delegation */ @@ -621,7 +629,7 @@ static void target_count_create(struct iter_qstate* iq) { if(!iq->target_count) { - iq->target_count = (int*)calloc(2, sizeof(int)); + iq->target_count = (int*)calloc(3, sizeof(int)); /* if calloc fails we simply do not track this number */ if(iq->target_count) iq->target_count[0] = 1; @@ -634,6 +642,15 @@ target_count_increase(struct iter_qstate* iq, int num) target_count_create(iq); if(iq->target_count) iq->target_count[1] += num; + iq->dp_target_count++; +} + +static void +target_count_increase_nx(struct iter_qstate* iq, int num) +{ + target_count_create(iq); + if(iq->target_count) + iq->target_count[2] += num; } /** @@ -656,13 +673,15 @@ target_count_increase(struct iter_qstate* iq, int num) * @param subq_ret: if newly allocated, the subquerystate, or NULL if it does * not need initialisation. * @param v: if true, validation is done on the subquery. + * @param detached: true if this qstate should not attach to the subquery * @return false on error (malloc). */ static int generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct module_qstate* qstate, int id, struct iter_qstate* iq, enum iter_state initial_state, - enum iter_state finalstate, struct module_qstate** subq_ret, int v) + enum iter_state finalstate, struct module_qstate** subq_ret, int v, + int detached) { struct module_qstate* subq = NULL; struct iter_qstate* subiq = NULL; @@ -689,11 +708,23 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, valrec = 1; } - /* attach subquery, lookup existing or make a new one */ - fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); - if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, valrec, - &subq)) { - return 0; + if(detached) { + struct mesh_state* sub = NULL; + fptr_ok(fptr_whitelist_modenv_add_sub( + qstate->env->add_sub)); + if(!(*qstate->env->add_sub)(qstate, &qinf, + qflags, prime, valrec, &subq, &sub)){ + return 0; + } + } + else { + /* attach subquery, lookup existing or make a new one */ + fptr_ok(fptr_whitelist_modenv_attach_sub( + qstate->env->attach_sub)); + if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, + valrec, &subq)) { + return 0; + } } *subq_ret = subq; if(subq) { @@ -716,6 +747,7 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, subiq->target_count = iq->target_count; if(iq->target_count) iq->target_count[0] ++; /* extra reference */ + subiq->dp_target_count = 0; subiq->num_current_queries = 0; subiq->depth = iq->depth+1; outbound_list_init(&subiq->outlist); @@ -759,7 +791,7 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, * the normal INIT state logic (which would cause an infloop). */ if(!generate_sub_request((uint8_t*)"\000", 1, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, - &subq, 0)) { + &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime root"); return 0; } @@ -850,7 +882,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, * redundant INIT state processing. */ if(!generate_sub_request(stub_dp->name, stub_dp->namelen, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, - QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0)) { + QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime stub"); errinf(qstate, "could not generate lookup for stub prime"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); @@ -1025,7 +1057,7 @@ generate_a_aaaa_check(struct module_qstate* qstate, struct iter_qstate* iq, if(!generate_sub_request(s->rk.dname, s->rk.dname_len, ntohs(s->rk.type), ntohs(s->rk.rrset_class), qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate addr check"); return; } @@ -1069,7 +1101,7 @@ generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) iq->dp->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate ns check"); return; } @@ -1126,7 +1158,7 @@ generate_dnskey_prefetch(struct module_qstate* qstate, iq->dp->name, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { /* we'll be slower, but it'll work */ verbose(VERB_ALGO, "could not generate dnskey prefetch"); return; @@ -1315,6 +1347,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, iq->refetch_glue = 0; iq->query_restart_count++; iq->sent_count = 0; + iq->dp_target_count = 0; sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; @@ -1693,7 +1726,7 @@ generate_parentside_target_query(struct module_qstate* qstate, { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, - id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) + id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; if(subq) { struct iter_qstate* subiq = @@ -1744,7 +1777,7 @@ generate_target_query(struct module_qstate* qstate, struct iter_qstate* iq, { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, - id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) + id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; log_nametypeclass(VERB_QUERY, "new target", name, qtype, qclass); return 1; @@ -1783,6 +1816,14 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, "number of glue fetches %d", s, iq->target_count[1]); return 0; } + if(iq->dp_target_count > MAX_DP_TARGET_COUNT) { + char s[LDNS_MAX_DOMAINLEN+1]; + dname_str(qstate->qinfo.qname, s); + verbose(VERB_QUERY, "request %s has exceeded the maximum " + "number of glue fetches %d to a single delegation point", + s, iq->dp_target_count); + return 0; + } iter_mark_cycle_targets(qstate, iq->dp); missing = (int)delegpt_count_missing_targets(iq->dp); @@ -1896,7 +1937,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, for(a = p->target_list; a; a=a->next_target) { (void)delegpt_add_addr(iq->dp, qstate->region, &a->addr, a->addrlen, a->bogus, - a->lame, a->tls_auth_name); + a->lame, a->tls_auth_name, NULL); } } iq->dp->has_parent_side_NS = 1; @@ -1913,6 +1954,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, iq->refetch_glue = 1; iq->query_restart_count++; iq->sent_count = 0; + iq->dp_target_count = 0; if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; return next_state(iq, INIT_REQUEST_STATE); @@ -2078,7 +2120,7 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) iq->dsns_point, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dsns_point, iq->dsns_point_len, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { errinf_dname(qstate, "for DS query parent-child nameserver search, could not generate NS lookup for", iq->dsns_point); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -2136,6 +2178,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, errinf(qstate, "exceeded the maximum number of sends"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } + if(iq->target_count && iq->target_count[2] > MAX_TARGET_NX) { + verbose(VERB_QUERY, "request has exceeded the maximum " + " number of nxdomain nameserver lookups with %d", + iq->target_count[2]); + errinf(qstate, "exceeded the maximum nameserver nxdomains"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ @@ -2240,12 +2289,41 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->qinfo_out.qtype, iq->qinfo_out.qclass, qstate->query_flags, qstate->region, qstate->env->scratch, 0); - if(msg && msg->rep->an_numrrsets == 0 - && FLAGS_GET_RCODE(msg->rep->flags) == + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NOERROR) /* no need to send query if it is already - * cached as NOERROR/NODATA */ + * cached as NOERROR */ return 1; + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == + LDNS_RCODE_NXDOMAIN && + qstate->env->need_to_validate && + qstate->env->cfg->harden_below_nxdomain) { + if(msg->rep->security == sec_status_secure) { + iq->response = msg; + return final_state(iq); + } + if(msg->rep->security == sec_status_unchecked) { + struct module_qstate* subq = NULL; + if(!generate_sub_request( + iq->qinfo_out.qname, + iq->qinfo_out.qname_len, + iq->qinfo_out.qtype, + iq->qinfo_out.qclass, + qstate, id, iq, + INIT_REQUEST_STATE, + FINISHED_STATE, &subq, 1, 1)) + verbose(VERB_ALGO, + "could not validate NXDOMAIN " + "response"); + } + } + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == + LDNS_RCODE_NXDOMAIN) { + /* return and add a label in the next + * minimisation iteration. + */ + return 1; + } } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { @@ -2321,6 +2399,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, * generated query will immediately be discarded due to depth and * that servfail is cached, which is not good as opportunism goes. */ if(iq->depth < ie->max_dependency_depth + && iq->num_target_queries == 0 + && (!iq->target_count || iq->target_count[2]==0) && iq->sent_count < TARGET_FETCH_STOP) { tf_policy = ie->target_fetch_policy[iq->depth]; } @@ -2366,6 +2446,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; + iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } @@ -2453,6 +2534,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; + iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } @@ -2748,7 +2830,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Make subrequest to validate intermediate * NXDOMAIN if harden-below-nxdomain is * enabled. */ - if(qstate->env->cfg->harden_below_nxdomain) { + if(qstate->env->cfg->harden_below_nxdomain && + qstate->env->need_to_validate) { struct module_qstate* subq = NULL; log_query_info(VERB_QUERY, "schedule NXDOMAIN validation:", @@ -2760,16 +2843,10 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->response->qinfo.qclass, qstate, id, iq, INIT_REQUEST_STATE, - FINISHED_STATE, &subq, 1)) + FINISHED_STATE, &subq, 1, 1)) verbose(VERB_ALGO, "could not validate NXDOMAIN " "response"); - outbound_list_clear(&iq->outlist); - iq->num_current_queries = 0; - fptr_ok(fptr_whitelist_modenv_detach_subs( - qstate->env->detach_subs)); - (*qstate->env->detach_subs)(qstate); - iq->num_target_queries = 0; } } return next_state(iq, QUERYTARGETS_STATE); @@ -2853,6 +2930,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Count this as a referral. */ iq->referral_count++; iq->sent_count = 0; + iq->dp_target_count = 0; /* see if the next dp is a trust anchor, or a DS was sent * along, indicating dnssec is expected for next zone */ iq->dnssec_expected = iter_indicates_dnssec(qstate->env, @@ -2929,6 +3007,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->dsns_point = NULL; iq->auth_zone_response = 0; iq->sent_count = 0; + iq->dp_target_count = 0; if(iq->minimisation_state != MINIMISE_STATE) /* Only count as query restart when it is not an extra * query as result of qname minimisation. */ @@ -3121,7 +3200,7 @@ processPrimeResponse(struct module_qstate* qstate, int id) if(!generate_sub_request(qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate prime check"); } generate_a_aaaa_check(qstate, iq, id); @@ -3149,6 +3228,7 @@ static void processTargetResponse(struct module_qstate* qstate, int id, struct module_qstate* forq) { + struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; struct ub_packed_rrset_key* rrset; @@ -3186,7 +3266,7 @@ processTargetResponse(struct module_qstate* qstate, int id, log_rrset_key(VERB_ALGO, "add parentside glue to dp", iq->pside_glue); if(!delegpt_add_rrset(foriq->dp, forq->region, - iq->pside_glue, 1)) + iq->pside_glue, 1, NULL)) log_err("out of memory adding pside glue"); } @@ -3197,6 +3277,7 @@ processTargetResponse(struct module_qstate* qstate, int id, * response type was ANSWER. */ rrset = reply_find_answer_rrset(&iq->qchase, qstate->return_msg->rep); if(rrset) { + int additions = 0; /* if CNAMEs have been followed - add new NS to delegpt. */ /* BTW. RFC 1918 says NS should not have got CNAMEs. Robust. */ if(!delegpt_find_ns(foriq->dp, rrset->rk.dname, @@ -3208,13 +3289,23 @@ processTargetResponse(struct module_qstate* qstate, int id, } /* if dpns->lame then set the address(es) lame too */ if(!delegpt_add_rrset(foriq->dp, forq->region, rrset, - dpns->lame)) + dpns->lame, &additions)) log_err("out of memory adding targets"); + if(!additions) { + /* no new addresses, increase the nxns counter, like + * this could be a list of wildcards with no new + * addresses */ + target_count_increase_nx(foriq, 1); + } verbose(VERB_ALGO, "added target response"); delegpt_log(VERB_ALGO, foriq->dp); } else { verbose(VERB_ALGO, "iterator TargetResponse failed"); + delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* fail the target */ + if((dpns->got4 == 2 || !ie->supports_ipv4) && + (dpns->got6 == 2 || !ie->supports_ipv6)) + target_count_increase_nx(foriq, 1); } } @@ -3388,7 +3479,7 @@ processCollectClass(struct module_qstate* qstate, int id) qstate->qinfo.qname_len, qstate->qinfo.qtype, c, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, - (int)!(qstate->query_flags&BIT_CD))) { + (int)!(qstate->query_flags&BIT_CD), 0)) { errinf(qstate, "could not generate class ANY" " lookup query"); return error_response(qstate, id, diff --git a/iterator/iterator.h b/iterator/iterator.h index 26ff39559..342ac207e 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -55,6 +55,11 @@ struct rbtree_type; /** max number of targets spawned for a query and its subqueries */ #define MAX_TARGET_COUNT 64 +/** max number of target lookups per qstate, per delegation point */ +#define MAX_DP_TARGET_COUNT 16 +/** max number of nxdomains allowed for target lookups for a query and + * its subqueries */ +#define MAX_TARGET_NX 5 /** max number of query restarts. Determines max number of CNAME chain. */ #define MAX_RESTART_COUNT 8 /** max number of referrals. Makes sure resolver does not run away */ @@ -305,9 +310,14 @@ struct iter_qstate { int sent_count; /** number of target queries spawned in [1], for this query and its - * subqueries, the malloced-array is shared, [0] refcount. */ + * subqueries, the malloced-array is shared, [0] refcount. + * in [2] the number of nxdomains is counted. */ int* target_count; + /** number of target lookups per delegation point. Reset to 0 after + * receiving referral answer. Not shared with subqueries. */ + int dp_target_count; + /** if true, already tested for ratelimiting and passed the test */ int ratelimit_ok; diff --git a/services/cache/dns.c b/services/cache/dns.c index 2a5bca4ac..7b6e142c9 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -273,7 +273,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_A(dp, region, akey, 0)) { + if(!delegpt_add_rrset_A(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -293,7 +293,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_AAAA(dp, region, akey, 0)) { + if(!delegpt_add_rrset_AAAA(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -327,7 +327,8 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_A(dp, region, akey, ns->lame)) { + if(!delegpt_add_rrset_A(dp, region, akey, ns->lame, + NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -347,7 +348,8 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame)) { + if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame, + NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } diff --git a/util/data/dname.c b/util/data/dname.c index c8f09ddbc..76b2ec7d6 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -233,17 +233,28 @@ int dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2) { uint8_t len1, len2; + int count1 = 0, count2 = 0; log_assert(pkt && d1 && d2); len1 = *d1++; len2 = *d2++; while( len1 != 0 || len2 != 0 ) { /* resolve ptrs */ if(LABEL_IS_PTR(len1)) { + if((size_t)PTR_OFFSET(len1, *d1) + >= sldns_buffer_limit(pkt)) + return -1; + if(count1++ > MAX_COMPRESS_PTRS) + return -1; d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1)); len1 = *d1++; continue; } if(LABEL_IS_PTR(len2)) { + if((size_t)PTR_OFFSET(len2, *d2) + >= sldns_buffer_limit(pkt)) + return 1; + if(count2++ > MAX_COMPRESS_PTRS) + return 1; d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2)); len2 = *d2++; continue; @@ -302,12 +313,18 @@ dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h) uint8_t labuf[LDNS_MAX_LABELLEN+1]; uint8_t lablen; int i; + int count = 0; /* preserve case of query, make hash label by label */ lablen = *dname++; while(lablen) { if(LABEL_IS_PTR(lablen)) { /* follow pointer */ + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) + return h; + if(count++ > MAX_COMPRESS_PTRS) + return h; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; @@ -341,6 +358,9 @@ void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) return; } /* follow pointer */ + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) + return; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; @@ -369,6 +389,7 @@ void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) { uint8_t lablen; + int count = 0; if(!out) out = stdout; if(!dname) return; @@ -382,6 +403,15 @@ void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) fputs("??compressionptr??", out); return; } + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) { + fputs("??compressionptr??", out); + return; + } + if(count++ > MAX_COMPRESS_PTRS) { + fputs("??compressionptr??", out); + return; + } dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; diff --git a/util/data/msgparse.c b/util/data/msgparse.c index fb3123703..7c32618a3 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -55,7 +55,11 @@ smart_compare(sldns_buffer* pkt, uint8_t* dnow, { if(LABEL_IS_PTR(*dnow)) { /* ptr points to a previous dname */ - uint8_t* p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); + uint8_t* p; + if((size_t)PTR_OFFSET(dnow[0], dnow[1]) + >= sldns_buffer_limit(pkt)) + return -1; + p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); if( p == dprfirst || p == dprlast ) return 0; /* prev dname is also a ptr, both ptrs are the same. */ From a1d4e151eec2f6b47ffa3500b88b5dc0bf7e2821 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 10:29:37 +0200 Subject: [PATCH 233/235] - Release 1.10.1 is 1.10.0 with fixes, code repository continues, including those fixes, towards the next release. Configure has version 1.10.2 version number in it. --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- doc/Changelog | 3 +++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 2d6aa6a05..6c3e695fa 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.10.1. +# Generated by GNU Autoconf 2.69 for unbound 1.10.2. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.10.1' -PACKAGE_STRING='unbound 1.10.1' +PACKAGE_VERSION='1.10.2' +PACKAGE_STRING='unbound 1.10.2' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1458,7 +1458,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.10.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.10.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1523,7 +1523,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.10.1:";; + short | recursive ) echo "Configuration of unbound 1.10.2:";; esac cat <<\_ACEOF @@ -1750,7 +1750,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.10.1 +unbound configure 1.10.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2459,7 +2459,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.10.1, which was +It was created by unbound $as_me 1.10.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2811,11 +2811,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=10 -UNBOUND_VERSION_MICRO=1 +UNBOUND_VERSION_MICRO=2 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=8 +LIBUNBOUND_REVISION=9 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2891,6 +2891,7 @@ LIBUNBOUND_AGE=1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 +# 1.10.2 had 9:9:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -21618,7 +21619,7 @@ _ACEOF -version=1.10.1 +version=1.10.2 date=`date +'%b %e, %Y'` @@ -22137,7 +22138,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.10.1, which was +This file was extended by unbound $as_me 1.10.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22203,7 +22204,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.10.1 +unbound config.status 1.10.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 113c4ec18..d1f7998e2 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[10]) -m4_define([VERSION_MICRO],[1]) +m4_define([VERSION_MICRO],[2]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl 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=8 +LIBUNBOUND_REVISION=9 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -94,6 +94,7 @@ LIBUNBOUND_AGE=1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 +# 1.10.2 had 9:9:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/doc/Changelog b/doc/Changelog index 223b13b90..8b1c535ba 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,9 @@ query into a large number of queries directed to a target. - CVE-2020-12663 Malformed answers from upstream name servers can be used to make Unbound unresponsive. + - Release 1.10.1 is 1.10.0 with fixes, code repository continues, + including those fixes, towards the next release. Configure has + version 1.10.2 version number in it. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, From 711c0548f0bcb6593ce029b1b7aee86c4c923310 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 14:36:57 +0200 Subject: [PATCH 234/235] - For PR #93: windows compile warnings removal - windows compile warnings removal for ip dscp option code. --- doc/Changelog | 2 ++ dynlibmod/dynlibmod.c | 16 ++++++++-------- services/listen_dnsport.c | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 8b1c535ba..780622a7f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,8 @@ - Release 1.10.1 is 1.10.0 with fixes, code repository continues, including those fixes, towards the next release. Configure has version 1.10.2 version number in it. + - For PR #93: windows compile warnings removal + - windows compile warnings removal for ip dscp option code. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 6ae23e86c..09b6cd40f 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -15,7 +15,7 @@ void log_dlerror() { DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM ; - if(dwBufferLength = FormatMessageA( + if((dwBufferLength = FormatMessageA( dwFormatFlags, NULL, // module to get message from (NULL == system) dwLastError, @@ -23,7 +23,7 @@ void log_dlerror() { (LPSTR) &MessageBuffer, 0, NULL - )) + ))) { log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); LocalFree(MessageBuffer); @@ -108,7 +108,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_init = (func_init_t) initializer; + de->func_init = (func_init_t)(void*)initializer; } deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { @@ -116,7 +116,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_deinit = (func_deinit_t) deinitializer; + de->func_deinit = (func_deinit_t)(void*)deinitializer; } operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { @@ -124,7 +124,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_operate = (func_operate_t) operate; + de->func_operate = (func_operate_t)(void*)operate; } inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { @@ -132,7 +132,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_inform = (func_inform_t) inform; + de->func_inform = (func_inform_t)(void*)inform; } clear = __LOADSYM(dynamic_library,"clear"); if (clear == NULL) { @@ -140,7 +140,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_clear = (func_clear_t) clear; + de->func_clear = (func_clear_t)(void*)clear; } get_mem = __LOADSYM(dynamic_library,"get_mem"); if (get_mem == NULL) { @@ -148,7 +148,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_get_mem = (func_get_mem_t) get_mem; + de->func_get_mem = (func_get_mem_t)(void*)get_mem; } } de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 51d5a3fdb..cc56d3fd3 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -884,11 +884,11 @@ set_ip_dscp(int socket, int addrfamily, int dscp) ds = dscp << 2; switch(addrfamily) { case AF_INET6: - if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &ds, sizeof(ds)) < 0) + if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; default: - if(setsockopt(socket, IPPROTO_IP, IP_TOS, &ds, sizeof(ds)) < 0) + if(setsockopt(socket, IPPROTO_IP, IP_TOS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; } From f37242566b3187c1d715af6d0e4e0c5b75ccafeb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 15:49:08 +0200 Subject: [PATCH 235/235] - For PR #93: unit test for dynlib module. --- doc/Changelog | 1 + testdata/dynlibmod.tdir/dynlibmod.conf | 32 +++++++++ testdata/dynlibmod.tdir/dynlibmod.dsc | 16 +++++ testdata/dynlibmod.tdir/dynlibmod.post | 15 +++++ testdata/dynlibmod.tdir/dynlibmod.pre | 35 ++++++++++ testdata/dynlibmod.tdir/dynlibmod.test | 74 +++++++++++++++++++++ testdata/dynlibmod.tdir/dynlibmod.testns | 22 ++++++ testdata/dynlibmod.tdir/unbound_control.key | 15 +++++ testdata/dynlibmod.tdir/unbound_control.pem | 11 +++ testdata/dynlibmod.tdir/unbound_server.key | 15 +++++ testdata/dynlibmod.tdir/unbound_server.pem | 11 +++ 11 files changed, 247 insertions(+) create mode 100644 testdata/dynlibmod.tdir/dynlibmod.conf create mode 100644 testdata/dynlibmod.tdir/dynlibmod.dsc create mode 100644 testdata/dynlibmod.tdir/dynlibmod.post create mode 100644 testdata/dynlibmod.tdir/dynlibmod.pre create mode 100644 testdata/dynlibmod.tdir/dynlibmod.test create mode 100644 testdata/dynlibmod.tdir/dynlibmod.testns create mode 100644 testdata/dynlibmod.tdir/unbound_control.key create mode 100644 testdata/dynlibmod.tdir/unbound_control.pem create mode 100644 testdata/dynlibmod.tdir/unbound_server.key create mode 100644 testdata/dynlibmod.tdir/unbound_server.pem diff --git a/doc/Changelog b/doc/Changelog index 780622a7f..ec84296f8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -8,6 +8,7 @@ version 1.10.2 version number in it. - For PR #93: windows compile warnings removal - windows compile warnings removal for ip dscp option code. + - For PR #93: unit test for dynlib module. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, diff --git a/testdata/dynlibmod.tdir/dynlibmod.conf b/testdata/dynlibmod.tdir/dynlibmod.conf new file mode 100644 index 000000000..d59444344 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.conf @@ -0,0 +1,32 @@ +server: + verbosity: 2 + num-threads: 3 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" + module-config: "dynlib iterator" + +dynlib: + dynlib-file: "@DLL_FILE@" + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/dynlibmod.tdir/dynlibmod.dsc b/testdata/dynlibmod.tdir/dynlibmod.dsc new file mode 100644 index 000000000..b1a83910d --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.dsc @@ -0,0 +1,16 @@ +BaseName: dynlibmod +Version: 1.0 +Description: test dynlibmod module +CreationDate: Tue May 19 15:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dynlibmod.pre +Post: dynlibmod.post +Test: dynlibmod.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dynlibmod.tdir/dynlibmod.post b/testdata/dynlibmod.tdir/dynlibmod.post new file mode 100644 index 000000000..caa0da4f5 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.post @@ -0,0 +1,15 @@ +# #-- dynlibmod.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +exit 0 diff --git a/testdata/dynlibmod.tdir/dynlibmod.pre b/testdata/dynlibmod.tdir/dynlibmod.pre new file mode 100644 index 000000000..94adaa723 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.pre @@ -0,0 +1,35 @@ +# #-- dynlibmod.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dynlibmod.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +if grep "define USE_WINSOCK 1" $PRE/config.h; then + DLL_FILE="helloworld.dll" +else + DLL_FILE="helloworld.so" +fi +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@DLL_FILE\@/'$DLL_FILE'/' < dynlibmod.conf > ub.conf + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log diff --git a/testdata/dynlibmod.tdir/dynlibmod.test b/testdata/dynlibmod.tdir/dynlibmod.test new file mode 100644 index 000000000..f99f6fbc4 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.test @@ -0,0 +1,74 @@ +# #-- dynlibmod.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# compile the dynamic library module +if grep "define USE_WINSOCK 1" $PRE/config.h; then + echo "compile dynamic library dll for mingw" + echo "x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a" + x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a + if test $? != 0; then + echo "compile failure" + exit 1; + fi +else + echo "compile dynamic library" + echo "gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c" + gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c + if test $? != 0; then + echo "compile failure" + exit 1; + fi +fi + +# start unbound in the background +LD_LIBRARY_PATH="." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +wait_unbound_up unbound.log + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check log for dynlibmod info" +# wait for a moment for filesystem to catch up. +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 10; fi +if grep "hello world from operate" unbound.log; then echo "yes it is in unbound.log"; +else + echo "information not in unbound.log" + echo "failed" + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/dynlibmod.tdir/dynlibmod.testns b/testdata/dynlibmod.tdir/dynlibmod.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dynlibmod.tdir/unbound_control.key b/testdata/dynlibmod.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_control.pem b/testdata/dynlibmod.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dynlibmod.tdir/unbound_server.key b/testdata/dynlibmod.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_server.pem b/testdata/dynlibmod.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE-----