From 90b00dfe5734b51da75dcb8ae99a6b69d2dfcb8a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 7 Jan 2019 09:06:41 +0000 Subject: [PATCH 001/117] - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, and server tcp fastopen is enabled at compile time. git-svn-id: file:///svn/unbound/trunk@5026 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ services/listen_dnsport.c | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 9e05a0768..a640c50f0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +7 January 2018: Wouter + - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, + and server tcp fastopen is enabled at compile time. + 12 December 2018: Wouter - Fix for crash in dns64 module if response is null. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index efc0c3e18..d4a0d6a8c 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -838,7 +838,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, disabled, except when verbosity enabled for debugging */ if(errno != ENOPROTOOPT || verbosity >= 3) #endif - log_err("Setting TCP Fast Open as server failed: %s", strerror(errno)); + if(errno == EPERM) { + log_warn("Setting TCP Fast Open as server failed: %s ; this could likely be because sysctl net.inet.tcp.fastopen.enabled, net.inet.tcp.fastopen.server_enable, or net.ipv4.tcp_fastopen is disabled", strerror(errno)); + } else { + log_err("Setting TCP Fast Open as server failed: %s", strerror(errno)); + } } #endif return s; From fe6eb5f665f2e8d9dd6fd4352cb16541aaeaa92c Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 7 Jan 2019 10:52:08 +0000 Subject: [PATCH 002/117] - Document interaction between the tls-upstream option in the server section and forward-tls-upstream option in the forward-zone sections. git-svn-id: file:///svn/unbound/trunk@5027 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ doc/unbound.conf.5.in | 2 ++ 2 files changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index a640c50f0..602ae39c3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 7 January 2018: Wouter - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, and server tcp fastopen is enabled at compile time. + - Document interaction between the tls-upstream option in the server + section and forward-tls-upstream option in the forward-zone sections. 12 December 2018: Wouter - Fix for crash in dns64 module if response is null. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 0acce72ac..c18616273 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -440,6 +440,8 @@ TCP wireformat. The other server must support this (see \fBtls\-service\-key\fR). If you enable this, also configure a tls\-cert\-bundle or use tls\-win\-cert to load CA certs, otherwise the connections cannot be authenticated. +This option enables TLS for all of them, but if you do not set this you can +configure TLS specifically for some forward zones with forward\-tls\-upstream. And also with stub\-tls\-upstream. .TP .B ssl\-upstream: \fI Alternate syntax for \fBtls\-upstream\fR. If both are present in the config From ec84fd2ca6a5df4424f0afd0535ca91dac695179 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 7 Jan 2019 15:01:24 +0000 Subject: [PATCH 003/117] - Add contrib/unbound-fuzzme.patch from Jacob Hoffman-Andrews, the patch adds a program used for fuzzing. git-svn-id: file:///svn/unbound/trunk@5028 be551aaa-1e26-0410-a405-d3ace91eadb9 --- contrib/README | 2 + contrib/unbound-fuzzme.patch | 148 +++++++++++++++++++++++++++++++++++ doc/Changelog | 2 + 3 files changed, 152 insertions(+) create mode 100644 contrib/unbound-fuzzme.patch diff --git a/contrib/README b/contrib/README index 2b5e75424..262ccc7db 100644 --- a/contrib/README +++ b/contrib/README @@ -38,3 +38,5 @@ distribution but may be helpful. * unbound-querycachedb.py: utility to show data stored in cachedb backend for a particular query name and type. It requires dnspython and (for redis backend) redis Python modules. +* unbound-fuzzme.patch: adds unbound-fuzzme program that parses a packet from + stdin. Used with fuzzers, patch from Jacob Hoffman-Andrews. diff --git a/contrib/unbound-fuzzme.patch b/contrib/unbound-fuzzme.patch new file mode 100644 index 000000000..a2f3e1db3 --- /dev/null +++ b/contrib/unbound-fuzzme.patch @@ -0,0 +1,148 @@ +>From cc9b927f8f29d989ddb8415fe6508a538546abca Mon Sep 17 00:00:00 2001 +From: Jacob Hoffman-Andrews +Date: Wed, 2 Jan 2019 22:52:51 -0800 +Subject: [PATCH] Add unbound-fuzzme. + +This is a small program that simply parses a packet provided on stdout, +for the purposes of fuzzing. +--- + .gitignore | 1 + + Makefile.in | 22 ++++++++++++++++++++-- + smallapp/unbound-fuzzme.c | 38 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 59 insertions(+), 2 deletions(-) + create mode 100644 smallapp/unbound-fuzzme.c + +diff --git a/.gitignore b/.gitignore +index f4527fd8..6163f905 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -24,6 +24,7 @@ + /unbound-checkconf + /unbound-control + /unbound-control-setup ++/unbound-fuzzme + /unbound-host + /unbound.h + /asynclook +diff --git a/Makefile.in b/Makefile.in +index af5b10f6..dacf1ab5 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -177,6 +177,10 @@ shm_main.lo remote.lo stats.lo unbound.lo \ + worker.lo @WIN_DAEMON_OBJ@ + DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ + $(COMPAT_OBJ) @WIN_DAEMON_OBJ_LINK@ ++FUZZME_SRC=smallapp/unbound-fuzzme.c ++FUZZME_OBJ=unbound-fuzzme.lo ++FUZZME_OBJ_LINK=$(FUZZME_OBJ) worker_cb.lo $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ ++$(COMPAT_OBJ) + CHECKCONF_SRC=smallapp/unbound-checkconf.c smallapp/worker_cb.c + CHECKCONF_OBJ=unbound-checkconf.lo worker_cb.lo + CHECKCONF_OBJ_LINK=$(CHECKCONF_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ +@@ -252,6 +256,7 @@ RSRC_OBJ=rsrc_svcinst.o rsrc_svcuninst.o rsrc_anchorupd.o rsrc_unbound.o \ + rsrc_unbound_checkconf.o + + ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ ++ $(FUZZME_SRC) \ + $(TESTBOUND_SRC) $(LOCKVERIFY_SRC) $(PKTVIEW_SRC) \ + $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \ + $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \ +@@ -259,6 +264,7 @@ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ + $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC)\ + $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC) + ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ ++ $(FUZZME_OBJ) \ + $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \ + $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \ + $(ASYNCLOOK_OBJ) $(STREAMTCP_OBJ) $(PERF_OBJ) $(DELAYER_OBJ) \ +@@ -274,7 +280,7 @@ LINK_LIB=$(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFL + + all: $(COMMON_OBJ) $(ALLTARGET) + +-alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup $(WINAPPS) $(PYUNBOUND_TARGET) ++alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup unbound-fuzzme$(EXEEXT) $(WINAPPS) $(PYUNBOUND_TARGET) + + # compat with BSD make, register suffix, and an implicit rule to actualise it. + .SUFFIXES: .lo +@@ -325,6 +331,9 @@ libunbound.la: $(LIBUNBOUND_OBJ_LINK) + unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la + $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + ++unbound-fuzzme$(EXEEXT): $(FUZZME_OBJ_LINK) libunbound.la ++ $(LINK) -o $@ $(FUZZME_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) ++ + unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la + $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + +@@ -447,7 +456,7 @@ util/configparser.c util/configparser.h: $(srcdir)/util/configparser.y + + clean: + rm -f *.o *.d *.lo *~ tags +- 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 unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-fuzzme$(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 -rf autom4te.cache .libs build doc/html doc/xml +@@ -1183,6 +1192,15 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \ + $(srcdir)/validator/val_neg.h ++unbound-fuzzme.lo unbound-fuzzme.o: $(srcdir)/smallapp/unbound-fuzzme.c \ ++ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ ++ $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h \ ++ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ ++ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ ++ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ ++ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ ++ $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ ++ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h + unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/remote.h \ +diff --git a/smallapp/unbound-fuzzme.c b/smallapp/unbound-fuzzme.c +new file mode 100644 +index 00000000..74ae5204 +--- /dev/null ++++ b/smallapp/unbound-fuzzme.c +@@ -0,0 +1,38 @@ ++/* ++ * unbound-fuzzme.c - parse a packet provided on stdin (for fuzzing). ++ * ++ */ ++#include "config.h" ++#include "util/regional.h" ++#include "util/fptr_wlist.h" ++#include "sldns/sbuffer.h" ++ ++#define SZ 10000 ++ ++int main() { ++ char buffer[SZ]; ++ size_t n_read = fread(buffer, 1, SZ, stdin); ++ if (n_read == SZ) { ++ printf("input too big\n"); ++ return 1; ++ } ++ sldns_buffer *pkt = sldns_buffer_new(n_read); ++ sldns_buffer_init_frm_data(pkt, buffer, n_read); ++ ++ struct regional *region = regional_create(); ++ ++ struct msg_parse* prs; ++ struct edns_data edns; ++ prs = (struct msg_parse*)malloc(sizeof(struct msg_parse)); ++ if(!prs) { ++ printf("out of memory on incoming message\n"); ++ return 1; ++ } ++ memset(prs, 0, sizeof(*prs)); ++ memset(&edns, 0, sizeof(edns)); ++ sldns_buffer_set_position(pkt, 0); ++ if(parse_packet(pkt, prs, region) != LDNS_RCODE_NOERROR) { ++ printf("parse error\n"); ++ return 1; ++ } ++} +-- +2.17.1 + diff --git a/doc/Changelog b/doc/Changelog index 602ae39c3..7cb76e8ca 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,8 @@ and server tcp fastopen is enabled at compile time. - Document interaction between the tls-upstream option in the server section and forward-tls-upstream option in the forward-zone sections. + - Add contrib/unbound-fuzzme.patch from Jacob Hoffman-Andrews, + the patch adds a program used for fuzzing. 12 December 2018: Wouter - Fix for crash in dns64 module if response is null. From 11d98df304ae4ccde5d7d9a0144aa5932760b107 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 8 Jan 2019 13:29:38 +0000 Subject: [PATCH 004/117] - Fix syntax in comment of local alias processing. git-svn-id: file:///svn/unbound/trunk@5029 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/worker.c | 2 +- doc/Changelog | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/daemon/worker.c b/daemon/worker.c index f40d1cc2f..c9504dd20 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1088,7 +1088,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, struct ub_packed_rrset_key* alias_rrset = NULL; struct reply_info* partial_rep = NULL; struct query_info* lookup_qinfo = &qinfo; - struct query_info qinfo_tmp; /* placeholdoer for lookup_qinfo */ + struct query_info qinfo_tmp; /* placeholder for lookup_qinfo */ struct respip_client_info* cinfo = NULL, cinfo_tmp; memset(&qinfo, 0, sizeof(qinfo)); diff --git a/doc/Changelog b/doc/Changelog index 7cb76e8ca..bdc5c4356 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +8 January 2018: Wouter + - Fix syntax in comment of local alias processing. + 7 January 2018: Wouter - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, and server tcp fastopen is enabled at compile time. From db2557826a4e512a3ebb201c187525960089bba3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 8 Jan 2019 14:39:31 +0000 Subject: [PATCH 005/117] - Fix NSEC3 record that is returned in wildcard replies from auth-zone zones with NSEC3 and wildcards. git-svn-id: file:///svn/unbound/trunk@5030 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 + services/authzone.c | 30 +++--- testdata/auth_nsec3_wild.rpl | 203 +++++++++++++++++++++++++++++++++++ 3 files changed, 223 insertions(+), 12 deletions(-) create mode 100644 testdata/auth_nsec3_wild.rpl diff --git a/doc/Changelog b/doc/Changelog index bdc5c4356..1f2a4ee46 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 8 January 2018: Wouter - Fix syntax in comment of local alias processing. + - Fix NSEC3 record that is returned in wildcard replies from + auth-zone zones with NSEC3 and wildcards. 7 January 2018: Wouter - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, diff --git a/services/authzone.c b/services/authzone.c index e30858d43..ff8b23e62 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2743,13 +2743,14 @@ az_nsec3_insert(struct auth_zone* z, struct regional* region, * that is an exact match that should exist for it. * If that does not exist, a higher exact match + nxproof is enabled * (for some sort of opt-out empty nonterminal cases). + * ceproof: include ce proof NSEC3 (omitted for wildcard replies). * nxproof: include denial of the qname. * wcproof: include denial of wildcard (wildcard.ce). */ static int az_add_nsec3_proof(struct auth_zone* z, struct regional* region, struct dns_msg* msg, uint8_t* cenm, size_t cenmlen, uint8_t* qname, - size_t qname_len, int nxproof, int wcproof) + size_t qname_len, int ceproof, int nxproof, int wcproof) { int algo; size_t iter, saltlen; @@ -2761,11 +2762,13 @@ az_add_nsec3_proof(struct auth_zone* z, struct regional* region, if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen)) return 1; /* no nsec3 */ /* find ce that has an NSEC3 */ - node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce, - algo, iter, salt, saltlen); - if(no_exact_ce) nxproof = 1; - if(!az_nsec3_insert(z, region, msg, node)) - return 0; + if(ceproof) { + node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce, + algo, iter, salt, saltlen); + if(no_exact_ce) nxproof = 1; + if(!az_nsec3_insert(z, region, msg, node)) + return 0; + } if(nxproof) { uint8_t* nx; @@ -2910,7 +2913,7 @@ az_generate_notype_answer(struct auth_zone* z, struct regional* region, /* DNSSEC denial NSEC3 */ if(!az_add_nsec3_proof(z, region, msg, node->name, node->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 0, 0)) + msg->qinfo.qname_len, 1, 0, 0)) return 0; } return 1; @@ -2937,7 +2940,7 @@ az_generate_referral_answer(struct auth_zone* z, struct regional* region, } else { if(!az_add_nsec3_proof(z, region, msg, ce->name, ce->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 0, 0)) + msg->qinfo.qname_len, 1, 0, 0)) return 0; } } @@ -3008,9 +3011,12 @@ az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo, if((nsec=az_find_nsec_cover(z, &node)) != NULL) { if(!msg_add_rrset_ns(z, region, msg, node, nsec)) return 0; } else if(ce) { - if(!az_add_nsec3_proof(z, region, msg, ce->name, - ce->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 1, 0)) + uint8_t* wildup = wildcard->name; + size_t wilduplen= wildcard->namelen; + dname_remove_label(&wildup, &wilduplen); + if(!az_add_nsec3_proof(z, region, msg, wildup, + wilduplen, msg->qinfo.qname, + msg->qinfo.qname_len, 0, 1, 0)) return 0; } @@ -3036,7 +3042,7 @@ az_generate_nxdomain_answer(struct auth_zone* z, struct regional* region, } else if(ce) { if(!az_add_nsec3_proof(z, region, msg, ce->name, ce->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 1, 1)) + msg->qinfo.qname_len, 1, 1, 1)) return 0; } return 1; diff --git a/testdata/auth_nsec3_wild.rpl b/testdata/auth_nsec3_wild.rpl new file mode 100644 index 000000000..acfe63bae --- /dev/null +++ b/testdata/auth_nsec3_wild.rpl @@ -0,0 +1,203 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "test-ns-signed.dev.internet.nl." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME test-ns-signed.dev.internet.nl + ## this is the inline file /tmp/xxx.test-ns-signed.dev.internet.nl + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS test-ns-signed.dev.internet.nl +test-ns-signed.dev.internet.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 4 14400 3600 604800 3600 +test-ns-signed.dev.internet.nl. 3600 IN RRSIG SOA 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. ybb0Hc7NC+QOFEEv4cX2+Umlk+miiOAHmeP2Uwvg6lqfxkk+3g7yWBEKMinXjLKz0odWZ6fki6M/3yBPQX8SV0OCRY5gYvAHAjbxAIHozIM+5iwOkRQhNF1DRgQ3BLjL93f6T5e5Z4y1812iOpu4GYswXW/UTOZACXz2UiaCPAg= +test-ns-signed.dev.internet.nl. 3600 IN NS ns.test-ns-signed.dev.internet.nl. +test-ns-signed.dev.internet.nl. 3600 IN RRSIG NS 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. KqiwTF3hKm1ZHGbgx6MVzZYHlS1p7+Xrikx4izMHFbWiD6ki6lrJBJsnH9j/hH1cwHxjXslOeJh0hdBdbn8la0meZPsebOyUbEjoLPzRLzKNLDBuA4BUJnRGQJy21CX7XooXAMAmR8YFipO8CojI9EogU2m2o9YkfbpacFWQoTk= +test-ns-signed.dev.internet.nl. 3600 IN DNSKEY 256 3 8 AwEAAc6c8tpMXBSOFLu/9n4aUUDK43wN4B7A2UDqZi0IOkyptxWCFghleyZeeN5uq6p9MoUt8lS73mFmIYC0ux5zBO3uVaJQ9u+00qRAEVg/RgBwa58y2f/zNtFV/f7mBSPcPTiEjUh0bwHSiTvUn/8JkrvjyAcbQMO0YOsRof5q6tzl ;{id = 32784 (zsk), size = 1024b} +test-ns-signed.dev.internet.nl. 3600 IN DNSKEY 257 3 8 AwEAAdC0hBJP1U8lbZ6JFXn0ouK6VipiraN7I8oog62SuEd/fqAupys7A/Ih6WK/UoJorjlnccEL8euNMaS4kNogvoBrFx8ciIWKcbot5mtwc4WDr3cnR+HIZNCUFVkIxsMqE7HCD0yn0zhkB60shED+ZHs8zpyU+cjnsOSizxOnIY+F ;{id = 54502 (ksk), size = 1024b} +test-ns-signed.dev.internet.nl. 3600 IN RRSIG DNSKEY 8 4 3600 20190205132351 20190108132351 54502 test-ns-signed.dev.internet.nl. X3qN+plfjf45FA4pr/tcUqUCR9ajDqwtNe4TS19WOJogVL/Gf/N5/ToOCrs3s+a7VrJl58WvSJquDM8xAS8f4oJggKgHFhopce8tMTGRxkRvJo4y+tt3vCveh/zjHLAnbOaBGA4CJ/IPhRqzHzcX/SjSv0EACWd6XpQIWogRv6c= +test-ns-signed.dev.internet.nl. 3600 IN NSEC3PARAM 1 0 1 - +test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3PARAM 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. A/1xUGO46uIz+9vjPGfWVD99akwU9bd/UlnVG9LPfoTzG7TMWSoZ4ksg8k8ub8K1TrkDmQokNHSW0Gt6qwoRh17c+p1h/SFlDVL83wgTc4NqG43OQjgGU9RV035XU+VESlO3lavifhlu8rHWBJTlhiXcMGq6H+zvoz4sx9p5GNM= +93stp7o7i5n9gb83uu7vv6h8qltk14ig.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - fee0c2kfhi6bnljce6vehaenqq3pbupu NS SOA RRSIG DNSKEY NSEC3PARAM +93stp7o7i5n9gb83uu7vv6h8qltk14ig.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. YoTRDQ7sSvERcY1WwAH4oRRR7DmaAwA8/H70jdMeSU4wsnM/VM03kDcc2sgq5edmHiZoTWnq7nEb/1Y7Ro0YrqTUQdYFZvXi6UjZQrKI9nqAGnhdXZWlZJHmYpn2+2Emd+bYHkwvKaPnfnnKjUoGVBH8Hly0HBYKPUF1/viquB0= +kl94uofq16t2vlq0bmampf6e4o9k5hbi.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1 +kl94uofq16t2vlq0bmampf6e4o9k5hbi.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. NI5zJ/k1kPVZ1abms5OoME/wazb77Ltduyk6ZevAnt4tKydZYwSsjEd0Ixknw9xnakCABn5rAYEXctARN0KCwCkNHR7TYlTAJT14hlDYjbad2u2HT9L1kzAnfj3BeLZl/LRADeMbTtzrkTSF3Dnezurb94fMnUnKt2hPfQfj560= +fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv +fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. WIb3ISP1nlafbyWoWa4z7sG5IS+V86PyvEMHdD/64hgsFkrCu483XK7VNnBz28SL/631JXA1R19O+UxeWhTUyctp8QSt6cEZcMPY8b7yG97rNFNvhSw75rSXXt+JwgIYHPHQV5oqPtVmEpQM5SfJd+hs+Nn1bJcWB3UaESNNAMQ= +*.a.b.test-ns-signed.dev.internet.nl. 3600 IN TXT "a" +*.a.b.test-ns-signed.dev.internet.nl. 3600 IN RRSIG TXT 8 6 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. eNcJkQXdTO1z21od0sXbgqtABhhr/9tNC/Zx8zYbhXkfj7rufN71yk9xqgu6TG0MeJV26ISrqIGRVFJFmTRvO1LLxoKkEPhqe+08nqRztxXZajCV+dDeFoGIDcXJg6tAxB+MJznkKDtZPpIWvyt1WwdYfcMrGtE9AmR3K1/P/xE= +7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 93stp7o7i5n9gb83uu7vv6h8qltk14ig TXT RRSIG +7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. gtxoiTa3FRUqoRLvkWSxmWQ+DfijVd26gpKH3+GmGIcNB/sr/Cf8kERRwVVHvgzYIcvdJcys5b2LUXnZJwcdAlx7efZPWgNZzWxJrw6ES25LCWJOrp31isWn9FlAZGIbnpyEXxD2apBSmtyPnKbTgU6lHHS9jrsYHu4G8Zouv3k= +ns.test-ns-signed.dev.internet.nl. 3600 IN A 185.49.141.11 +ns.test-ns-signed.dev.internet.nl. 3600 IN RRSIG A 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. F9sXEVAmlRn+/84WbuvegiCwstNxMDMQLl0Obv2CTPpee4U6psbmXrlzczjjjkE6aLjsIHYdcXCzEWTrmukT+V9jzaGPRJvxNvC0ASWyzggAoh0Z++Hl4cVa9587o6I9ODayehFI9Pgdem+RVdb4zlWuzi9FmKXgeTlgWN54tPg= +ns.test-ns-signed.dev.internet.nl. 3600 IN AAAA 2a04:b900:0:100::11 +ns.test-ns-signed.dev.internet.nl. 3600 IN RRSIG AAAA 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. F1XRrx/QgfzJ1RS7d0m23QoIPx1G8WL1SrlTOm7pk5vWTL07w7HEw2TETblkjnitJGKfN9ebsIum/cDPUZc3UqLkguP2UCWpePnlllTJuwmG0Z+wyINIR4xF4PQlqttvzThBkD2JKWb/o0W8dQyXTj+jJ1vCZ0NjjA2N4+iJIQE= +i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - kl94uofq16t2vlq0bmampf6e4o9k5hbi A AAAA RRSIG +i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with NSEC3 wildcard + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +something.a.b.test-ns-signed.dev.internet.nl. IN TXT +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA DO NOERROR +SECTION QUESTION +something.a.b.test-ns-signed.dev.internet.nl. IN TXT +SECTION ANSWER +something.a.b.test-ns-signed.dev.internet.nl. IN TXT "a" +something.a.b.test-ns-signed.dev.internet.nl. 3600 IN RRSIG TXT 8 6 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. eNcJkQXdTO1z21od0sXbgqtABhhr/9tNC/Zx8zYbhXkfj7rufN71yk9xqgu6TG0MeJV26ISrqIGRVFJFmTRvO1LLxoKkEPhqe+08nqRztxXZajCV+dDeFoGIDcXJg6tAxB+MJznkKDtZPpIWvyt1WwdYfcMrGtE9AmR3K1/P/xE= +SECTION AUTHORITY +i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - KL94UOFQ16T2VLQ0BMAMPF6E4O9K5HBI A AAAA RRSIG +i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= +ENTRY_END + +SCENARIO_END From 42d2c04ae1483d180f913074450202c59561e827 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 9 Jan 2019 13:57:14 +0000 Subject: [PATCH 006/117] - Log query name for looping module errors. git-svn-id: file:///svn/unbound/trunk@5031 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ services/mesh.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 1f2a4ee46..f95c10f6b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +9 January 2018: Wouter + - Log query name for looping module errors. + 8 January 2018: Wouter - Fix syntax in comment of local alias processing. - Fix NSEC3 record that is returned in wildcard replies from diff --git a/services/mesh.c b/services/mesh.c index c6bb9ef2b..3d4403f24 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1392,7 +1392,7 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate, /* module is looping. Stop it. */ log_err("internal error: looping module (%s) stopped", mesh->mods.mod[mstate->s.curmod]->name); - log_query_info(VERB_QUERY, "pass error for qstate", + log_query_info(0, "pass error for qstate", &mstate->s.qinfo); s = module_error; } From dd19026e910c6003a9436c77488cc62929e4a9a8 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 11 Jan 2019 14:12:27 +0000 Subject: [PATCH 007/117] - Initial commit for out-of-order processing for TCP and TLS. git-svn-id: file:///svn/unbound/trunk@5032 be551aaa-1e26-0410-a405-d3ace91eadb9 --- Makefile.in | 10 +- doc/Changelog | 3 + services/listen_dnsport.c | 316 +++++++++++++++++- services/listen_dnsport.h | 123 +++++++ services/mesh.c | 94 ++++-- services/mesh.h | 10 + testcode/fake_event.c | 14 + .../fwd_compress_c00c.post | 1 + .../fwd_compress_c00c.test | 4 +- util/netevent.c | 72 +++- util/netevent.h | 8 +- 11 files changed, 611 insertions(+), 44 deletions(-) diff --git a/Makefile.in b/Makefile.in index af5b10f65..0a257bda5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -744,7 +744,10 @@ listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/services/modstack.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ @@ -762,7 +765,8 @@ mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(s $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h $(srcdir)/util/edns.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h + $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.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 \ @@ -870,7 +874,7 @@ netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/neteve $(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/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/dnstap/dnstap.h \ - \ + $(srcdir)/services/listen_dnsport.h \ net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ diff --git a/doc/Changelog b/doc/Changelog index f95c10f6b..45e187e4c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +11 January 2018: Wouter + - Initial commit for out-of-order processing for TCP and TLS. + 9 January 2018: Wouter - Log query name for looping module errors. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index d4a0d6a8c..311cf2dda 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -53,6 +53,8 @@ #include "util/config_file.h" #include "util/net_help.h" #include "sldns/sbuffer.h" +#include "services/mesh.h" +#include "util/fptr_wlist.h" #ifdef HAVE_NETDB_H #include @@ -1276,11 +1278,13 @@ listen_create(struct comm_base* base, struct listen_port* ports, ports->ftype == listen_type_tcp_dnscrypt) cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, - tcp_conn_limit, bufsize, cb, cb_arg); + tcp_conn_limit, bufsize, front->udp_buff, + cb, cb_arg); else if(ports->ftype == listen_type_ssl) { cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, - tcp_conn_limit, bufsize, cb, cb_arg); + tcp_conn_limit, bufsize, front->udp_buff, + cb, cb_arg); cp->ssl = sslctx; } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) @@ -1508,3 +1512,311 @@ void listen_start_accept(struct listen_dnsport* listen) } } +struct tcp_req_info* +tcp_req_info_create(struct sldns_buffer* spoolbuf) +{ + struct tcp_req_info* req = (struct tcp_req_info*)malloc(sizeof(*req)); + if(!req) { + log_err("malloc failure for new stream outoforder processing structure"); + return NULL; + } + memset(req, 0, sizeof(*req)); + req->spool_buffer = spoolbuf; + return req; +} + +void +tcp_req_info_delete(struct tcp_req_info* req) +{ + if(!req) return; + tcp_req_info_clear(req); + /* cp is pointer back to commpoint that owns this struct and + * called delete on us */ + /* spool_buffer is shared udp buffer, not deleted here */ + free(req); +} + +void tcp_req_info_clear(struct tcp_req_info* req) +{ + struct tcp_req_open_item* open, *nopen; + struct tcp_req_done_item* item, *nitem; + if(!req) return; + + /* free outstanding request mesh reply entries */ + open = req->open_req_list; + while(open) { + nopen = open->next; + mesh_state_remove_reply(open->mesh, open->mesh_state, req->cp); + free(open); + open = nopen; + } + req->open_req_list = NULL; + req->num_open_req = 0; + + /* free pending writable result packets */ + item = req->done_req_list; + while(item) { + nitem = item->next; + free(item->buf); + free(item); + item = nitem; + } + req->done_req_list = NULL; + req->num_done_req = 0; + req->read_is_closed = 0; +} + +void +tcp_req_info_remove_mesh_state(struct tcp_req_info* req, struct mesh_state* m) +{ + struct tcp_req_open_item* open, *prev = NULL; + if(!req || !m) return; + open = req->open_req_list; + while(open) { + if(open->mesh_state == m) { + struct tcp_req_open_item* next; + if(prev) prev->next = open->next; + else req->open_req_list = open->next; + /* caller has to manage the mesh state reply entry */ + next = open->next; + free(open); + req->num_open_req --; + + /* prev = prev; */ + open = next; + continue; + } + prev = open; + open = open->next; + } +} + +/** number of simultaneous requests a client can have */ +#define TCP_MAX_REQ_SIMULTANEOUS 10 + +/** setup listening for read or write */ +static void +tcp_req_info_setup_listen(struct tcp_req_info* req) +{ + int wr = 0; + int rd = 0; + + if(req->cp->tcp_byte_count != 0) { + /* cannot change, halfway through */ + return; + } + + if(!req->cp->tcp_is_reading) + wr = 1; + if(req->num_open_req + req->num_done_req < TCP_MAX_REQ_SIMULTANEOUS && + !req->read_is_closed) + rd = 1; + + if(wr) { + req->cp->tcp_is_reading = 0; + comm_point_start_listening(req->cp, -1, + req->cp->tcp_timeout_msec); + } else if(rd) { + req->cp->tcp_is_reading = 1; + comm_point_start_listening(req->cp, -1, + req->cp->tcp_timeout_msec); + } else { + comm_point_start_listening(req->cp, -1, + req->cp->tcp_timeout_msec); + comm_point_listen_for_rw(req->cp, 0, 0); + } +} + +/** remove first item from list of pending results */ +static struct tcp_req_done_item* +tcp_req_info_pop_done(struct tcp_req_info* req) +{ + struct tcp_req_done_item* item; + log_assert(req->num_done_req > 0 && req->done_req_list); + item = req->done_req_list; + req->done_req_list = req->done_req_list->next; + req->num_done_req --; + return item; +} + +/** Send given buffer and setup to write */ +static void +tcp_req_info_start_write_buf(struct tcp_req_info* req, uint8_t* buf, + size_t len) +{ + sldns_buffer_clear(req->cp->buffer); + sldns_buffer_write(req->cp->buffer, buf, len); + sldns_buffer_flip(req->cp->buffer); + + req->cp->tcp_is_reading = 0; /* we are now writing */ +} + +/** pick up the next result and start writing it to the channel */ +static void +tcp_req_pickup_next_result(struct tcp_req_info* req) +{ + if(req->num_done_req > 0) { + /* unlist the done item from the list of pending results */ + struct tcp_req_done_item* item = tcp_req_info_pop_done(req); + tcp_req_info_start_write_buf(req, item->buf, item->len); + free(item->buf); + free(item); + } +} + +/** the read channel has closed */ +int +tcp_req_info_handle_read_close(struct tcp_req_info* req) +{ + verbose(VERB_ALGO, "tcp channel read side closed %d", req->cp->fd); + if(req->num_done_req != 0) { + tcp_req_pickup_next_result(req); + tcp_req_info_setup_listen(req); + return 1; + } + if(req->num_open_req == 0 && req->num_done_req == 0) + return 0; + req->read_is_closed = 1; + tcp_req_info_setup_listen(req); + return 1; +} + +void +tcp_req_info_handle_writedone(struct tcp_req_info* req) +{ + /* back to reading state, we finished this write event */ + sldns_buffer_clear(req->cp->buffer); + req->cp->tcp_is_reading = 1; + /* see if another result needs writing */ + tcp_req_pickup_next_result(req); + + /* see if there is more to write, if not stop_listening for writing */ + /* see if new requests are allowed, if so, start_listening + * for reading */ + tcp_req_info_setup_listen(req); +} + +void +tcp_req_info_handle_readdone(struct tcp_req_info* req) +{ + struct comm_point* c = req->cp; + + /* we want to read up several requests, unless there are + * pending answers */ + + req->is_drop = 0; + req->is_reply = 0; + req->in_worker_handle = 1; + /* handle the current request, */ + fptr_ok(fptr_whitelist_comm_point(c->callback)); + if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { + req->in_worker_handle = 0; + /* there is an answer, put it up. It is already in the + * c->buffer, just send it. */ + /* since we were just reading a query, the channel is + * clear to write to */ + send_it: + c->tcp_is_reading = 0; + comm_point_start_listening(c, -1, c->tcp_timeout_msec); + return; + } + req->in_worker_handle = 0; + /* it should be waiting in the mesh for recursion. + * If mesh failed(formerr) and called commpoint_drop_reply. Then the + * mesh state has been cleared. */ + if(req->is_drop) { + return; + } + /* If mesh failed(mallocfail) and called commpoint_send_reply with + * something like servfail then we pick up that reply below. */ + if(req->is_reply) { + goto send_it; + } + + sldns_buffer_clear(req->cp->buffer); + /* if pending answers, pick up an answer and start sending it */ + tcp_req_pickup_next_result(req); + + /* if answers pending, start sending answers */ + /* read more requests if we can have more requests */ + tcp_req_info_setup_listen(req); +} + +int +tcp_req_info_add_meshstate(struct tcp_req_info* req, + struct mesh_area* mesh, struct mesh_state* m) +{ + struct tcp_req_open_item* item; + log_assert(req && mesh && m); + item = (struct tcp_req_open_item*)malloc(sizeof(*item)); + if(!item) return 0; + item->next = req->open_req_list; + item->mesh = mesh; + item->mesh_state = m; + req->open_req_list = item; + req->num_open_req++; + return 1; +} + +/** Add a result to the result list. At the end. */ +static int +tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len) +{ + struct tcp_req_done_item* last = NULL; + struct tcp_req_done_item* item; + /* find last element */ + last = req->done_req_list; + while(last && last->next) + last = last->next; + + /* create new element */ + item = (struct tcp_req_done_item*)malloc(sizeof(*item)); + if(!item) { + return 0; + } + item->next = NULL; + item->len = len; + item->buf = memdup(buf, len); + if(!item->buf) { + free(item); + return 0; + } + + /* link in */ + if(last) last->next = item; + else req->done_req_list = item; + req->num_done_req++; + return 1; +} + +void +tcp_req_info_send_reply(struct tcp_req_info* req) +{ + if(req->in_worker_handle) { + /* It is in the right buffer to answer straight away */ + req->is_reply = 1; + return; + } + /* now that the query has been handled, that mesh_reply entry + * should be removed, from the tcp_req_info list */ + /* TODO: find it, need mstate ptr */ + /* see if we can send it straight away (we are not doing + * anything else). If so, copy to buffer and start */ + if(req->cp->tcp_is_reading && req->cp->tcp_byte_count == 0) { + /* buffer is free, and was ready to read new query into, + * but we are now going to use it to send this answer */ + tcp_req_info_start_write_buf(req, + sldns_buffer_begin(req->spool_buffer), + sldns_buffer_limit(req->spool_buffer)); + /* switch to listen to write events */ + comm_point_stop_listening(req->cp); + comm_point_start_listening(req->cp, -1, + req->cp->tcp_timeout_msec); + return; + } + /* queue up the answer behind the others already pending */ + if(!tcp_req_info_add_result(req, sldns_buffer_begin(req->spool_buffer), + sldns_buffer_limit(req->spool_buffer))) { + log_err("malloc failure adding reply to stream result list"); + } +} diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 46b432d4b..653413bc6 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -237,4 +237,127 @@ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, */ int create_local_accept_sock(const char* path, int* noproto, int use_systemd); +/** + * TCP request info. List of requests outstanding on the channel, that + * are asked for but not yet answered back. + */ +struct tcp_req_info { + /** the TCP comm point for this. Its buffer is used for read/write */ + struct comm_point* cp; + /** the buffer to use to spool reply from mesh into, + * it can then be copied to the result list and written. + * it is a pointer to the shared udp buffer. */ + struct sldns_buffer* spool_buffer; + /** are we in worker_handle function call (for recursion callback)*/ + int in_worker_handle; + /** is the comm point dropped (by worker handle). + * That means we have to disconnect the channel. */ + int is_drop; + /** is the comm point set to send_reply (by mesh new client in worker + * handle), if so answer is available in c.buffer */ + int is_reply; + /** read channel has closed, just write pending results */ + int read_is_closed; + /** number of outstanding requests */ + int num_open_req; + /** list of outstanding requests */ + struct tcp_req_open_item* open_req_list; + /** number of pending writeable results */ + int num_done_req; + /** list of pending writable result packets, malloced one at a time */ + struct tcp_req_done_item* done_req_list; +}; + +/** + * List of open items in TCP channel + */ +struct tcp_req_open_item { + /** next in list */ + struct tcp_req_open_item* next; + /** the mesh area of the mesh_state */ + struct mesh_area* mesh; + /** the mesh state */ + struct mesh_state* mesh_state; +}; + +/** + * List of done items in TCP channel + */ +struct tcp_req_done_item { + /** next in list */ + struct tcp_req_done_item* next; + /** the buffer with packet contents */ + uint8_t* buf; + /** length of the buffer */ + size_t len; +}; + +/** + * Create tcp request info structure that keeps track of open + * requests on the TCP channel that are resolved at the same time, + * and the pending results that have to get written back to that client. + * @param spoolbuf: shared buffer + * @return new structure or NULL on alloc failure. + */ +struct tcp_req_info* tcp_req_info_create(struct sldns_buffer* spoolbuf); + +/** + * Delete tcp request structure. Called by owning commpoint. + * Removes mesh entry references and stored results from the lists. + * @param req: the tcp request info + */ +void tcp_req_info_delete(struct tcp_req_info* req); + +/** + * Clear tcp request structure. Removes list entries, sets it up ready + * for the next connection. + * @param req: tcp request info structure. + */ +void tcp_req_info_clear(struct tcp_req_info* req); + +/** + * Remove mesh state entry from list in tcp_req_info. + * caller has to manage the mesh state reply entry in the mesh state. + * @param req: the tcp req info that has the entry removed from the list. + * @param m: the state removed from the list. + */ +void tcp_req_info_remove_mesh_state(struct tcp_req_info* req, + struct mesh_state* m); + +/** + * Handle write done of the last result packet + */ +void tcp_req_info_handle_writedone(struct tcp_req_info* req); + +/** + * Handle read done of a new request from the client + */ +void tcp_req_info_handle_readdone(struct tcp_req_info* req); + +/** + * Add mesh state to the tcp req list of open requests. + * So the comm_reply can be removed off the mesh reply list when + * the tcp channel has to be closed (for other reasons then that that + * request was done, eg. channel closed by client or some format error. + * @param req: tcp req info structure. It keeps track of the simultaneous + * requests and results on a tcp (or TLS) channel. + * @param mesh: mesh area for the state. + * @param m: mesh state to add. + * @return 0 on failure (malloc failure). + */ +int tcp_req_info_add_meshstate(struct tcp_req_info* req, + struct mesh_area* mesh, struct mesh_state* m); + +/** + * Send reply on tcp simultaneous answer channel. May queue it up. + * @param req: request info structure. + */ +void tcp_req_info_send_reply(struct tcp_req_info* req); + +/** the read channel has closed + * @param req: request. remaining queries are looked up and answered. + * @return zero if nothing to do, just close the tcp. + */ +int tcp_req_info_handle_read_close(struct tcp_req_info* req); + #endif /* LISTEN_DNSPORT_H */ diff --git a/services/mesh.c b/services/mesh.c index 3d4403f24..01771af35 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -61,6 +61,7 @@ #include "services/localzone.h" #include "util/data/dname.h" #include "respip/respip.h" +#include "services/listen_dnsport.h" /** subtract timers and the values do not overflow or become negative */ static void @@ -429,6 +430,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, /* add reply to s */ if(!mesh_state_add_reply(s, edns, rep, qid, qflags, qinfo)) { log_err("mesh_new_client: out of memory; SERVFAIL"); + servfail_mem: if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, &s->s, NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch)) edns->opt_list = NULL; @@ -439,6 +441,12 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, mesh_state_delete(&s->s); return; } + if(rep->c->tcp_req_info) { + if(!tcp_req_info_add_meshstate(rep->c->tcp_req_info, mesh, s)) { + log_err("mesh_new_client: out of memory add tcpreqinfo"); + goto servfail_mem; + } + } /* update statistics */ if(was_detached) { log_assert(mesh->num_detached_states > 0); @@ -1031,11 +1039,14 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, * @param rcode: if not 0, error code. * @param rep: reply to send (or NULL if rcode is set). * @param r: reply entry + * @param r_buffer: buffer to use for reply entry. * @param prev: previous reply, already has its answer encoded in buffer. + * @param prev_buffer: buffer for previous reply. */ static void mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, - struct mesh_reply* r, struct mesh_reply* prev) + struct mesh_reply* r, struct sldns_buffer* r_buffer, + struct mesh_reply* prev, struct sldns_buffer* prev_buffer) { struct timeval end_time; struct timeval duration; @@ -1063,7 +1074,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, * and still reuse the previous answer if they are the same, but that * would be complicated and error prone for the relatively minor case. * So we err on the side of safety. */ - if(prev && prev->qflags == r->qflags && + if(prev && prev_buffer && prev->qflags == r->qflags && !prev->local_alias && !r->local_alias && prev->edns.edns_present == r->edns.edns_present && prev->edns.bits == r->edns.bits && @@ -1071,13 +1082,11 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list) == 0) { /* if the previous reply is identical to this one, fix ID */ - if(prev->query_reply.c->buffer != r->query_reply.c->buffer) - sldns_buffer_copy(r->query_reply.c->buffer, - prev->query_reply.c->buffer); - sldns_buffer_write_at(r->query_reply.c->buffer, 0, - &r->qid, sizeof(uint16_t)); - sldns_buffer_write_at(r->query_reply.c->buffer, 12, - r->qname, m->s.qinfo.qname_len); + if(prev_buffer != r_buffer) + sldns_buffer_copy(r_buffer, prev_buffer); + sldns_buffer_write_at(r_buffer, 0, &r->qid, sizeof(uint16_t)); + sldns_buffer_write_at(r_buffer, 12, r->qname, + m->s.qinfo.qname_len); comm_point_send_reply(&r->query_reply); } else if(rcode) { m->s.qinfo.qname = r->qname; @@ -1091,8 +1100,8 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, &r->edns, NULL, m->s.region)) r->edns.opt_list = NULL; } - error_encode(r->query_reply.c->buffer, rcode, &m->s.qinfo, - r->qid, r->qflags, &r->edns); + error_encode(r_buffer, rcode, &m->s.qinfo, r->qid, + r->qflags, &r->edns); comm_point_send_reply(&r->query_reply); } else { size_t udp_size = r->edns.udp_size; @@ -1108,16 +1117,15 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, m->s.env->cfg, r->query_reply.c, m->s.region) || !reply_info_answer_encode(&m->s.qinfo, rep, r->qid, - r->qflags, r->query_reply.c->buffer, 0, 1, - m->s.env->scratch, udp_size, &r->edns, - (int)(r->edns.bits & EDNS_DO), secure)) + r->qflags, r_buffer, 0, 1, m->s.env->scratch, + udp_size, &r->edns, (int)(r->edns.bits & EDNS_DO), + secure)) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, rep, LDNS_RCODE_SERVFAIL, &r->edns, NULL, m->s.region)) r->edns.opt_list = NULL; - error_encode(r->query_reply.c->buffer, - LDNS_RCODE_SERVFAIL, &m->s.qinfo, r->qid, - r->qflags, &r->edns); + error_encode(r_buffer, LDNS_RCODE_SERVFAIL, + &m->s.qinfo, r->qid, r->qflags, &r->edns); } r->edns = edns_bak; comm_point_send_reply(&r->query_reply); @@ -1132,19 +1140,17 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, timeval_add(&m->s.env->mesh->replies_sum_wait, &duration); timehist_insert(m->s.env->mesh->histogram, &duration); if(m->s.env->cfg->stat_extended) { - uint16_t rc = FLAGS_GET_RCODE(sldns_buffer_read_u16_at(r-> - query_reply.c->buffer, 2)); + uint16_t rc = FLAGS_GET_RCODE(sldns_buffer_read_u16_at( + r_buffer, 2)); if(secure) m->s.env->mesh->ans_secure++; m->s.env->mesh->ans_rcode[ rc ] ++; - if(rc == 0 && LDNS_ANCOUNT(sldns_buffer_begin(r-> - query_reply.c->buffer)) == 0) + if(rc == 0 && LDNS_ANCOUNT(sldns_buffer_begin(r_buffer)) == 0) m->s.env->mesh->ans_nodata++; } /* Log reply sent */ if(m->s.env->cfg->log_replies) { log_reply_info(0, &m->s.qinfo, &r->query_reply.addr, - r->query_reply.addrlen, duration, 0, - r->query_reply.c->buffer); + r->query_reply.addrlen, duration, 0, r_buffer); } } @@ -1152,6 +1158,7 @@ void mesh_query_done(struct mesh_state* mstate) { struct mesh_reply* r; struct mesh_reply* prev = NULL; + struct sldns_buffer* prev_buffer = NULL; struct mesh_cb* c; struct reply_info* rep = (mstate->s.return_msg? mstate->s.return_msg->rep:NULL); @@ -1180,9 +1187,15 @@ void mesh_query_done(struct mesh_state* mstate) if(mstate->s.is_drop) comm_point_drop_reply(&r->query_reply); else { + struct sldns_buffer* r_buffer = r->query_reply.c->buffer; + if(r->query_reply.c->tcp_req_info) + r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; mesh_send_reply(mstate, mstate->s.return_rcode, rep, - r, prev); + r, r_buffer, prev, prev_buffer); + if(r->query_reply.c->tcp_req_info) + tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); prev = r; + prev_buffer = r_buffer; } } mstate->replies_sent = 1; @@ -1613,3 +1626,36 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, m->prev->next = m->next; else *fp = m->next; } + +void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, + struct comm_point* cp) +{ + struct mesh_reply* n, *prev = NULL; + n = m->reply_list; + if(!n) return; /* nothing to remove, also no accounting needed */ + while(n) { + if(n->query_reply.c == cp) { + /* unlink it */ + if(prev) prev->next = n->next; + else m->reply_list = n->next; + /* delete it, but allocated in m region */ + mesh->num_reply_addrs--; + + /* prev = prev; */ + n = n->next; + continue; + } + prev = n; + n = n->next; + } + /* it was not detached (because it had a reply list), could be now */ + if(!m->reply_list && !m->cb_list + && m->super_set.count == 0) { + 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) { + log_assert(mesh->num_reply_states > 0); + mesh->num_reply_states--; + } +} diff --git a/services/mesh.h b/services/mesh.h index b4ce03e7e..e11c06bf4 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -633,4 +633,14 @@ void mesh_list_insert(struct mesh_state* m, struct mesh_state** fp, void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, struct mesh_state** lp); +/** + * Remove mesh reply entry from the reply entry list. Searches for + * the repinfo pointer. + * @param mesh: to update the counters. + * @param m: the mesh state. + * @param cp: the commpoint to remove from the list. + */ +void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, + struct comm_point* cp); + #endif /* SERVICES_MESH_H */ diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 777ed7355..5407999d5 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1802,4 +1802,18 @@ int outnet_tcp_connect(int ATTR_UNUSED(s), struct sockaddr_storage* ATTR_UNUSED( return 0; } +int tcp_req_info_add_meshstate(struct tcp_req_info* ATTR_UNUSED(req), + struct mesh_area* ATTR_UNUSED(mesh), struct mesh_state* ATTR_UNUSED(m)) +{ + log_assert(0); + return 0; +} + +void +tcp_req_info_remove_mesh_state(struct tcp_req_info* ATTR_UNUSED(req), + struct mesh_state* ATTR_UNUSED(m)) +{ + log_assert(0); +} + /*********** End of Dummy routines ***********/ diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post index e6dda048d..897f8cf70 100644 --- a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post @@ -8,3 +8,4 @@ . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID +cat unbound.log diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test index 67354d014..de4250c3e 100644 --- a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test @@ -6,9 +6,9 @@ # check what sort of netcat we have if nc -h 2>&1 | grep "q secs"; then - ncopt="-q 3 -w 2" + ncopt="-q 3 -i 2" else - ncopt="-w 2" + ncopt="-i 2" fi PRE="../.." diff --git a/util/netevent.c b/util/netevent.c index 373538041..58c65220a 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -50,6 +50,7 @@ #include "sldns/str2wire.h" #include "dnstap/dnstap.h" #include "dnscrypt/dnscrypt.h" +#include "services/listen_dnsport.h" #ifdef HAVE_OPENSSL_SSL_H #include #endif @@ -150,7 +151,8 @@ struct internal_signal { /** create a tcp handler with a parent */ static struct comm_point* comm_point_create_tcp_handler( struct comm_base *base, struct comm_point* parent, size_t bufsize, - comm_point_callback_type* callback, void* callback_arg); + struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, + void* callback_arg); /* -------- End of local definitions -------- */ @@ -988,7 +990,11 @@ tcp_callback_writer(struct comm_point* c) c->tcp_byte_count = 0; /* switch from listening(write) to listening(read) */ comm_point_stop_listening(c); - comm_point_start_listening(c, -1, -1); + if(c->tcp_req_info) { + tcp_req_info_handle_writedone(c->tcp_req_info); + } else { + comm_point_start_listening(c, -1, -1); + } } /** do the callback when reading is done */ @@ -1002,9 +1008,13 @@ tcp_callback_reader(struct comm_point* c) c->tcp_byte_count = 0; if(c->type == comm_tcp) comm_point_stop_listening(c); - fptr_ok(fptr_whitelist_comm_point(c->callback)); - if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { - comm_point_start_listening(c, -1, c->tcp_timeout_msec); + if(c->tcp_req_info) { + tcp_req_info_handle_readdone(c->tcp_req_info); + } else { + fptr_ok(fptr_whitelist_comm_point(c->callback)); + if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { + comm_point_start_listening(c, -1, c->tcp_timeout_msec); + } } } @@ -1163,6 +1173,8 @@ ssl_handle_read(struct comm_point* c) c->tcp_byte_count))) <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; /* shutdown, closed */ } else if(want == SSL_ERROR_WANT_READ) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); @@ -1205,6 +1217,8 @@ ssl_handle_read(struct comm_point* c) if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; /* shutdown, closed */ } else if(want == SSL_ERROR_WANT_READ) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); @@ -1365,9 +1379,11 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) /* read length bytes */ r = recv(fd,(void*)sldns_buffer_at(c->buffer,c->tcp_byte_count), sizeof(uint16_t)-c->tcp_byte_count, 0); - if(r == 0) + if(r == 0) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; - else if(r == -1) { + } else if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; @@ -1416,6 +1432,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) r = recv(fd, (void*)sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer), 0); if(r == 0) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; } else if(r == -1) { #ifndef USE_WINSOCK @@ -2523,7 +2541,8 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd, static struct comm_point* comm_point_create_tcp_handler(struct comm_base *base, struct comm_point* parent, size_t bufsize, - comm_point_callback_type* callback, void* callback_arg) + struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, + void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -2579,6 +2598,20 @@ comm_point_create_tcp_handler(struct comm_base *base, c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; + if(spoolbuf) { + c->tcp_req_info = tcp_req_info_create(spoolbuf); + if(!c->tcp_req_info) { + log_err("could not create tcp commpoint"); + sldns_buffer_free(c->buffer); + free(c->timeout); + free(c->ev); + free(c); + return NULL; + } + c->tcp_req_info->cp = c; + c->tcp_do_close = 1; + c->tcp_do_toggle_rw = 0; + } /* add to parent free list */ c->tcp_free = parent->tcp_free; parent->tcp_free = c; @@ -2590,6 +2623,9 @@ comm_point_create_tcp_handler(struct comm_base *base, { log_err("could not basetset tcphdl event"); parent->tcp_free = c->tcp_free; + tcp_req_info_delete(c->tcp_req_info); + sldns_buffer_free(c->buffer); + free(c->timeout); free(c->ev); free(c); return NULL; @@ -2600,7 +2636,8 @@ comm_point_create_tcp_handler(struct comm_base *base, struct comm_point* comm_point_create_tcp(struct comm_base *base, int fd, int num, int idle_timeout, struct tcl_list* tcp_conn_limit, size_t bufsize, - comm_point_callback_type* callback, void* callback_arg) + struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, + void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -2667,7 +2704,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, /* now prealloc the tcp handlers */ for(i=0; itcp_handlers[i] = comm_point_create_tcp_handler(base, - c, bufsize, callback, callback_arg); + c, bufsize, spoolbuf, callback, callback_arg); if(!c->tcp_handlers[i]) { comm_point_delete(c); return NULL; @@ -2949,6 +2986,8 @@ comm_point_close(struct comm_point* c) } } tcl_close_connection(c->tcl_addr); + if(c->tcp_req_info) + tcp_req_info_clear(c->tcp_req_info); /* close fd after removing from event lists, or epoll.. is messed up */ if(c->fd != -1 && !c->do_not_close) { if(c->type == comm_tcp || c->type == comm_http) { @@ -2992,6 +3031,9 @@ comm_point_delete(struct comm_point* c) sldns_buffer_free(c->dnscrypt_buffer); } #endif + if(c->tcp_req_info) { + tcp_req_info_delete(c->tcp_req_info); + } } ub_event_free(c->ev->ev); free(c->ev); @@ -3032,8 +3074,12 @@ comm_point_send_reply(struct comm_reply *repinfo) dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, repinfo->c->type, repinfo->c->buffer); #endif - comm_point_start_listening(repinfo->c, -1, - repinfo->c->tcp_timeout_msec); + 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); + } } } @@ -3046,6 +3092,8 @@ comm_point_drop_reply(struct comm_reply* repinfo) log_assert(repinfo->c->type != comm_tcp_accept); if(repinfo->c->type == comm_udp) return; + if(repinfo->c->tcp_req_info) + repinfo->c->tcp_req_info->is_drop = 1; reclaim_tcp_handler(repinfo->c); } diff --git a/util/netevent.h b/util/netevent.h index f6b6af688..d80c72b33 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -268,6 +268,9 @@ struct comm_point { /** the entry for the connection. */ struct tcl_addr* tcl_addr; + /** the structure to keep track of open requests on this channel */ + struct tcp_req_info* tcp_req_info; + #ifdef USE_MSG_FASTOPEN /** used to track if the sendto() call should be done when using TFO. */ int tcp_do_fastopen; @@ -455,6 +458,8 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, * @param idle_timeout: TCP idle timeout in ms. * @param tcp_conn_limit: TCP connection limit info. * @param bufsize: size of buffer to create for handlers. + * @param spoolbuf: shared spool buffer for tcp_req_info structures. + * or NULL to not create those structures in the tcp handlers. * @param callback: callback function pointer for TCP handlers. * @param callback_arg: will be passed to your callback function. * @return: returns the TCP listener commpoint. You can find the @@ -464,7 +469,8 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, */ struct comm_point* comm_point_create_tcp(struct comm_base* base, int fd, int num, int idle_timeout, struct tcl_list* tcp_conn_limit, - size_t bufsize, comm_point_callback_type* callback, void* callback_arg); + size_t bufsize, struct sldns_buffer* spoolbuf, + comm_point_callback_type* callback, void* callback_arg); /** * Create an outgoing TCP commpoint. No file descriptor is opened, left at -1. From ae9fe1a10ea265f8ef47ca5a331d29fd7218aaf4 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 14 Jan 2019 15:52:50 +0000 Subject: [PATCH 008/117] - streamtcp option -a send queries consecutively and prints answers as they arrive. - Fix for out of order processing administration quit cleanup. - unit test for tcp out of order processing. git-svn-id: file:///svn/unbound/trunk@5033 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 6 + services/listen_dnsport.c | 9 +- services/mesh.c | 8 +- testcode/streamtcp.1 | 5 + testcode/streamtcp.c | 69 +++- .../tcp_req_order.tdir/tcp_req_order.conf | 22 ++ testdata/tcp_req_order.tdir/tcp_req_order.dsc | 16 + .../tcp_req_order.tdir/tcp_req_order.post | 11 + testdata/tcp_req_order.tdir/tcp_req_order.pre | 31 ++ .../tcp_req_order.tdir/tcp_req_order.test | 341 ++++++++++++++++++ .../tcp_req_order.tdir/tcp_req_order.testns | 74 ++++ 11 files changed, 578 insertions(+), 14 deletions(-) create mode 100644 testdata/tcp_req_order.tdir/tcp_req_order.conf create mode 100644 testdata/tcp_req_order.tdir/tcp_req_order.dsc create mode 100644 testdata/tcp_req_order.tdir/tcp_req_order.post create mode 100644 testdata/tcp_req_order.tdir/tcp_req_order.pre create mode 100644 testdata/tcp_req_order.tdir/tcp_req_order.test create mode 100644 testdata/tcp_req_order.tdir/tcp_req_order.testns diff --git a/doc/Changelog b/doc/Changelog index 45e187e4c..2959b7f0e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +14 January 2018: Wouter + - streamtcp option -a send queries consecutively and prints answers + as they arrive. + - Fix for out of order processing administration quit cleanup. + - unit test for tcp out of order processing. + 11 January 2018: Wouter - Initial commit for out-of-order processing for TCP and TLS. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 311cf2dda..9cfc65b6a 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -72,6 +72,9 @@ /** number of queued TCP connections for listen() */ #define TCP_BACKLOG 256 +/** number of simultaneous requests a client can have */ +#define TCP_MAX_REQ_SIMULTANEOUS 32 + /** * Debug print of the getaddrinfo returned address. * @param addr: the address returned. @@ -1591,9 +1594,6 @@ tcp_req_info_remove_mesh_state(struct tcp_req_info* req, struct mesh_state* m) } } -/** number of simultaneous requests a client can have */ -#define TCP_MAX_REQ_SIMULTANEOUS 10 - /** setup listening for read or write */ static void tcp_req_info_setup_listen(struct tcp_req_info* req) @@ -1669,13 +1669,16 @@ int tcp_req_info_handle_read_close(struct tcp_req_info* req) { verbose(VERB_ALGO, "tcp channel read side closed %d", req->cp->fd); + /* if we still have results to write, pick up next and write it */ if(req->num_done_req != 0) { tcp_req_pickup_next_result(req); tcp_req_info_setup_listen(req); return 1; } + /* if nothing to do, this closes the connection */ if(req->num_open_req == 0 && req->num_done_req == 0) return 0; + /* otherwise, we must be waiting for dns resolve, wait with timeout */ req->read_is_closed = 1; tcp_req_info_setup_listen(req); return 1; diff --git a/services/mesh.c b/services/mesh.c index 01771af35..5ffef7714 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -740,9 +740,13 @@ mesh_state_cleanup(struct mesh_state* mstate) mesh = mstate->s.env->mesh; /* drop unsent replies */ if(!mstate->replies_sent) { - struct mesh_reply* rep; + struct mesh_reply* rep = mstate->reply_list; struct mesh_cb* cb; - for(rep=mstate->reply_list; rep; rep=rep->next) { + /* in tcp_req_info, the mstates linked are removed, but + * the reply_list is now NULL, so the remove-from-empty-list + * takes no time and also it does not do the mesh accounting */ + mstate->reply_list = NULL; + for(; rep; rep=rep->next) { comm_point_drop_reply(&rep->query_reply); mesh->num_reply_addrs--; } diff --git a/testcode/streamtcp.1 b/testcode/streamtcp.1 index 526c8e169..f02b168d2 100644 --- a/testcode/streamtcp.1 +++ b/testcode/streamtcp.1 @@ -44,6 +44,11 @@ Use UDP instead of TCP. No retries are attempted. .B \-n Do not wait for the answer. .TP +.B \-a +Print answers on arrival. This mean queries are sent in sequence without +waiting for answer but if answers arrive in this time they are printed out. +After sending queries the program waits and prints the remainder. +.TP .B \-s Use SSL. .TP diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index 497e3d288..668d6360b 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -73,6 +73,7 @@ static void usage(char* argv[]) printf("-f server what ipaddr@portnr to send the queries to\n"); printf("-u use UDP. No retries are attempted.\n"); printf("-n do not wait for an answer.\n"); + printf("-a print answers as they arrive.\n"); printf("-d secs delay after connection before sending query\n"); printf("-s use ssl\n"); printf("-h this help text\n"); @@ -203,13 +204,22 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf) uint16_t len; if(!udp) { if(ssl) { - if(SSL_read(ssl, (void*)&len, (int)sizeof(len)) <= 0) { + int sr = SSL_read(ssl, (void*)&len, (int)sizeof(len)); + if(sr == 0) { + printf("ssl: stream closed\n"); + exit(1); + } + if(sr < 0) { log_crypto_err("could not SSL_read"); exit(1); } } else { - if(recv(fd, (void*)&len, sizeof(len), 0) < - (ssize_t)sizeof(len)) { + ssize_t r = recv(fd, (void*)&len, sizeof(len), 0); + if(r == 0) { + printf("recv: stream closed\n"); + exit(1); + } + if(r < (ssize_t)sizeof(len)) { #ifndef USE_WINSOCK perror("read() len failed"); #else @@ -267,6 +277,37 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf) free(pktstr); } +/** see if we can receive any results */ +static void +print_any_answers(int fd, int udp, SSL* ssl, sldns_buffer* buf, + int* num_answers, int wait_all) +{ + /* see if the fd can read, if so, print one answer, repeat */ + int ret; + struct timeval tv, *waittv; + fd_set rfd; + while(*num_answers > 0) { + memset(&rfd, 0, sizeof(rfd)); + memset(&tv, 0, sizeof(tv)); + FD_ZERO(&rfd); + FD_SET(fd, &rfd); + if(wait_all) waittv = NULL; + else waittv = &tv; + ret = select(fd+1, &rfd, NULL, NULL, waittv); + if(ret < 0) { + if(errno == EINTR || errno == EAGAIN) continue; + perror("select() failed"); + exit(1); + } + if(ret == 0) { + if(wait_all) continue; + return; + } + (*num_answers) -= 1; + recv_one(fd, udp, ssl, buf); + } +} + static int get_random(void) { int r; @@ -278,12 +319,12 @@ static int get_random(void) /** send the TCP queries and print answers */ static void -send_em(const char* svr, int udp, int usessl, int noanswer, int delay, - int num, char** qs) +send_em(const char* svr, int udp, int usessl, int noanswer, int onarrival, + int delay, int num, char** qs) { sldns_buffer* buf = sldns_buffer_new(65553); int fd = open_svr(svr, udp); - int i; + int i, wait_results = 0; SSL_CTX* ctx = NULL; SSL* ssl = NULL; if(!buf) fatal_exit("out of memory"); @@ -325,9 +366,15 @@ send_em(const char* svr, int udp, int usessl, int noanswer, int delay, write_q(fd, udp, ssl, buf, (uint16_t)get_random(), qs[i], qs[i+1], qs[i+2]); /* print at least one result */ - if(!noanswer) + if(onarrival) { + wait_results += 1; /* one more answer to fetch */ + print_any_answers(fd, udp, ssl, buf, &wait_results, 0); + } else if(!noanswer) { recv_one(fd, udp, ssl, buf); + } } + if(onarrival) + print_any_answers(fd, udp, ssl, buf, &wait_results, 1); if(usessl) { SSL_shutdown(ssl); @@ -368,6 +415,7 @@ int main(int argc, char** argv) const char* svr = "127.0.0.1"; int udp = 0; int noanswer = 0; + int onarrival = 0; int usessl = 0; int delay = 0; @@ -394,11 +442,14 @@ int main(int argc, char** argv) if(argc == 1) { usage(argv); } - while( (c=getopt(argc, argv, "f:hnsud:")) != -1) { + while( (c=getopt(argc, argv, "af:hnsud:")) != -1) { switch(c) { case 'f': svr = optarg; break; + case 'a': + onarrival = 1; + break; case 'n': noanswer = 1; break; @@ -446,7 +497,7 @@ int main(int argc, char** argv) (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif } - send_em(svr, udp, usessl, noanswer, delay, argc, argv); + send_em(svr, udp, usessl, noanswer, onarrival, delay, argc, argv); checklock_stop(); #ifdef USE_WINSOCK WSACleanup(); diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.conf b/testdata/tcp_req_order.tdir/tcp_req_order.conf new file mode 100644 index 000000000..40d6f55c8 --- /dev/null +++ b/testdata/tcp_req_order.tdir/tcp_req_order.conf @@ -0,0 +1,22 @@ +server: + verbosity: 2 + # num-threads: 1 + 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" static + local-data: "www1.example.net. IN A 1.2.3.1" + local-data: "www2.example.net. IN A 1.2.3.2" + local-data: "www3.example.net. IN A 1.2.3.3" + tcp-upstream: yes + local-zone: "drop.net" deny + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.dsc b/testdata/tcp_req_order.tdir/tcp_req_order.dsc new file mode 100644 index 000000000..f24e90073 --- /dev/null +++ b/testdata/tcp_req_order.tdir/tcp_req_order.dsc @@ -0,0 +1,16 @@ +BaseName: tcp_req_order +Version: 1.0 +Description: Test tcp request order processing. +CreationDate: Mon Jan 14 13:34:00 CET 2018 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: tcp_req_order.pre +Post: tcp_req_order.post +Test: tcp_req_order.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.post b/testdata/tcp_req_order.tdir/tcp_req_order.post new file mode 100644 index 000000000..43372764c --- /dev/null +++ b/testdata/tcp_req_order.tdir/tcp_req_order.post @@ -0,0 +1,11 @@ +# #-- tcp_req_order.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +cat unbound.log diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.pre b/testdata/tcp_req_order.tdir/tcp_req_order.pre new file mode 100644 index 000000000..b2191f065 --- /dev/null +++ b/testdata/tcp_req_order.tdir/tcp_req_order.pre @@ -0,0 +1,31 @@ +# #-- tcp_req_order.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 +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT tcp_req_order.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_order.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -vvvv -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/tcp_req_order.tdir/tcp_req_order.test b/testdata/tcp_req_order.tdir/tcp_req_order.test new file mode 100644 index 000000000..ecbde306f --- /dev/null +++ b/testdata/tcp_req_order.tdir/tcp_req_order.test @@ -0,0 +1,341 @@ +# #-- tcp_req_order.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# this test query should just work (server is up) +echo "> query www1.example.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +echo "OK" + +# multiple requests (from localdata) +echo "> query www1.example.net. www2.example.net. www3.example.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# out of order requests, the example.com elements take 2 seconds to wait. +echo "" +echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www.example.com" outfile | grep "10.20.30.40"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.com" outfile | grep "10.20.30.42"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# out of order requests, the example.com elements take 2 seconds to wait. +# www.example.com present twice, answered twice. +echo "" +echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www.example.com" outfile | grep "10.20.30.40"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# out of order requests, the example.com elements take 2 seconds to wait. +# www3.example.com present twice, answered twice. +echo "" +echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.com" outfile | grep "10.20.30.43"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +echo "" +echo "> query www4.example.com. www3.example.net." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www4.example.com" outfile | grep "10.20.30.44"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +echo "" +echo "> query a1.example.com. - a100.example.com." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN a91.a.example.com. A IN a92.a.example.com. A IN a93.a.example.com. A IN a94.a.example.com. A IN a95.a.example.com. A IN a96.a.example.com. A IN a97.a.example.com. A IN a98.a.example.com. A IN a99.a.example.com. A IN a100.a.example.com. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +grep "a.example.com. IN A" outfile + +echo "" +echo "> query www5.example.net. www3.example.net. www.drop.net." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN www3.example.net A IN www.drop.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "OK" +exit 0 diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.testns b/testdata/tcp_req_order.tdir/tcp_req_order.testns new file mode 100644 index 000000000..c53941b67 --- /dev/null +++ b/testdata/tcp_req_order.tdir/tcp_req_order.testns @@ -0,0 +1,74 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +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 NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.45 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.46 +ENTRY_END + +; lots of noerror/nodata answers for other queries (a.. queries) +ENTRY_BEGIN +MATCH opcode qtype subdomain +REPLY QR AA NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +a.example.com. IN A +SECTION AUTHORITY +example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 +ENTRY_END From bb480068fa370c8ecd38a3839833060081c8cbae Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 15 Jan 2019 09:24:00 +0000 Subject: [PATCH 009/117] - In the out of order processing, reset byte count for (potential) partial read. git-svn-id: file:///svn/unbound/trunk@5034 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ services/listen_dnsport.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 2959b7f0e..09e4d96c0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +15 January 2018: Wouter + - In the out of order processing, reset byte count for (potential) + partial read. + 14 January 2018: Wouter - streamtcp option -a send queries consecutively and prints answers as they arrive. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 9cfc65b6a..7db018f6d 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1669,6 +1669,8 @@ int tcp_req_info_handle_read_close(struct tcp_req_info* req) { verbose(VERB_ALGO, "tcp channel read side closed %d", req->cp->fd); + /* reset byte count for (potential) partial read */ + req->cp->tcp_byte_count = 0; /* if we still have results to write, pick up next and write it */ if(req->num_done_req != 0) { tcp_req_pickup_next_result(req); From 0d2efc3f3f1e3e6fff4e660867bb6efb1dea060a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 15 Jan 2019 10:27:00 +0000 Subject: [PATCH 010/117] - Review fixes in out of order processing. git-svn-id: file:///svn/unbound/trunk@5035 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/listen_dnsport.c | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 09e4d96c0..04cd0461e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 15 January 2018: Wouter - In the out of order processing, reset byte count for (potential) partial read. + - Review fixes in out of order processing. 14 January 2018: Wouter - streamtcp option -a send queries consecutively and prints answers diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 7db018f6d..b931d17b3 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1691,6 +1691,11 @@ tcp_req_info_handle_writedone(struct tcp_req_info* req) { /* back to reading state, we finished this write event */ sldns_buffer_clear(req->cp->buffer); + if(req->num_done_req == 0 && req->read_is_closed) { + /* no more to write and nothing to read, close it */ + comm_point_drop_reply(&req->cp->repinfo); + return; + } req->cp->tcp_is_reading = 1; /* see if another result needs writing */ tcp_req_pickup_next_result(req); @@ -1712,7 +1717,10 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req) req->is_drop = 0; req->is_reply = 0; req->in_worker_handle = 1; - /* handle the current request, */ + /* handle the current request */ + /* this calls the worker handle request routine that could give + * a cache response, or localdata response, or drop the reply, + * or schedule a mesh entry for later */ fptr_ok(fptr_whitelist_comm_point(c->callback)); if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { req->in_worker_handle = 0; @@ -1727,9 +1735,16 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req) } req->in_worker_handle = 0; /* it should be waiting in the mesh for recursion. - * If mesh failed(formerr) and called commpoint_drop_reply. Then the - * mesh state has been cleared. */ + * If mesh failed to add a new entry and called commpoint_drop_reply. + * Then the mesh state has been cleared. */ if(req->is_drop) { + /* we can now call drop_reply without recursing into ourselves + * whilst in the callback */ + /* we have to close the stream because there is no reply, + * no servfail to send, but the query needs an action, for + * a stream that is close the connection */ + sldns_buffer_clear(c->buffer); + comm_point_drop_reply(&c->repinfo); return; } /* If mesh failed(mallocfail) and called commpoint_send_reply with @@ -1738,7 +1753,7 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req) goto send_it; } - sldns_buffer_clear(req->cp->buffer); + sldns_buffer_clear(c->buffer); /* if pending answers, pick up an answer and start sending it */ tcp_req_pickup_next_result(req); From ec6f4bab46dccd519553ba38c6cffc0e1c7238c5 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 15 Jan 2019 13:42:22 +0000 Subject: [PATCH 011/117] comment fixes after review. git-svn-id: file:///svn/unbound/trunk@5036 be551aaa-1e26-0410-a405-d3ace91eadb9 --- services/listen_dnsport.c | 5 +++-- services/listen_dnsport.h | 4 +++- services/mesh.c | 2 ++ services/mesh.h | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index b931d17b3..711319e16 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1818,8 +1818,9 @@ tcp_req_info_send_reply(struct tcp_req_info* req) return; } /* now that the query has been handled, that mesh_reply entry - * should be removed, from the tcp_req_info list */ - /* TODO: find it, need mstate ptr */ + * should be removed, from the tcp_req_info list, + * the mesh state cleanup removes then with region_cleanup and + * replies_sent true. */ /* see if we can send it straight away (we are not doing * anything else). If so, copy to buffer and start */ if(req->cp->tcp_is_reading && req->cp->tcp_byte_count == 0) { diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 653413bc6..07cb64d17 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -326,11 +326,13 @@ void tcp_req_info_remove_mesh_state(struct tcp_req_info* req, /** * Handle write done of the last result packet + * @param req: the tcp req info. */ void tcp_req_info_handle_writedone(struct tcp_req_info* req); /** * Handle read done of a new request from the client + * @param req: the tcp req info. */ void tcp_req_info_handle_readdone(struct tcp_req_info* req); @@ -338,7 +340,7 @@ void tcp_req_info_handle_readdone(struct tcp_req_info* req); * Add mesh state to the tcp req list of open requests. * So the comm_reply can be removed off the mesh reply list when * the tcp channel has to be closed (for other reasons then that that - * request was done, eg. channel closed by client or some format error. + * request was done, eg. channel closed by client or some format error). * @param req: tcp req info structure. It keeps track of the simultaneous * requests and results on a tcp (or TLS) channel. * @param mesh: mesh area for the state. diff --git a/services/mesh.c b/services/mesh.c index 5ffef7714..bee0f76a4 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1636,6 +1636,8 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, { struct mesh_reply* n, *prev = NULL; n = m->reply_list; + /* when in mesh_cleanup, it sets the reply_list to NULL, so that + * there is no accounting twice */ if(!n) return; /* nothing to remove, also no accounting needed */ while(n) { if(n->query_reply.c == cp) { diff --git a/services/mesh.h b/services/mesh.h index e11c06bf4..6946eb5fa 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -635,10 +635,10 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, /** * Remove mesh reply entry from the reply entry list. Searches for - * the repinfo pointer. + * the comm_point pointer. * @param mesh: to update the counters. * @param m: the mesh state. - * @param cp: the commpoint to remove from the list. + * @param cp: the comm_point to remove from the list. */ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, struct comm_point* cp); From f30fe713958b236fbba84be92953d242ec3677cb Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 16 Jan 2019 10:23:13 +0000 Subject: [PATCH 012/117] - Get ready for the DNS flag day: remove EDNS lame procedure, do not re-query without EDNS after timeout. git-svn-id: file:///svn/unbound/trunk@5037 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 +++ services/outside_network.c | 30 +---------------------- services/outside_network.h | 2 -- testdata/edns_cache.tdir/edns_cache.conf | 3 --- testdata/edns_cache.tdir/edns_cache.stub1 | 11 --------- testdata/edns_cache.tdir/edns_cache.stub2 | 6 ++--- testdata/edns_cache.tdir/edns_cache.test | 4 +-- testdata/edns_lame.tdir/edns_lame.conf | 15 ------------ testdata/edns_lame.tdir/edns_lame.dsc | 16 ------------ testdata/edns_lame.tdir/edns_lame.post | 10 -------- testdata/edns_lame.tdir/edns_lame.pre | 30 ----------------------- testdata/edns_lame.tdir/edns_lame.test | 24 ------------------ testdata/edns_lame.tdir/edns_lame.testns | 14 ----------- 13 files changed, 10 insertions(+), 159 deletions(-) delete mode 100644 testdata/edns_lame.tdir/edns_lame.conf delete mode 100644 testdata/edns_lame.tdir/edns_lame.dsc delete mode 100644 testdata/edns_lame.tdir/edns_lame.post delete mode 100644 testdata/edns_lame.tdir/edns_lame.pre delete mode 100644 testdata/edns_lame.tdir/edns_lame.test delete mode 100644 testdata/edns_lame.tdir/edns_lame.testns diff --git a/doc/Changelog b/doc/Changelog index 04cd0461e..faae871b2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +16 January 2018: Ralph + - Get ready for the DNS flag day: remove EDNS lame procedure, do not + re-query without EDNS after timeout. + 15 January 2018: Wouter - In the out of order processing, reset byte count for (potential) partial read. diff --git a/services/outside_network.c b/services/outside_network.c index 1badb5116..8ed5de375 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1506,7 +1506,6 @@ serviced_delete(struct serviced_query* sq) /* clear up the pending query */ if(sq->status == serviced_query_UDP_EDNS || sq->status == serviced_query_UDP || - sq->status == serviced_query_PROBE_EDNS || sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) { struct pending* p = (struct pending*)sq->pending; @@ -1633,15 +1632,7 @@ serviced_udp_send(struct serviced_query* sq, sldns_buffer* buff) sq->last_rtt = rtt; verbose(VERB_ALGO, "EDNS lookup known=%d vs=%d", edns_lame_known, vs); if(sq->status == serviced_initial) { - if(edns_lame_known == 0 && rtt > 5000 && rtt < 10001) { - /* perform EDNS lame probe - check if server is - * EDNS lame (EDNS queries to it are dropped) */ - verbose(VERB_ALGO, "serviced query: send probe to see " - " if use of EDNS causes timeouts"); - /* even 700 msec may be too small */ - rtt = 1000; - sq->status = serviced_query_PROBE_EDNS; - } else if(vs != -1) { + if(vs != -1) { sq->status = serviced_query_UDP_EDNS; } else { sq->status = serviced_query_UDP; @@ -1978,12 +1969,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_PROBE_EDNS) { - /* non-EDNS probe failed; we do not know its status, - * keep trying with EDNS, timeout may not be caused - * by EDNS. */ - sq->status = serviced_query_UDP_EDNS; - } if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000) { /* fallback to 1480/1280 */ sq->status = serviced_query_UDP_EDNS_FRAG; @@ -2047,18 +2032,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, serviced_callbacks(sq, NETEVENT_CLOSED, c, rep); } return 0; - } else if(sq->status == serviced_query_PROBE_EDNS) { - /* probe without EDNS succeeds, so we conclude that this - * host likely has EDNS packets dropped */ - log_addr(VERB_DETAIL, "timeouts, concluded that connection to " - "host drops EDNS packets", &sq->addr, sq->addrlen); - /* only store noEDNS in cache if domain is noDNSSEC */ - if(!sq->want_dnssec) - if(!infra_edns_update(outnet->infra, &sq->addr, sq->addrlen, - sq->zone, sq->zonelen, -1, (time_t)now.tv_sec)) { - log_err("Out of memory caching no edns for host"); - } - sq->status = serviced_query_UDP; } else if(sq->status == serviced_query_UDP_EDNS && !sq->edns_lame_known) { /* now we know that edns queries received answers store that */ @@ -2539,7 +2512,6 @@ serviced_get_mem(struct serviced_query* sq) s += sizeof(*sb); if(sq->status == serviced_query_UDP_EDNS || sq->status == serviced_query_UDP || - sq->status == serviced_query_PROBE_EDNS || sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) { s += sizeof(struct pending); diff --git a/services/outside_network.h b/services/outside_network.h index 01a307417..48ef03edb 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -359,8 +359,6 @@ struct serviced_query { serviced_query_TCP_EDNS, /** TCP without EDNS sent */ serviced_query_TCP, - /** probe to test EDNS lameness (EDNS is dropped) */ - serviced_query_PROBE_EDNS, /** probe to test noEDNS0 (EDNS gives FORMERRorNOTIMP) */ serviced_query_UDP_EDNS_fallback, /** probe to test TCP noEDNS0 (EDNS gives FORMERRorNOTIMP) */ diff --git a/testdata/edns_cache.tdir/edns_cache.conf b/testdata/edns_cache.tdir/edns_cache.conf index 101b9751f..baeee5f54 100644 --- a/testdata/edns_cache.tdir/edns_cache.conf +++ b/testdata/edns_cache.tdir/edns_cache.conf @@ -12,9 +12,6 @@ server: stub-zone: name: "example.net" stub-addr: "127.0.0.1@@STUB2_PORT@" -stub-zone: - name: "example.com" - stub-addr: "127.0.0.1@@STUB2_PORT@" # a k a root hints stub-zone: name: "." diff --git a/testdata/edns_cache.tdir/edns_cache.stub1 b/testdata/edns_cache.tdir/edns_cache.stub1 index 23653c3b3..2cce1bd65 100644 --- a/testdata/edns_cache.tdir/edns_cache.stub1 +++ b/testdata/edns_cache.tdir/edns_cache.stub1 @@ -17,17 +17,6 @@ SECTION ADDITIONAL root.server. IN A 127.0.0.1 ENTRY_END -; referral to example.com -ENTRY_BEGIN -MATCH opcode subdomain -REPLY QR NOERROR -ADJUST copy_id copy_query -SECTION QUESTION -example.com. IN A -SECTION AUTHORITY -example.com. IN NS netdns.example.net. -ENTRY_END - ; referral to example.net ENTRY_BEGIN MATCH opcode subdomain diff --git a/testdata/edns_cache.tdir/edns_cache.stub2 b/testdata/edns_cache.tdir/edns_cache.stub2 index f70eb98e7..549560aa0 100644 --- a/testdata/edns_cache.tdir/edns_cache.stub2 +++ b/testdata/edns_cache.tdir/edns_cache.stub2 @@ -1,5 +1,5 @@ ; nameserver test file -$ORIGIN example.com. +$ORIGIN example.net. $TTL 3600 ENTRY_BEGIN @@ -7,9 +7,9 @@ MATCH opcode qtype qname noedns REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION -www.example.com. IN A +www.example.net. IN A SECTION ANSWER -www.example.com. IN A 10.20.30.40 +www.example.net. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN diff --git a/testdata/edns_cache.tdir/edns_cache.test b/testdata/edns_cache.tdir/edns_cache.test index 53931ded2..d154d5277 100644 --- a/testdata/edns_cache.tdir/edns_cache.test +++ b/testdata/edns_cache.tdir/edns_cache.test @@ -11,8 +11,8 @@ PRE="../.." # do the test echo "> dig netdns.example.net." dig @::1 -p $UNBOUND_PORT netdns.example.net. | tee outfile -echo "> dig www.example.com." -dig @::1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> dig www.example.net." +dig @::1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> cat stub1.log" cat stub1.log echo "> cat stub2.log" diff --git a/testdata/edns_lame.tdir/edns_lame.conf b/testdata/edns_lame.tdir/edns_lame.conf deleted file mode 100644 index 9cd19c0d9..000000000 --- a/testdata/edns_lame.tdir/edns_lame.conf +++ /dev/null @@ -1,15 +0,0 @@ -server: - verbosity: 2 - # num-threads: 1 - interface: 127.0.0.1 - port: @PORT@ - use-syslog: no - directory: "" - pidfile: "unbound.pid" - chroot: "" - username: "" - do-not-query-localhost: no -forward-zone: - name: "." - forward-addr: "127.0.0.1@@TOPORT@" - diff --git a/testdata/edns_lame.tdir/edns_lame.dsc b/testdata/edns_lame.tdir/edns_lame.dsc deleted file mode 100644 index 83f972562..000000000 --- a/testdata/edns_lame.tdir/edns_lame.dsc +++ /dev/null @@ -1,16 +0,0 @@ -BaseName: edns_lame -Version: 1.0 -Description: Forward UDP but EDNS packets time out -CreationDate: Mon Sep 29 16:39:15 CEST 2008 -Maintainer: dr. W.C.A. Wijngaards -Category: -Component: -CmdDepends: -Depends: -Help: -Pre: edns_lame.pre -Post: edns_lame.post -Test: edns_lame.test -AuxFiles: -Passed: -Failure: diff --git a/testdata/edns_lame.tdir/edns_lame.post b/testdata/edns_lame.tdir/edns_lame.post deleted file mode 100644 index f71e3c424..000000000 --- a/testdata/edns_lame.tdir/edns_lame.post +++ /dev/null @@ -1,10 +0,0 @@ -# #-- edns_lame.post --# -# source the master var file when it's there -[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master -# source the test var file when it's there -[ -f .tpkg.var.test ] && source .tpkg.var.test -# -# do your teardown here -. ../common.sh -kill_pid $FWD_PID -kill_pid $UNBOUND_PID diff --git a/testdata/edns_lame.tdir/edns_lame.pre b/testdata/edns_lame.tdir/edns_lame.pre deleted file mode 100644 index d8c2c076f..000000000 --- a/testdata/edns_lame.tdir/edns_lame.pre +++ /dev/null @@ -1,30 +0,0 @@ -# #-- edns_lame.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 -get_random_port 2 -UNBOUND_PORT=$RND_PORT -FWD_PORT=$(($RND_PORT + 1)) -echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test -echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test - -# start forwarder -get_ldns_testns -$LDNS_TESTNS -p $FWD_PORT -v edns_lame.testns >fwd.log 2>&1 & -FWD_PID=$! -echo "FWD_PID=$FWD_PID" >> .tpkg.var.test - -# make config file -sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < edns_lame.conf > ub.conf -# start unbound in the background -PRE="../.." -$PRE/unbound -d -vvvv -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/edns_lame.tdir/edns_lame.test b/testdata/edns_lame.tdir/edns_lame.test deleted file mode 100644 index 92d669267..000000000 --- a/testdata/edns_lame.tdir/edns_lame.test +++ /dev/null @@ -1,24 +0,0 @@ -# #-- edns_lame.test --# -# source the master var file when it's there -[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master -# use .tpkg.var.test for in test variable passing -[ -f .tpkg.var.test ] && source .tpkg.var.test - -PRE="../.." -# do the test -echo "> dig www.example.com." -dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile -echo "> dig www.example.com." -dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile -echo "> cat logfiles" -cat fwd.log -cat unbound.log -echo "> check answer" -if grep "10.20.30.40" outfile; then - echo "OK" -else - echo "Not OK" - exit 1 -fi - -exit 0 diff --git a/testdata/edns_lame.tdir/edns_lame.testns b/testdata/edns_lame.tdir/edns_lame.testns deleted file mode 100644 index cd248c3b3..000000000 --- a/testdata/edns_lame.tdir/edns_lame.testns +++ /dev/null @@ -1,14 +0,0 @@ -; nameserver test file -$ORIGIN example.com. -$TTL 3600 - -ENTRY_BEGIN -MATCH opcode qtype qname noedns -REPLY QR AA NOERROR -ADJUST copy_id -SECTION QUESTION -www IN A -SECTION ANSWER -www IN A 10.20.30.40 -ENTRY_END - From 762920232a5d8e6ddfac5ab9eaa14a09d7d089e2 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 17 Jan 2019 08:50:25 +0000 Subject: [PATCH 013/117] - For caps-for-id fallback, use the whitelist to avoid timeout starting a fallback sequence for it. git-svn-id: file:///svn/unbound/trunk@5038 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ iterator/iterator.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index faae871b2..73e2d3cfa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +17 January 2018: Wouter + - For caps-for-id fallback, use the whitelist to avoid timeout + starting a fallback sequence for it. + 16 January 2018: Ralph - Get ready for the DNS flag day: remove EDNS lame procedure, do not re-query without EDNS after timeout. diff --git a/iterator/iterator.c b/iterator/iterator.c index f66381b40..7a62e1281 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -3571,7 +3571,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, if(event == module_event_noreply || event == module_event_error) { if(event == module_event_noreply && iq->sent_count >= 3 && qstate->env->cfg->use_caps_bits_for_id && - !iq->caps_fallback) { + !iq->caps_fallback && !is_caps_whitelisted(ie, iq)) { /* start fallback */ iq->caps_fallback = 1; iq->caps_server = 0; From 19a3907657003f6bfccfca4e3d2297c8cabd0c8a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 17 Jan 2019 08:58:09 +0000 Subject: [PATCH 014/117] - increase mesh max activation count for capsforid long fetches. git-svn-id: file:///svn/unbound/trunk@5039 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/mesh.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 73e2d3cfa..25a032294 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 17 January 2018: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout starting a fallback sequence for it. + - increase mesh max activation count for capsforid long fetches. 16 January 2018: Ralph - Get ready for the DNS flag day: remove EDNS lame procedure, do not diff --git a/services/mesh.h b/services/mesh.h index 6946eb5fa..a2622844b 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -65,7 +65,7 @@ struct respip_client_info; * Maximum number of mesh state activations. Any more is likely an * infinite loop in the module. It is then terminated. */ -#define MESH_MAX_ACTIVATION 3000 +#define MESH_MAX_ACTIVATION 10000 /** * Max number of references-to-references-to-references.. search size. From 9087b182349c5d4f145b6737b06bb8607c85fc8b Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 09:36:01 +0000 Subject: [PATCH 015/117] - Fix tcp idle timeout test, for difference in the tcp reply code. git-svn-id: file:///svn/unbound/trunk@5040 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 25a032294..58c196b5a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +21 January 2018: Wouter + - Fix tcp idle timeout test, for difference in the tcp reply code. + 17 January 2018: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout starting a fallback sequence for it. diff --git a/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns b/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns index 14647723f..2e240b087 100644 --- a/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns +++ b/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns @@ -13,7 +13,7 @@ ENTRY_END ENTRY_BEGIN MATCH TCP opcode qtype qname REPLY QR AA NOERROR -ADJUST copy_id sleep=2 +ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER From f7d63b09276b485d8623f5067b3bbef214211b45 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 13:04:08 +0000 Subject: [PATCH 016/117] - Unit test for tcp request reorder and timeouts. git-svn-id: file:///svn/unbound/trunk@5041 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + .../tcp_req_timeout.tdir/tcp_req_timeout.conf | 22 +++ .../tcp_req_timeout.tdir/tcp_req_timeout.dsc | 16 +++ .../tcp_req_timeout.tdir/tcp_req_timeout.post | 12 ++ .../tcp_req_timeout.tdir/tcp_req_timeout.pre | 31 ++++ .../tcp_req_timeout.tdir/tcp_req_timeout.test | 136 ++++++++++++++++++ .../tcp_req_timeout.testns | 63 ++++++++ 7 files changed, 281 insertions(+) create mode 100644 testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf create mode 100644 testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc create mode 100644 testdata/tcp_req_timeout.tdir/tcp_req_timeout.post create mode 100644 testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre create mode 100644 testdata/tcp_req_timeout.tdir/tcp_req_timeout.test create mode 100644 testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns diff --git a/doc/Changelog b/doc/Changelog index 58c196b5a..19da42594 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. + - Unit test for tcp request reorder and timeouts. 17 January 2018: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf new file mode 100644 index 000000000..45db9e17f --- /dev/null +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf @@ -0,0 +1,22 @@ +server: + verbosity: 2 + # num-threads: 1 + 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" static + local-data: "www1.example.net. IN A 1.2.3.1" + local-data: "www2.example.net. IN A 1.2.3.2" + local-data: "www3.example.net. IN A 1.2.3.3" + tcp-idle-timeout: 2000 + local-zone: "drop.net" deny + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc new file mode 100644 index 000000000..fc611555a --- /dev/null +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc @@ -0,0 +1,16 @@ +BaseName: tcp_req_order +Version: 1.0 +Description: Test tcp request order timeouts. +CreationDate: Mon Jan 21 11:23:00 CET 2018 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: tcp_req_order.pre +Post: tcp_req_order.post +Test: tcp_req_order.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post new file mode 100644 index 000000000..7e8309238 --- /dev/null +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post @@ -0,0 +1,12 @@ +# #-- tcp_req_timeout.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +cat fwd.log +cat unbound.log diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre new file mode 100644 index 000000000..d6cfe97ae --- /dev/null +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre @@ -0,0 +1,31 @@ +# #-- tcp_req_timeout.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 +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT tcp_req_timeout.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_timeout.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -vvvv -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/tcp_req_timeout.tdir/tcp_req_timeout.test b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.test new file mode 100644 index 000000000..831f8a854 --- /dev/null +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.test @@ -0,0 +1,136 @@ +# #-- tcp_req_timeout.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) +# check what sort of netcat we have +if nc -h 2>&1 | grep "q secs"; then + ncopt="-q 3 -i 4" +else + ncopt="-i 4" +fi + +# this test query should just work (server is up) +echo "> query www1.example.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +echo "OK" + +# multiple requests that are answered immediately and then the timeout +echo "> query www1.example.net. www2.example.net. www3.example.net. www.example.com." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN www.example.com. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "stream closed" outfile; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# multiple requests that are waiting for answers and then the timeout +echo "> query www2.example.com. www2.example.com. www3.example.com." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN www2.example.com A IN www3.example.com A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "stream closed" outfile; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# wait a bit +sleep 2 + +# echo a couple requests to the other side and then wait for the timeout. +# this creates waiting answers in the reply queue. +echo "> nc www.example.net www2.example.net www3.example.net" +( echo "0021eb410100000100000000000003777777076578616d706c65036e657400000100010022eb41010000010000000000000477777732076578616d706c65036e657400000100010022eb41010000010000000000000477777733076578616d706c65036e65740000010001" | xxd -r -p ; sleep 10 ; echo "") | nc $ncopt 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile + +echo "OK" +exit 0 diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns new file mode 100644 index 000000000..694600974 --- /dev/null +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns @@ -0,0 +1,63 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=4 +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 NOERROR +ADJUST copy_id sleep=4 +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=4 +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.45 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.46 +ENTRY_END From 068374740c7dbe2f6afa3bad943bb8c77ab94658 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 13:26:21 +0000 Subject: [PATCH 017/117] - Unit tests for ssl out of order processing. git-svn-id: file:///svn/unbound/trunk@5042 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + .../ssl_req_order.tdir/ssl_req_order.conf | 25 ++ testdata/ssl_req_order.tdir/ssl_req_order.dsc | 16 + .../ssl_req_order.tdir/ssl_req_order.post | 11 + testdata/ssl_req_order.tdir/ssl_req_order.pre | 31 ++ .../ssl_req_order.tdir/ssl_req_order.test | 341 ++++++++++++++++++ .../ssl_req_order.tdir/ssl_req_order.testns | 74 ++++ .../ssl_req_order.tdir/unbound_server.key | 15 + .../ssl_req_order.tdir/unbound_server.pem | 11 + .../ssl_req_timeout.tdir/ssl_req_timeout.conf | 25 ++ .../ssl_req_timeout.tdir/ssl_req_timeout.dsc | 16 + .../ssl_req_timeout.tdir/ssl_req_timeout.post | 12 + .../ssl_req_timeout.tdir/ssl_req_timeout.pre | 31 ++ .../ssl_req_timeout.tdir/ssl_req_timeout.test | 136 +++++++ .../ssl_req_timeout.testns | 63 ++++ .../ssl_req_timeout.tdir/unbound_server.key | 15 + .../ssl_req_timeout.tdir/unbound_server.pem | 11 + .../tcp_req_timeout.tdir/tcp_req_timeout.dsc | 8 +- 18 files changed, 838 insertions(+), 4 deletions(-) create mode 100644 testdata/ssl_req_order.tdir/ssl_req_order.conf create mode 100644 testdata/ssl_req_order.tdir/ssl_req_order.dsc create mode 100644 testdata/ssl_req_order.tdir/ssl_req_order.post create mode 100644 testdata/ssl_req_order.tdir/ssl_req_order.pre create mode 100644 testdata/ssl_req_order.tdir/ssl_req_order.test create mode 100644 testdata/ssl_req_order.tdir/ssl_req_order.testns create mode 100644 testdata/ssl_req_order.tdir/unbound_server.key create mode 100644 testdata/ssl_req_order.tdir/unbound_server.pem create mode 100644 testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf create mode 100644 testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc create mode 100644 testdata/ssl_req_timeout.tdir/ssl_req_timeout.post create mode 100644 testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre create mode 100644 testdata/ssl_req_timeout.tdir/ssl_req_timeout.test create mode 100644 testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns create mode 100644 testdata/ssl_req_timeout.tdir/unbound_server.key create mode 100644 testdata/ssl_req_timeout.tdir/unbound_server.pem diff --git a/doc/Changelog b/doc/Changelog index 19da42594..24510fe5b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. - Unit test for tcp request reorder and timeouts. + - Unit tests for ssl out of order processing. 17 January 2018: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.conf b/testdata/ssl_req_order.tdir/ssl_req_order.conf new file mode 100644 index 000000000..3b2e2b1b4 --- /dev/null +++ b/testdata/ssl_req_order.tdir/ssl_req_order.conf @@ -0,0 +1,25 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + ssl-port: @PORT@ + ssl-service-key: "unbound_server.key" + ssl-service-pem: "unbound_server.pem" + + local-zone: "example.net" static + local-data: "www1.example.net. IN A 1.2.3.1" + local-data: "www2.example.net. IN A 1.2.3.2" + local-data: "www3.example.net. IN A 1.2.3.3" + tcp-upstream: yes + local-zone: "drop.net" deny + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.dsc b/testdata/ssl_req_order.tdir/ssl_req_order.dsc new file mode 100644 index 000000000..2259d0c08 --- /dev/null +++ b/testdata/ssl_req_order.tdir/ssl_req_order.dsc @@ -0,0 +1,16 @@ +BaseName: ssl_req_order +Version: 1.0 +Description: Test ssl request order processing. +CreationDate: Mon Jan 21 14:11:00 CET 2018 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: ssl_req_order.pre +Post: ssl_req_order.post +Test: ssl_req_order.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.post b/testdata/ssl_req_order.tdir/ssl_req_order.post new file mode 100644 index 000000000..bba50e309 --- /dev/null +++ b/testdata/ssl_req_order.tdir/ssl_req_order.post @@ -0,0 +1,11 @@ +# #-- ssl_req_order.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +cat unbound.log diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.pre b/testdata/ssl_req_order.tdir/ssl_req_order.pre new file mode 100644 index 000000000..476968509 --- /dev/null +++ b/testdata/ssl_req_order.tdir/ssl_req_order.pre @@ -0,0 +1,31 @@ +# #-- ssl_req_order.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 +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT ssl_req_order.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_order.conf > ub.conf +# start unbound in the background +PRE="../.." +valgrind $PRE/unbound -vvvv -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/ssl_req_order.tdir/ssl_req_order.test b/testdata/ssl_req_order.tdir/ssl_req_order.test new file mode 100644 index 000000000..65981d16c --- /dev/null +++ b/testdata/ssl_req_order.tdir/ssl_req_order.test @@ -0,0 +1,341 @@ +# #-- ssl_req_order.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# this test query should just work (server is up) +echo "> query www1.example.net." +$PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +echo "OK" + +# multiple requests (from localdata) +echo "> query www1.example.net. www2.example.net. www3.example.net." +$PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# out of order requests, the example.com elements take 2 seconds to wait. +echo "" +echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www.example.com" outfile | grep "10.20.30.40"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.com" outfile | grep "10.20.30.42"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# out of order requests, the example.com elements take 2 seconds to wait. +# www.example.com present twice, answered twice. +echo "" +echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www.example.com" outfile | grep "10.20.30.40"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# out of order requests, the example.com elements take 2 seconds to wait. +# www3.example.com present twice, answered twice. +echo "" +echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.com" outfile | grep "10.20.30.43"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +echo "" +echo "> query www4.example.com. www3.example.net." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www4.example.com" outfile | grep "10.20.30.44"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +echo "" +echo "> query a1.example.com. - a100.example.com." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN a91.a.example.com. A IN a92.a.example.com. A IN a93.a.example.com. A IN a94.a.example.com. A IN a95.a.example.com. A IN a96.a.example.com. A IN a97.a.example.com. A IN a98.a.example.com. A IN a99.a.example.com. A IN a100.a.example.com. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +grep "a.example.com. IN A" outfile + +echo "" +echo "> query www5.example.net. www3.example.net. www.drop.net." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN www3.example.net A IN www.drop.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "OK" +exit 0 diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.testns b/testdata/ssl_req_order.tdir/ssl_req_order.testns new file mode 100644 index 000000000..c53941b67 --- /dev/null +++ b/testdata/ssl_req_order.tdir/ssl_req_order.testns @@ -0,0 +1,74 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +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 NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.45 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.46 +ENTRY_END + +; lots of noerror/nodata answers for other queries (a.. queries) +ENTRY_BEGIN +MATCH opcode qtype subdomain +REPLY QR AA NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +a.example.com. IN A +SECTION AUTHORITY +example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 +ENTRY_END diff --git a/testdata/ssl_req_order.tdir/unbound_server.key b/testdata/ssl_req_order.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/ssl_req_order.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/ssl_req_order.tdir/unbound_server.pem b/testdata/ssl_req_order.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/ssl_req_order.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/ssl_req_timeout.tdir/ssl_req_timeout.conf b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf new file mode 100644 index 000000000..c461db299 --- /dev/null +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf @@ -0,0 +1,25 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + ssl-port: @PORT@ + ssl-service-key: "unbound_server.key" + ssl-service-pem: "unbound_server.pem" + + local-zone: "example.net" static + local-data: "www1.example.net. IN A 1.2.3.1" + local-data: "www2.example.net. IN A 1.2.3.2" + local-data: "www3.example.net. IN A 1.2.3.3" + tcp-idle-timeout: 2000 + local-zone: "drop.net" deny + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc new file mode 100644 index 000000000..1e933274b --- /dev/null +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc @@ -0,0 +1,16 @@ +BaseName: ssl_req_timeout +Version: 1.0 +Description: Test ssl request order timeouts. +CreationDate: Mon Jan 21 11:23:00 CET 2018 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: ssl_req_timeout.pre +Post: ssl_req_timeout.post +Test: ssl_req_timeout.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post new file mode 100644 index 000000000..e170f4b6e --- /dev/null +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post @@ -0,0 +1,12 @@ +# #-- ssl_req_timeout.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +cat fwd.log +cat unbound.log diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre new file mode 100644 index 000000000..1548da773 --- /dev/null +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre @@ -0,0 +1,31 @@ +# #-- ssl_req_timeout.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 +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT ssl_req_timeout.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_timeout.conf > ub.conf +# start unbound in the background +PRE="../.." +valgrind $PRE/unbound -vvvv -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/ssl_req_timeout.tdir/ssl_req_timeout.test b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.test new file mode 100644 index 000000000..5223fc985 --- /dev/null +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.test @@ -0,0 +1,136 @@ +# #-- ssl_req_timeout.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) +# check what sort of netcat we have +if nc -h 2>&1 | grep "q secs"; then + ncopt="-q 3 -i 4" +else + ncopt="-i 4" +fi + +# this test query should just work (server is up) +echo "> query www1.example.net." +$PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +echo "OK" + +# multiple requests that are answered immediately and then the timeout +echo "> query www1.example.net. www2.example.net. www3.example.net. www.example.com." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN www.example.com. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "stream closed" outfile; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# multiple requests that are waiting for answers and then the timeout +echo "> query www2.example.com. www2.example.com. www3.example.com." +$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN www2.example.com A IN www3.example.com A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "stream closed" outfile; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +# wait a bit +sleep 2 + +# echo a couple requests to the other side and then wait for the timeout. +# this creates waiting answers in the reply queue. +echo "> nc www.example.net www2.example.net www3.example.net" +( echo "0021eb410100000100000000000003777777076578616d706c65036e657400000100010022eb41010000010000000000000477777732076578616d706c65036e657400000100010022eb41010000010000000000000477777733076578616d706c65036e65740000010001" | xxd -r -p ; sleep 10 ; echo "") | nc $ncopt --ssl 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile + +echo "OK" +exit 0 diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns new file mode 100644 index 000000000..694600974 --- /dev/null +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns @@ -0,0 +1,63 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=4 +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 NOERROR +ADJUST copy_id sleep=4 +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=4 +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.45 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.46 +ENTRY_END diff --git a/testdata/ssl_req_timeout.tdir/unbound_server.key b/testdata/ssl_req_timeout.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/ssl_req_timeout.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/ssl_req_timeout.tdir/unbound_server.pem b/testdata/ssl_req_timeout.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/ssl_req_timeout.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/tcp_req_timeout.tdir/tcp_req_timeout.dsc b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc index fc611555a..fb11517f3 100644 --- a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc +++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc @@ -1,4 +1,4 @@ -BaseName: tcp_req_order +BaseName: tcp_req_timeout Version: 1.0 Description: Test tcp request order timeouts. CreationDate: Mon Jan 21 11:23:00 CET 2018 @@ -8,9 +8,9 @@ Component: CmdDepends: Depends: Help: -Pre: tcp_req_order.pre -Post: tcp_req_order.post -Test: tcp_req_order.test +Pre: tcp_req_timeout.pre +Post: tcp_req_timeout.post +Test: tcp_req_timeout.test AuxFiles: Passed: Failure: From be4583ac84c5bcd5a3fa4cabdd6d19cd4fd0b384 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 13:41:13 +0000 Subject: [PATCH 018/117] - Fix that multiple dns fragments can be carried in one TLS frame. git-svn-id: file:///svn/unbound/trunk@5043 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/listen_dnsport.c | 4 ++++ services/listen_dnsport.h | 2 ++ util/netevent.c | 11 +++++++++++ 4 files changed, 18 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 24510fe5b..692e3c57b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Fix tcp idle timeout test, for difference in the tcp reply code. - Unit test for tcp request reorder and timeouts. - Unit tests for ssl out of order processing. + - Fix that multiple dns fragments can be carried in one TLS frame. 17 January 2018: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 711319e16..4c67c46a6 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1620,6 +1620,10 @@ tcp_req_info_setup_listen(struct tcp_req_info* req) req->cp->tcp_is_reading = 1; comm_point_start_listening(req->cp, -1, req->cp->tcp_timeout_msec); + /* and also read it (from SSL stack buffers), so + * no event read event is expected since the remainder of + * the TLS frame is sitting in the buffers. */ + req->read_again = 1; } else { comm_point_start_listening(req->cp, -1, req->cp->tcp_timeout_msec); diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 07cb64d17..ff695495c 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -258,6 +258,8 @@ struct tcp_req_info { int is_reply; /** read channel has closed, just write pending results */ int read_is_closed; + /** read again */ + int read_again; /** number of outstanding requests */ int num_open_req; /** list of outstanding requests */ diff --git a/util/netevent.c b/util/netevent.c index 58c65220a..52c65eb40 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1353,6 +1353,17 @@ ssl_handle_write(struct comm_point* c) static int ssl_handle_it(struct comm_point* c) { + if(c->tcp_req_info) { + do { + int r; + c->tcp_req_info->read_again = 0; + if(c->tcp_is_reading) + r = ssl_handle_read(c); + else r = ssl_handle_write(c); + if(!r) return r; + } while (c->tcp_req_info->read_again); + return 1; + } if(c->tcp_is_reading) return ssl_handle_read(c); return ssl_handle_write(c); From 7c4911c577763733de8a7b9c62a92656eb69f5a6 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 13:45:13 +0000 Subject: [PATCH 019/117] No leaks found. git-svn-id: file:///svn/unbound/trunk@5044 be551aaa-1e26-0410-a405-d3ace91eadb9 --- testdata/ssl_req_order.tdir/ssl_req_order.pre | 2 +- testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.pre b/testdata/ssl_req_order.tdir/ssl_req_order.pre index 476968509..5fb118501 100644 --- a/testdata/ssl_req_order.tdir/ssl_req_order.pre +++ b/testdata/ssl_req_order.tdir/ssl_req_order.pre @@ -21,7 +21,7 @@ echo "FWD_PID=$FWD_PID" >> .tpkg.var.test sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_order.conf > ub.conf # start unbound in the background PRE="../.." -valgrind $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & +$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre index 1548da773..b13de5b3a 100644 --- a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre +++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre @@ -21,7 +21,7 @@ echo "FWD_PID=$FWD_PID" >> .tpkg.var.test sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_timeout.conf > ub.conf # start unbound in the background PRE="../.." -valgrind $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & +$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test From f5dcd84d272fa52f39f3c214d90f8ca3d7107424 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 14:14:12 +0000 Subject: [PATCH 020/117] Fix reread of buffer data, better, also for TCP. git-svn-id: file:///svn/unbound/trunk@5045 be551aaa-1e26-0410-a405-d3ace91eadb9 --- util/netevent.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/util/netevent.c b/util/netevent.c index 52c65eb40..5dbcb03d6 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1353,17 +1353,6 @@ ssl_handle_write(struct comm_point* c) static int ssl_handle_it(struct comm_point* c) { - if(c->tcp_req_info) { - do { - int r; - c->tcp_req_info->read_again = 0; - if(c->tcp_is_reading) - r = ssl_handle_read(c); - else r = ssl_handle_write(c); - if(!r) return r; - } while (c->tcp_req_info->read_again); - return 1; - } if(c->tcp_is_reading) return ssl_handle_read(c); return ssl_handle_write(c); @@ -1698,6 +1687,29 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 1; } +/** read again to drain buffers when there could be more to read */ +static void +tcp_req_info_read_again(int fd, struct comm_point* c) +{ + while(c->tcp_req_info->read_again) { + int r; + c->tcp_req_info->read_again = 0; + if(c->tcp_is_reading) + r = comm_point_tcp_handle_read(fd, c, 0); + else r = comm_point_tcp_handle_write(fd, c); + if(!r) { + reclaim_tcp_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point( + c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_CLOSED, NULL); + } + return; + } + } +} + void comm_point_tcp_handle_callback(int fd, short event, void* arg) { @@ -1736,6 +1748,8 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) NETEVENT_CLOSED, NULL); } } + if(c->tcp_req_info && c->tcp_req_info->read_again) + tcp_req_info_read_again(fd, c); return; } if(event&UB_EV_WRITE) { @@ -1748,6 +1762,8 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) NETEVENT_CLOSED, NULL); } } + if(c->tcp_req_info && c->tcp_req_info->read_again) + tcp_req_info_read_again(fd, c); return; } if(event&UB_EV_TIMEOUT) { From d81e2c654f87d0dc869c3d12c0c0cb860af3f262 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 21 Jan 2019 16:20:14 +0000 Subject: [PATCH 021/117] - Add stream-wait-size: 4m config option to limit the maximum memory used by waiting tcp and tls stream replies. This avoids a denial of service where these replies use up all of the memory. git-svn-id: file:///svn/unbound/trunk@5046 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 + doc/example.conf.in | 3 + services/listen_dnsport.c | 52 +- services/listen_dnsport.h | 3 + util/config_file.c | 6 + util/config_file.h | 4 + util/configlexer.c | 4411 +++++++++++++++++++------------------ util/configlexer.lex | 1 + util/configparser.c | 2329 ++++++++++---------- util/configparser.h | 6 +- util/configparser.y | 12 +- 11 files changed, 3471 insertions(+), 3359 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 692e3c57b..3c859dd47 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,9 @@ - Unit test for tcp request reorder and timeouts. - Unit tests for ssl out of order processing. - Fix that multiple dns fragments can be carried in one TLS frame. + - Add stream-wait-size: 4m config option to limit the maximum + memory used by waiting tcp and tls stream replies. This avoids + a denial of service where these replies use up all of the memory. 17 January 2018: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout diff --git a/doc/example.conf.in b/doc/example.conf.in index d0b0dd44e..2ec538956 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -123,6 +123,9 @@ server: # Suggested values are 512 to 4096. Default is 4096. 65536 disables it. # max-udp-size: 4096 + # max memory to use for stream(tcp and tls) waiting result buffers. + # stream-wait-size: 4m + # buffer size for handling DNS data. No messages larger than this # size can be sent or received, by UDP or TCP. In bytes. # msg-buffer-size: 65552 diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 4c67c46a6..c1d1c655e 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -55,6 +55,7 @@ #include "sldns/sbuffer.h" #include "services/mesh.h" #include "util/fptr_wlist.h" +#include "util/locks.h" #ifdef HAVE_NETDB_H #include @@ -75,6 +76,13 @@ /** number of simultaneous requests a client can have */ #define TCP_MAX_REQ_SIMULTANEOUS 32 +/** lock on the counter of stream buffer memory */ +static lock_basic_type stream_wait_count_lock; +/** size (in bytes) of stream wait buffers */ +static size_t stream_wait_count = 0; +/** is the lock initialised for stream wait buffers */ +static int stream_wait_lock_inited = 0; + /** * Debug print of the getaddrinfo returned address. * @param addr: the address returned. @@ -1269,6 +1277,10 @@ listen_create(struct comm_base* base, struct listen_port* ports, free(front); return NULL; } + if(!stream_wait_lock_inited) { + lock_basic_init(&stream_wait_count_lock); + stream_wait_lock_inited = 1; + } /* create comm points as needed */ while(ports) { @@ -1358,6 +1370,10 @@ listen_delete(struct listen_dnsport* front) #endif sldns_buffer_free(front->udp_buff); free(front); + if(stream_wait_lock_inited) { + stream_wait_lock_inited = 0; + lock_basic_destroy(&stream_wait_count_lock); + } } struct listen_port* @@ -1560,6 +1576,10 @@ void tcp_req_info_clear(struct tcp_req_info* req) item = req->done_req_list; while(item) { nitem = item->next; + lock_basic_lock(&stream_wait_count_lock); + stream_wait_count -= (sizeof(struct tcp_req_done_item) + +item->len); + lock_basic_unlock(&stream_wait_count_lock); free(item->buf); free(item); item = nitem; @@ -1638,6 +1658,9 @@ tcp_req_info_pop_done(struct tcp_req_info* req) struct tcp_req_done_item* item; log_assert(req->num_done_req > 0 && req->done_req_list); item = req->done_req_list; + lock_basic_lock(&stream_wait_count_lock); + stream_wait_count -= (sizeof(struct tcp_req_done_item)+item->len); + lock_basic_unlock(&stream_wait_count_lock); req->done_req_list = req->done_req_list->next; req->num_done_req --; return item; @@ -1788,6 +1811,19 @@ tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len) { struct tcp_req_done_item* last = NULL; struct tcp_req_done_item* item; + size_t space; + + /* see if we have space */ + space = sizeof(struct tcp_req_done_item) + len; + lock_basic_lock(&stream_wait_count_lock); + if(stream_wait_count + space > stream_wait_max) { + lock_basic_unlock(&stream_wait_count_lock); + verbose(VERB_ALGO, "drop stream reply, no space left, in stream-wait-size"); + return 0; + } + stream_wait_count += stream_wait_max; + lock_basic_unlock(&stream_wait_count_lock); + /* find last element */ last = req->done_req_list; while(last && last->next) @@ -1796,6 +1832,7 @@ tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len) /* create new element */ item = (struct tcp_req_done_item*)malloc(sizeof(*item)); if(!item) { + log_err("malloc failure, for stream result list"); return 0; } item->next = NULL; @@ -1803,6 +1840,7 @@ tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len) item->buf = memdup(buf, len); if(!item->buf) { free(item); + log_err("malloc failure, adding reply to stream result list"); return 0; } @@ -1842,6 +1880,18 @@ tcp_req_info_send_reply(struct tcp_req_info* req) /* queue up the answer behind the others already pending */ if(!tcp_req_info_add_result(req, sldns_buffer_begin(req->spool_buffer), sldns_buffer_limit(req->spool_buffer))) { - log_err("malloc failure adding reply to stream result list"); + /* drop the connection, we are out of resources */ + comm_point_drop_reply(&req->cp->repinfo); } } + +size_t tcp_req_info_get_stream_buffer_size(void) +{ + size_t s; + if(!stream_wait_lock_inited) + return stream_wait_count; + lock_basic_lock(&stream_wait_count_lock); + s = stream_wait_count; + lock_basic_unlock(&stream_wait_count_lock); + return s; +} diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index ff695495c..ad84d8322 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -364,4 +364,7 @@ void tcp_req_info_send_reply(struct tcp_req_info* req); */ 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); + #endif /* LISTEN_DNSPORT_H */ diff --git a/util/config_file.c b/util/config_file.c index ae2ebe89e..954517341 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -76,6 +76,8 @@ uid_t cfg_uid = (uid_t)-1; gid_t cfg_gid = (gid_t)-1; /** for debug allow small timeout values for fast rollovers */ int autr_permit_small_holddown = 0; +/** size (in bytes) of stream wait buffers max */ +size_t stream_wait_max = 4 * 1024 * 1024; /** global config during parsing */ struct config_parser_state* cfg_parser = 0; @@ -140,6 +142,7 @@ config_create(void) cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */ cfg->incoming_num_tcp = 2; #endif + cfg->stream_wait_size = 4 * 1024 * 1024; cfg->edns_buffer_size = 4096; /* 4k from rfc recommendation */ cfg->msg_buffer_size = 65552; /* 64 k + a small margin */ cfg->msg_cache_size = 4 * 1024 * 1024; @@ -491,6 +494,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports) else S_SIZET_OR_ZERO("outgoing-num-tcp:", outgoing_num_tcp) else S_SIZET_OR_ZERO("incoming-num-tcp:", incoming_num_tcp) + else S_MEMSIZE("stream-wait-size:", stream_wait_size) else S_SIZET_NONZERO("edns-buffer-size:", edns_buffer_size) else S_SIZET_NONZERO("msg-buffer-size:", msg_buffer_size) else S_MEMSIZE("msg-cache-size:", msg_cache_size) @@ -877,6 +881,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "outgoing-range", outgoing_num_ports) else O_DEC(opt, "outgoing-num-tcp", outgoing_num_tcp) else O_DEC(opt, "incoming-num-tcp", incoming_num_tcp) + else O_MEM(opt, "stream-wait-size", stream_wait_size) else O_DEC(opt, "edns-buffer-size", edns_buffer_size) else O_DEC(opt, "msg-buffer-size", msg_buffer_size) else O_MEM(opt, "msg-cache-size", msg_cache_size) @@ -1910,6 +1915,7 @@ config_apply(struct config_file* config) UNKNOWN_SERVER_NICENESS = config->unknown_server_time_limit; log_set_time_asc(config->log_time_ascii); autr_permit_small_holddown = config->permit_small_holddown; + stream_wait_max = config->stream_wait_size; } void config_lookup_uid(struct config_file* cfg) diff --git a/util/config_file.h b/util/config_file.h index b211dbaba..0f50c0e71 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -132,6 +132,8 @@ struct config_file { /** EDNS buffer size to use */ size_t edns_buffer_size; + /** size of the stream wait buffers, max */ + size_t stream_wait_size; /** number of bytes buffer size for DNS messages */ size_t msg_buffer_size; /** size of the message cache */ @@ -575,6 +577,8 @@ extern uid_t cfg_uid; extern gid_t cfg_gid; /** debug and enable small timeouts */ extern int autr_permit_small_holddown; +/** size (in bytes) of stream wait buffers max */ +extern size_t stream_wait_max; /** * Stub config options diff --git a/util/configlexer.c b/util/configlexer.c index 568723ae2..85ab97e92 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 287 -#define YY_END_OF_BUFFER 288 +#define YY_NUM_RULES 288 +#define YY_END_OF_BUFFER 289 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,322 +372,324 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2859] = +static yyconst flex_int16_t yy_accept[2874] = { 0, - 1, 1, 269, 269, 273, 273, 277, 277, 281, 281, - 1, 1, 288, 285, 1, 267, 267, 286, 2, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 269, 270, 270, 271, 286, 273, 274, 274, - 275, 286, 280, 277, 278, 278, 279, 286, 281, 282, - 282, 283, 286, 284, 268, 2, 272, 286, 284, 285, - 0, 1, 2, 2, 2, 2, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 1, 1, 270, 270, 274, 274, 278, 278, 282, 282, + 1, 1, 289, 286, 1, 268, 268, 287, 2, 287, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 270, 271, 271, 272, 287, 274, 275, 275, + 276, 287, 281, 278, 279, 279, 280, 287, 282, 283, + 283, 284, 287, 285, 269, 2, 273, 287, 285, 286, + 0, 1, 2, 2, 2, 2, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 269, - 0, 273, 0, 280, 0, 277, 281, 0, 284, 0, - 2, 2, 284, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 270, + 0, 274, 0, 281, 0, 278, 282, 0, 285, 0, + 2, 2, 285, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 284, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 285, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 110, 285, 285, - 285, 285, 285, 285, 285, 284, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 111, + 286, 286, 286, 286, 286, 286, 286, 285, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 92, 285, - 285, 285, 285, 285, 285, 8, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 115, - 285, 284, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 93, 286, 286, 286, 286, 286, 286, 8, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 116, 286, 285, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 284, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 51, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 210, - 285, 14, 15, 285, 18, 17, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 285, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 51, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 211, 286, 14, 15, 286, 18, 17, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 109, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 194, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 3, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 284, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 110, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 195, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 3, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 285, 286, - 285, 260, 285, 285, 259, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 276, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 54, 285, 234, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 55, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 261, 286, 286, 260, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 277, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 54, 286, + 235, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 55, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 183, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 20, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 134, 285, 285, 276, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 90, 285, 285, 285, 285, 285, 285, 285, 242, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 184, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 20, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 135, 286, 286, 277, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 91, 286, 286, 286, + 286, 286, 286, 286, 243, 286, 286, 286, 286, 286, - 285, 155, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 133, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 89, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 31, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 156, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 134, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 90, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 31, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 32, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 52, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 108, 285, 285, 285, 285, 285, 107, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 53, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 156, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 32, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 52, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 109, 286, 286, + 286, 286, 286, 108, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 53, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 157, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 42, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 225, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 46, 285, 47, 285, - 285, 285, 285, 93, 285, 94, 285, 285, 285, 285, - 91, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 42, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 226, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 46, 286, 47, 286, 286, 286, 286, + 286, 94, 286, 95, 286, 286, 286, 286, 92, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 7, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 203, 285, 285, 285, 285, - 136, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 43, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 175, 285, 174, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 7, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 204, 286, 286, 286, 286, 137, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 43, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 16, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 56, 285, 285, 285, - 285, 285, 285, 285, 285, 182, 285, 285, 285, 285, - 285, 96, 285, 95, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 166, 285, 285, 285, 285, 285, 285, 285, - 285, 116, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 176, 286, 175, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 16, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 56, 286, 286, 286, 286, 286, + 286, 286, 286, 183, 286, 286, 286, 286, 286, 286, + 97, 286, 96, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 167, 286, 286, 286, 286, 286, 286, 286, 286, + 117, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 74, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 78, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 50, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 169, 170, 285, 285, 285, 236, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 6, 285, 285, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 75, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 79, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 50, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 170, 171, 286, 286, 286, 237, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 240, 285, 285, 285, 261, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 40, 285, 285, 285, - 285, 285, 285, 285, 285, 162, 285, 285, 285, 111, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 187, 285, 163, 285, 285, 285, 200, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 41, 285, 285, 285, 285, 285, 285, + 6, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 241, 286, 286, 286, 262, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 40, 286, 286, 286, + 286, 286, 286, 286, 286, 163, 286, 286, 286, 112, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 188, 286, 164, 286, 286, 286, 201, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 113, 101, 285, 102, 285, 285, 285, - 100, 285, 285, 285, 285, 285, 285, 285, 285, 131, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 224, 285, 285, 285, 285, 285, 285, 285, 285, - 164, 285, 285, 285, 285, 285, 167, 285, 173, 285, - 285, 285, 285, 285, 199, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 88, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 48, 285, 285, 285, 25, 285, 285, 285, 285, + 286, 286, 286, 41, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 114, 102, 286, 103, 286, 286, 286, + 101, 286, 286, 286, 286, 286, 286, 286, 286, 132, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 225, 286, 286, 286, 286, 286, 286, 286, 286, + 165, 286, 286, 286, 286, 286, 168, 286, 174, 286, + 286, 286, 286, 286, 200, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 89, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 19, 285, 285, 285, 285, 26, - 35, 285, 141, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 63, 65, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 244, 285, 285, - 285, 211, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 103, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 130, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 255, 285, 285, 285, + 286, 48, 286, 286, 286, 25, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 19, 286, 286, 286, 286, + 26, 35, 286, 142, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 64, 66, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 245, 286, + 286, 286, 212, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 104, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 131, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 135, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 193, - 285, 285, 285, 285, 285, 285, 285, 285, 264, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 152, 285, - 285, 285, 285, 285, 285, 285, 97, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 147, 285, 157, 285, 285, 285, - 285, 285, 119, 285, 285, 285, 285, 285, 84, 285, - 285, 285, 285, 185, 285, 285, 285, 285, 285, 285, + 286, 286, 286, 286, 286, 286, 286, 256, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 136, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 194, 286, 286, 286, 286, 286, 286, 286, 286, 265, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 153, + 286, 286, 286, 286, 286, 286, 286, 286, 98, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 148, 286, 158, 286, + 286, 286, 286, 286, 120, 286, 286, 286, 286, 286, - 201, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 216, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 112, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 151, 285, 285, 285, 285, 285, - 66, 67, 285, 285, 285, 285, 285, 49, 285, 285, - 285, 285, 285, 73, 158, 285, 176, 285, 204, 285, - 285, 168, 237, 285, 285, 285, 285, 285, 59, 285, - 160, 285, 285, 285, 285, 285, 9, 285, 285, 285, - 87, 285, 285, 285, 285, 229, 285, 285, 285, 184, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, + 85, 286, 286, 286, 286, 186, 286, 286, 286, 286, + 286, 286, 202, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 217, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 113, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 152, 286, 286, 286, + 286, 286, 67, 68, 286, 286, 286, 286, 286, 49, + 286, 286, 286, 286, 286, 74, 159, 286, 177, 286, + 205, 286, 286, 169, 238, 286, 286, 286, 286, 286, + 60, 286, 161, 286, 286, 286, 286, 286, 9, 286, + 286, 286, 88, 286, 286, 286, 286, 230, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 150, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 137, 285, 243, 285, 285, 285, 285, - 215, 285, 285, 285, 285, 285, 285, 285, 285, 195, - 285, 285, 285, 285, 235, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 258, - 285, 159, 285, 285, 285, 285, 285, 285, 285, 58, + 286, 185, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 151, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 138, 286, 244, 286, + 286, 286, 286, 216, 286, 286, 286, 286, 286, 286, + 286, 286, 196, 286, 286, 286, 286, 236, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 60, 285, 285, 285, 285, 285, 285, 285, 86, 285, - 285, 285, 285, 227, 285, 285, 285, 239, 285, 285, - 285, 285, 285, 285, 285, 189, 33, 27, 29, 285, - 285, 285, 285, 285, 285, 285, 285, 34, 28, 30, - 285, 285, 285, 285, 285, 285, 285, 83, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 191, 188, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 57, 285, 285, 114, 285, 104, 285, 285, 285, - 285, 285, 285, 285, 285, 132, 13, 285, 285, 285, + 286, 286, 259, 286, 160, 286, 286, 286, 286, 286, + 286, 286, 59, 61, 286, 286, 286, 286, 286, 286, + 286, 87, 286, 286, 286, 286, 228, 286, 286, 286, + 240, 286, 286, 286, 286, 286, 286, 286, 190, 33, + 27, 29, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 34, 28, 30, 286, 286, 286, 286, 286, 286, + 286, 84, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 192, + 189, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 58, 286, 286, 115, 286, - 285, 285, 285, 285, 285, 285, 253, 285, 256, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 12, - 285, 285, 21, 285, 285, 285, 233, 285, 285, 285, - 241, 285, 61, 285, 197, 285, 285, 190, 285, 285, - 285, 285, 285, 285, 22, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 146, 145, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 192, 186, - 285, 202, 285, 285, 245, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 68, + 105, 286, 286, 286, 286, 286, 286, 286, 286, 133, + 13, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 254, 286, 257, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 12, 286, 286, 21, 286, 286, 286, + 234, 286, 286, 286, 242, 286, 62, 286, 198, 286, + 286, 191, 286, 286, 57, 286, 286, 286, 286, 22, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 147, 146, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 193, 187, 286, 203, 286, 286, 246, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 228, 285, 285, 285, 285, 172, 285, - 285, 285, 285, 196, 285, 285, 285, 285, 285, 285, - 285, 285, 262, 263, 143, 62, 285, 285, 153, 285, - 285, 98, 99, 285, 285, 285, 138, 285, 140, 285, - 177, 285, 285, 285, 285, 144, 285, 285, 205, 285, - 285, 285, 285, 285, 285, 285, 121, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 212, 285, - 285, 285, 23, 285, 238, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 178, 285, 285, 226, - 285, 257, 285, 171, 285, 285, 285, 285, 44, 285, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 69, 286, 286, 286, 229, 286, + 286, 286, 286, 173, 286, 286, 286, 286, 197, 286, + 286, 286, 286, 286, 286, 286, 286, 263, 264, 144, + 63, 286, 286, 154, 286, 286, 99, 100, 286, 286, + 286, 139, 286, 141, 286, 178, 286, 286, 286, 286, + 145, 286, 286, 206, 286, 286, 286, 286, 286, 286, + 286, 122, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 213, 286, 286, 286, 23, 286, 239, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 4, 285, 285, 120, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 208, 36, 37, 285, 285, 285, 285, 285, - 285, 285, 246, 285, 285, 285, 285, 285, 285, 214, - 285, 285, 285, 181, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 71, 285, 45, 232, 285, 209, 285, - 285, 285, 285, 11, 285, 285, 285, 285, 285, 285, - 285, 179, 75, 285, 39, 285, 285, 285, 285, 285, - 285, 285, 149, 285, 285, 285, 285, 285, 123, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 213, 117, + 286, 179, 286, 286, 227, 286, 258, 286, 172, 286, + 286, 286, 286, 44, 286, 286, 286, 286, 4, 286, + 286, 121, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 209, 36, 37, + 286, 286, 286, 286, 286, 286, 286, 247, 286, 286, + 286, 286, 286, 286, 215, 286, 286, 286, 182, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 72, 286, + 45, 233, 286, 210, 286, 286, 286, 286, 11, 286, + 286, 286, 286, 286, 286, 286, 180, 76, 286, 39, + 286, 286, 286, 286, 286, 286, 286, 150, 286, 286, - 285, 285, 105, 106, 285, 285, 285, 77, 81, 76, - 285, 69, 285, 285, 285, 285, 285, 10, 285, 285, - 285, 230, 285, 285, 266, 38, 285, 285, 285, 285, - 148, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 82, - 80, 285, 70, 254, 285, 285, 285, 285, 285, 285, - 285, 165, 285, 285, 285, 180, 285, 285, 285, 285, - 285, 285, 285, 139, 64, 285, 285, 285, 285, 285, - 247, 285, 285, 285, 285, 285, 285, 285, 118, 285, - 79, 124, 125, 128, 129, 126, 127, 72, 285, 231, + 286, 286, 286, 124, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 214, 118, 286, 286, 106, 107, 286, + 286, 286, 78, 82, 77, 286, 70, 286, 286, 286, + 286, 286, 10, 286, 286, 286, 231, 286, 286, 267, + 38, 286, 286, 286, 286, 149, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 83, 81, 286, 71, 255, 286, + 286, 286, 286, 286, 286, 286, 166, 286, 286, 286, + 181, 286, 286, 286, 286, 286, 286, 286, 140, 65, + 286, 286, 286, 286, 286, 248, 286, 286, 286, 286, - 285, 142, 285, 285, 285, 285, 285, 207, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 154, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 85, 285, 206, 285, 223, 251, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 5, 285, 198, 285, 285, 252, 285, 285, 285, 285, - 285, 285, 285, 285, 24, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 122, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 161, 285, + 286, 286, 286, 119, 286, 80, 125, 126, 129, 130, + 127, 128, 73, 286, 232, 286, 143, 286, 286, 286, + 286, 286, 208, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 155, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 86, + 286, 207, 286, 224, 252, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 5, 286, 199, 286, 286, + 253, 286, 286, 286, 286, 286, 286, 286, 286, 24, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 285, 285, 285, 285, 285, 285, 285, 248, 285, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 265, 285, 285, 219, - 285, 285, 285, 285, 285, 249, 285, 285, 285, 285, - 285, 285, 250, 285, 285, 285, 217, 285, 220, 221, - 285, 285, 285, 285, 285, 218, 222, 0 + 286, 286, 286, 123, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 162, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 249, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 266, 286, 286, 220, 286, 286, 286, 286, 286, + 250, 286, 286, 286, 286, 286, 286, 251, 286, 286, + 286, 218, 286, 221, 222, 286, 286, 286, 286, 286, + 219, 223, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -730,647 +732,649 @@ static yyconst YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2873] = +static yyconst flex_uint16_t yy_base[2888] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2379, 2266, 81, 5585, 5585, 5585, 96, 52, + 90, 112, 2296, 2222, 81, 5607, 5607, 5607, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 176, - 191, 152, 2238, 5585, 5585, 5585, 107, 2112, 5585, 5585, - 5585, 165, 1772, 1584, 5585, 5585, 5585, 211, 1467, 5585, - 5585, 5585, 180, 1048, 5585, 217, 5585, 221, 168, 918, + 191, 152, 2090, 5607, 5607, 5607, 107, 1968, 5607, 5607, + 5607, 165, 1788, 1496, 5607, 5607, 5607, 211, 1208, 5607, + 5607, 5607, 180, 1125, 5607, 217, 5607, 221, 168, 962, 225, 189, 0, 232, 0, 0, 226, 189, 85, 221, 114, 227, 234, 156, 219, 235, 239, 236, 238, 132, 246, 242, 241, 252, 244, 247, 266, 243, 258, 273, 275, 187, 277, 278, 267, 274, 280, 283, 287, 289, 295, 297, 298, 299, 304, 305, 306, 311, 307, 315, - 309, 313, 330, 318, 329, 325, 320, 335, 336, 338, - 339, 340, 343, 346, 342, 349, 350, 359, 351, 806, - 372, 771, 377, 699, 381, 549, 355, 385, 198, 389, - 393, 0, 385, 373, 395, 387, 391, 392, 257, 390, - 394, 396, 397, 399, 401, 414, 403, 412, 420, 422, - 426, 423, 430, 433, 434, 435, 436, 418, 447, 445, - 450, 442, 451, 453, 454, 457, 458, 473, 459, 460, - 409, 467, 475, 477, 484, 469, 487, 488, 485, 492, + 309, 313, 330, 318, 329, 325, 320, 335, 336, 339, + 340, 343, 345, 342, 346, 350, 349, 355, 357, 907, + 373, 754, 376, 671, 382, 632, 365, 386, 198, 390, + 394, 0, 386, 374, 396, 388, 392, 393, 257, 391, + 395, 397, 398, 400, 402, 415, 404, 413, 421, 423, + 427, 424, 431, 434, 435, 436, 437, 419, 448, 446, + 451, 443, 452, 454, 455, 458, 459, 474, 460, 461, + 410, 468, 476, 478, 485, 470, 488, 489, 486, 493, - 490, 500, 502, 498, 499, 501, 503, 504, 508, 509, - 511, 513, 516, 514, 515, 519, 521, 520, 528, 522, - 533, 534, 541, 536, 540, 543, 551, 554, 546, 555, - 547, 557, 560, 563, 564, 572, 567, 568, 570, 573, - 574, 576, 577, 578, 579, 587, 594, 590, 596, 598, - 589, 599, 600, 603, 606, 580, 615, 607, 619, 611, - 623, 608, 624, 627, 616, 622, 630, 631, 629, 640, - 636, 645, 641, 648, 647, 652, 644, 660, 646, 655, - 656, 657, 658, 661, 662, 663, 665, 671, 669, 675, - 674, 682, 681, 679, 692, 685, 688, 690, 693, 697, + 491, 501, 503, 499, 500, 502, 504, 505, 509, 510, + 512, 514, 517, 515, 516, 520, 522, 521, 529, 523, + 534, 535, 542, 537, 538, 544, 541, 555, 556, 547, + 558, 551, 559, 560, 565, 568, 575, 570, 567, 571, + 579, 574, 577, 578, 582, 580, 594, 601, 592, 599, + 602, 600, 605, 606, 607, 608, 584, 617, 610, 581, + 622, 628, 612, 626, 631, 618, 614, 633, 635, 637, + 644, 640, 647, 643, 648, 649, 650, 652, 661, 656, + 659, 658, 660, 662, 664, 665, 668, 666, 674, 669, + 678, 680, 688, 686, 685, 698, 690, 691, 695, 701, - 689, 703, 705, 717, 718, 713, 719, 720, 722, 724, - 727, 725, 728, 735, 736, 737, 738, 739, 747, 742, - 744, 751, 750, 752, 761, 746, 765, 767, 759, 769, - 770, 792, 777, 775, 772, 785, 780, 5585, 798, 788, - 818, 789, 790, 825, 803, 805, 810, 807, 814, 812, - 841, 816, 827, 836, 844, 828, 839, 840, 843, 849, - 846, 862, 852, 845, 855, 857, 869, 864, 866, 868, - 877, 870, 872, 876, 879, 878, 778, 881, 883, 886, - 887, 891, 894, 895, 897, 899, 896, 910, 904, 921, - 903, 916, 923, 920, 911, 928, 926, 930, 932, 933, + 693, 708, 702, 723, 712, 724, 713, 705, 694, 719, + 732, 729, 735, 737, 738, 739, 740, 741, 742, 750, + 745, 748, 755, 758, 762, 766, 746, 772, 747, 776, + 770, 774, 781, 803, 778, 768, 780, 782, 785, 5607, + 808, 786, 828, 792, 787, 815, 810, 812, 801, 817, + 825, 818, 829, 813, 821, 835, 851, 836, 838, 846, + 848, 852, 850, 860, 861, 853, 856, 864, 875, 867, + 870, 871, 882, 874, 872, 877, 881, 883, 887, 896, + 889, 897, 884, 898, 901, 904, 902, 908, 905, 909, + 912, 926, 906, 923, 928, 925, 931, 933, 935, 936, - 942, 937, 938, 940, 943, 944, 946, 950, 951, 952, - 954, 956, 960, 957, 967, 958, 965, 972, 5585, 974, - 976, 977, 978, 979, 980, 5585, 982, 981, 984, 989, - 994, 996, 988, 991, 1004, 1013, 1006, 1008, 1016, 995, - 1014, 1017, 1020, 1018, 1023, 1021, 1024, 1027, 1025, 1045, - 1030, 1032, 1031, 1033, 1038, 1056, 1037, 1040, 1057, 1058, - 1063, 1073, 1066, 1076, 1068, 1049, 1080, 1070, 1083, 1075, - 1077, 1085, 1086, 1087, 1088, 1092, 1094, 1096, 1097, 5585, - 1098, 1102, 1110, 1108, 1099, 1112, 1115, 1117, 1116, 1118, - 1123, 1119, 1125, 1127, 1130, 1128, 1141, 1137, 1139, 1138, + 937, 938, 946, 943, 942, 944, 949, 953, 955, 959, + 952, 945, 961, 966, 970, 967, 975, 977, 960, 983, + 5607, 985, 968, 980, 978, 990, 991, 5607, 993, 992, + 994, 1001, 996, 1004, 997, 1000, 1007, 1022, 999, 1006, + 1023, 1020, 1021, 783, 1024, 1025, 1027, 1028, 1030, 1031, + 1033, 1036, 1053, 1037, 1040, 1038, 1039, 1044, 1046, 1051, + 1048, 1065, 1062, 1066, 1077, 1064, 1081, 1068, 1074, 1085, + 1076, 1087, 1083, 1090, 1089, 1092, 1093, 1095, 1096, 1097, + 1099, 1103, 5607, 1108, 1106, 1113, 1112, 1118, 1119, 1120, + 1121, 1122, 1123, 1126, 1128, 1129, 1132, 1141, 1142, 1149, - 1143, 1145, 1144, 1146, 1148, 1157, 1153, 1160, 1168, 1169, - 1171, 1173, 1180, 1154, 1176, 1177, 1178, 1181, 1183, 1185, - 1161, 1187, 1188, 1199, 1191, 1194, 1196, 1198, 1208, 1200, - 1203, 1207, 1204, 1213, 1209, 1211, 1220, 1221, 1223, 1230, - 1228, 1226, 1232, 1234, 1240, 1241, 1231, 1233, 1242, 1244, - 1245, 1248, 1253, 1254, 1255, 1256, 1260, 1259, 1267, 1264, - 1262, 1273, 1275, 1266, 1277, 1285, 1278, 1287, 1286, 1288, - 1296, 1292, 1294, 1282, 1303, 1298, 1299, 1304, 1310, 1306, - 1311, 1314, 1321, 1324, 1312, 1316, 1322, 1327, 1326, 1330, - 1331, 1332, 1333, 1334, 1336, 1335, 1339, 1340, 1342, 1343, + 1144, 1145, 1146, 1147, 1150, 1158, 1157, 1151, 1165, 1168, + 1153, 1170, 1177, 1175, 1179, 1186, 1163, 1182, 1183, 1172, + 1187, 1189, 1193, 1190, 1196, 1197, 1200, 1199, 1202, 1204, + 1205, 1212, 1211, 1207, 1214, 1210, 1218, 1223, 1224, 1227, + 1230, 1231, 1239, 1234, 1235, 1236, 1237, 1245, 1247, 1249, + 1250, 1251, 1253, 1254, 1255, 1257, 1260, 1261, 1263, 1264, + 1270, 1277, 1272, 1281, 1283, 1285, 1274, 1287, 1294, 1291, + 1295, 1297, 1293, 1305, 1302, 1303, 1306, 1313, 1308, 1267, + 1309, 1317, 1318, 1310, 1319, 1329, 1330, 1311, 1332, 1321, + 1337, 1333, 1338, 1341, 1342, 1343, 1350, 1345, 1346, 1347, - 1347, 1352, 1356, 1357, 1359, 1360, 1363, 1364, 1365, 1366, - 1368, 1371, 1372, 1376, 1374, 1375, 1377, 1389, 1381, 1388, - 1390, 1392, 1395, 1398, 1396, 1404, 1402, 1406, 1408, 1410, - 1412, 1411, 1414, 1415, 1422, 1416, 1425, 1427, 1429, 1428, - 1432, 1435, 1438, 1439, 5585, 1433, 1446, 1441, 1447, 1445, - 1450, 1453, 1460, 1455, 1458, 1456, 1459, 1462, 1464, 5585, - 1466, 5585, 5585, 1468, 5585, 5585, 1470, 1472, 1477, 1487, - 1488, 1494, 1490, 1480, 1492, 1496, 1503, 1517, 1499, 1502, - 1507, 1505, 1508, 1510, 1513, 1514, 1512, 1531, 1528, 1534, - 1538, 1539, 1540, 1526, 1542, 1544, 1547, 1548, 1549, 1553, + 1352, 1348, 1353, 1357, 1358, 1360, 1364, 1365, 1368, 1370, + 1371, 1374, 1376, 1379, 1380, 1381, 1382, 1384, 1385, 1390, + 1386, 1391, 1393, 1398, 1402, 1403, 1406, 1405, 1408, 1414, + 1407, 1416, 1418, 1420, 1421, 1424, 1426, 1429, 1433, 1428, + 1435, 1438, 1440, 1422, 1446, 1447, 1450, 1451, 5607, 1439, + 1461, 1452, 1459, 1457, 1441, 1462, 1470, 1465, 1467, 1468, + 1471, 1475, 1478, 5607, 1476, 5607, 5607, 1477, 5607, 5607, + 1479, 1492, 1485, 1489, 1481, 1502, 1499, 1504, 1505, 1506, + 1513, 1527, 1509, 1511, 1512, 1508, 1515, 1517, 1535, 1520, + 1523, 1524, 1536, 1537, 1543, 1547, 1544, 1550, 1551, 1552, - 1551, 1554, 1557, 1558, 1500, 1567, 1569, 1560, 1577, 5585, - 1573, 1585, 1586, 1582, 1589, 1581, 1588, 1590, 1591, 1592, - 1595, 1596, 1593, 1563, 1597, 1601, 1608, 1604, 5585, 1605, - 1607, 1613, 1611, 1619, 1621, 1615, 1617, 1624, 1628, 1627, - 1630, 1631, 1633, 5585, 1632, 1638, 1635, 1640, 1641, 1647, - 1648, 1649, 1650, 1651, 1653, 1654, 1658, 1665, 1652, 1663, - 1664, 1666, 1673, 1674, 1676, 1685, 1669, 1678, 1682, 1686, - 1690, 1691, 1698, 1693, 1700, 1695, 1703, 1705, 1704, 1701, - 1709, 1713, 1696, 1722, 1716, 1724, 1714, 1725, 1734, 1719, - 1731, 1726, 1735, 1737, 1733, 1741, 1742, 1746, 1747, 1749, + 1554, 1553, 1557, 1559, 1562, 1563, 1560, 1565, 1566, 1581, + 1579, 1568, 1586, 5607, 1582, 1589, 1596, 1592, 1599, 1591, + 1595, 1598, 1600, 1602, 1604, 1603, 1605, 1571, 1607, 1611, + 1618, 1613, 5607, 1614, 1617, 1622, 1621, 1625, 1629, 1631, + 1615, 1635, 1633, 1637, 1638, 1639, 1641, 5607, 1649, 1643, + 1646, 1650, 1653, 1657, 1658, 1654, 1659, 1660, 1661, 1662, + 1664, 1668, 1671, 1672, 1673, 1670, 1680, 1686, 1683, 1688, + 1691, 1675, 1696, 1698, 1699, 1700, 1701, 1708, 1703, 1710, + 1706, 1713, 1715, 1712, 1711, 1720, 1723, 1714, 1724, 1733, + 1731, 1729, 1736, 1743, 1738, 1742, 1739, 1745, 1752, 1744, - 1750, 5585, 1751, 1752, 5585, 1753, 1755, 1777, 1756, 1758, - 1759, 1761, 1764, 1779, 1763, 1770, 1785, 1781, 1797, 1787, - 1799, 1792, 1800, 1804, 1794, 1802, 1806, 1765, 1816, 1817, - 1813, 1819, 1824, 1821, 1822, 1826, 1845, 1825, 1827, 1828, - 1835, 1829, 1831, 1840, 1838, 1839, 1849, 1834, 1850, 5585, - 1861, 1857, 1856, 1863, 1872, 1862, 1869, 1870, 1873, 1874, - 1883, 1878, 1880, 1881, 1884, 1889, 1885, 1894, 1891, 1892, - 1896, 1893, 1913, 5585, 1895, 5585, 1898, 1897, 1908, 1909, - 1914, 1915, 1916, 1919, 1920, 1922, 1928, 1939, 1934, 5585, - 1926, 1941, 1944, 1943, 1936, 1918, 1937, 1949, 1951, 1958, + 1756, 1753, 1746, 1755, 1761, 1748, 5607, 1762, 1763, 5607, + 1764, 1769, 1791, 1770, 1772, 1765, 1774, 1778, 1779, 1782, + 1781, 1787, 1785, 1810, 1801, 1789, 1798, 1806, 1814, 1808, + 1805, 1816, 1817, 1824, 1831, 1828, 1834, 1838, 1820, 1833, + 1835, 1854, 1836, 1839, 1837, 1845, 1840, 1856, 1850, 1849, + 1846, 1847, 1870, 1867, 5607, 1878, 1876, 1864, 1875, 1887, + 1877, 1884, 1885, 1886, 1843, 1896, 1889, 1891, 1892, 1893, + 1900, 1899, 1904, 1902, 1906, 1901, 1905, 1918, 5607, 1908, + 5607, 1909, 1917, 1920, 1921, 1925, 1926, 1927, 1928, 1929, + 1931, 1944, 1936, 1938, 5607, 1942, 1953, 1955, 1946, 1948, - 1953, 1960, 1956, 1957, 1963, 1964, 1961, 1965, 1967, 1971, - 5585, 1974, 1975, 1976, 1985, 1987, 1981, 1984, 1989, 1988, - 1993, 1994, 1995, 1996, 2003, 2005, 2008, 2010, 2011, 2007, - 5585, 2000, 2004, 2023, 2020, 2021, 2022, 2025, 2026, 2027, - 2031, 2032, 2033, 2041, 2042, 2039, 2043, 2046, 2034, 2037, - 2047, 2060, 2050, 2055, 2057, 2058, 5585, 2061, 2063, 124, - 2065, 2066, 2070, 2067, 2069, 2074, 2071, 2090, 2092, 2088, - 2075, 2089, 2085, 2087, 2095, 2096, 2097, 2098, 2102, 2103, - 5585, 2107, 2104, 2108, 2109, 2113, 2110, 2115, 5585, 2127, - 2132, 2114, 2125, 2133, 2123, 2135, 2138, 2140, 2142, 2145, + 1950, 1954, 1960, 1961, 1963, 1964, 1971, 1966, 1967, 1974, + 1975, 1977, 1978, 1981, 1982, 5607, 1985, 1987, 1989, 1996, + 1998, 1992, 1999, 2002, 2006, 2000, 2004, 2008, 2009, 2011, + 2016, 2019, 2015, 2021, 2022, 2031, 5607, 2014, 2029, 2036, + 2034, 2035, 2037, 2038, 2039, 2040, 2043, 2045, 2046, 2053, + 2054, 2052, 2058, 2060, 2050, 2056, 2062, 2068, 2066, 2071, + 2072, 2073, 5607, 2075, 2077, 124, 2078, 2081, 2083, 2082, + 2079, 2086, 2089, 2099, 2103, 2100, 2102, 2101, 2107, 2108, + 2110, 2111, 2112, 2113, 2114, 2116, 5607, 2118, 2119, 2123, + 2124, 2128, 2125, 2132, 5607, 2142, 2144, 2140, 2136, 2127, - 2146, 5585, 2149, 2150, 2152, 2151, 2153, 2160, 2154, 2161, - 2162, 2166, 2167, 2168, 2173, 2169, 2170, 2172, 2174, 2178, - 2175, 2182, 2186, 2187, 5585, 2194, 2191, 2195, 2197, 2199, - 2198, 2213, 2200, 2201, 2208, 2222, 2224, 2214, 2209, 2226, - 2230, 2211, 2225, 2241, 2239, 2240, 2248, 2236, 2250, 2253, - 2242, 2228, 2252, 2254, 2255, 2259, 2263, 2270, 2271, 2267, - 2275, 2268, 2289, 2278, 2269, 5585, 2283, 2285, 2291, 2292, - 2299, 2294, 2297, 2296, 2295, 2303, 2305, 2306, 2307, 2308, - 2311, 2317, 2312, 2315, 2318, 2320, 2327, 2329, 2331, 5585, - 2332, 2334, 2336, 2338, 2341, 2344, 2345, 2347, 2348, 2349, + 2138, 2152, 2153, 2154, 2155, 2157, 2159, 5607, 2163, 2164, + 2165, 2166, 2167, 2171, 2174, 2176, 2177, 2179, 2181, 2180, + 2182, 2184, 2185, 2187, 2188, 2194, 2190, 2197, 2199, 2201, + 5607, 2209, 2202, 2207, 2211, 2213, 2212, 2226, 2214, 2221, + 2223, 2227, 2237, 2230, 2229, 2240, 2247, 2239, 2232, 2255, + 2252, 2253, 2261, 2251, 2263, 2265, 2254, 2259, 2266, 2267, + 2271, 2269, 2273, 2284, 2285, 2281, 2288, 2280, 2301, 2295, + 2297, 5607, 2299, 2290, 2304, 2306, 2313, 2309, 2311, 2310, + 2314, 2317, 2318, 2319, 2320, 2321, 2325, 2329, 2328, 2330, + 2335, 2333, 2341, 2343, 2345, 5607, 2348, 2344, 2350, 2352, - 2351, 2353, 2354, 2356, 2358, 2359, 2360, 5585, 2364, 2366, - 2372, 2374, 2375, 2378, 2384, 2381, 2379, 2387, 2388, 2389, - 5585, 2396, 2398, 2394, 2406, 2401, 2403, 2404, 2408, 2391, - 5585, 2405, 2409, 2418, 2419, 2414, 5585, 2423, 2416, 2421, - 2426, 2428, 2427, 2433, 2424, 2429, 2431, 2435, 2447, 2437, - 2443, 5585, 2439, 2456, 2451, 2452, 2457, 2453, 2459, 2462, - 2463, 2464, 2470, 2478, 2475, 2476, 2473, 2481, 2482, 2483, - 2485, 2486, 2489, 5585, 2490, 2493, 2494, 2495, 2497, 2498, - 2499, 2508, 2505, 2506, 2510, 2513, 2514, 2515, 2521, 2520, - 2530, 2519, 2522, 2532, 2523, 2536, 2539, 2540, 2547, 2549, + 2354, 2357, 2359, 2362, 2360, 2364, 2366, 2368, 2370, 2371, + 2372, 2373, 2375, 2379, 5607, 2380, 2386, 2388, 2389, 2394, + 2395, 2401, 2398, 2396, 2376, 2404, 2405, 5607, 2412, 2413, + 2410, 2422, 2408, 2409, 2419, 2421, 2423, 5607, 2424, 2425, + 2432, 2433, 2429, 5607, 2437, 2436, 2434, 2439, 2438, 2440, + 2441, 2445, 2446, 2449, 2455, 2462, 2447, 2459, 5607, 2453, + 2469, 2457, 2473, 2466, 2476, 2477, 2478, 2479, 2481, 2480, + 2491, 2495, 2486, 2488, 2489, 2498, 2500, 2501, 2503, 2502, + 5607, 2504, 2506, 2509, 2510, 2513, 2512, 2514, 2526, 2523, + 2521, 2525, 2528, 2529, 2531, 2532, 2534, 2542, 2536, 2546, - 2550, 2552, 5585, 2555, 2544, 2556, 2546, 2557, 2558, 2559, - 2561, 2563, 2567, 2569, 2568, 2570, 2578, 2585, 2576, 2580, - 2586, 2587, 2588, 2590, 2591, 2592, 2593, 2600, 2598, 2599, - 2607, 2602, 2608, 2615, 2604, 2613, 2616, 2617, 2619, 2618, - 2622, 2626, 2628, 2629, 2643, 2640, 2620, 2634, 2644, 2638, - 2646, 5585, 2649, 2655, 2630, 2656, 2658, 2659, 2661, 2663, - 2669, 2660, 2668, 2662, 2677, 2675, 5585, 2676, 5585, 2678, - 2679, 2687, 2689, 5585, 2691, 5585, 2692, 2697, 2685, 2693, - 5585, 2700, 2698, 2702, 2704, 2706, 2707, 2708, 2714, 2712, - 2710, 2716, 2719, 2717, 2722, 2724, 2723, 2727, 2732, 2733, + 2548, 2538, 2545, 2552, 2556, 2563, 2564, 2559, 2565, 5607, + 2568, 2570, 2562, 2569, 2572, 2575, 2576, 2577, 2579, 2580, + 2584, 2581, 2582, 2597, 2604, 2585, 2592, 2594, 2600, 2602, + 2607, 2606, 2608, 2609, 2616, 2615, 2614, 2623, 2618, 2624, + 2632, 2622, 2629, 2631, 2633, 2621, 2634, 2636, 2638, 2642, + 2644, 2647, 2649, 2653, 2658, 2659, 2660, 2661, 5607, 2664, + 2662, 2665, 2666, 2675, 2676, 2678, 2684, 2686, 2672, 2679, + 2687, 2695, 2694, 5607, 2691, 5607, 2696, 2698, 2699, 2708, + 2701, 5607, 2705, 5607, 2710, 2712, 2706, 2714, 5607, 2715, + 2716, 2719, 2723, 2720, 2725, 2726, 2732, 2727, 2729, 2734, - 2734, 2737, 2739, 2742, 2743, 2744, 5585, 2748, 2745, 2751, - 2752, 2754, 2755, 2756, 2761, 2758, 2764, 2760, 2770, 2767, - 2774, 2777, 2779, 2781, 2789, 5585, 2785, 2791, 2786, 2788, - 5585, 2792, 2793, 2795, 2802, 2798, 2800, 2804, 2806, 2807, - 2810, 2811, 2820, 2821, 2824, 2816, 2827, 2814, 2830, 2834, - 2835, 2836, 2841, 2849, 2845, 2844, 2846, 2847, 2848, 2851, - 2858, 2859, 2855, 2862, 2861, 2865, 2872, 2869, 2863, 2867, - 2873, 2875, 2876, 2879, 2882, 2883, 2878, 2880, 2885, 2886, - 5585, 2897, 2888, 2901, 2902, 2894, 2904, 2892, 2905, 2910, - 2911, 2913, 2912, 2914, 5585, 2917, 5585, 2915, 2922, 2928, + 2737, 2739, 2740, 2742, 2741, 2749, 2750, 2743, 2751, 2755, + 2757, 2760, 2761, 2762, 5607, 2766, 2769, 2770, 2771, 2772, + 2773, 2774, 2776, 2779, 2782, 2783, 2788, 2785, 2794, 2795, + 2803, 2789, 2807, 5607, 2804, 2811, 2806, 2808, 5607, 2812, + 2813, 2815, 2819, 2821, 2822, 2823, 2824, 2828, 2830, 2826, + 2833, 2847, 2843, 2844, 2845, 2831, 2849, 2860, 2857, 2858, + 2863, 2861, 2865, 2866, 2867, 2868, 2869, 2871, 2878, 2881, + 2877, 2886, 2873, 2883, 2891, 2892, 2876, 2884, 2893, 2895, + 2898, 2899, 2901, 2906, 2902, 2903, 2905, 2907, 5607, 2916, + 2910, 2920, 2917, 2921, 2924, 2908, 2926, 2931, 2927, 2934, - 2934, 2929, 2931, 2935, 2943, 2939, 2936, 2945, 2946, 2944, - 2948, 2947, 2953, 2957, 2958, 2960, 2962, 2959, 2965, 2968, - 2970, 2971, 2973, 5585, 2974, 2975, 2976, 2980, 2981, 2983, - 2991, 2989, 2982, 2994, 2995, 3003, 5585, 3004, 3011, 3007, - 3009, 3016, 3012, 3020, 3021, 5585, 3019, 3022, 3029, 3024, - 3031, 5585, 3030, 5585, 3026, 3028, 3033, 3035, 3042, 3043, - 3032, 3048, 3057, 3050, 3049, 3052, 3053, 3054, 3064, 3059, - 3060, 3061, 5585, 3066, 3068, 3071, 3073, 3077, 3080, 3074, - 3084, 5585, 3086, 3090, 3087, 3091, 3092, 3094, 3095, 3097, - 3096, 3098, 3099, 3100, 3119, 3102, 3105, 3115, 3117, 3122, + 2937, 2929, 5607, 2933, 5607, 2935, 2947, 2952, 2955, 2956, + 2939, 2958, 2963, 2959, 2964, 2965, 2966, 2967, 2969, 2973, + 2974, 2975, 2979, 2995, 2977, 2978, 2981, 2990, 2991, 2980, + 2992, 5607, 2997, 2999, 3000, 3002, 3003, 3006, 3009, 3007, + 3013, 3014, 3015, 3026, 5607, 3023, 3027, 3028, 3030, 3038, + 3034, 3042, 3041, 5607, 3040, 3043, 3050, 3045, 3052, 3054, + 5607, 3051, 5607, 3049, 3053, 3056, 3062, 3063, 3065, 3066, + 3067, 3075, 3070, 3073, 3074, 3077, 3082, 3085, 3084, 3086, + 3087, 5607, 3089, 3090, 3094, 3099, 3103, 3107, 3091, 3097, + 5607, 3101, 3114, 3109, 3111, 3115, 3118, 3119, 3122, 3124, - 3127, 5585, 3124, 3128, 3136, 3132, 3133, 3138, 3139, 3134, - 3135, 3141, 3143, 3144, 3146, 3148, 3147, 3151, 3158, 3150, - 3153, 3164, 3171, 3152, 3166, 3172, 3169, 3174, 3177, 3178, - 3182, 3184, 3175, 3187, 3196, 3190, 3192, 3199, 3200, 3207, - 3202, 5585, 3209, 3194, 3214, 3206, 3215, 3217, 3219, 3227, - 3210, 3225, 3226, 3234, 3230, 5585, 3238, 3233, 3239, 3240, - 3242, 3249, 3235, 3236, 3248, 3253, 3254, 3258, 3255, 3260, - 3261, 3264, 3265, 5585, 5585, 3267, 3268, 3270, 5585, 3272, - 3271, 3283, 3274, 3276, 3284, 3287, 3286, 3278, 3288, 3290, - 3291, 5585, 3296, 3306, 3298, 3302, 3311, 3314, 3313, 3310, + 3125, 3121, 3126, 3138, 3127, 3130, 3135, 3143, 3144, 3150, + 5607, 3151, 3145, 3158, 3160, 3153, 2832, 3161, 3155, 3157, + 3162, 3163, 3166, 3167, 3170, 3168, 3169, 3177, 3172, 3173, + 3185, 3193, 3189, 3178, 3190, 3191, 3194, 3198, 3200, 3203, + 3205, 3195, 3208, 3216, 3209, 3213, 3219, 3220, 3227, 3222, + 5607, 3229, 3226, 3237, 3228, 3232, 3239, 3240, 3242, 3233, + 3243, 3248, 3255, 3250, 5607, 3257, 3258, 3259, 3254, 3260, + 3273, 3262, 3264, 3266, 3277, 3269, 3278, 3274, 3280, 3281, + 3286, 3283, 5607, 5607, 3289, 3290, 3291, 5607, 3292, 3293, + 3304, 3297, 3299, 3306, 3305, 3307, 3308, 3309, 3311, 3313, - 3317, 3303, 3319, 3320, 3321, 3322, 3325, 3327, 3335, 3330, - 3331, 3333, 5585, 3334, 3336, 3341, 5585, 3339, 3343, 3342, - 3352, 3345, 3359, 3349, 3367, 3357, 3362, 3364, 3368, 3370, - 3377, 3372, 3374, 3381, 3382, 3385, 3375, 3393, 3395, 3402, - 3403, 3404, 3373, 3400, 3406, 3413, 5585, 3408, 3410, 3409, - 3411, 3422, 3412, 3423, 3415, 5585, 3419, 3424, 3425, 5585, - 3426, 3432, 3438, 3440, 3428, 3441, 3444, 3442, 3445, 3446, - 5585, 3449, 5585, 3453, 3452, 3457, 5585, 3459, 3460, 3461, - 3463, 3465, 3468, 3470, 3477, 3467, 3469, 3479, 3480, 3481, - 3483, 3490, 3482, 5585, 3491, 3486, 3489, 3493, 3500, 3495, + 5607, 3317, 3324, 3319, 3323, 3331, 3332, 3328, 3333, 3335, + 3336, 3340, 3341, 3342, 3343, 3346, 3347, 3355, 3350, 3351, + 3354, 5607, 3357, 3352, 3360, 5607, 3362, 3363, 3373, 3369, + 3365, 3376, 3382, 3384, 3368, 3385, 3386, 3387, 3388, 3390, + 3397, 3394, 3395, 3402, 3403, 3407, 3406, 3413, 3415, 3424, + 3425, 3426, 3416, 3427, 3421, 3434, 5607, 3429, 3431, 3436, + 3430, 3443, 3438, 3445, 3440, 5607, 3444, 3446, 3449, 5607, + 3447, 3457, 3462, 3464, 3451, 3459, 3466, 3468, 3469, 3467, + 5607, 3474, 5607, 3477, 3470, 3483, 5607, 3478, 3481, 3486, + 3488, 3485, 3492, 3495, 3499, 3489, 3496, 3501, 3502, 3503, - 3501, 3505, 3502, 5585, 5585, 3512, 5585, 3513, 3508, 3514, - 5585, 3506, 3517, 3525, 3518, 3526, 3532, 3529, 3533, 5585, - 3536, 3520, 3537, 3539, 3523, 3542, 3545, 3546, 3547, 3549, - 3550, 5585, 3551, 3553, 3560, 3552, 3555, 3563, 3562, 3561, - 5585, 3572, 3574, 3568, 3578, 3580, 5585, 3579, 5585, 3582, - 3584, 3585, 3589, 3590, 5585, 3592, 3596, 3599, 3595, 3601, - 3602, 3603, 3607, 3605, 3611, 3619, 3615, 3614, 3616, 5585, - 3617, 3618, 3626, 3628, 3622, 3630, 3639, 3635, 3641, 3638, - 3645, 3647, 3648, 3651, 3653, 3655, 3656, 3642, 3666, 3661, - 3657, 5585, 3668, 3671, 3672, 5585, 3673, 3674, 3679, 3675, + 3506, 3510, 3508, 5607, 3512, 3514, 3516, 3517, 3520, 3515, + 3523, 3526, 3528, 5607, 5607, 3534, 5607, 3535, 3530, 3536, + 5607, 3539, 3537, 3548, 3540, 3549, 3543, 3556, 3553, 5607, + 3558, 3547, 3559, 3562, 3563, 3564, 3566, 3568, 3569, 3570, + 3573, 5607, 3574, 3575, 3582, 3572, 3577, 3583, 3588, 3589, + 5607, 3591, 3598, 3599, 3601, 3603, 5607, 3602, 5607, 3604, + 3605, 3607, 3613, 3608, 5607, 3616, 3612, 3621, 3623, 3624, + 3628, 3631, 3632, 3625, 3633, 3640, 3639, 3635, 3638, 5607, + 3641, 3642, 3651, 3654, 3647, 3645, 3658, 3659, 3661, 3666, + 3668, 3657, 3670, 3672, 3675, 3676, 3677, 3678, 3687, 3680, - 3681, 3682, 3683, 3685, 5585, 3684, 3689, 3687, 3690, 5585, - 5585, 3702, 5585, 3703, 3688, 3691, 3704, 3705, 3707, 3713, - 3710, 3715, 3717, 3720, 3718, 3725, 3732, 3733, 3734, 3737, - 3735, 3729, 5585, 5585, 3742, 3744, 3739, 3747, 3750, 3752, - 3753, 3760, 3756, 3757, 3763, 3767, 3774, 5585, 3765, 3755, - 3773, 5585, 3766, 3776, 3778, 3779, 3780, 3782, 3783, 3787, - 3784, 3789, 3790, 3792, 3793, 3796, 3797, 3798, 3803, 3807, - 5585, 3808, 3809, 3810, 3812, 3813, 3814, 3817, 3819, 3820, - 5585, 3824, 3823, 3827, 3832, 3826, 3834, 3842, 3849, 3851, - 3844, 3852, 3853, 3846, 3857, 3861, 5585, 3862, 3860, 3863, + 3683, 5607, 3690, 3691, 3692, 5607, 3693, 3694, 3698, 3701, + 3703, 3704, 3708, 3705, 3710, 5607, 3711, 3715, 3712, 3713, + 5607, 5607, 3720, 5607, 3728, 3709, 3716, 3729, 3730, 3733, + 3736, 3737, 3741, 3738, 3744, 3745, 3743, 3759, 3760, 3767, + 3749, 3762, 3751, 5607, 5607, 3764, 3765, 3768, 3773, 3774, + 3769, 3776, 3784, 3782, 3785, 3789, 3790, 3798, 5607, 3779, + 3793, 3796, 5607, 3797, 3799, 3801, 3802, 3803, 3805, 3809, + 3807, 3810, 3811, 3815, 3812, 3816, 3818, 3827, 3821, 3829, + 3831, 5607, 3833, 3835, 3836, 3819, 3839, 3840, 3843, 3844, + 3845, 5607, 3846, 3849, 3850, 3852, 3857, 3860, 3867, 3870, - 3864, 3869, 3871, 3872, 3874, 3875, 3878, 3879, 3881, 3885, - 3888, 3882, 3889, 3890, 3892, 5585, 3895, 3902, 3897, 3906, - 3899, 3903, 3907, 3912, 3915, 3908, 3918, 3919, 3921, 5585, - 3922, 3923, 3924, 3925, 3931, 3926, 3932, 3934, 5585, 3936, - 3937, 3941, 3940, 3943, 3950, 3944, 3956, 3952, 5585, 3955, - 3959, 3960, 3961, 3962, 3963, 3966, 5585, 3968, 3974, 3970, - 3982, 3977, 3987, 3978, 3980, 3988, 3990, 3991, 3993, 3994, - 3992, 3995, 4010, 4007, 5585, 3996, 5585, 4008, 4012, 4015, - 4018, 4014, 5585, 4021, 4022, 4024, 4020, 4030, 5585, 4028, - 4025, 4029, 4031, 5585, 4042, 4046, 4032, 4047, 4049, 4053, + 3875, 3862, 3872, 3878, 3880, 3882, 3883, 5607, 3886, 3876, + 3884, 3887, 3894, 3898, 3890, 3901, 3895, 3903, 3905, 3906, + 3908, 3915, 3910, 3912, 3916, 3917, 5607, 3918, 3926, 3919, + 3928, 3922, 3929, 3931, 3932, 3942, 3937, 3939, 3943, 3945, + 5607, 3946, 3947, 3949, 3951, 3953, 3950, 3957, 3958, 5607, + 3960, 3961, 3851, 3963, 3965, 3967, 3971, 3974, 3975, 5607, + 3978, 3979, 3982, 3983, 3985, 3986, 3988, 3989, 5607, 3992, + 3994, 3996, 4006, 4001, 4009, 4005, 4002, 4004, 4012, 4014, + 4016, 4019, 4018, 4026, 4030, 4029, 5607, 4031, 5607, 4034, + 4035, 4044, 4039, 4037, 5607, 4042, 4045, 4047, 4041, 4053, - 5585, 4056, 4057, 4058, 4067, 4068, 4065, 4066, 4069, 4071, - 4072, 4073, 4074, 5585, 4077, 4076, 4085, 4082, 4088, 4078, - 4089, 4091, 4094, 5585, 4095, 4096, 4099, 4101, 4102, 4103, - 4104, 4111, 4108, 4110, 5585, 4113, 4112, 4124, 4122, 4125, - 5585, 5585, 4120, 4131, 4133, 4121, 4137, 5585, 4135, 4146, - 4141, 4143, 4145, 5585, 5585, 4149, 5585, 4126, 5585, 4150, - 4151, 5585, 5585, 4152, 4155, 4156, 4158, 4160, 5585, 4166, - 5585, 4168, 4169, 4171, 4172, 4173, 5585, 4174, 4176, 4180, - 5585, 4175, 4183, 4182, 4186, 5585, 4190, 4185, 4191, 5585, - 4195, 4198, 4202, 4203, 4210, 4192, 4199, 4205, 4211, 4215, + 5607, 4052, 4049, 4054, 4055, 5607, 4060, 4066, 4050, 4068, + 4073, 4074, 5607, 4077, 4078, 4079, 4088, 4089, 4086, 4087, + 4090, 4092, 4093, 4094, 4095, 5607, 4098, 4097, 4106, 4103, + 4109, 4099, 4110, 4112, 4115, 5607, 4116, 4117, 4120, 4122, + 4123, 4124, 4125, 4132, 4129, 4131, 5607, 4134, 4133, 4145, + 4143, 4146, 5607, 5607, 4141, 4152, 4154, 4142, 4158, 5607, + 4156, 4167, 4162, 4164, 4166, 5607, 5607, 4170, 5607, 4147, + 5607, 4171, 4172, 5607, 5607, 4173, 4176, 4177, 4179, 4181, + 5607, 4187, 5607, 4189, 4190, 4192, 4193, 4194, 5607, 4195, + 4197, 4201, 5607, 4196, 4204, 4203, 4207, 5607, 4211, 4206, - 4218, 4220, 4222, 4223, 4224, 4226, 4228, 4231, 4232, 4230, - 4233, 4237, 4239, 4241, 4234, 4026, 4245, 4247, 4248, 4251, - 4252, 4255, 4256, 4258, 4259, 4260, 4261, 4262, 4263, 4266, - 4268, 4274, 5585, 4269, 4270, 4277, 4278, 4280, 4286, 4288, - 4296, 4298, 4301, 5585, 4303, 5585, 4305, 4290, 3825, 4299, - 5585, 4307, 4310, 4309, 4312, 4311, 4313, 4316, 4314, 5585, - 4322, 4317, 4326, 4324, 5585, 4329, 4337, 4325, 4330, 4340, - 4341, 4342, 4344, 4345, 4346, 4350, 4352, 4359, 4354, 4355, - 4357, 4358, 4364, 4366, 4368, 4367, 4375, 4377, 4381, 5585, - 4371, 5585, 4378, 4382, 4383, 4385, 4388, 4389, 4391, 5585, + 4212, 5607, 4216, 4219, 4223, 4224, 4231, 4213, 4220, 4226, + 4232, 4236, 4239, 4241, 4243, 4244, 4245, 4247, 4248, 4250, + 4253, 4254, 4255, 4257, 4259, 4261, 4268, 4262, 4264, 4269, + 4270, 4272, 4276, 4278, 4280, 4282, 4283, 4284, 4286, 4287, + 4288, 4292, 4285, 4295, 4297, 5607, 4289, 4300, 4301, 4303, + 4305, 4308, 4315, 4317, 4326, 4327, 5607, 4329, 5607, 4331, + 4318, 4323, 4314, 5607, 4321, 4335, 4337, 4338, 4339, 4340, + 4343, 4344, 5607, 4347, 4342, 4354, 4350, 5607, 4356, 4352, + 4355, 4357, 4362, 4366, 4367, 4368, 4371, 4370, 4377, 4379, + 4380, 4372, 4382, 4383, 4388, 4384, 4391, 4394, 4396, 4401, - 5585, 4392, 4394, 4399, 4396, 4400, 4403, 4404, 5585, 4406, - 4413, 4415, 4407, 5585, 4416, 4419, 4423, 5585, 4425, 4427, - 4424, 4429, 4430, 4432, 4434, 5585, 5585, 5585, 5585, 4440, - 4431, 4438, 4442, 4445, 4447, 4449, 4446, 5585, 5585, 5585, - 4452, 4450, 4458, 4459, 4460, 4462, 4465, 5585, 4466, 4469, - 4470, 4468, 4477, 4485, 4480, 4486, 4472, 4478, 4488, 4489, - 4492, 4495, 4497, 4499, 4501, 5585, 5585, 4503, 4505, 4506, - 4513, 4514, 4515, 4517, 4518, 4521, 4523, 4524, 4525, 4529, - 4528, 5585, 4530, 4538, 5585, 4531, 5585, 4537, 4544, 4527, - 4546, 4547, 4548, 4550, 4552, 5585, 5585, 4536, 4553, 4558, + 4403, 4407, 5607, 4395, 5607, 4408, 4409, 4410, 4392, 4413, + 4415, 4419, 5607, 5607, 4416, 4420, 4425, 4426, 4421, 4430, + 4427, 5607, 4432, 4433, 4443, 4440, 5607, 4434, 4444, 4446, + 5607, 4448, 4450, 4451, 4456, 4452, 4459, 4462, 5607, 5607, + 5607, 5607, 4465, 4458, 4468, 4463, 4469, 4472, 4474, 4478, + 4473, 5607, 5607, 5607, 4479, 4475, 4485, 4486, 4487, 4491, + 4493, 5607, 4492, 4497, 4498, 4495, 4505, 4509, 4511, 4512, + 4496, 4513, 4521, 4519, 4522, 4520, 4525, 4527, 4529, 5607, + 5607, 4532, 4534, 4536, 4543, 4541, 4544, 4553, 4548, 4550, + 4551, 4554, 4556, 4557, 4558, 5607, 4561, 4565, 5607, 4559, - 4563, 4560, 4565, 4554, 4567, 4564, 5585, 4570, 5585, 4568, - 4571, 4581, 4572, 4582, 4584, 4592, 4590, 4587, 4591, 5585, - 4593, 4594, 5585, 4599, 4598, 4600, 5585, 4604, 4609, 4611, - 5585, 4614, 5585, 4617, 5585, 4601, 4624, 5585, 4606, 4619, - 4628, 4630, 4622, 4631, 5585, 4632, 4634, 4635, 4638, 4639, - 4641, 4642, 4643, 4645, 4652, 4648, 4649, 5585, 5585, 4657, - 4658, 4660, 4662, 4663, 4670, 4665, 4667, 4673, 5585, 5585, - 4674, 5585, 4668, 4675, 5585, 4666, 4683, 4677, 4684, 4685, - 4687, 4688, 4693, 4696, 4697, 4710, 4698, 4700, 4711, 4713, - 4718, 4720, 4706, 4723, 4716, 4701, 4724, 4725, 4726, 5585, + 5607, 4567, 4573, 4563, 4574, 4575, 4576, 4579, 4577, 5607, + 5607, 4582, 4583, 4588, 4590, 4591, 4593, 4594, 4596, 4592, + 5607, 4597, 5607, 4598, 4600, 4606, 4599, 4614, 4619, 4621, + 4617, 4620, 4622, 5607, 4623, 4625, 5607, 4626, 4629, 4631, + 5607, 4633, 4636, 4640, 5607, 4642, 5607, 4645, 5607, 4637, + 4653, 5607, 4648, 4649, 5607, 4655, 4659, 4660, 4651, 5607, + 4656, 4662, 4665, 4670, 4667, 4672, 4673, 4675, 4676, 4683, + 4679, 4680, 5607, 5607, 4695, 4681, 4685, 4687, 4691, 4698, + 4688, 4696, 4702, 5607, 5607, 4703, 5607, 4706, 4709, 5607, + 4699, 4715, 4710, 4711, 4717, 4719, 4720, 4722, 4723, 4725, - 4730, 4731, 4732, 5585, 4738, 4735, 4740, 4743, 5585, 4752, - 4744, 4747, 4749, 5585, 4741, 4755, 4757, 4760, 4762, 4771, - 4763, 4764, 5585, 5585, 5585, 5585, 4767, 4768, 5585, 4772, - 4775, 5585, 5585, 4774, 4779, 4778, 5585, 4780, 5585, 4782, - 5585, 4784, 4785, 4793, 4791, 5585, 4796, 4804, 5585, 4807, - 4810, 4812, 4813, 4795, 4783, 4814, 5585, 4823, 4816, 4820, - 4827, 4818, 4824, 4828, 4829, 4837, 4830, 4835, 5585, 4832, - 4838, 4839, 5585, 4841, 5585, 4843, 4844, 4842, 4849, 4848, - 4850, 4852, 4861, 4854, 4863, 4865, 5585, 4868, 4871, 5585, - 4872, 5585, 4874, 5585, 4875, 4876, 4878, 4877, 5585, 4886, + 4732, 4729, 4737, 4740, 4743, 4745, 4749, 4738, 4747, 4751, + 4730, 4753, 4755, 4757, 5607, 4759, 4760, 4761, 5607, 4765, + 4766, 4768, 4769, 5607, 4781, 4776, 4778, 4782, 5607, 4770, + 4784, 4786, 4789, 4792, 4800, 4793, 4795, 5607, 5607, 5607, + 5607, 4797, 4801, 5607, 4802, 4803, 5607, 5607, 4805, 4808, + 4809, 5607, 4810, 5607, 4812, 5607, 4813, 4816, 4823, 4825, + 5607, 4826, 4835, 5607, 4828, 4838, 4841, 4842, 4832, 4843, + 4844, 5607, 4820, 4845, 4848, 4847, 4854, 4855, 4856, 4857, + 4864, 4859, 4866, 5607, 4860, 4863, 4867, 5607, 4869, 5607, + 4870, 4873, 4877, 4871, 4874, 4882, 4885, 4889, 4888, 4892, - 4879, 4881, 4883, 5585, 4887, 4889, 5585, 4890, 4896, 4898, - 4901, 4905, 4907, 4908, 4909, 4916, 4911, 4912, 4913, 4915, - 4919, 4920, 5585, 5585, 5585, 4923, 4927, 4934, 4932, 4936, - 4943, 4938, 5585, 4940, 4941, 4942, 4950, 4948, 4952, 5585, - 4954, 4949, 4955, 5585, 4958, 4960, 4962, 4963, 4969, 4971, - 4973, 4976, 4978, 5585, 4980, 5585, 5585, 4981, 5585, 4982, - 4984, 4985, 4986, 5585, 4989, 4991, 4990, 4992, 4994, 4995, - 4997, 5585, 5585, 4999, 5585, 5009, 5003, 5018, 5011, 5013, - 5016, 5019, 5585, 5020, 5022, 5025, 5026, 5027, 5585, 5028, - 5029, 5031, 5032, 5035, 5034, 5037, 5039, 5041, 5585, 5585, + 4896, 5607, 4898, 4900, 5607, 4895, 5607, 4903, 5607, 4904, + 4905, 4906, 4907, 5607, 4909, 4910, 4911, 4913, 5607, 4917, + 4919, 5607, 4923, 4516, 4925, 4927, 4929, 4936, 4931, 4937, + 4944, 4939, 4941, 4942, 4946, 4947, 4951, 5607, 5607, 5607, + 4948, 4943, 4965, 4967, 4961, 4974, 4954, 5607, 4970, 4971, + 4969, 4979, 4977, 4981, 5607, 4983, 4978, 4984, 5607, 4986, + 4990, 4987, 4991, 4996, 4999, 5003, 5007, 5004, 5607, 5011, + 5607, 5607, 5000, 5607, 5008, 5012, 5013, 5014, 5607, 5017, + 5018, 5020, 5022, 5024, 5025, 5021, 5607, 5607, 5028, 5607, + 5037, 5029, 5039, 5038, 5041, 5046, 5042, 5607, 5048, 5051, - 5043, 5044, 5585, 5585, 5059, 5062, 5045, 5585, 5585, 5585, - 5065, 5585, 5067, 5071, 5075, 5079, 5070, 5585, 5081, 5078, - 5083, 5585, 5082, 5085, 5585, 5585, 5086, 5088, 5047, 5089, - 5585, 5090, 5091, 5094, 5099, 5102, 5103, 5105, 5107, 5112, - 5115, 5113, 5114, 5120, 5117, 5121, 5123, 5125, 5127, 5585, - 5585, 5131, 5585, 5585, 5134, 5136, 5140, 5144, 5146, 5148, - 5150, 5585, 5128, 5152, 5153, 5585, 5155, 5156, 5157, 5160, - 5158, 5161, 5163, 5585, 5585, 5164, 5165, 5166, 5174, 5167, - 5585, 5177, 5184, 5169, 5181, 5179, 5187, 5188, 5585, 5191, - 5585, 5585, 5585, 5585, 5585, 5585, 5585, 5585, 5190, 5585, + 5052, 5053, 5054, 5607, 5055, 5056, 5058, 5059, 5062, 5061, + 5064, 5066, 5067, 5607, 5607, 5069, 5070, 5607, 5607, 5074, + 5085, 5086, 5607, 5607, 5607, 5092, 5607, 5094, 5098, 5102, + 5106, 5097, 5607, 5108, 5105, 5110, 5607, 5109, 5112, 5607, + 5607, 5113, 5115, 5116, 5117, 5607, 5118, 5121, 5126, 5129, + 5134, 5122, 5135, 5138, 5145, 5148, 5131, 5143, 5141, 5146, + 5149, 5152, 5160, 5161, 5607, 5607, 5164, 5607, 5607, 5168, + 5170, 5173, 5175, 5177, 5179, 5181, 5607, 5182, 5184, 5165, + 5607, 5187, 5188, 5189, 5076, 5192, 5190, 5195, 5607, 5607, + 5196, 5197, 5198, 5206, 5199, 5607, 5201, 5215, 5208, 5211, - 5195, 5585, 5189, 5199, 5196, 5197, 5201, 5585, 5202, 5203, - 5211, 5207, 5213, 5218, 5210, 5220, 5222, 5221, 5224, 5226, - 5227, 5230, 5585, 5229, 5231, 5233, 5235, 5246, 5252, 5255, - 5257, 5242, 5238, 5259, 5260, 5263, 5247, 5264, 5273, 5266, - 5269, 5271, 5274, 5276, 5585, 5277, 5585, 5278, 5585, 5585, - 5282, 5283, 5286, 5285, 5297, 5301, 5288, 5287, 5290, 5299, - 5585, 5303, 5585, 5305, 5306, 5585, 5307, 5308, 5311, 5312, - 5315, 5314, 5316, 5317, 5585, 5318, 5320, 5332, 5324, 5340, - 5337, 5341, 5342, 5343, 5326, 5350, 5349, 5352, 5585, 5353, - 5355, 5356, 5358, 5359, 5366, 5361, 5362, 5364, 5585, 5368, + 5210, 5212, 5218, 5607, 5213, 5607, 5607, 5607, 5607, 5607, + 5607, 5607, 5607, 5220, 5607, 5226, 5607, 5219, 5227, 5153, + 5221, 5231, 5607, 5232, 5233, 5235, 5237, 5238, 5246, 5243, + 5248, 5250, 5249, 5251, 5254, 5252, 5257, 5607, 5258, 5259, + 5261, 5262, 5264, 5274, 5281, 5283, 5266, 5270, 5284, 5286, + 5288, 5278, 5289, 5298, 5294, 5295, 5297, 5299, 5301, 5607, + 5302, 5607, 5305, 5607, 5607, 5307, 5309, 5311, 5312, 5320, + 5322, 5313, 5321, 5324, 5326, 5607, 5328, 5607, 5330, 5329, + 5607, 5332, 5335, 5336, 5337, 5338, 5339, 5341, 5342, 5607, + 5345, 5349, 5354, 5356, 5365, 5366, 5357, 5364, 5370, 5360, - 5370, 5371, 5369, 5372, 5373, 5383, 5385, 5381, 5585, 5387, - 5392, 5389, 5395, 5397, 5399, 5400, 5401, 5403, 5405, 5234, - 5412, 5409, 5414, 5406, 5417, 5415, 5585, 5419, 5423, 5585, - 5424, 5426, 5427, 5428, 5432, 5585, 5436, 5430, 5437, 5438, - 5441, 5443, 5585, 5445, 5452, 5448, 5585, 5453, 5585, 5585, - 5454, 5457, 5460, 5462, 5464, 5585, 5585, 5585, 5493, 5500, - 5507, 5514, 5521, 88, 5528, 5535, 5542, 5549, 5556, 5563, - 5570, 5577 + 5377, 5373, 5381, 5607, 5372, 5374, 5382, 5383, 5384, 5391, + 5386, 5387, 5394, 5607, 5397, 5392, 5406, 5388, 5390, 5399, + 5413, 5410, 5408, 5607, 5398, 5416, 5418, 5419, 5422, 5425, + 5426, 5427, 5429, 5431, 5432, 5439, 5435, 5440, 5441, 5443, + 5444, 5607, 5450, 5445, 5607, 5451, 5452, 5453, 5454, 5458, + 5607, 5462, 5455, 5465, 5466, 5469, 5470, 5607, 5476, 5479, + 5480, 5607, 5481, 5607, 5607, 5483, 5471, 5482, 5492, 5494, + 5607, 5607, 5607, 5515, 5522, 5529, 5536, 5543, 88, 5550, + 5557, 5564, 5571, 5578, 5585, 5592, 5599 } ; -static yyconst flex_int16_t yy_def[2873] = +static yyconst flex_int16_t yy_def[2888] = { 0, - 2858, 1, 2859, 2859, 2860, 2860, 2861, 2861, 2862, 2862, - 2863, 2863, 2858, 2864, 2858, 2858, 2858, 2858, 2865, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2866, 2858, 2858, 2858, 2866, 2867, 2858, 2858, - 2858, 2867, 2868, 2858, 2858, 2858, 2858, 2868, 2869, 2858, - 2858, 2858, 2869, 2870, 2858, 2871, 2858, 2870, 2870, 2864, - 2864, 2858, 2872, 2865, 2872, 2865, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2873, 1, 2874, 2874, 2875, 2875, 2876, 2876, 2877, 2877, + 2878, 2878, 2873, 2879, 2873, 2873, 2873, 2873, 2880, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2881, 2873, 2873, 2873, 2881, 2882, 2873, 2873, + 2873, 2882, 2883, 2873, 2873, 2873, 2873, 2883, 2884, 2873, + 2873, 2873, 2884, 2885, 2873, 2886, 2873, 2885, 2885, 2879, + 2879, 2873, 2887, 2880, 2887, 2880, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2866, - 2866, 2867, 2867, 2868, 2868, 2858, 2869, 2869, 2870, 2870, - 2871, 2871, 2870, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2881, + 2881, 2882, 2882, 2883, 2883, 2873, 2884, 2884, 2885, 2885, + 2886, 2886, 2885, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2870, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2885, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2870, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2885, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2870, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2885, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2870, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2858, 2858, 2864, 2858, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2885, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2873, 2873, 2879, 2873, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2870, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2885, 2879, - 2864, 2858, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2870, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2879, 2885, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2858, 2864, - 2864, 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2858, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2858, 2858, 2864, 2858, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2858, - 2858, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, + 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2873, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2858, 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2858, 2858, 2864, 2858, 2864, 2858, 2864, - 2864, 2858, 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, + 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2879, + 2873, 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2858, 2858, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2858, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2858, 2858, 2864, 2864, 2864, + 2879, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, + 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2873, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2858, 2864, 2858, 2864, 2858, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2858, - 2864, 2858, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2873, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2873, 2879, 2873, 2879, 2873, 2879, + 2879, 2873, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2858, 2858, 2858, 2864, 2864, 2858, 2864, - 2864, 2858, 2858, 2864, 2864, 2864, 2858, 2864, 2858, 2864, - 2858, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2858, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2858, - 2864, 2858, 2864, 2858, 2864, 2864, 2864, 2864, 2858, 2864, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2873, + 2873, 2879, 2879, 2873, 2879, 2879, 2873, 2873, 2879, 2879, + 2879, 2873, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2858, 2864, 2864, 2858, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2858, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2864, 2858, 2858, 2864, 2858, 2864, - 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2858, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2858, + 2879, 2873, 2879, 2879, 2873, 2879, 2873, 2879, 2873, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, + 2873, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2864, 2864, 2858, 2858, 2864, 2864, 2864, 2858, 2858, 2858, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2858, 2864, 2864, 2858, 2858, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, - 2858, 2864, 2858, 2858, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2858, 2858, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2864, 2858, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2873, 2879, 2879, 2873, 2873, 2879, + 2879, 2879, 2873, 2873, 2873, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2873, + 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2873, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2858, 2864, 2858, 2858, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2858, 2864, 2858, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, + 2879, 2879, 2879, 2873, 2879, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2879, 2873, 2879, 2873, 2879, 2879, 2879, + 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2873, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, - 2864, 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2858, - 2864, 2864, 2864, 2864, 2864, 2858, 2864, 2864, 2864, 2864, - 2864, 2864, 2858, 2864, 2864, 2864, 2858, 2864, 2858, 2858, - 2864, 2864, 2864, 2864, 2864, 2858, 2858, 0, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - 2858, 2858 + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2879, 2873, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2879, 2873, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, + 2873, 2873, 0, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873 } ; -static yyconst flex_uint16_t yy_nxt[5626] = +static yyconst flex_uint16_t yy_nxt[5648] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1402,7 +1406,7 @@ static yyconst flex_uint16_t yy_nxt[5626] = 160, 71, 71, 172, 71, 71, 71, 71, 165, 71, 71, 182, 164, 161, 166, 71, 167, 168, 169, 174, 71, 71, 173, 170, 175, 179, 176, 177, 180, 71, - 71, 248, 188, 181, 178, 183, 71, 71, 71, 184, + 71, 249, 188, 181, 178, 183, 71, 71, 71, 184, 71, 71, 185, 71, 193, 191, 71, 199, 194, 196, 71, 198, 71, 200, 197, 186, 187, 189, 71, 202, @@ -1410,590 +1414,592 @@ static yyconst flex_uint16_t yy_nxt[5626] = 71, 203, 71, 208, 71, 211, 71, 209, 71, 205, 204, 71, 213, 71, 224, 207, 222, 216, 71, 210, 212, 214, 71, 71, 221, 217, 218, 215, 71, 71, - 223, 71, 71, 71, 225, 71, 71, 219, 231, 71, - 235, 220, 71, 71, 71, 227, 226, 232, 148, 230, - 228, 234, 71, 229, 236, 140, 140, 238, 239, 233, - 142, 237, 144, 142, 144, 144, 71, 144, 147, 147, - 149, 241, 149, 149, 75, 149, 75, 75, 150, 75, + 223, 225, 71, 71, 226, 71, 71, 219, 71, 71, + 232, 220, 71, 71, 236, 228, 227, 235, 71, 233, + 71, 229, 231, 239, 230, 237, 140, 140, 148, 142, + 238, 234, 142, 144, 240, 144, 144, 71, 144, 147, + 147, 149, 242, 149, 149, 75, 149, 75, 75, 150, - 71, 240, 242, 71, 71, 71, 152, 71, 71, 71, - 71, 249, 71, 246, 71, 252, 71, 243, 244, 245, - 247, 255, 71, 254, 251, 71, 250, 71, 256, 260, - 258, 71, 253, 71, 259, 71, 71, 261, 292, 71, - 264, 257, 262, 71, 269, 265, 71, 71, 71, 71, - 266, 274, 271, 272, 275, 71, 267, 268, 71, 263, - 71, 273, 277, 71, 71, 270, 71, 71, 278, 279, - 71, 71, 71, 71, 293, 284, 285, 290, 281, 280, - 71, 282, 71, 276, 295, 283, 71, 286, 71, 294, - 71, 297, 287, 291, 299, 300, 296, 71, 71, 303, + 75, 71, 241, 243, 71, 71, 71, 152, 71, 71, + 71, 71, 250, 71, 247, 71, 253, 71, 244, 245, + 246, 248, 256, 71, 255, 252, 71, 251, 71, 257, + 261, 259, 71, 254, 71, 260, 71, 71, 262, 293, + 71, 265, 258, 263, 71, 270, 266, 71, 71, 71, + 71, 267, 275, 272, 273, 276, 71, 268, 269, 71, + 264, 71, 274, 278, 71, 71, 271, 71, 71, 279, + 280, 71, 71, 71, 71, 294, 285, 286, 291, 282, + 281, 71, 283, 71, 277, 296, 284, 71, 287, 71, + 295, 71, 298, 288, 292, 300, 301, 297, 71, 71, - 71, 71, 298, 71, 288, 71, 289, 305, 304, 306, - 301, 71, 71, 71, 71, 71, 71, 71, 307, 302, - 309, 71, 71, 311, 71, 308, 71, 71, 71, 71, - 313, 315, 71, 71, 71, 71, 310, 314, 316, 320, - 324, 71, 317, 312, 318, 322, 71, 71, 327, 71, - 146, 321, 319, 71, 71, 329, 71, 323, 331, 71, - 71, 332, 334, 330, 71, 325, 326, 71, 71, 328, - 71, 339, 335, 71, 337, 338, 71, 71, 333, 341, - 71, 71, 342, 71, 336, 71, 150, 71, 345, 71, - 71, 71, 71, 71, 352, 340, 350, 348, 346, 343, + 304, 71, 71, 299, 71, 289, 71, 290, 306, 305, + 307, 302, 71, 71, 71, 71, 71, 71, 71, 308, + 303, 310, 71, 71, 312, 71, 309, 71, 71, 71, + 71, 314, 316, 71, 71, 71, 71, 311, 315, 317, + 321, 325, 71, 318, 313, 319, 323, 71, 71, 328, + 71, 71, 322, 320, 71, 71, 330, 71, 324, 331, + 71, 332, 333, 334, 71, 336, 326, 327, 71, 71, + 329, 71, 71, 71, 339, 341, 337, 340, 71, 335, + 71, 71, 343, 71, 71, 344, 338, 71, 71, 347, + 71, 71, 150, 71, 71, 71, 367, 71, 350, 342, - 71, 353, 71, 71, 344, 356, 347, 71, 354, 71, - 349, 71, 71, 71, 355, 351, 71, 357, 362, 71, - 71, 71, 363, 364, 71, 366, 358, 361, 71, 71, - 360, 359, 71, 367, 365, 71, 71, 71, 369, 368, - 71, 370, 71, 71, 71, 371, 373, 376, 374, 71, - 372, 375, 378, 71, 71, 380, 379, 71, 71, 71, - 71, 71, 384, 377, 381, 71, 383, 385, 71, 71, - 71, 71, 390, 71, 71, 71, 71, 391, 71, 386, - 393, 382, 71, 389, 71, 395, 387, 71, 71, 399, - 388, 397, 71, 392, 71, 71, 394, 400, 71, 398, + 352, 354, 345, 346, 348, 71, 349, 71, 355, 358, + 356, 351, 71, 71, 71, 71, 353, 357, 71, 71, + 71, 71, 364, 71, 365, 71, 366, 71, 359, 363, + 71, 71, 360, 146, 362, 71, 368, 361, 369, 71, + 371, 71, 374, 370, 71, 372, 71, 373, 71, 375, + 71, 378, 376, 71, 380, 382, 71, 71, 381, 377, + 71, 71, 71, 71, 385, 71, 383, 379, 387, 71, + 386, 71, 71, 71, 71, 71, 392, 71, 71, 71, + 393, 71, 71, 384, 145, 395, 391, 71, 397, 388, + 389, 71, 390, 71, 399, 401, 394, 396, 71, 71, - 396, 71, 71, 71, 401, 71, 71, 408, 410, 411, - 71, 412, 145, 414, 402, 415, 71, 403, 71, 409, - 417, 418, 404, 405, 406, 407, 71, 413, 416, 419, - 71, 71, 71, 71, 420, 71, 426, 71, 71, 428, - 71, 71, 424, 421, 425, 427, 422, 423, 71, 71, - 71, 71, 71, 430, 435, 71, 429, 71, 438, 71, - 71, 431, 437, 71, 71, 71, 450, 434, 439, 432, - 440, 433, 71, 444, 71, 436, 441, 442, 71, 443, - 71, 445, 71, 71, 143, 71, 452, 451, 71, 449, - 71, 71, 453, 71, 446, 516, 454, 447, 71, 448, + 398, 71, 402, 71, 71, 400, 71, 71, 71, 416, + 403, 71, 410, 412, 71, 71, 426, 413, 71, 414, + 404, 71, 411, 405, 421, 71, 71, 418, 406, 407, + 408, 409, 71, 425, 417, 415, 71, 71, 419, 420, + 422, 427, 71, 423, 428, 71, 424, 429, 71, 430, + 71, 71, 71, 71, 71, 71, 432, 437, 71, 71, + 71, 71, 440, 71, 433, 431, 439, 143, 71, 451, + 436, 71, 434, 446, 435, 71, 441, 453, 438, 71, + 442, 71, 444, 71, 445, 71, 443, 71, 447, 71, + 452, 71, 454, 71, 71, 71, 71, 455, 71, 71, - 464, 71, 71, 71, 455, 71, 456, 466, 457, 463, - 462, 71, 478, 465, 467, 469, 71, 477, 150, 141, - 71, 458, 481, 71, 459, 71, 460, 71, 461, 71, - 468, 71, 479, 470, 471, 484, 485, 480, 71, 482, - 71, 71, 483, 472, 486, 473, 474, 475, 487, 71, - 476, 491, 71, 71, 71, 488, 71, 71, 71, 71, - 489, 492, 71, 490, 493, 71, 500, 497, 71, 499, - 71, 496, 494, 495, 498, 71, 504, 71, 501, 71, - 502, 71, 71, 71, 503, 71, 507, 508, 509, 71, - 71, 71, 71, 514, 71, 506, 71, 519, 517, 71, + 71, 448, 466, 456, 449, 71, 450, 457, 467, 481, + 468, 465, 469, 472, 71, 458, 71, 459, 589, 460, + 480, 71, 482, 71, 470, 150, 71, 483, 71, 484, + 71, 71, 461, 486, 71, 462, 490, 463, 71, 464, + 471, 71, 71, 473, 474, 487, 485, 488, 71, 71, + 489, 71, 491, 475, 492, 476, 477, 478, 494, 71, + 479, 71, 493, 71, 71, 71, 71, 502, 495, 71, + 500, 497, 496, 71, 71, 503, 499, 71, 501, 498, + 71, 505, 507, 71, 71, 71, 504, 71, 71, 510, + 71, 506, 511, 512, 71, 71, 71, 71, 517, 509, - 71, 511, 505, 510, 71, 512, 513, 71, 71, 71, - 71, 515, 71, 518, 529, 521, 71, 71, 520, 525, - 522, 528, 524, 71, 71, 523, 531, 530, 532, 71, - 526, 71, 527, 71, 71, 534, 71, 533, 536, 71, - 535, 71, 538, 71, 537, 71, 71, 542, 540, 543, - 71, 71, 539, 71, 544, 71, 71, 71, 541, 71, - 549, 547, 548, 71, 71, 71, 545, 71, 550, 71, - 71, 71, 555, 71, 546, 551, 559, 556, 71, 554, - 71, 558, 557, 553, 552, 71, 561, 71, 562, 71, - 71, 71, 71, 71, 71, 71, 572, 71, 564, 560, + 71, 514, 71, 522, 519, 508, 515, 513, 516, 71, + 71, 71, 524, 520, 71, 71, 518, 71, 71, 71, + 141, 71, 71, 532, 528, 71, 533, 525, 521, 523, + 531, 527, 526, 535, 534, 529, 71, 530, 71, 71, + 536, 71, 537, 539, 71, 538, 71, 541, 71, 71, + 71, 71, 545, 546, 543, 71, 71, 71, 71, 71, + 547, 542, 71, 544, 540, 71, 71, 550, 71, 552, + 548, 551, 71, 71, 71, 71, 556, 553, 549, 71, + 71, 71, 558, 71, 554, 555, 557, 559, 71, 561, + 71, 71, 560, 71, 563, 562, 71, 564, 71, 565, - 565, 71, 71, 574, 71, 567, 575, 71, 71, 71, - 563, 571, 566, 568, 570, 569, 573, 71, 576, 71, - 579, 71, 584, 582, 581, 577, 71, 71, 578, 71, - 71, 71, 585, 71, 71, 588, 71, 71, 71, 580, - 71, 589, 591, 71, 71, 71, 71, 583, 604, 590, - 71, 71, 586, 71, 587, 608, 592, 593, 71, 594, - 603, 150, 71, 602, 595, 605, 596, 606, 609, 71, - 71, 71, 597, 607, 598, 610, 71, 599, 600, 71, - 613, 71, 618, 71, 601, 612, 71, 611, 71, 71, - 71, 614, 616, 71, 619, 615, 71, 621, 71, 71, + 568, 567, 566, 71, 71, 71, 71, 71, 575, 71, + 71, 577, 71, 71, 71, 578, 570, 71, 576, 71, + 71, 574, 584, 569, 571, 573, 572, 579, 580, 582, + 585, 581, 583, 71, 71, 71, 71, 71, 71, 588, + 71, 71, 591, 71, 71, 592, 71, 587, 594, 71, + 71, 71, 71, 71, 586, 608, 593, 71, 590, 71, + 595, 71, 597, 611, 71, 596, 71, 598, 607, 612, + 606, 609, 599, 610, 600, 71, 613, 71, 71, 71, + 601, 71, 602, 614, 617, 603, 604, 71, 616, 71, + 71, 615, 605, 619, 71, 618, 71, 620, 71, 623, - 71, 71, 623, 622, 617, 71, 627, 71, 620, 71, - 71, 71, 71, 624, 628, 150, 631, 634, 625, 633, - 632, 71, 626, 71, 630, 71, 629, 636, 71, 71, - 71, 71, 71, 635, 643, 641, 71, 646, 71, 645, - 71, 71, 638, 71, 637, 639, 644, 640, 648, 642, - 71, 71, 71, 647, 71, 650, 71, 71, 71, 71, - 654, 71, 649, 653, 659, 651, 71, 71, 655, 660, - 71, 652, 662, 71, 71, 656, 664, 658, 657, 661, - 663, 71, 71, 665, 71, 666, 71, 667, 668, 71, - 71, 71, 669, 71, 71, 670, 71, 675, 71, 673, + 71, 625, 71, 71, 621, 71, 71, 622, 71, 71, + 71, 626, 71, 631, 624, 627, 71, 628, 632, 150, + 638, 71, 635, 637, 629, 71, 71, 634, 630, 633, + 636, 71, 71, 71, 71, 71, 71, 639, 150, 71, + 645, 71, 71, 647, 649, 71, 640, 642, 650, 643, + 648, 641, 646, 644, 71, 71, 652, 71, 71, 71, + 71, 654, 71, 71, 71, 666, 71, 651, 657, 653, + 71, 71, 663, 655, 658, 656, 71, 664, 71, 659, + 662, 71, 667, 71, 668, 71, 660, 669, 71, 661, + 71, 670, 71, 671, 665, 71, 71, 672, 673, 71, - 71, 71, 672, 674, 71, 677, 678, 71, 679, 71, - 671, 71, 71, 71, 681, 683, 71, 71, 684, 676, - 71, 71, 71, 686, 71, 680, 71, 690, 687, 692, - 685, 682, 688, 71, 71, 689, 71, 696, 693, 71, - 691, 71, 698, 71, 71, 71, 71, 71, 694, 699, - 697, 695, 701, 71, 71, 71, 702, 71, 71, 703, - 704, 71, 706, 708, 705, 710, 71, 71, 71, 71, - 707, 700, 71, 71, 716, 71, 711, 71, 718, 71, - 71, 709, 714, 717, 715, 713, 71, 712, 71, 719, - 71, 71, 723, 720, 725, 71, 724, 721, 71, 71, + 71, 674, 71, 71, 675, 677, 71, 682, 676, 71, + 71, 678, 71, 71, 681, 71, 683, 71, 71, 687, + 71, 148, 685, 71, 71, 71, 679, 71, 680, 688, + 690, 71, 694, 684, 689, 691, 71, 71, 686, 692, + 71, 693, 696, 71, 71, 697, 700, 71, 71, 71, + 71, 702, 71, 703, 695, 705, 701, 698, 71, 699, + 71, 706, 71, 71, 71, 707, 71, 71, 71, 714, + 71, 710, 712, 71, 71, 704, 71, 71, 708, 711, + 71, 709, 715, 71, 720, 71, 718, 71, 713, 740, + 71, 721, 717, 716, 71, 719, 71, 722, 71, 723, - 71, 71, 726, 728, 722, 71, 727, 71, 729, 71, - 734, 71, 71, 740, 732, 733, 71, 71, 730, 71, - 731, 736, 737, 71, 71, 71, 738, 71, 743, 71, - 735, 747, 742, 744, 71, 71, 741, 71, 745, 71, - 71, 739, 749, 71, 71, 71, 71, 71, 71, 71, - 746, 755, 71, 71, 748, 71, 71, 750, 756, 763, - 71, 751, 752, 757, 753, 71, 754, 758, 761, 71, - 71, 759, 71, 71, 760, 762, 71, 71, 71, 71, - 768, 71, 765, 764, 71, 71, 774, 71, 71, 71, - 71, 766, 767, 775, 71, 769, 770, 771, 773, 777, + 71, 727, 729, 724, 71, 725, 71, 71, 71, 728, + 71, 731, 732, 730, 726, 71, 71, 733, 71, 71, + 738, 71, 71, 71, 71, 744, 71, 741, 734, 735, + 71, 71, 71, 742, 71, 745, 747, 746, 736, 737, + 739, 748, 71, 71, 749, 71, 71, 751, 743, 750, + 71, 71, 753, 752, 71, 71, 71, 759, 71, 71, + 71, 71, 760, 71, 754, 71, 71, 768, 761, 755, + 71, 71, 756, 71, 757, 762, 758, 71, 71, 764, + 763, 71, 766, 71, 71, 765, 767, 71, 773, 71, + 770, 769, 71, 71, 71, 71, 779, 71, 71, 71, - 772, 71, 71, 71, 778, 71, 776, 779, 71, 71, - 780, 71, 783, 784, 786, 71, 782, 71, 785, 71, - 781, 71, 787, 71, 71, 71, 789, 150, 71, 71, - 790, 795, 794, 788, 792, 71, 793, 791, 71, 796, - 71, 71, 71, 797, 802, 71, 71, 798, 71, 803, - 805, 71, 71, 808, 71, 799, 800, 804, 71, 71, - 71, 806, 801, 71, 810, 807, 71, 814, 71, 71, - 811, 71, 71, 71, 809, 71, 815, 71, 816, 71, - 148, 71, 820, 71, 813, 71, 821, 817, 812, 822, - 71, 828, 827, 71, 825, 819, 823, 818, 826, 824, + 771, 780, 772, 71, 71, 774, 71, 775, 778, 784, + 776, 71, 777, 783, 782, 71, 71, 781, 71, 71, + 71, 71, 785, 788, 789, 790, 791, 71, 787, 71, + 786, 71, 792, 71, 71, 71, 794, 71, 793, 150, + 795, 71, 71, 797, 799, 800, 71, 796, 71, 798, + 801, 71, 71, 71, 71, 802, 806, 803, 807, 71, + 71, 808, 810, 71, 71, 71, 804, 805, 813, 809, + 71, 812, 71, 811, 71, 71, 815, 819, 71, 817, + 71, 71, 816, 71, 71, 814, 820, 821, 71, 71, + 71, 71, 71, 818, 71, 836, 825, 146, 71, 822, - 71, 71, 831, 71, 830, 71, 829, 71, 832, 71, - 837, 834, 71, 71, 833, 71, 71, 845, 71, 835, - 71, 71, 850, 71, 849, 71, 71, 71, 852, 836, - 71, 838, 839, 851, 840, 871, 846, 841, 847, 71, - 853, 71, 842, 848, 71, 854, 855, 71, 843, 844, - 856, 71, 71, 71, 858, 71, 857, 71, 860, 861, - 71, 71, 71, 865, 71, 859, 71, 71, 868, 864, - 71, 71, 874, 71, 872, 890, 71, 862, 867, 863, - 71, 866, 71, 870, 875, 146, 71, 873, 869, 876, - 71, 877, 878, 879, 71, 71, 881, 882, 71, 71, + 826, 832, 71, 827, 830, 71, 835, 831, 824, 823, + 828, 833, 71, 829, 834, 71, 837, 71, 71, 71, + 842, 71, 71, 838, 71, 71, 71, 850, 71, 855, + 71, 854, 840, 71, 857, 839, 71, 71, 859, 841, + 71, 843, 844, 852, 845, 851, 853, 846, 71, 71, + 71, 858, 847, 861, 860, 856, 71, 71, 848, 849, + 71, 862, 863, 71, 71, 71, 71, 71, 866, 864, + 71, 870, 71, 71, 869, 71, 71, 873, 71, 71, + 879, 71, 865, 895, 71, 867, 868, 871, 877, 872, + 875, 874, 71, 880, 71, 71, 883, 878, 881, 71, - 880, 71, 71, 71, 71, 71, 71, 883, 71, 71, - 71, 884, 885, 887, 71, 893, 888, 71, 71, 891, - 71, 71, 892, 886, 71, 889, 71, 895, 71, 896, - 71, 897, 71, 898, 71, 899, 894, 71, 903, 900, - 71, 71, 901, 71, 71, 71, 71, 910, 71, 908, - 911, 71, 906, 71, 71, 902, 904, 909, 913, 905, - 71, 71, 71, 71, 71, 71, 71, 71, 907, 912, - 920, 71, 923, 919, 924, 914, 71, 71, 71, 71, - 915, 916, 71, 918, 917, 921, 71, 71, 925, 71, - 922, 71, 928, 927, 930, 71, 926, 931, 71, 71, + 882, 876, 71, 884, 71, 71, 886, 887, 71, 71, + 885, 71, 71, 71, 888, 71, 71, 71, 71, 889, + 71, 890, 892, 893, 71, 898, 71, 71, 71, 896, + 71, 71, 897, 891, 71, 71, 900, 894, 71, 901, + 902, 904, 71, 903, 71, 899, 71, 905, 71, 908, + 71, 71, 71, 907, 71, 916, 71, 913, 906, 71, + 911, 909, 71, 71, 915, 914, 71, 71, 918, 910, + 71, 71, 71, 71, 71, 71, 912, 71, 929, 926, + 917, 71, 924, 71, 71, 71, 71, 919, 71, 922, + 920, 921, 923, 71, 930, 927, 71, 925, 931, 71, - 933, 929, 932, 71, 71, 938, 71, 940, 71, 71, - 942, 71, 943, 71, 71, 934, 71, 71, 71, 935, - 939, 944, 71, 951, 937, 936, 71, 71, 941, 71, - 949, 948, 71, 945, 946, 71, 950, 71, 71, 71, - 952, 955, 947, 957, 71, 953, 71, 71, 71, 960, - 150, 954, 956, 959, 71, 71, 963, 958, 962, 71, - 71, 961, 71, 71, 71, 71, 71, 966, 71, 71, - 978, 71, 71, 981, 71, 979, 71, 71, 71, 969, - 965, 964, 967, 71, 999, 145, 970, 980, 968, 971, - 71, 984, 71, 972, 71, 973, 983, 985, 71, 974, + 928, 71, 932, 937, 71, 934, 936, 933, 938, 71, + 935, 71, 71, 71, 71, 944, 71, 946, 939, 71, + 948, 71, 949, 71, 71, 71, 71, 71, 71, 950, + 945, 940, 941, 71, 943, 942, 71, 71, 956, 947, + 957, 954, 71, 951, 71, 952, 71, 958, 955, 71, + 961, 71, 71, 953, 963, 71, 71, 71, 71, 71, + 959, 71, 960, 965, 966, 150, 71, 969, 71, 71, + 964, 962, 967, 968, 71, 71, 71, 71, 71, 972, + 973, 970, 71, 71, 984, 71, 987, 71, 971, 985, + 975, 71, 71, 986, 71, 71, 989, 976, 71, 974, - 71, 975, 982, 986, 988, 71, 976, 71, 987, 989, - 71, 977, 71, 71, 990, 71, 991, 71, 993, 71, - 992, 996, 995, 1000, 1001, 1002, 71, 1003, 994, 71, - 71, 1004, 71, 998, 71, 71, 997, 71, 71, 71, - 71, 71, 71, 1019, 71, 1016, 1025, 71, 71, 1020, - 1015, 71, 71, 71, 1006, 1017, 1005, 1007, 71, 1008, - 1018, 1021, 71, 71, 1009, 1022, 1010, 1026, 1027, 71, - 71, 1023, 1011, 1028, 71, 71, 71, 1012, 1013, 1031, - 1032, 1024, 71, 71, 1014, 71, 71, 71, 1029, 1030, - 1037, 71, 1034, 71, 71, 1035, 71, 71, 71, 1040, + 71, 145, 71, 977, 71, 992, 997, 978, 991, 979, + 990, 71, 993, 980, 71, 981, 988, 994, 71, 71, + 982, 71, 995, 71, 999, 983, 998, 71, 996, 71, + 71, 1006, 1001, 71, 1000, 1002, 1005, 71, 1007, 1003, + 1008, 71, 1009, 1004, 71, 1010, 71, 71, 71, 71, + 71, 71, 71, 71, 1025, 1011, 71, 1022, 71, 71, + 71, 1021, 71, 71, 1023, 1012, 1013, 71, 1014, 71, + 1024, 1027, 1042, 1015, 1026, 1016, 1028, 71, 1029, 1030, + 71, 1017, 1031, 71, 1032, 1033, 1018, 1019, 71, 71, + 71, 71, 1034, 1020, 1037, 1038, 1035, 71, 71, 71, - 1038, 1033, 71, 1036, 71, 71, 71, 71, 71, 71, - 71, 71, 1039, 1045, 1046, 1047, 1042, 1041, 1043, 1044, - 1049, 71, 71, 1048, 1050, 1051, 71, 71, 71, 71, - 1052, 71, 71, 71, 1057, 71, 1054, 1058, 1059, 71, - 1053, 71, 1061, 1056, 1060, 1055, 1062, 71, 1065, 71, - 71, 1071, 71, 1066, 71, 1064, 71, 71, 1067, 1069, - 1063, 1068, 71, 1070, 71, 1075, 71, 1077, 1072, 71, - 71, 71, 1078, 71, 71, 1073, 71, 71, 71, 1074, - 71, 1080, 1081, 1083, 71, 1084, 1076, 71, 71, 71, - 1082, 1079, 1089, 1086, 71, 1088, 1085, 71, 71, 1090, + 71, 1036, 71, 1043, 71, 71, 71, 1040, 1041, 71, + 1046, 1044, 71, 71, 71, 71, 1039, 71, 71, 71, + 1053, 71, 71, 1045, 1051, 1055, 1047, 1048, 1052, 1050, + 71, 71, 1049, 71, 71, 1054, 1057, 1056, 71, 71, + 71, 71, 71, 1068, 71, 1063, 1064, 1065, 1060, 71, + 1058, 71, 1059, 1066, 1062, 71, 1061, 71, 1067, 71, + 1071, 71, 1075, 71, 1069, 1072, 71, 71, 71, 1073, + 1081, 1070, 1074, 71, 71, 1076, 71, 71, 1083, 71, + 71, 143, 1084, 1077, 71, 1078, 1079, 71, 71, 1080, + 71, 71, 1086, 1087, 71, 71, 1089, 1082, 71, 1090, - 71, 71, 71, 1091, 1087, 1093, 71, 71, 71, 71, - 1099, 1097, 1100, 71, 1104, 1092, 71, 71, 71, 1094, - 71, 71, 1098, 71, 71, 1095, 1101, 1096, 1102, 1103, - 1107, 1105, 1108, 71, 71, 71, 71, 1106, 71, 71, - 71, 1111, 1112, 1109, 71, 71, 71, 71, 1117, 1118, - 71, 1113, 71, 1110, 71, 71, 71, 1115, 1121, 71, - 71, 1120, 1114, 71, 1123, 1116, 1122, 1119, 71, 1125, - 71, 71, 1124, 71, 71, 1131, 71, 1127, 71, 71, - 71, 1126, 71, 71, 71, 1135, 1137, 71, 71, 1128, - 1142, 1136, 1132, 1130, 1133, 1134, 1129, 1139, 71, 1140, + 71, 1085, 71, 1095, 1092, 71, 1088, 1091, 1094, 71, + 1096, 71, 71, 71, 1097, 71, 1093, 71, 1099, 71, + 1100, 71, 71, 1106, 71, 1104, 1107, 71, 71, 71, + 1098, 1101, 71, 1108, 71, 71, 1102, 1105, 1111, 1109, + 1110, 1103, 71, 1114, 71, 1112, 1115, 71, 71, 71, + 71, 71, 71, 71, 1118, 1119, 71, 1116, 71, 71, + 1124, 1125, 1113, 71, 1120, 71, 71, 71, 1117, 71, + 1122, 71, 1128, 71, 1121, 71, 1127, 1132, 1123, 71, + 1126, 71, 1129, 1130, 71, 71, 71, 1131, 71, 1138, + 71, 71, 71, 1134, 71, 71, 71, 1133, 1144, 71, - 71, 71, 71, 71, 1138, 71, 1141, 1143, 71, 71, - 71, 71, 1144, 1146, 1145, 71, 71, 71, 1149, 1152, - 71, 71, 71, 71, 1147, 143, 71, 71, 71, 1148, - 1150, 1153, 1156, 1158, 1164, 1151, 71, 1155, 71, 1154, - 71, 1162, 1159, 1157, 1160, 71, 71, 1161, 71, 1166, - 1163, 71, 1165, 71, 1167, 71, 1169, 1168, 71, 71, - 1171, 1174, 71, 71, 71, 71, 71, 71, 1175, 1172, - 1176, 1178, 1170, 71, 71, 71, 1180, 1179, 1173, 71, - 71, 71, 71, 71, 1177, 71, 71, 71, 71, 1181, - 1182, 71, 1184, 1186, 1187, 71, 1185, 1191, 1183, 71, + 1142, 1143, 71, 141, 1135, 1139, 1146, 1137, 1141, 1140, + 1147, 1136, 71, 71, 71, 71, 71, 1149, 1148, 1150, + 71, 71, 1145, 71, 71, 71, 71, 71, 1153, 71, + 1159, 71, 71, 1156, 1151, 1152, 71, 71, 71, 1154, + 71, 71, 1157, 1173, 1155, 71, 1160, 1163, 1158, 71, + 1165, 71, 1162, 71, 1161, 71, 1169, 71, 1164, 1166, + 1171, 1167, 1170, 1172, 1168, 71, 71, 71, 71, 1174, + 71, 1176, 71, 1178, 1175, 1181, 71, 71, 71, 71, + 71, 1179, 1182, 1183, 71, 1185, 1177, 71, 1186, 71, + 71, 1180, 71, 71, 71, 71, 1187, 71, 71, 1184, - 71, 1196, 1188, 1192, 71, 1190, 1189, 71, 71, 1195, - 71, 71, 71, 71, 71, 1193, 1198, 1200, 1197, 1194, - 1202, 71, 71, 1201, 71, 1203, 71, 71, 1205, 1218, - 1199, 1215, 1204, 1216, 1206, 71, 1207, 71, 71, 71, - 1214, 71, 1208, 71, 1217, 1209, 1210, 1219, 1220, 71, - 1211, 141, 71, 71, 71, 71, 1212, 1221, 1222, 1229, - 1213, 71, 1223, 71, 1225, 71, 71, 71, 71, 1226, - 1224, 1227, 71, 1232, 1230, 1228, 71, 1235, 1236, 71, - 71, 71, 71, 71, 71, 1237, 1233, 1231, 71, 1245, - 1239, 71, 1238, 1246, 1234, 1240, 71, 1241, 71, 1242, + 71, 71, 1193, 71, 1188, 1189, 1191, 71, 1192, 1194, + 71, 1190, 71, 1198, 71, 71, 1203, 1195, 1199, 1197, + 71, 1196, 71, 1202, 71, 71, 71, 71, 1205, 1204, + 1200, 1207, 1201, 1209, 71, 71, 71, 1208, 1210, 71, + 71, 1214, 71, 71, 1206, 71, 1211, 1223, 1212, 1213, + 71, 1222, 71, 71, 1226, 1215, 1221, 1225, 1216, 1217, + 71, 1224, 1227, 1218, 71, 71, 71, 71, 71, 1219, + 1228, 1229, 71, 1220, 71, 1230, 71, 1232, 71, 71, + 71, 1233, 71, 1234, 71, 1231, 71, 1235, 1237, 1239, + 1236, 1242, 1243, 71, 71, 2873, 1240, 71, 71, 1244, - 1247, 1243, 71, 1244, 71, 71, 1251, 71, 71, 71, - 71, 1252, 71, 1248, 1250, 1254, 71, 1256, 71, 71, - 71, 71, 1249, 1255, 71, 71, 1261, 1259, 71, 1253, - 71, 71, 1267, 71, 1260, 1257, 1266, 1258, 1262, 1263, - 71, 1269, 71, 1264, 71, 71, 1270, 71, 1271, 71, - 1274, 71, 1272, 1265, 71, 1268, 1276, 71, 71, 1277, - 71, 71, 71, 1281, 71, 1278, 71, 71, 1273, 71, - 1283, 71, 71, 71, 1275, 1287, 1285, 71, 2858, 71, - 1288, 1286, 1279, 1280, 1289, 71, 1282, 71, 71, 1284, - 1290, 71, 71, 1292, 71, 1291, 1293, 71, 1294, 1295, + 1238, 71, 1246, 71, 1241, 1245, 1252, 1247, 71, 1248, + 71, 1249, 71, 1250, 71, 1251, 1254, 71, 1255, 71, + 1258, 1253, 71, 71, 71, 1259, 71, 71, 1257, 1261, + 71, 71, 71, 71, 71, 1256, 1263, 1262, 71, 1268, + 1266, 71, 71, 71, 1260, 1274, 71, 1267, 71, 1264, + 1265, 1270, 1269, 1273, 71, 1276, 71, 71, 71, 1271, + 1277, 71, 1279, 71, 1278, 71, 1282, 71, 1272, 1275, + 71, 1284, 71, 71, 1281, 71, 1285, 71, 1286, 71, + 1289, 71, 1280, 71, 71, 71, 71, 1291, 71, 71, + 1283, 1293, 71, 71, 1295, 1305, 1296, 1294, 1287, 71, - 71, 71, 71, 1300, 71, 1301, 1297, 71, 1298, 71, - 1296, 71, 1302, 1303, 71, 1299, 71, 71, 71, 71, - 1307, 71, 71, 1304, 1308, 1311, 1312, 71, 1306, 71, - 1314, 71, 71, 1313, 71, 1305, 71, 71, 1309, 71, - 71, 71, 71, 1315, 71, 1310, 71, 1321, 71, 1316, - 71, 1318, 71, 1325, 1317, 1319, 71, 1322, 1320, 1326, - 71, 1328, 1324, 1330, 71, 71, 71, 1323, 1331, 71, - 71, 1329, 71, 1327, 1333, 71, 71, 71, 1334, 1341, - 1335, 1339, 1332, 71, 1340, 1343, 71, 1336, 71, 71, - 1337, 71, 1344, 1338, 71, 71, 71, 1342, 71, 71, + 1288, 71, 71, 1290, 1297, 1292, 1298, 71, 71, 71, + 1299, 71, 1300, 1301, 71, 1302, 1303, 71, 71, 1308, + 1309, 71, 71, 71, 1306, 71, 71, 1304, 1310, 1311, + 1312, 1307, 71, 1315, 71, 71, 71, 71, 71, 1319, + 1320, 1313, 71, 1314, 1322, 71, 71, 71, 1321, 71, + 71, 71, 71, 71, 71, 1329, 1316, 1317, 71, 71, + 71, 1318, 71, 1323, 1326, 1327, 71, 1325, 71, 1324, + 71, 1328, 71, 1333, 1334, 71, 1338, 1336, 1330, 71, + 1332, 1339, 71, 1335, 1331, 1337, 71, 1342, 1340, 71, + 71, 71, 71, 71, 71, 1341, 1349, 1347, 1351, 71, - 1345, 1349, 71, 71, 1351, 1346, 71, 71, 71, 1356, - 71, 71, 71, 1348, 1357, 1360, 1350, 1353, 71, 71, - 1347, 71, 1352, 71, 1354, 1355, 71, 71, 71, 1358, - 1361, 1359, 71, 71, 71, 71, 71, 1363, 1362, 1367, - 1368, 1364, 1365, 71, 1371, 71, 1372, 1366, 1369, 71, - 1370, 1373, 71, 71, 1377, 1374, 1378, 71, 1376, 71, - 71, 1382, 71, 71, 1379, 71, 1380, 1381, 71, 71, - 71, 71, 71, 1375, 71, 1388, 71, 1384, 1383, 1387, - 71, 71, 71, 71, 1385, 1394, 1386, 1391, 1390, 71, - 1395, 71, 1396, 71, 1399, 1392, 1389, 1397, 71, 71, + 1348, 71, 71, 1343, 71, 1344, 1345, 1350, 71, 1346, + 1353, 71, 1352, 71, 71, 71, 71, 71, 1357, 71, + 1354, 1359, 71, 71, 1364, 71, 71, 71, 1355, 1356, + 1365, 1361, 1358, 1368, 71, 1360, 71, 1362, 71, 71, + 1363, 71, 71, 1366, 71, 71, 1367, 71, 1369, 71, + 1375, 71, 1371, 1370, 1376, 71, 1372, 1373, 71, 71, + 1377, 71, 1380, 1374, 1382, 71, 1381, 1378, 1379, 71, + 1385, 1386, 71, 1387, 1384, 71, 71, 71, 71, 1388, + 1389, 71, 71, 71, 1391, 71, 1383, 1390, 71, 71, + 71, 1396, 71, 71, 71, 71, 1395, 71, 71, 1393, - 71, 71, 1393, 71, 71, 71, 71, 1407, 1403, 1398, - 1402, 71, 71, 71, 1410, 71, 1408, 71, 1400, 1401, - 71, 71, 1413, 1404, 1406, 1405, 71, 1412, 71, 71, - 71, 71, 71, 71, 1411, 71, 1414, 1426, 1409, 71, - 1421, 71, 71, 71, 1422, 1415, 1418, 71, 1416, 1417, - 1420, 71, 1419, 71, 1423, 1424, 71, 71, 1425, 71, - 1427, 1430, 71, 1435, 1429, 1431, 1428, 1433, 71, 71, - 1437, 71, 71, 71, 71, 71, 71, 1438, 1432, 1439, - 1440, 71, 71, 1434, 1445, 1436, 1441, 1446, 71, 71, - 71, 71, 71, 1442, 2858, 1444, 1451, 1449, 71, 1443, + 1392, 1398, 1399, 1394, 1402, 71, 1407, 71, 1400, 1403, + 71, 1404, 1397, 71, 1401, 71, 1405, 71, 1406, 71, + 71, 71, 71, 1415, 1410, 1411, 1408, 71, 71, 71, + 1418, 71, 1409, 1416, 71, 71, 71, 71, 1412, 1421, + 1414, 1413, 71, 1420, 71, 71, 71, 71, 1426, 71, + 1419, 71, 1429, 1417, 1422, 71, 2873, 71, 1430, 1432, + 71, 1423, 71, 1424, 1428, 1425, 71, 1433, 1427, 1431, + 1434, 71, 71, 71, 71, 71, 1438, 71, 71, 71, + 1439, 1436, 1441, 2873, 1435, 71, 1437, 1445, 71, 71, + 1442, 71, 71, 1440, 1446, 1444, 1447, 71, 1443, 71, - 71, 1450, 71, 1452, 71, 71, 71, 1447, 1453, 1454, - 71, 71, 1448, 71, 1455, 71, 1457, 71, 1460, 71, - 71, 71, 1456, 71, 1459, 71, 1463, 71, 1464, 71, - 71, 1458, 71, 1468, 1461, 71, 71, 71, 1466, 1473, - 71, 1462, 1471, 1465, 1469, 71, 71, 71, 1476, 1474, - 71, 1472, 71, 1470, 1467, 71, 71, 71, 71, 1479, - 1482, 71, 1481, 1478, 71, 71, 1475, 71, 71, 71, - 1489, 71, 1477, 71, 71, 1480, 1483, 71, 1484, 1490, - 71, 1487, 1493, 71, 1485, 1486, 1498, 71, 1494, 1496, - 71, 1491, 71, 1488, 71, 1497, 1500, 1492, 71, 71, + 71, 1448, 1453, 1449, 71, 1450, 1454, 71, 71, 71, + 1451, 71, 71, 1458, 71, 1459, 1457, 1461, 71, 71, + 1452, 71, 1455, 71, 1463, 71, 1462, 71, 71, 71, + 1456, 1466, 71, 71, 1460, 1464, 71, 1469, 71, 71, + 71, 1468, 71, 1465, 1472, 71, 1473, 71, 1470, 1467, + 71, 1477, 71, 71, 71, 71, 71, 1475, 1474, 1471, + 1480, 1482, 71, 71, 71, 1485, 1478, 1483, 71, 1481, + 71, 1479, 1476, 71, 71, 71, 1484, 1488, 1491, 71, + 1490, 1487, 71, 71, 71, 71, 71, 71, 1498, 71, + 1486, 2873, 71, 1489, 1499, 71, 71, 1493, 71, 1496, - 1495, 71, 71, 1502, 71, 71, 71, 1504, 71, 1507, - 1505, 71, 1501, 71, 1499, 71, 1508, 71, 1503, 71, - 71, 1513, 1512, 71, 71, 1509, 2858, 71, 1519, 71, - 1506, 1510, 1511, 71, 71, 1514, 1516, 71, 1521, 1517, - 71, 1525, 1520, 71, 1515, 1522, 1524, 71, 71, 71, - 1527, 1518, 1523, 1526, 71, 1528, 1529, 71, 71, 71, - 71, 71, 71, 1530, 71, 1536, 1537, 1535, 71, 1539, - 1531, 71, 71, 1538, 71, 71, 71, 1532, 71, 1533, - 71, 1534, 71, 1541, 1542, 71, 71, 1543, 71, 71, - 1551, 71, 71, 71, 1544, 71, 71, 1540, 71, 71, + 1492, 71, 71, 1494, 1495, 1502, 1503, 71, 71, 1505, + 1507, 1497, 1500, 1506, 1509, 1501, 71, 71, 1504, 71, + 71, 71, 1508, 1511, 71, 71, 71, 1513, 71, 1516, + 1514, 1510, 71, 1517, 71, 71, 71, 71, 1512, 71, + 1521, 71, 1522, 71, 71, 71, 71, 1689, 1518, 1525, + 1515, 1520, 1526, 1519, 1528, 1523, 71, 71, 71, 1524, + 71, 1529, 71, 1531, 1527, 1533, 1530, 1534, 1538, 1532, + 71, 71, 1536, 71, 71, 1535, 71, 1537, 71, 71, + 71, 71, 71, 1539, 71, 1545, 71, 1544, 1546, 71, + 71, 71, 1540, 1548, 71, 1547, 71, 71, 1541, 71, - 1545, 71, 1547, 1548, 1549, 71, 1546, 71, 1550, 1556, - 71, 1552, 1554, 1553, 71, 71, 1559, 71, 71, 1558, - 1555, 1557, 1560, 71, 71, 71, 71, 71, 71, 1562, - 71, 1561, 1564, 1566, 1567, 71, 1563, 1568, 1573, 1565, - 1574, 71, 71, 1569, 71, 1570, 1575, 71, 71, 71, - 1571, 1578, 71, 1572, 1576, 1579, 71, 71, 71, 71, - 71, 71, 1577, 1582, 1583, 1580, 71, 1591, 1581, 1586, - 71, 71, 71, 71, 1592, 71, 1584, 1585, 71, 1588, - 1590, 71, 1589, 71, 71, 1587, 71, 71, 71, 71, - 1601, 1594, 1593, 71, 71, 71, 71, 1596, 1598, 1595, + 1542, 1550, 1543, 1551, 71, 71, 71, 1553, 71, 1549, + 1552, 71, 71, 1560, 71, 71, 71, 1554, 71, 71, + 71, 71, 1556, 71, 1558, 1557, 1555, 1559, 1565, 71, + 71, 1568, 1563, 71, 71, 1561, 1562, 71, 1567, 71, + 71, 1564, 71, 1566, 71, 1571, 71, 71, 71, 1569, + 71, 1570, 71, 1573, 1575, 1574, 2873, 1572, 1578, 1576, + 71, 1579, 1577, 1582, 1583, 71, 1580, 1584, 71, 71, + 1586, 71, 71, 1581, 1587, 1588, 71, 71, 71, 71, + 71, 1585, 71, 1591, 1592, 1589, 71, 71, 71, 1601, + 71, 71, 71, 71, 71, 1595, 1590, 1597, 1594, 1593, - 1597, 1604, 71, 1603, 71, 1605, 1600, 71, 71, 1602, - 1612, 1607, 1599, 1609, 1608, 1613, 71, 71, 1615, 1606, - 71, 1617, 71, 1618, 71, 71, 1611, 1620, 1610, 71, - 1619, 1614, 71, 71, 71, 71, 1624, 71, 1616, 71, - 1621, 71, 71, 71, 71, 71, 71, 1626, 71, 1623, - 1625, 1628, 1622, 1627, 1631, 71, 71, 1632, 1629, 1635, - 1630, 71, 71, 71, 1637, 71, 71, 71, 1633, 1634, - 71, 1643, 71, 71, 71, 1636, 1638, 71, 1647, 71, - 1642, 71, 1639, 1640, 71, 1641, 71, 71, 1649, 1645, - 71, 1650, 1646, 71, 1644, 1651, 1653, 71, 1652, 71, + 1598, 1599, 1600, 71, 71, 71, 1596, 1603, 71, 1606, + 71, 1602, 71, 71, 1610, 71, 71, 1607, 1605, 71, + 71, 1604, 71, 1614, 1613, 1612, 71, 71, 71, 1616, + 1609, 1611, 1617, 1621, 1624, 1608, 71, 1615, 1622, 71, + 71, 71, 1626, 71, 1618, 1627, 1620, 71, 1619, 1629, + 1623, 71, 1628, 71, 71, 71, 71, 1633, 71, 1625, + 1630, 1637, 71, 71, 71, 71, 71, 71, 1635, 71, + 1632, 1634, 1638, 1631, 1636, 71, 71, 1641, 71, 71, + 71, 1639, 1647, 71, 1642, 1640, 71, 71, 71, 1643, + 71, 1644, 1653, 1645, 1646, 71, 1648, 71, 71, 71, - 71, 1648, 1656, 71, 71, 71, 1660, 71, 71, 71, - 71, 71, 71, 71, 1655, 71, 1658, 1662, 71, 1657, - 1654, 1663, 1661, 1664, 1659, 2858, 1667, 1668, 71, 1671, - 71, 1665, 71, 1666, 1670, 71, 1669, 71, 1672, 1673, - 71, 71, 1674, 1676, 1677, 71, 71, 71, 71, 71, - 1675, 71, 71, 1679, 71, 1680, 71, 71, 1678, 71, - 71, 71, 1685, 71, 71, 71, 71, 1681, 1686, 1689, - 1682, 71, 1683, 1687, 1684, 1688, 1694, 71, 1695, 71, - 1690, 1693, 71, 1692, 71, 71, 1696, 71, 71, 1700, - 71, 71, 1703, 1691, 1704, 71, 1705, 71, 1697, 1707, + 71, 1657, 71, 71, 71, 1650, 1649, 71, 1652, 1651, + 71, 1659, 71, 1663, 71, 1655, 71, 1660, 1656, 1654, + 71, 1661, 71, 1658, 71, 1662, 1666, 71, 71, 1665, + 1670, 71, 71, 1664, 71, 71, 1668, 71, 71, 71, + 71, 1667, 1672, 71, 2873, 1677, 1671, 1669, 71, 1673, + 1674, 71, 1678, 1675, 1680, 1681, 71, 71, 71, 1676, + 1682, 1679, 1683, 71, 71, 1686, 71, 1685, 71, 1684, + 71, 71, 1687, 71, 71, 71, 71, 1690, 1688, 71, + 71, 71, 71, 71, 1695, 71, 71, 1699, 1691, 1696, + 71, 71, 1692, 1693, 1694, 1697, 1698, 1704, 71, 1700, - 71, 1698, 1699, 71, 1701, 71, 1702, 71, 1706, 71, - 1708, 1711, 71, 71, 1713, 71, 1715, 1712, 1714, 71, - 71, 1717, 71, 71, 1709, 1716, 1710, 71, 71, 1720, - 71, 1719, 71, 1721, 1722, 1723, 1724, 1725, 71, 71, - 71, 1729, 1726, 71, 1718, 1731, 71, 71, 71, 71, - 1732, 71, 71, 71, 1734, 71, 1737, 1738, 1727, 1728, - 1733, 71, 71, 1730, 1735, 1741, 71, 71, 71, 1739, - 1736, 71, 1743, 71, 71, 1746, 1747, 71, 71, 1749, - 71, 71, 1740, 71, 71, 71, 1755, 71, 1744, 71, - 1754, 71, 1751, 1742, 1752, 1745, 71, 71, 1748, 71, + 1705, 1703, 71, 71, 71, 1702, 71, 71, 71, 1710, + 1707, 71, 1701, 71, 1713, 1714, 71, 1715, 71, 1708, + 1717, 71, 71, 1706, 1709, 1711, 71, 1712, 1716, 71, + 1718, 1721, 71, 71, 1723, 71, 1725, 1722, 1724, 71, + 71, 71, 71, 1719, 1727, 71, 71, 1720, 1729, 1732, + 71, 1730, 71, 71, 1731, 71, 71, 1726, 1733, 1734, + 1735, 71, 1739, 71, 1741, 1736, 1728, 71, 71, 1742, + 71, 71, 71, 71, 1744, 71, 1737, 71, 1745, 71, + 1747, 1738, 71, 1740, 1748, 1743, 71, 71, 1746, 1751, + 71, 71, 1753, 71, 71, 1756, 71, 1749, 1757, 71, - 71, 71, 1761, 71, 71, 1753, 1750, 1758, 1759, 71, - 1756, 71, 1757, 1765, 1764, 71, 71, 1760, 1768, 71, - 1763, 1769, 1767, 71, 71, 1770, 71, 71, 1771, 1762, - 71, 1766, 71, 71, 71, 71, 1773, 1776, 71, 1772, - 71, 1779, 1780, 71, 71, 1775, 71, 71, 71, 71, - 1783, 1774, 71, 1777, 71, 71, 71, 1792, 71, 1782, - 1789, 1790, 71, 1781, 1778, 71, 1784, 1785, 1786, 1787, - 71, 1788, 71, 1794, 1791, 71, 1793, 71, 1795, 1796, - 71, 71, 1799, 71, 1802, 71, 71, 71, 71, 1798, - 71, 1797, 1804, 1805, 71, 71, 1806, 2858, 71, 1808, + 1750, 1759, 71, 71, 71, 71, 71, 1754, 1752, 1765, + 71, 1764, 71, 1761, 1762, 1755, 1758, 71, 71, 71, + 71, 71, 71, 1771, 71, 1768, 71, 1763, 1760, 1769, + 71, 1775, 71, 1766, 1767, 1774, 71, 71, 1778, 1779, + 1780, 71, 1773, 1777, 71, 71, 71, 1770, 71, 71, + 1772, 1781, 1776, 71, 71, 71, 71, 1782, 1786, 71, + 71, 1789, 1790, 71, 71, 71, 1785, 71, 71, 1783, + 71, 1793, 1784, 71, 1787, 71, 71, 1802, 71, 1792, + 1799, 71, 71, 1791, 1796, 1788, 71, 1794, 1797, 71, + 1795, 1801, 1800, 1803, 1798, 71, 1806, 71, 71, 71, - 1803, 1800, 1807, 1801, 1809, 1810, 71, 1811, 71, 1812, - 1814, 1815, 1816, 71, 1813, 71, 71, 71, 1817, 71, - 1819, 71, 71, 71, 71, 71, 71, 1821, 71, 1824, - 1826, 1818, 71, 1820, 1822, 71, 71, 71, 71, 71, - 1827, 71, 1831, 1830, 1828, 71, 1832, 1825, 1836, 1823, - 1833, 71, 1834, 71, 71, 71, 1829, 71, 71, 71, - 1838, 1835, 71, 1837, 1839, 71, 71, 1841, 1840, 1842, - 71, 1844, 71, 71, 71, 1848, 71, 1843, 71, 1847, - 71, 71, 71, 71, 1845, 1846, 1850, 1849, 1851, 1852, - 71, 1854, 71, 71, 71, 71, 71, 1859, 1857, 71, + 71, 71, 1807, 71, 1813, 1810, 1804, 71, 71, 2873, + 71, 1805, 1808, 1815, 1816, 71, 71, 1817, 1809, 71, + 71, 1811, 1814, 1812, 1818, 1821, 71, 1822, 71, 71, + 1819, 1823, 1825, 1826, 71, 1820, 1824, 71, 71, 71, + 71, 1830, 71, 71, 71, 1828, 1829, 71, 1832, 71, + 1835, 71, 1837, 71, 1831, 1827, 71, 71, 71, 71, + 71, 1833, 71, 1842, 71, 1838, 1847, 1841, 1834, 1839, + 71, 1843, 71, 1836, 1844, 71, 1845, 71, 1840, 71, + 71, 71, 71, 71, 1846, 1848, 1849, 71, 1850, 1851, + 71, 71, 1852, 1853, 71, 1854, 71, 1855, 71, 71, - 1853, 1858, 71, 71, 71, 1861, 71, 1865, 71, 1860, - 1855, 1864, 1856, 71, 71, 71, 1862, 1863, 71, 71, - 1867, 71, 1866, 1869, 1871, 71, 71, 71, 1870, 1872, - 71, 71, 1877, 71, 1875, 1868, 71, 1873, 71, 71, - 1879, 1881, 71, 1874, 1876, 71, 71, 1880, 1878, 71, - 71, 1885, 71, 1884, 1882, 71, 1883, 1887, 71, 71, - 71, 1886, 71, 71, 71, 71, 71, 1888, 71, 1893, - 1889, 1890, 1897, 71, 71, 71, 71, 1892, 1896, 1900, - 1901, 71, 1894, 1898, 1895, 71, 1891, 71, 1899, 1904, - 1903, 71, 71, 71, 1902, 71, 1906, 71, 71, 1905, + 1859, 71, 71, 1856, 1858, 71, 1857, 1860, 71, 71, + 1861, 1863, 71, 1862, 71, 71, 71, 1870, 1865, 71, + 1868, 71, 1864, 71, 1869, 71, 1872, 71, 71, 71, + 71, 1876, 1866, 71, 1867, 1871, 71, 1873, 1875, 71, + 1878, 71, 1877, 71, 1880, 1874, 1882, 71, 71, 71, + 71, 1883, 71, 71, 1881, 1888, 71, 1879, 1891, 1884, + 71, 71, 71, 1890, 1887, 1885, 71, 1886, 1892, 71, + 1889, 71, 71, 1896, 1893, 71, 71, 71, 1894, 71, + 1895, 71, 71, 71, 1897, 71, 71, 71, 71, 1899, + 71, 1900, 1904, 1901, 1908, 71, 71, 1898, 1903, 1911, - 1907, 1908, 71, 71, 1912, 71, 1910, 1914, 71, 71, - 1911, 1916, 71, 1909, 71, 71, 71, 1919, 71, 1918, - 71, 1920, 1913, 1915, 71, 1921, 1924, 71, 71, 71, - 71, 71, 71, 1925, 1917, 71, 1922, 1927, 1930, 71, - 1926, 71, 1931, 71, 1923, 1929, 1934, 2858, 71, 1928, - 1932, 71, 71, 1935, 71, 71, 1936, 1939, 71, 1937, - 71, 71, 1941, 1933, 71, 1942, 71, 1938, 71, 71, - 71, 1946, 1940, 1948, 71, 1943, 1947, 1944, 1949, 71, - 1945, 71, 1951, 1950, 71, 71, 71, 71, 71, 1953, - 1954, 1957, 71, 1952, 71, 71, 71, 71, 71, 1955, + 1907, 71, 71, 1909, 71, 1905, 1912, 1906, 1902, 1914, + 1910, 71, 71, 1915, 71, 71, 71, 71, 71, 1917, + 71, 71, 1913, 1918, 1919, 71, 71, 1921, 1923, 71, + 1916, 1925, 1922, 1927, 71, 1920, 71, 71, 71, 1926, + 1924, 71, 1929, 1930, 71, 71, 71, 1935, 71, 1931, + 1932, 71, 71, 71, 71, 71, 1933, 1936, 71, 1938, + 71, 1937, 1928, 1941, 71, 1945, 1934, 71, 1942, 1940, + 71, 71, 71, 1939, 71, 1943, 1947, 1946, 1944, 71, + 1950, 71, 1951, 71, 1952, 71, 1953, 1948, 71, 71, + 71, 71, 1957, 71, 1959, 1949, 71, 1954, 1955, 1960, - 71, 71, 71, 71, 71, 1965, 1958, 1956, 1966, 1963, - 1961, 1960, 1959, 1962, 1964, 71, 71, 71, 71, 1971, - 71, 1967, 1969, 71, 1970, 1975, 71, 1977, 71, 1974, - 71, 71, 1976, 71, 1968, 1972, 1980, 1979, 71, 1982, - 1984, 1985, 71, 1973, 1983, 71, 71, 71, 71, 1978, - 71, 1981, 71, 1986, 1989, 71, 1987, 71, 1990, 1994, - 71, 1993, 1988, 71, 1995, 71, 71, 1998, 71, 71, - 71, 2000, 1991, 71, 1999, 2001, 71, 1996, 71, 71, - 71, 2003, 2004, 1992, 1997, 2002, 71, 71, 2005, 71, - 2006, 71, 71, 71, 2008, 71, 71, 71, 2011, 2014, + 71, 1956, 1961, 71, 71, 71, 71, 71, 1962, 1964, + 1965, 71, 1958, 1969, 71, 1963, 71, 71, 71, 1966, + 1968, 71, 71, 71, 71, 71, 71, 1967, 71, 71, + 1977, 1978, 1973, 71, 1970, 1971, 1975, 1972, 1974, 1979, + 1976, 71, 71, 71, 1983, 1982, 71, 1981, 1987, 71, + 71, 71, 1980, 1989, 71, 1986, 71, 71, 71, 1988, + 1984, 1991, 71, 1992, 71, 1998, 1994, 1996, 1985, 1993, + 1990, 1995, 71, 71, 1997, 71, 2001, 71, 71, 2002, + 71, 71, 71, 1999, 2000, 2006, 71, 71, 2007, 71, + 2005, 2010, 71, 2003, 2008, 71, 2016, 71, 71, 2012, - 71, 2015, 71, 71, 2007, 71, 71, 2010, 2017, 71, - 71, 71, 2013, 2012, 2009, 2021, 71, 2016, 2019, 2024, - 71, 71, 71, 71, 2022, 71, 71, 71, 2020, 2025, - 71, 2018, 71, 71, 2023, 2035, 71, 71, 71, 71, - 71, 2026, 2027, 2036, 2032, 71, 2030, 71, 2028, 2272, - 2029, 2031, 2034, 2038, 2033, 71, 2040, 71, 2037, 71, - 2039, 2041, 71, 2042, 71, 71, 71, 2045, 2046, 2048, - 71, 2047, 2043, 71, 71, 71, 71, 71, 2044, 2049, - 2050, 2054, 71, 2055, 71, 71, 2057, 71, 71, 2053, - 2059, 71, 71, 2051, 71, 71, 2052, 2062, 71, 2061, + 2011, 2013, 71, 71, 2004, 2015, 71, 2009, 2014, 71, + 71, 71, 71, 2018, 71, 71, 71, 2020, 71, 2026, + 71, 2023, 71, 71, 71, 71, 2017, 2027, 71, 71, + 2022, 71, 71, 2029, 71, 2019, 2024, 2021, 2025, 2028, + 71, 2031, 71, 2036, 71, 2033, 71, 2034, 71, 71, + 2032, 2030, 71, 71, 2037, 2040, 71, 71, 71, 71, + 2035, 2047, 71, 71, 71, 71, 2048, 2038, 2039, 2044, + 71, 2104, 2042, 71, 2046, 71, 2041, 2043, 2049, 2045, + 71, 2052, 2053, 71, 2050, 71, 2051, 2054, 71, 71, + 2055, 71, 2057, 71, 2060, 71, 71, 71, 2056, 71, - 2063, 71, 71, 71, 2056, 71, 2058, 2060, 71, 2064, - 71, 2065, 71, 2068, 2069, 71, 71, 2066, 2071, 71, - 71, 71, 2073, 2074, 2067, 71, 2075, 2077, 71, 2070, - 2072, 71, 71, 2081, 71, 71, 71, 71, 71, 71, - 2078, 2076, 2085, 2086, 71, 71, 2079, 71, 2090, 71, - 71, 2080, 2084, 71, 71, 2082, 71, 71, 2087, 2083, - 2088, 2092, 2089, 71, 2095, 71, 2096, 2093, 71, 71, - 2091, 2097, 71, 71, 71, 71, 71, 2100, 2101, 71, - 2099, 71, 2094, 71, 2105, 2098, 2106, 71, 2103, 2109, - 71, 71, 2107, 71, 2111, 71, 2112, 2104, 2108, 2102, + 71, 2061, 2058, 71, 2062, 2059, 2066, 71, 71, 2063, + 2067, 71, 2065, 2069, 71, 2071, 71, 2064, 71, 71, + 2074, 71, 2068, 71, 2073, 71, 2070, 2075, 71, 71, + 71, 71, 71, 2072, 2077, 71, 2080, 2076, 2081, 71, + 2083, 71, 71, 2078, 71, 71, 2087, 2086, 2085, 2079, + 71, 2082, 71, 2084, 2089, 71, 71, 2093, 71, 71, + 71, 2088, 71, 71, 71, 2098, 71, 2091, 2097, 2090, + 71, 71, 2102, 71, 71, 2092, 71, 2096, 71, 2094, + 71, 2107, 2099, 2095, 71, 2100, 2101, 71, 71, 2109, + 2105, 71, 71, 2108, 2103, 71, 71, 2112, 71, 71, - 71, 71, 2120, 71, 71, 71, 71, 71, 71, 71, - 2858, 2110, 2115, 2116, 2114, 2117, 2118, 2121, 2113, 2119, - 71, 71, 2126, 71, 2122, 71, 2125, 71, 71, 2123, - 2124, 71, 2127, 71, 71, 71, 2133, 71, 71, 71, - 2128, 71, 71, 71, 71, 71, 2242, 2129, 2134, 2130, - 2131, 2132, 2135, 2136, 2137, 71, 2139, 2138, 2140, 71, - 71, 2144, 71, 2858, 2141, 2142, 71, 2145, 2146, 71, - 71, 71, 2143, 2147, 2149, 2150, 2148, 2151, 71, 71, - 71, 71, 71, 2153, 71, 71, 71, 71, 2157, 71, - 71, 71, 2159, 2152, 2158, 71, 2154, 2160, 71, 2155, + 2113, 71, 71, 2111, 2106, 71, 2117, 71, 2110, 71, + 2119, 2115, 2120, 2122, 71, 71, 2124, 71, 71, 71, + 2116, 2114, 71, 2125, 2121, 71, 2873, 71, 2118, 71, + 2127, 71, 71, 2133, 2128, 2123, 2129, 2134, 2130, 71, + 2126, 2131, 71, 71, 71, 2132, 2135, 71, 71, 2138, + 71, 2139, 71, 2140, 71, 71, 2137, 71, 71, 2146, + 71, 2141, 71, 71, 2136, 71, 71, 71, 71, 2147, + 2142, 2144, 2143, 71, 2145, 2148, 2153, 2149, 2150, 71, + 2152, 71, 2151, 2155, 2154, 2157, 71, 71, 2158, 2159, + 71, 71, 71, 2156, 2160, 2162, 2163, 2161, 2164, 71, - 2161, 71, 71, 2165, 71, 2156, 2164, 71, 71, 71, - 2162, 2163, 71, 2167, 71, 71, 71, 71, 2174, 2171, - 2166, 71, 2173, 71, 71, 71, 71, 2175, 2170, 2168, - 2178, 2179, 2169, 71, 71, 71, 2172, 71, 71, 71, - 2181, 2176, 2177, 2180, 71, 2183, 71, 2182, 71, 2184, - 71, 2186, 2187, 2188, 71, 2190, 71, 2193, 71, 71, - 2185, 2192, 71, 71, 71, 71, 2189, 2191, 71, 71, - 2196, 71, 2200, 71, 2198, 2202, 2199, 2194, 2201, 71, - 2195, 71, 71, 2203, 71, 71, 71, 71, 71, 71, - 2211, 2206, 2209, 71, 2197, 71, 71, 2210, 71, 71, + 71, 71, 71, 71, 2166, 71, 71, 71, 71, 2170, + 71, 71, 71, 2172, 2165, 2171, 71, 2167, 2173, 71, + 2168, 2174, 71, 71, 2178, 71, 2169, 2177, 71, 71, + 71, 2175, 2176, 71, 2180, 71, 71, 71, 71, 2187, + 2184, 2179, 71, 2186, 71, 71, 71, 71, 2188, 2183, + 2181, 2191, 2192, 2182, 71, 71, 71, 2185, 71, 71, + 71, 2194, 2189, 2190, 2193, 71, 2196, 71, 2195, 71, + 2197, 71, 2199, 2200, 2201, 71, 2203, 71, 2206, 71, + 71, 2198, 2205, 71, 71, 71, 71, 2202, 2204, 71, + 71, 2209, 71, 2213, 71, 2211, 2215, 2212, 2207, 2214, - 2204, 2208, 2214, 71, 71, 71, 2207, 2205, 71, 2217, - 2218, 71, 71, 2212, 2213, 71, 71, 2215, 71, 2222, - 2219, 2220, 2216, 71, 71, 2221, 2223, 2226, 71, 2225, - 2227, 71, 2228, 71, 2229, 71, 71, 71, 2224, 71, - 2232, 71, 2233, 71, 71, 71, 71, 71, 2230, 2238, - 71, 2239, 71, 2240, 71, 2231, 2234, 2235, 71, 2241, - 71, 71, 2237, 2236, 71, 71, 2245, 2248, 71, 71, - 2243, 71, 71, 71, 71, 71, 71, 2255, 2249, 71, - 2244, 71, 71, 71, 2246, 2247, 2252, 71, 2256, 2254, - 71, 71, 2251, 71, 2262, 2858, 2257, 2250, 2253, 71, + 71, 2208, 71, 71, 2216, 71, 71, 71, 71, 71, + 71, 2224, 2219, 2222, 71, 2210, 71, 71, 2223, 71, + 71, 2217, 2221, 2227, 71, 71, 71, 2220, 2218, 71, + 2230, 2231, 71, 71, 2225, 2226, 71, 71, 2228, 71, + 2235, 2232, 2233, 2229, 71, 71, 2234, 2236, 2239, 71, + 2238, 2240, 71, 2241, 71, 2242, 71, 71, 71, 2237, + 71, 71, 2246, 71, 2247, 2245, 71, 71, 71, 2243, + 71, 2252, 71, 2253, 71, 71, 2244, 71, 2248, 2249, + 2254, 71, 71, 71, 2256, 71, 2251, 2255, 2250, 71, + 2259, 71, 2262, 71, 2257, 71, 71, 71, 71, 71, - 2259, 71, 2258, 71, 2264, 2260, 2265, 2263, 2266, 71, - 2267, 71, 71, 2261, 71, 2268, 71, 2269, 71, 2270, - 71, 2271, 71, 71, 71, 71, 71, 71, 2281, 71, - 71, 2273, 2858, 2278, 2282, 71, 2285, 71, 71, 71, - 2274, 2275, 71, 71, 2276, 2277, 2279, 2280, 2284, 2287, - 71, 2286, 2283, 71, 71, 71, 2288, 71, 71, 71, - 2290, 2289, 2296, 71, 2297, 71, 2298, 71, 71, 2291, - 71, 71, 71, 2292, 2294, 2293, 2302, 71, 2295, 71, - 71, 71, 2306, 2300, 71, 2299, 2305, 2307, 71, 2301, - 71, 71, 2308, 2309, 71, 71, 71, 2303, 71, 2304, + 71, 71, 71, 2258, 2263, 71, 2269, 2270, 71, 2260, + 71, 2261, 2266, 71, 71, 2268, 71, 2265, 71, 2276, + 2273, 71, 2264, 2271, 2267, 2272, 2278, 71, 71, 2280, + 71, 71, 2277, 2279, 71, 2274, 71, 2275, 2281, 71, + 71, 2282, 71, 2283, 71, 2284, 2287, 2286, 71, 2285, + 71, 71, 71, 71, 2288, 71, 71, 71, 2295, 2296, + 71, 2292, 2299, 71, 2301, 71, 2289, 71, 71, 71, + 71, 2291, 2290, 2293, 2294, 71, 2298, 2297, 2300, 71, + 71, 71, 2304, 71, 71, 71, 2302, 2312, 2303, 2310, + 71, 2311, 71, 71, 2305, 71, 71, 71, 2306, 2307, - 2311, 71, 71, 2310, 71, 71, 2315, 71, 2313, 71, - 2319, 2320, 71, 71, 2312, 2323, 71, 71, 2314, 71, - 71, 2324, 2316, 2317, 2321, 2318, 71, 2327, 71, 71, - 2326, 2322, 71, 2328, 2325, 2331, 71, 71, 71, 2333, - 71, 2335, 71, 71, 71, 71, 2338, 71, 2336, 2329, - 2332, 71, 2330, 71, 2339, 71, 2334, 2337, 71, 71, - 71, 2345, 71, 71, 2341, 71, 2340, 2343, 2342, 2344, - 2347, 71, 71, 71, 2346, 71, 2349, 2348, 71, 71, - 2350, 71, 71, 71, 2352, 71, 2353, 2355, 2356, 2358, - 71, 71, 2351, 71, 2354, 2364, 2357, 2359, 71, 71, + 2308, 71, 2309, 2313, 71, 71, 2316, 71, 71, 71, + 2314, 2320, 2319, 2321, 71, 2315, 71, 2317, 2322, 2323, + 71, 71, 71, 71, 2318, 2328, 71, 2324, 71, 71, + 2325, 2329, 71, 71, 71, 2327, 2333, 2334, 71, 71, + 71, 2326, 2337, 71, 2338, 71, 71, 71, 2330, 2332, + 2340, 2331, 2336, 71, 2335, 2341, 71, 71, 2345, 71, + 2339, 71, 2347, 71, 71, 71, 2342, 2343, 2349, 71, + 2350, 71, 71, 2346, 2352, 71, 71, 2344, 71, 2353, + 2355, 71, 71, 2348, 2351, 71, 71, 71, 71, 2356, + 2360, 71, 71, 2354, 2358, 2357, 2359, 2362, 71, 71, - 2360, 71, 71, 2362, 2361, 71, 2366, 2365, 71, 2363, - 71, 2369, 71, 2370, 71, 2368, 71, 2372, 71, 71, - 2374, 2858, 2373, 2367, 2378, 2375, 71, 71, 71, 2371, - 71, 71, 2376, 2377, 71, 2379, 71, 71, 71, 2380, - 71, 71, 71, 71, 71, 2381, 2383, 2384, 2386, 71, - 71, 71, 2382, 2385, 2387, 2389, 2388, 71, 2391, 71, - 71, 71, 2390, 71, 2395, 71, 71, 71, 2397, 2393, - 2394, 71, 2392, 71, 2396, 2400, 71, 71, 71, 2404, - 71, 71, 2403, 71, 71, 71, 2398, 2402, 2408, 2411, - 2399, 2412, 2401, 2409, 71, 71, 2405, 71, 2406, 2413, + 71, 2361, 2363, 2364, 71, 71, 71, 2365, 71, 71, + 71, 71, 2873, 2367, 2368, 2370, 2371, 2373, 71, 2366, + 2369, 2374, 71, 2372, 71, 71, 71, 2377, 2379, 71, + 2376, 2375, 71, 71, 71, 71, 2381, 2380, 71, 2384, + 71, 2385, 71, 2383, 2378, 71, 2387, 71, 2382, 71, + 2389, 2586, 2388, 2873, 71, 2390, 71, 71, 2386, 2391, + 2393, 71, 2392, 71, 71, 2394, 71, 71, 2395, 71, + 71, 71, 71, 2396, 71, 2399, 71, 2398, 71, 2401, + 71, 2402, 2397, 2400, 2403, 2404, 71, 71, 71, 71, + 71, 2405, 71, 2410, 2406, 71, 71, 2408, 2409, 2411, - 71, 2407, 2414, 71, 71, 71, 71, 71, 2415, 2416, - 2410, 71, 71, 71, 71, 2417, 2419, 71, 2422, 71, - 2418, 2423, 71, 2424, 71, 2420, 2425, 71, 2421, 2426, - 71, 2428, 71, 2431, 2427, 71, 2429, 71, 2434, 2430, - 2432, 71, 2433, 71, 71, 71, 2437, 71, 71, 2438, - 2439, 71, 71, 2441, 71, 71, 71, 2435, 71, 2445, - 2446, 71, 71, 2436, 2448, 71, 2447, 2440, 2442, 2449, - 71, 71, 2444, 71, 2443, 71, 71, 2454, 71, 71, - 71, 71, 2453, 71, 2456, 2457, 71, 71, 71, 2459, - 71, 2460, 2458, 2451, 2450, 2452, 71, 71, 71, 2462, + 2407, 71, 2415, 71, 71, 71, 71, 71, 2419, 71, + 71, 71, 71, 71, 2412, 2417, 2413, 2423, 2424, 71, + 2414, 2426, 2418, 2416, 2420, 2421, 2427, 71, 2428, 2429, + 71, 2422, 71, 71, 71, 71, 71, 2425, 71, 71, + 2431, 2430, 71, 2434, 71, 2432, 71, 2437, 2438, 71, + 71, 2433, 2439, 71, 2440, 71, 2435, 2441, 71, 2436, + 2443, 71, 71, 2446, 71, 2444, 71, 2447, 71, 71, + 2442, 2448, 71, 71, 2452, 71, 2449, 2450, 71, 2453, + 71, 2445, 2454, 71, 2456, 71, 71, 2451, 71, 71, + 2460, 2461, 71, 71, 71, 2455, 71, 2462, 71, 2457, - 71, 71, 2465, 2455, 2461, 2469, 71, 2463, 2464, 71, - 71, 71, 2475, 71, 71, 2468, 2466, 2472, 2471, 71, - 2467, 2858, 2473, 71, 71, 2476, 71, 2477, 2470, 71, - 2474, 71, 2478, 71, 2479, 2480, 71, 71, 71, 71, - 2483, 2481, 2487, 71, 71, 71, 2484, 2488, 71, 2482, - 2490, 71, 2492, 71, 71, 2491, 71, 71, 2485, 2486, - 71, 2493, 71, 2489, 2494, 71, 2495, 2499, 71, 2496, - 71, 2497, 2498, 71, 2500, 71, 71, 71, 2503, 2507, - 71, 71, 2501, 2504, 71, 71, 2506, 71, 71, 2505, - 2502, 71, 71, 71, 2509, 71, 71, 71, 71, 2508, + 71, 71, 2463, 2459, 71, 2469, 2458, 2464, 71, 71, + 2468, 71, 71, 2471, 2472, 71, 71, 2465, 2466, 71, + 2467, 2473, 71, 71, 71, 2475, 2470, 2474, 71, 2480, + 71, 2477, 71, 71, 2484, 71, 71, 2476, 71, 2487, + 2478, 2479, 71, 71, 2488, 71, 2486, 2483, 2481, 2490, + 71, 71, 2482, 71, 2491, 2485, 71, 2492, 71, 2493, + 71, 2489, 71, 2494, 71, 2496, 71, 2495, 71, 2498, + 71, 2502, 71, 71, 71, 2499, 2503, 2505, 71, 71, + 2507, 71, 71, 71, 2497, 2873, 2506, 2508, 2500, 71, + 2501, 71, 2504, 2509, 71, 71, 2514, 71, 2510, 71, - 2510, 2512, 2516, 2517, 71, 2514, 71, 2518, 71, 71, - 2858, 2513, 2511, 2519, 2520, 2528, 2515, 71, 2521, 2523, - 71, 2522, 2524, 71, 2525, 71, 71, 71, 2527, 71, - 2530, 71, 2529, 71, 2531, 2526, 71, 71, 2532, 2533, - 71, 71, 71, 71, 2538, 71, 2536, 2540, 71, 2534, - 71, 71, 71, 2544, 71, 71, 71, 71, 2535, 2547, - 2537, 71, 71, 71, 2541, 71, 2542, 71, 2539, 2545, - 2546, 2548, 2543, 2551, 71, 2554, 71, 2549, 71, 2552, - 2556, 71, 2550, 2557, 71, 71, 2559, 71, 71, 71, - 71, 71, 71, 2553, 71, 2563, 71, 2555, 2564, 71, + 2511, 2513, 71, 2515, 2512, 71, 71, 2518, 71, 2522, + 71, 2516, 2519, 71, 71, 71, 71, 2521, 71, 2520, + 2517, 71, 71, 71, 2524, 71, 71, 2545, 2525, 71, + 2527, 2531, 2523, 71, 2532, 2529, 71, 2533, 71, 71, + 2538, 71, 2528, 2526, 2535, 71, 2530, 2534, 71, 2536, + 2539, 71, 2537, 2540, 71, 71, 71, 71, 71, 2548, + 71, 71, 2544, 2546, 2541, 2542, 2547, 71, 71, 71, + 71, 2553, 71, 71, 2551, 2543, 71, 71, 2555, 71, + 71, 2559, 71, 71, 71, 2549, 71, 71, 2552, 2550, + 71, 2557, 2556, 2563, 2562, 71, 2560, 2554, 71, 2561, - 71, 2568, 71, 71, 2560, 2561, 2558, 2562, 2570, 71, - 2572, 71, 2565, 2573, 71, 2567, 2569, 2566, 71, 2575, - 71, 71, 71, 2579, 71, 71, 71, 2583, 71, 71, - 2577, 2571, 71, 71, 2585, 2584, 71, 2581, 2574, 2576, - 71, 2588, 2578, 2580, 2589, 71, 2582, 71, 2586, 71, - 2591, 71, 2590, 71, 71, 71, 71, 2596, 2593, 2594, - 2587, 71, 71, 71, 2599, 71, 2600, 71, 71, 2592, - 2603, 71, 2604, 71, 2595, 71, 71, 2602, 2597, 2598, - 2605, 2601, 71, 2608, 71, 2609, 71, 2607, 2610, 71, - 2606, 71, 2612, 71, 71, 71, 2611, 71, 71, 71, + 2558, 71, 71, 2564, 2569, 71, 2566, 2567, 71, 71, + 2571, 71, 2572, 71, 2565, 2574, 71, 71, 71, 71, + 71, 2579, 71, 71, 71, 2578, 71, 2568, 2570, 2573, + 71, 2583, 71, 2575, 2576, 2577, 71, 2587, 71, 2588, + 71, 2585, 71, 2580, 71, 2582, 2584, 2581, 2590, 71, + 71, 2594, 71, 2592, 71, 71, 71, 71, 2598, 71, + 71, 71, 2589, 2599, 71, 2600, 2596, 71, 2591, 2873, + 2593, 2595, 2603, 2601, 71, 2597, 2602, 2605, 71, 2604, + 71, 2606, 71, 71, 71, 2607, 2611, 71, 2608, 2609, + 71, 71, 71, 2614, 71, 2615, 71, 71, 2618, 71, - 2617, 2618, 71, 71, 71, 71, 2622, 71, 71, 2858, - 71, 2625, 71, 2613, 2621, 2624, 71, 2614, 2619, 2615, - 2616, 2626, 71, 2620, 71, 2628, 71, 2623, 2631, 71, - 2627, 71, 71, 71, 2630, 71, 2629, 2632, 71, 71, - 71, 71, 71, 2635, 71, 71, 2637, 71, 71, 2638, - 71, 2636, 71, 2633, 71, 2634, 71, 71, 71, 2647, - 71, 2639, 2652, 2643, 2640, 2641, 2642, 2644, 2645, 2669, - 2649, 2650, 71, 2646, 2651, 71, 2648, 2653, 71, 2654, - 71, 2655, 2656, 71, 71, 2657, 2658, 2661, 71, 2659, - 2660, 71, 71, 2662, 71, 71, 71, 2666, 71, 71, + 71, 2610, 2619, 71, 71, 2620, 2617, 2612, 2613, 71, + 2616, 2623, 71, 71, 2622, 2624, 71, 71, 2621, 2625, + 71, 71, 2626, 2627, 71, 71, 71, 71, 2632, 2633, + 71, 71, 2628, 71, 71, 71, 2637, 71, 71, 2639, + 2640, 71, 71, 2629, 2636, 2634, 2643, 2630, 2631, 2641, + 71, 71, 71, 2635, 71, 71, 2642, 2638, 2646, 71, + 2647, 71, 2645, 2644, 71, 71, 71, 71, 71, 71, + 2650, 71, 71, 2652, 71, 71, 2653, 71, 2651, 71, + 71, 2648, 71, 71, 2649, 2662, 2665, 71, 2654, 71, + 2658, 2655, 2656, 2657, 2659, 2660, 2664, 2666, 71, 71, - 2665, 71, 71, 71, 71, 2668, 2667, 71, 2673, 2663, - 2664, 2674, 71, 2672, 2675, 71, 71, 2670, 71, 2680, - 71, 2671, 2682, 2677, 2681, 71, 71, 71, 71, 2678, - 71, 2676, 2679, 71, 71, 2686, 71, 2689, 71, 2687, - 71, 71, 2684, 2691, 71, 2690, 2692, 71, 2693, 71, - 2699, 2683, 2694, 71, 2685, 2688, 2695, 71, 2696, 71, - 2697, 71, 2698, 71, 2700, 71, 71, 2702, 71, 71, - 71, 71, 2706, 71, 71, 2708, 71, 71, 71, 71, - 71, 2710, 71, 2704, 2703, 2705, 2701, 71, 2712, 2707, - 71, 2715, 71, 2714, 71, 2709, 2716, 71, 2713, 2717, + 2661, 2720, 2663, 2667, 2668, 71, 2669, 71, 2670, 2671, + 71, 71, 2672, 2673, 2676, 71, 2674, 2675, 71, 71, + 2677, 71, 71, 71, 2681, 71, 71, 2680, 71, 71, + 71, 71, 2683, 2682, 71, 71, 2678, 2679, 2684, 71, + 2688, 2689, 71, 2687, 71, 2685, 2690, 71, 71, 2686, + 2691, 71, 2695, 2692, 71, 2697, 71, 2696, 71, 71, + 2693, 71, 71, 2694, 2701, 71, 71, 2702, 2873, 2698, + 2741, 2699, 2704, 71, 71, 2700, 2706, 71, 71, 2705, + 2707, 71, 2708, 71, 2703, 2709, 71, 2710, 71, 2711, + 71, 2712, 71, 2713, 71, 71, 2715, 71, 2716, 2717, - 71, 71, 71, 71, 71, 2711, 2722, 2723, 71, 71, - 71, 2718, 71, 2726, 71, 71, 71, 2720, 2719, 2721, - 71, 2725, 2732, 71, 71, 2724, 71, 2730, 2728, 2731, - 2727, 71, 2734, 71, 71, 71, 2735, 71, 2729, 71, - 71, 2733, 71, 71, 71, 2745, 71, 71, 71, 2829, - 2738, 71, 2736, 2737, 2740, 71, 2743, 2746, 2747, 71, - 71, 2741, 2739, 2742, 2744, 71, 2748, 2749, 71, 2750, - 71, 2752, 71, 71, 2751, 2753, 71, 71, 2754, 71, - 2758, 2755, 71, 2761, 71, 2756, 71, 71, 2763, 71, - 71, 71, 2757, 2759, 2766, 71, 71, 2767, 71, 71, + 71, 71, 71, 71, 2714, 71, 2721, 2723, 71, 71, + 71, 71, 71, 2725, 71, 2719, 2718, 2729, 2722, 71, + 2727, 71, 2730, 71, 71, 71, 71, 2724, 71, 2732, + 2728, 71, 71, 71, 71, 2731, 2737, 2726, 2738, 71, + 71, 2736, 2733, 2734, 71, 71, 71, 2735, 71, 2740, + 71, 71, 2747, 2746, 2742, 2739, 71, 2745, 2743, 71, + 2749, 71, 71, 71, 71, 71, 2748, 71, 2744, 2750, + 71, 71, 71, 2760, 71, 71, 2762, 71, 2753, 71, + 2751, 2752, 2755, 71, 2761, 2758, 2756, 71, 2763, 2754, + 2757, 71, 2759, 2764, 71, 2765, 71, 71, 2766, 71, - 71, 71, 2760, 71, 2770, 2764, 2762, 2768, 2771, 2765, - 71, 2775, 71, 2773, 71, 2772, 71, 2769, 71, 71, - 71, 71, 2774, 2778, 71, 71, 2780, 71, 71, 71, - 71, 71, 2777, 71, 2785, 2786, 2776, 71, 2782, 71, - 2779, 2783, 2790, 2781, 2789, 71, 2784, 2791, 2858, 2787, - 71, 2792, 2788, 71, 71, 71, 71, 2797, 2796, 2793, - 2794, 2795, 71, 71, 2799, 71, 71, 2798, 71, 71, - 2800, 71, 71, 2805, 71, 71, 2802, 71, 2808, 71, - 2809, 71, 71, 71, 71, 71, 71, 2801, 2807, 2812, - 2803, 2804, 2810, 2806, 71, 2811, 71, 2816, 71, 2815, + 2768, 71, 71, 2767, 2769, 2773, 2770, 71, 71, 2776, + 71, 71, 71, 2778, 71, 71, 2771, 2772, 71, 2781, + 71, 2774, 71, 2782, 71, 71, 71, 2785, 2775, 2786, + 2779, 2777, 2783, 71, 71, 71, 2780, 71, 2790, 71, + 2787, 71, 71, 71, 2784, 71, 2793, 2788, 71, 71, + 71, 71, 71, 2795, 71, 71, 2789, 2792, 71, 2800, + 2801, 2791, 71, 2797, 2798, 2794, 2804, 71, 2796, 71, + 71, 2799, 2806, 71, 2805, 2808, 2802, 71, 71, 71, + 2807, 2803, 2809, 71, 2812, 71, 71, 71, 2810, 2815, + 71, 2813, 2811, 2814, 71, 71, 71, 71, 2820, 71, - 71, 2813, 71, 2817, 2814, 71, 2820, 2818, 71, 2822, - 71, 2823, 71, 71, 71, 2827, 71, 2824, 71, 71, - 2825, 2821, 71, 2828, 2830, 71, 2819, 71, 71, 2831, - 71, 2836, 71, 2826, 2832, 2834, 71, 71, 2833, 71, - 71, 71, 2838, 71, 2839, 71, 2842, 2835, 2843, 71, - 71, 71, 2846, 2847, 71, 2837, 71, 2849, 71, 2840, - 2841, 71, 2844, 2848, 2850, 71, 71, 71, 2851, 2845, - 71, 2852, 2853, 71, 2856, 71, 2857, 71, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2854, - 2858, 2858, 2855, 43, 43, 43, 43, 43, 43, 43, + 71, 71, 2817, 71, 71, 71, 2816, 71, 2823, 2824, + 71, 71, 71, 2822, 2825, 2818, 2819, 2826, 2821, 71, + 2828, 71, 2829, 71, 2827, 2830, 71, 2831, 2832, 71, + 2835, 71, 71, 2837, 2833, 71, 2838, 2834, 71, 71, + 71, 2842, 71, 2839, 71, 71, 2840, 2844, 71, 2843, + 2836, 2845, 71, 71, 71, 2846, 71, 71, 71, 2841, + 2847, 2849, 2851, 71, 71, 71, 71, 71, 71, 2853, + 2854, 71, 2857, 2848, 2858, 71, 2850, 2852, 71, 71, + 2861, 2862, 71, 71, 71, 2855, 2856, 2859, 2864, 71, + 2863, 2865, 71, 71, 71, 71, 71, 2860, 2873, 2867, - 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, - 2858, 74, 74, 74, 74, 140, 140, 2858, 2858, 2858, - 140, 140, 142, 142, 2858, 2858, 142, 2858, 142, 144, - 2858, 2858, 2858, 2858, 2858, 144, 147, 147, 2858, 2858, - 2858, 147, 147, 149, 2858, 2858, 2858, 2858, 2858, 149, - 151, 151, 2858, 151, 151, 151, 151, 75, 75, 2858, - 75, 75, 75, 75, 13, 2858, 2858, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, + 2866, 2868, 2873, 2869, 2871, 71, 2872, 71, 2873, 2873, + 2873, 2873, 2873, 2873, 2870, 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, 2873, 74, 74, 74, 74, 140, 140, 2873, + 2873, 2873, 140, 140, 142, 142, 2873, 2873, 142, 2873, + 142, 144, 2873, 2873, 2873, 2873, 2873, 144, 147, 147, + 2873, 2873, 2873, 147, 147, 149, 2873, 2873, 2873, 2873, + 2873, 149, 151, 151, 2873, 151, 151, 151, 151, 75, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858 + 75, 2873, 75, 75, 75, 75, 13, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873 } ; -static yyconst flex_int16_t yy_chk[5626] = +static yyconst flex_int16_t yy_chk[5648] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2003,13 +2009,13 @@ static yyconst flex_int16_t yy_chk[5626] = 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, 2864, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2879, 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, 960, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 966, 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, @@ -2033,587 +2039,589 @@ static yyconst flex_int16_t yy_chk[5626] = 119, 111, 121, 116, 118, 118, 122, 116, 120, 113, 112, 124, 120, 127, 127, 115, 125, 121, 126, 117, 119, 120, 125, 123, 124, 122, 123, 120, 128, 129, - 126, 130, 131, 132, 127, 135, 133, 123, 133, 134, - 135, 123, 136, 137, 139, 129, 128, 133, 147, 132, - 130, 134, 138, 131, 136, 141, 141, 138, 139, 133, - 143, 137, 145, 143, 145, 145, 154, 145, 148, 148, - 150, 154, 150, 150, 151, 150, 151, 151, 153, 151, + 126, 127, 130, 131, 127, 134, 132, 123, 133, 135, + 133, 123, 137, 136, 135, 129, 128, 134, 138, 133, + 139, 130, 132, 138, 131, 136, 141, 141, 147, 143, + 137, 133, 143, 145, 139, 145, 145, 154, 145, 148, + 148, 150, 154, 150, 150, 151, 150, 151, 151, 153, - 156, 153, 155, 160, 157, 158, 151, 161, 155, 162, - 163, 160, 164, 158, 165, 163, 167, 155, 156, 157, - 158, 166, 191, 165, 162, 168, 161, 166, 166, 170, - 168, 178, 164, 169, 169, 170, 172, 171, 191, 171, - 172, 167, 171, 173, 173, 172, 174, 175, 176, 177, - 172, 178, 175, 176, 179, 182, 172, 172, 180, 171, - 179, 177, 180, 181, 183, 174, 184, 185, 181, 182, - 186, 187, 189, 190, 192, 186, 187, 189, 184, 183, - 192, 184, 196, 179, 194, 185, 188, 188, 193, 193, - 194, 195, 188, 190, 197, 198, 194, 195, 199, 200, + 151, 156, 153, 155, 160, 157, 158, 151, 161, 155, + 162, 163, 160, 164, 158, 165, 163, 167, 155, 156, + 157, 158, 166, 191, 165, 162, 168, 161, 166, 166, + 170, 168, 178, 164, 169, 169, 170, 172, 171, 191, + 171, 172, 167, 171, 173, 173, 172, 174, 175, 176, + 177, 172, 178, 175, 176, 179, 182, 172, 172, 180, + 171, 179, 177, 180, 181, 183, 174, 184, 185, 181, + 182, 186, 187, 189, 190, 192, 186, 187, 189, 184, + 183, 192, 184, 196, 179, 194, 185, 188, 188, 193, + 193, 194, 195, 188, 190, 197, 198, 194, 195, 199, - 197, 198, 196, 201, 188, 200, 188, 202, 201, 203, - 198, 204, 205, 202, 206, 203, 207, 208, 204, 199, - 206, 209, 210, 208, 211, 205, 212, 214, 215, 213, - 210, 212, 216, 218, 217, 220, 207, 211, 213, 217, - 221, 219, 214, 209, 215, 219, 221, 222, 223, 224, - 146, 218, 216, 225, 223, 225, 226, 220, 227, 229, - 231, 228, 230, 226, 227, 222, 222, 228, 230, 224, - 232, 235, 231, 233, 233, 234, 234, 235, 229, 236, - 237, 238, 237, 239, 232, 236, 240, 241, 239, 242, - 243, 244, 245, 256, 246, 235, 244, 242, 240, 237, + 200, 197, 198, 196, 201, 188, 200, 188, 202, 201, + 203, 198, 204, 205, 202, 206, 203, 207, 208, 204, + 199, 206, 209, 210, 208, 211, 205, 212, 214, 215, + 213, 210, 212, 216, 218, 217, 220, 207, 211, 213, + 217, 221, 219, 214, 209, 215, 219, 221, 222, 223, + 224, 225, 218, 216, 227, 223, 225, 226, 220, 226, + 230, 227, 228, 229, 232, 231, 222, 222, 228, 229, + 224, 231, 233, 234, 234, 236, 232, 235, 235, 230, + 239, 236, 237, 238, 240, 238, 233, 242, 237, 240, + 243, 244, 241, 246, 260, 245, 260, 257, 243, 236, - 246, 247, 251, 248, 238, 250, 241, 247, 248, 249, - 243, 250, 252, 253, 249, 245, 254, 251, 256, 255, - 258, 262, 257, 258, 260, 260, 252, 255, 257, 265, - 254, 253, 259, 261, 259, 266, 261, 263, 263, 262, - 264, 264, 269, 267, 268, 265, 267, 270, 268, 271, - 266, 269, 272, 270, 273, 274, 273, 277, 272, 279, - 275, 274, 277, 271, 275, 276, 276, 278, 280, 281, - 282, 283, 283, 278, 284, 285, 286, 284, 287, 279, - 286, 275, 289, 282, 288, 288, 280, 291, 290, 292, - 281, 290, 294, 285, 293, 292, 287, 293, 296, 291, + 245, 247, 238, 239, 241, 249, 242, 247, 248, 251, + 249, 244, 250, 252, 248, 251, 246, 250, 253, 254, + 255, 256, 257, 259, 258, 263, 259, 267, 252, 256, + 258, 266, 253, 146, 255, 261, 261, 254, 262, 264, + 264, 262, 267, 263, 265, 265, 268, 266, 269, 268, + 270, 271, 269, 272, 273, 275, 274, 271, 274, 270, + 273, 275, 276, 277, 277, 278, 276, 272, 279, 280, + 278, 282, 281, 283, 279, 284, 284, 285, 286, 288, + 285, 287, 290, 276, 144, 287, 283, 289, 289, 280, + 281, 291, 282, 292, 291, 293, 286, 288, 295, 294, - 289, 297, 301, 298, 294, 295, 299, 296, 298, 299, - 300, 299, 144, 300, 295, 301, 302, 295, 303, 297, - 303, 303, 295, 295, 295, 295, 306, 299, 302, 304, - 304, 305, 307, 308, 305, 309, 310, 310, 312, 312, - 311, 313, 308, 306, 309, 311, 306, 307, 314, 315, - 316, 317, 318, 314, 319, 320, 313, 321, 322, 326, - 319, 315, 321, 323, 322, 324, 329, 318, 323, 316, - 324, 317, 329, 326, 325, 320, 324, 325, 327, 325, - 328, 327, 330, 331, 142, 335, 331, 330, 334, 328, - 333, 377, 331, 337, 327, 377, 331, 327, 336, 327, + 290, 293, 294, 297, 298, 292, 301, 309, 299, 301, + 295, 296, 297, 299, 300, 303, 309, 300, 308, 300, + 296, 302, 298, 296, 305, 305, 307, 303, 296, 296, + 296, 296, 310, 308, 302, 300, 304, 306, 304, 304, + 306, 310, 312, 307, 311, 311, 307, 312, 313, 313, + 314, 315, 316, 317, 318, 319, 315, 320, 321, 327, + 329, 322, 323, 320, 316, 314, 322, 142, 323, 329, + 319, 324, 317, 327, 318, 325, 324, 331, 321, 326, + 325, 336, 326, 331, 326, 328, 325, 332, 328, 330, + 330, 335, 332, 337, 333, 338, 444, 333, 339, 342, - 335, 340, 342, 343, 331, 332, 332, 337, 332, 334, - 333, 339, 343, 336, 339, 340, 345, 342, 346, 140, - 348, 332, 345, 347, 332, 350, 332, 349, 332, 352, - 339, 341, 344, 341, 341, 348, 349, 344, 344, 346, - 353, 356, 347, 341, 350, 341, 341, 341, 351, 354, - 341, 355, 357, 358, 351, 352, 359, 355, 364, 361, - 353, 355, 360, 354, 356, 363, 363, 360, 365, 362, - 366, 359, 357, 358, 361, 362, 367, 368, 364, 369, - 365, 370, 367, 372, 366, 373, 370, 371, 371, 374, - 371, 376, 375, 376, 378, 369, 379, 379, 378, 380, + 345, 328, 336, 333, 328, 344, 328, 333, 337, 345, + 338, 335, 339, 342, 349, 333, 334, 334, 444, 334, + 344, 341, 346, 347, 341, 348, 354, 346, 346, 347, + 350, 352, 334, 349, 355, 334, 353, 334, 351, 334, + 341, 343, 353, 343, 343, 350, 348, 351, 356, 358, + 352, 359, 354, 343, 355, 343, 343, 343, 357, 360, + 343, 361, 356, 363, 357, 362, 366, 364, 357, 367, + 362, 359, 358, 364, 365, 365, 361, 368, 363, 360, + 370, 367, 369, 371, 372, 375, 366, 374, 369, 372, + 376, 368, 373, 373, 377, 373, 378, 383, 378, 371, - 381, 373, 368, 372, 382, 374, 375, 383, 384, 387, - 385, 376, 386, 378, 387, 381, 391, 389, 380, 385, - 382, 386, 384, 388, 395, 383, 389, 388, 390, 392, - 385, 70, 385, 394, 390, 392, 393, 391, 394, 397, - 393, 396, 396, 398, 395, 399, 400, 400, 398, 401, - 402, 403, 397, 404, 402, 401, 405, 406, 399, 407, - 407, 405, 406, 408, 409, 410, 403, 411, 407, 412, - 414, 416, 412, 413, 404, 408, 416, 413, 417, 411, - 415, 415, 414, 410, 409, 418, 418, 420, 420, 421, - 422, 423, 424, 425, 428, 427, 430, 429, 422, 417, + 379, 375, 381, 381, 379, 370, 376, 374, 377, 380, + 382, 384, 383, 380, 385, 387, 378, 386, 389, 393, + 140, 388, 390, 389, 387, 391, 390, 384, 380, 382, + 388, 386, 385, 392, 391, 387, 394, 387, 396, 392, + 393, 395, 394, 396, 397, 395, 398, 398, 399, 400, + 401, 402, 402, 403, 400, 405, 404, 406, 412, 403, + 404, 399, 407, 401, 397, 411, 408, 407, 409, 409, + 405, 408, 410, 419, 413, 70, 412, 409, 406, 414, + 416, 423, 414, 415, 410, 411, 413, 415, 417, 417, + 418, 425, 416, 424, 419, 418, 420, 420, 422, 422, - 423, 433, 430, 432, 434, 425, 433, 431, 440, 432, - 421, 429, 424, 427, 428, 427, 431, 435, 434, 437, - 436, 438, 440, 439, 438, 435, 436, 441, 435, 439, - 442, 444, 441, 443, 446, 444, 445, 447, 449, 437, - 448, 445, 447, 451, 453, 452, 454, 439, 453, 446, - 457, 455, 442, 458, 443, 457, 448, 449, 450, 450, - 452, 64, 466, 451, 450, 454, 450, 455, 458, 456, - 459, 460, 450, 456, 450, 459, 461, 450, 450, 463, - 462, 465, 466, 468, 450, 461, 462, 460, 470, 464, - 471, 462, 464, 467, 467, 463, 469, 469, 472, 473, + 425, 424, 423, 426, 427, 430, 429, 431, 432, 433, + 435, 434, 439, 436, 432, 435, 427, 434, 433, 440, + 437, 431, 440, 426, 429, 430, 429, 436, 437, 438, + 441, 437, 439, 442, 443, 438, 441, 445, 446, 443, + 447, 448, 446, 449, 450, 447, 451, 442, 449, 452, + 454, 456, 457, 455, 441, 456, 448, 458, 445, 459, + 450, 461, 452, 459, 460, 451, 453, 453, 455, 460, + 454, 457, 453, 458, 453, 463, 461, 466, 462, 464, + 453, 468, 453, 462, 465, 453, 453, 469, 464, 471, + 465, 463, 453, 466, 467, 465, 473, 467, 470, 470, - 474, 475, 471, 470, 465, 476, 475, 477, 468, 478, - 479, 481, 485, 472, 476, 482, 479, 483, 473, 482, - 481, 484, 474, 483, 478, 486, 477, 485, 487, 489, - 488, 490, 492, 484, 492, 490, 491, 495, 493, 494, - 494, 496, 487, 495, 486, 488, 493, 489, 497, 491, - 498, 500, 499, 496, 497, 499, 501, 503, 502, 504, - 503, 505, 498, 502, 506, 500, 507, 514, 504, 506, - 506, 501, 508, 508, 521, 504, 510, 505, 504, 507, - 509, 509, 510, 511, 511, 512, 512, 513, 514, 515, - 516, 517, 515, 513, 518, 516, 519, 521, 520, 519, + 472, 472, 475, 474, 468, 476, 477, 469, 478, 479, + 480, 473, 481, 478, 471, 474, 482, 475, 479, 485, + 486, 484, 482, 485, 476, 487, 486, 481, 477, 480, + 484, 488, 489, 490, 491, 492, 493, 487, 64, 494, + 493, 495, 496, 495, 497, 497, 488, 490, 498, 491, + 496, 489, 494, 492, 498, 499, 500, 501, 502, 503, + 504, 502, 500, 505, 508, 511, 511, 499, 505, 501, + 507, 506, 509, 503, 506, 504, 517, 509, 509, 507, + 508, 510, 512, 512, 513, 520, 507, 514, 514, 507, + 513, 515, 515, 516, 510, 518, 519, 517, 518, 516, - 522, 523, 518, 520, 525, 523, 524, 526, 525, 527, - 517, 528, 524, 530, 527, 529, 531, 533, 530, 522, - 532, 529, 535, 532, 536, 526, 534, 534, 532, 536, - 531, 528, 532, 537, 538, 533, 539, 540, 537, 542, - 535, 541, 542, 540, 547, 543, 548, 544, 538, 543, - 541, 539, 544, 545, 546, 549, 545, 550, 551, 546, - 547, 552, 549, 551, 548, 553, 553, 554, 555, 556, - 550, 543, 558, 557, 559, 561, 554, 560, 561, 564, - 559, 552, 557, 560, 558, 556, 562, 555, 563, 562, - 565, 567, 566, 563, 568, 574, 567, 564, 566, 569, + 521, 519, 522, 524, 520, 522, 523, 527, 521, 525, + 526, 523, 528, 527, 526, 529, 528, 530, 531, 532, + 534, 59, 530, 536, 533, 532, 524, 535, 525, 533, + 535, 537, 537, 529, 534, 535, 538, 539, 531, 535, + 540, 536, 539, 541, 542, 540, 543, 544, 545, 546, + 547, 545, 543, 546, 538, 547, 544, 541, 548, 542, + 549, 548, 550, 551, 552, 549, 553, 554, 555, 556, + 556, 552, 554, 557, 558, 546, 559, 560, 550, 553, + 580, 551, 557, 561, 562, 563, 560, 567, 555, 580, + 562, 563, 559, 558, 564, 561, 565, 564, 566, 565, - 568, 570, 569, 571, 565, 572, 570, 573, 571, 571, - 575, 576, 577, 580, 574, 574, 575, 578, 572, 580, - 573, 577, 578, 579, 581, 585, 579, 582, 583, 586, - 576, 586, 582, 583, 583, 587, 581, 584, 584, 589, - 588, 579, 588, 590, 591, 592, 593, 594, 596, 595, - 585, 594, 597, 598, 587, 599, 600, 589, 595, 602, - 601, 590, 591, 596, 592, 602, 593, 597, 600, 603, - 604, 598, 605, 606, 599, 601, 607, 608, 609, 610, - 607, 611, 604, 603, 612, 613, 613, 615, 616, 614, - 617, 605, 606, 614, 619, 608, 609, 610, 612, 616, + 568, 569, 571, 566, 570, 567, 573, 569, 571, 570, + 572, 573, 574, 572, 568, 575, 576, 574, 574, 577, + 578, 579, 581, 584, 588, 583, 578, 581, 575, 576, + 582, 583, 585, 582, 590, 584, 586, 585, 577, 577, + 579, 586, 586, 587, 587, 589, 592, 589, 582, 588, + 591, 593, 591, 590, 594, 595, 596, 597, 598, 599, + 600, 602, 598, 597, 592, 601, 603, 606, 599, 593, + 604, 605, 594, 606, 595, 600, 596, 607, 608, 602, + 601, 609, 604, 610, 611, 603, 605, 612, 611, 613, + 608, 607, 614, 615, 616, 617, 617, 618, 619, 621, - 611, 620, 618, 621, 617, 622, 615, 618, 623, 625, - 619, 624, 622, 623, 625, 627, 621, 626, 624, 628, - 620, 629, 626, 630, 632, 631, 628, 633, 634, 636, - 629, 634, 633, 627, 631, 635, 632, 630, 637, 635, - 638, 640, 639, 636, 641, 641, 646, 637, 642, 642, - 643, 643, 644, 647, 648, 638, 639, 642, 650, 647, - 649, 644, 640, 651, 649, 646, 652, 653, 654, 656, - 650, 655, 657, 653, 648, 658, 654, 659, 655, 661, - 59, 664, 659, 667, 652, 668, 659, 656, 651, 659, - 669, 668, 667, 674, 661, 658, 659, 657, 664, 659, + 609, 618, 610, 620, 622, 612, 623, 613, 616, 622, + 614, 624, 615, 621, 620, 625, 626, 619, 628, 627, + 631, 629, 623, 626, 627, 628, 629, 630, 625, 632, + 624, 633, 630, 634, 635, 644, 632, 636, 631, 637, + 633, 640, 638, 635, 637, 638, 639, 634, 641, 636, + 639, 642, 650, 643, 655, 640, 644, 641, 645, 645, + 646, 646, 647, 647, 648, 652, 642, 643, 651, 646, + 654, 650, 653, 648, 651, 656, 653, 657, 658, 655, + 659, 660, 654, 657, 661, 652, 658, 659, 662, 665, + 668, 663, 671, 656, 675, 675, 663, 54, 673, 660, - 670, 671, 671, 673, 670, 675, 669, 672, 672, 676, - 677, 674, 679, 705, 673, 680, 677, 679, 682, 675, - 681, 683, 684, 684, 683, 687, 685, 686, 686, 676, - 678, 678, 678, 685, 678, 705, 680, 678, 681, 694, - 687, 689, 678, 682, 688, 688, 689, 690, 678, 678, - 690, 691, 692, 693, 692, 695, 691, 696, 694, 695, - 697, 698, 699, 699, 701, 693, 700, 702, 702, 698, - 703, 704, 708, 708, 706, 724, 724, 696, 701, 697, - 706, 700, 707, 704, 709, 54, 711, 707, 703, 709, - 709, 711, 712, 713, 716, 714, 715, 716, 712, 713, + 663, 671, 674, 663, 665, 672, 674, 668, 662, 661, + 663, 672, 677, 663, 673, 676, 676, 678, 679, 680, + 681, 686, 683, 677, 684, 685, 681, 683, 687, 688, + 688, 687, 679, 690, 690, 678, 691, 692, 692, 680, + 682, 682, 682, 685, 682, 684, 686, 682, 689, 693, + 694, 691, 682, 694, 693, 689, 695, 697, 682, 682, + 696, 695, 696, 698, 699, 700, 702, 701, 699, 697, + 703, 703, 704, 707, 702, 705, 706, 706, 708, 709, + 712, 712, 698, 728, 728, 700, 701, 704, 710, 705, + 708, 707, 711, 713, 710, 715, 716, 711, 713, 713, - 714, 717, 715, 718, 719, 720, 723, 717, 721, 722, - 725, 718, 719, 721, 726, 727, 722, 728, 730, 725, - 731, 727, 726, 720, 733, 723, 732, 730, 736, 731, - 737, 732, 734, 733, 735, 734, 728, 738, 738, 735, - 740, 739, 736, 741, 742, 745, 743, 745, 747, 743, - 746, 746, 741, 748, 749, 737, 739, 743, 748, 740, - 750, 751, 752, 753, 754, 759, 755, 756, 742, 747, - 755, 757, 758, 754, 759, 749, 760, 761, 758, 762, - 750, 751, 767, 753, 752, 756, 763, 764, 760, 765, - 757, 768, 763, 762, 765, 769, 761, 766, 766, 770, + 715, 709, 716, 717, 720, 718, 719, 720, 721, 717, + 718, 722, 719, 723, 721, 724, 726, 725, 727, 722, + 729, 723, 725, 726, 730, 731, 732, 734, 741, 729, + 735, 731, 730, 724, 737, 736, 734, 727, 738, 735, + 736, 738, 739, 737, 740, 732, 743, 739, 742, 742, + 744, 745, 746, 741, 747, 750, 750, 747, 740, 751, + 745, 743, 749, 752, 749, 747, 753, 756, 752, 744, + 754, 755, 757, 758, 759, 760, 746, 761, 763, 760, + 751, 762, 758, 766, 763, 764, 765, 753, 772, 756, + 754, 755, 757, 767, 764, 761, 769, 759, 765, 768, - 768, 764, 767, 771, 772, 773, 774, 775, 776, 783, - 777, 773, 778, 775, 780, 769, 777, 779, 778, 770, - 774, 779, 781, 785, 772, 771, 782, 787, 776, 785, - 783, 782, 790, 780, 781, 784, 784, 786, 788, 792, - 786, 789, 781, 791, 791, 787, 795, 789, 793, 794, - 794, 788, 790, 793, 796, 797, 797, 792, 796, 798, - 799, 795, 800, 801, 803, 804, 806, 800, 807, 809, - 809, 810, 811, 812, 812, 810, 815, 813, 828, 804, - 799, 798, 801, 816, 828, 53, 806, 811, 803, 807, - 808, 815, 814, 808, 818, 808, 814, 816, 817, 808, + 762, 770, 766, 771, 771, 768, 770, 767, 772, 773, + 769, 774, 775, 776, 777, 778, 779, 780, 773, 781, + 782, 778, 783, 780, 785, 784, 782, 788, 783, 784, + 779, 774, 775, 786, 777, 776, 787, 789, 789, 781, + 790, 787, 792, 785, 791, 786, 790, 791, 788, 793, + 794, 795, 797, 786, 796, 796, 794, 800, 798, 803, + 792, 806, 793, 798, 799, 799, 802, 802, 804, 801, + 797, 795, 800, 801, 805, 808, 809, 811, 816, 805, + 806, 803, 812, 814, 814, 815, 817, 817, 804, 815, + 809, 818, 819, 816, 821, 820, 819, 811, 823, 808, - 820, 808, 813, 817, 819, 822, 808, 825, 818, 819, - 819, 808, 821, 823, 820, 826, 821, 824, 823, 827, - 822, 825, 824, 829, 830, 831, 831, 832, 823, 829, - 830, 833, 832, 827, 834, 835, 826, 833, 838, 836, - 839, 840, 842, 842, 843, 839, 848, 848, 841, 843, - 838, 845, 846, 844, 835, 840, 834, 836, 837, 837, - 841, 844, 847, 849, 837, 845, 837, 849, 851, 853, - 852, 846, 837, 852, 851, 856, 854, 837, 837, 855, - 856, 847, 857, 858, 837, 855, 859, 860, 853, 854, - 861, 862, 858, 863, 864, 859, 861, 865, 867, 864, + 822, 53, 826, 812, 813, 822, 826, 813, 821, 813, + 820, 827, 823, 813, 825, 813, 818, 824, 831, 828, + 813, 830, 824, 824, 828, 813, 827, 829, 825, 832, + 833, 834, 829, 839, 828, 830, 833, 834, 835, 831, + 836, 836, 837, 832, 835, 838, 840, 837, 841, 843, + 845, 838, 844, 847, 847, 839, 865, 844, 846, 851, + 852, 843, 850, 849, 845, 840, 841, 842, 842, 848, + 846, 849, 865, 842, 848, 842, 850, 858, 851, 852, + 854, 842, 853, 853, 854, 856, 842, 842, 859, 857, + 861, 856, 857, 842, 860, 861, 858, 862, 863, 864, - 862, 857, 866, 860, 869, 870, 872, 868, 875, 871, - 878, 877, 863, 869, 870, 871, 866, 865, 867, 868, - 873, 879, 880, 872, 875, 877, 873, 881, 882, 883, - 878, 896, 884, 885, 883, 886, 880, 884, 885, 891, - 879, 887, 887, 882, 886, 881, 888, 889, 892, 895, - 897, 896, 888, 892, 892, 891, 894, 893, 893, 894, - 889, 893, 898, 895, 899, 900, 901, 902, 897, 903, - 904, 900, 903, 902, 907, 898, 905, 906, 908, 899, - 909, 905, 906, 908, 910, 909, 901, 912, 913, 914, - 907, 904, 915, 912, 917, 914, 910, 918, 915, 916, + 860, 859, 867, 866, 868, 869, 870, 863, 864, 866, + 869, 867, 872, 871, 876, 874, 862, 873, 877, 875, + 876, 880, 882, 868, 874, 878, 870, 871, 875, 873, + 883, 878, 872, 884, 885, 877, 882, 880, 886, 887, + 888, 889, 890, 893, 891, 888, 889, 890, 885, 893, + 883, 894, 884, 891, 887, 896, 886, 892, 892, 899, + 897, 900, 899, 901, 894, 897, 897, 902, 898, 898, + 905, 896, 898, 903, 904, 900, 905, 906, 907, 908, + 909, 48, 908, 901, 907, 902, 903, 910, 911, 904, + 912, 913, 910, 911, 914, 915, 913, 906, 917, 914, - 916, 920, 919, 917, 913, 919, 921, 922, 923, 924, - 925, 923, 926, 932, 930, 918, 925, 933, 926, 920, - 930, 927, 924, 928, 929, 921, 927, 922, 928, 929, - 934, 932, 935, 935, 936, 937, 934, 933, 938, 939, - 940, 938, 939, 936, 941, 942, 943, 949, 944, 945, - 950, 940, 946, 937, 944, 945, 947, 942, 948, 948, - 951, 947, 941, 953, 950, 943, 949, 946, 954, 952, - 955, 956, 951, 952, 958, 959, 959, 954, 961, 962, - 964, 953, 965, 963, 967, 964, 966, 966, 971, 955, - 971, 965, 961, 958, 962, 963, 956, 968, 973, 969, + 918, 909, 919, 920, 917, 922, 912, 915, 919, 920, + 921, 921, 923, 926, 922, 924, 918, 927, 924, 925, + 925, 928, 929, 931, 930, 929, 932, 938, 933, 931, + 923, 926, 932, 933, 934, 935, 927, 930, 936, 934, + 935, 928, 939, 940, 936, 938, 941, 941, 942, 940, + 943, 944, 945, 946, 944, 945, 947, 942, 948, 949, + 950, 951, 939, 955, 946, 952, 950, 951, 943, 956, + 948, 953, 954, 954, 947, 957, 953, 958, 949, 959, + 952, 958, 955, 956, 960, 961, 962, 957, 964, 965, + 965, 967, 971, 960, 968, 970, 969, 959, 972, 972, - 974, 970, 972, 968, 967, 969, 970, 972, 975, 976, - 977, 978, 973, 975, 974, 979, 980, 983, 978, 982, - 982, 984, 985, 987, 976, 48, 986, 992, 988, 977, - 979, 983, 986, 988, 992, 980, 995, 985, 993, 984, - 990, 990, 988, 987, 988, 991, 994, 988, 996, 994, - 991, 997, 993, 998, 995, 999, 997, 996, 1000, 1001, - 999, 1003, 1003, 1004, 1006, 1005, 1007, 1009, 1004, 1000, - 1005, 1007, 998, 1008, 1010, 1011, 1009, 1008, 1001, 1012, - 1013, 1014, 1016, 1017, 1006, 1018, 1015, 1019, 1021, 1010, - 1011, 1020, 1013, 1015, 1016, 1022, 1014, 1020, 1012, 1023, + 970, 971, 973, 43, 961, 967, 974, 964, 969, 968, + 975, 962, 974, 976, 978, 977, 975, 977, 976, 978, + 979, 980, 973, 981, 982, 983, 984, 985, 981, 986, + 988, 988, 989, 984, 979, 980, 990, 991, 993, 982, + 1000, 992, 985, 1000, 983, 994, 989, 992, 986, 999, + 994, 1001, 991, 998, 990, 996, 996, 997, 993, 994, + 998, 994, 997, 999, 994, 1002, 1003, 1004, 1005, 1001, + 1006, 1003, 1007, 1005, 1002, 1009, 1009, 1010, 1011, 1012, + 1013, 1006, 1010, 1011, 1014, 1013, 1004, 1015, 1014, 1016, + 1017, 1007, 1018, 1020, 1019, 1021, 1015, 1022, 1023, 1012, - 1024, 1026, 1017, 1021, 1027, 1019, 1018, 1026, 1028, 1024, - 1029, 1031, 1030, 1033, 1034, 1022, 1028, 1030, 1027, 1023, - 1032, 1035, 1039, 1031, 1042, 1032, 1032, 1038, 1034, 1042, - 1029, 1039, 1033, 1040, 1035, 1036, 1036, 1037, 1043, 1040, - 1038, 1052, 1037, 1041, 1041, 1037, 1037, 1043, 1044, 1048, - 1037, 43, 1045, 1046, 1044, 1051, 1037, 1045, 1046, 1052, - 1037, 1047, 1047, 1049, 1049, 1053, 1050, 1054, 1055, 1050, - 1048, 1050, 1056, 1055, 1053, 1051, 1057, 1058, 1059, 14, - 1060, 1062, 1065, 1058, 1059, 1060, 1056, 1054, 1061, 1064, - 1062, 1064, 1061, 1065, 1057, 1062, 1067, 1062, 1068, 1062, + 1024, 1025, 1021, 1027, 1016, 1017, 1019, 1026, 1020, 1022, + 1028, 1018, 1029, 1026, 1030, 1033, 1032, 1023, 1027, 1025, + 1034, 1024, 1032, 1030, 1035, 1037, 1036, 1039, 1034, 1033, + 1028, 1036, 1029, 1038, 1040, 14, 1041, 1037, 1038, 1038, + 1042, 1042, 1045, 1044, 1035, 1049, 1039, 1046, 1040, 1041, + 1043, 1045, 1048, 1046, 1049, 1043, 1044, 1048, 1043, 1043, + 1047, 1047, 1050, 1043, 1054, 1051, 1052, 1057, 1050, 1043, + 1051, 1052, 1058, 1043, 1053, 1053, 1055, 1055, 1056, 1059, + 1060, 1056, 1062, 1056, 1061, 1054, 1063, 1057, 1059, 1061, + 1058, 1064, 1065, 1068, 1066, 13, 1062, 1064, 1065, 1066, - 1067, 1062, 1063, 1063, 1069, 1070, 1071, 1072, 1075, 1074, - 1073, 1071, 1071, 1068, 1070, 1073, 1076, 1075, 1077, 1078, - 1079, 1080, 1069, 1074, 1081, 1083, 1080, 1078, 1084, 1072, - 1082, 1085, 1086, 1086, 1079, 1076, 1085, 1077, 1081, 1082, - 1087, 1088, 1088, 1083, 1089, 1091, 1089, 1092, 1091, 1093, - 1094, 1094, 1092, 1084, 1095, 1087, 1096, 1096, 1097, 1097, - 1098, 1099, 1100, 1101, 1101, 1098, 1102, 1103, 1093, 1104, - 1103, 1105, 1106, 1107, 1095, 1107, 1105, 1109, 13, 1110, - 1109, 1106, 1099, 1100, 1110, 1111, 1102, 1112, 1113, 1104, - 1111, 1114, 1117, 1113, 1116, 1112, 1114, 1115, 1115, 1116, + 1060, 1067, 1068, 1074, 1063, 1067, 1070, 1068, 1070, 1068, + 1071, 1068, 1073, 1068, 1069, 1069, 1073, 1075, 1074, 1076, + 1077, 1071, 1078, 1080, 1079, 1077, 1077, 1081, 1076, 1079, + 1082, 1083, 1084, 1085, 1086, 1075, 1081, 1080, 1087, 1086, + 1084, 1089, 1088, 1090, 1078, 1092, 1092, 1085, 1091, 1082, + 1083, 1088, 1087, 1091, 1093, 1094, 1094, 1098, 1095, 1089, + 1095, 1097, 1098, 1099, 1097, 1100, 1101, 1101, 1090, 1093, + 1102, 1103, 1103, 1105, 1100, 1104, 1104, 1106, 1105, 1107, + 1108, 1108, 1099, 1109, 1110, 1111, 1112, 1110, 1113, 1125, + 1102, 1112, 1114, 1116, 1114, 1125, 1116, 1113, 1106, 1117, - 1118, 1119, 1120, 1122, 1130, 1123, 1118, 1124, 1119, 1122, - 1117, 1123, 1124, 1125, 1126, 1120, 1127, 1128, 1132, 1125, - 1129, 1129, 1133, 1126, 1130, 1134, 1135, 1136, 1128, 1139, - 1138, 1134, 1135, 1136, 1140, 1127, 1138, 1145, 1132, 1141, - 1143, 1142, 1146, 1139, 1147, 1133, 1144, 1144, 1148, 1139, - 1150, 1141, 1153, 1148, 1140, 1142, 1151, 1145, 1143, 1149, - 1149, 1151, 1147, 1154, 1155, 1156, 1158, 1146, 1154, 1154, - 1157, 1153, 1159, 1150, 1156, 1160, 1161, 1162, 1157, 1162, - 1158, 1161, 1155, 1163, 1161, 1164, 1167, 1159, 1165, 1166, - 1160, 1164, 1165, 1160, 1168, 1169, 1170, 1163, 1171, 1172, + 1107, 1118, 1119, 1109, 1117, 1111, 1118, 1120, 1121, 1124, + 1119, 1123, 1120, 1121, 1122, 1122, 1123, 1126, 1127, 1129, + 1130, 1133, 1134, 1131, 1126, 1129, 1130, 1124, 1131, 1132, + 1133, 1127, 1135, 1136, 1136, 1132, 1137, 1139, 1140, 1141, + 1142, 1134, 1143, 1135, 1145, 1141, 1142, 1147, 1143, 1146, + 1145, 1149, 1148, 1150, 1151, 1151, 1137, 1139, 1152, 1153, + 1157, 1140, 1154, 1146, 1148, 1149, 1160, 1147, 1155, 1146, + 1162, 1150, 1158, 1155, 1156, 1156, 1161, 1158, 1152, 1164, + 1154, 1161, 1161, 1157, 1153, 1160, 1163, 1164, 1162, 1165, + 1166, 1167, 1168, 1170, 1169, 1163, 1169, 1168, 1171, 1173, - 1166, 1170, 1173, 1175, 1172, 1167, 1176, 1177, 1178, 1178, - 1179, 1180, 1181, 1169, 1179, 1182, 1171, 1175, 1183, 1184, - 1168, 1182, 1173, 1185, 1176, 1177, 1186, 1187, 1188, 1180, - 1183, 1181, 1192, 1190, 1189, 1193, 1195, 1185, 1184, 1189, - 1190, 1186, 1187, 1191, 1193, 1194, 1194, 1188, 1191, 1196, - 1192, 1195, 1197, 1198, 1199, 1196, 1200, 1205, 1198, 1207, - 1199, 1205, 1200, 1201, 1201, 1202, 1202, 1204, 1204, 1206, - 1208, 1209, 1210, 1197, 1211, 1211, 1212, 1207, 1206, 1210, - 1213, 1215, 1214, 1216, 1208, 1217, 1209, 1214, 1213, 1219, - 1217, 1217, 1218, 1220, 1220, 1215, 1212, 1218, 1218, 1221, + 1168, 1174, 1175, 1165, 1171, 1166, 1167, 1170, 1172, 1167, + 1173, 1176, 1172, 1177, 1178, 1180, 1179, 1182, 1177, 1183, + 1174, 1179, 1184, 1185, 1185, 1187, 1186, 1188, 1175, 1176, + 1186, 1182, 1178, 1189, 1191, 1180, 1190, 1183, 1192, 1189, + 1184, 1193, 1194, 1187, 1195, 1196, 1188, 1197, 1190, 1199, + 1196, 1202, 1192, 1191, 1197, 1198, 1193, 1194, 1203, 1200, + 1198, 1201, 1201, 1195, 1203, 1204, 1202, 1199, 1200, 1205, + 1206, 1207, 1208, 1208, 1205, 1213, 1206, 1207, 1209, 1209, + 1211, 1211, 1214, 1212, 1213, 1215, 1204, 1212, 1216, 1217, + 1218, 1218, 1219, 1220, 1222, 1223, 1217, 1221, 1226, 1215, - 1222, 1223, 1216, 1224, 1225, 1226, 1227, 1228, 1224, 1219, - 1223, 1229, 1230, 1228, 1231, 1232, 1229, 1235, 1221, 1222, - 1231, 1233, 1234, 1225, 1227, 1226, 1236, 1233, 1234, 1237, - 1238, 1240, 1239, 1247, 1232, 1241, 1235, 1247, 1230, 1242, - 1242, 1243, 1244, 1255, 1243, 1236, 1239, 1248, 1237, 1238, - 1241, 1250, 1240, 1246, 1244, 1245, 1245, 1249, 1246, 1251, - 1248, 1251, 1253, 1255, 1250, 1251, 1249, 1253, 1254, 1256, - 1257, 1257, 1258, 1262, 1259, 1264, 1260, 1258, 1251, 1259, - 1260, 1263, 1261, 1254, 1265, 1256, 1261, 1266, 1266, 1268, - 1265, 1270, 1271, 1262, 0, 1264, 1273, 1271, 1279, 1263, + 1214, 1220, 1221, 1216, 1224, 1227, 1227, 1228, 1222, 1224, + 1224, 1225, 1219, 1229, 1223, 1230, 1225, 1225, 1226, 1232, + 1231, 1233, 1234, 1235, 1230, 1231, 1228, 1237, 1236, 1235, + 1238, 1239, 1229, 1236, 1246, 1242, 1238, 1240, 1232, 1241, + 1234, 1233, 1243, 1240, 1244, 1241, 1245, 1247, 1246, 1248, + 1239, 1249, 1249, 1237, 1242, 1250, 0, 1251, 1250, 1252, + 1252, 1243, 1253, 1244, 1248, 1245, 1254, 1253, 1247, 1251, + 1254, 1255, 1256, 1257, 1258, 1261, 1258, 1260, 1262, 1263, + 1258, 1256, 1260, 0, 1255, 1269, 1257, 1264, 1264, 1265, + 1261, 1266, 1270, 1258, 1265, 1263, 1266, 1267, 1262, 1268, - 1272, 1272, 1273, 1275, 1275, 1277, 1280, 1268, 1277, 1278, - 1278, 1283, 1270, 1282, 1279, 1284, 1282, 1285, 1285, 1286, - 1287, 1288, 1280, 1291, 1284, 1290, 1288, 1289, 1289, 1292, - 1294, 1283, 1293, 1293, 1286, 1295, 1297, 1296, 1291, 1298, - 1298, 1287, 1296, 1290, 1294, 1299, 1300, 1301, 1301, 1299, - 1302, 1297, 1303, 1295, 1292, 1304, 1305, 1306, 1309, 1304, - 1308, 1308, 1306, 1303, 1310, 1311, 1300, 1312, 1313, 1314, - 1314, 1316, 1302, 1318, 1315, 1305, 1309, 1317, 1310, 1315, - 1320, 1312, 1318, 1319, 1311, 1311, 1323, 1321, 1319, 1321, - 1322, 1316, 1323, 1313, 1324, 1322, 1325, 1317, 1327, 1329, + 1271, 1267, 1272, 1268, 1275, 1269, 1273, 1273, 1272, 1277, + 1270, 1278, 1279, 1279, 1281, 1280, 1278, 1283, 1283, 1287, + 1271, 1280, 1275, 1285, 1286, 1286, 1285, 1288, 1290, 1291, + 1277, 1290, 1292, 1294, 1281, 1287, 1293, 1293, 1295, 1296, + 1298, 1292, 1299, 1288, 1296, 1297, 1297, 1300, 1294, 1291, + 1301, 1301, 1302, 1303, 1305, 1304, 1308, 1299, 1298, 1295, + 1304, 1306, 1306, 1307, 1309, 1309, 1302, 1307, 1310, 1305, + 1311, 1303, 1300, 1312, 1313, 1314, 1308, 1312, 1316, 1316, + 1314, 1311, 1317, 1318, 1319, 1320, 1321, 1322, 1322, 1323, + 1310, 0, 1324, 1313, 1323, 1325, 1326, 1318, 1328, 1320, - 1320, 1330, 1325, 1328, 1328, 1332, 1333, 1330, 1334, 1334, - 1332, 1336, 1327, 1337, 1324, 1335, 1335, 1338, 1329, 1339, - 1340, 1340, 1339, 1341, 1342, 1336, 0, 1348, 1344, 1346, - 1333, 1337, 1338, 1343, 1344, 1341, 1343, 1345, 1346, 1343, - 1347, 1350, 1345, 1349, 1342, 1347, 1349, 1350, 1351, 1352, - 1352, 1343, 1348, 1351, 1353, 1353, 1354, 1356, 1355, 1357, - 1358, 1359, 1354, 1355, 1360, 1361, 1362, 1360, 1363, 1364, - 1356, 1361, 1362, 1363, 1365, 1364, 1369, 1357, 1366, 1358, - 1370, 1359, 1368, 1366, 1367, 1367, 1371, 1368, 1372, 1373, - 1376, 1377, 1374, 1378, 1369, 1375, 1376, 1365, 1379, 1380, + 1317, 1327, 1332, 1319, 1319, 1326, 1327, 1329, 1330, 1329, + 1331, 1321, 1324, 1330, 1333, 1325, 1331, 1335, 1328, 1337, + 1333, 1338, 1332, 1336, 1336, 1340, 1341, 1338, 1342, 1342, + 1340, 1335, 1343, 1343, 1344, 1345, 1346, 1347, 1337, 1350, + 1347, 1348, 1348, 1349, 1356, 1517, 1351, 1517, 1344, 1351, + 1341, 1346, 1351, 1345, 1352, 1349, 1353, 1354, 1355, 1350, + 1352, 1353, 1357, 1355, 1351, 1357, 1354, 1358, 1362, 1356, + 1359, 1360, 1360, 1358, 1362, 1359, 1361, 1361, 1363, 1364, + 1365, 1366, 1367, 1363, 1368, 1369, 1373, 1368, 1370, 1377, + 1371, 1369, 1364, 1372, 1370, 1371, 1374, 1378, 1365, 1372, - 1370, 1383, 1372, 1373, 1374, 1388, 1371, 1386, 1375, 1382, - 1382, 1377, 1379, 1378, 1384, 1385, 1385, 1387, 1389, 1384, - 1380, 1383, 1386, 1390, 1391, 1393, 1392, 1394, 1398, 1388, - 1396, 1387, 1390, 1392, 1393, 1399, 1389, 1393, 1399, 1391, - 1400, 1400, 1402, 1394, 1403, 1396, 1401, 1401, 1404, 1407, - 1396, 1404, 1406, 1398, 1402, 1405, 1405, 1410, 1408, 1409, - 1412, 1411, 1403, 1408, 1409, 1406, 1413, 1416, 1407, 1412, - 1414, 1415, 1418, 1416, 1417, 1417, 1410, 1411, 1419, 1414, - 1415, 1420, 1414, 1421, 1422, 1413, 1423, 1425, 1426, 1427, - 1427, 1419, 1418, 1428, 1429, 1433, 1430, 1421, 1423, 1420, + 1366, 1374, 1367, 1375, 1375, 1376, 1379, 1377, 1380, 1373, + 1376, 1381, 1382, 1384, 1383, 1385, 1386, 1378, 1387, 1384, + 1388, 1396, 1380, 1391, 1382, 1381, 1379, 1383, 1390, 1390, + 1393, 1393, 1387, 1392, 1394, 1385, 1386, 1395, 1392, 1397, + 1399, 1388, 1402, 1391, 1398, 1396, 1404, 1400, 1406, 1394, + 1401, 1395, 1411, 1398, 1400, 1399, 0, 1397, 1402, 1401, + 1407, 1404, 1401, 1407, 1408, 1408, 1404, 1409, 1409, 1410, + 1411, 1412, 1414, 1406, 1412, 1413, 1413, 1415, 1416, 1417, + 1418, 1410, 1419, 1416, 1417, 1414, 1420, 1421, 1422, 1425, + 1425, 1426, 1423, 1430, 1427, 1420, 1415, 1422, 1419, 1418, - 1422, 1430, 1432, 1429, 1431, 1431, 1426, 1434, 1435, 1428, - 1436, 1432, 1425, 1433, 1432, 1436, 1436, 1438, 1439, 1431, - 1440, 1441, 1441, 1442, 1439, 1443, 1435, 1444, 1434, 1442, - 1443, 1438, 1447, 1444, 1445, 1448, 1449, 1450, 1440, 1455, - 1445, 1456, 1449, 1453, 1451, 1461, 1457, 1451, 1458, 1448, - 1450, 1453, 1447, 1451, 1457, 1459, 1460, 1458, 1455, 1461, - 1456, 1462, 1465, 1464, 1463, 1466, 1467, 1468, 1459, 1460, - 1463, 1469, 1470, 1471, 1472, 1462, 1464, 1469, 1474, 1474, - 1468, 1475, 1465, 1466, 1476, 1467, 1477, 1480, 1476, 1471, - 1478, 1477, 1472, 1479, 1470, 1478, 1480, 1481, 1479, 1483, + 1422, 1423, 1424, 1428, 1429, 1431, 1421, 1427, 1424, 1430, + 1433, 1426, 1434, 1435, 1435, 1436, 1437, 1431, 1429, 1438, + 1440, 1428, 1439, 1439, 1438, 1437, 1441, 1442, 1443, 1440, + 1434, 1436, 1440, 1444, 1447, 1433, 1446, 1439, 1444, 1444, + 1447, 1448, 1449, 1449, 1441, 1450, 1443, 1451, 1442, 1452, + 1446, 1450, 1451, 1455, 1453, 1452, 1456, 1457, 1458, 1448, + 1453, 1460, 1464, 1457, 1462, 1459, 1465, 1460, 1459, 1466, + 1456, 1458, 1462, 1455, 1459, 1467, 1468, 1466, 1469, 1470, + 1471, 1464, 1472, 1473, 1467, 1465, 1474, 1475, 1472, 1468, + 1476, 1469, 1478, 1470, 1471, 1477, 1473, 1479, 1478, 1480, - 1485, 1475, 1484, 1484, 1486, 1487, 1488, 1488, 1489, 1491, - 1490, 1492, 1493, 1494, 1483, 1496, 1486, 1490, 1497, 1485, - 1481, 1491, 1489, 1492, 1487, 0, 1495, 1496, 1498, 1499, - 1499, 1493, 1495, 1494, 1498, 1500, 1497, 1503, 1500, 1501, - 1501, 1504, 1503, 1505, 1506, 1506, 1507, 1510, 1511, 1505, - 1504, 1508, 1509, 1508, 1512, 1509, 1513, 1514, 1507, 1515, - 1517, 1516, 1514, 1520, 1518, 1524, 1521, 1510, 1515, 1518, - 1511, 1519, 1512, 1516, 1513, 1517, 1522, 1522, 1523, 1525, - 1519, 1521, 1527, 1520, 1523, 1526, 1524, 1528, 1533, 1528, - 1529, 1530, 1530, 1519, 1531, 1531, 1532, 1532, 1525, 1534, + 1481, 1483, 1483, 1484, 1489, 1475, 1474, 1485, 1477, 1476, + 1490, 1485, 1486, 1489, 1492, 1480, 1487, 1486, 1481, 1479, + 1488, 1487, 1494, 1484, 1495, 1488, 1493, 1493, 1496, 1492, + 1497, 1497, 1498, 1490, 1502, 1499, 1495, 1500, 1501, 1503, + 1505, 1494, 1499, 1506, 0, 1504, 1498, 1496, 1507, 1500, + 1501, 1504, 1505, 1502, 1507, 1508, 1508, 1509, 1513, 1503, + 1509, 1506, 1510, 1510, 1512, 1514, 1516, 1513, 1519, 1512, + 1520, 1514, 1515, 1515, 1518, 1521, 1522, 1518, 1516, 1523, + 1524, 1526, 1527, 1525, 1523, 1529, 1530, 1527, 1519, 1524, + 1528, 1534, 1520, 1521, 1522, 1525, 1526, 1531, 1531, 1528, - 1534, 1526, 1527, 1536, 1529, 1537, 1529, 1544, 1533, 1535, - 1535, 1538, 1538, 1539, 1540, 1541, 1543, 1539, 1541, 1546, - 1540, 1545, 1543, 1551, 1536, 1544, 1537, 1545, 1547, 1548, - 1548, 1547, 1549, 1549, 1550, 1551, 1551, 1551, 1552, 1553, - 1550, 1554, 1551, 1555, 1546, 1557, 1558, 1554, 1563, 1564, - 1557, 1557, 1559, 1560, 1559, 1561, 1562, 1563, 1552, 1553, - 1558, 1565, 1562, 1555, 1560, 1566, 1566, 1567, 1569, 1564, - 1561, 1568, 1568, 1570, 1571, 1571, 1572, 1572, 1573, 1576, - 1576, 1577, 1565, 1578, 1581, 1580, 1583, 1583, 1569, 1584, - 1582, 1588, 1578, 1567, 1580, 1570, 1582, 1585, 1573, 1587, + 1532, 1530, 1533, 1535, 1536, 1529, 1532, 1537, 1542, 1537, + 1534, 1538, 1528, 1539, 1539, 1540, 1540, 1541, 1541, 1535, + 1543, 1543, 1545, 1533, 1536, 1538, 1546, 1538, 1542, 1544, + 1544, 1547, 1547, 1548, 1549, 1550, 1552, 1548, 1550, 1553, + 1549, 1555, 1552, 1545, 1554, 1556, 1560, 1546, 1556, 1559, + 1554, 1557, 1557, 1558, 1558, 1559, 1561, 1553, 1560, 1560, + 1560, 1562, 1563, 1564, 1566, 1560, 1555, 1569, 1563, 1566, + 1566, 1567, 1568, 1570, 1568, 1572, 1561, 1573, 1569, 1574, + 1571, 1562, 1576, 1564, 1572, 1567, 1571, 1578, 1570, 1575, + 1575, 1577, 1577, 1579, 1580, 1580, 1582, 1573, 1581, 1581, - 1586, 1589, 1589, 1590, 1591, 1581, 1577, 1586, 1587, 1593, - 1584, 1595, 1585, 1594, 1593, 1596, 1602, 1588, 1597, 1594, - 1591, 1598, 1596, 1600, 1597, 1599, 1599, 1598, 1600, 1590, - 1601, 1595, 1603, 1604, 1605, 1606, 1602, 1605, 1607, 1601, - 1608, 1608, 1609, 1610, 1611, 1604, 1612, 1614, 1609, 1615, - 1612, 1603, 1618, 1606, 1616, 1620, 1619, 1622, 1622, 1611, - 1619, 1620, 1624, 1610, 1607, 1621, 1612, 1614, 1615, 1616, - 1626, 1618, 1623, 1624, 1621, 1627, 1623, 1628, 1624, 1625, - 1625, 1629, 1628, 1630, 1631, 1632, 1643, 1633, 1637, 1627, - 1631, 1626, 1633, 1634, 1634, 1635, 1635, 0, 1636, 1637, + 1574, 1585, 1585, 1586, 1587, 1589, 1590, 1578, 1576, 1592, + 1592, 1591, 1593, 1587, 1589, 1579, 1582, 1591, 1595, 1594, + 1596, 1597, 1598, 1598, 1599, 1595, 1600, 1590, 1586, 1596, + 1602, 1603, 1604, 1593, 1594, 1602, 1605, 1603, 1606, 1607, + 1608, 1608, 1600, 1605, 1606, 1607, 1609, 1597, 1610, 1611, + 1599, 1609, 1604, 1612, 1613, 1614, 1615, 1610, 1614, 1616, + 1617, 1617, 1618, 1619, 1620, 1624, 1613, 1621, 1618, 1611, + 1623, 1621, 1612, 1625, 1615, 1627, 1628, 1631, 1631, 1620, + 1628, 1635, 1630, 1619, 1624, 1616, 1629, 1621, 1625, 1632, + 1623, 1630, 1629, 1632, 1627, 1633, 1634, 1634, 1636, 1637, - 1632, 1629, 1636, 1630, 1637, 1638, 1638, 1639, 1639, 1640, - 1641, 1642, 1643, 1644, 1640, 1640, 1641, 1642, 1644, 1645, - 1646, 1648, 1650, 1649, 1651, 1653, 1646, 1649, 1655, 1652, - 1654, 1645, 1657, 1648, 1650, 1652, 1654, 1658, 1659, 1661, - 1655, 1665, 1661, 1659, 1657, 1662, 1662, 1653, 1666, 1651, - 1663, 1663, 1664, 1664, 1666, 1668, 1658, 1667, 1669, 1670, - 1668, 1665, 1672, 1667, 1669, 1675, 1674, 1672, 1670, 1674, - 1676, 1676, 1678, 1679, 1680, 1681, 1681, 1675, 1682, 1680, - 1686, 1683, 1687, 1684, 1678, 1679, 1683, 1682, 1684, 1685, - 1685, 1687, 1688, 1689, 1690, 1693, 1691, 1692, 1690, 1696, + 1638, 1639, 1635, 1640, 1641, 1638, 1633, 1642, 1643, 0, + 1641, 1633, 1636, 1643, 1644, 1644, 1645, 1645, 1637, 1647, + 1646, 1639, 1642, 1640, 1646, 1648, 1648, 1649, 1649, 1653, + 1647, 1650, 1651, 1652, 1655, 1647, 1650, 1650, 1651, 1652, + 1654, 1656, 1658, 1661, 1659, 1654, 1655, 1656, 1659, 1660, + 1662, 1663, 1664, 1665, 1658, 1653, 1662, 1667, 1664, 1668, + 1671, 1660, 1669, 1671, 1675, 1665, 1676, 1669, 1661, 1667, + 1672, 1672, 1676, 1663, 1673, 1673, 1674, 1674, 1668, 1677, + 1680, 1678, 1679, 1685, 1675, 1677, 1678, 1682, 1679, 1680, + 1684, 1688, 1682, 1684, 1689, 1685, 1686, 1686, 1692, 1690, - 1686, 1691, 1697, 1692, 1695, 1695, 1698, 1698, 1700, 1693, - 1688, 1697, 1689, 1699, 1701, 1703, 1695, 1696, 1702, 1712, - 1700, 1709, 1699, 1702, 1706, 1706, 1708, 1710, 1703, 1708, - 1713, 1715, 1714, 1722, 1712, 1701, 1725, 1709, 1714, 1716, - 1716, 1718, 1718, 1710, 1713, 1717, 1719, 1717, 1715, 1721, - 1723, 1723, 1724, 1722, 1719, 1726, 1721, 1725, 1727, 1728, - 1729, 1724, 1730, 1731, 1733, 1736, 1734, 1726, 1737, 1731, - 1727, 1728, 1735, 1735, 1740, 1739, 1738, 1730, 1734, 1738, - 1739, 1744, 1731, 1736, 1733, 1742, 1729, 1743, 1737, 1743, - 1742, 1745, 1748, 1746, 1740, 1750, 1745, 1751, 1752, 1744, + 1691, 1691, 1696, 1688, 1690, 1693, 1689, 1692, 1694, 1697, + 1693, 1695, 1695, 1694, 1698, 1699, 1700, 1702, 1697, 1701, + 1700, 1703, 1696, 1702, 1701, 1705, 1705, 1706, 1710, 1707, + 1708, 1708, 1698, 1709, 1699, 1703, 1711, 1705, 1707, 1712, + 1710, 1713, 1709, 1719, 1712, 1706, 1716, 1716, 1718, 1720, + 1723, 1718, 1722, 1725, 1713, 1724, 1727, 1711, 1727, 1719, + 1732, 1724, 1726, 1726, 1723, 1720, 1729, 1722, 1728, 1728, + 1725, 1731, 1733, 1733, 1729, 1734, 1735, 1736, 1731, 1737, + 1732, 1738, 1739, 1740, 1734, 1746, 1741, 1743, 1744, 1736, + 1747, 1737, 1741, 1738, 1745, 1745, 1748, 1735, 1740, 1748, - 1746, 1748, 1753, 1754, 1753, 1756, 1751, 1756, 1759, 1757, - 1752, 1758, 1758, 1750, 1760, 1761, 1762, 1761, 1764, 1760, - 1763, 1762, 1754, 1757, 1765, 1763, 1766, 1768, 1767, 1769, - 1771, 1772, 1766, 1767, 1759, 1775, 1764, 1769, 1773, 1773, - 1768, 1774, 1774, 1776, 1765, 1772, 1777, 0, 1778, 1771, - 1775, 1780, 1777, 1778, 1779, 1788, 1779, 1781, 1781, 1780, - 1782, 1783, 1783, 1776, 1784, 1784, 1785, 1780, 1786, 1787, - 1791, 1787, 1782, 1789, 1790, 1785, 1788, 1786, 1789, 1789, - 1786, 1793, 1791, 1790, 1794, 1795, 1797, 1798, 1800, 1794, - 1795, 1799, 1799, 1793, 1801, 1802, 1803, 1806, 1804, 1797, + 1744, 1749, 1750, 1746, 1752, 1741, 1749, 1743, 1739, 1752, + 1747, 1753, 1754, 1753, 1755, 1758, 1756, 1760, 1761, 1755, + 1762, 1764, 1750, 1756, 1758, 1767, 1763, 1761, 1763, 1766, + 1754, 1766, 1762, 1768, 1768, 1760, 1769, 1770, 1774, 1767, + 1764, 1771, 1770, 1771, 1772, 1773, 1775, 1776, 1778, 1772, + 1773, 1779, 1777, 1776, 1781, 1782, 1774, 1777, 1786, 1779, + 1785, 1778, 1769, 1783, 1783, 1787, 1775, 1784, 1784, 1782, + 1792, 1787, 1788, 1781, 1789, 1785, 1789, 1788, 1786, 1790, + 1791, 1791, 1792, 1793, 1793, 1794, 1794, 1790, 1795, 1796, + 1797, 1798, 1797, 1800, 1799, 1790, 1801, 1795, 1796, 1799, - 1808, 1815, 1807, 1809, 1816, 1808, 1800, 1798, 1809, 1806, - 1803, 1802, 1801, 1804, 1807, 1812, 1814, 1817, 1818, 1816, - 1819, 1812, 1814, 1821, 1815, 1820, 1820, 1822, 1822, 1819, - 1823, 1825, 1821, 1824, 1812, 1817, 1825, 1824, 1826, 1827, - 1828, 1829, 1832, 1818, 1827, 1827, 1828, 1829, 1831, 1823, - 1830, 1826, 1837, 1830, 1835, 1835, 1831, 1836, 1836, 1838, - 1838, 1837, 1832, 1839, 1839, 1840, 1841, 1842, 1850, 1843, - 1844, 1844, 1836, 1842, 1843, 1845, 1845, 1840, 1849, 1853, - 1846, 1847, 1849, 1836, 1841, 1846, 1851, 1847, 1850, 1854, - 1851, 1855, 1856, 1857, 1854, 1858, 1859, 1861, 1857, 1860, + 1799, 1796, 1800, 1803, 1804, 1805, 1807, 1808, 1801, 1804, + 1805, 1809, 1798, 1810, 1810, 1803, 1811, 1812, 1814, 1807, + 1809, 1813, 1826, 1815, 1817, 1819, 1820, 1808, 1818, 1827, + 1819, 1820, 1814, 1823, 1811, 1812, 1817, 1813, 1815, 1823, + 1818, 1825, 1828, 1829, 1827, 1826, 1830, 1825, 1831, 1831, + 1832, 1834, 1823, 1833, 1833, 1830, 1837, 1835, 1836, 1832, + 1828, 1835, 1841, 1836, 1843, 1841, 1838, 1839, 1829, 1837, + 1834, 1838, 1838, 1839, 1840, 1842, 1846, 1846, 1847, 1847, + 1840, 1848, 1851, 1842, 1843, 1849, 1849, 1850, 1850, 1852, + 1848, 1853, 1860, 1847, 1851, 1854, 1860, 1853, 1855, 1855, - 1860, 1861, 1862, 1863, 1853, 1864, 1865, 1856, 1863, 1866, - 1867, 1868, 1859, 1858, 1855, 1867, 1869, 1862, 1865, 1870, - 1870, 1872, 1873, 1874, 1868, 1875, 1876, 1877, 1866, 1872, - 1878, 1864, 1879, 1880, 1869, 1883, 1883, 1882, 2149, 1886, - 1884, 1873, 1874, 1884, 1879, 1885, 1877, 1887, 1875, 2149, - 1876, 1878, 1882, 1886, 1880, 1888, 1888, 1891, 1885, 1894, - 1887, 1889, 1889, 1890, 1890, 1892, 1893, 1893, 1894, 1895, - 1895, 1894, 1891, 1899, 1896, 1898, 1900, 1901, 1892, 1896, - 1898, 1902, 1902, 1903, 1903, 1904, 1905, 1905, 1906, 1901, - 1907, 1907, 1908, 1899, 1909, 1912, 1900, 1910, 1910, 1909, + 1854, 1856, 1856, 1857, 1847, 1858, 1861, 1852, 1857, 1862, + 1864, 1858, 1865, 1862, 1866, 1867, 1868, 1865, 1869, 1871, + 1871, 1868, 1870, 1872, 1873, 1875, 1861, 1872, 1874, 1876, + 1867, 1877, 1886, 1874, 1879, 1864, 1869, 1866, 1870, 1873, + 1878, 1876, 1880, 1881, 1881, 1878, 1883, 1879, 1884, 1885, + 1877, 1875, 1887, 1888, 1883, 1886, 1889, 1890, 1891, 1893, + 1880, 1894, 1894, 1895, 1953, 1896, 1895, 1884, 1885, 1890, + 1897, 1953, 1888, 1898, 1893, 1902, 1887, 1889, 1896, 1891, + 1899, 1899, 1900, 1900, 1897, 1903, 1898, 1901, 1901, 1910, + 1902, 1904, 1904, 1905, 1906, 1906, 1907, 1911, 1903, 1909, - 1911, 1911, 1913, 1914, 1904, 1915, 1906, 1908, 1917, 1912, - 1919, 1913, 1921, 1917, 1918, 1918, 1922, 1914, 1920, 1920, - 1923, 1926, 1922, 1923, 1915, 1924, 1924, 1925, 1925, 1919, - 1921, 1927, 1928, 1929, 1929, 1931, 1932, 1933, 1934, 1936, - 1926, 1924, 1934, 1935, 1935, 1937, 1927, 1938, 1940, 1940, - 1941, 1928, 1933, 1943, 1942, 1931, 1944, 1946, 1936, 1932, - 1937, 1942, 1938, 1945, 1945, 1948, 1946, 1943, 1950, 1947, - 1941, 1947, 1951, 1952, 1953, 1954, 1955, 1951, 1952, 1956, - 1950, 1958, 1944, 1960, 1956, 1948, 1958, 1959, 1954, 1961, - 1962, 1964, 1959, 1965, 1963, 1961, 1964, 1955, 1960, 1953, + 1912, 1907, 1905, 1915, 1909, 1905, 1913, 1913, 1917, 1910, + 1914, 1914, 1912, 1916, 1916, 1918, 1918, 1911, 1919, 1920, + 1921, 1921, 1915, 1923, 1920, 1924, 1917, 1922, 1922, 1925, + 1926, 1928, 1930, 1919, 1924, 1932, 1928, 1923, 1929, 1929, + 1931, 1931, 1933, 1925, 1934, 1935, 1935, 1934, 1933, 1926, + 1937, 1930, 1938, 1932, 1936, 1936, 1939, 1940, 1940, 1942, + 1943, 1935, 1944, 1947, 1945, 1946, 1946, 1938, 1945, 1937, + 1948, 1949, 1951, 1951, 1952, 1939, 1954, 1944, 1955, 1942, + 1956, 1956, 1947, 1943, 1957, 1948, 1949, 1958, 1959, 1958, + 1954, 1961, 1962, 1957, 1952, 1963, 1964, 1962, 1965, 1966, - 1963, 1966, 1972, 1967, 1968, 1971, 1969, 1970, 1972, 1976, - 0, 1962, 1967, 1968, 1966, 1969, 1970, 1973, 1965, 1971, - 1974, 1978, 1980, 1973, 1974, 1979, 1979, 1982, 1980, 1976, - 1978, 1981, 1981, 1987, 1984, 1985, 1986, 1986, 1991, 2116, - 1981, 1990, 1992, 1988, 1993, 1997, 2116, 1982, 1987, 1982, - 1984, 1985, 1988, 1990, 1991, 1995, 1993, 1992, 1995, 1996, - 1998, 1999, 1999, 0, 1996, 1997, 2000, 2000, 2002, 2002, - 2003, 2004, 1998, 2003, 2005, 2006, 2004, 2007, 2007, 2008, - 2005, 2006, 2009, 2009, 2010, 2011, 2012, 2013, 2013, 2016, - 2015, 2020, 2016, 2008, 2015, 2018, 2010, 2017, 2017, 2011, + 1963, 1967, 1968, 1961, 1955, 1970, 1967, 1971, 1959, 1972, + 1970, 1965, 1971, 1973, 1974, 1977, 1975, 1978, 1976, 1973, + 1966, 1964, 1975, 1976, 1972, 1979, 0, 1980, 1968, 1981, + 1978, 1983, 1982, 1984, 1979, 1974, 1980, 1985, 1981, 1984, + 1977, 1982, 1986, 1985, 1988, 1983, 1986, 1990, 1991, 1991, + 1994, 1992, 1993, 1993, 1999, 1996, 1990, 1992, 1997, 1998, + 1998, 1993, 2003, 2009, 1988, 2002, 2000, 2004, 2005, 1999, + 1994, 1996, 1994, 2007, 1997, 2000, 2007, 2002, 2003, 2008, + 2005, 2010, 2004, 2009, 2008, 2011, 2011, 2012, 2012, 2014, + 2014, 2015, 2016, 2010, 2015, 2017, 2018, 2016, 2019, 2019, - 2018, 2019, 2021, 2022, 2022, 2012, 2021, 2023, 2025, 2026, - 2019, 2020, 2027, 2025, 2028, 2029, 2030, 2031, 2032, 2029, - 2023, 2033, 2031, 2034, 2032, 2037, 2036, 2033, 2028, 2026, - 2037, 2038, 2027, 2043, 2046, 2039, 2030, 2038, 2040, 2058, - 2040, 2034, 2036, 2039, 2044, 2044, 2045, 2043, 2049, 2045, - 2047, 2047, 2049, 2050, 2051, 2052, 2052, 2058, 2053, 2050, - 2046, 2056, 2056, 2060, 2061, 2064, 2051, 2053, 2065, 2066, - 2064, 2067, 2068, 2068, 2066, 2072, 2067, 2060, 2070, 2070, - 2061, 2072, 2073, 2073, 2074, 2075, 2076, 2078, 2082, 2079, - 2083, 2076, 2080, 2080, 2065, 2084, 2083, 2082, 2088, 2085, + 2020, 2017, 2018, 2021, 2021, 2022, 2023, 2024, 2025, 2025, + 2028, 2027, 2032, 2028, 2020, 2027, 2030, 2022, 2029, 2029, + 2023, 2030, 2031, 2033, 2034, 2034, 2024, 2033, 2035, 2037, + 2038, 2031, 2032, 2039, 2037, 2040, 2041, 2042, 2043, 2044, + 2041, 2035, 2045, 2043, 2046, 2044, 2049, 2048, 2045, 2040, + 2038, 2049, 2050, 2039, 2055, 2058, 2051, 2042, 2050, 2052, + 2070, 2052, 2046, 2048, 2051, 2056, 2056, 2057, 2055, 2061, + 2057, 2059, 2059, 2061, 2062, 2063, 2064, 2064, 2070, 2065, + 2062, 2058, 2068, 2068, 2072, 2073, 2076, 2063, 2065, 2077, + 2078, 2076, 2079, 2080, 2080, 2078, 2084, 2079, 2072, 2082, - 2074, 2079, 2087, 2087, 2089, 2096, 2078, 2075, 2091, 2091, - 2092, 2092, 2097, 2084, 2085, 2093, 2094, 2088, 2098, 2096, - 2093, 2094, 2089, 2095, 2099, 2095, 2097, 2100, 2100, 2099, - 2101, 2101, 2102, 2102, 2103, 2103, 2104, 2105, 2098, 2106, - 2106, 2107, 2107, 2110, 2108, 2109, 2111, 2115, 2104, 2112, - 2112, 2113, 2113, 2114, 2114, 2105, 2108, 2109, 2117, 2115, - 2118, 2119, 2111, 2110, 2120, 2121, 2119, 2122, 2122, 2123, - 2117, 2124, 2125, 2126, 2127, 2128, 2129, 2129, 2123, 2130, - 2118, 2131, 2134, 2135, 2120, 2121, 2126, 2132, 2130, 2128, - 2136, 2137, 2125, 2138, 2137, 0, 2131, 2124, 2127, 2139, + 2082, 2073, 2084, 2085, 2085, 2086, 2087, 2088, 2090, 2094, + 2091, 2095, 2088, 2092, 2092, 2077, 2096, 2095, 2094, 2100, + 2097, 2086, 2091, 2099, 2099, 2101, 2108, 2090, 2087, 2103, + 2103, 2104, 2104, 2109, 2096, 2097, 2105, 2106, 2100, 2110, + 2108, 2105, 2106, 2101, 2107, 2111, 2107, 2109, 2112, 2112, + 2111, 2113, 2113, 2114, 2114, 2115, 2115, 2116, 2117, 2110, + 2118, 2119, 2119, 2120, 2120, 2118, 2121, 2122, 2123, 2116, + 2124, 2125, 2125, 2126, 2126, 2128, 2117, 2129, 2121, 2122, + 2127, 2127, 2130, 2131, 2129, 2132, 2124, 2128, 2123, 2133, + 2132, 2134, 2135, 2135, 2130, 2136, 2137, 2138, 2143, 2139, - 2134, 2140, 2132, 2148, 2139, 2135, 2140, 2138, 2141, 2141, - 2142, 2142, 2150, 2136, 2143, 2143, 2145, 2145, 2147, 2147, - 2152, 2148, 2154, 2153, 2156, 2155, 2157, 2159, 2159, 2158, - 2162, 2150, 0, 2156, 2161, 2161, 2164, 2164, 2168, 2163, - 2152, 2153, 2166, 2169, 2154, 2155, 2157, 2158, 2163, 2167, - 2167, 2166, 2162, 2170, 2171, 2172, 2168, 2173, 2174, 2175, - 2170, 2169, 2176, 2176, 2177, 2177, 2178, 2179, 2180, 2171, - 2181, 2182, 2178, 2172, 2174, 2173, 2182, 2183, 2175, 2184, - 2186, 2185, 2186, 2180, 2191, 2179, 2185, 2187, 2187, 2181, - 2188, 2193, 2188, 2189, 2189, 2194, 2195, 2183, 2196, 2184, + 2140, 2141, 2147, 2131, 2136, 2142, 2142, 2143, 2144, 2133, + 2145, 2134, 2139, 2148, 2149, 2141, 2150, 2138, 2151, 2150, + 2147, 2152, 2137, 2144, 2140, 2145, 2152, 2163, 2153, 2154, + 2154, 2161, 2151, 2153, 2165, 2148, 2162, 2149, 2155, 2155, + 2156, 2156, 2158, 2158, 2160, 2160, 2163, 2162, 2166, 2161, + 2167, 2168, 2169, 2170, 2165, 2175, 2171, 2172, 2172, 2174, + 2174, 2169, 2177, 2177, 2180, 2180, 2166, 2176, 2181, 2179, + 2182, 2168, 2167, 2170, 2171, 2183, 2176, 2175, 2179, 2184, + 2185, 2186, 2183, 2188, 2187, 2192, 2181, 2191, 2182, 2189, + 2189, 2190, 2190, 2191, 2184, 2193, 2194, 2196, 2185, 2186, - 2193, 2197, 2198, 2191, 2199, 2202, 2197, 2203, 2195, 2205, - 2203, 2204, 2204, 2206, 2194, 2207, 2207, 2208, 2196, 2210, - 2213, 2208, 2198, 2199, 2205, 2202, 2211, 2212, 2212, 2215, - 2211, 2206, 2216, 2213, 2210, 2217, 2217, 2221, 2219, 2220, - 2220, 2222, 2222, 2223, 2231, 2224, 2225, 2225, 2223, 2215, - 2219, 2232, 2216, 2230, 2230, 2233, 2221, 2224, 2234, 2237, - 2235, 2236, 2236, 2242, 2232, 2241, 2231, 2234, 2233, 2235, - 2241, 2243, 2244, 2245, 2237, 2246, 2243, 2242, 2247, 2249, - 2244, 2252, 2250, 2251, 2246, 2257, 2247, 2250, 2251, 2253, - 2253, 2258, 2245, 2255, 2249, 2259, 2252, 2254, 2254, 2256, + 2187, 2195, 2188, 2192, 2197, 2209, 2195, 2198, 2204, 2199, + 2193, 2199, 2198, 2200, 2200, 2194, 2201, 2196, 2201, 2202, + 2202, 2206, 2207, 2208, 2197, 2209, 2210, 2204, 2211, 2215, + 2206, 2210, 2212, 2216, 2219, 2208, 2216, 2217, 2217, 2218, + 2221, 2207, 2220, 2220, 2221, 2223, 2224, 2228, 2211, 2215, + 2224, 2212, 2219, 2226, 2218, 2225, 2225, 2229, 2230, 2230, + 2223, 2232, 2233, 2233, 2234, 2236, 2226, 2228, 2235, 2235, + 2236, 2244, 2237, 2232, 2238, 2238, 2246, 2229, 2243, 2243, + 2245, 2245, 2247, 2234, 2237, 2248, 2251, 2249, 2256, 2246, + 2250, 2250, 2255, 2244, 2248, 2247, 2249, 2255, 2257, 2258, - 2255, 2259, 2260, 2257, 2256, 2261, 2261, 2260, 2262, 2258, - 2263, 2264, 2264, 2265, 2265, 2263, 2268, 2269, 2269, 2270, - 2271, 0, 2270, 2262, 2274, 2271, 2271, 2272, 2273, 2268, - 2274, 2275, 2272, 2273, 2276, 2275, 2277, 2278, 2279, 2276, - 2290, 2281, 2280, 2283, 2286, 2277, 2279, 2280, 2283, 2298, - 2288, 2284, 2278, 2281, 2284, 2288, 2286, 2289, 2290, 2291, - 2292, 2293, 2289, 2294, 2294, 2295, 2299, 2304, 2298, 2292, - 2293, 2300, 2291, 2302, 2295, 2301, 2301, 2306, 2303, 2305, - 2305, 2310, 2304, 2308, 2311, 2313, 2299, 2303, 2311, 2314, - 2300, 2315, 2302, 2312, 2312, 2314, 2306, 2315, 2308, 2316, + 2259, 2251, 2256, 2257, 2260, 2263, 2261, 2258, 2266, 2271, + 2264, 2265, 0, 2260, 2261, 2264, 2265, 2267, 2267, 2259, + 2263, 2268, 2268, 2266, 2269, 2270, 2272, 2271, 2273, 2524, + 2270, 2269, 2274, 2276, 2273, 2275, 2275, 2274, 2277, 2278, + 2278, 2279, 2279, 2277, 2272, 2282, 2283, 2283, 2276, 2284, + 2285, 2524, 2284, 0, 2286, 2285, 2285, 2287, 2282, 2286, + 2288, 2289, 2287, 2290, 2291, 2289, 2288, 2292, 2290, 2293, + 2294, 2295, 2300, 2291, 2297, 2294, 2304, 2293, 2298, 2297, + 2302, 2298, 2292, 2295, 2300, 2302, 2303, 2305, 2306, 2307, + 2309, 2303, 2308, 2308, 2304, 2312, 2313, 2306, 2307, 2309, - 2318, 2310, 2317, 2317, 2319, 2316, 2321, 2322, 2318, 2319, - 2313, 2325, 2324, 2326, 2336, 2321, 2324, 2328, 2328, 2339, - 2322, 2329, 2329, 2330, 2330, 2325, 2332, 2332, 2326, 2334, - 2334, 2337, 2340, 2340, 2336, 2343, 2337, 2337, 2343, 2339, - 2341, 2341, 2342, 2342, 2344, 2346, 2347, 2347, 2348, 2348, - 2349, 2349, 2350, 2351, 2351, 2352, 2353, 2344, 2354, 2355, - 2356, 2356, 2357, 2346, 2360, 2355, 2357, 2350, 2352, 2360, - 2360, 2361, 2354, 2362, 2353, 2363, 2364, 2365, 2366, 2376, - 2367, 2373, 2364, 2365, 2367, 2368, 2368, 2371, 2374, 2373, - 2378, 2374, 2371, 2362, 2361, 2363, 2377, 2379, 2380, 2377, + 2305, 2314, 2315, 2315, 2316, 2320, 2317, 2318, 2319, 2319, + 2322, 2324, 2327, 2325, 2312, 2317, 2313, 2325, 2326, 2326, + 2314, 2328, 2318, 2316, 2320, 2322, 2329, 2328, 2330, 2331, + 2331, 2324, 2329, 2332, 2330, 2333, 2335, 2327, 2336, 2338, + 2333, 2332, 2339, 2338, 2340, 2335, 2342, 2342, 2343, 2343, + 2350, 2336, 2344, 2344, 2346, 2346, 2339, 2348, 2348, 2340, + 2351, 2353, 2354, 2354, 2359, 2351, 2351, 2356, 2356, 2361, + 2350, 2357, 2357, 2358, 2362, 2362, 2358, 2359, 2363, 2363, + 2365, 2353, 2364, 2364, 2366, 2366, 2367, 2361, 2368, 2369, + 2370, 2371, 2371, 2372, 2376, 2365, 2370, 2372, 2377, 2367, - 2381, 2382, 2379, 2366, 2376, 2383, 2383, 2378, 2378, 2384, - 2385, 2387, 2388, 2388, 2396, 2382, 2380, 2386, 2385, 2393, - 2381, 0, 2386, 2386, 2389, 2389, 2390, 2390, 2384, 2395, - 2387, 2391, 2391, 2392, 2392, 2393, 2394, 2397, 2398, 2399, - 2396, 2394, 2401, 2401, 2402, 2403, 2397, 2402, 2406, 2395, - 2405, 2405, 2407, 2407, 2415, 2406, 2408, 2411, 2398, 2399, - 2412, 2408, 2413, 2403, 2410, 2410, 2411, 2416, 2416, 2412, - 2417, 2413, 2415, 2418, 2417, 2419, 2421, 2422, 2420, 2427, - 2427, 2428, 2418, 2420, 2420, 2430, 2422, 2434, 2431, 2421, - 2419, 2436, 2435, 2438, 2430, 2440, 2455, 2442, 2443, 2428, + 2378, 2381, 2375, 2369, 2379, 2380, 2368, 2375, 2375, 2382, + 2379, 2380, 2391, 2382, 2383, 2383, 2386, 2376, 2377, 2388, + 2378, 2386, 2389, 2393, 2394, 2389, 2381, 2388, 2392, 2394, + 2395, 2392, 2396, 2397, 2398, 2398, 2399, 2391, 2400, 2401, + 2393, 2393, 2402, 2411, 2401, 2401, 2400, 2397, 2395, 2403, + 2403, 2408, 2396, 2404, 2404, 2399, 2405, 2405, 2406, 2406, + 2409, 2402, 2407, 2407, 2410, 2409, 2412, 2408, 2413, 2411, + 2414, 2416, 2416, 2417, 2418, 2412, 2417, 2420, 2420, 2421, + 2422, 2422, 2423, 2430, 2410, 0, 2421, 2423, 2413, 2426, + 2414, 2427, 2418, 2425, 2425, 2428, 2431, 2431, 2426, 2432, - 2431, 2435, 2442, 2443, 2445, 2438, 2444, 2444, 2454, 2447, - 0, 2436, 2434, 2445, 2447, 2455, 2440, 2448, 2448, 2450, - 2450, 2448, 2451, 2451, 2452, 2452, 2453, 2456, 2454, 2459, - 2458, 2462, 2456, 2460, 2459, 2453, 2458, 2463, 2460, 2461, - 2461, 2464, 2465, 2467, 2466, 2470, 2464, 2468, 2468, 2462, - 2466, 2471, 2472, 2474, 2474, 2478, 2476, 2477, 2463, 2478, - 2465, 2480, 2479, 2481, 2470, 2482, 2471, 2484, 2467, 2476, - 2477, 2479, 2472, 2482, 2483, 2485, 2485, 2480, 2486, 2483, - 2488, 2488, 2481, 2489, 2489, 2491, 2493, 2493, 2495, 2496, - 2498, 2497, 2501, 2484, 2502, 2498, 2503, 2486, 2500, 2500, + 2427, 2430, 2433, 2432, 2428, 2434, 2436, 2435, 2437, 2442, + 2442, 2433, 2435, 2435, 2443, 2445, 2446, 2437, 2449, 2436, + 2434, 2450, 2451, 2453, 2445, 2455, 2457, 2473, 2446, 2458, + 2450, 2457, 2443, 2473, 2458, 2453, 2459, 2459, 2460, 2462, + 2465, 2465, 2451, 2449, 2462, 2469, 2455, 2460, 2463, 2463, + 2466, 2466, 2463, 2467, 2467, 2468, 2470, 2471, 2474, 2476, + 2476, 2475, 2471, 2474, 2468, 2469, 2475, 2477, 2478, 2479, + 2480, 2481, 2482, 2485, 2479, 2470, 2486, 2481, 2483, 2483, + 2487, 2489, 2489, 2491, 2494, 2477, 2492, 2495, 2480, 2478, + 2493, 2486, 2485, 2494, 2493, 2496, 2491, 2482, 2497, 2492, - 2505, 2505, 2506, 2508, 2495, 2496, 2491, 2497, 2508, 2509, - 2510, 2510, 2501, 2511, 2511, 2503, 2506, 2502, 2512, 2513, - 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2520, 2516, - 2514, 2509, 2521, 2522, 2522, 2521, 2526, 2518, 2512, 2513, - 2527, 2528, 2515, 2517, 2529, 2529, 2519, 2528, 2526, 2530, - 2531, 2532, 2530, 2534, 2535, 2536, 2531, 2537, 2534, 2535, - 2527, 2538, 2542, 2537, 2539, 2539, 2541, 2541, 2543, 2532, - 2545, 2545, 2546, 2546, 2536, 2547, 2548, 2543, 2538, 2538, - 2547, 2542, 2549, 2550, 2550, 2551, 2551, 2549, 2552, 2552, - 2548, 2553, 2555, 2555, 2558, 2560, 2553, 2561, 2562, 2563, + 2487, 2499, 2498, 2495, 2500, 2500, 2497, 2498, 2506, 2501, + 2503, 2503, 2504, 2504, 2496, 2508, 2508, 2510, 2511, 2512, + 2513, 2515, 2515, 2516, 2517, 2513, 2518, 2499, 2501, 2506, + 2520, 2520, 2521, 2510, 2511, 2512, 2523, 2525, 2525, 2526, + 2526, 2523, 2527, 2516, 2529, 2518, 2521, 2517, 2528, 2528, + 2530, 2531, 2532, 2529, 2533, 2534, 2542, 2531, 2535, 2535, + 2536, 2541, 2527, 2536, 2537, 2537, 2533, 2547, 2528, 0, + 2530, 2532, 2543, 2541, 2545, 2534, 2542, 2545, 2543, 2544, + 2544, 2546, 2551, 2549, 2550, 2547, 2552, 2546, 2549, 2550, + 2553, 2557, 2552, 2554, 2554, 2556, 2556, 2558, 2560, 2560, - 2563, 2565, 2565, 2567, 2566, 2568, 2569, 2569, 2570, 0, - 2571, 2574, 2574, 2558, 2568, 2571, 2577, 2560, 2566, 2561, - 2562, 2576, 2576, 2567, 2579, 2578, 2580, 2570, 2581, 2581, - 2577, 2578, 2582, 2584, 2580, 2585, 2579, 2582, 2586, 2587, - 2588, 2590, 2591, 2586, 2592, 2593, 2588, 2595, 2594, 2590, - 2596, 2587, 2597, 2584, 2598, 2585, 2601, 2602, 2607, 2598, - 2629, 2591, 2607, 2595, 2592, 2593, 2594, 2596, 2596, 2629, - 2602, 2605, 2605, 2597, 2606, 2606, 2601, 2611, 2611, 2613, - 2613, 2614, 2614, 2617, 2614, 2615, 2615, 2617, 2615, 2616, - 2616, 2620, 2616, 2619, 2619, 2623, 2621, 2624, 2624, 2627, + 2562, 2551, 2561, 2561, 2563, 2562, 2558, 2553, 2553, 2564, + 2557, 2565, 2565, 2573, 2564, 2566, 2566, 2568, 2563, 2567, + 2567, 2575, 2568, 2570, 2570, 2576, 2577, 2578, 2578, 2580, + 2580, 2581, 2573, 2582, 2586, 2583, 2584, 2584, 2585, 2586, + 2589, 2589, 2592, 2575, 2583, 2581, 2593, 2576, 2577, 2591, + 2591, 2594, 2593, 2582, 2595, 2597, 2592, 2585, 2596, 2596, + 2597, 2599, 2595, 2594, 2600, 2601, 2602, 2603, 2605, 2606, + 2601, 2607, 2608, 2603, 2610, 2609, 2605, 2611, 2602, 2612, + 2613, 2599, 2616, 2617, 2600, 2613, 2620, 2620, 2606, 2685, + 2610, 2607, 2608, 2609, 2611, 2611, 2617, 2621, 2621, 2622, - 2623, 2628, 2630, 2632, 2633, 2628, 2627, 2634, 2634, 2620, - 2621, 2635, 2635, 2633, 2636, 2636, 2637, 2630, 2638, 2640, - 2639, 2632, 2641, 2638, 2640, 2640, 2642, 2643, 2641, 2639, - 2645, 2637, 2639, 2644, 2646, 2645, 2647, 2648, 2648, 2646, - 2649, 2663, 2643, 2652, 2652, 2649, 2655, 2655, 2656, 2656, - 2663, 2642, 2657, 2657, 2644, 2647, 2658, 2658, 2659, 2659, - 2660, 2660, 2661, 2661, 2664, 2664, 2665, 2667, 2667, 2668, - 2669, 2671, 2671, 2670, 2672, 2673, 2673, 2676, 2677, 2678, - 2680, 2677, 2684, 2669, 2668, 2670, 2665, 2679, 2679, 2672, - 2682, 2683, 2686, 2682, 2685, 2676, 2684, 2683, 2680, 2685, + 2612, 2685, 2616, 2622, 2626, 2626, 2628, 2628, 2629, 2629, + 2632, 2629, 2630, 2630, 2632, 2630, 2631, 2631, 2635, 2631, + 2634, 2634, 2638, 2636, 2639, 2639, 2642, 2638, 2643, 2644, + 2645, 2647, 2643, 2642, 2648, 2652, 2635, 2636, 2644, 2649, + 2649, 2650, 2650, 2648, 2657, 2645, 2651, 2651, 2653, 2647, + 2652, 2654, 2655, 2653, 2659, 2656, 2658, 2655, 2655, 2660, + 2654, 2656, 2661, 2654, 2660, 2662, 2720, 2661, 0, 2657, + 2720, 2658, 2663, 2663, 2664, 2659, 2667, 2667, 2680, 2664, + 2670, 2670, 2671, 2671, 2662, 2672, 2672, 2673, 2673, 2674, + 2674, 2675, 2675, 2676, 2676, 2678, 2679, 2679, 2680, 2682, - 2687, 2688, 2703, 2699, 2690, 2678, 2699, 2701, 2701, 2705, - 2706, 2686, 2704, 2705, 2707, 2709, 2710, 2688, 2687, 2690, - 2712, 2704, 2712, 2715, 2711, 2703, 2713, 2710, 2707, 2711, - 2706, 2714, 2714, 2716, 2718, 2717, 2715, 2719, 2709, 2720, - 2721, 2713, 2724, 2722, 2725, 2726, 2726, 2820, 2727, 2820, - 2718, 2733, 2716, 2717, 2720, 2732, 2724, 2727, 2728, 2728, - 2737, 2721, 2719, 2722, 2725, 2729, 2729, 2730, 2730, 2731, - 2731, 2733, 2734, 2735, 2732, 2734, 2736, 2738, 2735, 2740, - 2739, 2736, 2741, 2742, 2742, 2737, 2739, 2743, 2744, 2744, - 2746, 2748, 2738, 2740, 2751, 2751, 2752, 2752, 2754, 2753, + 2682, 2683, 2684, 2687, 2678, 2686, 2686, 2688, 2688, 2691, + 2692, 2693, 2695, 2692, 2697, 2684, 2683, 2697, 2687, 2694, + 2694, 2699, 2698, 2701, 2700, 2702, 2705, 2691, 2698, 2700, + 2695, 2703, 2718, 2714, 2721, 2699, 2714, 2693, 2716, 2716, + 2719, 2705, 2701, 2702, 2722, 2724, 2725, 2703, 2726, 2719, + 2727, 2728, 2727, 2726, 2721, 2718, 2730, 2725, 2722, 2729, + 2729, 2731, 2733, 2732, 2734, 2736, 2728, 2735, 2724, 2730, + 2737, 2739, 2740, 2741, 2741, 2742, 2743, 2743, 2733, 2747, + 2731, 2732, 2735, 2748, 2742, 2739, 2736, 2744, 2744, 2734, + 2737, 2752, 2740, 2745, 2745, 2746, 2746, 2749, 2747, 2750, - 2758, 2757, 2741, 2759, 2755, 2746, 2743, 2753, 2756, 2748, - 2755, 2760, 2760, 2758, 2756, 2757, 2762, 2754, 2764, 2765, - 2767, 2768, 2759, 2765, 2769, 2770, 2768, 2772, 2771, 2773, - 2774, 2776, 2764, 2777, 2773, 2774, 2762, 2779, 2770, 2785, - 2767, 2771, 2779, 2769, 2778, 2778, 2772, 2780, 0, 2776, - 2781, 2781, 2777, 2780, 2782, 2783, 2784, 2786, 2785, 2782, - 2783, 2784, 2787, 2786, 2788, 2788, 2790, 2787, 2791, 2792, - 2790, 2793, 2794, 2795, 2796, 2797, 2792, 2798, 2798, 2795, - 2800, 2800, 2803, 2801, 2802, 2804, 2805, 2791, 2797, 2802, - 2793, 2794, 2801, 2796, 2808, 2801, 2806, 2806, 2807, 2805, + 2749, 2751, 2753, 2748, 2750, 2754, 2751, 2755, 2756, 2757, + 2757, 2754, 2758, 2759, 2759, 2761, 2752, 2753, 2763, 2766, + 2766, 2755, 2767, 2767, 2768, 2769, 2772, 2770, 2756, 2771, + 2761, 2758, 2768, 2770, 2773, 2771, 2763, 2774, 2775, 2775, + 2772, 2777, 2780, 2779, 2769, 2782, 2780, 2773, 2783, 2784, + 2785, 2786, 2787, 2783, 2788, 2789, 2774, 2779, 2791, 2788, + 2789, 2777, 2792, 2785, 2786, 2782, 2793, 2793, 2784, 2794, + 2797, 2787, 2795, 2800, 2794, 2797, 2791, 2798, 2795, 2796, + 2796, 2792, 2798, 2799, 2801, 2805, 2802, 2806, 2799, 2805, + 2801, 2802, 2800, 2803, 2803, 2807, 2808, 2809, 2810, 2811, - 2810, 2803, 2812, 2807, 2804, 2811, 2811, 2808, 2813, 2813, - 2814, 2814, 2815, 2816, 2817, 2818, 2818, 2815, 2819, 2824, - 2816, 2812, 2822, 2819, 2821, 2821, 2810, 2823, 2826, 2822, - 2825, 2828, 2828, 2817, 2823, 2825, 2829, 2831, 2824, 2832, - 2833, 2834, 2831, 2838, 2832, 2835, 2835, 2826, 2837, 2837, - 2839, 2840, 2840, 2841, 2841, 2829, 2842, 2844, 2844, 2833, - 2834, 2846, 2838, 2842, 2845, 2845, 2848, 2851, 2846, 2839, - 2852, 2848, 2851, 2853, 2854, 2854, 2855, 2855, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2852, - 0, 0, 2853, 2859, 2859, 2859, 2859, 2859, 2859, 2859, + 2812, 2818, 2807, 2819, 2810, 2816, 2806, 2813, 2813, 2815, + 2815, 2825, 2820, 2812, 2816, 2808, 2809, 2816, 2811, 2817, + 2818, 2823, 2819, 2822, 2817, 2820, 2821, 2821, 2822, 2826, + 2826, 2827, 2828, 2828, 2823, 2829, 2829, 2825, 2830, 2831, + 2832, 2833, 2833, 2830, 2834, 2835, 2831, 2835, 2837, 2834, + 2827, 2836, 2836, 2838, 2839, 2837, 2840, 2841, 2844, 2832, + 2838, 2840, 2843, 2843, 2846, 2847, 2848, 2849, 2853, 2846, + 2847, 2850, 2850, 2839, 2852, 2852, 2841, 2844, 2854, 2855, + 2855, 2856, 2856, 2857, 2867, 2848, 2849, 2853, 2859, 2859, + 2857, 2860, 2860, 2861, 2863, 2868, 2866, 2854, 0, 2863, - 2860, 2860, 2860, 2860, 2860, 2860, 2860, 2861, 2861, 2861, - 2861, 2861, 2861, 2861, 2862, 2862, 2862, 2862, 2862, 2862, - 2862, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2865, 2865, - 0, 2865, 2865, 2865, 2865, 2866, 2866, 0, 0, 0, - 2866, 2866, 2867, 2867, 0, 0, 2867, 0, 2867, 2868, - 0, 0, 0, 0, 0, 2868, 2869, 2869, 0, 0, - 0, 2869, 2869, 2870, 0, 0, 0, 0, 0, 2870, - 2871, 2871, 0, 2871, 2871, 2871, 2871, 2872, 2872, 0, - 2872, 2872, 2872, 2872, 2858, 2858, 2858, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, + 2861, 2866, 0, 2867, 2869, 2869, 2870, 2870, 0, 0, + 0, 0, 0, 0, 2868, 2874, 2874, 2874, 2874, 2874, + 2874, 2874, 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2876, + 2876, 2876, 2876, 2876, 2876, 2876, 2877, 2877, 2877, 2877, + 2877, 2877, 2877, 2878, 2878, 2878, 2878, 2878, 2878, 2878, + 2880, 2880, 0, 2880, 2880, 2880, 2880, 2881, 2881, 0, + 0, 0, 2881, 2881, 2882, 2882, 0, 0, 2882, 0, + 2882, 2883, 0, 0, 0, 0, 0, 2883, 2884, 2884, + 0, 0, 0, 2884, 2884, 2885, 0, 0, 0, 0, + 0, 2885, 2886, 2886, 0, 2886, 2886, 2886, 2886, 2887, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858 + 2887, 0, 2887, 2887, 2887, 2887, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, + 2873, 2873, 2873, 2873, 2873, 2873, 2873 } ; static yy_state_type yy_last_accepting_state; @@ -2822,7 +2830,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2824 "" +#line 2832 "" #define INITIAL 0 #define quotedstring 1 @@ -3045,7 +3053,7 @@ YY_DECL { #line 205 "./util/configlexer.lex" -#line 3047 "" +#line 3055 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3078,13 +3086,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 >= 2859 ) + if ( yy_current_state >= 2874 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5585 ); + while ( yy_base[yy_current_state] != 5607 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3394,212 +3402,212 @@ YY_RULE_SETUP case 57: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 58: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 59: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 60: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 61: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 62: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 63: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 64: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 65: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 66: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 67: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 68: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 69: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 70: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 71: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 72: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 73: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 74: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 75: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 76: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 77: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 78: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 79: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 80: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 81: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 82: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 83: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 84: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 85: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 86: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 87: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 88: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 89: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 90: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 91: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 92: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 93: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 94: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 95: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 96: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 97: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 98: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 99: YY_RULE_SETUP @@ -3609,32 +3617,32 @@ YY_RULE_SETUP case 100: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 101: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 102: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 103: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 104: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 105: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 106: YY_RULE_SETUP @@ -3644,659 +3652,659 @@ YY_RULE_SETUP case 107: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 108: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 109: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 110: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 111: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 112: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 113: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 114: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 115: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 116: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 117: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 118: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 119: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 120: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 121: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 122: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 123: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 124: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 125: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 126: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 127: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 128: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 129: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 130: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 131: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 132: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 133: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 134: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 135: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 136: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 137: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 138: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 139: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 140: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 141: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 142: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 143: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 144: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 145: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 146: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 147: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 148: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 149: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 150: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 151: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 152: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 153: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 154: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 155: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 156: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 157: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 158: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 159: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 160: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 161: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 162: YY_RULE_SETUP -#line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 370 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 163: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 164: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 165: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 166: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 167: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 168: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 169: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 170: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 171: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 172: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 173: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 174: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 175: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 176: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 177: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 178: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 179: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 180: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 181: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 182: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 183: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 184: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 185: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 186: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 187: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 188: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 189: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 190: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 191: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 192: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 193: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 194: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 195: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 196: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 197: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 198: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 199: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 200: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 201: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 202: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 203: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 204: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 205: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 206: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 207: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 208: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 209: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 210: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 211: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 212: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 213: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 214: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 215: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 216: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 217: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 218: YY_RULE_SETUP -#line 428 "./util/configlexer.lex" +#line 427 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 219: YY_RULE_SETUP -#line 430 "./util/configlexer.lex" +#line 429 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 220: YY_RULE_SETUP -#line 432 "./util/configlexer.lex" +#line 431 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 221: YY_RULE_SETUP -#line 434 "./util/configlexer.lex" +#line 433 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 222: YY_RULE_SETUP -#line 436 "./util/configlexer.lex" +#line 435 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 223: YY_RULE_SETUP -#line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 437 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 237: YY_RULE_SETUP @@ -4311,180 +4319,185 @@ YY_RULE_SETUP case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 250: YY_RULE_SETUP -#line 466 "./util/configlexer.lex" +#line 465 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 251: YY_RULE_SETUP -#line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 467 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 252: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 253: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 254: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 255: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 256: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 257: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 258: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 259: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 260: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 267: -/* rule 267 can match eol */ YY_RULE_SETUP #line 484 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 268: +/* rule 268 can match eol */ +YY_RULE_SETUP +#line 485 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 268: +case 269: YY_RULE_SETUP -#line 487 "./util/configlexer.lex" +#line 488 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 488 "./util/configlexer.lex" +#line 489 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 269: -YY_RULE_SETUP -#line 493 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 270: -/* rule 270 can match eol */ YY_RULE_SETUP #line 494 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 271: +/* rule 271 can match eol */ +YY_RULE_SETUP +#line 495 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 271: +case 272: YY_RULE_SETUP -#line 496 "./util/configlexer.lex" +#line 497 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4497,34 +4510,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 272: +case 273: YY_RULE_SETUP -#line 508 "./util/configlexer.lex" +#line 509 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 509 "./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 273: -YY_RULE_SETUP -#line 514 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 274: -/* rule 274 can match eol */ YY_RULE_SETUP #line 515 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 275: +/* rule 275 can match eol */ +YY_RULE_SETUP +#line 516 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 275: +case 276: YY_RULE_SETUP -#line 517 "./util/configlexer.lex" +#line 518 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4537,38 +4550,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 276: +case 277: YY_RULE_SETUP -#line 529 "./util/configlexer.lex" +#line 530 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 531 "./util/configlexer.lex" +#line 532 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 277: -YY_RULE_SETUP -#line 535 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 278: -/* rule 278 can match eol */ YY_RULE_SETUP #line 536 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 279: +/* rule 279 can match eol */ YY_RULE_SETUP #line 537 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 280: YY_RULE_SETUP #line 538 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 281: +YY_RULE_SETUP +#line 539 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4576,27 +4589,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 543 "./util/configlexer.lex" +#line 544 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 281: -YY_RULE_SETUP -#line 547 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 282: -/* rule 282 can match eol */ YY_RULE_SETUP #line 548 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 283: +/* rule 283 can match eol */ +YY_RULE_SETUP +#line 549 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 283: +case 284: YY_RULE_SETUP -#line 550 "./util/configlexer.lex" +#line 551 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4606,7 +4619,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 556 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4618,33 +4631,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 284: +case 285: YY_RULE_SETUP -#line 567 "./util/configlexer.lex" +#line 568 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 285: +case 286: YY_RULE_SETUP -#line 571 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 286: +case 287: YY_RULE_SETUP -#line 575 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 287: +case 288: YY_RULE_SETUP -#line 579 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4646 "" +#line 4659 "" case YY_END_OF_BUFFER: { @@ -4935,7 +4948,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 >= 2859 ) + if ( yy_current_state >= 2874 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -4963,11 +4976,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 >= 2859 ) + if ( yy_current_state >= 2874 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2858); + yy_is_jam = (yy_current_state == 2873); return yy_is_jam ? 0 : yy_current_state; } @@ -5606,7 +5619,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 579 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 2920cda87..60373e515 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -262,6 +262,7 @@ directory{COLON} { YDVAR(1, VAR_DIRECTORY) } logfile{COLON} { YDVAR(1, VAR_LOGFILE) } pidfile{COLON} { YDVAR(1, VAR_PIDFILE) } root-hints{COLON} { YDVAR(1, VAR_ROOT_HINTS) } +stream-wait-size{COLON} { YDVAR(1, VAR_STREAM_WAIT_SIZE) } edns-buffer-size{COLON} { YDVAR(1, VAR_EDNS_BUFFER_SIZE) } msg-buffer-size{COLON} { YDVAR(1, VAR_MSG_BUFFER_SIZE) } msg-cache-size{COLON} { YDVAR(1, VAR_MSG_CACHE_SIZE) } diff --git a/util/configparser.c b/util/configparser.c index 679fcf1c3..520848617 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -385,7 +385,8 @@ extern int yydebug; VAR_LOG_SERVFAIL = 514, VAR_DENY_ANY = 515, VAR_UNKNOWN_SERVER_TIME_LIMIT = 516, - VAR_LOG_TAG_QUERYREPLY = 517 + VAR_LOG_TAG_QUERYREPLY = 517, + VAR_STREAM_WAIT_SIZE = 518 }; #endif /* Tokens. */ @@ -649,6 +650,7 @@ extern int yydebug; #define VAR_DENY_ANY 515 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 516 #define VAR_LOG_TAG_QUERYREPLY 517 +#define VAR_STREAM_WAIT_SIZE 518 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -659,7 +661,7 @@ union YYSTYPE char* str; -#line 663 "util/configparser.c" /* yacc.c:355 */ +#line 665 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -676,7 +678,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 680 "util/configparser.c" /* yacc.c:358 */ +#line 682 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -918,21 +920,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 528 +#define YYLAST 530 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 263 +#define YYNTOKENS 264 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 282 +#define YYNNTS 283 /* YYNRULES -- Number of rules. */ -#define YYNRULES 541 +#define YYNRULES 543 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 811 +#define YYNSTATES 814 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 517 +#define YYMAXUTOK 518 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -992,68 +994,68 @@ static const yytype_uint16 yytranslate[] = 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262 + 255, 256, 257, 258, 259, 260, 261, 262, 263 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 170, 170, 170, 171, 171, 172, 172, 173, 173, - 173, 174, 174, 175, 179, 184, 185, 186, 186, 186, - 187, 187, 188, 188, 189, 189, 190, 190, 190, 191, - 191, 192, 192, 192, 193, 193, 193, 194, 194, 195, - 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, - 200, 201, 201, 202, 202, 202, 203, 203, 203, 204, - 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, - 209, 209, 209, 210, 210, 211, 211, 212, 212, 212, - 213, 213, 214, 214, 215, 215, 216, 216, 216, 217, - 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, - 222, 222, 223, 223, 224, 224, 224, 225, 225, 225, - 226, 226, 226, 227, 227, 227, 227, 228, 229, 229, - 229, 230, 230, 230, 231, 231, 232, 232, 233, 233, - 233, 234, 234, 235, 235, 235, 236, 236, 237, 237, - 238, 239, 239, 240, 240, 241, 241, 242, 243, 243, - 244, 244, 245, 245, 246, 246, 247, 247, 248, 248, - 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, - 253, 254, 254, 254, 255, 255, 255, 256, 256, 256, - 257, 257, 258, 259, 259, 260, 260, 261, 261, 262, - 262, 263, 263, 263, 264, 264, 264, 265, 265, 265, - 266, 266, 268, 280, 281, 282, 282, 282, 282, 282, - 283, 283, 285, 297, 298, 299, 299, 299, 299, 300, - 300, 302, 316, 317, 318, 318, 318, 318, 319, 319, - 319, 321, 337, 338, 339, 339, 339, 339, 340, 340, - 340, 341, 343, 352, 361, 372, 381, 390, 399, 410, - 419, 430, 443, 458, 469, 486, 503, 520, 537, 552, - 567, 580, 595, 604, 613, 622, 631, 640, 649, 658, - 667, 676, 685, 694, 703, 712, 725, 734, 747, 756, - 765, 774, 781, 788, 797, 804, 813, 821, 830, 839, - 853, 862, 871, 880, 889, 898, 907, 914, 921, 947, - 955, 962, 969, 976, 983, 991, 999, 1007, 1014, 1025, - 1036, 1043, 1052, 1061, 1070, 1077, 1084, 1092, 1100, 1110, - 1120, 1130, 1143, 1154, 1162, 1175, 1184, 1193, 1202, 1212, - 1222, 1230, 1243, 1252, 1260, 1269, 1277, 1290, 1299, 1306, - 1316, 1326, 1336, 1346, 1356, 1366, 1376, 1386, 1393, 1400, - 1407, 1416, 1425, 1434, 1443, 1450, 1460, 1480, 1487, 1505, - 1518, 1531, 1540, 1549, 1558, 1567, 1577, 1587, 1598, 1607, - 1616, 1625, 1634, 1647, 1660, 1669, 1676, 1685, 1694, 1703, - 1712, 1720, 1733, 1741, 1772, 1779, 1794, 1804, 1814, 1821, - 1828, 1835, 1844, 1852, 1866, 1887, 1908, 1920, 1932, 1944, - 1953, 1974, 1984, 1993, 2001, 2009, 2022, 2035, 2050, 2065, - 2074, 2083, 2089, 2098, 2107, 2117, 2127, 2140, 2153, 2165, - 2179, 2191, 2205, 2215, 2222, 2229, 2238, 2247, 2257, 2267, - 2277, 2284, 2291, 2300, 2309, 2319, 2329, 2336, 2343, 2350, - 2358, 2368, 2378, 2388, 2398, 2430, 2440, 2448, 2456, 2471, - 2480, 2485, 2486, 2487, 2487, 2487, 2488, 2488, 2488, 2489, - 2489, 2491, 2501, 2510, 2517, 2524, 2531, 2538, 2545, 2552, - 2557, 2558, 2559, 2559, 2560, 2560, 2561, 2561, 2562, 2563, - 2564, 2565, 2566, 2567, 2569, 2578, 2585, 2594, 2603, 2610, - 2617, 2627, 2637, 2647, 2657, 2667, 2677, 2682, 2683, 2684, - 2686, 2692, 2702, 2709, 2718, 2726, 2731, 2732, 2734, 2734, - 2734, 2735, 2735, 2736, 2737, 2738, 2739, 2740, 2742, 2752, - 2761, 2768, 2777, 2784, 2793, 2801, 2814, 2822, 2835, 2840, - 2841, 2842, 2842, 2843, 2843, 2843, 2845, 2860, 2875, 2887, - 2902, 2915 + 0, 171, 171, 171, 172, 172, 173, 173, 174, 174, + 174, 175, 175, 176, 180, 185, 186, 187, 187, 187, + 188, 188, 189, 189, 190, 190, 191, 191, 191, 192, + 192, 193, 193, 193, 194, 194, 194, 195, 195, 196, + 196, 197, 197, 198, 198, 199, 199, 200, 200, 201, + 201, 202, 202, 203, 203, 203, 204, 204, 204, 205, + 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, + 210, 210, 210, 211, 211, 212, 212, 213, 213, 213, + 214, 214, 215, 215, 216, 216, 217, 217, 217, 218, + 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, + 223, 223, 224, 224, 225, 225, 225, 226, 226, 226, + 227, 227, 227, 228, 228, 228, 228, 229, 230, 230, + 230, 231, 231, 231, 232, 232, 233, 233, 234, 234, + 234, 235, 235, 236, 236, 236, 237, 237, 238, 238, + 239, 240, 240, 241, 241, 242, 242, 243, 244, 244, + 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, + 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, + 254, 255, 255, 255, 256, 256, 256, 257, 257, 257, + 258, 258, 259, 260, 260, 261, 261, 262, 262, 263, + 263, 264, 264, 264, 265, 265, 265, 266, 266, 266, + 267, 267, 268, 270, 282, 283, 284, 284, 284, 284, + 284, 285, 285, 287, 299, 300, 301, 301, 301, 301, + 302, 302, 304, 318, 319, 320, 320, 320, 320, 321, + 321, 321, 323, 339, 340, 341, 341, 341, 341, 342, + 342, 342, 343, 345, 354, 363, 374, 383, 392, 401, + 412, 421, 432, 445, 460, 471, 488, 505, 522, 539, + 554, 569, 582, 597, 606, 615, 624, 633, 642, 651, + 660, 669, 678, 687, 696, 705, 714, 727, 736, 749, + 758, 767, 776, 783, 790, 799, 806, 815, 823, 832, + 841, 855, 864, 873, 882, 891, 900, 909, 916, 923, + 949, 957, 964, 971, 978, 985, 993, 1001, 1009, 1016, + 1027, 1038, 1045, 1054, 1063, 1072, 1079, 1086, 1094, 1102, + 1112, 1122, 1132, 1140, 1153, 1164, 1172, 1185, 1194, 1203, + 1212, 1222, 1232, 1240, 1253, 1262, 1270, 1279, 1287, 1300, + 1309, 1316, 1326, 1336, 1346, 1356, 1366, 1376, 1386, 1396, + 1403, 1410, 1417, 1426, 1435, 1444, 1453, 1460, 1470, 1490, + 1497, 1515, 1528, 1541, 1550, 1559, 1568, 1577, 1587, 1597, + 1608, 1617, 1626, 1635, 1644, 1657, 1670, 1679, 1686, 1695, + 1704, 1713, 1722, 1730, 1743, 1751, 1782, 1789, 1804, 1814, + 1824, 1831, 1838, 1845, 1854, 1862, 1876, 1897, 1918, 1930, + 1942, 1954, 1963, 1984, 1994, 2003, 2011, 2019, 2032, 2045, + 2060, 2075, 2084, 2093, 2099, 2108, 2117, 2127, 2137, 2150, + 2163, 2175, 2189, 2201, 2215, 2225, 2232, 2239, 2248, 2257, + 2267, 2277, 2287, 2294, 2301, 2310, 2319, 2329, 2339, 2346, + 2353, 2360, 2368, 2378, 2388, 2398, 2408, 2440, 2450, 2458, + 2466, 2481, 2490, 2495, 2496, 2497, 2497, 2497, 2498, 2498, + 2498, 2499, 2499, 2501, 2511, 2520, 2527, 2534, 2541, 2548, + 2555, 2562, 2567, 2568, 2569, 2569, 2570, 2570, 2571, 2571, + 2572, 2573, 2574, 2575, 2576, 2577, 2579, 2588, 2595, 2604, + 2613, 2620, 2627, 2637, 2647, 2657, 2667, 2677, 2687, 2692, + 2693, 2694, 2696, 2702, 2712, 2719, 2728, 2736, 2741, 2742, + 2744, 2744, 2744, 2745, 2745, 2746, 2747, 2748, 2749, 2750, + 2752, 2762, 2771, 2778, 2787, 2794, 2803, 2811, 2824, 2832, + 2845, 2850, 2851, 2852, 2852, 2853, 2853, 2853, 2855, 2870, + 2885, 2897, 2912, 2925 }; #endif @@ -1158,15 +1160,16 @@ static const char *const yytname[] = "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", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", "viewstart", - "contents_view", "content_view", "authstart", "contents_auth", - "content_auth", "server_num_threads", "server_verbosity", - "server_statistics_interval", "server_statistics_cumulative", - "server_extended_statistics", "server_shm_enable", "server_shm_key", - "server_port", "server_send_client_subnet", "server_client_subnet_zone", + "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", + "VAR_STREAM_WAIT_SIZE", "$accept", "toplevelvars", "toplevelvar", + "serverstart", "contents_server", "content_server", "stubstart", + "contents_stub", "content_stub", "forwardstart", "contents_forward", + "content_forward", "viewstart", "contents_view", "content_view", + "authstart", "contents_auth", "content_auth", "server_num_threads", + "server_verbosity", "server_statistics_interval", + "server_statistics_cumulative", "server_extended_statistics", + "server_shm_enable", "server_shm_key", "server_port", + "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1194,34 +1197,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_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_fake_dsa", "server_fake_sha1", - "server_val_log_level", "server_val_nsec3_keysize_iterations", - "server_add_holddown", "server_del_holddown", "server_keep_missing", + "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_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", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", @@ -1306,7 +1310,7 @@ static const yytype_uint16 yytoknum[] = 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 + 515, 516, 517, 518 }; # endif @@ -1326,26 +1330,26 @@ static const yytype_int16 yypact[] = { -154, 212, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -12, 102, 98, 147, 39, 219, - 111, -80, 75, -153, 22, 23, 24, 28, 29, 30, + -154, -154, -154, -154, -12, 102, 98, 166, 39, 213, + 142, -80, 52, -153, 22, 23, 24, 28, 29, 30, 78, 79, 80, 84, 88, 89, 114, 115, 116, 118, - 129, 130, 132, 133, 134, 136, 141, 182, 196, 197, - 199, 200, 201, 203, 204, 205, 206, 214, 215, 218, - 220, 221, 222, 223, 225, 235, 236, 242, 243, 244, - 245, 247, 248, 249, 250, 251, 265, 266, 267, 268, - 269, 270, 272, 278, 279, 280, 281, 282, 294, 295, - 297, 298, 299, 300, 301, 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, 342, 343, 344, 346, 347, 348, 349, - 351, 352, 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, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, -154, + 129, 130, 132, 133, 134, 136, 141, 180, 182, 196, + 197, 200, 201, 203, 204, 205, 206, 214, 215, 216, + 217, 218, 220, 221, 222, 223, 225, 242, 243, 244, + 245, 247, 248, 249, 250, 251, 253, 254, 255, 256, + 257, 258, 259, 272, 278, 279, 280, 281, 282, 297, + 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, + 317, 318, 319, 320, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 346, 347, 348, 349, + 351, 352, 354, 355, 356, 357, 358, 359, 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, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, @@ -1364,48 +1368,48 @@ static const yytype_int16 yypact[] = -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, 433, 434, 435, 436, 438, - 439, 440, -154, -154, -154, -154, -154, -154, -154, -154, - 441, 442, 443, 444, 446, 447, -154, -154, -154, -154, - -154, -154, -154, 448, 449, 450, 451, 452, 453, 454, - -154, -154, -154, -154, -154, -154, -154, -154, 455, 456, - 457, 458, 459, 460, 461, 462, -154, -154, -154, -154, - -154, -154, -154, -154, -154, 463, 464, 465, 466, 467, - 468, 469, 470, -154, -154, -154, -154, -154, -154, -154, - -154, -154, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, 483, -154, -154, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, 494, 495, 496, 497, 498, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, 435, 436, 438, + 439, 440, 441, 442, -154, -154, -154, -154, -154, -154, + -154, -154, 443, 444, 446, 447, 448, 449, -154, -154, + -154, -154, -154, -154, -154, 450, 451, 452, 453, 454, + 455, 456, -154, -154, -154, -154, -154, -154, -154, -154, + 457, 458, 459, 460, 461, 462, 463, 464, -154, -154, + -154, -154, -154, -154, -154, -154, -154, 465, 466, 467, + 468, 469, 470, 471, 472, -154, -154, -154, -154, -154, + -154, -154, -154, -154, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, 485, + -154, -154, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 496, 497, 498, 499, 500, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, 499, 500, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, 501, 502, - 503, -154, -154, -154, -154, -154, -154, -154, -154, -154, - 504, 505, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, 506, 507, 508, 509, 510, 511, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, 512, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, 513, -154, -154, 514, 515, -154, -154, -154, -154, + -154, -154, -154, 501, 502, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - 516, 517, 518, -154, -154, -154, -154, -154, -154, -154, - -154 + 503, 504, 505, -154, -154, -154, -154, -154, -154, -154, + -154, -154, 506, 507, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 508, 509, 510, 511, 512, 513, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, 514, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, 515, -154, -154, 516, 517, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 518, 519, 520, -154, -154, -154, -154, + -154, -154, -154, -154 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1413,9 +1417,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 14, 202, 212, 450, 496, 469, 221, - 505, 528, 231, 3, 16, 204, 214, 223, 233, 452, - 471, 498, 507, 530, 4, 5, 6, 10, 13, 8, + 2, 0, 1, 14, 203, 213, 452, 498, 471, 222, + 507, 530, 232, 3, 16, 205, 215, 224, 234, 454, + 473, 500, 509, 532, 4, 5, 6, 10, 13, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1434,67 +1438,67 @@ 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, 0, 0, 15, - 17, 18, 80, 83, 92, 177, 178, 19, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 31, 71, - 20, 84, 85, 42, 64, 79, 21, 22, 24, 25, - 23, 26, 27, 28, 29, 30, 115, 189, 116, 118, - 119, 120, 191, 196, 192, 173, 81, 70, 96, 113, - 114, 201, 198, 117, 32, 33, 34, 35, 36, 72, - 86, 87, 102, 58, 68, 59, 181, 182, 97, 52, - 53, 180, 54, 55, 106, 110, 124, 133, 158, 107, - 65, 37, 38, 39, 94, 125, 126, 127, 40, 41, - 43, 44, 46, 47, 45, 131, 48, 49, 50, 56, - 75, 111, 89, 132, 82, 154, 90, 91, 108, 109, - 199, 95, 51, 73, 76, 57, 60, 98, 99, 74, - 155, 100, 61, 62, 63, 190, 112, 168, 169, 170, - 171, 179, 101, 69, 103, 104, 105, 156, 66, 67, - 88, 77, 78, 93, 121, 122, 200, 123, 128, 129, - 130, 159, 160, 162, 164, 165, 163, 166, 174, 134, - 135, 138, 139, 136, 137, 140, 141, 143, 142, 193, - 195, 194, 157, 167, 183, 185, 184, 186, 187, 188, - 161, 172, 175, 176, 197, 0, 0, 0, 0, 0, - 0, 0, 203, 205, 206, 207, 209, 210, 211, 208, - 0, 0, 0, 0, 0, 0, 213, 215, 216, 217, - 218, 219, 220, 0, 0, 0, 0, 0, 0, 0, - 222, 224, 225, 228, 229, 226, 230, 227, 0, 0, - 0, 0, 0, 0, 0, 0, 232, 234, 235, 236, - 237, 241, 238, 239, 240, 0, 0, 0, 0, 0, - 0, 0, 0, 451, 453, 455, 454, 460, 456, 457, - 458, 459, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 470, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 0, 497, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 506, 508, 509, 510, 512, 513, 511, 514, 515, 516, - 517, 0, 0, 0, 0, 0, 529, 531, 532, 533, - 534, 535, 243, 242, 249, 262, 260, 268, 269, 272, - 270, 271, 273, 274, 275, 276, 277, 296, 297, 298, - 299, 300, 323, 324, 325, 330, 331, 265, 332, 333, - 336, 334, 335, 338, 339, 340, 354, 311, 312, 314, - 315, 341, 357, 305, 307, 358, 364, 365, 366, 266, - 322, 380, 381, 306, 375, 289, 261, 301, 355, 361, - 342, 0, 0, 384, 267, 244, 288, 346, 245, 263, - 264, 302, 303, 382, 344, 348, 349, 246, 385, 326, - 353, 290, 310, 359, 360, 363, 374, 304, 378, 376, - 377, 316, 321, 350, 351, 317, 318, 343, 368, 291, - 292, 295, 278, 280, 281, 282, 283, 284, 386, 387, - 389, 327, 328, 329, 337, 390, 391, 392, 0, 0, - 0, 345, 319, 501, 401, 405, 403, 402, 406, 404, - 0, 0, 409, 410, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 347, 362, 379, 414, 415, 320, - 393, 0, 0, 0, 0, 0, 0, 369, 370, 371, - 372, 373, 502, 313, 308, 367, 287, 247, 248, 309, - 416, 418, 417, 419, 420, 421, 279, 286, 411, 413, - 412, 285, 0, 294, 352, 388, 293, 422, 423, 424, - 428, 427, 425, 426, 429, 430, 431, 432, 434, 433, - 443, 0, 447, 448, 0, 0, 449, 435, 441, 436, - 437, 438, 440, 442, 439, 461, 463, 462, 465, 466, - 467, 468, 464, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 500, 518, 519, 520, 523, - 521, 522, 524, 525, 526, 527, 536, 537, 538, 539, - 540, 356, 383, 400, 503, 504, 407, 408, 394, 395, - 0, 0, 0, 399, 541, 444, 445, 446, 398, 396, - 397 + 15, 17, 18, 80, 83, 92, 177, 178, 19, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 31, + 71, 20, 84, 85, 42, 64, 79, 21, 22, 24, + 25, 23, 26, 27, 28, 29, 30, 115, 189, 116, + 118, 119, 120, 191, 196, 192, 173, 81, 70, 96, + 113, 114, 201, 198, 117, 32, 33, 34, 35, 36, + 72, 86, 87, 102, 58, 68, 59, 181, 182, 97, + 52, 53, 180, 54, 55, 106, 110, 124, 133, 158, + 202, 107, 65, 37, 38, 39, 94, 125, 126, 127, + 40, 41, 43, 44, 46, 47, 45, 131, 48, 49, + 50, 56, 75, 111, 89, 132, 82, 154, 90, 91, + 108, 109, 199, 95, 51, 73, 76, 57, 60, 98, + 99, 74, 155, 100, 61, 62, 63, 190, 112, 168, + 169, 170, 171, 179, 101, 69, 103, 104, 105, 156, + 66, 67, 88, 77, 78, 93, 121, 122, 200, 123, + 128, 129, 130, 159, 160, 162, 164, 165, 163, 166, + 174, 134, 135, 138, 139, 136, 137, 140, 141, 143, + 142, 193, 195, 194, 157, 167, 183, 185, 184, 186, + 187, 188, 161, 172, 175, 176, 197, 0, 0, 0, + 0, 0, 0, 0, 204, 206, 207, 208, 210, 211, + 212, 209, 0, 0, 0, 0, 0, 0, 214, 216, + 217, 218, 219, 220, 221, 0, 0, 0, 0, 0, + 0, 0, 223, 225, 226, 229, 230, 227, 231, 228, + 0, 0, 0, 0, 0, 0, 0, 0, 233, 235, + 236, 237, 238, 242, 239, 240, 241, 0, 0, 0, + 0, 0, 0, 0, 0, 453, 455, 457, 456, 462, + 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 472, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 0, + 499, 501, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 508, 510, 511, 512, 514, 515, 513, 516, + 517, 518, 519, 0, 0, 0, 0, 0, 531, 533, + 534, 535, 536, 537, 244, 243, 250, 263, 261, 269, + 270, 273, 271, 272, 274, 275, 276, 277, 278, 297, + 298, 299, 300, 301, 325, 326, 327, 332, 333, 266, + 334, 335, 338, 336, 337, 340, 341, 342, 356, 312, + 313, 315, 316, 343, 359, 306, 308, 360, 366, 367, + 368, 267, 324, 382, 383, 307, 377, 290, 262, 302, + 357, 363, 344, 0, 0, 386, 268, 245, 289, 348, + 246, 264, 265, 303, 304, 384, 346, 350, 351, 247, + 387, 328, 355, 291, 311, 361, 362, 365, 376, 305, + 380, 378, 379, 317, 323, 352, 353, 318, 319, 345, + 370, 292, 293, 296, 279, 281, 282, 283, 284, 285, + 388, 389, 391, 329, 330, 331, 339, 392, 393, 394, + 0, 0, 0, 347, 320, 503, 403, 407, 405, 404, + 408, 406, 0, 0, 411, 412, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 349, 364, 381, 416, + 417, 321, 395, 0, 0, 0, 0, 0, 0, 371, + 372, 373, 374, 375, 504, 314, 309, 369, 288, 248, + 249, 310, 418, 420, 419, 421, 422, 423, 280, 287, + 413, 415, 414, 286, 0, 295, 354, 390, 294, 322, + 424, 425, 426, 430, 429, 427, 428, 431, 432, 433, + 434, 436, 435, 445, 0, 449, 450, 0, 0, 451, + 437, 443, 438, 439, 440, 442, 444, 441, 463, 465, + 464, 467, 468, 469, 470, 466, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 502, 520, + 521, 522, 525, 523, 524, 526, 527, 528, 529, 538, + 539, 540, 541, 542, 358, 385, 402, 505, 506, 409, + 410, 396, 397, 0, 0, 0, 401, 543, 446, 447, + 448, 400, 398, 399 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1528,41 +1532,41 @@ static const yytype_int16 yypgoto[] = -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154 + -154, -154, -154 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 13, 14, 24, 219, 15, 25, 412, 16, - 26, 426, 17, 27, 440, 18, 28, 456, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 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, 413, 414, - 415, 416, 417, 418, 419, 427, 428, 429, 430, 431, - 432, 457, 458, 459, 460, 461, 462, 463, 464, 441, - 442, 443, 444, 445, 446, 447, 19, 29, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 20, 30, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 21, 31, 508, 509, 400, 401, 402, 403, - 22, 32, 520, 521, 522, 523, 524, 525, 526, 527, - 528, 529, 530, 23, 33, 536, 537, 538, 539, 540, - 541, 404 + -1, 1, 13, 14, 24, 220, 15, 25, 414, 16, + 26, 428, 17, 27, 442, 18, 28, 458, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 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, 415, + 416, 417, 418, 419, 420, 421, 429, 430, 431, 432, + 433, 434, 459, 460, 461, 462, 463, 464, 465, 466, + 443, 444, 445, 446, 447, 448, 449, 19, 29, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 20, 30, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 21, 31, 510, 511, 402, 403, 404, + 405, 22, 32, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 23, 33, 538, 539, 540, 541, + 542, 543, 406 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1573,56 +1577,57 @@ static const yytype_uint16 yytable[] = 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 507, 542, 543, 544, 65, 66, 67, 545, 546, - 547, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 64, 509, 544, 545, 546, 65, 66, 67, 547, 548, + 549, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 448, 531, 532, 533, 534, 535, 548, 549, - 550, 109, 110, 111, 551, 112, 113, 114, 552, 553, + 107, 108, 450, 533, 534, 535, 536, 537, 550, 551, + 552, 109, 110, 111, 553, 112, 113, 114, 554, 555, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 554, 555, 556, 139, 557, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 558, - 559, 420, 560, 561, 562, 405, 563, 406, 407, 421, - 422, 564, 150, 151, 152, 153, 154, 155, 156, 157, + 135, 136, 137, 138, 556, 557, 558, 139, 559, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 560, + 561, 422, 562, 563, 564, 407, 565, 408, 409, 423, + 424, 566, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 433, 188, 565, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 566, 567, 408, 568, - 569, 570, 2, 571, 572, 573, 574, 202, 203, 204, - 205, 206, 207, 3, 575, 576, 434, 435, 577, 208, - 578, 579, 580, 581, 423, 582, 424, 209, 210, 409, - 211, 212, 410, 213, 214, 583, 584, 215, 216, 217, - 218, 436, 585, 586, 587, 588, 4, 589, 590, 591, - 592, 593, 5, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 594, 595, 596, 597, 598, - 599, 449, 600, 450, 451, 452, 453, 454, 601, 602, - 603, 604, 605, 455, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 606, 607, 6, 608, 609, 610, - 611, 612, 437, 438, 465, 466, 467, 468, 469, 470, - 471, 472, 7, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 439, 641, 642, 643, 425, 644, 645, 646, 647, - 411, 648, 649, 8, 650, 651, 652, 653, 654, 655, - 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 9, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, - 10, 715, 716, 717, 718, 719, 720, 721, 722, 723, - 724, 725, 726, 727, 728, 729, 730, 11, 731, 732, - 733, 734, 735, 736, 737, 12, 738, 739, 740, 741, - 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, - 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, - 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, - 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, - 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, - 802, 803, 804, 805, 806, 807, 808, 809, 810 + 567, 188, 568, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 569, 570, 410, 435, + 571, 572, 2, 573, 574, 575, 576, 202, 203, 204, + 205, 206, 207, 3, 577, 578, 579, 580, 581, 208, + 582, 583, 584, 585, 425, 586, 426, 209, 210, 411, + 211, 212, 412, 213, 214, 436, 437, 215, 216, 217, + 218, 219, 587, 588, 589, 590, 4, 591, 592, 593, + 594, 595, 5, 596, 597, 598, 599, 600, 601, 602, + 438, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 451, 603, 452, 453, 454, 455, 456, 604, 605, + 606, 607, 608, 457, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 6, 609, 467, 468, + 469, 470, 471, 472, 473, 474, 610, 611, 612, 613, + 614, 615, 7, 616, 617, 618, 619, 620, 621, 622, + 623, 439, 440, 624, 625, 626, 627, 628, 629, 630, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 427, 646, 647, 648, 649, + 413, 650, 651, 8, 652, 653, 654, 655, 656, 657, + 441, 658, 659, 660, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 9, 701, 702, 703, 704, 705, + 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 10, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 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, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, + 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, + 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813 }; static const yytype_uint16 yycheck[] = @@ -1646,25 +1651,25 @@ static const yytype_uint16 yycheck[] = 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, - 43, 203, 10, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 10, 10, 106, 10, + 10, 203, 10, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 10, 10, 106, 43, 10, 10, 0, 10, 10, 10, 10, 229, 230, 231, - 232, 233, 234, 11, 10, 10, 79, 80, 10, 241, + 232, 233, 234, 11, 10, 10, 10, 10, 10, 241, 10, 10, 10, 10, 136, 10, 138, 249, 250, 137, - 252, 253, 140, 255, 256, 10, 10, 259, 260, 261, - 262, 104, 10, 10, 10, 10, 44, 10, 10, 10, - 10, 10, 50, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 10, 10, 10, 10, 10, - 10, 242, 10, 244, 245, 246, 247, 248, 10, 10, - 10, 10, 10, 254, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 10, 10, 94, 10, 10, 10, - 10, 10, 165, 166, 95, 96, 97, 98, 99, 100, - 101, 102, 110, 10, 10, 10, 10, 10, 10, 10, + 252, 253, 140, 255, 256, 79, 80, 259, 260, 261, + 262, 263, 10, 10, 10, 10, 44, 10, 10, 10, + 10, 10, 50, 10, 10, 10, 10, 10, 10, 10, + 104, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 242, 10, 244, 245, 246, 247, 248, 10, 10, + 10, 10, 10, 254, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 94, 10, 95, 96, + 97, 98, 99, 100, 101, 102, 10, 10, 10, 10, + 10, 10, 110, 10, 10, 10, 10, 10, 10, 10, + 10, 165, 166, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 204, 10, 10, 10, 257, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 257, 10, 10, 10, 10, 258, 10, 10, 151, 10, 10, 10, 10, 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, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1679,17 +1684,18 @@ static const yytype_uint16 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, - 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 264, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 265, 266, 269, 272, 275, 278, 489, - 500, 515, 523, 536, 267, 270, 273, 276, 279, 490, - 501, 516, 524, 537, 12, 13, 14, 15, 16, 17, + 0, 265, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 266, 267, 270, 273, 276, 279, 491, + 502, 517, 525, 538, 268, 271, 274, 277, 280, 492, + 503, 518, 526, 539, 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, @@ -1707,8 +1713,8 @@ static const yytype_uint16 yystos[] = 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, 234, 241, 249, - 250, 252, 253, 255, 256, 259, 260, 261, 262, 268, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 250, 252, 253, 255, 256, 259, 260, 261, 262, 263, + 269, 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, @@ -1726,21 +1732,21 @@ static const yytype_uint16 yystos[] = 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, - 519, 520, 521, 522, 544, 43, 45, 46, 106, 137, - 140, 258, 271, 461, 462, 463, 464, 465, 466, 467, - 43, 51, 52, 136, 138, 257, 274, 468, 469, 470, - 471, 472, 473, 43, 79, 80, 104, 165, 166, 204, - 277, 482, 483, 484, 485, 486, 487, 488, 43, 242, - 244, 245, 246, 247, 248, 254, 280, 474, 475, 476, - 477, 478, 479, 480, 481, 95, 96, 97, 98, 99, - 100, 101, 102, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 111, 517, 518, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 236, 237, 238, 239, 240, 538, 539, 540, 541, - 542, 543, 10, 10, 10, 10, 10, 10, 10, 10, + 461, 462, 521, 522, 523, 524, 546, 43, 45, 46, + 106, 137, 140, 258, 272, 463, 464, 465, 466, 467, + 468, 469, 43, 51, 52, 136, 138, 257, 275, 470, + 471, 472, 473, 474, 475, 43, 79, 80, 104, 165, + 166, 204, 278, 484, 485, 486, 487, 488, 489, 490, + 43, 242, 244, 245, 246, 247, 248, 254, 281, 476, + 477, 478, 479, 480, 481, 482, 483, 95, 96, 97, + 98, 99, 100, 101, 102, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 111, + 519, 520, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 236, 237, 238, 239, 240, 540, 541, + 542, 543, 544, 545, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1767,37 +1773,37 @@ 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 263, 264, 264, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 266, 267, 267, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 269, 270, 270, 271, 271, 271, 271, 271, - 271, 271, 272, 273, 273, 274, 274, 274, 274, 274, - 274, 275, 276, 276, 277, 277, 277, 277, 277, 277, - 277, 278, 279, 279, 280, 280, 280, 280, 280, 280, - 280, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 0, 264, 265, 265, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 267, 268, 268, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 270, 271, 271, 272, 272, 272, 272, + 272, 272, 272, 273, 274, 274, 275, 275, 275, 275, + 275, 275, 276, 277, 277, 278, 278, 278, 278, 278, + 278, 278, 279, 280, 280, 281, 281, 281, 281, 281, + 281, 281, 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, @@ -1818,16 +1824,16 @@ static const yytype_uint16 yyr1[] = 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, 490, 491, 491, 491, 491, 491, 491, 491, - 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 501, 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 516, 517, - 518, 519, 520, 521, 522, 523, 524, 524, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 526, 527, + 489, 490, 491, 492, 492, 493, 493, 493, 493, 493, + 493, 493, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 503, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 526, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 537, 538, 538, 538, 538, 538, 539, 540, 541, 542, - 543, 544 + 538, 539, 539, 540, 540, 540, 540, 540, 541, 542, + 543, 544, 545, 546 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1853,11 +1859,11 @@ 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, 2, 2, 2, + 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, @@ -1868,26 +1874,26 @@ 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, 2, 2, 2, 3, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, - 3, 2, 2, 2, 2, 2, 2, 3, 3, 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, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 3 + 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 }; @@ -2564,15 +2570,15 @@ yyreduce: switch (yyn) { case 14: -#line 180 "./util/configparser.y" /* yacc.c:1646 */ +#line 181 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2572 "util/configparser.c" /* yacc.c:1646 */ +#line 2578 "util/configparser.c" /* yacc.c:1646 */ break; - case 202: -#line 269 "./util/configparser.y" /* yacc.c:1646 */ + case 203: +#line 271 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2583,11 +2589,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2587 "util/configparser.c" /* yacc.c:1646 */ +#line 2593 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 286 "./util/configparser.y" /* yacc.c:1646 */ + case 213: +#line 288 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2598,11 +2604,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2602 "util/configparser.c" /* yacc.c:1646 */ +#line 2608 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 303 "./util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 305 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2615,11 +2621,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2619 "util/configparser.c" /* yacc.c:1646 */ +#line 2625 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 322 "./util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 324 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2634,11 +2640,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2638 "util/configparser.c" /* yacc.c:1646 */ +#line 2644 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 344 "./util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 346 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2646,11 +2652,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2650 "util/configparser.c" /* yacc.c:1646 */ +#line 2656 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 353 "./util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 355 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2658,11 +2664,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2662 "util/configparser.c" /* yacc.c:1646 */ +#line 2668 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 362 "./util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 364 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2672,11 +2678,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2676 "util/configparser.c" /* yacc.c:1646 */ +#line 2682 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 373 "./util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 375 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2684,11 +2690,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2688 "util/configparser.c" /* yacc.c:1646 */ +#line 2694 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 382 "./util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 384 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2696,11 +2702,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2700 "util/configparser.c" /* yacc.c:1646 */ +#line 2706 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 391 "./util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 393 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2708,11 +2714,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2712 "util/configparser.c" /* yacc.c:1646 */ +#line 2718 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 400 "./util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 402 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2722,11 +2728,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2726 "util/configparser.c" /* yacc.c:1646 */ +#line 2732 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 411 "./util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 413 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2734,11 +2740,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2738 "util/configparser.c" /* yacc.c:1646 */ +#line 2744 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 420 "./util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 422 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2748,11 +2754,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2752 "util/configparser.c" /* yacc.c:1646 */ +#line 2758 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 431 "./util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 433 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2763,11 +2769,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2767 "util/configparser.c" /* yacc.c:1646 */ +#line 2773 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 444 "./util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 446 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2781,11 +2787,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2785 "util/configparser.c" /* yacc.c:1646 */ +#line 2791 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 459 "./util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 461 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2795,11 +2801,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2799 "util/configparser.c" /* yacc.c:1646 */ +#line 2805 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 470 "./util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 472 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2815,11 +2821,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2819 "util/configparser.c" /* yacc.c:1646 */ +#line 2825 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 487 "./util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 489 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2835,11 +2841,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2839 "util/configparser.c" /* yacc.c:1646 */ +#line 2845 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 504 "./util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 506 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2855,11 +2861,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2859 "util/configparser.c" /* yacc.c:1646 */ +#line 2865 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 521 "./util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 523 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2875,11 +2881,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2879 "util/configparser.c" /* yacc.c:1646 */ +#line 2885 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 538 "./util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 540 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2893,11 +2899,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2897 "util/configparser.c" /* yacc.c:1646 */ +#line 2903 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 553 "./util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 555 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2911,11 +2917,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2915 "util/configparser.c" /* yacc.c:1646 */ +#line 2921 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 568 "./util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 570 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2927,11 +2933,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2931 "util/configparser.c" /* yacc.c:1646 */ +#line 2937 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 581 "./util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 583 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2945,11 +2951,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2949 "util/configparser.c" /* yacc.c:1646 */ +#line 2955 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 596 "./util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 598 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2957,11 +2963,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2961 "util/configparser.c" /* yacc.c:1646 */ +#line 2967 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 605 "./util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 607 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2969,11 +2975,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2973 "util/configparser.c" /* yacc.c:1646 */ +#line 2979 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 614 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 616 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -2981,11 +2987,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2985 "util/configparser.c" /* yacc.c:1646 */ +#line 2991 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 623 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 625 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2993,11 +2999,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2997 "util/configparser.c" /* yacc.c:1646 */ +#line 3003 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 632 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 634 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3005,11 +3011,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3009 "util/configparser.c" /* yacc.c:1646 */ +#line 3015 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 641 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 643 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3017,11 +3023,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3021 "util/configparser.c" /* yacc.c:1646 */ +#line 3027 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 650 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 652 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3029,11 +3035,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3033 "util/configparser.c" /* yacc.c:1646 */ +#line 3039 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 659 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3041,11 +3047,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3045 "util/configparser.c" /* yacc.c:1646 */ +#line 3051 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 668 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 670 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3053,11 +3059,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3057 "util/configparser.c" /* yacc.c:1646 */ +#line 3063 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 677 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 679 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3065,11 +3071,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3069 "util/configparser.c" /* yacc.c:1646 */ +#line 3075 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 686 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 688 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3077,11 +3083,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3081 "util/configparser.c" /* yacc.c:1646 */ +#line 3087 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 695 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 697 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3089,11 +3095,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3093 "util/configparser.c" /* yacc.c:1646 */ +#line 3099 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 704 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 706 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3101,11 +3107,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3105 "util/configparser.c" /* yacc.c:1646 */ +#line 3111 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 713 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 715 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3117,11 +3123,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3121 "util/configparser.c" /* yacc.c:1646 */ +#line 3127 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 726 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3129,11 +3135,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3133 "util/configparser.c" /* yacc.c:1646 */ +#line 3139 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 735 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3145,11 +3151,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3149 "util/configparser.c" /* yacc.c:1646 */ +#line 3155 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 748 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 750 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3157,11 +3163,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3161 "util/configparser.c" /* yacc.c:1646 */ +#line 3167 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 757 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 759 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3169,11 +3175,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3173 "util/configparser.c" /* yacc.c:1646 */ +#line 3179 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 766 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 768 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3181,31 +3187,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3185 "util/configparser.c" /* yacc.c:1646 */ +#line 3191 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 775 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 777 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3195 "util/configparser.c" /* yacc.c:1646 */ +#line 3201 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 782 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 784 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3205 "util/configparser.c" /* yacc.c:1646 */ +#line 3211 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 789 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 791 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3213,21 +3219,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3217 "util/configparser.c" /* yacc.c:1646 */ +#line 3223 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 798 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 800 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3227 "util/configparser.c" /* yacc.c:1646 */ +#line 3233 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 805 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 807 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3235,22 +3241,22 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3239 "util/configparser.c" /* yacc.c:1646 */ +#line 3245 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 814 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 816 "./util/configparser.y" /* yacc.c:1646 */ { 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 3250 "util/configparser.c" /* yacc.c:1646 */ +#line 3256 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 822 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 824 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3258,11 +3264,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" /* yacc.c:1646 */ +#line 3268 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 831 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 833 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3270,11 +3276,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3274 "util/configparser.c" /* yacc.c:1646 */ +#line 3280 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 840 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 842 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3287,11 +3293,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3291 "util/configparser.c" /* yacc.c:1646 */ +#line 3297 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 854 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 856 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3299,11 +3305,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3309 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 863 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 865 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3311,11 +3317,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3315 "util/configparser.c" /* yacc.c:1646 */ +#line 3321 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 872 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 874 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3323,11 +3329,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3327 "util/configparser.c" /* yacc.c:1646 */ +#line 3333 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 881 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 883 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3335,11 +3341,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3339 "util/configparser.c" /* yacc.c:1646 */ +#line 3345 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 890 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 892 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3347,11 +3353,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3351 "util/configparser.c" /* yacc.c:1646 */ +#line 3357 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 899 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 901 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3359,31 +3365,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3363 "util/configparser.c" /* yacc.c:1646 */ +#line 3369 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 908 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 910 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3373 "util/configparser.c" /* yacc.c:1646 */ +#line 3379 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 915 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 917 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3383 "util/configparser.c" /* yacc.c:1646 */ +#line 3389 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 922 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 924 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3408,105 +3414,105 @@ yyreduce: } } } -#line 3412 "util/configparser.c" /* yacc.c:1646 */ +#line 3418 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 948 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 950 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3423 "util/configparser.c" /* yacc.c:1646 */ +#line 3429 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 956 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 958 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3433 "util/configparser.c" /* yacc.c:1646 */ +#line 3439 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 963 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 965 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3443 "util/configparser.c" /* yacc.c:1646 */ +#line 3449 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 970 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 972 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3453 "util/configparser.c" /* yacc.c:1646 */ +#line 3459 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 977 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 979 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3463 "util/configparser.c" /* yacc.c:1646 */ +#line 3469 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 984 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 986 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3474 "util/configparser.c" /* yacc.c:1646 */ +#line 3480 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 992 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 994 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3485 "util/configparser.c" /* yacc.c:1646 */ +#line 3491 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1000 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1002 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3496 "util/configparser.c" /* yacc.c:1646 */ +#line 3502 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1008 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1010 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3506 "util/configparser.c" /* yacc.c:1646 */ +#line 3512 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1015 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1017 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3516,11 +3522,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3520 "util/configparser.c" /* yacc.c:1646 */ +#line 3526 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1026 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1028 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3530,21 +3536,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3534 "util/configparser.c" /* yacc.c:1646 */ +#line 3540 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1037 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1039 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3544 "util/configparser.c" /* yacc.c:1646 */ +#line 3550 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1044 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1046 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3552,11 +3558,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3556 "util/configparser.c" /* yacc.c:1646 */ +#line 3562 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1053 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1055 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3564,11 +3570,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3568 "util/configparser.c" /* yacc.c:1646 */ +#line 3574 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1062 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1064 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3576,53 +3582,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3580 "util/configparser.c" /* yacc.c:1646 */ +#line 3586 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1071 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1073 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3590 "util/configparser.c" /* yacc.c:1646 */ +#line 3596 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1078 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1080 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3600 "util/configparser.c" /* yacc.c:1646 */ +#line 3606 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1085 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1087 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3611 "util/configparser.c" /* yacc.c:1646 */ +#line 3617 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1093 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1095 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3622 "util/configparser.c" /* yacc.c:1646 */ +#line 3628 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1101 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1103 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3631,11 +3637,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3635 "util/configparser.c" /* yacc.c:1646 */ +#line 3641 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1111 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1113 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3644,11 +3650,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3648 "util/configparser.c" /* yacc.c:1646 */ +#line 3654 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1121 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1123 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3657,11 +3663,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3661 "util/configparser.c" /* yacc.c:1646 */ +#line 3667 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1131 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1133 "./util/configparser.y" /* yacc.c:1646 */ + { + 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 3678 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 323: +#line 1141 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3673,11 +3690,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3677 "util/configparser.c" /* yacc.c:1646 */ +#line 3694 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1144 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1154 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3687,22 +3704,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3691 "util/configparser.c" /* yacc.c:1646 */ +#line 3708 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1155 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1165 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3702 "util/configparser.c" /* yacc.c:1646 */ +#line 3719 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1163 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1173 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3714,11 +3731,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3718 "util/configparser.c" /* yacc.c:1646 */ +#line 3735 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1176 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1186 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3726,11 +3743,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3730 "util/configparser.c" /* yacc.c:1646 */ +#line 3747 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1185 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1195 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3738,11 +3755,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3742 "util/configparser.c" /* yacc.c:1646 */ +#line 3759 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1194 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1204 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3750,11 +3767,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3754 "util/configparser.c" /* yacc.c:1646 */ +#line 3771 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1203 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1213 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3763,11 +3780,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3767 "util/configparser.c" /* yacc.c:1646 */ +#line 3784 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1213 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1223 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3776,22 +3793,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3780 "util/configparser.c" /* yacc.c:1646 */ +#line 3797 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1223 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1233 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3791 "util/configparser.c" /* yacc.c:1646 */ +#line 3808 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1231 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1241 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3803,11 +3820,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3807 "util/configparser.c" /* yacc.c:1646 */ +#line 3824 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1244 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1254 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3815,22 +3832,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3819 "util/configparser.c" /* yacc.c:1646 */ +#line 3836 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1253 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1263 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" /* yacc.c:1646 */ +#line 3847 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1261 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1271 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3838,22 +3855,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3842 "util/configparser.c" /* yacc.c:1646 */ +#line 3859 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1270 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1280 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3853 "util/configparser.c" /* yacc.c:1646 */ +#line 3870 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1278 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1288 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3865,11 +3882,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3869 "util/configparser.c" /* yacc.c:1646 */ +#line 3886 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1291 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1301 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3877,21 +3894,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3881 "util/configparser.c" /* yacc.c:1646 */ +#line 3898 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1300 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1310 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3891 "util/configparser.c" /* yacc.c:1646 */ +#line 3908 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1307 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1317 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3900,11 +3917,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3904 "util/configparser.c" /* yacc.c:1646 */ +#line 3921 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1317 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1327 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3913,11 +3930,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3917 "util/configparser.c" /* yacc.c:1646 */ +#line 3934 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1327 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1337 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3926,11 +3943,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3930 "util/configparser.c" /* yacc.c:1646 */ +#line 3947 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1337 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1347 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3939,11 +3956,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3943 "util/configparser.c" /* yacc.c:1646 */ +#line 3960 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1347 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1357 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3952,11 +3969,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3956 "util/configparser.c" /* yacc.c:1646 */ +#line 3973 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1357 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1367 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3965,11 +3982,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3969 "util/configparser.c" /* yacc.c:1646 */ +#line 3986 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1367 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1377 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3978,11 +3995,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3982 "util/configparser.c" /* yacc.c:1646 */ +#line 3999 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1377 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1387 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3991,41 +4008,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3995 "util/configparser.c" /* yacc.c:1646 */ +#line 4012 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1387 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1397 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4005 "util/configparser.c" /* yacc.c:1646 */ +#line 4022 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1394 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1404 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4015 "util/configparser.c" /* yacc.c:1646 */ +#line 4032 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1401 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1411 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4025 "util/configparser.c" /* yacc.c:1646 */ +#line 4042 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1408 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1418 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4033,11 +4050,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4037 "util/configparser.c" /* yacc.c:1646 */ +#line 4054 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1417 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1427 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4045,11 +4062,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4049 "util/configparser.c" /* yacc.c:1646 */ +#line 4066 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1426 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1436 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4057,11 +4074,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4061 "util/configparser.c" /* yacc.c:1646 */ +#line 4078 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1435 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1445 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4069,21 +4086,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4073 "util/configparser.c" /* yacc.c:1646 */ +#line 4090 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1444 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1454 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4083 "util/configparser.c" /* yacc.c:1646 */ +#line 4100 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1451 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1461 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4092,11 +4109,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4096 "util/configparser.c" /* yacc.c:1646 */ +#line 4113 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1461 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1471 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4115,21 +4132,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4119 "util/configparser.c" /* yacc.c:1646 */ +#line 4136 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1481 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1491 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4129 "util/configparser.c" /* yacc.c:1646 */ +#line 4146 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1488 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1498 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4146,11 +4163,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4150 "util/configparser.c" /* yacc.c:1646 */ +#line 4167 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1506 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1516 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4162,11 +4179,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4166 "util/configparser.c" /* yacc.c:1646 */ +#line 4183 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1519 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1529 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4178,11 +4195,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4182 "util/configparser.c" /* yacc.c:1646 */ +#line 4199 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1532 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1542 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4190,11 +4207,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4194 "util/configparser.c" /* yacc.c:1646 */ +#line 4211 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1541 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1551 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4202,11 +4219,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4206 "util/configparser.c" /* yacc.c:1646 */ +#line 4223 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1550 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1560 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4214,11 +4231,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" /* yacc.c:1646 */ +#line 4235 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1559 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1569 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4226,11 +4243,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" /* yacc.c:1646 */ +#line 4247 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1568 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1578 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4239,11 +4256,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4243 "util/configparser.c" /* yacc.c:1646 */ +#line 4260 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1578 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1588 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4252,11 +4269,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4256 "util/configparser.c" /* yacc.c:1646 */ +#line 4273 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1588 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1598 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4266,11 +4283,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4270 "util/configparser.c" /* yacc.c:1646 */ +#line 4287 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1599 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1609 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4278,11 +4295,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4282 "util/configparser.c" /* yacc.c:1646 */ +#line 4299 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1608 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1618 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4290,11 +4307,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4294 "util/configparser.c" /* yacc.c:1646 */ +#line 4311 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1617 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1627 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4302,11 +4319,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4306 "util/configparser.c" /* yacc.c:1646 */ +#line 4323 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1626 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1636 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4314,11 +4331,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4318 "util/configparser.c" /* yacc.c:1646 */ +#line 4335 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1635 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1645 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4330,11 +4347,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4334 "util/configparser.c" /* yacc.c:1646 */ +#line 4351 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1648 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1658 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4346,11 +4363,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" /* yacc.c:1646 */ +#line 4367 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1661 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1671 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4358,21 +4375,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4362 "util/configparser.c" /* yacc.c:1646 */ +#line 4379 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1670 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1680 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4372 "util/configparser.c" /* yacc.c:1646 */ +#line 4389 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1677 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1687 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4380,11 +4397,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4384 "util/configparser.c" /* yacc.c:1646 */ +#line 4401 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1686 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1696 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4392,11 +4409,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4396 "util/configparser.c" /* yacc.c:1646 */ +#line 4413 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1695 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1705 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4404,11 +4421,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4408 "util/configparser.c" /* yacc.c:1646 */ +#line 4425 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1704 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1714 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4417,22 +4434,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4421 "util/configparser.c" /* yacc.c:1646 */ +#line 4438 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1713 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1723 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4432 "util/configparser.c" /* yacc.c:1646 */ +#line 4449 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1721 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1731 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4444,22 +4461,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4448 "util/configparser.c" /* yacc.c:1646 */ +#line 4465 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1734 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1744 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4459 "util/configparser.c" /* yacc.c:1646 */ +#line 4476 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1742 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1752 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4489,21 +4506,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4493 "util/configparser.c" /* yacc.c:1646 */ +#line 4510 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1773 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1783 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4503 "util/configparser.c" /* yacc.c:1646 */ +#line 4520 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1780 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1790 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4517,11 +4534,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4521 "util/configparser.c" /* yacc.c:1646 */ +#line 4538 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1795 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1805 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4530,11 +4547,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4534 "util/configparser.c" /* yacc.c:1646 */ +#line 4551 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1805 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1815 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4543,41 +4560,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4547 "util/configparser.c" /* yacc.c:1646 */ +#line 4564 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1815 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1825 "./util/configparser.y" /* yacc.c:1646 */ { 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 4557 "util/configparser.c" /* yacc.c:1646 */ +#line 4574 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1822 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1832 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4567 "util/configparser.c" /* yacc.c:1646 */ +#line 4584 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1829 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1839 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4577 "util/configparser.c" /* yacc.c:1646 */ +#line 4594 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1836 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1846 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4585,22 +4602,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4589 "util/configparser.c" /* yacc.c:1646 */ +#line 4606 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1845 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1855 "./util/configparser.y" /* yacc.c:1646 */ { 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 4600 "util/configparser.c" /* yacc.c:1646 */ +#line 4617 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1853 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1863 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4613,11 +4630,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4617 "util/configparser.c" /* yacc.c:1646 */ +#line 4634 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1867 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1877 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4637,11 +4654,11 @@ yyreduce: } } } -#line 4641 "util/configparser.c" /* yacc.c:1646 */ +#line 4658 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1888 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1898 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4661,11 +4678,11 @@ yyreduce: } } } -#line 4665 "util/configparser.c" /* yacc.c:1646 */ +#line 4682 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1909 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1919 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4676,11 +4693,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4680 "util/configparser.c" /* yacc.c:1646 */ +#line 4697 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1921 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1931 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4691,11 +4708,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4695 "util/configparser.c" /* yacc.c:1646 */ +#line 4712 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1933 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1943 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4706,11 +4723,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4710 "util/configparser.c" /* yacc.c:1646 */ +#line 4727 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1945 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1955 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4718,11 +4735,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4722 "util/configparser.c" /* yacc.c:1646 */ +#line 4739 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1954 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1964 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4742,11 +4759,11 @@ yyreduce: } } } -#line 4746 "util/configparser.c" /* yacc.c:1646 */ +#line 4763 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1975 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1985 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4754,11 +4771,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4758 "util/configparser.c" /* yacc.c:1646 */ +#line 4775 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1985 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1995 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4766,33 +4783,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4770 "util/configparser.c" /* yacc.c:1646 */ +#line 4787 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1994 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 2004 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4781 "util/configparser.c" /* yacc.c:1646 */ +#line 4798 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 2002 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 2012 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4792 "util/configparser.c" /* yacc.c:1646 */ +#line 4809 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 2010 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 2020 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4804,11 +4821,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4808 "util/configparser.c" /* yacc.c:1646 */ +#line 4825 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 2023 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 2033 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4820,11 +4837,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4824 "util/configparser.c" /* yacc.c:1646 */ +#line 4841 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 2036 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 2046 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4838,11 +4855,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4842 "util/configparser.c" /* yacc.c:1646 */ +#line 4859 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 2051 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 2061 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4856,11 +4873,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4860 "util/configparser.c" /* yacc.c:1646 */ +#line 4877 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 2066 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 2076 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4868,11 +4885,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4872 "util/configparser.c" /* yacc.c:1646 */ +#line 4889 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2075 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2085 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4880,20 +4897,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4884 "util/configparser.c" /* yacc.c:1646 */ +#line 4901 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2084 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2094 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4893 "util/configparser.c" /* yacc.c:1646 */ +#line 4910 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2090 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2100 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4901,11 +4918,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4905 "util/configparser.c" /* yacc.c:1646 */ +#line 4922 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2099 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2109 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4913,11 +4930,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4917 "util/configparser.c" /* yacc.c:1646 */ +#line 4934 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2108 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2118 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4926,11 +4943,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4930 "util/configparser.c" /* yacc.c:1646 */ +#line 4947 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2118 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2128 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4939,11 +4956,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4943 "util/configparser.c" /* yacc.c:1646 */ +#line 4960 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2128 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2138 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4955,11 +4972,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4959 "util/configparser.c" /* yacc.c:1646 */ +#line 4976 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2141 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2151 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -4971,11 +4988,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4975 "util/configparser.c" /* yacc.c:1646 */ +#line 4992 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2154 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2164 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -4986,11 +5003,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 4990 "util/configparser.c" /* yacc.c:1646 */ +#line 5007 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2166 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2176 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5003,11 +5020,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5007 "util/configparser.c" /* yacc.c:1646 */ +#line 5024 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2180 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2190 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5018,11 +5035,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5022 "util/configparser.c" /* yacc.c:1646 */ +#line 5039 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2192 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2202 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5035,11 +5052,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5039 "util/configparser.c" /* yacc.c:1646 */ +#line 5056 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2206 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2216 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5048,31 +5065,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5052 "util/configparser.c" /* yacc.c:1646 */ +#line 5069 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2216 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2226 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5062 "util/configparser.c" /* yacc.c:1646 */ +#line 5079 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2223 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2233 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5072 "util/configparser.c" /* yacc.c:1646 */ +#line 5089 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2230 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2240 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5080,11 +5097,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5084 "util/configparser.c" /* yacc.c:1646 */ +#line 5101 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2239 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2249 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5092,11 +5109,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5096 "util/configparser.c" /* yacc.c:1646 */ +#line 5113 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2248 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2258 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5105,11 +5122,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5109 "util/configparser.c" /* yacc.c:1646 */ +#line 5126 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2258 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5118,11 +5135,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5122 "util/configparser.c" /* yacc.c:1646 */ +#line 5139 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2268 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2278 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5131,31 +5148,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5135 "util/configparser.c" /* yacc.c:1646 */ +#line 5152 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2278 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2288 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5145 "util/configparser.c" /* yacc.c:1646 */ +#line 5162 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2285 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2295 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5155 "util/configparser.c" /* yacc.c:1646 */ +#line 5172 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2292 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2302 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5163,11 +5180,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5167 "util/configparser.c" /* yacc.c:1646 */ +#line 5184 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2301 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2311 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5175,11 +5192,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5179 "util/configparser.c" /* yacc.c:1646 */ +#line 5196 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2310 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2320 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5188,11 +5205,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5192 "util/configparser.c" /* yacc.c:1646 */ +#line 5209 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2320 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2330 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5201,52 +5218,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5205 "util/configparser.c" /* yacc.c:1646 */ +#line 5222 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2330 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2340 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5215 "util/configparser.c" /* yacc.c:1646 */ +#line 5232 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2337 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2347 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5225 "util/configparser.c" /* yacc.c:1646 */ +#line 5242 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2344 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2354 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5235 "util/configparser.c" /* yacc.c:1646 */ +#line 5252 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2351 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2361 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5246 "util/configparser.c" /* yacc.c:1646 */ +#line 5263 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2359 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2369 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5255,11 +5272,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5259 "util/configparser.c" /* yacc.c:1646 */ +#line 5276 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2369 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2379 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5268,11 +5285,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5272 "util/configparser.c" /* yacc.c:1646 */ +#line 5289 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2379 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2389 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5281,11 +5298,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5285 "util/configparser.c" /* yacc.c:1646 */ +#line 5302 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2389 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5294,11 +5311,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5298 "util/configparser.c" /* yacc.c:1646 */ +#line 5315 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2399 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2409 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5329,11 +5346,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5333 "util/configparser.c" /* yacc.c:1646 */ +#line 5350 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2431 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5342,33 +5359,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5346 "util/configparser.c" /* yacc.c:1646 */ +#line 5363 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2441 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2451 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5357 "util/configparser.c" /* yacc.c:1646 */ +#line 5374 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2449 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2459 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5368 "util/configparser.c" /* yacc.c:1646 */ +#line 5385 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2457 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2467 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5382,11 +5399,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5386 "util/configparser.c" /* yacc.c:1646 */ +#line 5403 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2472 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2482 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5394,19 +5411,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5398 "util/configparser.c" /* yacc.c:1646 */ +#line 5415 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2481 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2491 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5406 "util/configparser.c" /* yacc.c:1646 */ +#line 5423 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2492 "./util/configparser.y" /* yacc.c:1646 */ + case 463: +#line 2502 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5415,11 +5432,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5419 "util/configparser.c" /* yacc.c:1646 */ +#line 5436 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2502 "./util/configparser.y" /* yacc.c:1646 */ + case 464: +#line 2512 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5427,79 +5444,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5431 "util/configparser.c" /* yacc.c:1646 */ +#line 5448 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2511 "./util/configparser.y" /* yacc.c:1646 */ + case 465: +#line 2521 "./util/configparser.y" /* yacc.c:1646 */ { 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 5441 "util/configparser.c" /* yacc.c:1646 */ +#line 5458 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2518 "./util/configparser.y" /* yacc.c:1646 */ + case 466: +#line 2528 "./util/configparser.y" /* yacc.c:1646 */ { 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 5451 "util/configparser.c" /* yacc.c:1646 */ +#line 5468 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2525 "./util/configparser.y" /* yacc.c:1646 */ + case 467: +#line 2535 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5461 "util/configparser.c" /* yacc.c:1646 */ +#line 5478 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2532 "./util/configparser.y" /* yacc.c:1646 */ + case 468: +#line 2542 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5471 "util/configparser.c" /* yacc.c:1646 */ +#line 5488 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2539 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2549 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5481 "util/configparser.c" /* yacc.c:1646 */ +#line 5498 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2546 "./util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2556 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5491 "util/configparser.c" /* yacc.c:1646 */ +#line 5508 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2553 "./util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2563 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5499 "util/configparser.c" /* yacc.c:1646 */ +#line 5516 "util/configparser.c" /* yacc.c:1646 */ break; - case 484: -#line 2570 "./util/configparser.y" /* yacc.c:1646 */ + case 486: +#line 2580 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5507,21 +5524,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5511 "util/configparser.c" /* yacc.c:1646 */ +#line 5528 "util/configparser.c" /* yacc.c:1646 */ break; - case 485: -#line 2579 "./util/configparser.y" /* yacc.c:1646 */ + case 487: +#line 2589 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5521 "util/configparser.c" /* yacc.c:1646 */ +#line 5538 "util/configparser.c" /* yacc.c:1646 */ break; - case 486: -#line 2586 "./util/configparser.y" /* yacc.c:1646 */ + case 488: +#line 2596 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5529,11 +5546,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5533 "util/configparser.c" /* yacc.c:1646 */ +#line 5550 "util/configparser.c" /* yacc.c:1646 */ break; - case 487: -#line 2595 "./util/configparser.y" /* yacc.c:1646 */ + case 489: +#line 2605 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5541,31 +5558,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5545 "util/configparser.c" /* yacc.c:1646 */ +#line 5562 "util/configparser.c" /* yacc.c:1646 */ break; - case 488: -#line 2604 "./util/configparser.y" /* yacc.c:1646 */ + case 490: +#line 2614 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5555 "util/configparser.c" /* yacc.c:1646 */ +#line 5572 "util/configparser.c" /* yacc.c:1646 */ break; - case 489: -#line 2611 "./util/configparser.y" /* yacc.c:1646 */ + case 491: +#line 2621 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5565 "util/configparser.c" /* yacc.c:1646 */ +#line 5582 "util/configparser.c" /* yacc.c:1646 */ break; - case 490: -#line 2618 "./util/configparser.y" /* yacc.c:1646 */ + case 492: +#line 2628 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5574,11 +5591,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5578 "util/configparser.c" /* yacc.c:1646 */ +#line 5595 "util/configparser.c" /* yacc.c:1646 */ break; - case 491: -#line 2628 "./util/configparser.y" /* yacc.c:1646 */ + case 493: +#line 2638 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5587,11 +5604,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5591 "util/configparser.c" /* yacc.c:1646 */ +#line 5608 "util/configparser.c" /* yacc.c:1646 */ break; - case 492: -#line 2638 "./util/configparser.y" /* yacc.c:1646 */ + case 494: +#line 2648 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5600,11 +5617,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5604 "util/configparser.c" /* yacc.c:1646 */ +#line 5621 "util/configparser.c" /* yacc.c:1646 */ break; - case 493: -#line 2648 "./util/configparser.y" /* yacc.c:1646 */ + case 495: +#line 2658 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5613,11 +5630,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5617 "util/configparser.c" /* yacc.c:1646 */ +#line 5634 "util/configparser.c" /* yacc.c:1646 */ break; - case 494: -#line 2658 "./util/configparser.y" /* yacc.c:1646 */ + case 496: +#line 2668 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5626,11 +5643,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5630 "util/configparser.c" /* yacc.c:1646 */ +#line 5647 "util/configparser.c" /* yacc.c:1646 */ break; - case 495: -#line 2668 "./util/configparser.y" /* yacc.c:1646 */ + case 497: +#line 2678 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5639,29 +5656,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5643 "util/configparser.c" /* yacc.c:1646 */ +#line 5660 "util/configparser.c" /* yacc.c:1646 */ break; - case 496: -#line 2678 "./util/configparser.y" /* yacc.c:1646 */ + case 498: +#line 2688 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5651 "util/configparser.c" /* yacc.c:1646 */ +#line 5668 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2687 "./util/configparser.y" /* yacc.c:1646 */ + case 502: +#line 2697 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5661 "util/configparser.c" /* yacc.c:1646 */ +#line 5678 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2693 "./util/configparser.y" /* yacc.c:1646 */ + case 503: +#line 2703 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5670,21 +5687,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5674 "util/configparser.c" /* yacc.c:1646 */ +#line 5691 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2703 "./util/configparser.y" /* yacc.c:1646 */ + case 504: +#line 2713 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 5684 "util/configparser.c" /* yacc.c:1646 */ +#line 5701 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2710 "./util/configparser.y" /* yacc.c:1646 */ + case 505: +#line 2720 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5692,30 +5709,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5696 "util/configparser.c" /* yacc.c:1646 */ +#line 5713 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2719 "./util/configparser.y" /* yacc.c:1646 */ + case 506: +#line 2729 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5707 "util/configparser.c" /* yacc.c:1646 */ +#line 5724 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2727 "./util/configparser.y" /* yacc.c:1646 */ + case 507: +#line 2737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5715 "util/configparser.c" /* yacc.c:1646 */ +#line 5732 "util/configparser.c" /* yacc.c:1646 */ break; - case 518: -#line 2743 "./util/configparser.y" /* yacc.c:1646 */ + case 520: +#line 2753 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5723,11 +5740,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5727 "util/configparser.c" /* yacc.c:1646 */ +#line 5744 "util/configparser.c" /* yacc.c:1646 */ break; - case 519: -#line 2753 "./util/configparser.y" /* yacc.c:1646 */ + case 521: +#line 2763 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5735,21 +5752,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5739 "util/configparser.c" /* yacc.c:1646 */ +#line 5756 "util/configparser.c" /* yacc.c:1646 */ break; - case 520: -#line 2762 "./util/configparser.y" /* yacc.c:1646 */ + case 522: +#line 2772 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5749 "util/configparser.c" /* yacc.c:1646 */ +#line 5766 "util/configparser.c" /* yacc.c:1646 */ break; - case 521: -#line 2769 "./util/configparser.y" /* yacc.c:1646 */ + case 523: +#line 2779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5757,21 +5774,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 5761 "util/configparser.c" /* yacc.c:1646 */ +#line 5778 "util/configparser.c" /* yacc.c:1646 */ break; - case 522: -#line 2778 "./util/configparser.y" /* yacc.c:1646 */ + case 524: +#line 2788 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 5771 "util/configparser.c" /* yacc.c:1646 */ +#line 5788 "util/configparser.c" /* yacc.c:1646 */ break; - case 523: -#line 2785 "./util/configparser.y" /* yacc.c:1646 */ + case 525: +#line 2795 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5779,22 +5796,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 5783 "util/configparser.c" /* yacc.c:1646 */ +#line 5800 "util/configparser.c" /* yacc.c:1646 */ break; - case 524: -#line 2794 "./util/configparser.y" /* yacc.c:1646 */ + case 526: +#line 2804 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5794 "util/configparser.c" /* yacc.c:1646 */ +#line 5811 "util/configparser.c" /* yacc.c:1646 */ break; - case 525: -#line 2802 "./util/configparser.y" /* yacc.c:1646 */ + case 527: +#line 2812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5806,22 +5823,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5810 "util/configparser.c" /* yacc.c:1646 */ +#line 5827 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2815 "./util/configparser.y" /* yacc.c:1646 */ + case 528: +#line 2825 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5821 "util/configparser.c" /* yacc.c:1646 */ +#line 5838 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2823 "./util/configparser.y" /* yacc.c:1646 */ + case 529: +#line 2833 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5833,19 +5850,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5837 "util/configparser.c" /* yacc.c:1646 */ +#line 5854 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2836 "./util/configparser.y" /* yacc.c:1646 */ + case 530: +#line 2846 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5845 "util/configparser.c" /* yacc.c:1646 */ +#line 5862 "util/configparser.c" /* yacc.c:1646 */ break; - case 536: -#line 2846 "./util/configparser.y" /* yacc.c:1646 */ + case 538: +#line 2856 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5859,11 +5876,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5863 "util/configparser.c" /* yacc.c:1646 */ +#line 5880 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2861 "./util/configparser.y" /* yacc.c:1646 */ + case 539: +#line 2871 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5877,11 +5894,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5881 "util/configparser.c" /* yacc.c:1646 */ +#line 5898 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2876 "./util/configparser.y" /* yacc.c:1646 */ + case 540: +#line 2886 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5892,11 +5909,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5896 "util/configparser.c" /* yacc.c:1646 */ +#line 5913 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2888 "./util/configparser.y" /* yacc.c:1646 */ + case 541: +#line 2898 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5910,11 +5927,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5914 "util/configparser.c" /* yacc.c:1646 */ +#line 5931 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2903 "./util/configparser.y" /* yacc.c:1646 */ + case 542: +#line 2913 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5926,11 +5943,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5930 "util/configparser.c" /* yacc.c:1646 */ +#line 5947 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2916 "./util/configparser.y" /* yacc.c:1646 */ + case 543: +#line 2926 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -5940,11 +5957,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 5944 "util/configparser.c" /* yacc.c:1646 */ +#line 5961 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5948 "util/configparser.c" /* yacc.c:1646 */ +#line 5965 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6172,7 +6189,7 @@ yyreturn: #endif return yyresult; } -#line 2926 "./util/configparser.y" /* yacc.c:1906 */ +#line 2936 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index b6585824a..966998589 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -304,7 +304,8 @@ extern int yydebug; VAR_LOG_SERVFAIL = 514, VAR_DENY_ANY = 515, VAR_UNKNOWN_SERVER_TIME_LIMIT = 516, - VAR_LOG_TAG_QUERYREPLY = 517 + VAR_LOG_TAG_QUERYREPLY = 517, + VAR_STREAM_WAIT_SIZE = 518 }; #endif /* Tokens. */ @@ -568,6 +569,7 @@ extern int yydebug; #define VAR_DENY_ANY 515 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 516 #define VAR_LOG_TAG_QUERYREPLY 517 +#define VAR_STREAM_WAIT_SIZE 518 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -578,7 +580,7 @@ union YYSTYPE char* str; -#line 582 "util/configparser.h" /* yacc.c:1909 */ +#line 584 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index f01073d44..c96700577 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -165,6 +165,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 %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -263,7 +264,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_tls_cert_bundle | server_tls_additional_port | server_low_rtt | server_fast_server_permil | server_fast_server_num | server_tls_win_cert | server_tcp_connection_limit | server_log_servfail | server_deny_any | - server_unknown_server_time_limit | server_log_tag_queryreply + server_unknown_server_time_limit | server_log_tag_queryreply | + server_stream_wait_size ; stubstart: VAR_STUB_ZONE { @@ -1127,6 +1129,14 @@ server_ip_freebind: VAR_IP_FREEBIND STRING_ARG free($2); } ; +server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG + { + OUTYY(("P(server_stream_wait_size:%s)\n", $2)); + if(!cfg_parse_memsize($2, &cfg_parser->cfg->stream_wait_size)) + yyerror("memory size expected"); + free($2); + } + ; server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG { OUTYY(("P(server_edns_buffer_size:%s)\n", $2)); From c10712a82bd47f4042f62489f8f1c2928c8ac240 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 08:27:49 +0000 Subject: [PATCH 022/117] - Fix space calculation for tcp req buffer size. git-svn-id: file:///svn/unbound/trunk@5047 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ services/listen_dnsport.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 3c859dd47..d90bda71f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +22 January 2018: Wouter + - Fix space calculation for tcp req buffer size. + 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. - Unit test for tcp request reorder and timeouts. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index c1d1c655e..ef65aeda1 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1821,7 +1821,7 @@ tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len) verbose(VERB_ALGO, "drop stream reply, no space left, in stream-wait-size"); return 0; } - stream_wait_count += stream_wait_max; + stream_wait_count += space; lock_basic_unlock(&stream_wait_count_lock); /* find last element */ From dec68aa9a9e81d90d0b8190840dfc739756ec564 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 08:52:23 +0000 Subject: [PATCH 023/117] - Doc for stream-wait-size and unit test. git-svn-id: file:///svn/unbound/trunk@5048 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + doc/unbound.conf.5.in | 10 ++ testdata/tcp_req_size.tdir/tcp_req_size.conf | 25 +++++ testdata/tcp_req_size.tdir/tcp_req_size.dsc | 16 +++ testdata/tcp_req_size.tdir/tcp_req_size.post | 11 ++ testdata/tcp_req_size.tdir/tcp_req_size.pre | 31 ++++++ testdata/tcp_req_size.tdir/tcp_req_size.test | 100 ++++++++++++++++++ .../tcp_req_size.tdir/tcp_req_size.testns | 63 +++++++++++ 8 files changed, 257 insertions(+) create mode 100644 testdata/tcp_req_size.tdir/tcp_req_size.conf create mode 100644 testdata/tcp_req_size.tdir/tcp_req_size.dsc create mode 100644 testdata/tcp_req_size.tdir/tcp_req_size.post create mode 100644 testdata/tcp_req_size.tdir/tcp_req_size.pre create mode 100644 testdata/tcp_req_size.tdir/tcp_req_size.test create mode 100644 testdata/tcp_req_size.tdir/tcp_req_size.testns diff --git a/doc/Changelog b/doc/Changelog index d90bda71f..81a4edcbb 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. + - Doc for stream-wait-size and unit test. 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index c18616273..1ff4c2de2 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -207,6 +207,16 @@ Maximum UDP response size (not applied to TCP response). 65536 disables the udp response size maximum, and uses the choice from the client, always. Suggested values are 512 to 4096. Default is 4096. .TP +.B stream\-wait\-size: \fI +Number of bytes size maximum to use for waiting stream buffers. Default is +4 megabytes. A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, +megabytes or gigabytes (1024*1024 bytes in a megabyte). As TCP and TLS streams +queue up multiple results, the amount of memory used for these buffers does +not exceed this number, otherwise the responses are dropped. This manages +the total memory usage of the server (under heavy use), the number of requests +that can be queued up per connection is also limited, with further requests +waiting in TCP buffers. +.TP .B msg\-buffer\-size: \fI Number of bytes size of the message buffers. Default is 65552 bytes, enough for 64 Kb packets, the maximum DNS message size. No message larger than this diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.conf b/testdata/tcp_req_size.tdir/tcp_req_size.conf new file mode 100644 index 000000000..d8d63ae90 --- /dev/null +++ b/testdata/tcp_req_size.tdir/tcp_req_size.conf @@ -0,0 +1,25 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + # extremely low number to make connections fail + stream-wait-size: 10 + + local-zone: "example.net" static + local-data: "www1.example.net. IN A 1.2.3.1" + local-data: "www2.example.net. IN A 1.2.3.2" + local-data: "www3.example.net. IN A 1.2.3.3" + tcp-upstream: yes + local-zone: "drop.net" deny + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.dsc b/testdata/tcp_req_size.tdir/tcp_req_size.dsc new file mode 100644 index 000000000..1b7ca143c --- /dev/null +++ b/testdata/tcp_req_size.tdir/tcp_req_size.dsc @@ -0,0 +1,16 @@ +BaseName: tcp_req_size +Version: 1.0 +Description: Test tcp request wait size. +CreationDate: Tue Jan 22 09:37:00 CET 2018 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: tcp_req_size.pre +Post: tcp_req_size.post +Test: tcp_req_size.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.post b/testdata/tcp_req_size.tdir/tcp_req_size.post new file mode 100644 index 000000000..16fd73642 --- /dev/null +++ b/testdata/tcp_req_size.tdir/tcp_req_size.post @@ -0,0 +1,11 @@ +# #-- tcp_req_size.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +cat unbound.log diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.pre b/testdata/tcp_req_size.tdir/tcp_req_size.pre new file mode 100644 index 000000000..66469170c --- /dev/null +++ b/testdata/tcp_req_size.tdir/tcp_req_size.pre @@ -0,0 +1,31 @@ +# #-- tcp_req_size.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 +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT tcp_req_size.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_size.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -vvvv -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/tcp_req_size.tdir/tcp_req_size.test b/testdata/tcp_req_size.tdir/tcp_req_size.test new file mode 100644 index 000000000..0260b2117 --- /dev/null +++ b/testdata/tcp_req_size.tdir/tcp_req_size.test @@ -0,0 +1,100 @@ +# #-- tcp_req_size.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# this test query should just work (server is up) +echo "> query www1.example.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +echo "OK" + +# out of order requests, the example.com elements take 2 seconds to wait. +# www3.example.com present twice, answered twice. +# this queues one answer in the wait buffers, and that exceeds the buffer. +echo "" +echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.net" outfile | grep "1.2.3.1"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www2.example.net" outfile | grep "1.2.3.2"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "www3.example.net" outfile | grep "1.2.3.3"; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi +if grep "stream closed" outfile; then + echo "content OK" +else + echo "result contents not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "result contents not OK" + exit 1 +fi + +echo "OK" +exit 0 diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.testns b/testdata/tcp_req_size.tdir/tcp_req_size.testns new file mode 100644 index 000000000..d38af883e --- /dev/null +++ b/testdata/tcp_req_size.tdir/tcp_req_size.testns @@ -0,0 +1,63 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +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 NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.45 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.46 +ENTRY_END From 4481b9584c571686f8fc56c0b58f706592b1b1c3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 10:29:01 +0000 Subject: [PATCH 024/117] Fix test failure. git-svn-id: file:///svn/unbound/trunk@5049 be551aaa-1e26-0410-a405-d3ace91eadb9 --- testdata/tcp_req_size.tdir/tcp_req_size.testns | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.testns b/testdata/tcp_req_size.tdir/tcp_req_size.testns index d38af883e..88219e51f 100644 --- a/testdata/tcp_req_size.tdir/tcp_req_size.testns +++ b/testdata/tcp_req_size.tdir/tcp_req_size.testns @@ -25,7 +25,7 @@ ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR -ADJUST copy_id +ADJUST copy_id sleep=1 SECTION QUESTION www3 IN A SECTION ANSWER From 8b18d1a0a4a957c8fd4046e66cddb4f78dbf51d5 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 13:20:06 +0000 Subject: [PATCH 025/117] - unbound-control stats has mem.streamwait that counts TCP and TLS waiting result buffers. git-svn-id: file:///svn/unbound/trunk@5050 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/remote.c | 8 ++++++-- daemon/stats.c | 1 + doc/Changelog | 2 ++ doc/unbound-control.8.in | 4 ++++ libunbound/unbound.h | 2 ++ smallapp/unbound-control.c | 6 ++++-- 6 files changed, 19 insertions(+), 4 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 2c3e7ce5b..b25cf1798 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -789,7 +789,8 @@ print_longnum(RES* ssl, const char* desc, size_t x) /** print mem stats */ static int -print_mem(RES* ssl, struct worker* worker, struct daemon* daemon) +print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, + struct ub_stats_info* s) { size_t msg, rrset, val, iter, respip; #ifdef CLIENT_SUBNET @@ -847,6 +848,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon) dnscrypt_nonce)) return 0; #endif /* USE_DNSCRYPT */ + if(!print_longnum(ssl, "mem.streamwait"SQ, + (size_t)s->svr.mem_stream_wait)) + return 0; return 1; } @@ -1088,7 +1092,7 @@ do_stats(RES* ssl, struct daemon_remote* rc, int reset) if(!print_uptime(ssl, rc->worker, reset)) return; if(daemon->cfg->stat_extended) { - if(!print_mem(ssl, rc->worker, daemon)) + if(!print_mem(ssl, rc->worker, daemon, &total)) return; if(!print_hist(ssl, &total)) return; diff --git a/daemon/stats.c b/daemon/stats.c index cff01d903..9a4afff4b 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -328,6 +328,7 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) } lock_rw_unlock(&worker->env.auth_zones->lock); } + s->svr.mem_stream_wait = tcp_req_info_get_stream_buffer_size(); /* Set neg cache usage numbers */ set_neg_cache_stats(worker, &s->svr, reset); diff --git a/doc/Changelog b/doc/Changelog index 81a4edcbb..152e6011b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. - Doc for stream-wait-size and unit test. + - unbound-control stats has mem.streamwait that counts TCP and TLS + waiting result buffers. 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index da042c816..f5944a75f 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -499,6 +499,10 @@ Memory in bytes in use by the iterator module. Memory in bytes in use by the validator module. Includes the key cache and negative cache. .TP +.I mem.streamwait +Memory in bytes in used by the TCP and TLS stream wait buffers. These are +answers waiting to be written back to the clients. +.TP .I histogram...to.. Shows a histogram, summed over all threads. Every element counts the recursive queries whose reply time fit between the lower and upper bound. diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 90766b062..3fa5b13de 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -770,6 +770,8 @@ struct ub_server_stats { /** number of queries answered from edns-subnet specific data, and * the answer was from the edns-subnet cache. */ long long num_query_subnet_cache; + /** number of bytes in the stream wait buffers */ + long long mem_stream_wait; }; /** diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index b947198ef..dd00e4940 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -247,7 +247,8 @@ static void print_uptime(struct ub_shm_stat_info* shm_stat) } /** print memory usage */ -static void print_mem(struct ub_shm_stat_info* shm_stat) +static void print_mem(struct ub_shm_stat_info* shm_stat, + struct ub_stats_info* s) { PR_LL("mem.cache.rrset", shm_stat->mem.rrset); PR_LL("mem.cache.message", shm_stat->mem.msg); @@ -266,6 +267,7 @@ static void print_mem(struct ub_shm_stat_info* shm_stat) PR_LL("mem.cache.dnscrypt_nonce", shm_stat->mem.dnscrypt_nonce); #endif + PR_LL("mem.streamwait", s->svr.mem_stream_wait); } /** print histogram */ @@ -399,7 +401,7 @@ static void do_stats_shm(struct config_file* cfg, struct ub_stats_info* stats, pr_stats("total", &stats[0]); print_uptime(shm_stat); if(cfg->stat_extended) { - print_mem(shm_stat); + print_mem(shm_stat, &stats[0]); print_hist(stats); print_extended(stats); } From ef1baf94f7186cf50c980b8022dfbc59da64fdf6 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 13:35:33 +0000 Subject: [PATCH 026/117] Fix lint and unit test. git-svn-id: file:///svn/unbound/trunk@5051 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/stats.c | 3 ++- testcode/fake_event.c | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/daemon/stats.c b/daemon/stats.c index 9a4afff4b..6b7b03ea5 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -328,7 +328,8 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) } lock_rw_unlock(&worker->env.auth_zones->lock); } - s->svr.mem_stream_wait = tcp_req_info_get_stream_buffer_size(); + s->svr.mem_stream_wait = + (long long)tcp_req_info_get_stream_buffer_size(); /* Set neg cache usage numbers */ set_neg_cache_stats(worker, &s->svr, reset); diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 5407999d5..016f70e3d 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1816,4 +1816,10 @@ tcp_req_info_remove_mesh_state(struct tcp_req_info* ATTR_UNUSED(req), log_assert(0); } +size_t +tcp_req_info_get_stream_buffer_size(void) +{ + return 0; +} + /*********** End of Dummy routines ***********/ From 51caffb4543cca80b9f04890b179db2e87dc041b Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 15:36:58 +0000 Subject: [PATCH 027/117] - Fix for #4219: secondaries not updated after serial change, unbound falls back to AXFR after IXFR gives several timeout failures. git-svn-id: file:///svn/unbound/trunk@5052 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ services/authzone.c | 18 ++++++++++++++++++ services/authzone.h | 2 ++ 3 files changed, 22 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 152e6011b..2b69fde83 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,8 @@ - Doc for stream-wait-size and unit test. - unbound-control stats has mem.streamwait that counts TCP and TLS waiting result buffers. + - Fix for #4219: secondaries not updated after serial change, unbound + falls back to AXFR after IXFR gives several timeout failures. 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. diff --git a/services/authzone.c b/services/authzone.c index ff8b23e62..8f74fe3eb 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -88,6 +88,9 @@ #define AUTH_HTTPS_PORT 443 /* max depth for nested $INCLUDEs */ #define MAX_INCLUDE_DEPTH 10 +/** number of timeouts before we fallback from IXFR to AXFR, + * because some versions of servers (eg. dnsmasq) drop IXFR packets. */ +#define NUM_TIMEOUTS_FALLBACK_IXFR 3 /** pick up nextprobe task to start waiting to perform transfer actions */ static void xfr_set_timeout(struct auth_xfer* xfr, struct module_env* env, @@ -5636,6 +5639,20 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, * and continue task_transfer*/ verbose(VERB_ALGO, "xfr stopped, connection lost to %s", xfr->task_transfer->master->host); + + /* see if IXFR caused the failure, if so, try AXFR */ + if(xfr->task_transfer->on_ixfr) { + xfr->task_transfer->ixfr_possible_timeout_count++; + if(xfr->task_transfer->ixfr_possible_timeout_count >= + NUM_TIMEOUTS_FALLBACK_IXFR) { + verbose(VERB_ALGO, "xfr to %s, fallback " + "from IXFR to AXFR (because of timeouts)", + xfr->task_transfer->master->host); + xfr->task_transfer->ixfr_fail = 1; + gonextonfail = 0; + } + } + failed: /* delete transferred data from list */ auth_chunks_delete(xfr->task_transfer); @@ -5645,6 +5662,7 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, xfr_transfer_nexttarget_or_end(xfr, env); return 0; } + xfr->task_transfer->ixfr_possible_timeout_count = 0; /* handle returned packet */ /* if it fails, cleanup and end this transfer */ diff --git a/services/authzone.h b/services/authzone.h index 243f3e4a0..4706803a8 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -378,6 +378,8 @@ struct auth_transfer { * data or add of duplicate data). Flag is cleared once the retry * with axfr is done. */ int ixfr_fail; + /** we saw an ixfr-indicating timeout, count of them */ + int ixfr_possible_timeout_count; /** we are doing IXFR right now */ int on_ixfr; /** did we detect the current AXFR/IXFR serial number yet, 0 not yet, From 55f560a3ca6aff3b8326645ddc268c6762b4a338 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 22 Jan 2019 15:44:09 +0000 Subject: [PATCH 028/117] - Fix that auth zone after IXFR fallback tries the same master. git-svn-id: file:///svn/unbound/trunk@5053 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/authzone.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 2b69fde83..70f8dd59e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -5,6 +5,7 @@ waiting result buffers. - Fix for #4219: secondaries not updated after serial change, unbound falls back to AXFR after IXFR gives several timeout failures. + - Fix that auth zone after IXFR fallback tries the same master. 21 January 2018: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. diff --git a/services/authzone.c b/services/authzone.c index 8f74fe3eb..69163b981 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5658,7 +5658,8 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, auth_chunks_delete(xfr->task_transfer); comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; - xfr_transfer_nextmaster(xfr); + if(gonextonfail) + xfr_transfer_nextmaster(xfr); xfr_transfer_nexttarget_or_end(xfr, env); return 0; } From 8ae9f26bce3aa776cf0ead81e4eeca8a1fa65ea6 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 08:37:00 +0000 Subject: [PATCH 029/117] - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites options for unbound.conf. git-svn-id: file:///svn/unbound/trunk@5054 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/unbound.c | 13 +++++++++++++ doc/Changelog | 4 ++++ doc/example.conf.in | 5 +++++ util/config_file.c | 4 ++++ util/config_file.h | 4 ++++ util/configlexer.lex | 2 ++ util/configparser.y | 18 ++++++++++++++++-- 7 files changed, 48 insertions(+), 2 deletions(-) diff --git a/daemon/unbound.c b/daemon/unbound.c index 020e45303..d5a591e0b 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -67,6 +67,7 @@ #ifdef HAVE_GRP_H #include #endif +#include #ifndef S_SPLINT_S /* splint chokes on this system header file */ @@ -430,6 +431,18 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, if(!(daemon->listen_sslctx = listen_sslctx_create( cfg->ssl_service_key, cfg->ssl_service_pem, NULL))) fatal_exit("could not set up listen SSL_CTX"); + if(cfg->tls_ciphers && cfg->tls_ciphers[0]) { + if (!SSL_CTX_set_cipher_list(daemon->listen_sslctx, cfg->tls_ciphers)) { + fatal_exit("faild to set tls-cipher %s",cfg->tls_ciphers); + } + } +#if OPENSSL_VERSION_NUMBER >= 0x1010101 + if(cfg->tls_ciphersuites && cfg->tls_ciphersuites[0]) { + if (!SSL_CTX_set_ciphersuites(daemon->listen_sslctx, cfg->tls_ciphersuites)) { + fatal_exit("faild to set tls-ciphersuites %s",cfg->tls_ciphersuites); + } + } +#endif } if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert))) diff --git a/doc/Changelog b/doc/Changelog index 70f8dd59e..d07861035 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +23 January 2018: Wouter + - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites + options for unbound.conf. + 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. - Doc for stream-wait-size and unit test. diff --git a/doc/example.conf.in b/doc/example.conf.in index 2ec538956..ca4070917 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -715,6 +715,11 @@ server: # tls-service-pem: "path/to/publiccertfile.pem" # tls-port: 853 + # cipher setting for TLSv1.2 + # tls-chiphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" + # 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" + # request upstream over TLS (with plain DNS inside the TLS stream). # Default is no. Can be turned on and off with unbound-control. # tls-upstream: no diff --git a/util/config_file.c b/util/config_file.c index 954517341..e49bc8f00 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -487,6 +487,8 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST("additional-tls-port:", tls_additional_port) else S_STRLIST("tls-additional-ports:", tls_additional_port) else S_STRLIST("tls-additional-port:", tls_additional_port) + else S_STR("tls_ciphers:", tls_ciphers) + else S_STR("tls_ciphersuites:", tls_ciphersuites) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -924,6 +926,8 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) else O_YNO(opt, "tls-win-cert", tls_win_cert) else O_LST(opt, "tls-additional-port", tls_additional_port) + else O_STR(opt, "tls-ciphers", tls_ciphers) + else O_STR(opt, "tls-ciphersuites", tls_ciphersuites) 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 0f50c0e71..3a8efce8d 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -120,6 +120,10 @@ struct config_file { int tls_win_cert; /** additional tls ports */ struct config_strlist* tls_additional_port; + /** TLS chiper **/ + char* tls_ciphers; + /** TLS chipersuites (TLSv1.3) **/ + char* tls_ciphersuites; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; diff --git a/util/configlexer.lex b/util/configlexer.lex index 60373e515..beec31396 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -245,6 +245,8 @@ additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-additional-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } +tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) } +tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) } 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.y b/util/configparser.y index c96700577..440e9afec 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -165,7 +165,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 +%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -265,7 +265,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_fast_server_permil | server_fast_server_num | server_tls_win_cert | server_tcp_connection_limit | server_log_servfail | server_deny_any | server_unknown_server_time_limit | server_log_tag_queryreply | - server_stream_wait_size + server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites ; stubstart: VAR_STUB_ZONE { @@ -820,6 +820,20 @@ server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG yyerror("out of memory"); } ; +server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG + { + OUTYY(("P(server_tls_ciphers:%s)\n", $2)); + free(cfg_parser->cfg->tls_ciphers); + cfg_parser->cfg->tls_ciphers = $2; + } + ; +server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG + { + OUTYY(("P(server_tls_ciphersuites:%s)\n", $2)); + free(cfg_parser->cfg->tls_ciphersuites); + cfg_parser->cfg->tls_ciphersuites = $2; + } + ; server_use_systemd: VAR_USE_SYSTEMD STRING_ARG { OUTYY(("P(server_use_systemd:%s)\n", $2)); From 5d82b7c421e0d4495e65911f1200e7e5a7c9b57c Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 08:45:16 +0000 Subject: [PATCH 030/117] - Fixes for the patch, and man page entry. git-svn-id: file:///svn/unbound/trunk@5055 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/unbound.c | 4 ++-- doc/Changelog | 1 + doc/unbound.conf.5.in | 8 ++++++++ util/config_file.c | 6 ++++-- util/config_file.h | 4 ++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/daemon/unbound.c b/daemon/unbound.c index d5a591e0b..193bb1231 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -433,13 +433,13 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, fatal_exit("could not set up listen SSL_CTX"); if(cfg->tls_ciphers && cfg->tls_ciphers[0]) { if (!SSL_CTX_set_cipher_list(daemon->listen_sslctx, cfg->tls_ciphers)) { - fatal_exit("faild to set tls-cipher %s",cfg->tls_ciphers); + fatal_exit("failed to set tls-cipher %s", cfg->tls_ciphers); } } #if OPENSSL_VERSION_NUMBER >= 0x1010101 if(cfg->tls_ciphersuites && cfg->tls_ciphersuites[0]) { if (!SSL_CTX_set_ciphersuites(daemon->listen_sslctx, cfg->tls_ciphersuites)) { - fatal_exit("faild to set tls-ciphersuites %s",cfg->tls_ciphersuites); + fatal_exit("failed to set tls-ciphersuites %s", cfg->tls_ciphersuites); } } #endif diff --git a/doc/Changelog b/doc/Changelog index d07861035..7f2b6dc95 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 23 January 2018: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites options for unbound.conf. + - Fixes for the patch, and man page entry. 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 1ff4c2de2..d23292725 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -504,6 +504,14 @@ List portnumbers as tls\-additional\-port, and when interfaces are defined, eg. with the @port suffix, as this port number, they provide dns over TLS service. Can list multiple, each on a new statement. .TP +.B tls\-ciphers: \fI +Set the list of ciphers to allow when serving TLS. Use "" for defaults, +and that is the default. +.TP +.B tls\-ciphersuites: \fI +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 use\-systemd: \fI Enable or disable systemd socket activation. Default is no. diff --git a/util/config_file.c b/util/config_file.c index e49bc8f00..30d537273 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -487,8 +487,8 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST("additional-tls-port:", tls_additional_port) else S_STRLIST("tls-additional-ports:", tls_additional_port) else S_STRLIST("tls-additional-port:", tls_additional_port) - else S_STR("tls_ciphers:", tls_ciphers) - else S_STR("tls_ciphersuites:", tls_ciphersuites) + else S_STR("tls-ciphers:", tls_ciphers) + else S_STR("tls-ciphersuites:", tls_ciphersuites) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -1362,6 +1362,8 @@ config_delete(struct config_file* cfg) free(cfg->ssl_service_pem); free(cfg->tls_cert_bundle); config_delstrlist(cfg->tls_additional_port); + free(cfg->tls_ciphers); + free(cfg->tls_ciphersuites); free(cfg->log_identity); config_del_strarray(cfg->ifs, cfg->num_ifs); config_del_strarray(cfg->out_ifs, cfg->num_out_ifs); diff --git a/util/config_file.h b/util/config_file.h index 3a8efce8d..f61fff269 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -120,9 +120,9 @@ struct config_file { int tls_win_cert; /** additional tls ports */ struct config_strlist* tls_additional_port; - /** TLS chiper **/ + /** TLS ciphers */ char* tls_ciphers; - /** TLS chipersuites (TLSv1.3) **/ + /** TLS chipersuites (TLSv1.3) */ char* tls_ciphersuites; /** outgoing port range number of ports (per thread) */ From 2f52ecdd9cc6b93f594a5148b548b82e4ad95ce3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 08:46:33 +0000 Subject: [PATCH 031/117] lex and yacc. git-svn-id: file:///svn/unbound/trunk@5056 be551aaa-1e26-0410-a405-d3ace91eadb9 --- util/configlexer.c | 4143 ++++++++++++++++++++++--------------------- util/configparser.c | 2129 +++++++++++----------- util/configparser.h | 8 +- 3 files changed, 3167 insertions(+), 3113 deletions(-) diff --git a/util/configlexer.c b/util/configlexer.c index 85ab97e92..1afa122dc 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 288 -#define YY_END_OF_BUFFER 289 +#define YY_NUM_RULES 290 +#define YY_END_OF_BUFFER 291 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,324 +372,325 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2874] = +static yyconst flex_int16_t yy_accept[2887] = { 0, - 1, 1, 270, 270, 274, 274, 278, 278, 282, 282, - 1, 1, 289, 286, 1, 268, 268, 287, 2, 287, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 270, 271, 271, 272, 287, 274, 275, 275, - 276, 287, 281, 278, 279, 279, 280, 287, 282, 283, - 283, 284, 287, 285, 269, 2, 273, 287, 285, 286, - 0, 1, 2, 2, 2, 2, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 1, 1, 272, 272, 276, 276, 280, 280, 284, 284, + 1, 1, 291, 288, 1, 270, 270, 289, 2, 289, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 272, 273, 273, 274, 289, 276, 277, 277, + 278, 289, 283, 280, 281, 281, 282, 289, 284, 285, + 285, 286, 289, 287, 271, 2, 275, 289, 287, 288, + 0, 1, 2, 2, 2, 2, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 270, - 0, 274, 0, 281, 0, 278, 282, 0, 285, 0, - 2, 2, 285, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 272, + 0, 276, 0, 283, 0, 280, 284, 0, 287, 0, + 2, 2, 287, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 285, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 287, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 111, - 286, 286, 286, 286, 286, 286, 286, 285, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 113, + 288, 288, 288, 288, 288, 288, 288, 287, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 93, 286, 286, 286, 286, 286, 286, 8, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 116, 286, 285, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 95, 288, 288, 288, 288, 288, 288, 8, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 118, 288, 287, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 285, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 51, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 211, 286, 14, 15, 286, 18, 17, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 287, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 53, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 213, 288, 14, 15, 288, 18, + 17, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 110, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 195, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 3, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 285, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 112, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 197, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 3, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 261, 286, 286, 260, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 277, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 54, 286, - 235, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 55, 286, 286, 286, 286, 286, + 287, 288, 288, 288, 288, 288, 288, 288, 263, 288, + 288, 262, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 279, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 56, 288, 237, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 57, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 184, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 20, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 135, 286, 286, 277, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 91, 286, 286, 286, - 286, 286, 286, 286, 243, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 186, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 20, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 137, 288, 288, 279, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 93, + 288, 288, 288, 288, 288, 288, 288, 245, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 156, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 134, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 90, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 31, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 158, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 136, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 92, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 31, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 32, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 52, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 109, 286, 286, - 286, 286, 286, 108, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 53, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 157, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 32, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 54, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 111, 288, 288, 288, 288, 288, 110, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 55, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 159, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 42, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 226, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 46, 286, 47, 286, 286, 286, 286, - 286, 94, 286, 95, 286, 286, 286, 286, 92, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 44, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 228, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 48, 288, 49, + 288, 288, 288, 288, 288, 96, 288, 97, 288, 288, + 288, 288, 94, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 7, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 204, 286, 286, 286, 286, 137, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 43, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 7, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 206, 288, + 288, 288, 288, 139, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 45, 288, 288, 288, 288, 288, 288, - 286, 286, 176, 286, 175, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 16, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 56, 286, 286, 286, 286, 286, - 286, 286, 286, 183, 286, 286, 286, 286, 286, 286, - 97, 286, 96, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 167, 286, 286, 286, 286, 286, 286, 286, 286, - 117, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 178, 288, 177, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 16, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 58, + 288, 288, 288, 288, 288, 288, 288, 288, 185, 288, + 288, 288, 288, 288, 288, 99, 288, 98, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 169, 288, 288, + 288, 288, 288, 288, 288, 288, 119, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 75, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 79, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 50, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 170, 171, 286, 286, 286, 237, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 77, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 81, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 52, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 172, 173, + 288, 288, 288, 239, 288, 288, 288, 288, 288, 288, - 6, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 241, 286, 286, 286, 262, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 40, 286, 286, 286, - 286, 286, 286, 286, 286, 163, 286, 286, 286, 112, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 188, 286, 164, 286, 286, 286, 201, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 6, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 243, 288, 288, + 288, 264, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 40, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 42, 288, 288, 288, 288, 288, + 288, 288, 288, 165, 288, 288, 288, 114, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 190, 288, + 166, 288, 288, 288, 203, 288, 288, 288, 288, 288, - 286, 286, 286, 41, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 114, 102, 286, 103, 286, 286, 286, - 101, 286, 286, 286, 286, 286, 286, 286, 286, 132, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 225, 286, 286, 286, 286, 286, 286, 286, 286, - 165, 286, 286, 286, 286, 286, 168, 286, 174, 286, - 286, 286, 286, 286, 200, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 89, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 43, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 116, 104, 288, 105, 288, 288, 288, 103, 288, + 288, 288, 288, 288, 288, 288, 288, 134, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 227, + 288, 288, 288, 288, 288, 288, 288, 288, 167, 288, + 288, 288, 288, 288, 170, 288, 176, 288, 288, 288, + 288, 288, 202, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 91, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 48, 286, 286, 286, 25, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 19, 286, 286, 286, 286, - 26, 35, 286, 142, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 64, 66, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 245, 286, - 286, 286, 212, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 104, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 131, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 50, + 288, 288, 288, 25, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 19, 288, 288, 288, 288, 288, 26, + 35, 288, 144, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 66, 68, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 247, 288, 288, + 288, 214, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 106, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 286, 286, 286, 286, 256, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 136, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 194, 286, 286, 286, 286, 286, 286, 286, 286, 265, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 153, - 286, 286, 286, 286, 286, 286, 286, 286, 98, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 148, 286, 158, 286, - 286, 286, 286, 286, 120, 286, 286, 286, 286, 286, + 133, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 258, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 138, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 196, + 288, 288, 288, 288, 288, 288, 288, 288, 267, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 155, 288, + 288, 288, 288, 288, 288, 288, 288, 100, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 150, 288, 160, 288, - 85, 286, 286, 286, 286, 186, 286, 286, 286, 286, - 286, 286, 202, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 217, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 113, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 152, 286, 286, 286, - 286, 286, 67, 68, 286, 286, 286, 286, 286, 49, - 286, 286, 286, 286, 286, 74, 159, 286, 177, 286, - 205, 286, 286, 169, 238, 286, 286, 286, 286, 286, - 60, 286, 161, 286, 286, 286, 286, 286, 9, 286, - 286, 286, 88, 286, 286, 286, 286, 230, 286, 286, + 288, 288, 288, 288, 122, 288, 288, 288, 288, 288, + 87, 288, 288, 288, 288, 188, 288, 288, 288, 288, + 288, 288, 204, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 219, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 115, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 154, 288, 288, 288, + 288, 288, 69, 70, 288, 288, 288, 288, 288, 51, + 288, 288, 288, 288, 288, 76, 161, 288, 179, 288, + 207, 288, 288, 171, 240, 288, 288, 288, 288, 288, + 62, 288, 163, 288, 288, 288, 288, 288, 9, 288, - 286, 185, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 151, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 138, 286, 244, 286, - 286, 286, 286, 216, 286, 286, 286, 286, 286, 286, - 286, 286, 196, 286, 286, 286, 286, 236, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 90, 288, 288, 288, 288, 232, 288, 288, + 288, 187, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 153, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 140, 288, 246, + 288, 288, 288, 288, 218, 288, 288, 288, 288, 288, + 288, 288, 288, 198, 288, 288, 288, 288, 238, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 286, 286, 259, 286, 160, 286, 286, 286, 286, 286, - 286, 286, 59, 61, 286, 286, 286, 286, 286, 286, - 286, 87, 286, 286, 286, 286, 228, 286, 286, 286, - 240, 286, 286, 286, 286, 286, 286, 286, 190, 33, - 27, 29, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 34, 28, 30, 286, 286, 286, 286, 286, 286, - 286, 84, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 192, - 189, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 58, 286, 286, 115, 286, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 261, 288, 162, 288, 288, 288, 288, + 288, 288, 288, 61, 63, 288, 288, 288, 288, 288, + 288, 288, 89, 288, 288, 288, 288, 230, 288, 288, + 288, 242, 288, 288, 288, 288, 288, 288, 288, 192, + 33, 27, 29, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 34, 288, 28, 30, 288, 288, 288, 288, + 288, 288, 288, 86, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 194, 191, 288, 288, 288, 288, 288, 288, 288, - 105, 286, 286, 286, 286, 286, 286, 286, 286, 133, - 13, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 254, 286, 257, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 12, 286, 286, 21, 286, 286, 286, - 234, 286, 286, 286, 242, 286, 62, 286, 198, 286, - 286, 191, 286, 286, 57, 286, 286, 286, 286, 22, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 147, 146, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 193, 187, 286, 203, 286, 286, 246, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 288, 288, 288, 288, 288, 60, 288, 288, + 117, 288, 107, 288, 288, 288, 288, 288, 288, 288, + 288, 135, 13, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 256, 288, 259, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 12, 288, 288, 21, 288, + 288, 288, 236, 288, 288, 288, 244, 288, 64, 288, + 200, 288, 288, 193, 288, 288, 59, 288, 288, 288, + 288, 22, 288, 41, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 149, 148, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 195, 189, 288, 205, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 69, 286, 286, 286, 229, 286, - 286, 286, 286, 173, 286, 286, 286, 286, 197, 286, - 286, 286, 286, 286, 286, 286, 286, 263, 264, 144, - 63, 286, 286, 154, 286, 286, 99, 100, 286, 286, - 286, 139, 286, 141, 286, 178, 286, 286, 286, 286, - 145, 286, 286, 206, 286, 286, 286, 286, 286, 286, - 286, 122, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 213, 286, 286, 286, 23, 286, 239, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 288, 248, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 71, 288, 288, + 288, 231, 288, 288, 288, 288, 175, 288, 288, 288, + 288, 199, 288, 288, 288, 288, 288, 288, 288, 288, + 265, 266, 146, 65, 288, 288, 156, 288, 288, 101, + 102, 288, 288, 288, 141, 288, 143, 288, 180, 288, + 288, 288, 288, 147, 288, 288, 208, 288, 288, 288, + 288, 288, 288, 288, 124, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 215, 288, 288, 288, - 286, 179, 286, 286, 227, 286, 258, 286, 172, 286, - 286, 286, 286, 44, 286, 286, 286, 286, 4, 286, - 286, 121, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 209, 36, 37, - 286, 286, 286, 286, 286, 286, 286, 247, 286, 286, - 286, 286, 286, 286, 215, 286, 286, 286, 182, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 72, 286, - 45, 233, 286, 210, 286, 286, 286, 286, 11, 286, - 286, 286, 286, 286, 286, 286, 180, 76, 286, 39, - 286, 286, 286, 286, 286, 286, 286, 150, 286, 286, + 23, 288, 241, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 181, 288, 288, 229, 288, 260, + 288, 174, 288, 288, 288, 288, 46, 288, 288, 288, + 288, 4, 288, 288, 123, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 211, 36, 37, 288, 288, 288, 288, 288, 288, 288, + 249, 288, 288, 288, 288, 288, 288, 217, 288, 288, + 288, 184, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 74, 288, 47, 235, 288, 212, 288, 288, 288, + 288, 11, 288, 288, 288, 288, 288, 288, 288, 182, - 286, 286, 286, 124, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 214, 118, 286, 286, 106, 107, 286, - 286, 286, 78, 82, 77, 286, 70, 286, 286, 286, - 286, 286, 10, 286, 286, 286, 231, 286, 286, 267, - 38, 286, 286, 286, 286, 149, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 83, 81, 286, 71, 255, 286, - 286, 286, 286, 286, 286, 286, 166, 286, 286, 286, - 181, 286, 286, 286, 286, 286, 286, 286, 140, 65, - 286, 286, 286, 286, 286, 248, 286, 286, 286, 286, + 78, 288, 39, 288, 288, 288, 288, 288, 288, 288, + 152, 288, 288, 288, 288, 288, 126, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 216, 120, 288, 288, + 108, 109, 288, 288, 288, 80, 84, 79, 288, 72, + 288, 288, 288, 288, 288, 10, 288, 288, 288, 233, + 288, 288, 269, 38, 288, 288, 288, 288, 151, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 85, 83, 288, + 73, 257, 288, 288, 288, 288, 288, 288, 288, 168, + 288, 288, 288, 183, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 119, 286, 80, 125, 126, 129, 130, - 127, 128, 73, 286, 232, 286, 143, 286, 286, 286, - 286, 286, 208, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 155, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 86, - 286, 207, 286, 224, 252, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 5, 286, 199, 286, 286, - 253, 286, 286, 286, 286, 286, 286, 286, 286, 24, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 288, 142, 67, 288, 288, 288, 288, 288, 250, 288, + 288, 288, 288, 288, 288, 288, 121, 288, 82, 127, + 128, 131, 132, 129, 130, 75, 288, 234, 288, 145, + 288, 288, 288, 288, 288, 210, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 157, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 88, 288, 209, 288, 226, 254, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 5, 288, + 201, 288, 288, 255, 288, 288, 288, 288, 288, 288, - 286, 286, 286, 123, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 162, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 249, 286, 286, 286, 286, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 286, 266, 286, 286, 220, 286, 286, 286, 286, 286, - 250, 286, 286, 286, 286, 286, 286, 251, 286, 286, - 286, 218, 286, 221, 222, 286, 286, 286, 286, 286, - 219, 223, 0 + 288, 288, 24, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 125, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 164, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 251, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 268, 288, 288, 222, 288, 288, + 288, 288, 288, 252, 288, 288, 288, 288, 288, 288, + 253, 288, 288, 288, 220, 288, 223, 224, 288, 288, + 288, 288, 288, 221, 225, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -732,15 +733,15 @@ static yyconst YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2888] = +static yyconst flex_uint16_t yy_base[2901] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2296, 2222, 81, 5607, 5607, 5607, 96, 52, + 90, 112, 2301, 2135, 81, 5642, 5642, 5642, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 176, - 191, 152, 2090, 5607, 5607, 5607, 107, 1968, 5607, 5607, - 5607, 165, 1788, 1496, 5607, 5607, 5607, 211, 1208, 5607, - 5607, 5607, 180, 1125, 5607, 217, 5607, 221, 168, 962, + 191, 152, 1790, 5642, 5642, 5642, 107, 1586, 5642, 5642, + 5642, 165, 1398, 1331, 5642, 5642, 5642, 211, 1221, 5642, + 5642, 5642, 180, 1211, 5642, 217, 5642, 221, 168, 962, 225, 189, 0, 232, 0, 0, 226, 189, 85, 221, 114, 227, 234, 156, 219, 235, 239, 236, 238, 132, 246, 242, 241, 252, 244, 247, 266, 243, 258, 273, @@ -770,7 +771,7 @@ static yyconst flex_uint16_t yy_base[2888] = 693, 708, 702, 723, 712, 724, 713, 705, 694, 719, 732, 729, 735, 737, 738, 739, 740, 741, 742, 750, 745, 748, 755, 758, 762, 766, 746, 772, 747, 776, - 770, 774, 781, 803, 778, 768, 780, 782, 785, 5607, + 770, 774, 781, 803, 778, 768, 780, 782, 785, 5642, 808, 786, 828, 792, 787, 815, 810, 812, 801, 817, 825, 818, 829, 813, 821, 835, 851, 836, 838, 846, 848, 852, 850, 860, 861, 853, 856, 864, 875, 867, @@ -780,601 +781,605 @@ static yyconst flex_uint16_t yy_base[2888] = 937, 938, 946, 943, 942, 944, 949, 953, 955, 959, 952, 945, 961, 966, 970, 967, 975, 977, 960, 983, - 5607, 985, 968, 980, 978, 990, 991, 5607, 993, 992, + 5642, 985, 968, 980, 978, 990, 991, 5642, 993, 992, 994, 1001, 996, 1004, 997, 1000, 1007, 1022, 999, 1006, 1023, 1020, 1021, 783, 1024, 1025, 1027, 1028, 1030, 1031, - 1033, 1036, 1053, 1037, 1040, 1038, 1039, 1044, 1046, 1051, - 1048, 1065, 1062, 1066, 1077, 1064, 1081, 1068, 1074, 1085, - 1076, 1087, 1083, 1090, 1089, 1092, 1093, 1095, 1096, 1097, - 1099, 1103, 5607, 1108, 1106, 1113, 1112, 1118, 1119, 1120, - 1121, 1122, 1123, 1126, 1128, 1129, 1132, 1141, 1142, 1149, + 1033, 1036, 1053, 1037, 1040, 1038, 1039, 1044, 1046, 1065, + 1048, 1051, 1062, 1066, 1077, 1064, 1081, 1068, 1076, 1085, + 1083, 1087, 1089, 1090, 1092, 1093, 1094, 1095, 1097, 1098, + 1099, 1103, 5642, 1101, 1111, 1119, 1118, 1105, 1121, 1122, + 1123, 1124, 1125, 1126, 1131, 1127, 1144, 1134, 1137, 1147, - 1144, 1145, 1146, 1147, 1150, 1158, 1157, 1151, 1165, 1168, - 1153, 1170, 1177, 1175, 1179, 1186, 1163, 1182, 1183, 1172, - 1187, 1189, 1193, 1190, 1196, 1197, 1200, 1199, 1202, 1204, - 1205, 1212, 1211, 1207, 1214, 1210, 1218, 1223, 1224, 1227, - 1230, 1231, 1239, 1234, 1235, 1236, 1237, 1245, 1247, 1249, - 1250, 1251, 1253, 1254, 1255, 1257, 1260, 1261, 1263, 1264, - 1270, 1277, 1272, 1281, 1283, 1285, 1274, 1287, 1294, 1291, - 1295, 1297, 1293, 1305, 1302, 1303, 1306, 1313, 1308, 1267, - 1309, 1317, 1318, 1310, 1319, 1329, 1330, 1311, 1332, 1321, - 1337, 1333, 1338, 1341, 1342, 1343, 1350, 1345, 1346, 1347, + 1145, 1148, 1132, 1150, 1153, 1152, 1154, 1156, 1167, 1162, + 1160, 1169, 1177, 1179, 1181, 1182, 1164, 1183, 1184, 1174, + 1187, 1188, 1192, 1190, 1196, 1194, 1205, 1200, 1201, 1202, + 1203, 1212, 1209, 1208, 1217, 1210, 1226, 1216, 1230, 1231, + 1218, 1224, 1243, 1233, 1238, 1240, 1245, 1246, 1247, 1248, + 1251, 1253, 1254, 1256, 1255, 1258, 1259, 1262, 1263, 1265, + 1270, 1277, 1272, 1273, 1280, 1284, 1285, 1286, 1293, 1290, + 1294, 1296, 1292, 1307, 1291, 1298, 1302, 1314, 1305, 1309, + 1310, 1313, 1323, 1320, 1325, 1334, 1326, 1312, 1336, 1329, + 1339, 1335, 1340, 1342, 1343, 1344, 1351, 1346, 1347, 1352, - 1352, 1348, 1353, 1357, 1358, 1360, 1364, 1365, 1368, 1370, - 1371, 1374, 1376, 1379, 1380, 1381, 1382, 1384, 1385, 1390, - 1386, 1391, 1393, 1398, 1402, 1403, 1406, 1405, 1408, 1414, - 1407, 1416, 1418, 1420, 1421, 1424, 1426, 1429, 1433, 1428, - 1435, 1438, 1440, 1422, 1446, 1447, 1450, 1451, 5607, 1439, - 1461, 1452, 1459, 1457, 1441, 1462, 1470, 1465, 1467, 1468, - 1471, 1475, 1478, 5607, 1476, 5607, 5607, 1477, 5607, 5607, - 1479, 1492, 1485, 1489, 1481, 1502, 1499, 1504, 1505, 1506, - 1513, 1527, 1509, 1511, 1512, 1508, 1515, 1517, 1535, 1520, - 1523, 1524, 1536, 1537, 1543, 1547, 1544, 1550, 1551, 1552, + 1354, 1355, 1349, 1359, 1357, 1376, 1361, 1365, 1363, 1366, + 1374, 1379, 1380, 1381, 1383, 1384, 1386, 1387, 1389, 1390, + 1391, 1392, 1405, 1395, 1394, 1404, 1407, 1415, 1412, 1416, + 1418, 1408, 1422, 1424, 1425, 1427, 1428, 1430, 1431, 1437, + 1432, 1438, 1442, 1444, 1443, 1449, 1450, 1453, 1445, 5642, + 1455, 1462, 1460, 1461, 1463, 1466, 1467, 1476, 1469, 1471, + 1468, 1472, 1473, 1483, 5642, 1479, 5642, 5642, 1481, 5642, + 5642, 1487, 1484, 1499, 1500, 1506, 1508, 1501, 1503, 1510, + 1511, 1519, 1532, 1517, 1514, 1520, 1516, 1523, 1528, 1482, + 1529, 1525, 1542, 1547, 1545, 1549, 1553, 1546, 1518, 1556, - 1554, 1553, 1557, 1559, 1562, 1563, 1560, 1565, 1566, 1581, - 1579, 1568, 1586, 5607, 1582, 1589, 1596, 1592, 1599, 1591, - 1595, 1598, 1600, 1602, 1604, 1603, 1605, 1571, 1607, 1611, - 1618, 1613, 5607, 1614, 1617, 1622, 1621, 1625, 1629, 1631, - 1615, 1635, 1633, 1637, 1638, 1639, 1641, 5607, 1649, 1643, - 1646, 1650, 1653, 1657, 1658, 1654, 1659, 1660, 1661, 1662, - 1664, 1668, 1671, 1672, 1673, 1670, 1680, 1686, 1683, 1688, - 1691, 1675, 1696, 1698, 1699, 1700, 1701, 1708, 1703, 1710, - 1706, 1713, 1715, 1712, 1711, 1720, 1723, 1714, 1724, 1733, - 1731, 1729, 1736, 1743, 1738, 1742, 1739, 1745, 1752, 1744, + 1557, 1559, 1561, 1562, 1564, 1566, 1567, 1565, 1570, 1571, + 1581, 1584, 1573, 1591, 5642, 1587, 1594, 1601, 1597, 1604, + 1596, 1600, 1603, 1605, 1607, 1609, 1608, 1610, 1617, 1612, + 1618, 1628, 1619, 5642, 1623, 1624, 1630, 1627, 1631, 1637, + 1639, 1620, 1640, 1643, 1644, 1646, 1647, 1648, 5642, 1574, + 1650, 1652, 1656, 1654, 1657, 1660, 1662, 1665, 1667, 1664, + 1666, 1668, 1669, 1678, 1674, 1679, 1681, 1682, 1689, 1690, + 1692, 1694, 1698, 1699, 1701, 1702, 1703, 1705, 1706, 1713, + 1711, 1715, 1712, 1720, 1722, 1724, 1717, 1719, 1729, 1730, + 1737, 1741, 1740, 1742, 1733, 1750, 1745, 1748, 1749, 1752, - 1756, 1753, 1746, 1755, 1761, 1748, 5607, 1762, 1763, 5607, - 1764, 1769, 1791, 1770, 1772, 1765, 1774, 1778, 1779, 1782, - 1781, 1787, 1785, 1810, 1801, 1789, 1798, 1806, 1814, 1808, - 1805, 1816, 1817, 1824, 1831, 1828, 1834, 1838, 1820, 1833, - 1835, 1854, 1836, 1839, 1837, 1845, 1840, 1856, 1850, 1849, - 1846, 1847, 1870, 1867, 5607, 1878, 1876, 1864, 1875, 1887, - 1877, 1884, 1885, 1886, 1843, 1896, 1889, 1891, 1892, 1893, - 1900, 1899, 1904, 1902, 1906, 1901, 1905, 1918, 5607, 1908, - 5607, 1909, 1917, 1920, 1921, 1925, 1926, 1927, 1928, 1929, - 1931, 1944, 1936, 1938, 5607, 1942, 1953, 1955, 1946, 1948, + 1754, 1755, 1758, 1763, 1756, 1759, 1761, 1768, 5642, 1769, + 1771, 5642, 1772, 1773, 1795, 1774, 1776, 1781, 1783, 1777, + 1784, 1786, 1789, 1805, 1799, 1815, 1807, 1808, 1817, 1818, + 1819, 1820, 1822, 1825, 1791, 1835, 1836, 1827, 1842, 1844, + 1828, 1840, 1831, 1860, 1841, 1846, 1848, 1845, 1854, 1847, + 1856, 1858, 1863, 1865, 1870, 1867, 5642, 1881, 1873, 1877, + 1878, 1889, 1885, 1887, 1888, 1892, 1893, 1900, 1895, 1898, + 1902, 1899, 1908, 1903, 1912, 1905, 1911, 1910, 1913, 1921, + 5642, 1918, 5642, 1925, 1926, 1928, 1927, 1931, 1929, 1932, + 1933, 1935, 1936, 1942, 1954, 1950, 5642, 1951, 1958, 1955, - 1950, 1954, 1960, 1961, 1963, 1964, 1971, 1966, 1967, 1974, - 1975, 1977, 1978, 1981, 1982, 5607, 1985, 1987, 1989, 1996, - 1998, 1992, 1999, 2002, 2006, 2000, 2004, 2008, 2009, 2011, - 2016, 2019, 2015, 2021, 2022, 2031, 5607, 2014, 2029, 2036, - 2034, 2035, 2037, 2038, 2039, 2040, 2043, 2045, 2046, 2053, - 2054, 2052, 2058, 2060, 2050, 2056, 2062, 2068, 2066, 2071, - 2072, 2073, 5607, 2075, 2077, 124, 2078, 2081, 2083, 2082, - 2079, 2086, 2089, 2099, 2103, 2100, 2102, 2101, 2107, 2108, - 2110, 2111, 2112, 2113, 2114, 2116, 5607, 2118, 2119, 2123, - 2124, 2128, 2125, 2132, 5607, 2142, 2144, 2140, 2136, 2127, + 1961, 1960, 1953, 1962, 1965, 1966, 1975, 1968, 1976, 1979, + 1971, 1972, 1984, 1983, 1985, 1986, 1993, 5642, 1994, 1987, + 1995, 2002, 1998, 2004, 2006, 2007, 2008, 2011, 2012, 2014, + 2015, 2017, 2022, 2025, 2021, 2023, 2027, 2039, 5642, 2020, + 2035, 2042, 2040, 2044, 2037, 2041, 2047, 2048, 2049, 2052, + 2053, 2054, 2062, 2063, 2061, 2064, 2067, 2058, 2068, 2071, + 2078, 2072, 2075, 2079, 2080, 5642, 2081, 2086, 124, 2087, + 2088, 2092, 2089, 2093, 2096, 2091, 2112, 2113, 2109, 2097, + 2110, 2108, 2116, 2118, 2117, 2119, 2120, 2121, 2124, 5642, + 2126, 2128, 2129, 2131, 2133, 2134, 2144, 5642, 2140, 2145, - 2138, 2152, 2153, 2154, 2155, 2157, 2159, 5607, 2163, 2164, - 2165, 2166, 2167, 2171, 2174, 2176, 2177, 2179, 2181, 2180, - 2182, 2184, 2185, 2187, 2188, 2194, 2190, 2197, 2199, 2201, - 5607, 2209, 2202, 2207, 2211, 2213, 2212, 2226, 2214, 2221, - 2223, 2227, 2237, 2230, 2229, 2240, 2247, 2239, 2232, 2255, - 2252, 2253, 2261, 2251, 2263, 2265, 2254, 2259, 2266, 2267, - 2271, 2269, 2273, 2284, 2285, 2281, 2288, 2280, 2301, 2295, - 2297, 5607, 2299, 2290, 2304, 2306, 2313, 2309, 2311, 2310, - 2314, 2317, 2318, 2319, 2320, 2321, 2325, 2329, 2328, 2330, - 2335, 2333, 2341, 2343, 2345, 5607, 2348, 2344, 2350, 2352, + 2148, 2137, 2153, 2152, 2157, 2159, 2161, 2162, 2165, 2168, + 5642, 2172, 2169, 2173, 2175, 2177, 2179, 2181, 2184, 2185, + 2186, 2189, 2188, 2191, 2192, 2193, 2194, 2196, 2202, 2206, + 2197, 2207, 2209, 5642, 2216, 2211, 2220, 2213, 2219, 2222, + 2232, 2223, 2229, 2235, 2236, 2249, 2238, 2230, 2246, 2244, + 2247, 2241, 2259, 2255, 2256, 2263, 2265, 2266, 2270, 2269, + 2274, 2271, 2276, 2277, 2279, 2281, 2284, 2291, 2283, 2290, + 2295, 2297, 2302, 2301, 5642, 2303, 2305, 2306, 2308, 2322, + 2310, 2314, 2323, 2318, 2325, 2326, 2328, 2329, 2330, 2333, + 2331, 2334, 2338, 2341, 2349, 2339, 2351, 2353, 5642, 2356, - 2354, 2357, 2359, 2362, 2360, 2364, 2366, 2368, 2370, 2371, - 2372, 2373, 2375, 2379, 5607, 2380, 2386, 2388, 2389, 2394, - 2395, 2401, 2398, 2396, 2376, 2404, 2405, 5607, 2412, 2413, - 2410, 2422, 2408, 2409, 2419, 2421, 2423, 5607, 2424, 2425, - 2432, 2433, 2429, 5607, 2437, 2436, 2434, 2439, 2438, 2440, - 2441, 2445, 2446, 2449, 2455, 2462, 2447, 2459, 5607, 2453, - 2469, 2457, 2473, 2466, 2476, 2477, 2478, 2479, 2481, 2480, - 2491, 2495, 2486, 2488, 2489, 2498, 2500, 2501, 2503, 2502, - 5607, 2504, 2506, 2509, 2510, 2513, 2512, 2514, 2526, 2523, - 2521, 2525, 2528, 2529, 2531, 2532, 2534, 2542, 2536, 2546, + 2357, 2342, 2358, 2365, 2360, 2369, 2370, 2372, 2366, 2373, + 2375, 2376, 2378, 2379, 2383, 2382, 2384, 2385, 5642, 2389, + 2390, 2393, 2397, 2401, 2402, 2408, 2410, 2400, 2411, 2412, + 2413, 5642, 2420, 2422, 2423, 2427, 2424, 2425, 2429, 2431, + 2432, 5642, 2434, 2435, 2442, 2443, 2439, 5642, 2447, 2446, + 2448, 2438, 2449, 2451, 2455, 2453, 2457, 2459, 2462, 2465, + 2461, 2470, 5642, 2471, 2480, 2476, 2472, 2478, 2483, 2485, + 2487, 2488, 2489, 2492, 2501, 2499, 2498, 2504, 2507, 2508, + 2510, 2511, 2512, 2514, 5642, 2513, 2518, 2519, 2520, 2524, + 2522, 2516, 2531, 2530, 2532, 2538, 2539, 2541, 2543, 2544, - 2548, 2538, 2545, 2552, 2556, 2563, 2564, 2559, 2565, 5607, - 2568, 2570, 2562, 2569, 2572, 2575, 2576, 2577, 2579, 2580, - 2584, 2581, 2582, 2597, 2604, 2585, 2592, 2594, 2600, 2602, - 2607, 2606, 2608, 2609, 2616, 2615, 2614, 2623, 2618, 2624, - 2632, 2622, 2629, 2631, 2633, 2621, 2634, 2636, 2638, 2642, - 2644, 2647, 2649, 2653, 2658, 2659, 2660, 2661, 5607, 2664, - 2662, 2665, 2666, 2675, 2676, 2678, 2684, 2686, 2672, 2679, - 2687, 2695, 2694, 5607, 2691, 5607, 2696, 2698, 2699, 2708, - 2701, 5607, 2705, 5607, 2710, 2712, 2706, 2714, 5607, 2715, - 2716, 2719, 2723, 2720, 2725, 2726, 2732, 2727, 2729, 2734, + 2546, 2545, 2547, 2548, 2558, 2555, 2560, 2561, 2563, 2573, + 2575, 2571, 2576, 5642, 2579, 2580, 2574, 2581, 2586, 2587, + 2585, 2588, 2590, 2593, 2591, 2594, 2595, 2604, 2612, 2597, + 2615, 2605, 2607, 2609, 2620, 2613, 2619, 2622, 2627, 2623, + 2629, 2636, 2631, 2635, 2643, 2633, 2634, 2638, 2642, 2644, + 2645, 2647, 2648, 2651, 2656, 2660, 2664, 2663, 2665, 2670, + 2671, 2674, 5642, 2672, 2673, 2675, 2681, 2683, 2685, 2686, + 2692, 2694, 2687, 2699, 2689, 2706, 2702, 5642, 2703, 5642, + 2704, 2705, 2711, 2714, 2713, 5642, 2716, 5642, 2719, 2724, + 2718, 2720, 5642, 2726, 2727, 2728, 2730, 2735, 2732, 2738, - 2737, 2739, 2740, 2742, 2741, 2749, 2750, 2743, 2751, 2755, - 2757, 2760, 2761, 2762, 5607, 2766, 2769, 2770, 2771, 2772, - 2773, 2774, 2776, 2779, 2782, 2783, 2788, 2785, 2794, 2795, - 2803, 2789, 2807, 5607, 2804, 2811, 2806, 2808, 5607, 2812, - 2813, 2815, 2819, 2821, 2822, 2823, 2824, 2828, 2830, 2826, - 2833, 2847, 2843, 2844, 2845, 2831, 2849, 2860, 2857, 2858, - 2863, 2861, 2865, 2866, 2867, 2868, 2869, 2871, 2878, 2881, - 2877, 2886, 2873, 2883, 2891, 2892, 2876, 2884, 2893, 2895, - 2898, 2899, 2901, 2906, 2902, 2903, 2905, 2907, 5607, 2916, - 2910, 2920, 2917, 2921, 2924, 2908, 2926, 2931, 2927, 2934, + 2739, 2740, 2742, 2743, 2745, 2748, 2751, 2746, 2754, 2752, + 2756, 2762, 2761, 2768, 2763, 2771, 2772, 2773, 2774, 5642, + 2778, 2775, 2780, 2783, 2784, 2786, 2787, 2790, 2789, 2796, + 2791, 2799, 2797, 2805, 2801, 2814, 2810, 2818, 5642, 2813, + 2820, 2815, 2822, 5642, 2821, 2823, 2824, 2831, 2829, 2833, + 2835, 2836, 2837, 2840, 2841, 2842, 2855, 2853, 2854, 2857, + 2844, 2856, 2870, 2866, 2867, 2872, 2880, 2876, 2865, 2875, + 2877, 2879, 2882, 2889, 2890, 2886, 2894, 2887, 2892, 2901, + 2898, 2895, 2902, 2904, 2905, 2906, 2909, 2912, 2914, 2907, + 2911, 2915, 2916, 5642, 2918, 2923, 2928, 2934, 2926, 2930, - 2937, 2929, 5607, 2933, 5607, 2935, 2947, 2952, 2955, 2956, - 2939, 2958, 2963, 2959, 2964, 2965, 2966, 2967, 2969, 2973, - 2974, 2975, 2979, 2995, 2977, 2978, 2981, 2990, 2991, 2980, - 2992, 5607, 2997, 2999, 3000, 3002, 3003, 3006, 3009, 3007, - 3013, 3014, 3015, 3026, 5607, 3023, 3027, 3028, 3030, 3038, - 3034, 3042, 3041, 5607, 3040, 3043, 3050, 3045, 3052, 3054, - 5607, 3051, 5607, 3049, 3053, 3056, 3062, 3063, 3065, 3066, - 3067, 3075, 3070, 3073, 3074, 3077, 3082, 3085, 3084, 3086, - 3087, 5607, 3089, 3090, 3094, 3099, 3103, 3107, 3091, 3097, - 5607, 3101, 3114, 3109, 3111, 3115, 3118, 3119, 3122, 3124, + 2932, 2936, 2938, 2940, 2939, 2948, 2942, 5642, 2949, 5642, + 2945, 2950, 2952, 2962, 2959, 2963, 2965, 2967, 2972, 2973, + 2974, 2975, 2976, 2977, 2978, 2982, 2988, 2989, 2990, 3003, + 2986, 2983, 2991, 2994, 2999, 3004, 5642, 3005, 3007, 3010, + 3012, 3013, 3014, 3017, 3024, 3020, 3021, 3023, 3035, 5642, + 3026, 3037, 3027, 3044, 3052, 3048, 3055, 3050, 5642, 3039, + 3047, 3057, 3054, 3060, 3064, 5642, 3062, 5642, 3065, 3066, + 3068, 3071, 3073, 3074, 3075, 3077, 3079, 3088, 3081, 3072, + 3083, 3090, 3093, 3102, 3095, 3097, 3098, 5642, 3104, 3099, + 3107, 3105, 3115, 3118, 3112, 3108, 5642, 3114, 3125, 3122, - 3125, 3121, 3126, 3138, 3127, 3130, 3135, 3143, 3144, 3150, - 5607, 3151, 3145, 3158, 3160, 3153, 2832, 3161, 3155, 3157, - 3162, 3163, 3166, 3167, 3170, 3168, 3169, 3177, 3172, 3173, - 3185, 3193, 3189, 3178, 3190, 3191, 3194, 3198, 3200, 3203, - 3205, 3195, 3208, 3216, 3209, 3213, 3219, 3220, 3227, 3222, - 5607, 3229, 3226, 3237, 3228, 3232, 3239, 3240, 3242, 3233, - 3243, 3248, 3255, 3250, 5607, 3257, 3258, 3259, 3254, 3260, - 3273, 3262, 3264, 3266, 3277, 3269, 3278, 3274, 3280, 3281, - 3286, 3283, 5607, 5607, 3289, 3290, 3291, 5607, 3292, 3293, - 3304, 3297, 3299, 3306, 3305, 3307, 3308, 3309, 3311, 3313, + 3126, 3127, 3133, 3128, 3130, 3135, 3136, 3134, 3139, 3149, + 3140, 3144, 3145, 3155, 3157, 3164, 5642, 3156, 3158, 3171, + 3169, 3166, 3170, 3173, 3174, 3175, 3177, 3180, 3179, 3181, + 3187, 3185, 3183, 3182, 3186, 3192, 3202, 3209, 3189, 3193, + 3205, 3196, 3211, 3208, 3214, 3218, 3220, 3223, 3226, 3227, + 3229, 3230, 3232, 3233, 3240, 3235, 5642, 3242, 3239, 3247, + 3244, 3245, 3253, 3254, 3262, 3246, 3261, 3263, 3270, 3266, + 5642, 3273, 3268, 3274, 3277, 3275, 3284, 3271, 3279, 3285, + 3292, 3287, 3293, 3289, 3295, 3296, 3301, 3298, 5642, 5642, + 3303, 3304, 3305, 5642, 3307, 3310, 3321, 3312, 3319, 3308, - 5607, 3317, 3324, 3319, 3323, 3331, 3332, 3328, 3333, 3335, - 3336, 3340, 3341, 3342, 3343, 3346, 3347, 3355, 3350, 3351, - 3354, 5607, 3357, 3352, 3360, 5607, 3362, 3363, 3373, 3369, - 3365, 3376, 3382, 3384, 3368, 3385, 3386, 3387, 3388, 3390, - 3397, 3394, 3395, 3402, 3403, 3407, 3406, 3413, 3415, 3424, - 3425, 3426, 3416, 3427, 3421, 3434, 5607, 3429, 3431, 3436, - 3430, 3443, 3438, 3445, 3440, 5607, 3444, 3446, 3449, 5607, - 3447, 3457, 3462, 3464, 3451, 3459, 3466, 3468, 3469, 3467, - 5607, 3474, 5607, 3477, 3470, 3483, 5607, 3478, 3481, 3486, - 3488, 3485, 3492, 3495, 3499, 3489, 3496, 3501, 3502, 3503, + 3320, 3324, 3322, 3325, 3328, 3330, 5642, 3332, 3341, 3336, + 3338, 3349, 3350, 3352, 3334, 3353, 3347, 3342, 3357, 3355, + 3359, 3360, 3363, 3371, 3368, 3366, 3370, 5642, 3372, 3375, + 3376, 5642, 3378, 3379, 3387, 3373, 3385, 3395, 3389, 3402, + 3396, 3398, 3403, 3404, 3406, 3407, 3414, 3410, 3411, 3419, + 3420, 3424, 5642, 3423, 3429, 3431, 3434, 3442, 3443, 3444, + 3413, 3446, 3435, 3454, 5642, 3449, 3452, 3450, 3453, 3463, + 3455, 3464, 3459, 5642, 3460, 3465, 3468, 5642, 3466, 3474, + 3480, 3482, 3467, 3476, 3483, 3485, 3486, 3488, 5642, 3491, + 5642, 3495, 3493, 3499, 5642, 3494, 3501, 3502, 3504, 3508, - 3506, 3510, 3508, 5607, 3512, 3514, 3516, 3517, 3520, 3515, - 3523, 3526, 3528, 5607, 5607, 3534, 5607, 3535, 3530, 3536, - 5607, 3539, 3537, 3548, 3540, 3549, 3543, 3556, 3553, 5607, - 3558, 3547, 3559, 3562, 3563, 3564, 3566, 3568, 3569, 3570, - 3573, 5607, 3574, 3575, 3582, 3572, 3577, 3583, 3588, 3589, - 5607, 3591, 3598, 3599, 3601, 3603, 5607, 3602, 5607, 3604, - 3605, 3607, 3613, 3608, 5607, 3616, 3612, 3621, 3623, 3624, - 3628, 3631, 3632, 3625, 3633, 3640, 3639, 3635, 3638, 5607, - 3641, 3642, 3651, 3654, 3647, 3645, 3658, 3659, 3661, 3666, - 3668, 3657, 3670, 3672, 3675, 3676, 3677, 3678, 3687, 3680, + 3509, 3510, 3512, 3516, 3518, 3519, 3520, 3521, 3523, 3530, + 3526, 5642, 3531, 3529, 3533, 3534, 3541, 3544, 3538, 3546, + 3545, 5642, 5642, 3549, 5642, 3552, 3553, 3554, 5642, 3557, + 3560, 3567, 3562, 3563, 3566, 3576, 3565, 5642, 3571, 3577, + 3580, 3582, 3583, 3584, 3586, 3587, 3585, 3588, 3589, 5642, + 3590, 3593, 3601, 3594, 3602, 3606, 3613, 3607, 5642, 3614, + 3615, 3616, 3620, 3621, 5642, 3623, 5642, 3624, 3626, 3629, + 3631, 3630, 5642, 3636, 3637, 3640, 3643, 3645, 3644, 3647, + 3648, 3654, 3655, 3662, 3658, 3657, 3659, 5642, 3660, 3664, + 3666, 3673, 3661, 3668, 3677, 3680, 3681, 3682, 3687, 3684, - 3683, 5607, 3690, 3691, 3692, 5607, 3693, 3694, 3698, 3701, - 3703, 3704, 3708, 3705, 3710, 5607, 3711, 3715, 3712, 3713, - 5607, 5607, 3720, 5607, 3728, 3709, 3716, 3729, 3730, 3733, - 3736, 3737, 3741, 3738, 3744, 3745, 3743, 3759, 3760, 3767, - 3749, 3762, 3751, 5607, 5607, 3764, 3765, 3768, 3773, 3774, - 3769, 3776, 3784, 3782, 3785, 3789, 3790, 3798, 5607, 3779, - 3793, 3796, 5607, 3797, 3799, 3801, 3802, 3803, 3805, 3809, - 3807, 3810, 3811, 3815, 3812, 3816, 3818, 3827, 3821, 3829, - 3831, 5607, 3833, 3835, 3836, 3819, 3839, 3840, 3843, 3844, - 3845, 5607, 3846, 3849, 3850, 3852, 3857, 3860, 3867, 3870, + 3691, 3693, 3695, 3697, 3699, 3689, 3708, 3703, 3705, 5642, + 3711, 3713, 3714, 5642, 3715, 3700, 3716, 3722, 3724, 3726, + 3727, 3731, 3732, 5642, 3729, 3734, 3730, 3733, 3735, 5642, + 5642, 3748, 5642, 3749, 3736, 3737, 3739, 3751, 3753, 3761, + 3756, 3764, 3758, 3766, 3768, 3769, 3780, 3778, 3781, 3783, + 3784, 3771, 5642, 5642, 3788, 3789, 3785, 3796, 3797, 3793, + 3799, 3806, 3802, 3808, 3811, 3813, 3820, 5642, 3812, 3801, + 3819, 5642, 3803, 3822, 3824, 3825, 3826, 3830, 3829, 3833, + 3834, 3835, 3836, 3837, 3839, 3842, 3844, 3843, 3846, 3853, + 5642, 3854, 3855, 3857, 3858, 3859, 3860, 3865, 3866, 3867, - 3875, 3862, 3872, 3878, 3880, 3882, 3883, 5607, 3886, 3876, - 3884, 3887, 3894, 3898, 3890, 3901, 3895, 3903, 3905, 3906, - 3908, 3915, 3910, 3912, 3916, 3917, 5607, 3918, 3926, 3919, - 3928, 3922, 3929, 3931, 3932, 3942, 3937, 3939, 3943, 3945, - 5607, 3946, 3947, 3949, 3951, 3953, 3950, 3957, 3958, 5607, - 3960, 3961, 3851, 3963, 3965, 3967, 3971, 3974, 3975, 5607, - 3978, 3979, 3982, 3983, 3985, 3986, 3988, 3989, 5607, 3992, - 3994, 3996, 4006, 4001, 4009, 4005, 4002, 4004, 4012, 4014, - 4016, 4019, 4018, 4026, 4030, 4029, 5607, 4031, 5607, 4034, - 4035, 4044, 4039, 4037, 5607, 4042, 4045, 4047, 4041, 4053, + 5642, 3869, 3871, 3872, 3877, 3868, 3880, 3891, 3895, 3897, + 3885, 3889, 3898, 3901, 3904, 3906, 5642, 3907, 3905, 3908, + 3909, 3915, 3917, 3918, 3920, 3922, 3924, 3926, 3927, 3930, + 3934, 3873, 3935, 3931, 3936, 5642, 3938, 3947, 3939, 3949, + 3942, 3950, 3951, 3952, 3962, 3957, 3959, 3963, 3965, 5642, + 3966, 3967, 3969, 3971, 3973, 3970, 3977, 3978, 5642, 3980, + 3981, 3987, 3983, 3985, 3995, 3991, 4002, 3988, 5642, 3998, + 4007, 4009, 3999, 4003, 4005, 4013, 4006, 5642, 4015, 4017, + 4019, 4027, 4023, 4031, 4028, 4030, 4029, 4036, 4037, 4038, + 4039, 4041, 4042, 4051, 4058, 4053, 5642, 4040, 5642, 4055, - 5607, 4052, 4049, 4054, 4055, 5607, 4060, 4066, 4050, 4068, - 4073, 4074, 5607, 4077, 4078, 4079, 4088, 4089, 4086, 4087, - 4090, 4092, 4093, 4094, 4095, 5607, 4098, 4097, 4106, 4103, - 4109, 4099, 4110, 4112, 4115, 5607, 4116, 4117, 4120, 4122, - 4123, 4124, 4125, 4132, 4129, 4131, 5607, 4134, 4133, 4145, - 4143, 4146, 5607, 5607, 4141, 4152, 4154, 4142, 4158, 5607, - 4156, 4167, 4162, 4164, 4166, 5607, 5607, 4170, 5607, 4147, - 5607, 4171, 4172, 5607, 5607, 4173, 4176, 4177, 4179, 4181, - 5607, 4187, 5607, 4189, 4190, 4192, 4193, 4194, 5607, 4195, - 4197, 4201, 5607, 4196, 4204, 4203, 4207, 5607, 4211, 4206, + 4061, 4065, 4066, 4063, 5642, 4068, 4070, 4072, 4073, 4069, + 5642, 4077, 4074, 4076, 4080, 5642, 4079, 4093, 4081, 4087, + 4095, 4096, 5642, 4103, 4104, 4100, 4112, 4114, 4110, 4111, + 4115, 4117, 4113, 4118, 4119, 5642, 4122, 4121, 4131, 4123, + 4132, 4133, 4134, 4136, 4139, 5642, 4140, 4142, 4143, 4144, + 4146, 4147, 4149, 4157, 4155, 4148, 5642, 4156, 4159, 4171, + 4160, 4173, 5642, 5642, 4169, 4176, 4178, 4170, 4179, 5642, + 4182, 4190, 4185, 4188, 4189, 5642, 5642, 4192, 5642, 4193, + 5642, 4194, 4199, 5642, 5642, 4195, 4201, 4202, 4204, 4206, + 5642, 4213, 5642, 4216, 4217, 4203, 4214, 4220, 5642, 4221, - 4212, 5607, 4216, 4219, 4223, 4224, 4231, 4213, 4220, 4226, - 4232, 4236, 4239, 4241, 4243, 4244, 4245, 4247, 4248, 4250, - 4253, 4254, 4255, 4257, 4259, 4261, 4268, 4262, 4264, 4269, - 4270, 4272, 4276, 4278, 4280, 4282, 4283, 4284, 4286, 4287, - 4288, 4292, 4285, 4295, 4297, 5607, 4289, 4300, 4301, 4303, - 4305, 4308, 4315, 4317, 4326, 4327, 5607, 4329, 5607, 4331, - 4318, 4323, 4314, 5607, 4321, 4335, 4337, 4338, 4339, 4340, - 4343, 4344, 5607, 4347, 4342, 4354, 4350, 5607, 4356, 4352, - 4355, 4357, 4362, 4366, 4367, 4368, 4371, 4370, 4377, 4379, - 4380, 4372, 4382, 4383, 4388, 4384, 4391, 4394, 4396, 4401, + 4222, 4224, 5642, 4226, 4237, 4228, 4229, 5642, 4233, 4230, + 4238, 5642, 4241, 4248, 4245, 4252, 4251, 4254, 4255, 4239, + 4258, 4261, 4265, 4267, 4271, 4262, 4272, 4273, 4275, 4279, + 4277, 4281, 4282, 4283, 4285, 4286, 4288, 4292, 4294, 4296, + 4295, 4297, 4304, 4298, 4300, 4311, 4312, 4301, 4308, 4313, + 4314, 4315, 4322, 4316, 4319, 4324, 5642, 4330, 4331, 4332, + 4333, 4335, 4337, 4340, 4344, 4347, 4350, 5642, 4356, 5642, + 4358, 4352, 4354, 4341, 5642, 4361, 4362, 4363, 4364, 4366, + 4367, 4368, 4371, 5642, 4374, 4369, 4379, 4377, 5642, 4383, + 4390, 4378, 4382, 4394, 4393, 4395, 4397, 4398, 4399, 4403, - 4403, 4407, 5607, 4395, 5607, 4408, 4409, 4410, 4392, 4413, - 4415, 4419, 5607, 5607, 4416, 4420, 4425, 4426, 4421, 4430, - 4427, 5607, 4432, 4433, 4443, 4440, 5607, 4434, 4444, 4446, - 5607, 4448, 4450, 4451, 4456, 4452, 4459, 4462, 5607, 5607, - 5607, 5607, 4465, 4458, 4468, 4463, 4469, 4472, 4474, 4478, - 4473, 5607, 5607, 5607, 4479, 4475, 4485, 4486, 4487, 4491, - 4493, 5607, 4492, 4497, 4498, 4495, 4505, 4509, 4511, 4512, - 4496, 4513, 4521, 4519, 4522, 4520, 4525, 4527, 4529, 5607, - 5607, 4532, 4534, 4536, 4543, 4541, 4544, 4553, 4548, 4550, - 4551, 4554, 4556, 4557, 4558, 5607, 4561, 4565, 5607, 4559, + 4405, 4412, 4407, 4409, 4410, 4411, 4417, 4419, 4421, 4420, + 4428, 4430, 4434, 5642, 4423, 5642, 4431, 4435, 4436, 4438, + 4441, 4443, 4445, 5642, 5642, 4447, 4449, 4451, 4444, 4453, + 4456, 4457, 5642, 4460, 4462, 4469, 4465, 5642, 4470, 4472, + 4474, 5642, 4476, 4480, 4477, 4482, 4484, 4483, 4486, 5642, + 5642, 5642, 5642, 4493, 4487, 4498, 4491, 4499, 4501, 4502, + 4506, 4500, 5642, 4508, 5642, 5642, 4513, 4503, 4514, 4516, + 4520, 4521, 4523, 5642, 4522, 4527, 4528, 4525, 4535, 4542, + 4529, 4538, 4526, 4545, 4552, 4548, 4549, 4547, 4551, 4555, + 4558, 5642, 5642, 4559, 4561, 4564, 4571, 4568, 4569, 4581, - 5607, 4567, 4573, 4563, 4574, 4575, 4576, 4579, 4577, 5607, - 5607, 4582, 4583, 4588, 4590, 4591, 4593, 4594, 4596, 4592, - 5607, 4597, 5607, 4598, 4600, 4606, 4599, 4614, 4619, 4621, - 4617, 4620, 4622, 5607, 4623, 4625, 5607, 4626, 4629, 4631, - 5607, 4633, 4636, 4640, 5607, 4642, 5607, 4645, 5607, 4637, - 4653, 5607, 4648, 4649, 5607, 4655, 4659, 4660, 4651, 5607, - 4656, 4662, 4665, 4670, 4667, 4672, 4673, 4675, 4676, 4683, - 4679, 4680, 5607, 5607, 4695, 4681, 4685, 4687, 4691, 4698, - 4688, 4696, 4702, 5607, 5607, 4703, 5607, 4706, 4709, 5607, - 4699, 4715, 4710, 4711, 4717, 4719, 4720, 4722, 4723, 4725, + 4576, 4577, 4578, 4579, 4583, 4584, 4585, 5642, 4588, 4592, + 5642, 4586, 5642, 4596, 4599, 4590, 4600, 4602, 4603, 4605, + 4607, 5642, 5642, 4609, 4610, 4614, 4618, 4615, 4620, 4621, + 4623, 4619, 5642, 4624, 5642, 4625, 4627, 4641, 4626, 4643, + 4648, 4650, 4647, 4649, 4653, 5642, 4652, 4654, 5642, 4655, + 4656, 4660, 5642, 4662, 4665, 4669, 5642, 4672, 5642, 4674, + 5642, 4666, 4682, 5642, 4677, 4678, 5642, 4684, 4688, 4632, + 4680, 5642, 4685, 5642, 4690, 4691, 4695, 4696, 4699, 4700, + 4701, 4702, 4710, 4706, 4708, 5642, 5642, 4715, 4707, 4717, + 4718, 4720, 4727, 4722, 4724, 4732, 5642, 5642, 4729, 5642, - 4732, 4729, 4737, 4740, 4743, 4745, 4749, 4738, 4747, 4751, - 4730, 4753, 4755, 4757, 5607, 4759, 4760, 4761, 5607, 4765, - 4766, 4768, 4769, 5607, 4781, 4776, 4778, 4782, 5607, 4770, - 4784, 4786, 4789, 4792, 4800, 4793, 4795, 5607, 5607, 5607, - 5607, 4797, 4801, 5607, 4802, 4803, 5607, 5607, 4805, 4808, - 4809, 5607, 4810, 5607, 4812, 5607, 4813, 4816, 4823, 4825, - 5607, 4826, 4835, 5607, 4828, 4838, 4841, 4842, 4832, 4843, - 4844, 5607, 4820, 4845, 4848, 4847, 4854, 4855, 4856, 4857, - 4864, 4859, 4866, 5607, 4860, 4863, 4867, 5607, 4869, 5607, - 4870, 4873, 4877, 4871, 4874, 4882, 4885, 4889, 4888, 4892, + 4725, 4736, 5642, 4723, 4740, 4735, 4741, 4742, 4744, 4745, + 4750, 4751, 4754, 4767, 4755, 4757, 4768, 4771, 4775, 4777, + 4763, 4780, 4773, 4758, 4781, 4782, 4783, 5642, 4787, 4788, + 4789, 5642, 4795, 4792, 4797, 4800, 5642, 4809, 4801, 4804, + 4806, 5642, 4798, 4812, 4814, 4817, 4819, 4828, 4820, 4821, + 5642, 5642, 5642, 5642, 4824, 4825, 5642, 4829, 4832, 5642, + 5642, 4831, 4836, 4835, 5642, 4837, 5642, 4839, 5642, 4841, + 4842, 4850, 4848, 5642, 4853, 4861, 5642, 4864, 4867, 4869, + 4870, 4852, 4840, 4871, 5642, 4880, 4873, 4877, 4884, 4875, + 4881, 4885, 4886, 4894, 4887, 4892, 5642, 4889, 4895, 4896, - 4896, 5607, 4898, 4900, 5607, 4895, 5607, 4903, 5607, 4904, - 4905, 4906, 4907, 5607, 4909, 4910, 4911, 4913, 5607, 4917, - 4919, 5607, 4923, 4516, 4925, 4927, 4929, 4936, 4931, 4937, - 4944, 4939, 4941, 4942, 4946, 4947, 4951, 5607, 5607, 5607, - 4948, 4943, 4965, 4967, 4961, 4974, 4954, 5607, 4970, 4971, - 4969, 4979, 4977, 4981, 5607, 4983, 4978, 4984, 5607, 4986, - 4990, 4987, 4991, 4996, 4999, 5003, 5007, 5004, 5607, 5011, - 5607, 5607, 5000, 5607, 5008, 5012, 5013, 5014, 5607, 5017, - 5018, 5020, 5022, 5024, 5025, 5021, 5607, 5607, 5028, 5607, - 5037, 5029, 5039, 5038, 5041, 5046, 5042, 5607, 5048, 5051, + 5642, 4898, 5642, 4900, 4901, 4899, 4906, 4905, 4907, 4909, + 4918, 4911, 4920, 4922, 5642, 4925, 4928, 5642, 4929, 5642, + 4931, 5642, 4932, 4933, 4935, 4934, 5642, 4943, 4936, 4938, + 4940, 5642, 4944, 4946, 5642, 4947, 4953, 4955, 4958, 4962, + 4964, 4965, 4966, 4973, 4968, 4969, 4970, 4972, 4976, 4977, + 5642, 5642, 5642, 4980, 4984, 4991, 4989, 4993, 5000, 4995, + 5642, 4997, 4998, 4999, 5007, 5005, 5009, 5642, 5011, 5006, + 5012, 5642, 5015, 5017, 5019, 5020, 5026, 5028, 5030, 5033, + 5035, 5642, 5037, 5642, 5642, 5038, 5642, 5039, 5041, 5042, + 5043, 5642, 5046, 5048, 5047, 5049, 5051, 5052, 5054, 5642, - 5052, 5053, 5054, 5607, 5055, 5056, 5058, 5059, 5062, 5061, - 5064, 5066, 5067, 5607, 5607, 5069, 5070, 5607, 5607, 5074, - 5085, 5086, 5607, 5607, 5607, 5092, 5607, 5094, 5098, 5102, - 5106, 5097, 5607, 5108, 5105, 5110, 5607, 5109, 5112, 5607, - 5607, 5113, 5115, 5116, 5117, 5607, 5118, 5121, 5126, 5129, - 5134, 5122, 5135, 5138, 5145, 5148, 5131, 5143, 5141, 5146, - 5149, 5152, 5160, 5161, 5607, 5607, 5164, 5607, 5607, 5168, - 5170, 5173, 5175, 5177, 5179, 5181, 5607, 5182, 5184, 5165, - 5607, 5187, 5188, 5189, 5076, 5192, 5190, 5195, 5607, 5607, - 5196, 5197, 5198, 5206, 5199, 5607, 5201, 5215, 5208, 5211, + 5642, 5056, 5642, 5066, 5060, 5075, 5068, 5070, 5073, 5076, + 5642, 5077, 5079, 5082, 5083, 5084, 5642, 5085, 5086, 5088, + 5089, 5092, 5091, 5094, 5096, 5098, 5642, 5642, 5100, 5101, + 5642, 5642, 5116, 5119, 5102, 5642, 5642, 5642, 5122, 5642, + 5124, 5128, 5132, 5136, 5127, 5642, 5138, 5135, 5140, 5642, + 5139, 5142, 5642, 5642, 5143, 5145, 5104, 5146, 5642, 5147, + 5148, 5151, 5156, 5159, 5160, 5162, 5164, 5169, 5172, 5170, + 5171, 5177, 5174, 5178, 5180, 5182, 5184, 5642, 5642, 5188, + 5642, 5642, 5191, 5193, 5197, 5201, 5203, 5205, 5207, 5642, + 5185, 5209, 5210, 5642, 5212, 5213, 5214, 5217, 5215, 5218, - 5210, 5212, 5218, 5607, 5213, 5607, 5607, 5607, 5607, 5607, - 5607, 5607, 5607, 5220, 5607, 5226, 5607, 5219, 5227, 5153, - 5221, 5231, 5607, 5232, 5233, 5235, 5237, 5238, 5246, 5243, - 5248, 5250, 5249, 5251, 5254, 5252, 5257, 5607, 5258, 5259, - 5261, 5262, 5264, 5274, 5281, 5283, 5266, 5270, 5284, 5286, - 5288, 5278, 5289, 5298, 5294, 5295, 5297, 5299, 5301, 5607, - 5302, 5607, 5305, 5607, 5607, 5307, 5309, 5311, 5312, 5320, - 5322, 5313, 5321, 5324, 5326, 5607, 5328, 5607, 5330, 5329, - 5607, 5332, 5335, 5336, 5337, 5338, 5339, 5341, 5342, 5607, - 5345, 5349, 5354, 5356, 5365, 5366, 5357, 5364, 5370, 5360, + 5220, 5642, 5642, 5221, 5222, 5223, 5231, 5224, 5642, 5234, + 5241, 5226, 5238, 5236, 5244, 5245, 5642, 5248, 5642, 5642, + 5642, 5642, 5642, 5642, 5642, 5642, 5247, 5642, 5252, 5642, + 5246, 5256, 5253, 5254, 5258, 5642, 5259, 5260, 5268, 5264, + 5270, 5275, 5267, 5277, 5279, 5278, 5281, 5283, 5284, 5287, + 5642, 5286, 5288, 5290, 5292, 5303, 5309, 5312, 5314, 5299, + 5295, 5316, 5317, 5320, 5304, 5321, 5330, 5323, 5326, 5328, + 5331, 5333, 5642, 5334, 5642, 5335, 5642, 5642, 5339, 5340, + 5343, 5342, 5354, 5358, 5345, 5344, 5347, 5356, 5642, 5360, + 5642, 5362, 5363, 5642, 5364, 5365, 5368, 5369, 5372, 5371, + + 5373, 5374, 5642, 5375, 5377, 5389, 5381, 5397, 5394, 5398, + 5399, 5400, 5383, 5407, 5406, 5409, 5642, 5410, 5412, 5413, + 5415, 5416, 5423, 5418, 5419, 5421, 5642, 5425, 5427, 5428, + 5426, 5429, 5430, 5440, 5442, 5438, 5642, 5444, 5449, 5446, + 5452, 5454, 5456, 5457, 5458, 5460, 5462, 5291, 5469, 5466, + 5471, 5463, 5474, 5472, 5642, 5476, 5480, 5642, 5481, 5483, + 5484, 5485, 5489, 5642, 5493, 5487, 5494, 5495, 5498, 5500, + 5642, 5502, 5509, 5505, 5642, 5510, 5642, 5642, 5511, 5514, + 5517, 5519, 5521, 5642, 5642, 5642, 5550, 5557, 5564, 5571, + 5578, 88, 5585, 5592, 5599, 5606, 5613, 5620, 5627, 5634 - 5377, 5373, 5381, 5607, 5372, 5374, 5382, 5383, 5384, 5391, - 5386, 5387, 5394, 5607, 5397, 5392, 5406, 5388, 5390, 5399, - 5413, 5410, 5408, 5607, 5398, 5416, 5418, 5419, 5422, 5425, - 5426, 5427, 5429, 5431, 5432, 5439, 5435, 5440, 5441, 5443, - 5444, 5607, 5450, 5445, 5607, 5451, 5452, 5453, 5454, 5458, - 5607, 5462, 5455, 5465, 5466, 5469, 5470, 5607, 5476, 5479, - 5480, 5607, 5481, 5607, 5607, 5483, 5471, 5482, 5492, 5494, - 5607, 5607, 5607, 5515, 5522, 5529, 5536, 5543, 88, 5550, - 5557, 5564, 5571, 5578, 5585, 5592, 5599 } ; -static yyconst flex_int16_t yy_def[2888] = +static yyconst flex_int16_t yy_def[2901] = { 0, - 2873, 1, 2874, 2874, 2875, 2875, 2876, 2876, 2877, 2877, - 2878, 2878, 2873, 2879, 2873, 2873, 2873, 2873, 2880, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2881, 2873, 2873, 2873, 2881, 2882, 2873, 2873, - 2873, 2882, 2883, 2873, 2873, 2873, 2873, 2883, 2884, 2873, - 2873, 2873, 2884, 2885, 2873, 2886, 2873, 2885, 2885, 2879, - 2879, 2873, 2887, 2880, 2887, 2880, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2886, 1, 2887, 2887, 2888, 2888, 2889, 2889, 2890, 2890, + 2891, 2891, 2886, 2892, 2886, 2886, 2886, 2886, 2893, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2894, 2886, 2886, 2886, 2894, 2895, 2886, 2886, + 2886, 2895, 2896, 2886, 2886, 2886, 2886, 2896, 2897, 2886, + 2886, 2886, 2897, 2898, 2886, 2899, 2886, 2898, 2898, 2892, + 2892, 2886, 2900, 2893, 2900, 2893, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2881, - 2881, 2882, 2882, 2883, 2883, 2873, 2884, 2884, 2885, 2885, - 2886, 2886, 2885, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2894, + 2894, 2895, 2895, 2896, 2896, 2886, 2897, 2897, 2898, 2898, + 2899, 2899, 2898, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2885, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2898, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2885, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2898, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2885, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2898, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2885, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2873, 2873, 2879, 2873, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2898, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2886, 2892, 2886, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2885, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2898, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2879, 2885, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2898, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2886, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2886, 2892, 2886, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2873, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2886, + 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, - 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2879, - 2873, 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2886, 2892, + 2886, 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, - 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2873, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2886, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2886, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2873, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2873, 2879, 2873, 2879, 2873, 2879, - 2879, 2873, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, + 2892, 2892, 2886, 2892, 2892, 2892, 2886, 2892, 2886, 2892, + 2886, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2886, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2873, - 2873, 2879, 2879, 2873, 2879, 2879, 2873, 2873, 2879, 2879, - 2879, 2873, 2879, 2873, 2879, 2873, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2886, 2886, 2886, 2892, 2892, 2886, 2892, 2892, 2886, + 2886, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2886, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2879, 2873, 2879, 2879, 2873, 2879, 2873, 2879, 2873, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, - 2873, 2873, 2879, 2873, 2879, 2879, 2879, 2879, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, + 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2886, + 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2886, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2886, 2892, 2886, 2886, 2892, 2886, 2892, 2892, 2892, + 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2873, 2879, 2879, 2873, 2873, 2879, - 2879, 2879, 2873, 2873, 2873, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2873, 2879, 2879, 2873, - 2873, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2873, 2873, 2879, 2873, 2873, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2873, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, + 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2892, + 2886, 2886, 2892, 2892, 2892, 2886, 2886, 2886, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2886, + 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, + 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2879, 2879, 2879, 2873, 2879, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2879, 2873, 2879, 2873, 2879, 2879, 2879, - 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2873, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2873, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2873, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, + 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2892, 2886, 2892, 2886, + 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2886, 2892, 2886, 2892, 2886, 2886, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2886, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + + 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2892, + 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2886, 2892, 2892, 2892, 2886, 2892, 2886, 2886, 2892, 2892, + 2892, 2892, 2892, 2886, 2886, 0, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886 - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, - 2879, 2873, 2879, 2879, 2873, 2879, 2879, 2879, 2879, 2879, - 2873, 2879, 2879, 2879, 2879, 2879, 2879, 2873, 2879, 2879, - 2879, 2873, 2879, 2873, 2873, 2879, 2879, 2879, 2879, 2879, - 2873, 2873, 0, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873 } ; -static yyconst flex_uint16_t yy_nxt[5648] = +static yyconst flex_uint16_t yy_nxt[5683] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1492,514 +1497,518 @@ static yyconst flex_uint16_t yy_nxt[5648] = 585, 581, 583, 71, 71, 71, 71, 71, 71, 588, 71, 71, 591, 71, 71, 592, 71, 587, 594, 71, 71, 71, 71, 71, 586, 608, 593, 71, 590, 71, - 595, 71, 597, 611, 71, 596, 71, 598, 607, 612, - 606, 609, 599, 610, 600, 71, 613, 71, 71, 71, - 601, 71, 602, 614, 617, 603, 604, 71, 616, 71, - 71, 615, 605, 619, 71, 618, 71, 620, 71, 623, + 595, 71, 597, 611, 71, 596, 71, 598, 607, 615, + 606, 609, 599, 610, 600, 71, 614, 71, 71, 71, + 601, 71, 602, 612, 618, 603, 604, 613, 617, 71, + 71, 616, 605, 620, 71, 619, 71, 621, 71, 624, - 71, 625, 71, 71, 621, 71, 71, 622, 71, 71, - 71, 626, 71, 631, 624, 627, 71, 628, 632, 150, - 638, 71, 635, 637, 629, 71, 71, 634, 630, 633, - 636, 71, 71, 71, 71, 71, 71, 639, 150, 71, - 645, 71, 71, 647, 649, 71, 640, 642, 650, 643, - 648, 641, 646, 644, 71, 71, 652, 71, 71, 71, - 71, 654, 71, 71, 71, 666, 71, 651, 657, 653, - 71, 71, 663, 655, 658, 656, 71, 664, 71, 659, - 662, 71, 667, 71, 668, 71, 660, 669, 71, 661, - 71, 670, 71, 671, 665, 71, 71, 672, 673, 71, + 71, 626, 71, 71, 622, 71, 71, 71, 71, 623, + 71, 71, 71, 632, 71, 628, 71, 627, 71, 633, + 629, 625, 636, 637, 150, 630, 639, 635, 638, 631, + 634, 71, 71, 641, 71, 71, 71, 71, 71, 71, + 71, 651, 646, 640, 71, 71, 648, 71, 649, 643, + 71, 644, 647, 642, 653, 645, 650, 71, 71, 656, + 71, 71, 652, 71, 655, 71, 71, 71, 659, 71, + 654, 658, 667, 71, 664, 71, 660, 71, 657, 665, + 71, 668, 71, 661, 669, 663, 662, 71, 666, 672, + 71, 670, 71, 671, 71, 71, 71, 71, 673, 674, - 71, 674, 71, 71, 675, 677, 71, 682, 676, 71, - 71, 678, 71, 71, 681, 71, 683, 71, 71, 687, - 71, 148, 685, 71, 71, 71, 679, 71, 680, 688, - 690, 71, 694, 684, 689, 691, 71, 71, 686, 692, - 71, 693, 696, 71, 71, 697, 700, 71, 71, 71, - 71, 702, 71, 703, 695, 705, 701, 698, 71, 699, - 71, 706, 71, 71, 71, 707, 71, 71, 71, 714, - 71, 710, 712, 71, 71, 704, 71, 71, 708, 711, - 71, 709, 715, 71, 720, 71, 718, 71, 713, 740, - 71, 721, 717, 716, 71, 719, 71, 722, 71, 723, + 71, 71, 675, 71, 678, 71, 676, 71, 677, 71, + 679, 682, 683, 71, 71, 71, 71, 684, 71, 688, + 686, 71, 71, 71, 150, 71, 680, 689, 681, 71, + 71, 71, 685, 691, 148, 690, 687, 71, 692, 71, + 695, 694, 693, 71, 71, 699, 71, 696, 697, 698, + 701, 71, 700, 71, 703, 702, 71, 704, 71, 71, + 71, 71, 707, 706, 71, 708, 71, 71, 71, 71, + 715, 71, 71, 711, 713, 71, 71, 709, 71, 705, + 712, 716, 710, 71, 721, 71, 71, 719, 714, 723, + 71, 722, 718, 71, 717, 720, 724, 71, 71, 71, - 71, 727, 729, 724, 71, 725, 71, 71, 71, 728, - 71, 731, 732, 730, 726, 71, 71, 733, 71, 71, - 738, 71, 71, 71, 71, 744, 71, 741, 734, 735, - 71, 71, 71, 742, 71, 745, 747, 746, 736, 737, - 739, 748, 71, 71, 749, 71, 71, 751, 743, 750, - 71, 71, 753, 752, 71, 71, 71, 759, 71, 71, - 71, 71, 760, 71, 754, 71, 71, 768, 761, 755, - 71, 71, 756, 71, 757, 762, 758, 71, 71, 764, - 763, 71, 766, 71, 71, 765, 767, 71, 773, 71, - 770, 769, 71, 71, 71, 71, 779, 71, 71, 71, + 728, 730, 725, 71, 71, 71, 71, 71, 729, 71, + 732, 71, 731, 727, 733, 71, 726, 735, 71, 734, + 71, 739, 71, 71, 736, 71, 71, 71, 742, 743, + 745, 741, 146, 71, 737, 738, 71, 740, 71, 71, + 750, 748, 71, 747, 744, 746, 749, 71, 71, 71, + 751, 752, 71, 71, 754, 71, 71, 71, 760, 71, + 71, 753, 71, 761, 71, 71, 755, 71, 71, 762, + 71, 756, 71, 757, 71, 758, 71, 759, 71, 71, + 763, 766, 764, 769, 767, 768, 765, 71, 770, 71, + 771, 774, 71, 71, 71, 772, 71, 71, 773, 71, - 771, 780, 772, 71, 71, 774, 71, 775, 778, 784, - 776, 71, 777, 783, 782, 71, 71, 781, 71, 71, - 71, 71, 785, 788, 789, 790, 791, 71, 787, 71, - 786, 71, 792, 71, 71, 71, 794, 71, 793, 150, - 795, 71, 71, 797, 799, 800, 71, 796, 71, 798, - 801, 71, 71, 71, 71, 802, 806, 803, 807, 71, - 71, 808, 810, 71, 71, 71, 804, 805, 813, 809, - 71, 812, 71, 811, 71, 71, 815, 819, 71, 817, - 71, 71, 816, 71, 71, 814, 820, 821, 71, 71, - 71, 71, 71, 818, 71, 836, 825, 146, 71, 822, + 71, 781, 71, 71, 71, 71, 782, 71, 71, 776, + 775, 145, 777, 780, 778, 784, 779, 71, 71, 785, + 71, 71, 783, 786, 787, 71, 788, 790, 71, 71, + 789, 71, 792, 791, 793, 71, 794, 71, 71, 795, + 71, 71, 796, 150, 71, 71, 797, 802, 801, 799, + 71, 71, 798, 800, 803, 71, 71, 71, 71, 804, + 805, 809, 71, 71, 810, 812, 71, 813, 71, 815, + 806, 807, 811, 71, 71, 71, 71, 808, 817, 71, + 71, 71, 71, 821, 71, 71, 71, 814, 818, 71, + 822, 823, 71, 816, 71, 71, 71, 71, 820, 824, - 826, 832, 71, 827, 830, 71, 835, 831, 824, 823, - 828, 833, 71, 829, 834, 71, 837, 71, 71, 71, - 842, 71, 71, 838, 71, 71, 71, 850, 71, 855, - 71, 854, 840, 71, 857, 839, 71, 71, 859, 841, - 71, 843, 844, 852, 845, 851, 853, 846, 71, 71, - 71, 858, 847, 861, 860, 856, 71, 71, 848, 849, - 71, 862, 863, 71, 71, 71, 71, 71, 866, 864, - 71, 870, 71, 71, 869, 71, 71, 873, 71, 71, - 879, 71, 865, 895, 71, 867, 868, 871, 877, 872, - 875, 874, 71, 880, 71, 71, 883, 878, 881, 71, + 71, 827, 858, 835, 819, 828, 826, 832, 829, 834, + 825, 833, 71, 71, 71, 830, 71, 837, 831, 71, + 838, 71, 839, 71, 71, 840, 844, 71, 836, 71, + 71, 71, 71, 71, 841, 852, 71, 842, 71, 856, + 857, 71, 71, 859, 843, 71, 845, 846, 853, 847, + 867, 854, 848, 860, 855, 71, 861, 849, 71, 71, + 71, 863, 71, 850, 851, 862, 71, 864, 865, 71, + 71, 866, 71, 868, 71, 71, 872, 71, 71, 71, + 71, 875, 871, 71, 71, 881, 71, 71, 879, 917, + 869, 870, 873, 874, 71, 877, 876, 71, 882, 143, - 882, 876, 71, 884, 71, 71, 886, 887, 71, 71, - 885, 71, 71, 71, 888, 71, 71, 71, 71, 889, - 71, 890, 892, 893, 71, 898, 71, 71, 71, 896, - 71, 71, 897, 891, 71, 71, 900, 894, 71, 901, - 902, 904, 71, 903, 71, 899, 71, 905, 71, 908, - 71, 71, 71, 907, 71, 916, 71, 913, 906, 71, - 911, 909, 71, 71, 915, 914, 71, 71, 918, 910, - 71, 71, 71, 71, 71, 71, 912, 71, 929, 926, - 917, 71, 924, 71, 71, 71, 71, 919, 71, 922, - 920, 921, 923, 71, 930, 927, 71, 925, 931, 71, + 71, 885, 880, 883, 71, 884, 878, 71, 886, 71, + 71, 888, 889, 71, 71, 887, 71, 71, 71, 890, + 71, 71, 71, 71, 891, 71, 892, 894, 895, 897, + 71, 71, 71, 71, 898, 900, 71, 71, 893, 899, + 71, 71, 896, 71, 71, 902, 903, 906, 904, 905, + 71, 901, 71, 71, 910, 907, 71, 71, 909, 71, + 71, 71, 918, 71, 915, 71, 908, 71, 913, 71, + 71, 911, 916, 71, 920, 71, 912, 71, 71, 71, + 71, 71, 71, 928, 914, 931, 919, 71, 921, 926, + 922, 71, 71, 923, 71, 71, 932, 924, 925, 929, - 928, 71, 932, 937, 71, 934, 936, 933, 938, 71, - 935, 71, 71, 71, 71, 944, 71, 946, 939, 71, - 948, 71, 949, 71, 71, 71, 71, 71, 71, 950, - 945, 940, 941, 71, 943, 942, 71, 71, 956, 947, - 957, 954, 71, 951, 71, 952, 71, 958, 955, 71, - 961, 71, 71, 953, 963, 71, 71, 71, 71, 71, - 959, 71, 960, 965, 966, 150, 71, 969, 71, 71, - 964, 962, 967, 968, 71, 71, 71, 71, 71, 972, - 973, 970, 71, 71, 984, 71, 987, 71, 971, 985, - 975, 71, 71, 986, 71, 71, 989, 976, 71, 974, + 927, 930, 71, 71, 933, 71, 939, 71, 936, 935, + 938, 71, 71, 934, 71, 71, 71, 937, 71, 71, + 947, 941, 949, 943, 71, 71, 71, 951, 71, 952, + 71, 940, 71, 71, 942, 71, 944, 71, 948, 946, + 945, 953, 71, 71, 955, 950, 71, 957, 960, 954, + 71, 959, 956, 71, 71, 71, 961, 964, 71, 963, + 966, 71, 71, 71, 958, 71, 969, 150, 71, 71, + 968, 71, 71, 962, 71, 971, 71, 972, 965, 975, + 967, 71, 71, 970, 71, 71, 71, 71, 987, 71, + 71, 973, 974, 988, 71, 990, 71, 71, 978, 71, - 71, 145, 71, 977, 71, 992, 997, 978, 991, 979, - 990, 71, 993, 980, 71, 981, 988, 994, 71, 71, - 982, 71, 995, 71, 999, 983, 998, 71, 996, 71, - 71, 1006, 1001, 71, 1000, 1002, 1005, 71, 1007, 1003, - 1008, 71, 1009, 1004, 71, 1010, 71, 71, 71, 71, - 71, 71, 71, 71, 1025, 1011, 71, 1022, 71, 71, - 71, 1021, 71, 71, 1023, 1012, 1013, 71, 1014, 71, - 1024, 1027, 1042, 1015, 1026, 1016, 1028, 71, 1029, 1030, - 71, 1017, 1031, 71, 1032, 1033, 1018, 1019, 71, 71, - 71, 71, 1034, 1020, 1037, 1038, 1035, 71, 71, 71, + 976, 992, 71, 141, 71, 979, 977, 980, 71, 989, + 1008, 981, 71, 982, 993, 991, 994, 983, 71, 984, + 71, 71, 997, 995, 985, 1000, 996, 998, 71, 986, + 71, 71, 71, 71, 999, 71, 1002, 1004, 71, 1011, + 71, 71, 1009, 1010, 71, 1001, 1003, 1005, 71, 71, + 1012, 1013, 1007, 71, 71, 71, 1006, 71, 71, 71, + 71, 71, 1016, 1014, 1025, 1029, 1024, 71, 1028, 71, + 1027, 71, 1015, 71, 1017, 1026, 71, 1030, 71, 1018, + 71, 1019, 1034, 71, 1035, 1031, 71, 1020, 1036, 1037, + 71, 71, 1021, 1022, 71, 1032, 1040, 1033, 71, 1023, - 71, 1036, 71, 1043, 71, 71, 71, 1040, 1041, 71, - 1046, 1044, 71, 71, 71, 71, 1039, 71, 71, 71, - 1053, 71, 71, 1045, 1051, 1055, 1047, 1048, 1052, 1050, - 71, 71, 1049, 71, 71, 1054, 1057, 1056, 71, 71, - 71, 71, 71, 1068, 71, 1063, 1064, 1065, 1060, 71, - 1058, 71, 1059, 1066, 1062, 71, 1061, 71, 1067, 71, - 1071, 71, 1075, 71, 1069, 1072, 71, 71, 71, 1073, - 1081, 1070, 1074, 71, 71, 1076, 71, 71, 1083, 71, - 71, 143, 1084, 1077, 71, 1078, 1079, 71, 71, 1080, - 71, 71, 1086, 1087, 71, 71, 1089, 1082, 71, 1090, + 71, 71, 71, 1041, 1039, 71, 71, 1046, 71, 1038, + 1043, 71, 71, 71, 1044, 71, 71, 1047, 71, 1042, + 1049, 71, 1045, 71, 71, 71, 71, 1054, 1058, 1056, + 1048, 71, 1050, 1055, 71, 1051, 1052, 1053, 71, 71, + 71, 71, 71, 1057, 71, 71, 71, 1059, 71, 71, + 1066, 1067, 1060, 1068, 1063, 71, 1070, 1065, 1069, 1061, + 1062, 1071, 1064, 71, 71, 1074, 71, 71, 71, 1076, + 1075, 71, 1077, 71, 71, 71, 1072, 1078, 71, 71, + 1073, 71, 1084, 1086, 71, 71, 1080, 1079, 71, 71, + 1089, 1082, 71, 1081, 1083, 1087, 71, 71, 71, 71, - 71, 1085, 71, 1095, 1092, 71, 1088, 1091, 1094, 71, - 1096, 71, 71, 71, 1097, 71, 1093, 71, 1099, 71, - 1100, 71, 71, 1106, 71, 1104, 1107, 71, 71, 71, - 1098, 1101, 71, 1108, 71, 71, 1102, 1105, 1111, 1109, - 1110, 1103, 71, 1114, 71, 1112, 1115, 71, 71, 71, - 71, 71, 71, 71, 1118, 1119, 71, 1116, 71, 71, - 1124, 1125, 1113, 71, 1120, 71, 71, 71, 1117, 71, - 1122, 71, 1128, 71, 1121, 71, 1127, 1132, 1123, 71, - 1126, 71, 1129, 1130, 71, 71, 71, 1131, 71, 1138, - 71, 71, 71, 1134, 71, 71, 71, 1133, 1144, 71, + 71, 1085, 1090, 1092, 1093, 1088, 71, 71, 71, 1098, + 1099, 71, 1091, 1095, 1097, 71, 1096, 71, 1094, 71, + 71, 71, 1103, 1102, 71, 71, 1100, 71, 71, 1109, + 71, 1107, 1110, 71, 71, 71, 71, 1101, 71, 1111, + 71, 1112, 1104, 1108, 1105, 1113, 1114, 1106, 71, 1117, + 71, 1115, 71, 71, 71, 71, 1119, 71, 1118, 1120, + 71, 71, 71, 1122, 1123, 71, 71, 71, 1116, 1128, + 1129, 71, 1121, 1124, 71, 71, 71, 71, 1126, 1132, + 71, 71, 1131, 1125, 71, 71, 1127, 1136, 71, 1130, + 1133, 71, 71, 71, 71, 1134, 1135, 1138, 1142, 71, - 1142, 1143, 71, 141, 1135, 1139, 1146, 1137, 1141, 1140, - 1147, 1136, 71, 71, 71, 71, 71, 1149, 1148, 1150, - 71, 71, 1145, 71, 71, 71, 71, 71, 1153, 71, - 1159, 71, 71, 1156, 1151, 1152, 71, 71, 71, 1154, - 71, 71, 1157, 1173, 1155, 71, 1160, 1163, 1158, 71, - 1165, 71, 1162, 71, 1161, 71, 1169, 71, 1164, 1166, - 1171, 1167, 1170, 1172, 1168, 71, 71, 71, 71, 1174, - 71, 1176, 71, 1178, 1175, 1181, 71, 71, 71, 71, - 71, 1179, 1182, 1183, 71, 1185, 1177, 71, 1186, 71, - 71, 1180, 71, 71, 71, 71, 1187, 71, 71, 1184, + 71, 71, 71, 1137, 71, 71, 71, 1146, 1148, 71, + 71, 1139, 1153, 1141, 1143, 1147, 1144, 1145, 1140, 1150, + 1151, 71, 71, 71, 1149, 71, 71, 1152, 1154, 71, + 71, 71, 71, 71, 71, 1155, 1157, 71, 1163, 71, + 1160, 71, 71, 1156, 71, 1158, 71, 71, 71, 1161, + 71, 1159, 1167, 71, 1173, 1164, 1162, 71, 71, 1166, + 1165, 71, 1169, 1174, 1176, 71, 71, 1168, 1175, 1177, + 71, 1170, 71, 1171, 71, 71, 1172, 1180, 71, 1179, + 1182, 71, 71, 1178, 1185, 71, 71, 1186, 71, 1183, + 71, 1187, 71, 1181, 71, 1189, 1190, 71, 71, 71, - 71, 71, 1193, 71, 1188, 1189, 1191, 71, 1192, 1194, - 71, 1190, 71, 1198, 71, 71, 1203, 1195, 1199, 1197, - 71, 1196, 71, 1202, 71, 71, 71, 71, 1205, 1204, - 1200, 1207, 1201, 1209, 71, 71, 71, 1208, 1210, 71, - 71, 1214, 71, 71, 1206, 71, 1211, 1223, 1212, 1213, - 71, 1222, 71, 71, 1226, 1215, 1221, 1225, 1216, 1217, - 71, 1224, 1227, 1218, 71, 71, 71, 71, 71, 1219, - 1228, 1229, 71, 1220, 71, 1230, 71, 1232, 71, 71, - 71, 1233, 71, 1234, 71, 1231, 71, 1235, 1237, 1239, - 1236, 1242, 1243, 71, 71, 2873, 1240, 71, 71, 1244, + 1184, 71, 71, 1191, 71, 71, 71, 71, 1188, 71, + 71, 1197, 1192, 1193, 1195, 71, 1196, 1198, 1194, 71, + 71, 1202, 71, 1207, 71, 1199, 71, 1201, 1200, 71, + 1204, 1206, 71, 71, 1203, 71, 71, 1211, 1208, 1213, + 1205, 1209, 71, 71, 1214, 71, 1210, 1212, 71, 71, + 1218, 71, 1226, 1227, 71, 1215, 1216, 71, 1228, 71, + 71, 1217, 71, 1230, 1225, 1229, 1231, 1219, 71, 71, + 1220, 1221, 71, 1232, 1233, 1222, 71, 1234, 71, 71, + 1236, 1223, 71, 71, 71, 1224, 1237, 71, 1238, 71, + 71, 1246, 71, 1241, 71, 1243, 71, 71, 1247, 1235, - 1238, 71, 1246, 71, 1241, 1245, 1252, 1247, 71, 1248, - 71, 1249, 71, 1250, 71, 1251, 1254, 71, 1255, 71, - 1258, 1253, 71, 71, 71, 1259, 71, 71, 1257, 1261, - 71, 71, 71, 71, 71, 1256, 1263, 1262, 71, 1268, - 1266, 71, 71, 71, 1260, 1274, 71, 1267, 71, 1264, - 1265, 1270, 1269, 1273, 71, 1276, 71, 71, 71, 1271, - 1277, 71, 1279, 71, 1278, 71, 1282, 71, 1272, 1275, - 71, 1284, 71, 71, 1281, 71, 1285, 71, 1286, 71, - 1289, 71, 1280, 71, 71, 71, 71, 1291, 71, 71, - 1283, 1293, 71, 71, 1295, 1305, 1296, 1294, 1287, 71, + 2886, 1248, 1239, 71, 71, 1240, 1244, 1249, 71, 1242, + 71, 1255, 1245, 1256, 71, 71, 71, 1250, 71, 71, + 1258, 71, 1251, 71, 1252, 1257, 1253, 71, 1254, 1262, + 1261, 71, 1265, 1259, 1263, 71, 71, 1260, 71, 71, + 1267, 71, 71, 71, 71, 1264, 71, 71, 1272, 1270, + 1266, 71, 71, 1274, 71, 71, 1271, 1268, 1269, 1277, + 1273, 1278, 71, 1280, 71, 1275, 71, 1279, 1281, 71, + 71, 71, 1282, 71, 1284, 1283, 1276, 1286, 71, 71, + 1285, 1288, 71, 71, 1289, 71, 71, 1293, 71, 71, + 1290, 71, 71, 1287, 1295, 71, 71, 71, 71, 1299, - 1288, 71, 71, 1290, 1297, 1292, 1298, 71, 71, 71, - 1299, 71, 1300, 1301, 71, 1302, 1303, 71, 71, 1308, - 1309, 71, 71, 71, 1306, 71, 71, 1304, 1310, 1311, - 1312, 1307, 71, 1315, 71, 71, 71, 71, 71, 1319, - 1320, 1313, 71, 1314, 1322, 71, 71, 71, 1321, 71, - 71, 71, 71, 71, 71, 1329, 1316, 1317, 71, 71, - 71, 1318, 71, 1323, 1326, 1327, 71, 1325, 71, 1324, - 71, 1328, 71, 1333, 1334, 71, 1338, 1336, 1330, 71, - 1332, 1339, 71, 1335, 1331, 1337, 71, 1342, 1340, 71, - 71, 71, 71, 71, 71, 1341, 1349, 1347, 1351, 71, + 1291, 1297, 71, 71, 1298, 1301, 71, 1292, 1302, 1294, + 71, 1303, 1296, 71, 71, 71, 1300, 2886, 1304, 1305, + 1306, 71, 1307, 71, 71, 71, 71, 1313, 1308, 1314, + 1310, 1309, 1311, 71, 1316, 71, 71, 71, 71, 1312, + 71, 1315, 71, 1320, 71, 71, 1317, 71, 71, 1324, + 1325, 71, 71, 1319, 1327, 71, 71, 1318, 1326, 71, + 71, 71, 71, 1331, 71, 1321, 71, 1322, 71, 1334, + 71, 1323, 71, 1328, 71, 71, 1332, 1339, 71, 1329, + 1338, 1330, 1333, 71, 71, 71, 1335, 1343, 1341, 71, + 1337, 71, 1344, 71, 1346, 1336, 71, 1340, 71, 1347, - 1348, 71, 71, 1343, 71, 1344, 1345, 1350, 71, 1346, - 1353, 71, 1352, 71, 71, 71, 71, 71, 1357, 71, - 1354, 1359, 71, 71, 1364, 71, 71, 71, 1355, 1356, - 1365, 1361, 1358, 1368, 71, 1360, 71, 1362, 71, 71, - 1363, 71, 71, 1366, 71, 71, 1367, 71, 1369, 71, - 1375, 71, 1371, 1370, 1376, 71, 1372, 1373, 71, 71, - 1377, 71, 1380, 1374, 1382, 71, 1381, 1378, 1379, 71, - 1385, 1386, 71, 1387, 1384, 71, 71, 71, 71, 1388, - 1389, 71, 71, 71, 1391, 71, 1383, 1390, 71, 71, - 71, 1396, 71, 71, 71, 71, 1395, 71, 71, 1393, + 71, 71, 71, 1342, 1354, 71, 1352, 1345, 1356, 1353, + 1348, 71, 71, 1349, 71, 1350, 1357, 71, 1351, 1355, + 71, 71, 1358, 71, 71, 71, 71, 71, 1362, 71, + 1364, 71, 71, 71, 1369, 71, 1359, 71, 1373, 1361, + 1366, 1370, 1363, 71, 71, 71, 1360, 1365, 1372, 1367, + 1368, 71, 71, 1371, 71, 1374, 71, 71, 71, 71, + 71, 71, 1380, 1382, 1375, 1376, 1381, 1377, 71, 1378, + 1384, 71, 1385, 71, 71, 1379, 71, 2886, 1383, 1387, + 1390, 1389, 1391, 1386, 71, 1392, 71, 71, 71, 71, + 1393, 1394, 71, 71, 71, 1388, 1396, 1395, 71, 71, - 1392, 1398, 1399, 1394, 1402, 71, 1407, 71, 1400, 1403, - 71, 1404, 1397, 71, 1401, 71, 1405, 71, 1406, 71, - 71, 71, 71, 1415, 1410, 1411, 1408, 71, 71, 71, - 1418, 71, 1409, 1416, 71, 71, 71, 71, 1412, 1421, - 1414, 1413, 71, 1420, 71, 71, 71, 71, 1426, 71, - 1419, 71, 1429, 1417, 1422, 71, 2873, 71, 1430, 1432, - 71, 1423, 71, 1424, 1428, 1425, 71, 1433, 1427, 1431, - 1434, 71, 71, 71, 71, 71, 1438, 71, 71, 71, - 1439, 1436, 1441, 2873, 1435, 71, 1437, 1445, 71, 71, - 1442, 71, 71, 1440, 1446, 1444, 1447, 71, 1443, 71, + 71, 71, 1401, 71, 71, 1400, 71, 71, 71, 1404, + 71, 1407, 1397, 1398, 1403, 1399, 1408, 71, 71, 1409, + 71, 1405, 71, 1402, 1410, 71, 71, 1406, 71, 1412, + 1411, 1415, 71, 71, 1420, 71, 71, 1413, 1416, 1414, + 71, 1421, 71, 1423, 71, 1417, 71, 71, 71, 71, + 1426, 71, 1418, 1419, 1425, 71, 71, 71, 71, 2886, + 71, 71, 1434, 1424, 71, 1427, 1428, 1435, 1422, 71, + 1429, 1431, 1437, 71, 1430, 1433, 71, 71, 71, 1432, + 1439, 1436, 1438, 71, 71, 71, 71, 71, 71, 1443, + 1446, 1440, 1441, 1444, 71, 1450, 71, 1442, 71, 71, - 71, 1448, 1453, 1449, 71, 1450, 1454, 71, 71, 71, - 1451, 71, 71, 1458, 71, 1459, 1457, 1461, 71, 71, - 1452, 71, 1455, 71, 1463, 71, 1462, 71, 71, 71, - 1456, 1466, 71, 71, 1460, 1464, 71, 1469, 71, 71, - 71, 1468, 71, 1465, 1472, 71, 1473, 71, 1470, 1467, - 71, 1477, 71, 71, 71, 71, 71, 1475, 1474, 1471, - 1480, 1482, 71, 71, 71, 1485, 1478, 1483, 71, 1481, - 71, 1479, 1476, 71, 71, 71, 1484, 1488, 1491, 71, - 1490, 1487, 71, 71, 71, 71, 71, 71, 1498, 71, - 1486, 2873, 71, 1489, 1499, 71, 71, 1493, 71, 1496, + 71, 1447, 71, 1451, 1452, 71, 1445, 71, 1448, 1453, + 1449, 1454, 71, 1458, 1459, 71, 71, 71, 71, 71, + 1455, 1464, 1457, 1462, 71, 1463, 71, 71, 1466, 71, + 1456, 71, 71, 71, 1460, 1467, 1468, 71, 1461, 71, + 71, 71, 1471, 71, 1474, 71, 1465, 1469, 71, 1470, + 1473, 71, 71, 71, 1479, 71, 71, 1478, 71, 71, + 1472, 71, 1483, 1475, 71, 71, 1476, 71, 1488, 71, + 1477, 1481, 1486, 1480, 71, 71, 71, 1485, 1484, 1489, + 1487, 71, 1491, 1482, 71, 71, 71, 71, 71, 1494, + 1497, 71, 1496, 71, 1490, 1493, 71, 71, 1492, 71, - 1492, 71, 71, 1494, 1495, 1502, 1503, 71, 71, 1505, - 1507, 1497, 1500, 1506, 1509, 1501, 71, 71, 1504, 71, - 71, 71, 1508, 1511, 71, 71, 71, 1513, 71, 1516, - 1514, 1510, 71, 1517, 71, 71, 71, 71, 1512, 71, - 1521, 71, 1522, 71, 71, 71, 71, 1689, 1518, 1525, - 1515, 1520, 1526, 1519, 1528, 1523, 71, 71, 71, 1524, - 71, 1529, 71, 1531, 1527, 1533, 1530, 1534, 1538, 1532, - 71, 71, 1536, 71, 71, 1535, 71, 1537, 71, 71, - 71, 71, 71, 1539, 71, 1545, 71, 1544, 1546, 71, - 71, 71, 1540, 1548, 71, 1547, 71, 71, 1541, 71, + 71, 1504, 71, 71, 71, 1495, 1498, 1499, 1505, 71, + 71, 1502, 71, 1508, 71, 1500, 1501, 1509, 71, 1512, + 1511, 1513, 1506, 71, 1503, 1515, 71, 71, 71, 1507, + 1510, 71, 1517, 71, 71, 71, 71, 71, 1522, 1520, + 1516, 1519, 71, 1514, 71, 1523, 71, 1518, 71, 71, + 71, 1528, 1527, 71, 71, 71, 1524, 71, 1531, 2886, + 1521, 1532, 1534, 1526, 1525, 1529, 71, 71, 71, 71, + 71, 1535, 1539, 1533, 1530, 1537, 1536, 1540, 71, 71, + 71, 1542, 1538, 71, 1541, 71, 1543, 1544, 71, 71, + 71, 1546, 71, 71, 1545, 71, 1551, 1552, 1550, 71, - 1542, 1550, 1543, 1551, 71, 71, 71, 1553, 71, 1549, - 1552, 71, 71, 1560, 71, 71, 71, 1554, 71, 71, - 71, 71, 1556, 71, 1558, 1557, 1555, 1559, 1565, 71, - 71, 1568, 1563, 71, 71, 1561, 1562, 71, 1567, 71, - 71, 1564, 71, 1566, 71, 1571, 71, 71, 71, 1569, - 71, 1570, 71, 1573, 1575, 1574, 2873, 1572, 1578, 1576, - 71, 1579, 1577, 1582, 1583, 71, 1580, 1584, 71, 71, - 1586, 71, 71, 1581, 1587, 1588, 71, 71, 71, 71, - 71, 1585, 71, 1591, 1592, 1589, 71, 71, 71, 1601, - 71, 71, 71, 71, 71, 1595, 1590, 1597, 1594, 1593, + 71, 1554, 71, 71, 1553, 71, 1547, 71, 71, 1548, + 1556, 71, 1549, 1557, 71, 71, 1558, 71, 71, 71, + 71, 1566, 71, 1555, 71, 71, 1559, 71, 71, 71, + 1571, 71, 1562, 1563, 1564, 1560, 71, 1561, 1565, 71, + 1567, 71, 1569, 71, 1568, 71, 1573, 71, 1574, 71, + 1570, 71, 71, 71, 1575, 71, 1572, 1576, 71, 1581, + 1579, 71, 71, 71, 1589, 71, 1588, 1578, 1580, 1577, + 1582, 1584, 71, 1583, 1590, 71, 71, 1585, 71, 1594, + 71, 1593, 1586, 1587, 1591, 71, 71, 71, 71, 71, + 71, 71, 1597, 1598, 1592, 71, 71, 1606, 1595, 71, - 1598, 1599, 1600, 71, 71, 71, 1596, 1603, 71, 1606, - 71, 1602, 71, 71, 1610, 71, 71, 1607, 1605, 71, - 71, 1604, 71, 1614, 1613, 1612, 71, 71, 71, 1616, - 1609, 1611, 1617, 1621, 1624, 1608, 71, 1615, 1622, 71, - 71, 71, 1626, 71, 1618, 1627, 1620, 71, 1619, 1629, - 1623, 71, 1628, 71, 71, 71, 71, 1633, 71, 1625, - 1630, 1637, 71, 71, 71, 71, 71, 71, 1635, 71, - 1632, 1634, 1638, 1631, 1636, 71, 71, 1641, 71, 71, - 71, 1639, 1647, 71, 1642, 1640, 71, 71, 71, 1643, - 71, 1644, 1653, 1645, 1646, 71, 1648, 71, 71, 71, + 1601, 71, 71, 71, 71, 1596, 1600, 71, 1599, 1609, + 1603, 1605, 71, 1604, 1602, 1607, 71, 71, 71, 1608, + 71, 1611, 1610, 71, 1616, 71, 71, 71, 1612, 1613, + 71, 1620, 1619, 71, 71, 1618, 71, 71, 1615, 71, + 71, 1617, 1627, 1614, 1630, 1621, 1622, 1628, 71, 1623, + 71, 1624, 71, 1629, 1626, 1625, 1632, 71, 1631, 1633, + 71, 71, 1635, 71, 1639, 71, 1634, 71, 71, 1636, + 71, 1643, 1637, 71, 1638, 71, 1641, 71, 71, 71, + 1640, 71, 1642, 1644, 71, 71, 71, 71, 71, 1647, + 71, 1653, 71, 1648, 71, 1655, 71, 1645, 1646, 1649, - 71, 1657, 71, 71, 71, 1650, 1649, 71, 1652, 1651, - 71, 1659, 71, 1663, 71, 1655, 71, 1660, 1656, 1654, - 71, 1661, 71, 1658, 71, 1662, 1666, 71, 71, 1665, - 1670, 71, 71, 1664, 71, 71, 1668, 71, 71, 71, - 71, 1667, 1672, 71, 2873, 1677, 1671, 1669, 71, 1673, - 1674, 71, 1678, 1675, 1680, 1681, 71, 71, 71, 1676, - 1682, 1679, 1683, 71, 71, 1686, 71, 1685, 71, 1684, - 71, 71, 1687, 71, 71, 71, 71, 1690, 1688, 71, - 71, 71, 71, 71, 1695, 71, 71, 1699, 1691, 1696, - 71, 71, 1692, 1693, 1694, 1697, 1698, 1704, 71, 1700, + 1650, 71, 1651, 71, 1652, 1657, 71, 1656, 71, 1661, + 71, 71, 71, 1654, 1658, 71, 1665, 71, 71, 1660, + 71, 71, 1659, 1668, 1667, 71, 1663, 71, 71, 1664, + 1662, 71, 1666, 1669, 1671, 71, 1670, 1674, 71, 71, + 71, 71, 1673, 71, 1672, 1678, 71, 71, 71, 71, + 1680, 1676, 71, 71, 1675, 1679, 1685, 71, 71, 1677, + 1681, 1682, 71, 2886, 1688, 1686, 1683, 1689, 71, 71, + 71, 71, 1684, 1690, 1692, 1687, 1691, 71, 1694, 71, + 1693, 1695, 71, 71, 71, 1697, 71, 71, 71, 1698, + 71, 1696, 71, 71, 71, 71, 71, 1703, 71, 71, - 1705, 1703, 71, 71, 71, 1702, 71, 71, 71, 1710, - 1707, 71, 1701, 71, 1713, 1714, 71, 1715, 71, 1708, - 1717, 71, 71, 1706, 1709, 1711, 71, 1712, 1716, 71, - 1718, 1721, 71, 71, 1723, 71, 1725, 1722, 1724, 71, - 71, 71, 71, 1719, 1727, 71, 71, 1720, 1729, 1732, - 71, 1730, 71, 71, 1731, 71, 71, 1726, 1733, 1734, - 1735, 71, 1739, 71, 1741, 1736, 1728, 71, 71, 1742, - 71, 71, 71, 71, 1744, 71, 1737, 71, 1745, 71, - 1747, 1738, 71, 1740, 1748, 1743, 71, 71, 1746, 1751, - 71, 71, 1753, 71, 71, 1756, 71, 1749, 1757, 71, + 71, 1707, 71, 1704, 1708, 71, 71, 1699, 1701, 71, + 1700, 1702, 1705, 1706, 1712, 71, 1713, 1709, 71, 1710, + 1711, 71, 71, 1714, 71, 1715, 1718, 71, 1721, 1717, + 1722, 71, 1723, 71, 1716, 1719, 71, 1720, 1725, 71, + 71, 1726, 71, 71, 1729, 71, 71, 1731, 71, 1733, + 1730, 1732, 71, 71, 1735, 71, 1724, 71, 71, 71, + 71, 1737, 2886, 1727, 1728, 1738, 71, 71, 1739, 1740, + 1734, 1741, 1742, 1743, 71, 71, 71, 1747, 1744, 71, + 1749, 71, 1736, 71, 71, 1750, 71, 71, 71, 1752, + 71, 1755, 71, 1756, 1745, 1751, 1746, 71, 71, 1748, - 1750, 1759, 71, 71, 71, 71, 71, 1754, 1752, 1765, - 71, 1764, 71, 1761, 1762, 1755, 1758, 71, 71, 71, - 71, 71, 71, 1771, 71, 1768, 71, 1763, 1760, 1769, - 71, 1775, 71, 1766, 1767, 1774, 71, 71, 1778, 1779, - 1780, 71, 1773, 1777, 71, 71, 71, 1770, 71, 71, - 1772, 1781, 1776, 71, 71, 71, 71, 1782, 1786, 71, - 71, 1789, 1790, 71, 71, 71, 1785, 71, 71, 1783, - 71, 1793, 1784, 71, 1787, 71, 71, 1802, 71, 1792, - 1799, 71, 71, 1791, 1796, 1788, 71, 1794, 1797, 71, - 1795, 1801, 1800, 1803, 1798, 71, 1806, 71, 71, 71, + 71, 1753, 71, 1754, 1759, 71, 71, 1761, 71, 71, + 1764, 71, 1757, 1765, 71, 1767, 71, 71, 71, 1758, + 71, 71, 1762, 71, 1773, 71, 1760, 1769, 1772, 1770, + 1763, 1766, 71, 71, 71, 71, 1775, 71, 71, 1779, + 1776, 71, 1768, 71, 1771, 71, 1777, 71, 1783, 71, + 1782, 71, 1789, 1774, 71, 71, 1786, 1787, 1785, 1781, + 71, 1778, 71, 71, 1788, 71, 71, 1780, 71, 1784, + 71, 1794, 71, 71, 1792, 1790, 71, 1797, 1798, 71, + 1791, 71, 1793, 71, 71, 71, 71, 1801, 71, 71, + 1795, 71, 71, 2886, 1800, 1809, 1807, 1810, 71, 1796, - 71, 71, 1807, 71, 1813, 1810, 1804, 71, 71, 2873, - 71, 1805, 1808, 1815, 1816, 71, 71, 1817, 1809, 71, - 71, 1811, 1814, 1812, 1818, 1821, 71, 1822, 71, 71, - 1819, 1823, 1825, 1826, 71, 1820, 1824, 71, 71, 71, - 71, 1830, 71, 71, 71, 1828, 1829, 71, 1832, 71, - 1835, 71, 1837, 71, 1831, 1827, 71, 71, 71, 71, - 71, 1833, 71, 1842, 71, 1838, 1847, 1841, 1834, 1839, - 71, 1843, 71, 1836, 1844, 71, 1845, 71, 1840, 71, - 71, 71, 71, 71, 1846, 1848, 1849, 71, 1850, 1851, - 71, 71, 1852, 1853, 71, 1854, 71, 1855, 71, 71, + 71, 1799, 71, 1802, 1805, 1803, 1808, 1804, 71, 71, + 1806, 71, 1811, 1812, 1814, 71, 71, 71, 1813, 71, + 71, 1821, 1818, 71, 71, 1816, 71, 71, 2886, 1823, + 1815, 1824, 71, 71, 1825, 1817, 71, 71, 1822, 1819, + 1820, 1826, 71, 1830, 71, 1827, 1831, 71, 71, 1832, + 1834, 1835, 1836, 1828, 1833, 71, 71, 71, 1829, 71, + 1838, 1839, 71, 71, 1837, 71, 71, 71, 71, 1841, + 1844, 1846, 71, 71, 1840, 1842, 71, 71, 71, 71, + 71, 71, 1851, 1856, 1847, 1848, 1850, 71, 1852, 71, + 1845, 1843, 1853, 71, 1854, 71, 71, 1849, 71, 71, - 1859, 71, 71, 1856, 1858, 71, 1857, 1860, 71, 71, - 1861, 1863, 71, 1862, 71, 71, 71, 1870, 1865, 71, - 1868, 71, 1864, 71, 1869, 71, 1872, 71, 71, 71, - 71, 1876, 1866, 71, 1867, 1871, 71, 1873, 1875, 71, - 1878, 71, 1877, 71, 1880, 1874, 1882, 71, 71, 71, - 71, 1883, 71, 71, 1881, 1888, 71, 1879, 1891, 1884, - 71, 71, 71, 1890, 1887, 1885, 71, 1886, 1892, 71, - 1889, 71, 71, 1896, 1893, 71, 71, 71, 1894, 71, - 1895, 71, 71, 71, 1897, 71, 71, 71, 71, 1899, - 71, 1900, 1904, 1901, 1908, 71, 71, 1898, 1903, 1911, + 1855, 71, 1857, 1858, 71, 1859, 71, 71, 71, 1861, + 1860, 1862, 71, 1864, 71, 71, 1868, 71, 1863, 1865, + 1867, 71, 71, 71, 1872, 71, 1866, 1870, 1871, 71, + 1869, 71, 71, 71, 71, 2886, 71, 1879, 1877, 71, + 1874, 1878, 71, 71, 71, 1881, 71, 71, 1885, 1873, + 1875, 71, 1876, 1880, 71, 1884, 1882, 71, 71, 71, + 1883, 1891, 71, 1886, 1889, 71, 71, 71, 1892, 1887, + 71, 1890, 1888, 71, 1897, 71, 71, 1899, 71, 71, + 71, 1900, 1893, 1894, 71, 1895, 1902, 1896, 1901, 71, + 71, 1903, 1898, 71, 1905, 71, 71, 71, 71, 71, - 1907, 71, 71, 1909, 71, 1905, 1912, 1906, 1902, 1914, - 1910, 71, 71, 1915, 71, 71, 71, 71, 71, 1917, - 71, 71, 1913, 1918, 1919, 71, 71, 1921, 1923, 71, - 1916, 1925, 1922, 1927, 71, 1920, 71, 71, 71, 1926, - 1924, 71, 1929, 1930, 71, 71, 71, 1935, 71, 1931, - 1932, 71, 71, 71, 71, 71, 1933, 1936, 71, 1938, - 71, 1937, 1928, 1941, 71, 1945, 1934, 71, 1942, 1940, - 71, 71, 71, 1939, 71, 1943, 1947, 1946, 1944, 71, - 1950, 71, 1951, 71, 1952, 71, 1953, 1948, 71, 71, - 71, 71, 1957, 71, 1959, 1949, 71, 1954, 1955, 1960, + 71, 71, 71, 71, 1906, 2886, 71, 71, 1913, 1908, + 1904, 1909, 1910, 1917, 71, 71, 1912, 1907, 1916, 71, + 71, 1914, 1920, 1915, 1911, 1918, 71, 71, 71, 71, + 1924, 1921, 1923, 71, 71, 1919, 71, 71, 1926, 71, + 1922, 1927, 71, 71, 71, 1928, 1932, 1925, 1930, 71, + 71, 1934, 1936, 71, 1931, 1929, 71, 71, 71, 1939, + 71, 71, 1933, 1938, 1935, 1940, 1941, 71, 71, 1944, + 71, 71, 71, 71, 71, 71, 1945, 71, 1950, 71, + 1947, 71, 1937, 1946, 1954, 1942, 71, 1951, 1943, 1952, + 71, 1949, 1948, 71, 71, 71, 1956, 71, 1955, 1959, - 71, 1956, 1961, 71, 71, 71, 71, 71, 1962, 1964, - 1965, 71, 1958, 1969, 71, 1963, 71, 71, 71, 1966, - 1968, 71, 71, 71, 71, 71, 71, 1967, 71, 71, - 1977, 1978, 1973, 71, 1970, 1971, 1975, 1972, 1974, 1979, - 1976, 71, 71, 71, 1983, 1982, 71, 1981, 1987, 71, - 71, 71, 1980, 1989, 71, 1986, 71, 71, 71, 1988, - 1984, 1991, 71, 1992, 71, 1998, 1994, 1996, 1985, 1993, - 1990, 1995, 71, 71, 1997, 71, 2001, 71, 71, 2002, - 71, 71, 71, 1999, 2000, 2006, 71, 71, 2007, 71, - 2005, 2010, 71, 2003, 2008, 71, 2016, 71, 71, 2012, + 71, 1953, 71, 1957, 71, 1961, 71, 1962, 71, 1960, + 71, 1958, 71, 71, 1966, 1968, 71, 1963, 71, 1964, + 1969, 71, 1965, 1967, 71, 1970, 71, 71, 71, 71, + 1971, 1973, 1974, 1976, 1978, 71, 1972, 71, 1977, 71, + 71, 1975, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 1987, 71, 1988, 1984, 1979, 1981, 1980, 1982, 1985, + 1983, 71, 71, 1986, 71, 1993, 71, 1989, 1991, 71, + 1994, 71, 1992, 1997, 71, 1996, 1999, 71, 1998, 71, + 1990, 71, 71, 2001, 71, 2006, 2002, 2004, 2007, 1995, + 2000, 71, 2005, 71, 71, 2003, 71, 71, 71, 2008, - 2011, 2013, 71, 71, 2004, 2015, 71, 2009, 2014, 71, - 71, 71, 71, 2018, 71, 71, 71, 2020, 71, 2026, - 71, 2023, 71, 71, 71, 71, 2017, 2027, 71, 71, - 2022, 71, 71, 2029, 71, 2019, 2024, 2021, 2025, 2028, - 71, 2031, 71, 2036, 71, 2033, 71, 2034, 71, 71, - 2032, 2030, 71, 71, 2037, 2040, 71, 71, 71, 71, - 2035, 2047, 71, 71, 71, 71, 2048, 2038, 2039, 2044, - 71, 2104, 2042, 71, 2046, 71, 2041, 2043, 2049, 2045, - 71, 2052, 2053, 71, 2050, 71, 2051, 2054, 71, 71, - 2055, 71, 2057, 71, 2060, 71, 71, 71, 2056, 71, + 2011, 71, 71, 2012, 2010, 2009, 71, 2015, 2016, 71, + 71, 2017, 71, 2020, 71, 71, 71, 2013, 2018, 71, + 2021, 71, 2022, 2023, 71, 71, 71, 2025, 2014, 2026, + 2019, 2024, 71, 71, 2027, 71, 2028, 71, 71, 71, + 2030, 2029, 71, 71, 2033, 2036, 71, 71, 71, 71, + 71, 2037, 71, 2032, 2039, 71, 71, 71, 2035, 71, + 2031, 2034, 2043, 2038, 2041, 2046, 71, 71, 71, 2044, + 71, 71, 71, 71, 2042, 2047, 2040, 2045, 71, 71, + 71, 71, 71, 2057, 71, 71, 71, 2048, 2058, 2049, + 71, 2054, 2052, 71, 2050, 2060, 2051, 2056, 71, 2053, - 71, 2061, 2058, 71, 2062, 2059, 2066, 71, 71, 2063, - 2067, 71, 2065, 2069, 71, 2071, 71, 2064, 71, 71, - 2074, 71, 2068, 71, 2073, 71, 2070, 2075, 71, 71, - 71, 71, 71, 2072, 2077, 71, 2080, 2076, 2081, 71, - 2083, 71, 71, 2078, 71, 71, 2087, 2086, 2085, 2079, - 71, 2082, 71, 2084, 2089, 71, 71, 2093, 71, 71, - 71, 2088, 71, 71, 71, 2098, 71, 2091, 2097, 2090, - 71, 71, 2102, 71, 71, 2092, 71, 2096, 71, 2094, - 71, 2107, 2099, 2095, 71, 2100, 2101, 71, 71, 2109, - 2105, 71, 71, 2108, 2103, 71, 71, 2112, 71, 71, + 2086, 2055, 71, 2059, 71, 2062, 2061, 2063, 71, 2064, + 71, 71, 2067, 2065, 71, 2066, 2070, 71, 71, 71, + 71, 71, 71, 2068, 2071, 2072, 2069, 2076, 71, 2077, + 71, 71, 2079, 71, 2075, 71, 2081, 71, 2073, 71, + 71, 2074, 2084, 71, 71, 2083, 2085, 71, 71, 71, + 2078, 71, 71, 2080, 2082, 71, 2090, 2087, 2088, 2091, + 71, 2093, 71, 71, 71, 71, 2097, 2096, 2089, 2095, + 71, 2092, 71, 2094, 2099, 71, 71, 2103, 71, 71, + 71, 2098, 71, 71, 71, 2108, 71, 2101, 2107, 2100, + 71, 71, 2112, 71, 71, 2102, 71, 2106, 71, 2104, - 2113, 71, 71, 2111, 2106, 71, 2117, 71, 2110, 71, - 2119, 2115, 2120, 2122, 71, 71, 2124, 71, 71, 71, - 2116, 2114, 71, 2125, 2121, 71, 2873, 71, 2118, 71, - 2127, 71, 71, 2133, 2128, 2123, 2129, 2134, 2130, 71, - 2126, 2131, 71, 71, 71, 2132, 2135, 71, 71, 2138, - 71, 2139, 71, 2140, 71, 71, 2137, 71, 71, 2146, - 71, 2141, 71, 71, 2136, 71, 71, 71, 71, 2147, - 2142, 2144, 2143, 71, 2145, 2148, 2153, 2149, 2150, 71, - 2152, 71, 2151, 2155, 2154, 2157, 71, 71, 2158, 2159, - 71, 71, 71, 2156, 2160, 2162, 2163, 2161, 2164, 71, + 71, 71, 2109, 2105, 71, 2110, 2111, 2114, 71, 2117, + 2115, 71, 71, 2118, 2113, 71, 71, 2119, 71, 71, + 71, 2120, 71, 2121, 2116, 2122, 71, 2123, 71, 2125, + 71, 2127, 71, 2129, 2132, 2130, 71, 2124, 2134, 2126, + 71, 71, 71, 71, 71, 2128, 2135, 2131, 2136, 71, + 71, 71, 71, 71, 71, 71, 2886, 2133, 2144, 2139, + 2140, 2141, 2138, 2142, 71, 2145, 71, 2137, 71, 2143, + 2146, 71, 2150, 2147, 71, 2149, 71, 2148, 71, 71, + 2151, 71, 71, 71, 2157, 71, 71, 71, 2152, 71, + 71, 2159, 71, 71, 71, 2164, 2153, 2155, 2154, 2156, - 71, 71, 71, 71, 2166, 71, 71, 71, 71, 2170, - 71, 71, 71, 2172, 2165, 2171, 71, 2167, 2173, 71, - 2168, 2174, 71, 71, 2178, 71, 2169, 2177, 71, 71, - 71, 2175, 2176, 71, 2180, 71, 71, 71, 71, 2187, - 2184, 2179, 71, 2186, 71, 71, 71, 71, 2188, 2183, - 2181, 2191, 2192, 2182, 71, 71, 71, 2185, 71, 71, - 71, 2194, 2189, 2190, 2193, 71, 2196, 71, 2195, 71, - 2197, 71, 2199, 2200, 2201, 71, 2203, 71, 2206, 71, - 71, 2198, 2205, 71, 71, 71, 71, 2202, 2204, 71, - 71, 2209, 71, 2213, 71, 2211, 2215, 2212, 2207, 2214, + 71, 2158, 2160, 2161, 2162, 2163, 71, 2168, 71, 71, + 2169, 2165, 2167, 71, 2166, 2170, 71, 71, 2172, 2173, + 2171, 2174, 2175, 71, 71, 71, 71, 71, 71, 2177, + 71, 71, 71, 2181, 71, 71, 71, 2183, 2176, 2182, + 2179, 2185, 2178, 2184, 71, 71, 71, 71, 2189, 71, + 2180, 2188, 71, 71, 2186, 71, 71, 71, 2191, 71, + 71, 71, 71, 2195, 2198, 2190, 2187, 2197, 71, 71, + 71, 2194, 71, 71, 2199, 2192, 2193, 2202, 2203, 2200, + 2196, 2204, 71, 71, 71, 2201, 71, 2886, 2205, 71, + 2207, 71, 71, 2210, 2208, 71, 2206, 2212, 71, 2211, - 71, 2208, 71, 71, 2216, 71, 71, 71, 71, 71, - 71, 2224, 2219, 2222, 71, 2210, 71, 71, 2223, 71, - 71, 2217, 2221, 2227, 71, 71, 71, 2220, 2218, 71, - 2230, 2231, 71, 71, 2225, 2226, 71, 71, 2228, 71, - 2235, 2232, 2233, 2229, 71, 71, 2234, 2236, 2239, 71, - 2238, 2240, 71, 2241, 71, 2242, 71, 71, 71, 2237, - 71, 71, 2246, 71, 2247, 2245, 71, 71, 71, 2243, - 71, 2252, 71, 2253, 71, 71, 2244, 71, 2248, 2249, - 2254, 71, 71, 71, 2256, 71, 2251, 2255, 2250, 71, - 2259, 71, 2262, 71, 2257, 71, 71, 71, 71, 71, + 2214, 71, 71, 71, 2216, 71, 71, 71, 71, 2209, + 2213, 2215, 71, 2220, 71, 71, 71, 71, 2224, 71, + 2222, 2218, 2223, 2226, 2217, 2225, 71, 71, 2219, 71, + 71, 2227, 2228, 71, 71, 71, 2233, 71, 2230, 71, + 2221, 71, 71, 71, 2235, 2238, 71, 2232, 2234, 2229, + 71, 71, 71, 2231, 71, 2241, 2886, 2237, 71, 2236, + 2242, 71, 2239, 2243, 71, 71, 2245, 71, 71, 2240, + 2244, 71, 2248, 2250, 71, 71, 2249, 2251, 71, 2252, + 71, 2246, 2247, 2253, 71, 71, 71, 2254, 71, 2257, + 71, 2256, 71, 2258, 71, 71, 71, 2263, 71, 71, - 71, 71, 71, 2258, 2263, 71, 2269, 2270, 71, 2260, - 71, 2261, 2266, 71, 71, 2268, 71, 2265, 71, 2276, - 2273, 71, 2264, 2271, 2267, 2272, 2278, 71, 71, 2280, - 71, 71, 2277, 2279, 71, 2274, 71, 2275, 2281, 71, - 71, 2282, 71, 2283, 71, 2284, 2287, 2286, 71, 2285, - 71, 71, 71, 71, 2288, 71, 71, 71, 2295, 2296, - 71, 2292, 2299, 71, 2301, 71, 2289, 71, 71, 71, - 71, 2291, 2290, 2293, 2294, 71, 2298, 2297, 2300, 71, - 71, 71, 2304, 71, 71, 71, 2302, 2312, 2303, 2310, - 71, 2311, 71, 71, 2305, 71, 71, 71, 2306, 2307, + 2265, 71, 2259, 2255, 2266, 71, 2260, 71, 71, 71, + 71, 71, 2262, 71, 71, 2261, 2268, 71, 2264, 2267, + 2269, 71, 2271, 2274, 71, 71, 71, 71, 71, 71, + 2270, 2272, 71, 2273, 2275, 71, 2281, 71, 2282, 2278, + 2276, 2277, 2280, 71, 71, 71, 71, 2283, 71, 2288, + 71, 2279, 2284, 71, 71, 2290, 2292, 71, 2291, 2293, + 71, 2285, 2289, 71, 2294, 71, 2286, 71, 2287, 71, + 2295, 71, 2296, 2299, 71, 71, 71, 71, 2298, 71, + 71, 71, 71, 2297, 71, 2307, 2308, 71, 2304, 2311, + 71, 71, 71, 2301, 2300, 71, 71, 2303, 2302, 2306, - 2308, 71, 2309, 2313, 71, 71, 2316, 71, 71, 71, - 2314, 2320, 2319, 2321, 71, 2315, 71, 2317, 2322, 2323, - 71, 71, 71, 71, 2318, 2328, 71, 2324, 71, 71, - 2325, 2329, 71, 71, 71, 2327, 2333, 2334, 71, 71, - 71, 2326, 2337, 71, 2338, 71, 71, 71, 2330, 2332, - 2340, 2331, 2336, 71, 2335, 2341, 71, 71, 2345, 71, - 2339, 71, 2347, 71, 71, 71, 2342, 2343, 2349, 71, - 2350, 71, 71, 2346, 2352, 71, 71, 2344, 71, 2353, - 2355, 71, 71, 2348, 2351, 71, 71, 71, 71, 2356, - 2360, 71, 71, 2354, 2358, 2357, 2359, 2362, 71, 71, + 2305, 2310, 2313, 71, 2309, 2312, 71, 71, 71, 2314, + 71, 71, 71, 2315, 2316, 2322, 71, 2323, 71, 2324, + 71, 2317, 71, 71, 71, 71, 2318, 2320, 2319, 2328, + 71, 2321, 71, 71, 71, 2332, 71, 2326, 2325, 2331, + 2333, 71, 2327, 71, 71, 2334, 2335, 71, 71, 71, + 2329, 71, 2330, 2337, 71, 2336, 71, 71, 71, 2341, + 71, 2339, 71, 2346, 71, 2345, 71, 2338, 2349, 71, + 71, 2340, 2347, 71, 2350, 71, 2342, 2343, 71, 2352, + 2344, 2353, 71, 71, 2348, 71, 2357, 71, 2351, 71, + 71, 2354, 2359, 71, 2361, 71, 71, 71, 2364, 71, - 71, 2361, 2363, 2364, 71, 71, 71, 2365, 71, 71, - 71, 71, 2873, 2367, 2368, 2370, 2371, 2373, 71, 2366, - 2369, 2374, 71, 2372, 71, 71, 71, 2377, 2379, 71, - 2376, 2375, 71, 71, 71, 71, 2381, 2380, 71, 2384, - 71, 2385, 71, 2383, 2378, 71, 2387, 71, 2382, 71, - 2389, 2586, 2388, 2873, 71, 2390, 71, 71, 2386, 2391, - 2393, 71, 2392, 71, 71, 2394, 71, 71, 2395, 71, - 71, 71, 71, 2396, 71, 2399, 71, 2398, 71, 2401, - 71, 2402, 2397, 2400, 2403, 2404, 71, 71, 71, 71, - 71, 2405, 71, 2410, 2406, 71, 71, 2408, 2409, 2411, + 71, 2358, 2362, 2355, 71, 2356, 71, 2365, 2363, 2360, + 2367, 71, 71, 71, 71, 71, 71, 2368, 2372, 71, + 2374, 71, 2366, 2370, 2371, 2369, 71, 71, 2373, 71, + 2376, 2375, 2377, 71, 71, 71, 71, 2378, 71, 71, + 71, 71, 71, 2380, 2381, 2383, 2384, 2386, 71, 2388, + 2382, 71, 2379, 2385, 2387, 71, 2389, 2390, 71, 2392, + 71, 71, 71, 2394, 71, 71, 2393, 2397, 71, 2396, + 2398, 71, 71, 2400, 71, 2395, 2391, 71, 2402, 2886, + 2401, 71, 71, 2403, 71, 2399, 2404, 2405, 2406, 71, + 71, 71, 71, 2407, 71, 2408, 71, 71, 71, 71, - 2407, 71, 2415, 71, 71, 71, 71, 71, 2419, 71, - 71, 71, 71, 71, 2412, 2417, 2413, 2423, 2424, 71, - 2414, 2426, 2418, 2416, 2420, 2421, 2427, 71, 2428, 2429, - 71, 2422, 71, 71, 71, 71, 71, 2425, 71, 71, - 2431, 2430, 71, 2434, 71, 2432, 71, 2437, 2438, 71, - 71, 2433, 2439, 71, 2440, 71, 2435, 2441, 71, 2436, - 2443, 71, 71, 2446, 71, 2444, 71, 2447, 71, 71, - 2442, 2448, 71, 71, 2452, 71, 2449, 2450, 71, 2453, - 71, 2445, 2454, 71, 2456, 71, 71, 2451, 71, 71, - 2460, 2461, 71, 71, 71, 2455, 71, 2462, 71, 2457, + 2409, 71, 2412, 71, 2411, 71, 2414, 2410, 2415, 71, + 2413, 2416, 71, 71, 2417, 71, 71, 2418, 71, 2423, + 71, 2419, 71, 71, 2421, 2422, 2420, 71, 71, 2424, + 2428, 71, 71, 71, 71, 2432, 71, 71, 71, 71, + 71, 2425, 2430, 2426, 2436, 71, 2427, 2429, 2462, 2431, + 2439, 2433, 2434, 2437, 71, 2440, 71, 2441, 2435, 2442, + 71, 71, 71, 71, 2438, 71, 71, 71, 71, 71, + 2443, 2444, 2447, 71, 2445, 71, 2450, 2451, 71, 71, + 2446, 2452, 71, 2448, 2453, 71, 2454, 71, 2449, 2456, + 71, 71, 2459, 71, 2457, 71, 2460, 71, 71, 2455, - 71, 71, 2463, 2459, 71, 2469, 2458, 2464, 71, 71, - 2468, 71, 71, 2471, 2472, 71, 71, 2465, 2466, 71, - 2467, 2473, 71, 71, 71, 2475, 2470, 2474, 71, 2480, - 71, 2477, 71, 71, 2484, 71, 71, 2476, 71, 2487, - 2478, 2479, 71, 71, 2488, 71, 2486, 2483, 2481, 2490, - 71, 71, 2482, 71, 2491, 2485, 71, 2492, 71, 2493, - 71, 2489, 71, 2494, 71, 2496, 71, 2495, 71, 2498, - 71, 2502, 71, 71, 71, 2499, 2503, 2505, 71, 71, - 2507, 71, 71, 71, 2497, 2873, 2506, 2508, 2500, 71, - 2501, 71, 2504, 2509, 71, 71, 2514, 71, 2510, 71, + 2461, 71, 2465, 71, 71, 2466, 2463, 2467, 71, 71, + 2458, 2469, 71, 71, 71, 71, 2464, 2473, 2474, 71, + 71, 71, 2476, 71, 2468, 2475, 2470, 2477, 71, 2472, + 71, 71, 2471, 71, 2482, 71, 71, 71, 71, 2481, + 71, 2484, 71, 2478, 2485, 71, 2487, 2486, 71, 71, + 2479, 2480, 2488, 71, 71, 71, 2490, 71, 71, 2493, + 2483, 2489, 2497, 71, 71, 2491, 2492, 71, 71, 2503, + 71, 71, 2496, 2494, 2500, 2499, 71, 2495, 2886, 2501, + 71, 71, 2504, 2498, 71, 2505, 71, 2502, 71, 2506, + 71, 2507, 2508, 71, 71, 71, 71, 2511, 2509, 2515, - 2511, 2513, 71, 2515, 2512, 71, 71, 2518, 71, 2522, - 71, 2516, 2519, 71, 71, 71, 71, 2521, 71, 2520, - 2517, 71, 71, 71, 2524, 71, 71, 2545, 2525, 71, - 2527, 2531, 2523, 71, 2532, 2529, 71, 2533, 71, 71, - 2538, 71, 2528, 2526, 2535, 71, 2530, 2534, 71, 2536, - 2539, 71, 2537, 2540, 71, 71, 71, 71, 71, 2548, - 71, 71, 2544, 2546, 2541, 2542, 2547, 71, 71, 71, - 71, 2553, 71, 71, 2551, 2543, 71, 71, 2555, 71, - 71, 2559, 71, 71, 71, 2549, 71, 71, 2552, 2550, - 71, 2557, 2556, 2563, 2562, 71, 2560, 2554, 71, 2561, + 71, 71, 71, 2512, 2516, 71, 2510, 2518, 71, 2520, + 71, 71, 2519, 71, 71, 2513, 2514, 71, 2521, 71, + 2517, 2522, 71, 2523, 2527, 71, 2524, 71, 2525, 2526, + 71, 2528, 71, 71, 71, 2531, 2535, 71, 71, 2529, + 2532, 71, 71, 2534, 71, 71, 2533, 2530, 71, 71, + 71, 2537, 71, 71, 71, 71, 2536, 2538, 2540, 2544, + 2545, 71, 2542, 71, 2546, 71, 71, 2886, 2541, 2539, + 2547, 2548, 2556, 2543, 71, 2549, 2551, 71, 2550, 2552, + 71, 2553, 71, 71, 71, 2555, 71, 2558, 71, 2557, + 71, 2559, 2554, 71, 71, 2560, 2561, 71, 71, 71, - 2558, 71, 71, 2564, 2569, 71, 2566, 2567, 71, 71, - 2571, 71, 2572, 71, 2565, 2574, 71, 71, 71, 71, - 71, 2579, 71, 71, 71, 2578, 71, 2568, 2570, 2573, - 71, 2583, 71, 2575, 2576, 2577, 71, 2587, 71, 2588, - 71, 2585, 71, 2580, 71, 2582, 2584, 2581, 2590, 71, - 71, 2594, 71, 2592, 71, 71, 71, 71, 2598, 71, - 71, 71, 2589, 2599, 71, 2600, 2596, 71, 2591, 2873, - 2593, 2595, 2603, 2601, 71, 2597, 2602, 2605, 71, 2604, - 71, 2606, 71, 71, 71, 2607, 2611, 71, 2608, 2609, - 71, 71, 71, 2614, 71, 2615, 71, 71, 2618, 71, + 71, 2566, 71, 2564, 2568, 71, 2562, 71, 71, 71, + 2572, 71, 71, 71, 71, 2563, 2575, 2565, 71, 71, + 71, 2569, 71, 2570, 71, 2567, 2573, 2574, 2576, 2571, + 2579, 71, 2582, 71, 2577, 71, 2580, 2584, 71, 2578, + 2585, 71, 71, 2587, 71, 71, 71, 71, 71, 71, + 2581, 71, 2591, 71, 2583, 2592, 71, 71, 2596, 71, + 71, 2588, 2589, 2586, 2590, 2598, 71, 2600, 71, 2593, + 2601, 71, 2595, 2597, 2594, 71, 2603, 71, 71, 71, + 2607, 71, 71, 71, 2611, 71, 71, 2605, 2599, 71, + 71, 2613, 2612, 71, 2609, 2602, 2604, 71, 2616, 2606, - 71, 2610, 2619, 71, 71, 2620, 2617, 2612, 2613, 71, - 2616, 2623, 71, 71, 2622, 2624, 71, 71, 2621, 2625, - 71, 71, 2626, 2627, 71, 71, 71, 71, 2632, 2633, - 71, 71, 2628, 71, 71, 71, 2637, 71, 71, 2639, - 2640, 71, 71, 2629, 2636, 2634, 2643, 2630, 2631, 2641, - 71, 71, 71, 2635, 71, 71, 2642, 2638, 2646, 71, - 2647, 71, 2645, 2644, 71, 71, 71, 71, 71, 71, - 2650, 71, 71, 2652, 71, 71, 2653, 71, 2651, 71, - 71, 2648, 71, 71, 2649, 2662, 2665, 71, 2654, 71, - 2658, 2655, 2656, 2657, 2659, 2660, 2664, 2666, 71, 71, + 2608, 2617, 71, 2610, 71, 2614, 71, 2619, 71, 2618, + 71, 71, 71, 71, 2624, 2621, 2622, 2615, 71, 71, + 71, 2627, 71, 2628, 71, 71, 2620, 2631, 71, 2632, + 71, 2623, 71, 71, 2630, 2625, 2626, 2633, 2629, 71, + 2636, 71, 2637, 71, 2635, 2638, 71, 2634, 71, 2640, + 71, 71, 71, 2639, 71, 71, 71, 2645, 2646, 71, + 71, 71, 71, 2650, 71, 71, 2886, 71, 2653, 71, + 2641, 2649, 2652, 71, 2642, 2647, 2643, 2644, 2654, 71, + 2648, 71, 2656, 71, 2651, 2659, 71, 2655, 71, 71, + 71, 2658, 71, 2657, 2660, 71, 71, 71, 71, 71, - 2661, 2720, 2663, 2667, 2668, 71, 2669, 71, 2670, 2671, - 71, 71, 2672, 2673, 2676, 71, 2674, 2675, 71, 71, - 2677, 71, 71, 71, 2681, 71, 71, 2680, 71, 71, - 71, 71, 2683, 2682, 71, 71, 2678, 2679, 2684, 71, - 2688, 2689, 71, 2687, 71, 2685, 2690, 71, 71, 2686, - 2691, 71, 2695, 2692, 71, 2697, 71, 2696, 71, 71, - 2693, 71, 71, 2694, 2701, 71, 71, 2702, 2873, 2698, - 2741, 2699, 2704, 71, 71, 2700, 2706, 71, 71, 2705, - 2707, 71, 2708, 71, 2703, 2709, 71, 2710, 71, 2711, - 71, 2712, 71, 2713, 71, 71, 2715, 71, 2716, 2717, + 2663, 71, 71, 2665, 71, 71, 2666, 71, 2664, 71, + 2661, 71, 2662, 71, 71, 71, 2675, 71, 2667, 2680, + 2671, 2668, 2669, 2670, 2672, 2673, 2697, 2677, 2678, 71, + 2674, 2679, 71, 2676, 2681, 71, 2682, 71, 2683, 2684, + 71, 71, 2685, 2686, 2689, 71, 2687, 2688, 71, 71, + 2690, 71, 71, 71, 2694, 71, 71, 2693, 71, 71, + 71, 71, 2696, 2695, 71, 2701, 2691, 2692, 2702, 71, + 2700, 2703, 71, 71, 2698, 71, 2708, 71, 2699, 2710, + 2705, 2709, 71, 71, 71, 71, 2706, 71, 2704, 2707, + 71, 71, 2714, 71, 2717, 71, 2715, 71, 71, 2712, - 71, 71, 71, 71, 2714, 71, 2721, 2723, 71, 71, - 71, 71, 71, 2725, 71, 2719, 2718, 2729, 2722, 71, - 2727, 71, 2730, 71, 71, 71, 71, 2724, 71, 2732, - 2728, 71, 71, 71, 71, 2731, 2737, 2726, 2738, 71, - 71, 2736, 2733, 2734, 71, 71, 71, 2735, 71, 2740, - 71, 71, 2747, 2746, 2742, 2739, 71, 2745, 2743, 71, - 2749, 71, 71, 71, 71, 71, 2748, 71, 2744, 2750, - 71, 71, 71, 2760, 71, 71, 2762, 71, 2753, 71, - 2751, 2752, 2755, 71, 2761, 2758, 2756, 71, 2763, 2754, - 2757, 71, 2759, 2764, 71, 2765, 71, 71, 2766, 71, + 2719, 71, 2718, 2720, 71, 2721, 71, 2727, 2711, 2722, + 71, 2713, 2716, 2723, 71, 2724, 71, 2725, 71, 2726, + 71, 2728, 71, 71, 2730, 71, 71, 71, 71, 2734, + 71, 71, 2736, 71, 71, 71, 71, 71, 2738, 71, + 2732, 2731, 2733, 2729, 71, 2740, 2735, 71, 2743, 71, + 2742, 71, 2737, 2744, 71, 2741, 2745, 71, 71, 71, + 71, 71, 2739, 2750, 2751, 71, 71, 71, 2746, 71, + 2754, 71, 71, 71, 2748, 2747, 2749, 71, 2753, 2760, + 71, 71, 2752, 71, 2758, 2756, 2759, 2755, 71, 2762, + 71, 71, 71, 2763, 71, 2757, 71, 71, 2761, 71, - 2768, 71, 71, 2767, 2769, 2773, 2770, 71, 71, 2776, - 71, 71, 71, 2778, 71, 71, 2771, 2772, 71, 2781, - 71, 2774, 71, 2782, 71, 71, 71, 2785, 2775, 2786, - 2779, 2777, 2783, 71, 71, 71, 2780, 71, 2790, 71, - 2787, 71, 71, 71, 2784, 71, 2793, 2788, 71, 71, - 71, 71, 71, 2795, 71, 71, 2789, 2792, 71, 2800, - 2801, 2791, 71, 2797, 2798, 2794, 2804, 71, 2796, 71, - 71, 2799, 2806, 71, 2805, 2808, 2802, 71, 71, 71, - 2807, 2803, 2809, 71, 2812, 71, 71, 71, 2810, 2815, - 71, 2813, 2811, 2814, 71, 71, 71, 71, 2820, 71, + 71, 71, 2773, 71, 71, 71, 2857, 2766, 71, 2764, + 2765, 2768, 71, 2771, 2774, 2775, 71, 71, 2769, 2767, + 2770, 2772, 71, 2776, 2777, 71, 2778, 71, 2780, 71, + 71, 2779, 2781, 71, 71, 2782, 71, 2786, 2783, 71, + 2789, 71, 2784, 71, 71, 2791, 71, 71, 71, 2785, + 2787, 2794, 71, 71, 2795, 71, 71, 71, 71, 2788, + 71, 2798, 2792, 2790, 2796, 2799, 2793, 71, 2803, 71, + 2801, 71, 2800, 71, 2797, 71, 71, 71, 71, 2802, + 2806, 71, 71, 2808, 71, 71, 71, 71, 71, 2805, + 71, 2813, 2814, 2804, 71, 2810, 71, 2807, 2811, 2818, - 71, 71, 2817, 71, 71, 71, 2816, 71, 2823, 2824, - 71, 71, 71, 2822, 2825, 2818, 2819, 2826, 2821, 71, - 2828, 71, 2829, 71, 2827, 2830, 71, 2831, 2832, 71, - 2835, 71, 71, 2837, 2833, 71, 2838, 2834, 71, 71, - 71, 2842, 71, 2839, 71, 71, 2840, 2844, 71, 2843, - 2836, 2845, 71, 71, 71, 2846, 71, 71, 71, 2841, - 2847, 2849, 2851, 71, 71, 71, 71, 71, 71, 2853, - 2854, 71, 2857, 2848, 2858, 71, 2850, 2852, 71, 71, - 2861, 2862, 71, 71, 71, 2855, 2856, 2859, 2864, 71, - 2863, 2865, 71, 71, 71, 71, 71, 2860, 2873, 2867, + 2809, 2817, 71, 2812, 2819, 2886, 2815, 71, 2820, 2816, + 71, 71, 71, 71, 2825, 2824, 2821, 2822, 2823, 71, + 71, 2827, 71, 71, 2826, 71, 71, 2828, 71, 71, + 2833, 71, 71, 2830, 71, 2836, 71, 2837, 71, 71, + 71, 71, 71, 71, 2829, 2835, 2840, 2831, 2832, 2838, + 2834, 71, 2839, 71, 2844, 71, 2843, 71, 2841, 71, + 2845, 2842, 71, 2848, 2846, 71, 2850, 71, 2851, 71, + 71, 71, 2855, 71, 2852, 71, 71, 2853, 2849, 71, + 2856, 2858, 71, 2847, 71, 71, 2859, 71, 2864, 71, + 2854, 2860, 2862, 71, 71, 2861, 71, 71, 71, 2866, - 2866, 2868, 2873, 2869, 2871, 71, 2872, 71, 2873, 2873, - 2873, 2873, 2873, 2873, 2870, 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, 2873, 74, 74, 74, 74, 140, 140, 2873, - 2873, 2873, 140, 140, 142, 142, 2873, 2873, 142, 2873, - 142, 144, 2873, 2873, 2873, 2873, 2873, 144, 147, 147, - 2873, 2873, 2873, 147, 147, 149, 2873, 2873, 2873, 2873, - 2873, 149, 151, 151, 2873, 151, 151, 151, 151, 75, + 71, 2867, 71, 2870, 2863, 2871, 71, 71, 71, 2874, + 2875, 71, 2865, 71, 2877, 71, 2868, 2869, 71, 2872, + 2876, 2878, 71, 71, 71, 2879, 2873, 71, 2880, 2881, + 71, 2884, 71, 2885, 71, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2882, 2886, 2886, 2883, + 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, 2886, 74, 74, + 74, 74, 140, 140, 2886, 2886, 2886, 140, 140, 142, - 75, 2873, 75, 75, 75, 75, 13, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873 + 142, 2886, 2886, 142, 2886, 142, 144, 2886, 2886, 2886, + 2886, 2886, 144, 147, 147, 2886, 2886, 2886, 147, 147, + 149, 2886, 2886, 2886, 2886, 2886, 149, 151, 151, 2886, + 151, 151, 151, 151, 75, 75, 2886, 75, 75, 75, + 75, 13, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886 } ; -static yyconst flex_int16_t yy_chk[5648] = +static yyconst flex_int16_t yy_chk[5683] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2009,13 +2018,13 @@ static yyconst flex_int16_t yy_chk[5648] = 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, 2879, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2892, 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, 966, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 969, 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, @@ -2117,511 +2126,515 @@ static yyconst flex_int16_t yy_chk[5648] = 441, 437, 439, 442, 443, 438, 441, 445, 446, 443, 447, 448, 446, 449, 450, 447, 451, 442, 449, 452, 454, 456, 457, 455, 441, 456, 448, 458, 445, 459, - 450, 461, 452, 459, 460, 451, 453, 453, 455, 460, - 454, 457, 453, 458, 453, 463, 461, 466, 462, 464, - 453, 468, 453, 462, 465, 453, 453, 469, 464, 471, - 465, 463, 453, 466, 467, 465, 473, 467, 470, 470, + 450, 461, 452, 459, 462, 451, 453, 453, 455, 462, + 454, 457, 453, 458, 453, 463, 461, 466, 460, 464, + 453, 468, 453, 460, 465, 453, 453, 460, 464, 469, + 465, 463, 453, 466, 467, 465, 471, 467, 470, 470, - 472, 472, 475, 474, 468, 476, 477, 469, 478, 479, - 480, 473, 481, 478, 471, 474, 482, 475, 479, 485, - 486, 484, 482, 485, 476, 487, 486, 481, 477, 480, - 484, 488, 489, 490, 491, 492, 493, 487, 64, 494, - 493, 495, 496, 495, 497, 497, 488, 490, 498, 491, - 496, 489, 494, 492, 498, 499, 500, 501, 502, 503, - 504, 502, 500, 505, 508, 511, 511, 499, 505, 501, - 507, 506, 509, 503, 506, 504, 517, 509, 509, 507, - 508, 510, 512, 512, 513, 520, 507, 514, 514, 507, - 513, 515, 515, 516, 510, 518, 519, 517, 518, 516, + 472, 472, 473, 474, 468, 475, 476, 477, 478, 469, + 479, 480, 481, 478, 484, 474, 482, 473, 488, 479, + 475, 471, 482, 484, 485, 476, 486, 481, 485, 477, + 480, 487, 486, 488, 489, 490, 491, 492, 493, 494, + 496, 498, 493, 487, 495, 503, 495, 498, 496, 490, + 499, 491, 494, 489, 500, 492, 497, 497, 501, 503, + 500, 502, 499, 504, 502, 506, 505, 507, 506, 508, + 501, 505, 511, 511, 509, 510, 507, 517, 504, 509, + 509, 512, 512, 507, 513, 508, 507, 520, 510, 516, + 513, 514, 514, 515, 515, 516, 518, 519, 517, 518, - 521, 519, 522, 524, 520, 522, 523, 527, 521, 525, - 526, 523, 528, 527, 526, 529, 528, 530, 531, 532, - 534, 59, 530, 536, 533, 532, 524, 535, 525, 533, - 535, 537, 537, 529, 534, 535, 538, 539, 531, 535, - 540, 536, 539, 541, 542, 540, 543, 544, 545, 546, - 547, 545, 543, 546, 538, 547, 544, 541, 548, 542, - 549, 548, 550, 551, 552, 549, 553, 554, 555, 556, - 556, 552, 554, 557, 558, 546, 559, 560, 550, 553, - 580, 551, 557, 561, 562, 563, 560, 567, 555, 580, - 562, 563, 559, 558, 564, 561, 565, 564, 566, 565, + 521, 522, 519, 524, 522, 523, 520, 526, 521, 525, + 523, 526, 527, 528, 529, 530, 531, 528, 527, 532, + 530, 534, 533, 536, 64, 532, 524, 533, 525, 538, + 535, 541, 529, 535, 59, 534, 531, 542, 535, 537, + 537, 536, 535, 539, 540, 541, 544, 538, 539, 540, + 543, 545, 542, 546, 545, 544, 543, 546, 547, 548, + 549, 550, 548, 547, 551, 549, 552, 553, 555, 554, + 556, 556, 557, 552, 554, 558, 559, 550, 560, 546, + 553, 557, 551, 561, 562, 563, 564, 560, 555, 564, + 562, 563, 559, 565, 558, 561, 565, 566, 567, 568, - 568, 569, 571, 566, 570, 567, 573, 569, 571, 570, - 572, 573, 574, 572, 568, 575, 576, 574, 574, 577, - 578, 579, 581, 584, 588, 583, 578, 581, 575, 576, - 582, 583, 585, 582, 590, 584, 586, 585, 577, 577, - 579, 586, 586, 587, 587, 589, 592, 589, 582, 588, - 591, 593, 591, 590, 594, 595, 596, 597, 598, 599, - 600, 602, 598, 597, 592, 601, 603, 606, 599, 593, - 604, 605, 594, 606, 595, 600, 596, 607, 608, 602, - 601, 609, 604, 610, 611, 603, 605, 612, 611, 613, - 608, 607, 614, 615, 616, 617, 617, 618, 619, 621, + 569, 571, 566, 570, 575, 573, 569, 571, 570, 572, + 573, 576, 572, 568, 574, 577, 567, 575, 579, 574, + 574, 578, 580, 581, 576, 588, 582, 578, 581, 582, + 583, 580, 54, 584, 577, 577, 583, 579, 585, 587, + 587, 586, 590, 585, 582, 584, 586, 586, 592, 589, + 588, 589, 591, 593, 591, 594, 595, 596, 597, 598, + 599, 590, 603, 598, 597, 600, 592, 601, 602, 599, + 605, 593, 604, 594, 607, 595, 609, 596, 608, 610, + 600, 603, 601, 606, 604, 605, 602, 611, 607, 606, + 608, 611, 612, 613, 614, 609, 615, 616, 610, 617, - 609, 618, 610, 620, 622, 612, 623, 613, 616, 622, - 614, 624, 615, 621, 620, 625, 626, 619, 628, 627, - 631, 629, 623, 626, 627, 628, 629, 630, 625, 632, - 624, 633, 630, 634, 635, 644, 632, 636, 631, 637, - 633, 640, 638, 635, 637, 638, 639, 634, 641, 636, - 639, 642, 650, 643, 655, 640, 644, 641, 645, 645, - 646, 646, 647, 647, 648, 652, 642, 643, 651, 646, - 654, 650, 653, 648, 651, 656, 653, 657, 658, 655, - 659, 660, 654, 657, 661, 652, 658, 659, 662, 665, - 668, 663, 671, 656, 675, 675, 663, 54, 673, 660, + 618, 618, 619, 620, 621, 622, 619, 625, 624, 613, + 612, 53, 614, 617, 615, 621, 616, 626, 623, 622, + 627, 632, 620, 623, 624, 629, 625, 627, 628, 630, + 626, 631, 629, 628, 630, 633, 631, 634, 635, 632, + 636, 637, 633, 638, 639, 641, 634, 639, 638, 636, + 640, 642, 635, 637, 640, 643, 645, 644, 649, 641, + 642, 646, 646, 647, 647, 648, 648, 649, 651, 652, + 643, 644, 647, 653, 654, 652, 655, 645, 654, 656, + 657, 661, 659, 658, 660, 662, 663, 651, 655, 658, + 659, 660, 666, 653, 669, 690, 664, 673, 657, 661, - 663, 671, 674, 663, 665, 672, 674, 668, 662, 661, - 663, 672, 677, 663, 673, 676, 676, 678, 679, 680, - 681, 686, 683, 677, 684, 685, 681, 683, 687, 688, - 688, 687, 679, 690, 690, 678, 691, 692, 692, 680, - 682, 682, 682, 685, 682, 684, 686, 682, 689, 693, - 694, 691, 682, 694, 693, 689, 695, 697, 682, 682, - 696, 695, 696, 698, 699, 700, 702, 701, 699, 697, - 703, 703, 704, 707, 702, 705, 706, 706, 708, 709, - 712, 712, 698, 728, 728, 700, 701, 704, 710, 705, - 708, 707, 711, 713, 710, 715, 716, 711, 713, 713, + 672, 664, 690, 673, 656, 664, 663, 666, 664, 672, + 662, 669, 674, 675, 678, 664, 679, 675, 664, 676, + 676, 677, 677, 680, 681, 678, 682, 685, 674, 687, + 684, 699, 682, 686, 679, 684, 688, 680, 692, 688, + 689, 689, 691, 691, 681, 683, 683, 683, 685, 683, + 699, 686, 683, 692, 687, 693, 693, 683, 695, 698, + 694, 695, 696, 683, 683, 694, 697, 696, 697, 700, + 701, 698, 702, 700, 703, 704, 704, 705, 708, 706, + 707, 707, 703, 709, 710, 713, 713, 750, 711, 750, + 701, 702, 705, 706, 711, 709, 708, 712, 714, 48, - 715, 709, 716, 717, 720, 718, 719, 720, 721, 717, - 718, 722, 719, 723, 721, 724, 726, 725, 727, 722, - 729, 723, 725, 726, 730, 731, 732, 734, 741, 729, - 735, 731, 730, 724, 737, 736, 734, 727, 738, 735, - 736, 738, 739, 737, 740, 732, 743, 739, 742, 742, - 744, 745, 746, 741, 747, 750, 750, 747, 740, 751, - 745, 743, 749, 752, 749, 747, 753, 756, 752, 744, - 754, 755, 757, 758, 759, 760, 746, 761, 763, 760, - 751, 762, 758, 766, 763, 764, 765, 753, 772, 756, - 754, 755, 757, 767, 764, 761, 769, 759, 765, 768, + 716, 717, 712, 714, 714, 716, 710, 717, 718, 721, + 719, 720, 721, 722, 718, 719, 723, 720, 724, 722, + 725, 727, 726, 728, 723, 730, 724, 726, 727, 729, + 729, 731, 733, 742, 730, 732, 735, 736, 725, 731, + 738, 732, 728, 737, 739, 735, 736, 739, 737, 738, + 740, 733, 741, 743, 743, 740, 744, 745, 742, 746, + 747, 748, 751, 751, 748, 752, 741, 754, 746, 753, + 755, 744, 748, 756, 753, 757, 745, 760, 758, 761, + 759, 762, 763, 761, 747, 764, 752, 765, 754, 759, + 755, 764, 766, 756, 767, 768, 765, 757, 758, 762, - 762, 770, 766, 771, 771, 768, 770, 767, 772, 773, - 769, 774, 775, 776, 777, 778, 779, 780, 773, 781, - 782, 778, 783, 780, 785, 784, 782, 788, 783, 784, - 779, 774, 775, 786, 777, 776, 787, 789, 789, 781, - 790, 787, 792, 785, 791, 786, 790, 791, 788, 793, - 794, 795, 797, 786, 796, 796, 794, 800, 798, 803, - 792, 806, 793, 798, 799, 799, 802, 802, 804, 801, - 797, 795, 800, 801, 805, 808, 809, 811, 816, 805, - 806, 803, 812, 814, 814, 815, 817, 817, 804, 815, - 809, 818, 819, 816, 821, 820, 819, 811, 823, 808, + 760, 763, 769, 770, 766, 771, 772, 772, 769, 768, + 771, 773, 774, 767, 775, 776, 777, 770, 778, 779, + 780, 774, 782, 776, 781, 783, 780, 784, 782, 785, + 787, 773, 788, 784, 775, 785, 777, 786, 781, 779, + 778, 786, 789, 790, 788, 783, 795, 789, 792, 787, + 791, 791, 788, 793, 792, 794, 793, 796, 797, 795, + 798, 798, 799, 796, 790, 800, 801, 801, 802, 805, + 800, 803, 806, 794, 807, 803, 804, 804, 797, 807, + 799, 808, 810, 802, 811, 813, 814, 816, 816, 817, + 820, 805, 806, 817, 818, 819, 819, 821, 811, 822, - 822, 53, 826, 812, 813, 822, 826, 813, 821, 813, - 820, 827, 823, 813, 825, 813, 818, 824, 831, 828, - 813, 830, 824, 824, 828, 813, 827, 829, 825, 832, - 833, 834, 829, 839, 828, 830, 833, 834, 835, 831, - 836, 836, 837, 832, 835, 838, 840, 837, 841, 843, - 845, 838, 844, 847, 847, 839, 865, 844, 846, 851, - 852, 843, 850, 849, 845, 840, 841, 842, 842, 848, - 846, 849, 865, 842, 848, 842, 850, 858, 851, 852, - 854, 842, 853, 853, 854, 856, 842, 842, 859, 857, - 861, 856, 857, 842, 860, 861, 858, 862, 863, 864, + 808, 821, 823, 43, 835, 813, 810, 814, 815, 818, + 835, 815, 825, 815, 822, 820, 823, 815, 824, 815, + 827, 828, 826, 824, 815, 828, 825, 826, 826, 815, + 829, 830, 831, 832, 827, 833, 830, 831, 834, 838, + 838, 841, 836, 837, 843, 829, 830, 832, 836, 837, + 839, 840, 834, 842, 845, 839, 833, 840, 848, 846, + 850, 847, 843, 841, 846, 850, 845, 849, 849, 851, + 848, 852, 842, 844, 844, 847, 853, 851, 854, 844, + 856, 844, 855, 855, 856, 852, 859, 844, 858, 859, + 860, 861, 844, 844, 858, 853, 862, 854, 863, 844, - 860, 859, 867, 866, 868, 869, 870, 863, 864, 866, - 869, 867, 872, 871, 876, 874, 862, 873, 877, 875, - 876, 880, 882, 868, 874, 878, 870, 871, 875, 873, - 883, 878, 872, 884, 885, 877, 882, 880, 886, 887, - 888, 889, 890, 893, 891, 888, 889, 890, 885, 893, - 883, 894, 884, 891, 887, 896, 886, 892, 892, 899, - 897, 900, 899, 901, 894, 897, 897, 902, 898, 898, - 905, 896, 898, 903, 904, 900, 905, 906, 907, 908, - 909, 48, 908, 901, 907, 902, 903, 910, 911, 904, - 912, 913, 910, 911, 914, 915, 913, 906, 917, 914, + 864, 865, 862, 863, 861, 866, 867, 868, 869, 860, + 865, 870, 872, 868, 866, 871, 874, 869, 876, 864, + 871, 873, 867, 878, 877, 875, 879, 876, 880, 878, + 870, 882, 872, 877, 880, 873, 874, 875, 884, 885, + 887, 886, 889, 879, 888, 890, 891, 882, 892, 893, + 890, 891, 884, 892, 887, 894, 894, 889, 893, 885, + 886, 895, 888, 896, 898, 899, 903, 895, 900, 900, + 899, 899, 900, 902, 901, 904, 896, 901, 905, 906, + 898, 908, 907, 909, 911, 912, 903, 902, 907, 909, + 912, 905, 910, 904, 906, 910, 914, 913, 915, 916, - 918, 909, 919, 920, 917, 922, 912, 915, 919, 920, - 921, 921, 923, 926, 922, 924, 918, 927, 924, 925, - 925, 928, 929, 931, 930, 929, 932, 938, 933, 931, - 923, 926, 932, 933, 934, 935, 927, 930, 936, 934, - 935, 928, 939, 940, 936, 938, 941, 941, 942, 940, - 943, 944, 945, 946, 944, 945, 947, 942, 948, 949, - 950, 951, 939, 955, 946, 952, 950, 951, 943, 956, - 948, 953, 954, 954, 947, 957, 953, 958, 949, 959, - 952, 958, 955, 956, 960, 961, 962, 957, 964, 965, - 965, 967, 971, 960, 968, 970, 969, 959, 972, 972, + 920, 908, 913, 915, 916, 911, 917, 919, 921, 922, + 923, 923, 914, 919, 921, 922, 920, 924, 917, 925, + 926, 927, 927, 926, 928, 929, 924, 930, 931, 933, + 932, 931, 934, 940, 935, 933, 936, 925, 934, 935, + 937, 936, 928, 932, 929, 937, 938, 930, 941, 942, + 945, 940, 938, 943, 946, 942, 944, 944, 943, 945, + 947, 948, 949, 947, 948, 950, 951, 952, 941, 953, + 954, 958, 946, 949, 955, 953, 954, 956, 951, 957, + 957, 959, 956, 950, 960, 962, 952, 961, 963, 955, + 958, 961, 964, 965, 967, 959, 960, 963, 968, 968, - 970, 971, 973, 43, 961, 967, 974, 964, 969, 968, - 975, 962, 974, 976, 978, 977, 975, 977, 976, 978, - 979, 980, 973, 981, 982, 983, 984, 985, 981, 986, - 988, 988, 989, 984, 979, 980, 990, 991, 993, 982, - 1000, 992, 985, 1000, 983, 994, 989, 992, 986, 999, - 994, 1001, 991, 998, 990, 996, 996, 997, 993, 994, - 998, 994, 997, 999, 994, 1002, 1003, 1004, 1005, 1001, - 1006, 1003, 1007, 1005, 1002, 1009, 1009, 1010, 1011, 1012, - 1013, 1006, 1010, 1011, 1014, 1013, 1004, 1015, 1014, 1016, - 1017, 1007, 1018, 1020, 1019, 1021, 1015, 1022, 1023, 1012, + 970, 971, 973, 962, 976, 972, 974, 973, 975, 975, + 980, 964, 980, 967, 970, 974, 971, 972, 965, 977, + 978, 982, 979, 981, 976, 977, 978, 979, 981, 983, + 985, 984, 986, 987, 988, 982, 984, 989, 991, 991, + 987, 992, 993, 983, 994, 985, 995, 996, 14, 988, + 1002, 986, 995, 999, 999, 992, 989, 997, 1000, 994, + 993, 1001, 997, 1000, 1002, 1004, 1003, 996, 1001, 1003, + 1005, 997, 1006, 997, 1007, 1008, 997, 1006, 1009, 1005, + 1008, 1010, 1013, 1004, 1012, 1012, 1014, 1013, 1015, 1009, + 1016, 1014, 1017, 1007, 1018, 1016, 1017, 1019, 1020, 1021, - 1024, 1025, 1021, 1027, 1016, 1017, 1019, 1026, 1020, 1022, - 1028, 1018, 1029, 1026, 1030, 1033, 1032, 1023, 1027, 1025, - 1034, 1024, 1032, 1030, 1035, 1037, 1036, 1039, 1034, 1033, - 1028, 1036, 1029, 1038, 1040, 14, 1041, 1037, 1038, 1038, - 1042, 1042, 1045, 1044, 1035, 1049, 1039, 1046, 1040, 1041, - 1043, 1045, 1048, 1046, 1049, 1043, 1044, 1048, 1043, 1043, - 1047, 1047, 1050, 1043, 1054, 1051, 1052, 1057, 1050, 1043, - 1051, 1052, 1058, 1043, 1053, 1053, 1055, 1055, 1056, 1059, - 1060, 1056, 1062, 1056, 1061, 1054, 1063, 1057, 1059, 1061, - 1058, 1064, 1065, 1068, 1066, 13, 1062, 1064, 1065, 1066, + 1010, 1023, 1022, 1018, 1024, 1025, 1026, 1027, 1015, 1028, + 1031, 1024, 1019, 1020, 1022, 1029, 1023, 1025, 1021, 1030, + 1032, 1029, 1033, 1035, 1036, 1026, 1038, 1028, 1027, 1035, + 1031, 1033, 1039, 1037, 1030, 1040, 1042, 1039, 1036, 1041, + 1032, 1037, 1043, 1048, 1041, 1041, 1038, 1040, 1044, 1045, + 1045, 1047, 1048, 1049, 1052, 1042, 1043, 1050, 1050, 1049, + 1051, 1044, 1046, 1052, 1047, 1051, 1053, 1046, 1054, 1055, + 1046, 1046, 1053, 1054, 1055, 1046, 1056, 1056, 1057, 1058, + 1058, 1046, 1060, 1059, 1062, 1046, 1059, 1061, 1059, 1063, + 1064, 1067, 1065, 1062, 1066, 1064, 1069, 1067, 1068, 1057, - 1060, 1067, 1068, 1074, 1063, 1067, 1070, 1068, 1070, 1068, - 1071, 1068, 1073, 1068, 1069, 1069, 1073, 1075, 1074, 1076, - 1077, 1071, 1078, 1080, 1079, 1077, 1077, 1081, 1076, 1079, - 1082, 1083, 1084, 1085, 1086, 1075, 1081, 1080, 1087, 1086, - 1084, 1089, 1088, 1090, 1078, 1092, 1092, 1085, 1091, 1082, - 1083, 1088, 1087, 1091, 1093, 1094, 1094, 1098, 1095, 1089, - 1095, 1097, 1098, 1099, 1097, 1100, 1101, 1101, 1090, 1093, - 1102, 1103, 1103, 1105, 1100, 1104, 1104, 1106, 1105, 1107, - 1108, 1108, 1099, 1109, 1110, 1111, 1112, 1110, 1113, 1125, - 1102, 1112, 1114, 1116, 1114, 1125, 1116, 1113, 1106, 1117, + 13, 1069, 1060, 1070, 1068, 1061, 1065, 1070, 1071, 1063, + 1072, 1072, 1066, 1073, 1074, 1073, 1076, 1071, 1077, 1078, + 1076, 1079, 1071, 1081, 1071, 1074, 1071, 1082, 1071, 1080, + 1079, 1084, 1082, 1077, 1080, 1080, 1083, 1078, 1085, 1086, + 1084, 1087, 1088, 1089, 1091, 1081, 1090, 1092, 1089, 1087, + 1083, 1093, 1096, 1091, 1094, 1102, 1088, 1085, 1086, 1094, + 1090, 1095, 1095, 1097, 1097, 1092, 1098, 1096, 1098, 1100, + 1101, 1103, 1100, 1105, 1102, 1101, 1093, 1104, 1104, 1109, + 1103, 1106, 1106, 1107, 1107, 1108, 1110, 1111, 1111, 1112, + 1108, 1113, 1114, 1105, 1113, 1116, 1115, 1117, 1118, 1117, - 1107, 1118, 1119, 1109, 1117, 1111, 1118, 1120, 1121, 1124, - 1119, 1123, 1120, 1121, 1122, 1122, 1123, 1126, 1127, 1129, - 1130, 1133, 1134, 1131, 1126, 1129, 1130, 1124, 1131, 1132, - 1133, 1127, 1135, 1136, 1136, 1132, 1137, 1139, 1140, 1141, - 1142, 1134, 1143, 1135, 1145, 1141, 1142, 1147, 1143, 1146, - 1145, 1149, 1148, 1150, 1151, 1151, 1137, 1139, 1152, 1153, - 1157, 1140, 1154, 1146, 1148, 1149, 1160, 1147, 1155, 1146, - 1162, 1150, 1158, 1155, 1156, 1156, 1161, 1158, 1152, 1164, - 1154, 1161, 1161, 1157, 1153, 1160, 1163, 1164, 1162, 1165, - 1166, 1167, 1168, 1170, 1169, 1163, 1169, 1168, 1171, 1173, + 1109, 1115, 1120, 1121, 1116, 1120, 1122, 1110, 1121, 1112, + 1123, 1122, 1114, 1128, 1124, 1125, 1118, 0, 1123, 1124, + 1125, 1126, 1126, 1127, 1129, 1130, 1131, 1133, 1127, 1134, + 1129, 1128, 1130, 1133, 1136, 1134, 1135, 1137, 1138, 1131, + 1136, 1135, 1139, 1140, 1140, 1141, 1137, 1143, 1144, 1145, + 1146, 1152, 1147, 1139, 1149, 1145, 1146, 1138, 1147, 1150, + 1149, 1151, 1153, 1152, 1154, 1141, 1156, 1143, 1155, 1155, + 1157, 1144, 1158, 1150, 1161, 1159, 1153, 1160, 1160, 1150, + 1159, 1151, 1154, 1162, 1164, 1167, 1156, 1165, 1162, 1166, + 1158, 1168, 1165, 1165, 1167, 1157, 1169, 1161, 1170, 1168, - 1168, 1174, 1175, 1165, 1171, 1166, 1167, 1170, 1172, 1167, - 1173, 1176, 1172, 1177, 1178, 1180, 1179, 1182, 1177, 1183, - 1174, 1179, 1184, 1185, 1185, 1187, 1186, 1188, 1175, 1176, - 1186, 1182, 1178, 1189, 1191, 1180, 1190, 1183, 1192, 1189, - 1184, 1193, 1194, 1187, 1195, 1196, 1188, 1197, 1190, 1199, - 1196, 1202, 1192, 1191, 1197, 1198, 1193, 1194, 1203, 1200, - 1198, 1201, 1201, 1195, 1203, 1204, 1202, 1199, 1200, 1205, - 1206, 1207, 1208, 1208, 1205, 1213, 1206, 1207, 1209, 1209, - 1211, 1211, 1214, 1212, 1213, 1215, 1204, 1212, 1216, 1217, - 1218, 1218, 1219, 1220, 1222, 1223, 1217, 1221, 1226, 1215, + 1171, 1172, 1173, 1164, 1173, 1174, 1172, 1166, 1175, 1172, + 1169, 1177, 1176, 1170, 1175, 1171, 1176, 1178, 1171, 1174, + 1179, 1180, 1177, 1181, 1182, 1183, 1186, 1184, 1181, 1192, + 1183, 1187, 1188, 1189, 1189, 1191, 1178, 1190, 1193, 1180, + 1186, 1190, 1182, 1194, 1193, 1195, 1179, 1184, 1192, 1187, + 1188, 1196, 1197, 1191, 1198, 1194, 1199, 1200, 1202, 1201, + 1203, 1204, 1200, 1202, 1195, 1196, 1201, 1197, 1206, 1198, + 1204, 1205, 1205, 1207, 1208, 1199, 1209, 0, 1203, 1207, + 1210, 1209, 1211, 1206, 1212, 1212, 1210, 1217, 1211, 1213, + 1213, 1215, 1215, 1216, 1218, 1208, 1217, 1216, 1221, 1219, - 1214, 1220, 1221, 1216, 1224, 1227, 1227, 1228, 1222, 1224, - 1224, 1225, 1219, 1229, 1223, 1230, 1225, 1225, 1226, 1232, - 1231, 1233, 1234, 1235, 1230, 1231, 1228, 1237, 1236, 1235, - 1238, 1239, 1229, 1236, 1246, 1242, 1238, 1240, 1232, 1241, - 1234, 1233, 1243, 1240, 1244, 1241, 1245, 1247, 1246, 1248, - 1239, 1249, 1249, 1237, 1242, 1250, 0, 1251, 1250, 1252, - 1252, 1243, 1253, 1244, 1248, 1245, 1254, 1253, 1247, 1251, - 1254, 1255, 1256, 1257, 1258, 1261, 1258, 1260, 1262, 1263, - 1258, 1256, 1260, 0, 1255, 1269, 1257, 1264, 1264, 1265, - 1261, 1266, 1270, 1258, 1265, 1263, 1266, 1267, 1262, 1268, + 1220, 1222, 1222, 1223, 1225, 1221, 1224, 1226, 1227, 1225, + 1230, 1228, 1218, 1219, 1224, 1220, 1228, 1228, 1232, 1229, + 1233, 1226, 1234, 1223, 1229, 1229, 1236, 1227, 1231, 1231, + 1230, 1234, 1237, 1235, 1239, 1238, 1240, 1232, 1235, 1233, + 1239, 1240, 1241, 1242, 1243, 1236, 1246, 1247, 1244, 1242, + 1245, 1248, 1237, 1238, 1244, 1249, 1245, 1250, 1251, 0, + 1252, 1253, 1253, 1243, 1254, 1246, 1247, 1254, 1241, 1255, + 1248, 1250, 1256, 1256, 1249, 1252, 1258, 1257, 1259, 1251, + 1258, 1255, 1257, 1260, 1261, 1264, 1265, 1262, 1266, 1262, + 1264, 1259, 1260, 1262, 1267, 1268, 1268, 1261, 1269, 1270, - 1271, 1267, 1272, 1268, 1275, 1269, 1273, 1273, 1272, 1277, - 1270, 1278, 1279, 1279, 1281, 1280, 1278, 1283, 1283, 1287, - 1271, 1280, 1275, 1285, 1286, 1286, 1285, 1288, 1290, 1291, - 1277, 1290, 1292, 1294, 1281, 1287, 1293, 1293, 1295, 1296, - 1298, 1292, 1299, 1288, 1296, 1297, 1297, 1300, 1294, 1291, - 1301, 1301, 1302, 1303, 1305, 1304, 1308, 1299, 1298, 1295, - 1304, 1306, 1306, 1307, 1309, 1309, 1302, 1307, 1310, 1305, - 1311, 1303, 1300, 1312, 1313, 1314, 1308, 1312, 1316, 1316, - 1314, 1311, 1317, 1318, 1319, 1320, 1321, 1322, 1322, 1323, - 1310, 0, 1324, 1313, 1323, 1325, 1326, 1318, 1328, 1320, + 1273, 1265, 1275, 1269, 1270, 1271, 1262, 1272, 1266, 1271, + 1267, 1272, 1274, 1276, 1277, 1277, 1279, 1281, 1282, 1276, + 1273, 1284, 1275, 1282, 1283, 1283, 1285, 1284, 1287, 1287, + 1274, 1291, 1289, 1292, 1279, 1289, 1290, 1290, 1281, 1294, + 1295, 1296, 1294, 1297, 1297, 1299, 1285, 1291, 1298, 1292, + 1296, 1300, 1301, 1302, 1302, 1303, 1304, 1301, 1305, 1308, + 1295, 1306, 1306, 1298, 1307, 1310, 1299, 1309, 1311, 1311, + 1300, 1304, 1309, 1303, 1313, 1312, 1315, 1308, 1307, 1312, + 1310, 1314, 1314, 1305, 1316, 1317, 1318, 1319, 1322, 1317, + 1321, 1321, 1319, 1323, 1313, 1316, 1324, 1325, 1315, 1326, - 1317, 1327, 1332, 1319, 1319, 1326, 1327, 1329, 1330, 1329, - 1331, 1321, 1324, 1330, 1333, 1325, 1331, 1335, 1328, 1337, - 1333, 1338, 1332, 1336, 1336, 1340, 1341, 1338, 1342, 1342, - 1340, 1335, 1343, 1343, 1344, 1345, 1346, 1347, 1337, 1350, - 1347, 1348, 1348, 1349, 1356, 1517, 1351, 1517, 1344, 1351, - 1341, 1346, 1351, 1345, 1352, 1349, 1353, 1354, 1355, 1350, - 1352, 1353, 1357, 1355, 1351, 1357, 1354, 1358, 1362, 1356, - 1359, 1360, 1360, 1358, 1362, 1359, 1361, 1361, 1363, 1364, - 1365, 1366, 1367, 1363, 1368, 1369, 1373, 1368, 1370, 1377, - 1371, 1369, 1364, 1372, 1370, 1371, 1374, 1378, 1365, 1372, + 1327, 1327, 1329, 1328, 1331, 1318, 1322, 1323, 1328, 1330, + 1333, 1325, 1332, 1331, 1335, 1324, 1324, 1332, 1334, 1335, + 1334, 1336, 1329, 1337, 1326, 1338, 1340, 1336, 1342, 1330, + 1333, 1338, 1341, 1341, 1345, 1343, 1346, 1347, 1347, 1345, + 1340, 1343, 1349, 1337, 1348, 1348, 1350, 1342, 1351, 1352, + 1353, 1353, 1352, 1354, 1355, 1356, 1349, 1361, 1356, 0, + 1346, 1356, 1357, 1351, 1350, 1354, 1358, 1359, 1357, 1362, + 1360, 1358, 1362, 1356, 1355, 1360, 1359, 1363, 1369, 1364, + 1365, 1365, 1361, 1363, 1364, 1366, 1366, 1367, 1370, 1368, + 1371, 1369, 1372, 1367, 1368, 1373, 1374, 1375, 1373, 1376, - 1366, 1374, 1367, 1375, 1375, 1376, 1379, 1377, 1380, 1373, - 1376, 1381, 1382, 1384, 1383, 1385, 1386, 1378, 1387, 1384, - 1388, 1396, 1380, 1391, 1382, 1381, 1379, 1383, 1390, 1390, - 1393, 1393, 1387, 1392, 1394, 1385, 1386, 1395, 1392, 1397, - 1399, 1388, 1402, 1391, 1398, 1396, 1404, 1400, 1406, 1394, - 1401, 1395, 1411, 1398, 1400, 1399, 0, 1397, 1402, 1401, - 1407, 1404, 1401, 1407, 1408, 1408, 1404, 1409, 1409, 1410, - 1411, 1412, 1414, 1406, 1412, 1413, 1413, 1415, 1416, 1417, - 1418, 1410, 1419, 1416, 1417, 1414, 1420, 1421, 1422, 1425, - 1425, 1426, 1423, 1430, 1427, 1420, 1415, 1422, 1419, 1418, + 1378, 1377, 1374, 1375, 1376, 1379, 1370, 1377, 1382, 1371, + 1379, 1381, 1372, 1380, 1380, 1383, 1381, 1384, 1385, 1386, + 1390, 1389, 1387, 1378, 1391, 1388, 1382, 1389, 1392, 1393, + 1395, 1395, 1385, 1386, 1387, 1383, 1396, 1384, 1388, 1399, + 1390, 1397, 1392, 1400, 1391, 1401, 1397, 1398, 1398, 1402, + 1393, 1403, 1405, 1404, 1399, 1407, 1396, 1400, 1411, 1405, + 1403, 1406, 1409, 1412, 1413, 1413, 1412, 1402, 1404, 1401, + 1406, 1407, 1415, 1406, 1414, 1414, 1416, 1409, 1417, 1418, + 1418, 1417, 1409, 1411, 1415, 1419, 1420, 1421, 1422, 1423, + 1424, 1425, 1421, 1422, 1416, 1426, 1432, 1429, 1419, 1431, - 1422, 1423, 1424, 1428, 1429, 1431, 1421, 1427, 1424, 1430, - 1433, 1426, 1434, 1435, 1435, 1436, 1437, 1431, 1429, 1438, - 1440, 1428, 1439, 1439, 1438, 1437, 1441, 1442, 1443, 1440, - 1434, 1436, 1440, 1444, 1447, 1433, 1446, 1439, 1444, 1444, - 1447, 1448, 1449, 1449, 1441, 1450, 1443, 1451, 1442, 1452, - 1446, 1450, 1451, 1455, 1453, 1452, 1456, 1457, 1458, 1448, - 1453, 1460, 1464, 1457, 1462, 1459, 1465, 1460, 1459, 1466, - 1456, 1458, 1462, 1455, 1459, 1467, 1468, 1466, 1469, 1470, - 1471, 1464, 1472, 1473, 1467, 1465, 1474, 1475, 1472, 1468, - 1476, 1469, 1478, 1470, 1471, 1477, 1473, 1479, 1478, 1480, + 1425, 1427, 1428, 1429, 1433, 1420, 1424, 1434, 1423, 1432, + 1427, 1428, 1435, 1427, 1426, 1430, 1430, 1436, 1438, 1431, + 1439, 1434, 1433, 1440, 1440, 1441, 1442, 1443, 1435, 1436, + 1444, 1444, 1443, 1446, 1447, 1442, 1448, 1445, 1439, 1451, + 1453, 1441, 1449, 1438, 1452, 1444, 1445, 1449, 1449, 1445, + 1452, 1446, 1460, 1451, 1448, 1447, 1454, 1454, 1453, 1455, + 1461, 1456, 1457, 1458, 1462, 1455, 1456, 1463, 1457, 1458, + 1462, 1465, 1460, 1464, 1461, 1467, 1464, 1465, 1469, 1470, + 1463, 1471, 1464, 1467, 1472, 1480, 1473, 1474, 1475, 1471, + 1476, 1477, 1477, 1472, 1479, 1478, 1481, 1469, 1470, 1473, - 1481, 1483, 1483, 1484, 1489, 1475, 1474, 1485, 1477, 1476, - 1490, 1485, 1486, 1489, 1492, 1480, 1487, 1486, 1481, 1479, - 1488, 1487, 1494, 1484, 1495, 1488, 1493, 1493, 1496, 1492, - 1497, 1497, 1498, 1490, 1502, 1499, 1495, 1500, 1501, 1503, - 1505, 1494, 1499, 1506, 0, 1504, 1498, 1496, 1507, 1500, - 1501, 1504, 1505, 1502, 1507, 1508, 1508, 1509, 1513, 1503, - 1509, 1506, 1510, 1510, 1512, 1514, 1516, 1513, 1519, 1512, - 1520, 1514, 1515, 1515, 1518, 1521, 1522, 1518, 1516, 1523, - 1524, 1526, 1527, 1525, 1523, 1529, 1530, 1527, 1519, 1524, - 1528, 1534, 1520, 1521, 1522, 1525, 1526, 1531, 1531, 1528, + 1474, 1478, 1475, 1482, 1476, 1480, 1483, 1479, 1485, 1484, + 1486, 1487, 1490, 1477, 1481, 1484, 1489, 1489, 1492, 1483, + 1491, 1496, 1482, 1492, 1491, 1495, 1486, 1498, 1493, 1487, + 1485, 1494, 1490, 1493, 1495, 1500, 1494, 1499, 1499, 1501, + 1502, 1504, 1498, 1505, 1496, 1503, 1503, 1508, 1506, 1507, + 1505, 1501, 1509, 1511, 1500, 1504, 1510, 1512, 1513, 1502, + 1506, 1507, 1510, 0, 1513, 1511, 1508, 1514, 1514, 1518, + 1515, 1519, 1509, 1515, 1518, 1512, 1516, 1516, 1520, 1522, + 1519, 1521, 1521, 1523, 1520, 1523, 1524, 1525, 1526, 1524, + 1527, 1522, 1529, 1528, 1530, 1534, 1533, 1529, 1532, 1535, - 1532, 1530, 1533, 1535, 1536, 1529, 1532, 1537, 1542, 1537, - 1534, 1538, 1528, 1539, 1539, 1540, 1540, 1541, 1541, 1535, - 1543, 1543, 1545, 1533, 1536, 1538, 1546, 1538, 1542, 1544, - 1544, 1547, 1547, 1548, 1549, 1550, 1552, 1548, 1550, 1553, - 1549, 1555, 1552, 1545, 1554, 1556, 1560, 1546, 1556, 1559, - 1554, 1557, 1557, 1558, 1558, 1559, 1561, 1553, 1560, 1560, - 1560, 1562, 1563, 1564, 1566, 1560, 1555, 1569, 1563, 1566, - 1566, 1567, 1568, 1570, 1568, 1572, 1561, 1573, 1569, 1574, - 1571, 1562, 1576, 1564, 1572, 1567, 1571, 1578, 1570, 1575, - 1575, 1577, 1577, 1579, 1580, 1580, 1582, 1573, 1581, 1581, + 1531, 1533, 1539, 1530, 1534, 1536, 1540, 1525, 1527, 1542, + 1526, 1528, 1531, 1532, 1537, 1537, 1538, 1534, 1541, 1535, + 1536, 1544, 1538, 1539, 1543, 1540, 1543, 1545, 1545, 1542, + 1546, 1546, 1547, 1547, 1541, 1544, 1548, 1544, 1549, 1549, + 1550, 1550, 1551, 1552, 1553, 1553, 1554, 1555, 1556, 1558, + 1554, 1556, 1559, 1555, 1560, 1558, 1548, 1561, 1562, 1566, + 1560, 1562, 0, 1551, 1552, 1563, 1563, 1564, 1564, 1565, + 1559, 1566, 1566, 1566, 1567, 1565, 1568, 1569, 1566, 1570, + 1572, 1573, 1561, 1569, 1578, 1572, 1572, 1574, 1576, 1574, + 1575, 1577, 1579, 1578, 1567, 1573, 1568, 1577, 1580, 1570, - 1574, 1585, 1585, 1586, 1587, 1589, 1590, 1578, 1576, 1592, - 1592, 1591, 1593, 1587, 1589, 1579, 1582, 1591, 1595, 1594, - 1596, 1597, 1598, 1598, 1599, 1595, 1600, 1590, 1586, 1596, - 1602, 1603, 1604, 1593, 1594, 1602, 1605, 1603, 1606, 1607, - 1608, 1608, 1600, 1605, 1606, 1607, 1609, 1597, 1610, 1611, - 1599, 1609, 1604, 1612, 1613, 1614, 1615, 1610, 1614, 1616, - 1617, 1617, 1618, 1619, 1620, 1624, 1613, 1621, 1618, 1611, - 1623, 1621, 1612, 1625, 1615, 1627, 1628, 1631, 1631, 1620, - 1628, 1635, 1630, 1619, 1624, 1616, 1629, 1621, 1625, 1632, - 1623, 1630, 1629, 1632, 1627, 1633, 1634, 1634, 1636, 1637, + 1582, 1575, 1584, 1576, 1581, 1581, 1583, 1583, 1585, 1586, + 1586, 1588, 1579, 1587, 1587, 1591, 1591, 1592, 1593, 1580, + 1595, 1600, 1584, 1596, 1598, 1598, 1582, 1593, 1597, 1595, + 1585, 1588, 1599, 1601, 1597, 1603, 1600, 1602, 1604, 1604, + 1601, 1605, 1592, 1606, 1596, 1608, 1602, 1615, 1609, 1610, + 1608, 1611, 1615, 1599, 1609, 1618, 1612, 1613, 1611, 1606, + 1617, 1603, 1612, 1613, 1614, 1614, 1616, 1605, 1620, 1610, + 1619, 1620, 1621, 1622, 1618, 1616, 1623, 1623, 1624, 1626, + 1617, 1625, 1619, 1627, 1624, 1629, 1636, 1627, 1630, 1631, + 1621, 1633, 1634, 0, 1626, 1636, 1634, 1637, 1637, 1622, - 1638, 1639, 1635, 1640, 1641, 1638, 1633, 1642, 1643, 0, - 1641, 1633, 1636, 1643, 1644, 1644, 1645, 1645, 1637, 1647, - 1646, 1639, 1642, 1640, 1646, 1648, 1648, 1649, 1649, 1653, - 1647, 1650, 1651, 1652, 1655, 1647, 1650, 1650, 1651, 1652, - 1654, 1656, 1658, 1661, 1659, 1654, 1655, 1656, 1659, 1660, - 1662, 1663, 1664, 1665, 1658, 1653, 1662, 1667, 1664, 1668, - 1671, 1660, 1669, 1671, 1675, 1665, 1676, 1669, 1661, 1667, - 1672, 1672, 1676, 1663, 1673, 1673, 1674, 1674, 1668, 1677, - 1680, 1678, 1679, 1685, 1675, 1677, 1678, 1682, 1679, 1680, - 1684, 1688, 1682, 1684, 1689, 1685, 1686, 1686, 1692, 1690, + 1635, 1625, 1639, 1627, 1631, 1629, 1635, 1630, 1638, 1641, + 1633, 1642, 1638, 1639, 1640, 1640, 1643, 1644, 1639, 1645, + 1646, 1647, 1644, 1648, 1649, 1642, 1661, 1647, 0, 1649, + 1641, 1650, 1650, 1651, 1651, 1643, 1654, 1652, 1648, 1645, + 1646, 1652, 1655, 1656, 1656, 1654, 1657, 1657, 1663, 1658, + 1659, 1660, 1661, 1655, 1658, 1658, 1659, 1660, 1655, 1662, + 1663, 1664, 1666, 1668, 1662, 1667, 1669, 1664, 1671, 1667, + 1670, 1672, 1673, 1675, 1666, 1668, 1670, 1672, 1676, 1679, + 1683, 1677, 1679, 1684, 1673, 1675, 1677, 1680, 1680, 1684, + 1671, 1669, 1681, 1681, 1682, 1682, 1685, 1676, 1686, 1687, - 1691, 1691, 1696, 1688, 1690, 1693, 1689, 1692, 1694, 1697, - 1693, 1695, 1695, 1694, 1698, 1699, 1700, 1702, 1697, 1701, - 1700, 1703, 1696, 1702, 1701, 1705, 1705, 1706, 1710, 1707, - 1708, 1708, 1698, 1709, 1699, 1703, 1711, 1705, 1707, 1712, - 1710, 1713, 1709, 1719, 1712, 1706, 1716, 1716, 1718, 1720, - 1723, 1718, 1722, 1725, 1713, 1724, 1727, 1711, 1727, 1719, - 1732, 1724, 1726, 1726, 1723, 1720, 1729, 1722, 1728, 1728, - 1725, 1731, 1733, 1733, 1729, 1734, 1735, 1736, 1731, 1737, - 1732, 1738, 1739, 1740, 1734, 1746, 1741, 1743, 1744, 1736, - 1747, 1737, 1741, 1738, 1745, 1745, 1748, 1735, 1740, 1748, + 1683, 1688, 1685, 1686, 1690, 1687, 1693, 1696, 1692, 1690, + 1688, 1692, 1694, 1694, 1697, 1698, 1699, 1699, 1693, 1696, + 1698, 1700, 1701, 1702, 1703, 1703, 1697, 1701, 1702, 1704, + 1700, 1705, 1706, 1707, 1708, 0, 1709, 1710, 1708, 1711, + 1705, 1709, 1714, 1710, 1713, 1713, 1715, 1716, 1716, 1704, + 1706, 1719, 1707, 1711, 1717, 1715, 1713, 1718, 1721, 1720, + 1714, 1724, 1724, 1717, 1720, 1726, 1727, 1728, 1726, 1718, + 1730, 1721, 1719, 1731, 1732, 1733, 1734, 1734, 1737, 1735, + 1732, 1735, 1727, 1728, 1739, 1730, 1737, 1731, 1736, 1736, + 1740, 1739, 1733, 1741, 1741, 1742, 1743, 1744, 1747, 1745, - 1744, 1749, 1750, 1746, 1752, 1741, 1749, 1743, 1739, 1752, - 1747, 1753, 1754, 1753, 1755, 1758, 1756, 1760, 1761, 1755, - 1762, 1764, 1750, 1756, 1758, 1767, 1763, 1761, 1763, 1766, - 1754, 1766, 1762, 1768, 1768, 1760, 1769, 1770, 1774, 1767, - 1764, 1771, 1770, 1771, 1772, 1773, 1775, 1776, 1778, 1772, - 1773, 1779, 1777, 1776, 1781, 1782, 1774, 1777, 1786, 1779, - 1785, 1778, 1769, 1783, 1783, 1787, 1775, 1784, 1784, 1782, - 1792, 1787, 1788, 1781, 1789, 1785, 1789, 1788, 1786, 1790, - 1791, 1791, 1792, 1793, 1793, 1794, 1794, 1790, 1795, 1796, - 1797, 1798, 1797, 1800, 1799, 1790, 1801, 1795, 1796, 1799, + 1746, 1748, 1749, 1751, 1742, 0, 1752, 1754, 1749, 1744, + 1740, 1745, 1746, 1753, 1753, 1755, 1748, 1743, 1752, 1756, + 1758, 1749, 1756, 1751, 1747, 1754, 1757, 1760, 1761, 1762, + 1761, 1757, 1760, 1763, 1764, 1755, 1766, 1768, 1763, 1769, + 1758, 1764, 1770, 1772, 1771, 1766, 1771, 1762, 1769, 1774, + 1775, 1774, 1776, 1776, 1770, 1768, 1777, 1779, 1778, 1779, + 1780, 1781, 1772, 1778, 1775, 1780, 1781, 1782, 1783, 1784, + 1786, 1785, 1787, 1789, 1793, 1784, 1785, 1790, 1791, 1791, + 1787, 1794, 1777, 1786, 1795, 1782, 1792, 1792, 1783, 1793, + 1795, 1790, 1789, 1796, 1797, 1798, 1797, 1800, 1796, 1799, - 1799, 1796, 1800, 1803, 1804, 1805, 1807, 1808, 1801, 1804, - 1805, 1809, 1798, 1810, 1810, 1803, 1811, 1812, 1814, 1807, - 1809, 1813, 1826, 1815, 1817, 1819, 1820, 1808, 1818, 1827, - 1819, 1820, 1814, 1823, 1811, 1812, 1817, 1813, 1815, 1823, - 1818, 1825, 1828, 1829, 1827, 1826, 1830, 1825, 1831, 1831, - 1832, 1834, 1823, 1833, 1833, 1830, 1837, 1835, 1836, 1832, - 1828, 1835, 1841, 1836, 1843, 1841, 1838, 1839, 1829, 1837, - 1834, 1838, 1838, 1839, 1840, 1842, 1846, 1846, 1847, 1847, - 1840, 1848, 1851, 1842, 1843, 1849, 1849, 1850, 1850, 1852, - 1848, 1853, 1860, 1847, 1851, 1854, 1860, 1853, 1855, 1855, + 1799, 1794, 1806, 1798, 1801, 1801, 1802, 1802, 1803, 1800, + 1804, 1798, 1805, 1816, 1805, 1807, 1808, 1803, 1809, 1804, + 1807, 1807, 1804, 1806, 1811, 1808, 1812, 1813, 1815, 1817, + 1809, 1812, 1813, 1816, 1818, 1818, 1811, 1819, 1817, 1820, + 1821, 1815, 1825, 1827, 1822, 1823, 1828, 1826, 1829, 1835, + 1836, 1828, 1837, 1829, 1825, 1819, 1821, 1820, 1822, 1826, + 1823, 1832, 1834, 1827, 1838, 1836, 1839, 1832, 1834, 1841, + 1837, 1843, 1835, 1840, 1840, 1839, 1842, 1842, 1841, 1844, + 1832, 1845, 1846, 1844, 1852, 1848, 1845, 1847, 1849, 1838, + 1843, 1848, 1847, 1847, 1849, 1846, 1850, 1851, 1857, 1850, - 1854, 1856, 1856, 1857, 1847, 1858, 1861, 1852, 1857, 1862, - 1864, 1858, 1865, 1862, 1866, 1867, 1868, 1865, 1869, 1871, - 1871, 1868, 1870, 1872, 1873, 1875, 1861, 1872, 1874, 1876, - 1867, 1877, 1886, 1874, 1879, 1864, 1869, 1866, 1870, 1873, - 1878, 1876, 1880, 1881, 1881, 1878, 1883, 1879, 1884, 1885, - 1877, 1875, 1887, 1888, 1883, 1886, 1889, 1890, 1891, 1893, - 1880, 1894, 1894, 1895, 1953, 1896, 1895, 1884, 1885, 1890, - 1897, 1953, 1888, 1898, 1893, 1902, 1887, 1889, 1896, 1891, - 1899, 1899, 1900, 1900, 1897, 1903, 1898, 1901, 1901, 1910, - 1902, 1904, 1904, 1905, 1906, 1906, 1907, 1911, 1903, 1909, + 1855, 1855, 1856, 1856, 1852, 1851, 1860, 1857, 1858, 1858, + 1859, 1859, 1861, 1862, 1870, 1863, 1873, 1856, 1860, 1862, + 1863, 1864, 1864, 1865, 1865, 1869, 1866, 1867, 1856, 1869, + 1861, 1866, 1871, 1867, 1870, 1874, 1871, 1875, 1876, 1877, + 1874, 1873, 1879, 1878, 1877, 1880, 1880, 1881, 1882, 1883, + 1884, 1881, 1885, 1876, 1883, 1886, 1888, 1887, 1879, 1889, + 1875, 1878, 1887, 1882, 1885, 1890, 1890, 1892, 1893, 1888, + 1894, 1895, 1896, 1897, 1886, 1892, 1884, 1889, 1898, 1899, + 1900, 1906, 1902, 1903, 1903, 1904, 1932, 1893, 1904, 1894, + 1905, 1899, 1897, 1907, 1895, 1906, 1896, 1902, 1911, 1898, - 1912, 1907, 1905, 1915, 1909, 1905, 1913, 1913, 1917, 1910, - 1914, 1914, 1912, 1916, 1916, 1918, 1918, 1911, 1919, 1920, - 1921, 1921, 1915, 1923, 1920, 1924, 1917, 1922, 1922, 1925, - 1926, 1928, 1930, 1919, 1924, 1932, 1928, 1923, 1929, 1929, - 1931, 1931, 1933, 1925, 1934, 1935, 1935, 1934, 1933, 1926, - 1937, 1930, 1938, 1932, 1936, 1936, 1939, 1940, 1940, 1942, - 1943, 1935, 1944, 1947, 1945, 1946, 1946, 1938, 1945, 1937, - 1948, 1949, 1951, 1951, 1952, 1939, 1954, 1944, 1955, 1942, - 1956, 1956, 1947, 1943, 1957, 1948, 1949, 1958, 1959, 1958, - 1954, 1961, 1962, 1957, 1952, 1963, 1964, 1962, 1965, 1966, + 1932, 1900, 1912, 1905, 1908, 1908, 1907, 1909, 1909, 1910, + 1910, 1913, 1913, 1911, 1914, 1912, 1915, 1915, 1919, 1916, + 1918, 1920, 1921, 1914, 1916, 1918, 1914, 1922, 1922, 1923, + 1923, 1924, 1925, 1925, 1921, 1926, 1927, 1927, 1919, 1928, + 1929, 1920, 1930, 1930, 1934, 1929, 1931, 1931, 1933, 1935, + 1924, 1937, 1939, 1926, 1928, 1941, 1937, 1933, 1934, 1938, + 1938, 1940, 1940, 1942, 1943, 1944, 1944, 1943, 1935, 1942, + 1946, 1939, 1947, 1941, 1945, 1945, 1948, 1949, 1949, 1951, + 1952, 1944, 1953, 1956, 1954, 1955, 1955, 1947, 1954, 1946, + 1957, 1958, 1960, 1960, 1961, 1948, 1963, 1953, 1964, 1951, - 1963, 1967, 1968, 1961, 1955, 1970, 1967, 1971, 1959, 1972, - 1970, 1965, 1971, 1973, 1974, 1977, 1975, 1978, 1976, 1973, - 1966, 1964, 1975, 1976, 1972, 1979, 0, 1980, 1968, 1981, - 1978, 1983, 1982, 1984, 1979, 1974, 1980, 1985, 1981, 1984, - 1977, 1982, 1986, 1985, 1988, 1983, 1986, 1990, 1991, 1991, - 1994, 1992, 1993, 1993, 1999, 1996, 1990, 1992, 1997, 1998, - 1998, 1993, 2003, 2009, 1988, 2002, 2000, 2004, 2005, 1999, - 1994, 1996, 1994, 2007, 1997, 2000, 2007, 2002, 2003, 2008, - 2005, 2010, 2004, 2009, 2008, 2011, 2011, 2012, 2012, 2014, - 2014, 2015, 2016, 2010, 2015, 2017, 2018, 2016, 2019, 2019, + 1962, 1968, 1956, 1952, 1966, 1957, 1958, 1962, 1965, 1965, + 1963, 1970, 1973, 1966, 1961, 1967, 1974, 1967, 1975, 1977, + 1971, 1968, 1972, 1970, 1964, 1971, 1976, 1972, 1979, 1974, + 1980, 1976, 1981, 1979, 1982, 1980, 1983, 1973, 1984, 1975, + 1982, 1985, 1987, 1986, 1984, 1977, 1985, 1981, 1986, 1988, + 1989, 1990, 1991, 1998, 1992, 1993, 0, 1983, 1994, 1989, + 1990, 1991, 1988, 1992, 1994, 1995, 1996, 1987, 2000, 1993, + 1996, 1995, 2002, 1998, 2001, 2001, 2004, 2000, 2002, 2003, + 2003, 2006, 2010, 2007, 2008, 2008, 2009, 2013, 2003, 2014, + 2012, 2010, 2017, 2015, 2019, 2017, 2004, 2006, 2004, 2007, - 2020, 2017, 2018, 2021, 2021, 2022, 2023, 2024, 2025, 2025, - 2028, 2027, 2032, 2028, 2020, 2027, 2030, 2022, 2029, 2029, - 2023, 2030, 2031, 2033, 2034, 2034, 2024, 2033, 2035, 2037, - 2038, 2031, 2032, 2039, 2037, 2040, 2041, 2042, 2043, 2044, - 2041, 2035, 2045, 2043, 2046, 2044, 2049, 2048, 2045, 2040, - 2038, 2049, 2050, 2039, 2055, 2058, 2051, 2042, 2050, 2052, - 2070, 2052, 2046, 2048, 2051, 2056, 2056, 2057, 2055, 2061, - 2057, 2059, 2059, 2061, 2062, 2063, 2064, 2064, 2070, 2065, - 2062, 2058, 2068, 2068, 2072, 2073, 2076, 2063, 2065, 2077, - 2078, 2076, 2079, 2080, 2080, 2078, 2084, 2079, 2072, 2082, + 2020, 2009, 2012, 2013, 2014, 2015, 2018, 2021, 2021, 2022, + 2022, 2018, 2020, 2026, 2019, 2024, 2024, 2025, 2026, 2027, + 2025, 2028, 2029, 2029, 2030, 2027, 2033, 2028, 2031, 2031, + 2032, 2034, 2035, 2035, 2038, 2037, 2040, 2038, 2030, 2037, + 2033, 2040, 2032, 2039, 2039, 2041, 2042, 2043, 2044, 2044, + 2034, 2043, 2045, 2047, 2041, 2048, 2049, 2050, 2047, 2051, + 2052, 2056, 2053, 2051, 2054, 2045, 2042, 2053, 2055, 2058, + 2054, 2050, 2059, 2061, 2055, 2048, 2049, 2059, 2060, 2056, + 2052, 2061, 2065, 2068, 2060, 2058, 2062, 0, 2062, 2066, + 2066, 2067, 2069, 2069, 2067, 2071, 2065, 2072, 2073, 2071, - 2082, 2073, 2084, 2085, 2085, 2086, 2087, 2088, 2090, 2094, - 2091, 2095, 2088, 2092, 2092, 2077, 2096, 2095, 2094, 2100, - 2097, 2086, 2091, 2099, 2099, 2101, 2108, 2090, 2087, 2103, - 2103, 2104, 2104, 2109, 2096, 2097, 2105, 2106, 2100, 2110, - 2108, 2105, 2106, 2101, 2107, 2111, 2107, 2109, 2112, 2112, - 2111, 2113, 2113, 2114, 2114, 2115, 2115, 2116, 2117, 2110, - 2118, 2119, 2119, 2120, 2120, 2118, 2121, 2122, 2123, 2116, - 2124, 2125, 2125, 2126, 2126, 2128, 2117, 2129, 2121, 2122, - 2127, 2127, 2130, 2131, 2129, 2132, 2124, 2128, 2123, 2133, - 2132, 2134, 2135, 2135, 2130, 2136, 2137, 2138, 2143, 2139, + 2074, 2074, 2075, 2072, 2078, 2078, 2080, 2082, 2086, 2068, + 2073, 2075, 2083, 2086, 2087, 2088, 2096, 2089, 2090, 2090, + 2088, 2082, 2089, 2094, 2080, 2092, 2092, 2097, 2083, 2094, + 2095, 2095, 2096, 2098, 2100, 2101, 2102, 2102, 2098, 2104, + 2087, 2106, 2107, 2110, 2105, 2109, 2109, 2101, 2104, 2097, + 2105, 2111, 2120, 2100, 2113, 2113, 0, 2107, 2115, 2106, + 2114, 2114, 2110, 2115, 2117, 2116, 2117, 2118, 2119, 2111, + 2116, 2121, 2120, 2122, 2122, 2126, 2121, 2123, 2123, 2124, + 2124, 2118, 2119, 2125, 2125, 2127, 2128, 2126, 2129, 2129, + 2131, 2128, 2130, 2130, 2132, 2133, 2134, 2135, 2135, 2136, - 2140, 2141, 2147, 2131, 2136, 2142, 2142, 2143, 2144, 2133, - 2145, 2134, 2139, 2148, 2149, 2141, 2150, 2138, 2151, 2150, - 2147, 2152, 2137, 2144, 2140, 2145, 2152, 2163, 2153, 2154, - 2154, 2161, 2151, 2153, 2165, 2148, 2162, 2149, 2155, 2155, - 2156, 2156, 2158, 2158, 2160, 2160, 2163, 2162, 2166, 2161, - 2167, 2168, 2169, 2170, 2165, 2175, 2171, 2172, 2172, 2174, - 2174, 2169, 2177, 2177, 2180, 2180, 2166, 2176, 2181, 2179, - 2182, 2168, 2167, 2170, 2171, 2183, 2176, 2175, 2179, 2184, - 2185, 2186, 2183, 2188, 2187, 2192, 2181, 2191, 2182, 2189, - 2189, 2190, 2190, 2191, 2184, 2193, 2194, 2196, 2185, 2186, + 2137, 2137, 2131, 2127, 2138, 2138, 2132, 2139, 2141, 2140, + 2142, 2144, 2134, 2145, 2148, 2133, 2140, 2143, 2136, 2139, + 2141, 2149, 2143, 2146, 2146, 2147, 2150, 2151, 2152, 2154, + 2142, 2144, 2155, 2145, 2147, 2153, 2153, 2156, 2154, 2150, + 2148, 2149, 2152, 2158, 2159, 2160, 2161, 2155, 2162, 2161, + 2163, 2151, 2156, 2164, 2174, 2163, 2165, 2165, 2164, 2166, + 2166, 2158, 2162, 2167, 2167, 2172, 2159, 2173, 2160, 2169, + 2169, 2171, 2171, 2174, 2176, 2177, 2178, 2179, 2173, 2180, + 2181, 2182, 2186, 2172, 2183, 2183, 2185, 2185, 2180, 2188, + 2188, 2192, 2187, 2177, 2176, 2193, 2190, 2179, 2178, 2182, - 2187, 2195, 2188, 2192, 2197, 2209, 2195, 2198, 2204, 2199, - 2193, 2199, 2198, 2200, 2200, 2194, 2201, 2196, 2201, 2202, - 2202, 2206, 2207, 2208, 2197, 2209, 2210, 2204, 2211, 2215, - 2206, 2210, 2212, 2216, 2219, 2208, 2216, 2217, 2217, 2218, - 2221, 2207, 2220, 2220, 2221, 2223, 2224, 2228, 2211, 2215, - 2224, 2212, 2219, 2226, 2218, 2225, 2225, 2229, 2230, 2230, - 2223, 2232, 2233, 2233, 2234, 2236, 2226, 2228, 2235, 2235, - 2236, 2244, 2237, 2232, 2238, 2238, 2246, 2229, 2243, 2243, - 2245, 2245, 2247, 2234, 2237, 2248, 2251, 2249, 2256, 2246, - 2250, 2250, 2255, 2244, 2248, 2247, 2249, 2255, 2257, 2258, + 2181, 2187, 2191, 2191, 2186, 2190, 2195, 2194, 2196, 2192, + 2197, 2198, 2199, 2193, 2194, 2200, 2200, 2201, 2201, 2202, + 2203, 2195, 2204, 2205, 2206, 2202, 2196, 2198, 2197, 2206, + 2207, 2199, 2208, 2210, 2209, 2210, 2215, 2204, 2203, 2209, + 2211, 2211, 2205, 2212, 2217, 2212, 2213, 2213, 2218, 2219, + 2207, 2220, 2208, 2217, 2221, 2215, 2222, 2229, 2223, 2221, + 2226, 2219, 2227, 2228, 2228, 2227, 2230, 2218, 2231, 2231, + 2232, 2220, 2229, 2234, 2232, 2235, 2222, 2223, 2237, 2235, + 2226, 2236, 2236, 2239, 2230, 2240, 2241, 2241, 2234, 2243, + 2245, 2237, 2244, 2244, 2246, 2246, 2248, 2247, 2249, 2249, - 2259, 2251, 2256, 2257, 2260, 2263, 2261, 2258, 2266, 2271, - 2264, 2265, 0, 2260, 2261, 2264, 2265, 2267, 2267, 2259, - 2263, 2268, 2268, 2266, 2269, 2270, 2272, 2271, 2273, 2524, - 2270, 2269, 2274, 2276, 2273, 2275, 2275, 2274, 2277, 2278, - 2278, 2279, 2279, 2277, 2272, 2282, 2283, 2283, 2276, 2284, - 2285, 2524, 2284, 0, 2286, 2285, 2285, 2287, 2282, 2286, - 2288, 2289, 2287, 2290, 2291, 2289, 2288, 2292, 2290, 2293, - 2294, 2295, 2300, 2291, 2297, 2294, 2304, 2293, 2298, 2297, - 2302, 2298, 2292, 2295, 2300, 2302, 2303, 2305, 2306, 2307, - 2309, 2303, 2308, 2308, 2304, 2312, 2313, 2306, 2307, 2309, + 2255, 2243, 2247, 2239, 2257, 2240, 2254, 2254, 2248, 2245, + 2256, 2256, 2258, 2262, 2259, 2260, 2268, 2257, 2261, 2261, + 2264, 2264, 2255, 2259, 2260, 2258, 2267, 2269, 2262, 2270, + 2268, 2267, 2269, 2271, 2272, 2275, 2273, 2270, 2278, 2283, + 2276, 2277, 2281, 2272, 2273, 2276, 2277, 2279, 2279, 2281, + 2275, 2282, 2271, 2278, 2280, 2280, 2282, 2283, 2284, 2285, + 2288, 2286, 2287, 2287, 2289, 2285, 2286, 2290, 2290, 2289, + 2291, 2291, 2294, 2295, 2295, 2288, 2284, 2296, 2297, 0, + 2296, 2298, 2299, 2297, 2297, 2294, 2298, 2299, 2300, 2301, + 2302, 2303, 2304, 2301, 2300, 2302, 2305, 2306, 2307, 2312, - 2305, 2314, 2315, 2315, 2316, 2320, 2317, 2318, 2319, 2319, - 2322, 2324, 2327, 2325, 2312, 2317, 2313, 2325, 2326, 2326, - 2314, 2328, 2318, 2316, 2320, 2322, 2329, 2328, 2330, 2331, - 2331, 2324, 2329, 2332, 2330, 2333, 2335, 2327, 2336, 2338, - 2333, 2332, 2339, 2338, 2340, 2335, 2342, 2342, 2343, 2343, - 2350, 2336, 2344, 2344, 2346, 2346, 2339, 2348, 2348, 2340, - 2351, 2353, 2354, 2354, 2359, 2351, 2351, 2356, 2356, 2361, - 2350, 2357, 2357, 2358, 2362, 2362, 2358, 2359, 2363, 2363, - 2365, 2353, 2364, 2364, 2366, 2366, 2367, 2361, 2368, 2369, - 2370, 2371, 2371, 2372, 2376, 2365, 2370, 2372, 2377, 2367, + 2303, 2309, 2306, 2316, 2305, 2310, 2309, 2304, 2310, 2314, + 2307, 2312, 2315, 2317, 2314, 2318, 2319, 2315, 2320, 2320, + 2321, 2316, 2324, 2325, 2318, 2319, 2317, 2326, 2328, 2321, + 2327, 2327, 2332, 2329, 2330, 2331, 2331, 2334, 2336, 2339, + 2337, 2324, 2329, 2325, 2337, 2370, 2326, 2328, 2370, 2330, + 2340, 2332, 2334, 2338, 2338, 2341, 2340, 2342, 2336, 2343, + 2343, 2341, 2344, 2342, 2339, 2347, 2345, 2348, 2350, 2351, + 2344, 2345, 2350, 2352, 2347, 2354, 2354, 2355, 2355, 2362, + 2348, 2356, 2356, 2351, 2358, 2358, 2360, 2360, 2352, 2363, + 2365, 2366, 2366, 2371, 2363, 2363, 2368, 2368, 2373, 2362, - 2378, 2381, 2375, 2369, 2379, 2380, 2368, 2375, 2375, 2382, - 2379, 2380, 2391, 2382, 2383, 2383, 2386, 2376, 2377, 2388, - 2378, 2386, 2389, 2393, 2394, 2389, 2381, 2388, 2392, 2394, - 2395, 2392, 2396, 2397, 2398, 2398, 2399, 2391, 2400, 2401, - 2393, 2393, 2402, 2411, 2401, 2401, 2400, 2397, 2395, 2403, - 2403, 2408, 2396, 2404, 2404, 2399, 2405, 2405, 2406, 2406, - 2409, 2402, 2407, 2407, 2410, 2409, 2412, 2408, 2413, 2411, - 2414, 2416, 2416, 2417, 2418, 2412, 2417, 2420, 2420, 2421, - 2422, 2422, 2423, 2430, 2410, 0, 2421, 2423, 2413, 2426, - 2414, 2427, 2418, 2425, 2425, 2428, 2431, 2431, 2426, 2432, + 2369, 2369, 2375, 2375, 2376, 2376, 2371, 2377, 2377, 2378, + 2365, 2379, 2379, 2380, 2381, 2382, 2373, 2383, 2384, 2384, + 2389, 2385, 2388, 2383, 2378, 2385, 2380, 2388, 2388, 2382, + 2390, 2391, 2381, 2392, 2393, 2394, 2404, 2395, 2401, 2392, + 2393, 2395, 2399, 2389, 2396, 2396, 2401, 2399, 2406, 2402, + 2390, 2391, 2402, 2405, 2407, 2408, 2405, 2409, 2410, 2407, + 2394, 2404, 2411, 2411, 2412, 2406, 2406, 2413, 2415, 2416, + 2416, 2424, 2410, 2408, 2414, 2413, 2421, 2409, 0, 2414, + 2414, 2417, 2417, 2412, 2418, 2418, 2423, 2415, 2419, 2419, + 2420, 2420, 2421, 2422, 2425, 2426, 2427, 2424, 2422, 2429, - 2427, 2430, 2433, 2432, 2428, 2434, 2436, 2435, 2437, 2442, - 2442, 2433, 2435, 2435, 2443, 2445, 2446, 2437, 2449, 2436, - 2434, 2450, 2451, 2453, 2445, 2455, 2457, 2473, 2446, 2458, - 2450, 2457, 2443, 2473, 2458, 2453, 2459, 2459, 2460, 2462, - 2465, 2465, 2451, 2449, 2462, 2469, 2455, 2460, 2463, 2463, - 2466, 2466, 2463, 2467, 2467, 2468, 2470, 2471, 2474, 2476, - 2476, 2475, 2471, 2474, 2468, 2469, 2475, 2477, 2478, 2479, - 2480, 2481, 2482, 2485, 2479, 2470, 2486, 2481, 2483, 2483, - 2487, 2489, 2489, 2491, 2494, 2477, 2492, 2495, 2480, 2478, - 2493, 2486, 2485, 2494, 2493, 2496, 2491, 2482, 2497, 2492, + 2429, 2430, 2431, 2425, 2430, 2434, 2423, 2433, 2433, 2435, + 2435, 2443, 2434, 2436, 2439, 2426, 2427, 2440, 2436, 2441, + 2431, 2438, 2438, 2439, 2444, 2444, 2440, 2445, 2441, 2443, + 2446, 2445, 2447, 2449, 2450, 2448, 2455, 2455, 2456, 2446, + 2448, 2448, 2458, 2450, 2462, 2459, 2449, 2447, 2464, 2463, + 2466, 2458, 2468, 2483, 2470, 2471, 2456, 2459, 2463, 2470, + 2471, 2473, 2466, 2472, 2472, 2482, 2475, 0, 2464, 2462, + 2473, 2475, 2483, 2468, 2476, 2476, 2478, 2478, 2476, 2479, + 2479, 2480, 2480, 2481, 2484, 2482, 2487, 2486, 2490, 2484, + 2488, 2487, 2481, 2486, 2491, 2488, 2489, 2489, 2492, 2493, - 2487, 2499, 2498, 2495, 2500, 2500, 2497, 2498, 2506, 2501, - 2503, 2503, 2504, 2504, 2496, 2508, 2508, 2510, 2511, 2512, - 2513, 2515, 2515, 2516, 2517, 2513, 2518, 2499, 2501, 2506, - 2520, 2520, 2521, 2510, 2511, 2512, 2523, 2525, 2525, 2526, - 2526, 2523, 2527, 2516, 2529, 2518, 2521, 2517, 2528, 2528, - 2530, 2531, 2532, 2529, 2533, 2534, 2542, 2531, 2535, 2535, - 2536, 2541, 2527, 2536, 2537, 2537, 2533, 2547, 2528, 0, - 2530, 2532, 2543, 2541, 2545, 2534, 2542, 2545, 2543, 2544, - 2544, 2546, 2551, 2549, 2550, 2547, 2552, 2546, 2549, 2550, - 2553, 2557, 2552, 2554, 2554, 2556, 2556, 2558, 2560, 2560, + 2495, 2494, 2498, 2492, 2496, 2496, 2490, 2494, 2499, 2500, + 2502, 2502, 2506, 2504, 2505, 2491, 2506, 2493, 2508, 2507, + 2509, 2498, 2510, 2499, 2512, 2495, 2504, 2505, 2507, 2500, + 2510, 2511, 2513, 2513, 2508, 2514, 2511, 2516, 2516, 2509, + 2517, 2517, 2519, 2521, 2521, 2523, 2524, 2526, 2525, 2529, + 2512, 2530, 2526, 2531, 2514, 2528, 2528, 2533, 2533, 2534, + 2536, 2523, 2524, 2519, 2525, 2536, 2537, 2538, 2538, 2529, + 2539, 2539, 2531, 2534, 2530, 2540, 2541, 2541, 2542, 2543, + 2544, 2545, 2546, 2547, 2548, 2548, 2544, 2542, 2537, 2549, + 2550, 2550, 2549, 2554, 2546, 2540, 2541, 2555, 2556, 2543, - 2562, 2551, 2561, 2561, 2563, 2562, 2558, 2553, 2553, 2564, - 2557, 2565, 2565, 2573, 2564, 2566, 2566, 2568, 2563, 2567, - 2567, 2575, 2568, 2570, 2570, 2576, 2577, 2578, 2578, 2580, - 2580, 2581, 2573, 2582, 2586, 2583, 2584, 2584, 2585, 2586, - 2589, 2589, 2592, 2575, 2583, 2581, 2593, 2576, 2577, 2591, - 2591, 2594, 2593, 2582, 2595, 2597, 2592, 2585, 2596, 2596, - 2597, 2599, 2595, 2594, 2600, 2601, 2602, 2603, 2605, 2606, - 2601, 2607, 2608, 2603, 2610, 2609, 2605, 2611, 2602, 2612, - 2613, 2599, 2616, 2617, 2600, 2613, 2620, 2620, 2606, 2685, - 2610, 2607, 2608, 2609, 2611, 2611, 2617, 2621, 2621, 2622, + 2545, 2557, 2557, 2547, 2556, 2554, 2558, 2559, 2560, 2558, + 2562, 2563, 2564, 2559, 2565, 2562, 2563, 2555, 2566, 2570, + 2565, 2567, 2567, 2569, 2569, 2571, 2560, 2573, 2573, 2574, + 2574, 2564, 2575, 2576, 2571, 2566, 2566, 2575, 2570, 2577, + 2578, 2578, 2579, 2579, 2577, 2580, 2580, 2576, 2581, 2583, + 2583, 2586, 2588, 2581, 2589, 2590, 2591, 2591, 2593, 2593, + 2595, 2594, 2596, 2597, 2597, 2598, 0, 2599, 2602, 2602, + 2586, 2596, 2599, 2605, 2588, 2594, 2589, 2590, 2604, 2604, + 2595, 2607, 2606, 2608, 2598, 2609, 2609, 2605, 2606, 2610, + 2612, 2608, 2613, 2607, 2610, 2614, 2615, 2616, 2618, 2619, - 2612, 2685, 2616, 2622, 2626, 2626, 2628, 2628, 2629, 2629, - 2632, 2629, 2630, 2630, 2632, 2630, 2631, 2631, 2635, 2631, - 2634, 2634, 2638, 2636, 2639, 2639, 2642, 2638, 2643, 2644, - 2645, 2647, 2643, 2642, 2648, 2652, 2635, 2636, 2644, 2649, - 2649, 2650, 2650, 2648, 2657, 2645, 2651, 2651, 2653, 2647, - 2652, 2654, 2655, 2653, 2659, 2656, 2658, 2655, 2655, 2660, - 2654, 2656, 2661, 2654, 2660, 2662, 2720, 2661, 0, 2657, - 2720, 2658, 2663, 2663, 2664, 2659, 2667, 2667, 2680, 2664, - 2670, 2670, 2671, 2671, 2662, 2672, 2672, 2673, 2673, 2674, - 2674, 2675, 2675, 2676, 2676, 2678, 2679, 2679, 2680, 2682, + 2614, 2620, 2621, 2616, 2623, 2622, 2618, 2624, 2615, 2625, + 2612, 2626, 2613, 2629, 2630, 2635, 2626, 2657, 2619, 2635, + 2623, 2620, 2621, 2622, 2624, 2624, 2657, 2630, 2633, 2633, + 2625, 2634, 2634, 2629, 2639, 2639, 2641, 2641, 2642, 2642, + 2645, 2642, 2643, 2643, 2645, 2643, 2644, 2644, 2648, 2644, + 2647, 2647, 2651, 2649, 2652, 2652, 2655, 2651, 2656, 2658, + 2660, 2661, 2656, 2655, 2662, 2662, 2648, 2649, 2663, 2663, + 2661, 2664, 2664, 2665, 2658, 2666, 2668, 2667, 2660, 2669, + 2666, 2668, 2668, 2670, 2671, 2669, 2667, 2673, 2665, 2667, + 2672, 2674, 2673, 2675, 2676, 2676, 2674, 2677, 2691, 2671, - 2682, 2683, 2684, 2687, 2678, 2686, 2686, 2688, 2688, 2691, - 2692, 2693, 2695, 2692, 2697, 2684, 2683, 2697, 2687, 2694, - 2694, 2699, 2698, 2701, 2700, 2702, 2705, 2691, 2698, 2700, - 2695, 2703, 2718, 2714, 2721, 2699, 2714, 2693, 2716, 2716, - 2719, 2705, 2701, 2702, 2722, 2724, 2725, 2703, 2726, 2719, - 2727, 2728, 2727, 2726, 2721, 2718, 2730, 2725, 2722, 2729, - 2729, 2731, 2733, 2732, 2734, 2736, 2728, 2735, 2724, 2730, - 2737, 2739, 2740, 2741, 2741, 2742, 2743, 2743, 2733, 2747, - 2731, 2732, 2735, 2748, 2742, 2739, 2736, 2744, 2744, 2734, - 2737, 2752, 2740, 2745, 2745, 2746, 2746, 2749, 2747, 2750, + 2680, 2680, 2677, 2683, 2683, 2684, 2684, 2691, 2670, 2685, + 2685, 2672, 2675, 2686, 2686, 2687, 2687, 2688, 2688, 2689, + 2689, 2692, 2692, 2693, 2695, 2695, 2696, 2697, 2699, 2699, + 2698, 2700, 2701, 2701, 2704, 2705, 2706, 2708, 2705, 2712, + 2697, 2696, 2698, 2693, 2707, 2707, 2700, 2710, 2711, 2714, + 2710, 2713, 2704, 2712, 2711, 2708, 2713, 2715, 2716, 2731, + 2727, 2718, 2706, 2727, 2729, 2729, 2733, 2734, 2714, 2732, + 2733, 2735, 2737, 2738, 2716, 2715, 2718, 2740, 2732, 2740, + 2743, 2739, 2731, 2741, 2738, 2735, 2739, 2734, 2742, 2742, + 2744, 2746, 2745, 2743, 2747, 2737, 2748, 2749, 2741, 2752, - 2749, 2751, 2753, 2748, 2750, 2754, 2751, 2755, 2756, 2757, - 2757, 2754, 2758, 2759, 2759, 2761, 2752, 2753, 2763, 2766, - 2766, 2755, 2767, 2767, 2768, 2769, 2772, 2770, 2756, 2771, - 2761, 2758, 2768, 2770, 2773, 2771, 2763, 2774, 2775, 2775, - 2772, 2777, 2780, 2779, 2769, 2782, 2780, 2773, 2783, 2784, - 2785, 2786, 2787, 2783, 2788, 2789, 2774, 2779, 2791, 2788, - 2789, 2777, 2792, 2785, 2786, 2782, 2793, 2793, 2784, 2794, - 2797, 2787, 2795, 2800, 2794, 2797, 2791, 2798, 2795, 2796, - 2796, 2792, 2798, 2799, 2801, 2805, 2802, 2806, 2799, 2805, - 2801, 2802, 2800, 2803, 2803, 2807, 2808, 2809, 2810, 2811, + 2750, 2753, 2754, 2754, 2848, 2755, 2848, 2746, 2761, 2744, + 2745, 2748, 2760, 2752, 2755, 2756, 2756, 2765, 2749, 2747, + 2750, 2753, 2757, 2757, 2758, 2758, 2759, 2759, 2761, 2762, + 2763, 2760, 2762, 2764, 2766, 2763, 2768, 2767, 2764, 2769, + 2770, 2770, 2765, 2767, 2771, 2772, 2772, 2774, 2776, 2766, + 2768, 2779, 2779, 2780, 2780, 2782, 2781, 2786, 2785, 2769, + 2787, 2783, 2774, 2771, 2781, 2784, 2776, 2783, 2788, 2788, + 2786, 2784, 2785, 2790, 2782, 2792, 2793, 2795, 2796, 2787, + 2793, 2797, 2798, 2796, 2800, 2799, 2801, 2802, 2804, 2792, + 2805, 2801, 2802, 2790, 2807, 2798, 2813, 2795, 2799, 2807, - 2812, 2818, 2807, 2819, 2810, 2816, 2806, 2813, 2813, 2815, - 2815, 2825, 2820, 2812, 2816, 2808, 2809, 2816, 2811, 2817, - 2818, 2823, 2819, 2822, 2817, 2820, 2821, 2821, 2822, 2826, - 2826, 2827, 2828, 2828, 2823, 2829, 2829, 2825, 2830, 2831, - 2832, 2833, 2833, 2830, 2834, 2835, 2831, 2835, 2837, 2834, - 2827, 2836, 2836, 2838, 2839, 2837, 2840, 2841, 2844, 2832, - 2838, 2840, 2843, 2843, 2846, 2847, 2848, 2849, 2853, 2846, - 2847, 2850, 2850, 2839, 2852, 2852, 2841, 2844, 2854, 2855, - 2855, 2856, 2856, 2857, 2867, 2848, 2849, 2853, 2859, 2859, - 2857, 2860, 2860, 2861, 2863, 2868, 2866, 2854, 0, 2863, + 2797, 2806, 2806, 2800, 2808, 0, 2804, 2809, 2809, 2805, + 2808, 2810, 2811, 2812, 2814, 2813, 2810, 2811, 2812, 2815, + 2814, 2816, 2816, 2818, 2815, 2819, 2820, 2818, 2821, 2822, + 2823, 2824, 2825, 2820, 2826, 2826, 2823, 2828, 2828, 2831, + 2829, 2830, 2832, 2833, 2819, 2825, 2830, 2821, 2822, 2829, + 2824, 2836, 2829, 2834, 2834, 2835, 2833, 2838, 2831, 2840, + 2835, 2832, 2839, 2839, 2836, 2841, 2841, 2842, 2842, 2843, + 2844, 2845, 2846, 2846, 2843, 2847, 2852, 2844, 2840, 2850, + 2847, 2849, 2849, 2838, 2851, 2854, 2850, 2853, 2856, 2856, + 2845, 2851, 2853, 2857, 2859, 2852, 2860, 2861, 2862, 2859, - 2861, 2866, 0, 2867, 2869, 2869, 2870, 2870, 0, 0, - 0, 0, 0, 0, 2868, 2874, 2874, 2874, 2874, 2874, - 2874, 2874, 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2877, 2877, 2877, 2877, - 2877, 2877, 2877, 2878, 2878, 2878, 2878, 2878, 2878, 2878, - 2880, 2880, 0, 2880, 2880, 2880, 2880, 2881, 2881, 0, - 0, 0, 2881, 2881, 2882, 2882, 0, 0, 2882, 0, - 2882, 2883, 0, 0, 0, 0, 0, 2883, 2884, 2884, - 0, 0, 0, 2884, 2884, 2885, 0, 0, 0, 0, - 0, 2885, 2886, 2886, 0, 2886, 2886, 2886, 2886, 2887, + 2866, 2860, 2863, 2863, 2854, 2865, 2865, 2867, 2868, 2868, + 2869, 2869, 2857, 2870, 2872, 2872, 2861, 2862, 2874, 2866, + 2870, 2873, 2873, 2876, 2879, 2874, 2867, 2880, 2876, 2879, + 2881, 2882, 2882, 2883, 2883, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2880, 0, 0, 2881, + 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2888, 2888, 2888, + 2888, 2888, 2888, 2888, 2889, 2889, 2889, 2889, 2889, 2889, + 2889, 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2891, 2891, + 2891, 2891, 2891, 2891, 2891, 2893, 2893, 0, 2893, 2893, + 2893, 2893, 2894, 2894, 0, 0, 0, 2894, 2894, 2895, - 2887, 0, 2887, 2887, 2887, 2887, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, - 2873, 2873, 2873, 2873, 2873, 2873, 2873 + 2895, 0, 0, 2895, 0, 2895, 2896, 0, 0, 0, + 0, 0, 2896, 2897, 2897, 0, 0, 0, 2897, 2897, + 2898, 0, 0, 0, 0, 0, 2898, 2899, 2899, 0, + 2899, 2899, 2899, 2899, 2900, 2900, 0, 2900, 2900, 2900, + 2900, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, + 2886, 2886 } ; static yy_state_type yy_last_accepting_state; @@ -2830,7 +2843,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2832 "" +#line 2845 "" #define INITIAL 0 #define quotedstring 1 @@ -3053,7 +3066,7 @@ YY_DECL { #line 205 "./util/configlexer.lex" -#line 3055 "" +#line 3068 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3086,13 +3099,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 >= 2874 ) + if ( yy_current_state >= 2887 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5607 ); + while ( yy_base[yy_current_state] != 5642 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3317,1004 +3330,1004 @@ YY_RULE_SETUP case 40: YY_RULE_SETUP #line 248 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_TLS_CIPHERS) } YY_BREAK case 41: YY_RULE_SETUP #line 249 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_TLS_CIPHERSUITES) } YY_BREAK case 42: YY_RULE_SETUP #line 250 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 43: YY_RULE_SETUP #line 251 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 44: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 45: YY_RULE_SETUP #line 253 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 46: YY_RULE_SETUP #line 254 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 47: YY_RULE_SETUP #line 255 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 48: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 49: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 50: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 51: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 52: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 53: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 54: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 55: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 56: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 57: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 58: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 59: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 60: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 61: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 62: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 63: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 64: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 65: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 66: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 67: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 68: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 69: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 70: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 71: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 72: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 73: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 74: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 75: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 76: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 77: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 78: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 79: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 80: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 81: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 82: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 83: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 84: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 85: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 86: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 87: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 88: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 89: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 90: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 91: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 92: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 93: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 94: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 95: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 96: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 97: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 98: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 99: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 100: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 101: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 102: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 103: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 104: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 105: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 106: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 107: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 108: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 109: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 110: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 111: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 112: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 113: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 114: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 115: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 116: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 117: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 118: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 119: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 120: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 121: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 122: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 123: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 124: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 125: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 126: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 127: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 128: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 129: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 130: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 131: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 132: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 133: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 134: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 135: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 136: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 137: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 138: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 139: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 140: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 141: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 142: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 143: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 144: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 145: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 146: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 147: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 148: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 149: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 150: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 151: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 152: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 153: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 154: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 155: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 156: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 157: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 158: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 159: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 160: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 161: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 162: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 163: YY_RULE_SETUP -#line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 371 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 164: YY_RULE_SETUP -#line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 372 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 165: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 166: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 167: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 168: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 169: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 170: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 171: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 172: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 173: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 174: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 175: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 176: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 177: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 178: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 179: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 180: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 181: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 182: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 183: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 184: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 185: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 186: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 187: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 188: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 189: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 190: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 191: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 192: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 193: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 194: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 195: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 196: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 197: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 198: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 199: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 200: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 201: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 202: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 203: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 204: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 205: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 206: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 207: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 208: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 209: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 210: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 211: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 212: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 213: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 214: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 215: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 216: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 217: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 218: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 219: YY_RULE_SETUP -#line 429 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 428 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 220: YY_RULE_SETUP -#line 431 "./util/configlexer.lex" +#line 429 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 221: YY_RULE_SETUP -#line 433 "./util/configlexer.lex" +#line 431 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 222: YY_RULE_SETUP -#line 435 "./util/configlexer.lex" +#line 433 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 223: YY_RULE_SETUP -#line 437 "./util/configlexer.lex" +#line 435 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 224: YY_RULE_SETUP -#line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 437 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 225: YY_RULE_SETUP -#line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 439 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 239: YY_RULE_SETUP @@ -4324,180 +4337,190 @@ YY_RULE_SETUP case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 251: YY_RULE_SETUP -#line 467 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 466 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 252: YY_RULE_SETUP -#line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 467 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 253: YY_RULE_SETUP -#line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 469 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 254: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 255: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 256: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 257: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 258: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 259: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 260: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 267: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 268: -/* rule 268 can match eol */ YY_RULE_SETUP #line 485 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 269: +YY_RULE_SETUP +#line 486 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 270: +/* rule 270 can match eol */ +YY_RULE_SETUP +#line 487 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 269: +case 271: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" +#line 490 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 489 "./util/configlexer.lex" +#line 491 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 270: +case 272: YY_RULE_SETUP -#line 494 "./util/configlexer.lex" +#line 496 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 271: -/* rule 271 can match eol */ +case 273: +/* rule 273 can match eol */ YY_RULE_SETUP -#line 495 "./util/configlexer.lex" +#line 497 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 272: +case 274: YY_RULE_SETUP -#line 497 "./util/configlexer.lex" +#line 499 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4510,34 +4533,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 273: +case 275: YY_RULE_SETUP -#line 509 "./util/configlexer.lex" +#line 511 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 510 "./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 274: +case 276: YY_RULE_SETUP -#line 515 "./util/configlexer.lex" +#line 517 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 275: -/* rule 275 can match eol */ +case 277: +/* rule 277 can match eol */ YY_RULE_SETUP -#line 516 "./util/configlexer.lex" +#line 518 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 276: +case 278: YY_RULE_SETUP -#line 518 "./util/configlexer.lex" +#line 520 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4550,38 +4573,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 277: +case 279: YY_RULE_SETUP -#line 530 "./util/configlexer.lex" +#line 532 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 532 "./util/configlexer.lex" +#line 534 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 278: -YY_RULE_SETUP -#line 536 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 279: -/* rule 279 can match eol */ -YY_RULE_SETUP -#line 537 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 280: YY_RULE_SETUP #line 538 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 281: +/* rule 281 can match eol */ YY_RULE_SETUP #line 539 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 282: +YY_RULE_SETUP +#line 540 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 283: +YY_RULE_SETUP +#line 541 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4589,27 +4612,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 544 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 282: +case 284: YY_RULE_SETUP -#line 548 "./util/configlexer.lex" +#line 550 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 283: -/* rule 283 can match eol */ +case 285: +/* rule 285 can match eol */ YY_RULE_SETUP -#line 549 "./util/configlexer.lex" +#line 551 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 284: +case 286: YY_RULE_SETUP -#line 551 "./util/configlexer.lex" +#line 553 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4619,7 +4642,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 557 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4631,33 +4654,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 285: +case 287: YY_RULE_SETUP -#line 568 "./util/configlexer.lex" +#line 570 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 286: +case 288: YY_RULE_SETUP -#line 572 "./util/configlexer.lex" +#line 574 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 287: +case 289: YY_RULE_SETUP -#line 576 "./util/configlexer.lex" +#line 578 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 288: +case 290: YY_RULE_SETUP -#line 580 "./util/configlexer.lex" +#line 582 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4659 "" +#line 4682 "" case YY_END_OF_BUFFER: { @@ -4948,7 +4971,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 >= 2874 ) + if ( yy_current_state >= 2887 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -4976,11 +4999,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 >= 2874 ) + if ( yy_current_state >= 2887 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2873); + yy_is_jam = (yy_current_state == 2886); return yy_is_jam ? 0 : yy_current_state; } @@ -5619,7 +5642,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 580 "./util/configlexer.lex" +#line 582 "./util/configlexer.lex" diff --git a/util/configparser.c b/util/configparser.c index 520848617..9c9d5fb77 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -386,7 +386,9 @@ extern int yydebug; VAR_DENY_ANY = 515, VAR_UNKNOWN_SERVER_TIME_LIMIT = 516, VAR_LOG_TAG_QUERYREPLY = 517, - VAR_STREAM_WAIT_SIZE = 518 + VAR_STREAM_WAIT_SIZE = 518, + VAR_TLS_CIPHERS = 519, + VAR_TLS_CIPHERSUITES = 520 }; #endif /* Tokens. */ @@ -651,6 +653,8 @@ extern int yydebug; #define VAR_UNKNOWN_SERVER_TIME_LIMIT 516 #define VAR_LOG_TAG_QUERYREPLY 517 #define VAR_STREAM_WAIT_SIZE 518 +#define VAR_TLS_CIPHERS 519 +#define VAR_TLS_CIPHERSUITES 520 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -661,7 +665,7 @@ union YYSTYPE char* str; -#line 665 "util/configparser.c" /* yacc.c:355 */ +#line 669 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -678,7 +682,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 682 "util/configparser.c" /* yacc.c:358 */ +#line 686 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -920,21 +924,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 530 +#define YYLAST 534 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 264 +#define YYNTOKENS 266 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 283 +#define YYNNTS 285 /* YYNRULES -- Number of rules. */ -#define YYNRULES 543 +#define YYNRULES 547 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 814 +#define YYNSTATES 820 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 518 +#define YYMAXUTOK 520 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -994,7 +998,8 @@ static const yytype_uint16 yytranslate[] = 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263 + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265 }; #if YYDEBUG @@ -1021,41 +1026,41 @@ static const yytype_uint16 yyrline[] = 254, 255, 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, 259, 260, 260, 261, 261, 262, 262, 263, 263, 264, 264, 264, 265, 265, 265, 266, 266, 266, - 267, 267, 268, 270, 282, 283, 284, 284, 284, 284, - 284, 285, 285, 287, 299, 300, 301, 301, 301, 301, - 302, 302, 304, 318, 319, 320, 320, 320, 320, 321, - 321, 321, 323, 339, 340, 341, 341, 341, 341, 342, - 342, 342, 343, 345, 354, 363, 374, 383, 392, 401, - 412, 421, 432, 445, 460, 471, 488, 505, 522, 539, - 554, 569, 582, 597, 606, 615, 624, 633, 642, 651, - 660, 669, 678, 687, 696, 705, 714, 727, 736, 749, - 758, 767, 776, 783, 790, 799, 806, 815, 823, 832, - 841, 855, 864, 873, 882, 891, 900, 909, 916, 923, - 949, 957, 964, 971, 978, 985, 993, 1001, 1009, 1016, - 1027, 1038, 1045, 1054, 1063, 1072, 1079, 1086, 1094, 1102, - 1112, 1122, 1132, 1140, 1153, 1164, 1172, 1185, 1194, 1203, - 1212, 1222, 1232, 1240, 1253, 1262, 1270, 1279, 1287, 1300, - 1309, 1316, 1326, 1336, 1346, 1356, 1366, 1376, 1386, 1396, - 1403, 1410, 1417, 1426, 1435, 1444, 1453, 1460, 1470, 1490, - 1497, 1515, 1528, 1541, 1550, 1559, 1568, 1577, 1587, 1597, - 1608, 1617, 1626, 1635, 1644, 1657, 1670, 1679, 1686, 1695, - 1704, 1713, 1722, 1730, 1743, 1751, 1782, 1789, 1804, 1814, - 1824, 1831, 1838, 1845, 1854, 1862, 1876, 1897, 1918, 1930, - 1942, 1954, 1963, 1984, 1994, 2003, 2011, 2019, 2032, 2045, - 2060, 2075, 2084, 2093, 2099, 2108, 2117, 2127, 2137, 2150, - 2163, 2175, 2189, 2201, 2215, 2225, 2232, 2239, 2248, 2257, - 2267, 2277, 2287, 2294, 2301, 2310, 2319, 2329, 2339, 2346, - 2353, 2360, 2368, 2378, 2388, 2398, 2408, 2440, 2450, 2458, - 2466, 2481, 2490, 2495, 2496, 2497, 2497, 2497, 2498, 2498, - 2498, 2499, 2499, 2501, 2511, 2520, 2527, 2534, 2541, 2548, - 2555, 2562, 2567, 2568, 2569, 2569, 2570, 2570, 2571, 2571, - 2572, 2573, 2574, 2575, 2576, 2577, 2579, 2588, 2595, 2604, - 2613, 2620, 2627, 2637, 2647, 2657, 2667, 2677, 2687, 2692, - 2693, 2694, 2696, 2702, 2712, 2719, 2728, 2736, 2741, 2742, - 2744, 2744, 2744, 2745, 2745, 2746, 2747, 2748, 2749, 2750, - 2752, 2762, 2771, 2778, 2787, 2794, 2803, 2811, 2824, 2832, - 2845, 2850, 2851, 2852, 2852, 2853, 2853, 2853, 2855, 2870, - 2885, 2897, 2912, 2925 + 267, 267, 268, 268, 268, 270, 282, 283, 284, 284, + 284, 284, 284, 285, 285, 287, 299, 300, 301, 301, + 301, 301, 302, 302, 304, 318, 319, 320, 320, 320, + 320, 321, 321, 321, 323, 339, 340, 341, 341, 341, + 341, 342, 342, 342, 343, 345, 354, 363, 374, 383, + 392, 401, 412, 421, 432, 445, 460, 471, 488, 505, + 522, 539, 554, 569, 582, 597, 606, 615, 624, 633, + 642, 651, 660, 669, 678, 687, 696, 705, 714, 727, + 736, 749, 758, 767, 776, 783, 790, 799, 806, 815, + 823, 830, 837, 846, 855, 869, 878, 887, 896, 905, + 914, 923, 930, 937, 963, 971, 978, 985, 992, 999, + 1007, 1015, 1023, 1030, 1041, 1052, 1059, 1068, 1077, 1086, + 1093, 1100, 1108, 1116, 1126, 1136, 1146, 1154, 1167, 1178, + 1186, 1199, 1208, 1217, 1226, 1236, 1246, 1254, 1267, 1276, + 1284, 1293, 1301, 1314, 1323, 1330, 1340, 1350, 1360, 1370, + 1380, 1390, 1400, 1410, 1417, 1424, 1431, 1440, 1449, 1458, + 1467, 1474, 1484, 1504, 1511, 1529, 1542, 1555, 1564, 1573, + 1582, 1591, 1601, 1611, 1622, 1631, 1640, 1649, 1658, 1671, + 1684, 1693, 1700, 1709, 1718, 1727, 1736, 1744, 1757, 1765, + 1796, 1803, 1818, 1828, 1838, 1845, 1852, 1859, 1868, 1876, + 1890, 1911, 1932, 1944, 1956, 1968, 1977, 1998, 2008, 2017, + 2025, 2033, 2046, 2059, 2074, 2089, 2098, 2107, 2113, 2122, + 2131, 2141, 2151, 2164, 2177, 2189, 2203, 2215, 2229, 2239, + 2246, 2253, 2262, 2271, 2281, 2291, 2301, 2308, 2315, 2324, + 2333, 2343, 2353, 2360, 2367, 2374, 2382, 2392, 2402, 2412, + 2422, 2454, 2464, 2472, 2480, 2495, 2504, 2509, 2510, 2511, + 2511, 2511, 2512, 2512, 2512, 2513, 2513, 2515, 2525, 2534, + 2541, 2548, 2555, 2562, 2569, 2576, 2581, 2582, 2583, 2583, + 2584, 2584, 2585, 2585, 2586, 2587, 2588, 2589, 2590, 2591, + 2593, 2602, 2609, 2618, 2627, 2634, 2641, 2651, 2661, 2671, + 2681, 2691, 2701, 2706, 2707, 2708, 2710, 2716, 2726, 2733, + 2742, 2750, 2755, 2756, 2758, 2758, 2758, 2759, 2759, 2760, + 2761, 2762, 2763, 2764, 2766, 2776, 2785, 2792, 2801, 2808, + 2817, 2825, 2838, 2846, 2859, 2864, 2865, 2866, 2866, 2867, + 2867, 2867, 2869, 2884, 2899, 2911, 2926, 2939 }; #endif @@ -1161,11 +1166,12 @@ static const char *const yytname[] = "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", "$accept", "toplevelvars", "toplevelvar", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "server_num_threads", + "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", + "$accept", "toplevelvars", "toplevelvar", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "authstart", + "contents_auth", "content_auth", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", @@ -1185,19 +1191,20 @@ static const char *const yytname[] = "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_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_tls_ciphers", "server_tls_ciphersuites", "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", @@ -1310,7 +1317,7 @@ static const yytype_uint16 yytoknum[] = 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 + 515, 516, 517, 518, 519, 520 }; # endif @@ -1335,21 +1342,22 @@ static const yytype_int16 yypact[] = 78, 79, 80, 84, 88, 89, 114, 115, 116, 118, 129, 130, 132, 133, 134, 136, 141, 180, 182, 196, 197, 200, 201, 203, 204, 205, 206, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 225, 242, 243, 244, - 245, 247, 248, 249, 250, 251, 253, 254, 255, 256, - 257, 258, 259, 272, 278, 279, 280, 281, 282, 297, - 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, - 317, 318, 319, 320, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 346, 347, 348, 349, - 351, 352, 354, 355, 356, 357, 358, 359, 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, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 217, 218, 220, 221, 222, 223, 225, 244, 245, 247, + 248, 249, 250, 251, 253, 254, 255, 256, 257, 258, + 259, 272, 278, 279, 280, 281, 282, 297, 306, 307, + 308, 309, 310, 311, 313, 314, 315, 316, 317, 318, + 319, 320, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 346, 347, 348, 349, 351, 352, + 354, 355, 356, 357, 358, 359, 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, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 438, 439, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, @@ -1368,48 +1376,47 @@ static const yytype_int16 yypact[] = -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, 435, 436, 438, - 439, 440, 441, 442, -154, -154, -154, -154, -154, -154, - -154, -154, 443, 444, 446, 447, 448, 449, -154, -154, - -154, -154, -154, -154, -154, 450, 451, 452, 453, 454, - 455, 456, -154, -154, -154, -154, -154, -154, -154, -154, - 457, 458, 459, 460, 461, 462, 463, 464, -154, -154, - -154, -154, -154, -154, -154, -154, -154, 465, 466, 467, - 468, 469, 470, 471, 472, -154, -154, -154, -154, -154, - -154, -154, -154, -154, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, 485, - -154, -154, 486, 487, 488, 489, 490, 491, 492, 493, - 494, 495, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 496, 497, 498, 499, 500, -154, -154, + -154, 440, 441, 442, 443, 444, 446, 447, -154, -154, + -154, -154, -154, -154, -154, -154, 448, 449, 450, 451, + 452, 453, -154, -154, -154, -154, -154, -154, -154, 454, + 455, 456, 457, 458, 459, 460, -154, -154, -154, -154, + -154, -154, -154, -154, 461, 462, 463, 464, 465, 466, + 467, 468, -154, -154, -154, -154, -154, -154, -154, -154, + -154, 469, 470, 471, 472, 473, 474, 475, 476, -154, + -154, -154, -154, -154, -154, -154, -154, -154, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 489, -154, -154, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, 500, 501, 502, + 503, 504, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 501, 502, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, 505, 506, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - 503, 504, 505, -154, -154, -154, -154, -154, -154, -154, - -154, -154, 506, 507, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, 507, 508, 509, -154, -154, -154, + -154, -154, -154, -154, -154, -154, 510, 511, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 508, 509, 510, 511, 512, 513, -154, + -154, -154, -154, -154, -154, -154, -154, 512, 513, 514, + 515, 516, 517, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, 518, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, 514, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, 515, -154, -154, 516, 517, -154, + 519, -154, -154, 520, 521, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 518, 519, 520, -154, -154, -154, -154, - -154, -154, -154, -154 + -154, -154, -154, -154, -154, -154, -154, -154, -154, 522, + 523, 524, -154, -154, -154, -154, -154, -154, -154, -154 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1417,9 +1424,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 14, 203, 213, 452, 498, 471, 222, - 507, 530, 232, 3, 16, 205, 215, 224, 234, 454, - 473, 500, 509, 532, 4, 5, 6, 10, 13, 8, + 2, 0, 1, 14, 205, 215, 456, 502, 475, 224, + 511, 534, 234, 3, 16, 207, 217, 226, 236, 458, + 477, 504, 513, 536, 4, 5, 6, 10, 13, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1439,66 +1446,66 @@ 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, - 15, 17, 18, 80, 83, 92, 177, 178, 19, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 31, - 71, 20, 84, 85, 42, 64, 79, 21, 22, 24, - 25, 23, 26, 27, 28, 29, 30, 115, 189, 116, - 118, 119, 120, 191, 196, 192, 173, 81, 70, 96, - 113, 114, 201, 198, 117, 32, 33, 34, 35, 36, - 72, 86, 87, 102, 58, 68, 59, 181, 182, 97, - 52, 53, 180, 54, 55, 106, 110, 124, 133, 158, - 202, 107, 65, 37, 38, 39, 94, 125, 126, 127, - 40, 41, 43, 44, 46, 47, 45, 131, 48, 49, - 50, 56, 75, 111, 89, 132, 82, 154, 90, 91, - 108, 109, 199, 95, 51, 73, 76, 57, 60, 98, - 99, 74, 155, 100, 61, 62, 63, 190, 112, 168, - 169, 170, 171, 179, 101, 69, 103, 104, 105, 156, - 66, 67, 88, 77, 78, 93, 121, 122, 200, 123, - 128, 129, 130, 159, 160, 162, 164, 165, 163, 166, - 174, 134, 135, 138, 139, 136, 137, 140, 141, 143, - 142, 193, 195, 194, 157, 167, 183, 185, 184, 186, - 187, 188, 161, 172, 175, 176, 197, 0, 0, 0, - 0, 0, 0, 0, 204, 206, 207, 208, 210, 211, - 212, 209, 0, 0, 0, 0, 0, 0, 214, 216, - 217, 218, 219, 220, 221, 0, 0, 0, 0, 0, - 0, 0, 223, 225, 226, 229, 230, 227, 231, 228, - 0, 0, 0, 0, 0, 0, 0, 0, 233, 235, - 236, 237, 238, 242, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 453, 455, 457, 456, 462, - 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 472, 474, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 485, 0, - 499, 501, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 508, 510, 511, 512, 514, 515, 513, 516, - 517, 518, 519, 0, 0, 0, 0, 0, 531, 533, - 534, 535, 536, 537, 244, 243, 250, 263, 261, 269, - 270, 273, 271, 272, 274, 275, 276, 277, 278, 297, - 298, 299, 300, 301, 325, 326, 327, 332, 333, 266, - 334, 335, 338, 336, 337, 340, 341, 342, 356, 312, - 313, 315, 316, 343, 359, 306, 308, 360, 366, 367, - 368, 267, 324, 382, 383, 307, 377, 290, 262, 302, - 357, 363, 344, 0, 0, 386, 268, 245, 289, 348, - 246, 264, 265, 303, 304, 384, 346, 350, 351, 247, - 387, 328, 355, 291, 311, 361, 362, 365, 376, 305, - 380, 378, 379, 317, 323, 352, 353, 318, 319, 345, - 370, 292, 293, 296, 279, 281, 282, 283, 284, 285, - 388, 389, 391, 329, 330, 331, 339, 392, 393, 394, - 0, 0, 0, 347, 320, 503, 403, 407, 405, 404, - 408, 406, 0, 0, 411, 412, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 349, 364, 381, 416, - 417, 321, 395, 0, 0, 0, 0, 0, 0, 371, - 372, 373, 374, 375, 504, 314, 309, 369, 288, 248, - 249, 310, 418, 420, 419, 421, 422, 423, 280, 287, - 413, 415, 414, 286, 0, 295, 354, 390, 294, 322, - 424, 425, 426, 430, 429, 427, 428, 431, 432, 433, - 434, 436, 435, 445, 0, 449, 450, 0, 0, 451, - 437, 443, 438, 439, 440, 442, 444, 441, 463, 465, - 464, 467, 468, 469, 470, 466, 486, 487, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, 502, 520, - 521, 522, 525, 523, 524, 526, 527, 528, 529, 538, - 539, 540, 541, 542, 358, 385, 402, 505, 506, 409, - 410, 396, 397, 0, 0, 0, 401, 543, 446, 447, - 448, 400, 398, 399 + 0, 0, 15, 17, 18, 80, 83, 92, 177, 178, + 19, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 31, 71, 20, 84, 85, 42, 64, 79, 21, + 22, 24, 25, 23, 26, 27, 28, 29, 30, 115, + 189, 116, 118, 119, 120, 191, 196, 192, 203, 204, + 173, 81, 70, 96, 113, 114, 201, 198, 117, 32, + 33, 34, 35, 36, 72, 86, 87, 102, 58, 68, + 59, 181, 182, 97, 52, 53, 180, 54, 55, 106, + 110, 124, 133, 158, 202, 107, 65, 37, 38, 39, + 94, 125, 126, 127, 40, 41, 43, 44, 46, 47, + 45, 131, 48, 49, 50, 56, 75, 111, 89, 132, + 82, 154, 90, 91, 108, 109, 199, 95, 51, 73, + 76, 57, 60, 98, 99, 74, 155, 100, 61, 62, + 63, 190, 112, 168, 169, 170, 171, 179, 101, 69, + 103, 104, 105, 156, 66, 67, 88, 77, 78, 93, + 121, 122, 200, 123, 128, 129, 130, 159, 160, 162, + 164, 165, 163, 166, 174, 134, 135, 138, 139, 136, + 137, 140, 141, 143, 142, 193, 195, 194, 157, 167, + 183, 185, 184, 186, 187, 188, 161, 172, 175, 176, + 197, 0, 0, 0, 0, 0, 0, 0, 206, 208, + 209, 210, 212, 213, 214, 211, 0, 0, 0, 0, + 0, 0, 216, 218, 219, 220, 221, 222, 223, 0, + 0, 0, 0, 0, 0, 0, 225, 227, 228, 231, + 232, 229, 233, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 237, 238, 239, 240, 244, 241, 242, + 243, 0, 0, 0, 0, 0, 0, 0, 0, 457, + 459, 461, 460, 466, 462, 463, 464, 465, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 476, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 0, 503, 505, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 512, 514, 515, 516, + 518, 519, 517, 520, 521, 522, 523, 0, 0, 0, + 0, 0, 535, 537, 538, 539, 540, 541, 246, 245, + 252, 265, 263, 271, 272, 275, 273, 274, 276, 277, + 278, 279, 280, 301, 302, 303, 304, 305, 329, 330, + 331, 336, 337, 268, 338, 339, 342, 340, 341, 344, + 345, 346, 360, 316, 317, 319, 320, 347, 363, 310, + 312, 364, 370, 371, 372, 269, 328, 386, 387, 311, + 381, 294, 264, 306, 361, 367, 348, 0, 0, 390, + 270, 247, 293, 352, 248, 266, 267, 307, 308, 388, + 350, 354, 355, 249, 391, 332, 359, 295, 315, 365, + 366, 369, 380, 309, 384, 382, 383, 321, 327, 356, + 357, 322, 323, 349, 374, 296, 297, 300, 281, 283, + 284, 285, 286, 287, 392, 393, 395, 333, 334, 335, + 343, 396, 397, 398, 0, 0, 0, 351, 324, 507, + 407, 411, 409, 408, 412, 410, 0, 0, 415, 416, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 353, 368, 385, 420, 421, 325, 399, 0, 0, 0, + 0, 0, 0, 375, 376, 377, 378, 379, 508, 318, + 313, 373, 292, 250, 251, 314, 422, 424, 423, 425, + 426, 427, 282, 289, 417, 419, 418, 288, 0, 299, + 358, 394, 298, 326, 290, 291, 428, 429, 430, 434, + 433, 431, 432, 435, 436, 437, 438, 440, 439, 449, + 0, 453, 454, 0, 0, 455, 441, 447, 442, 443, + 444, 446, 448, 445, 467, 469, 468, 471, 472, 473, + 474, 470, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 506, 524, 525, 526, 529, 527, + 528, 530, 531, 532, 533, 542, 543, 544, 545, 546, + 362, 389, 406, 509, 510, 413, 414, 400, 401, 0, + 0, 0, 405, 547, 450, 451, 452, 404, 402, 403 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1532,41 +1539,41 @@ static const yytype_int16 yypgoto[] = -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154 + -154, -154, -154, -154, -154 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 13, 14, 24, 220, 15, 25, 414, 16, - 26, 428, 17, 27, 442, 18, 28, 458, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 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, 415, - 416, 417, 418, 419, 420, 421, 429, 430, 431, 432, - 433, 434, 459, 460, 461, 462, 463, 464, 465, 466, - 443, 444, 445, 446, 447, 448, 449, 19, 29, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 20, 30, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 21, 31, 510, 511, 402, 403, 404, - 405, 22, 32, 522, 523, 524, 525, 526, 527, 528, - 529, 530, 531, 532, 23, 33, 538, 539, 540, 541, - 542, 543, 406 + -1, 1, 13, 14, 24, 222, 15, 25, 418, 16, + 26, 432, 17, 27, 446, 18, 28, 462, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 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, 419, 420, 421, 422, 423, 424, 425, 433, 434, + 435, 436, 437, 438, 463, 464, 465, 466, 467, 468, + 469, 470, 447, 448, 449, 450, 451, 452, 453, 19, + 29, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 20, 30, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 21, 31, 514, 515, 406, + 407, 408, 409, 22, 32, 526, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 23, 33, 542, 543, + 544, 545, 546, 547, 410 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1577,57 +1584,57 @@ static const yytype_uint16 yytable[] = 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 509, 544, 545, 546, 65, 66, 67, 547, 548, - 549, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 64, 513, 548, 549, 550, 65, 66, 67, 551, 552, + 553, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 450, 533, 534, 535, 536, 537, 550, 551, - 552, 109, 110, 111, 553, 112, 113, 114, 554, 555, + 107, 108, 454, 537, 538, 539, 540, 541, 554, 555, + 556, 109, 110, 111, 557, 112, 113, 114, 558, 559, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 556, 557, 558, 139, 559, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 560, - 561, 422, 562, 563, 564, 407, 565, 408, 409, 423, - 424, 566, 150, 151, 152, 153, 154, 155, 156, 157, + 135, 136, 137, 138, 560, 561, 562, 139, 563, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 564, + 565, 426, 566, 567, 568, 411, 569, 412, 413, 427, + 428, 570, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 567, 188, 568, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 569, 570, 410, 435, - 571, 572, 2, 573, 574, 575, 576, 202, 203, 204, - 205, 206, 207, 3, 577, 578, 579, 580, 581, 208, - 582, 583, 584, 585, 425, 586, 426, 209, 210, 411, - 211, 212, 412, 213, 214, 436, 437, 215, 216, 217, - 218, 219, 587, 588, 589, 590, 4, 591, 592, 593, - 594, 595, 5, 596, 597, 598, 599, 600, 601, 602, - 438, 512, 513, 514, 515, 516, 517, 518, 519, 520, - 521, 451, 603, 452, 453, 454, 455, 456, 604, 605, - 606, 607, 608, 457, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 494, 495, 6, 609, 467, 468, - 469, 470, 471, 472, 473, 474, 610, 611, 612, 613, - 614, 615, 7, 616, 617, 618, 619, 620, 621, 622, - 623, 439, 440, 624, 625, 626, 627, 628, 629, 630, - 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 642, 643, 644, 645, 427, 646, 647, 648, 649, - 413, 650, 651, 8, 652, 653, 654, 655, 656, 657, - 441, 658, 659, 660, 661, 662, 663, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 9, 701, 702, 703, 704, 705, - 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, - 10, 716, 717, 718, 719, 720, 721, 722, 723, 724, - 725, 726, 727, 728, 729, 730, 731, 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, 761, 762, - 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, - 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, - 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, - 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, - 813 + 571, 188, 572, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 573, 574, 414, 439, + 575, 576, 2, 577, 578, 579, 580, 202, 203, 204, + 205, 206, 207, 3, 581, 582, 583, 584, 585, 208, + 586, 587, 588, 589, 429, 590, 430, 209, 210, 415, + 211, 212, 416, 213, 214, 440, 441, 215, 216, 217, + 218, 219, 220, 221, 591, 592, 4, 593, 594, 595, + 596, 597, 5, 598, 599, 600, 601, 602, 603, 604, + 442, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 455, 605, 456, 457, 458, 459, 460, 606, 607, + 608, 609, 610, 461, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 6, 611, 471, 472, + 473, 474, 475, 476, 477, 478, 612, 613, 614, 615, + 616, 617, 7, 618, 619, 620, 621, 622, 623, 624, + 625, 443, 444, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 644, 645, 646, 647, 431, 648, 649, 650, 651, + 417, 652, 653, 8, 654, 655, 656, 657, 658, 659, + 445, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 9, 703, 704, 705, 706, 707, + 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, + 10, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 11, 734, 735, + 736, 737, 738, 739, 740, 12, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819 }; static const yytype_uint16 yycheck[] = @@ -1657,7 +1664,7 @@ static const yytype_uint16 yycheck[] = 232, 233, 234, 11, 10, 10, 10, 10, 10, 241, 10, 10, 10, 10, 136, 10, 138, 249, 250, 137, 252, 253, 140, 255, 256, 79, 80, 259, 260, 261, - 262, 263, 10, 10, 10, 10, 44, 10, 10, 10, + 262, 263, 264, 265, 10, 10, 44, 10, 10, 10, 10, 10, 50, 10, 10, 10, 10, 10, 10, 10, 104, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 242, 10, 244, 245, 246, 247, 248, 10, 10, @@ -1685,17 +1692,17 @@ static const yytype_uint16 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, - 10 + 10, 10, 10, 10, 10 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 265, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 266, 267, 270, 273, 276, 279, 491, - 502, 517, 525, 538, 268, 271, 274, 277, 280, 492, - 503, 518, 526, 539, 12, 13, 14, 15, 16, 17, + 0, 267, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 268, 269, 272, 275, 278, 281, 495, + 506, 521, 529, 542, 270, 273, 276, 279, 282, 496, + 507, 522, 530, 543, 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, @@ -1714,7 +1721,7 @@ static const yytype_uint16 yystos[] = 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, 234, 241, 249, 250, 252, 253, 255, 256, 259, 260, 261, 262, 263, - 269, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 264, 265, 271, 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, @@ -1732,21 +1739,21 @@ static const yytype_uint16 yystos[] = 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, 521, 522, 523, 524, 546, 43, 45, 46, - 106, 137, 140, 258, 272, 463, 464, 465, 466, 467, - 468, 469, 43, 51, 52, 136, 138, 257, 275, 470, - 471, 472, 473, 474, 475, 43, 79, 80, 104, 165, - 166, 204, 278, 484, 485, 486, 487, 488, 489, 490, - 43, 242, 244, 245, 246, 247, 248, 254, 281, 476, - 477, 478, 479, 480, 481, 482, 483, 95, 96, 97, - 98, 99, 100, 101, 102, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 111, - 519, 520, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 236, 237, 238, 239, 240, 540, 541, - 542, 543, 544, 545, 10, 10, 10, 10, 10, 10, + 461, 462, 463, 464, 465, 466, 525, 526, 527, 528, + 550, 43, 45, 46, 106, 137, 140, 258, 274, 467, + 468, 469, 470, 471, 472, 473, 43, 51, 52, 136, + 138, 257, 277, 474, 475, 476, 477, 478, 479, 43, + 79, 80, 104, 165, 166, 204, 280, 488, 489, 490, + 491, 492, 493, 494, 43, 242, 244, 245, 246, 247, + 248, 254, 283, 480, 481, 482, 483, 484, 485, 486, + 487, 95, 96, 97, 98, 99, 100, 101, 102, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 520, 111, 523, 524, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 236, 237, 238, + 239, 240, 544, 545, 546, 547, 548, 549, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1773,37 +1780,37 @@ 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 264, 265, 265, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 266, 267, 268, 268, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 270, 271, 271, 272, 272, 272, 272, - 272, 272, 272, 273, 274, 274, 275, 275, 275, 275, - 275, 275, 276, 277, 277, 278, 278, 278, 278, 278, - 278, 278, 279, 280, 280, 281, 281, 281, 281, 281, - 281, 281, 281, 282, 283, 284, 285, 286, 287, 288, + 0, 266, 267, 267, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 269, 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, 272, 273, 273, 274, 274, + 274, 274, 274, 274, 274, 275, 276, 276, 277, 277, + 277, 277, 277, 277, 278, 279, 279, 280, 280, 280, + 280, 280, 280, 280, 281, 282, 282, 283, 283, 283, + 283, 283, 283, 283, 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, @@ -1824,16 +1831,16 @@ static const yytype_uint16 yyr1[] = 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, 492, 493, 493, 493, 493, 493, - 493, 493, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 503, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 505, 506, 507, 508, + 489, 490, 491, 492, 493, 494, 495, 496, 496, 497, + 497, 497, 497, 497, 497, 497, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 507, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 518, 519, 520, 521, 522, 523, 524, 525, 526, 526, - 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, - 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 539, 539, 540, 540, 540, 540, 540, 541, 542, - 543, 544, 545, 546 + 519, 520, 521, 522, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 530, 531, 531, 531, 531, 531, 531, + 531, 531, 531, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 543, 544, 544, 544, + 544, 544, 545, 546, 547, 548, 549, 550 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1859,11 +1866,11 @@ 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, 1, 2, 2, 2, 2, 2, 2, 2, + 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1874,26 +1881,26 @@ 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, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 1, 2, - 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, + 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, - 1, 2, 0, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 3 + 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 }; @@ -2574,10 +2581,10 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2578 "util/configparser.c" /* yacc.c:1646 */ +#line 2585 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: + case 205: #line 271 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; @@ -2589,10 +2596,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2593 "util/configparser.c" /* yacc.c:1646 */ +#line 2600 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: + case 215: #line 288 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; @@ -2604,10 +2611,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2608 "util/configparser.c" /* yacc.c:1646 */ +#line 2615 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: + case 224: #line 305 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; @@ -2621,10 +2628,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2625 "util/configparser.c" /* yacc.c:1646 */ +#line 2632 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: + case 234: #line 324 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; @@ -2640,10 +2647,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2644 "util/configparser.c" /* yacc.c:1646 */ +#line 2651 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: + case 245: #line 346 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); @@ -2652,10 +2659,10 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2656 "util/configparser.c" /* yacc.c:1646 */ +#line 2663 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: + case 246: #line 355 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); @@ -2664,10 +2671,10 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2668 "util/configparser.c" /* yacc.c:1646 */ +#line 2675 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: + case 247: #line 364 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); @@ -2678,10 +2685,10 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2682 "util/configparser.c" /* yacc.c:1646 */ +#line 2689 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: + case 248: #line 375 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); @@ -2690,10 +2697,10 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2694 "util/configparser.c" /* yacc.c:1646 */ +#line 2701 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: + case 249: #line 384 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); @@ -2702,10 +2709,10 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2706 "util/configparser.c" /* yacc.c:1646 */ +#line 2713 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: + case 250: #line 393 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); @@ -2714,10 +2721,10 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2718 "util/configparser.c" /* yacc.c:1646 */ +#line 2725 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: + case 251: #line 402 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); @@ -2728,10 +2735,10 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2732 "util/configparser.c" /* yacc.c:1646 */ +#line 2739 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: + case 252: #line 413 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); @@ -2740,10 +2747,10 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2744 "util/configparser.c" /* yacc.c:1646 */ +#line 2751 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: + case 253: #line 422 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2754,10 +2761,10 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2758 "util/configparser.c" /* yacc.c:1646 */ +#line 2765 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: + case 254: #line 433 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2769,10 +2776,10 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2773 "util/configparser.c" /* yacc.c:1646 */ +#line 2780 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: + case 255: #line 446 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2787,10 +2794,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2791 "util/configparser.c" /* yacc.c:1646 */ +#line 2798 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: + case 256: #line 461 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2801,10 +2808,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2805 "util/configparser.c" /* yacc.c:1646 */ +#line 2812 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: + case 257: #line 472 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2821,10 +2828,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2825 "util/configparser.c" /* yacc.c:1646 */ +#line 2832 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: + case 258: #line 489 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2841,10 +2848,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2845 "util/configparser.c" /* yacc.c:1646 */ +#line 2852 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: + case 259: #line 506 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2861,10 +2868,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2865 "util/configparser.c" /* yacc.c:1646 */ +#line 2872 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: + case 260: #line 523 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2881,10 +2888,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2885 "util/configparser.c" /* yacc.c:1646 */ +#line 2892 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: + case 261: #line 540 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2899,10 +2906,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2903 "util/configparser.c" /* yacc.c:1646 */ +#line 2910 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: + case 262: #line 555 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2917,10 +2924,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2921 "util/configparser.c" /* yacc.c:1646 */ +#line 2928 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: + case 263: #line 570 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); @@ -2933,10 +2940,10 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2937 "util/configparser.c" /* yacc.c:1646 */ +#line 2944 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: + case 264: #line 583 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); @@ -2951,10 +2958,10 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2955 "util/configparser.c" /* yacc.c:1646 */ +#line 2962 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: + case 265: #line 598 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); @@ -2963,10 +2970,10 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2967 "util/configparser.c" /* yacc.c:1646 */ +#line 2974 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: + case 266: #line 607 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); @@ -2975,10 +2982,10 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2979 "util/configparser.c" /* yacc.c:1646 */ +#line 2986 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: + case 267: #line 616 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); @@ -2987,10 +2994,10 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2991 "util/configparser.c" /* yacc.c:1646 */ +#line 2998 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: + case 268: #line 625 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); @@ -2999,10 +3006,10 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3003 "util/configparser.c" /* yacc.c:1646 */ +#line 3010 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: + case 269: #line 634 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); @@ -3011,10 +3018,10 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3015 "util/configparser.c" /* yacc.c:1646 */ +#line 3022 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: + case 270: #line 643 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); @@ -3023,10 +3030,10 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3027 "util/configparser.c" /* yacc.c:1646 */ +#line 3034 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: + case 271: #line 652 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); @@ -3035,10 +3042,10 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3039 "util/configparser.c" /* yacc.c:1646 */ +#line 3046 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: + case 272: #line 661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); @@ -3047,10 +3054,10 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3051 "util/configparser.c" /* yacc.c:1646 */ +#line 3058 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: + case 273: #line 670 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); @@ -3059,10 +3066,10 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3063 "util/configparser.c" /* yacc.c:1646 */ +#line 3070 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: + case 274: #line 679 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); @@ -3071,10 +3078,10 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3075 "util/configparser.c" /* yacc.c:1646 */ +#line 3082 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: + case 275: #line 688 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); @@ -3083,10 +3090,10 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3087 "util/configparser.c" /* yacc.c:1646 */ +#line 3094 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: + case 276: #line 697 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); @@ -3095,10 +3102,10 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3099 "util/configparser.c" /* yacc.c:1646 */ +#line 3106 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: + case 277: #line 706 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); @@ -3107,10 +3114,10 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3111 "util/configparser.c" /* yacc.c:1646 */ +#line 3118 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: + case 278: #line 715 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); @@ -3123,10 +3130,10 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3127 "util/configparser.c" /* yacc.c:1646 */ +#line 3134 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: + case 279: #line 728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); @@ -3135,10 +3142,10 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3139 "util/configparser.c" /* yacc.c:1646 */ +#line 3146 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: + case 280: #line 737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); @@ -3151,10 +3158,10 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3155 "util/configparser.c" /* yacc.c:1646 */ +#line 3162 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: + case 281: #line 750 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); @@ -3163,10 +3170,10 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3167 "util/configparser.c" /* yacc.c:1646 */ +#line 3174 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: + case 282: #line 759 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); @@ -3175,10 +3182,10 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3179 "util/configparser.c" /* yacc.c:1646 */ +#line 3186 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: + case 283: #line 768 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); @@ -3187,30 +3194,30 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3191 "util/configparser.c" /* yacc.c:1646 */ +#line 3198 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: + case 284: #line 777 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3201 "util/configparser.c" /* yacc.c:1646 */ +#line 3208 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: + case 285: #line 784 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3211 "util/configparser.c" /* yacc.c:1646 */ +#line 3218 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: + case 286: #line 791 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); @@ -3219,20 +3226,20 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3223 "util/configparser.c" /* yacc.c:1646 */ +#line 3230 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: + case 287: #line 800 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3233 "util/configparser.c" /* yacc.c:1646 */ +#line 3240 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: + case 288: #line 807 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); @@ -3241,10 +3248,10 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3245 "util/configparser.c" /* yacc.c:1646 */ +#line 3252 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: + case 289: #line 816 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); @@ -3252,11 +3259,31 @@ yyreduce: (yyvsp[0].str))) yyerror("out of memory"); } -#line 3256 "util/configparser.c" /* yacc.c:1646 */ +#line 3263 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: + case 290: #line 824 "./util/configparser.y" /* yacc.c:1646 */ + { + 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 3273 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 291: +#line 831 "./util/configparser.y" /* yacc.c:1646 */ + { + 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 3283 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 292: +#line 838 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3264,11 +3291,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3268 "util/configparser.c" /* yacc.c:1646 */ +#line 3295 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 833 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 847 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3276,11 +3303,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3280 "util/configparser.c" /* yacc.c:1646 */ +#line 3307 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 842 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 856 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3293,11 +3320,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3297 "util/configparser.c" /* yacc.c:1646 */ +#line 3324 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 856 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3305,11 +3332,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3309 "util/configparser.c" /* yacc.c:1646 */ +#line 3336 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 865 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 879 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3317,11 +3344,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3321 "util/configparser.c" /* yacc.c:1646 */ +#line 3348 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 874 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 888 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3329,11 +3356,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3333 "util/configparser.c" /* yacc.c:1646 */ +#line 3360 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 883 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 897 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3341,11 +3368,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3345 "util/configparser.c" /* yacc.c:1646 */ +#line 3372 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 892 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 906 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3353,11 +3380,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3357 "util/configparser.c" /* yacc.c:1646 */ +#line 3384 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 901 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 915 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3365,31 +3392,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3369 "util/configparser.c" /* yacc.c:1646 */ +#line 3396 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 910 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 924 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3379 "util/configparser.c" /* yacc.c:1646 */ +#line 3406 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 917 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 931 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3389 "util/configparser.c" /* yacc.c:1646 */ +#line 3416 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 924 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 938 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3414,105 +3441,105 @@ yyreduce: } } } -#line 3418 "util/configparser.c" /* yacc.c:1646 */ +#line 3445 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 950 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 964 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3429 "util/configparser.c" /* yacc.c:1646 */ +#line 3456 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 958 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 972 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3439 "util/configparser.c" /* yacc.c:1646 */ +#line 3466 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 965 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 979 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3449 "util/configparser.c" /* yacc.c:1646 */ +#line 3476 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 972 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 986 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3459 "util/configparser.c" /* yacc.c:1646 */ +#line 3486 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 979 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 993 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3469 "util/configparser.c" /* yacc.c:1646 */ +#line 3496 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 986 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1000 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3480 "util/configparser.c" /* yacc.c:1646 */ +#line 3507 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 994 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1008 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3491 "util/configparser.c" /* yacc.c:1646 */ +#line 3518 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1002 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1016 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3502 "util/configparser.c" /* yacc.c:1646 */ +#line 3529 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1010 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1024 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3512 "util/configparser.c" /* yacc.c:1646 */ +#line 3539 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1017 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1031 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3522,11 +3549,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3526 "util/configparser.c" /* yacc.c:1646 */ +#line 3553 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1028 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1042 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3536,21 +3563,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3540 "util/configparser.c" /* yacc.c:1646 */ +#line 3567 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1039 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1053 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3550 "util/configparser.c" /* yacc.c:1646 */ +#line 3577 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1046 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1060 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3558,11 +3585,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3562 "util/configparser.c" /* yacc.c:1646 */ +#line 3589 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1055 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1069 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3570,11 +3597,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3574 "util/configparser.c" /* yacc.c:1646 */ +#line 3601 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1064 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1078 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3582,53 +3609,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3586 "util/configparser.c" /* yacc.c:1646 */ +#line 3613 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1073 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1087 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3596 "util/configparser.c" /* yacc.c:1646 */ +#line 3623 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1080 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1094 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3606 "util/configparser.c" /* yacc.c:1646 */ +#line 3633 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1087 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1101 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3617 "util/configparser.c" /* yacc.c:1646 */ +#line 3644 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1095 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1109 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3628 "util/configparser.c" /* yacc.c:1646 */ +#line 3655 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1103 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1117 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3637,11 +3664,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3641 "util/configparser.c" /* yacc.c:1646 */ +#line 3668 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1113 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1127 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3650,11 +3677,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3654 "util/configparser.c" /* yacc.c:1646 */ +#line 3681 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1123 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1137 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3663,22 +3690,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3667 "util/configparser.c" /* yacc.c:1646 */ +#line 3694 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1133 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1147 "./util/configparser.y" /* yacc.c:1646 */ { 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 3678 "util/configparser.c" /* yacc.c:1646 */ +#line 3705 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1141 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1155 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3690,11 +3717,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3694 "util/configparser.c" /* yacc.c:1646 */ +#line 3721 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1154 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1168 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3704,22 +3731,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3708 "util/configparser.c" /* yacc.c:1646 */ +#line 3735 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1165 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1179 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3719 "util/configparser.c" /* yacc.c:1646 */ +#line 3746 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1173 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1187 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3731,11 +3758,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3735 "util/configparser.c" /* yacc.c:1646 */ +#line 3762 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1186 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1200 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3743,11 +3770,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3747 "util/configparser.c" /* yacc.c:1646 */ +#line 3774 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1195 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1209 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3755,11 +3782,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3759 "util/configparser.c" /* yacc.c:1646 */ +#line 3786 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1204 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1218 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3767,11 +3794,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3771 "util/configparser.c" /* yacc.c:1646 */ +#line 3798 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1213 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1227 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3780,11 +3807,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3784 "util/configparser.c" /* yacc.c:1646 */ +#line 3811 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1223 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1237 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3793,22 +3820,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3797 "util/configparser.c" /* yacc.c:1646 */ +#line 3824 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1233 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1247 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3808 "util/configparser.c" /* yacc.c:1646 */ +#line 3835 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1241 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1255 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3820,11 +3847,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" /* yacc.c:1646 */ +#line 3851 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1254 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3832,22 +3859,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3836 "util/configparser.c" /* yacc.c:1646 */ +#line 3863 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1263 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1277 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3847 "util/configparser.c" /* yacc.c:1646 */ +#line 3874 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1271 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1285 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3855,22 +3882,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3859 "util/configparser.c" /* yacc.c:1646 */ +#line 3886 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1280 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1294 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3870 "util/configparser.c" /* yacc.c:1646 */ +#line 3897 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1288 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1302 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3882,11 +3909,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3886 "util/configparser.c" /* yacc.c:1646 */ +#line 3913 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1301 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1315 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3894,21 +3921,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3898 "util/configparser.c" /* yacc.c:1646 */ +#line 3925 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1310 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1324 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3908 "util/configparser.c" /* yacc.c:1646 */ +#line 3935 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1317 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1331 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3917,11 +3944,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3921 "util/configparser.c" /* yacc.c:1646 */ +#line 3948 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1327 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1341 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3930,11 +3957,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3934 "util/configparser.c" /* yacc.c:1646 */ +#line 3961 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1337 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1351 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3943,11 +3970,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3947 "util/configparser.c" /* yacc.c:1646 */ +#line 3974 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1347 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1361 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3956,11 +3983,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3960 "util/configparser.c" /* yacc.c:1646 */ +#line 3987 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1357 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1371 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3969,11 +3996,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3973 "util/configparser.c" /* yacc.c:1646 */ +#line 4000 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1367 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1381 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3982,11 +4009,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3986 "util/configparser.c" /* yacc.c:1646 */ +#line 4013 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1377 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1391 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3995,11 +4022,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3999 "util/configparser.c" /* yacc.c:1646 */ +#line 4026 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1387 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1401 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4008,41 +4035,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4012 "util/configparser.c" /* yacc.c:1646 */ +#line 4039 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1397 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1411 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4022 "util/configparser.c" /* yacc.c:1646 */ +#line 4049 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1404 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1418 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4032 "util/configparser.c" /* yacc.c:1646 */ +#line 4059 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1411 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1425 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4042 "util/configparser.c" /* yacc.c:1646 */ +#line 4069 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1418 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1432 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4050,11 +4077,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" /* yacc.c:1646 */ +#line 4081 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1427 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4062,11 +4089,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4066 "util/configparser.c" /* yacc.c:1646 */ +#line 4093 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1436 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1450 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4074,11 +4101,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4078 "util/configparser.c" /* yacc.c:1646 */ +#line 4105 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1445 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1459 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4086,21 +4113,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4090 "util/configparser.c" /* yacc.c:1646 */ +#line 4117 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1454 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1468 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4100 "util/configparser.c" /* yacc.c:1646 */ +#line 4127 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1461 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1475 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4109,11 +4136,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4113 "util/configparser.c" /* yacc.c:1646 */ +#line 4140 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1471 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4132,21 +4159,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4136 "util/configparser.c" /* yacc.c:1646 */ +#line 4163 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1491 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1505 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4146 "util/configparser.c" /* yacc.c:1646 */ +#line 4173 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1498 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1512 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4163,11 +4190,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4167 "util/configparser.c" /* yacc.c:1646 */ +#line 4194 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1516 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1530 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4179,11 +4206,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4183 "util/configparser.c" /* yacc.c:1646 */ +#line 4210 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1529 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1543 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4195,11 +4222,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4199 "util/configparser.c" /* yacc.c:1646 */ +#line 4226 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1542 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1556 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4207,11 +4234,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4211 "util/configparser.c" /* yacc.c:1646 */ +#line 4238 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1551 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1565 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4219,11 +4246,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4223 "util/configparser.c" /* yacc.c:1646 */ +#line 4250 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1560 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1574 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4231,11 +4258,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4235 "util/configparser.c" /* yacc.c:1646 */ +#line 4262 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1569 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1583 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4243,11 +4270,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4247 "util/configparser.c" /* yacc.c:1646 */ +#line 4274 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1578 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4256,11 +4283,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4260 "util/configparser.c" /* yacc.c:1646 */ +#line 4287 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1588 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1602 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4269,11 +4296,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4273 "util/configparser.c" /* yacc.c:1646 */ +#line 4300 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1598 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4283,11 +4310,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4287 "util/configparser.c" /* yacc.c:1646 */ +#line 4314 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1609 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1623 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4295,11 +4322,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4299 "util/configparser.c" /* yacc.c:1646 */ +#line 4326 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1618 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1632 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4307,11 +4334,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4311 "util/configparser.c" /* yacc.c:1646 */ +#line 4338 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1627 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1641 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4319,11 +4346,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4323 "util/configparser.c" /* yacc.c:1646 */ +#line 4350 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1636 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1650 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4331,11 +4358,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4335 "util/configparser.c" /* yacc.c:1646 */ +#line 4362 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1645 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1659 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4347,11 +4374,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4351 "util/configparser.c" /* yacc.c:1646 */ +#line 4378 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1658 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1672 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4363,11 +4390,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4367 "util/configparser.c" /* yacc.c:1646 */ +#line 4394 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1671 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1685 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4375,21 +4402,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4379 "util/configparser.c" /* yacc.c:1646 */ +#line 4406 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1680 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1694 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4389 "util/configparser.c" /* yacc.c:1646 */ +#line 4416 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1687 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1701 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4397,11 +4424,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4401 "util/configparser.c" /* yacc.c:1646 */ +#line 4428 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1696 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1710 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4409,11 +4436,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4413 "util/configparser.c" /* yacc.c:1646 */ +#line 4440 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1705 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1719 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4421,11 +4448,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4425 "util/configparser.c" /* yacc.c:1646 */ +#line 4452 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1714 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4434,22 +4461,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4438 "util/configparser.c" /* yacc.c:1646 */ +#line 4465 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1723 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4449 "util/configparser.c" /* yacc.c:1646 */ +#line 4476 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1731 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1745 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4461,22 +4488,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4465 "util/configparser.c" /* yacc.c:1646 */ +#line 4492 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1744 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1758 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4476 "util/configparser.c" /* yacc.c:1646 */ +#line 4503 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1752 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1766 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4506,21 +4533,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4510 "util/configparser.c" /* yacc.c:1646 */ +#line 4537 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1783 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1797 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4520 "util/configparser.c" /* yacc.c:1646 */ +#line 4547 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1790 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1804 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4534,11 +4561,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4538 "util/configparser.c" /* yacc.c:1646 */ +#line 4565 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1805 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4547,11 +4574,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4551 "util/configparser.c" /* yacc.c:1646 */ +#line 4578 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1815 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1829 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4560,41 +4587,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4564 "util/configparser.c" /* yacc.c:1646 */ +#line 4591 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1825 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1839 "./util/configparser.y" /* yacc.c:1646 */ { 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 4574 "util/configparser.c" /* yacc.c:1646 */ +#line 4601 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1832 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1846 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4584 "util/configparser.c" /* yacc.c:1646 */ +#line 4611 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1839 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1853 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4594 "util/configparser.c" /* yacc.c:1646 */ +#line 4621 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1846 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1860 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4602,22 +4629,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4606 "util/configparser.c" /* yacc.c:1646 */ +#line 4633 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1855 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1869 "./util/configparser.y" /* yacc.c:1646 */ { 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 4617 "util/configparser.c" /* yacc.c:1646 */ +#line 4644 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1863 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1877 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4630,11 +4657,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4634 "util/configparser.c" /* yacc.c:1646 */ +#line 4661 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1877 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1891 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4654,11 +4681,11 @@ yyreduce: } } } -#line 4658 "util/configparser.c" /* yacc.c:1646 */ +#line 4685 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1898 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1912 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4678,11 +4705,11 @@ yyreduce: } } } -#line 4682 "util/configparser.c" /* yacc.c:1646 */ +#line 4709 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1919 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1933 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4693,11 +4720,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4697 "util/configparser.c" /* yacc.c:1646 */ +#line 4724 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1931 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1945 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4708,11 +4735,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4712 "util/configparser.c" /* yacc.c:1646 */ +#line 4739 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1943 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1957 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4723,11 +4750,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4727 "util/configparser.c" /* yacc.c:1646 */ +#line 4754 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1955 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 1969 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4735,11 +4762,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4739 "util/configparser.c" /* yacc.c:1646 */ +#line 4766 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1964 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 1978 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4759,11 +4786,11 @@ yyreduce: } } } -#line 4763 "util/configparser.c" /* yacc.c:1646 */ +#line 4790 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1985 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 1999 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4771,11 +4798,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4775 "util/configparser.c" /* yacc.c:1646 */ +#line 4802 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1995 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 2009 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4783,33 +4810,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4787 "util/configparser.c" /* yacc.c:1646 */ +#line 4814 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 2004 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 2018 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4798 "util/configparser.c" /* yacc.c:1646 */ +#line 4825 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 2012 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 2026 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4809 "util/configparser.c" /* yacc.c:1646 */ +#line 4836 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 2020 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 2034 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4821,11 +4848,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4825 "util/configparser.c" /* yacc.c:1646 */ +#line 4852 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 2033 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2047 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4837,11 +4864,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4841 "util/configparser.c" /* yacc.c:1646 */ +#line 4868 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 2046 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2060 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4855,11 +4882,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4859 "util/configparser.c" /* yacc.c:1646 */ +#line 4886 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2061 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2075 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4873,11 +4900,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4877 "util/configparser.c" /* yacc.c:1646 */ +#line 4904 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2076 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2090 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4885,11 +4912,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4889 "util/configparser.c" /* yacc.c:1646 */ +#line 4916 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2085 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2099 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4897,20 +4924,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4901 "util/configparser.c" /* yacc.c:1646 */ +#line 4928 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2094 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2108 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4910 "util/configparser.c" /* yacc.c:1646 */ +#line 4937 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2100 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2114 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4918,11 +4945,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4922 "util/configparser.c" /* yacc.c:1646 */ +#line 4949 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2109 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2123 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4930,11 +4957,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4934 "util/configparser.c" /* yacc.c:1646 */ +#line 4961 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2118 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2132 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4943,11 +4970,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4947 "util/configparser.c" /* yacc.c:1646 */ +#line 4974 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2128 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2142 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4956,11 +4983,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4960 "util/configparser.c" /* yacc.c:1646 */ +#line 4987 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2138 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2152 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4972,11 +4999,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4976 "util/configparser.c" /* yacc.c:1646 */ +#line 5003 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2151 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2165 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -4988,11 +5015,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4992 "util/configparser.c" /* yacc.c:1646 */ +#line 5019 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2164 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2178 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5003,11 +5030,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5007 "util/configparser.c" /* yacc.c:1646 */ +#line 5034 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2176 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2190 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5020,11 +5047,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5024 "util/configparser.c" /* yacc.c:1646 */ +#line 5051 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2190 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2204 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5035,11 +5062,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5039 "util/configparser.c" /* yacc.c:1646 */ +#line 5066 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2202 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2216 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5052,11 +5079,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5056 "util/configparser.c" /* yacc.c:1646 */ +#line 5083 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2216 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2230 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5065,31 +5092,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5069 "util/configparser.c" /* yacc.c:1646 */ +#line 5096 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2226 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2240 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5079 "util/configparser.c" /* yacc.c:1646 */ +#line 5106 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2233 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2247 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5089 "util/configparser.c" /* yacc.c:1646 */ +#line 5116 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2240 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2254 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5097,11 +5124,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5101 "util/configparser.c" /* yacc.c:1646 */ +#line 5128 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2249 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2263 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5109,11 +5136,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5113 "util/configparser.c" /* yacc.c:1646 */ +#line 5140 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2258 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2272 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5122,11 +5149,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5126 "util/configparser.c" /* yacc.c:1646 */ +#line 5153 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2268 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2282 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5135,11 +5162,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5139 "util/configparser.c" /* yacc.c:1646 */ +#line 5166 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2278 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2292 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5148,31 +5175,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5152 "util/configparser.c" /* yacc.c:1646 */ +#line 5179 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2288 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2302 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5162 "util/configparser.c" /* yacc.c:1646 */ +#line 5189 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2295 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2309 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5172 "util/configparser.c" /* yacc.c:1646 */ +#line 5199 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2302 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2316 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5180,11 +5207,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5184 "util/configparser.c" /* yacc.c:1646 */ +#line 5211 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2311 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2325 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5192,11 +5219,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5196 "util/configparser.c" /* yacc.c:1646 */ +#line 5223 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2320 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2334 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5205,11 +5232,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5209 "util/configparser.c" /* yacc.c:1646 */ +#line 5236 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2330 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2344 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5218,52 +5245,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5222 "util/configparser.c" /* yacc.c:1646 */ +#line 5249 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2340 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2354 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5232 "util/configparser.c" /* yacc.c:1646 */ +#line 5259 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2347 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2361 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5242 "util/configparser.c" /* yacc.c:1646 */ +#line 5269 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2354 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2368 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5252 "util/configparser.c" /* yacc.c:1646 */ +#line 5279 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2361 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2375 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5263 "util/configparser.c" /* yacc.c:1646 */ +#line 5290 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2369 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2383 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5272,11 +5299,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5276 "util/configparser.c" /* yacc.c:1646 */ +#line 5303 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2379 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2393 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5285,11 +5312,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5289 "util/configparser.c" /* yacc.c:1646 */ +#line 5316 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2389 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2403 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5298,11 +5325,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5302 "util/configparser.c" /* yacc.c:1646 */ +#line 5329 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2399 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2413 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5311,11 +5338,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5315 "util/configparser.c" /* yacc.c:1646 */ +#line 5342 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2409 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2423 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5346,11 +5373,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5350 "util/configparser.c" /* yacc.c:1646 */ +#line 5377 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2441 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2455 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5359,33 +5386,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5363 "util/configparser.c" /* yacc.c:1646 */ +#line 5390 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2451 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2465 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5374 "util/configparser.c" /* yacc.c:1646 */ +#line 5401 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2459 "./util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2473 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5385 "util/configparser.c" /* yacc.c:1646 */ +#line 5412 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2467 "./util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2481 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5399,11 +5426,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5403 "util/configparser.c" /* yacc.c:1646 */ +#line 5430 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2482 "./util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2496 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5411,19 +5438,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5415 "util/configparser.c" /* yacc.c:1646 */ +#line 5442 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2491 "./util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2505 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5423 "util/configparser.c" /* yacc.c:1646 */ +#line 5450 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2502 "./util/configparser.y" /* yacc.c:1646 */ + case 467: +#line 2516 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5432,11 +5459,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5436 "util/configparser.c" /* yacc.c:1646 */ +#line 5463 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2512 "./util/configparser.y" /* yacc.c:1646 */ + case 468: +#line 2526 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5444,79 +5471,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5448 "util/configparser.c" /* yacc.c:1646 */ +#line 5475 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2521 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2535 "./util/configparser.y" /* yacc.c:1646 */ { 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 5458 "util/configparser.c" /* yacc.c:1646 */ +#line 5485 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2528 "./util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2542 "./util/configparser.y" /* yacc.c:1646 */ { 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 5468 "util/configparser.c" /* yacc.c:1646 */ +#line 5495 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2535 "./util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2549 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5478 "util/configparser.c" /* yacc.c:1646 */ +#line 5505 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2542 "./util/configparser.y" /* yacc.c:1646 */ + case 472: +#line 2556 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5488 "util/configparser.c" /* yacc.c:1646 */ +#line 5515 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2549 "./util/configparser.y" /* yacc.c:1646 */ + case 473: +#line 2563 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5498 "util/configparser.c" /* yacc.c:1646 */ +#line 5525 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2556 "./util/configparser.y" /* yacc.c:1646 */ + case 474: +#line 2570 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5508 "util/configparser.c" /* yacc.c:1646 */ +#line 5535 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2563 "./util/configparser.y" /* yacc.c:1646 */ + case 475: +#line 2577 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5516 "util/configparser.c" /* yacc.c:1646 */ +#line 5543 "util/configparser.c" /* yacc.c:1646 */ break; - case 486: -#line 2580 "./util/configparser.y" /* yacc.c:1646 */ + case 490: +#line 2594 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5524,21 +5551,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5528 "util/configparser.c" /* yacc.c:1646 */ +#line 5555 "util/configparser.c" /* yacc.c:1646 */ break; - case 487: -#line 2589 "./util/configparser.y" /* yacc.c:1646 */ + case 491: +#line 2603 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5538 "util/configparser.c" /* yacc.c:1646 */ +#line 5565 "util/configparser.c" /* yacc.c:1646 */ break; - case 488: -#line 2596 "./util/configparser.y" /* yacc.c:1646 */ + case 492: +#line 2610 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5546,11 +5573,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5550 "util/configparser.c" /* yacc.c:1646 */ +#line 5577 "util/configparser.c" /* yacc.c:1646 */ break; - case 489: -#line 2605 "./util/configparser.y" /* yacc.c:1646 */ + case 493: +#line 2619 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5558,31 +5585,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5562 "util/configparser.c" /* yacc.c:1646 */ +#line 5589 "util/configparser.c" /* yacc.c:1646 */ break; - case 490: -#line 2614 "./util/configparser.y" /* yacc.c:1646 */ + case 494: +#line 2628 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5572 "util/configparser.c" /* yacc.c:1646 */ +#line 5599 "util/configparser.c" /* yacc.c:1646 */ break; - case 491: -#line 2621 "./util/configparser.y" /* yacc.c:1646 */ + case 495: +#line 2635 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5582 "util/configparser.c" /* yacc.c:1646 */ +#line 5609 "util/configparser.c" /* yacc.c:1646 */ break; - case 492: -#line 2628 "./util/configparser.y" /* yacc.c:1646 */ + case 496: +#line 2642 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5591,11 +5618,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5595 "util/configparser.c" /* yacc.c:1646 */ +#line 5622 "util/configparser.c" /* yacc.c:1646 */ break; - case 493: -#line 2638 "./util/configparser.y" /* yacc.c:1646 */ + case 497: +#line 2652 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5604,11 +5631,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5608 "util/configparser.c" /* yacc.c:1646 */ +#line 5635 "util/configparser.c" /* yacc.c:1646 */ break; - case 494: -#line 2648 "./util/configparser.y" /* yacc.c:1646 */ + case 498: +#line 2662 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5617,11 +5644,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5621 "util/configparser.c" /* yacc.c:1646 */ +#line 5648 "util/configparser.c" /* yacc.c:1646 */ break; - case 495: -#line 2658 "./util/configparser.y" /* yacc.c:1646 */ + case 499: +#line 2672 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5630,11 +5657,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5634 "util/configparser.c" /* yacc.c:1646 */ +#line 5661 "util/configparser.c" /* yacc.c:1646 */ break; - case 496: -#line 2668 "./util/configparser.y" /* yacc.c:1646 */ + case 500: +#line 2682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5643,11 +5670,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5647 "util/configparser.c" /* yacc.c:1646 */ +#line 5674 "util/configparser.c" /* yacc.c:1646 */ break; - case 497: -#line 2678 "./util/configparser.y" /* yacc.c:1646 */ + case 501: +#line 2692 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5656,29 +5683,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5660 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 498: -#line 2688 "./util/configparser.y" /* yacc.c:1646 */ - { - OUTYY(("\nP(python:)\n")); - } -#line 5668 "util/configparser.c" /* yacc.c:1646 */ +#line 5687 "util/configparser.c" /* yacc.c:1646 */ break; case 502: -#line 2697 "./util/configparser.y" /* yacc.c:1646 */ +#line 2702 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("\nP(python:)\n")); + } +#line 5695 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 506: +#line 2711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5678 "util/configparser.c" /* yacc.c:1646 */ +#line 5705 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2703 "./util/configparser.y" /* yacc.c:1646 */ + case 507: +#line 2717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5687,21 +5714,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5691 "util/configparser.c" /* yacc.c:1646 */ +#line 5718 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2713 "./util/configparser.y" /* yacc.c:1646 */ + case 508: +#line 2727 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 5701 "util/configparser.c" /* yacc.c:1646 */ +#line 5728 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2720 "./util/configparser.y" /* yacc.c:1646 */ + case 509: +#line 2734 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5709,30 +5736,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5713 "util/configparser.c" /* yacc.c:1646 */ +#line 5740 "util/configparser.c" /* yacc.c:1646 */ break; - case 506: -#line 2729 "./util/configparser.y" /* yacc.c:1646 */ + case 510: +#line 2743 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5724 "util/configparser.c" /* yacc.c:1646 */ +#line 5751 "util/configparser.c" /* yacc.c:1646 */ break; - case 507: -#line 2737 "./util/configparser.y" /* yacc.c:1646 */ + case 511: +#line 2751 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5732 "util/configparser.c" /* yacc.c:1646 */ +#line 5759 "util/configparser.c" /* yacc.c:1646 */ break; - case 520: -#line 2753 "./util/configparser.y" /* yacc.c:1646 */ + case 524: +#line 2767 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5740,11 +5767,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5744 "util/configparser.c" /* yacc.c:1646 */ +#line 5771 "util/configparser.c" /* yacc.c:1646 */ break; - case 521: -#line 2763 "./util/configparser.y" /* yacc.c:1646 */ + case 525: +#line 2777 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5752,21 +5779,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5756 "util/configparser.c" /* yacc.c:1646 */ +#line 5783 "util/configparser.c" /* yacc.c:1646 */ break; - case 522: -#line 2772 "./util/configparser.y" /* yacc.c:1646 */ + case 526: +#line 2786 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5766 "util/configparser.c" /* yacc.c:1646 */ +#line 5793 "util/configparser.c" /* yacc.c:1646 */ break; - case 523: -#line 2779 "./util/configparser.y" /* yacc.c:1646 */ + case 527: +#line 2793 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5774,21 +5801,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 5778 "util/configparser.c" /* yacc.c:1646 */ +#line 5805 "util/configparser.c" /* yacc.c:1646 */ break; - case 524: -#line 2788 "./util/configparser.y" /* yacc.c:1646 */ + case 528: +#line 2802 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 5788 "util/configparser.c" /* yacc.c:1646 */ +#line 5815 "util/configparser.c" /* yacc.c:1646 */ break; - case 525: -#line 2795 "./util/configparser.y" /* yacc.c:1646 */ + case 529: +#line 2809 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5796,22 +5823,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 5800 "util/configparser.c" /* yacc.c:1646 */ +#line 5827 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2804 "./util/configparser.y" /* yacc.c:1646 */ + case 530: +#line 2818 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5811 "util/configparser.c" /* yacc.c:1646 */ +#line 5838 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2812 "./util/configparser.y" /* yacc.c:1646 */ + case 531: +#line 2826 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5823,22 +5850,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5827 "util/configparser.c" /* yacc.c:1646 */ +#line 5854 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2825 "./util/configparser.y" /* yacc.c:1646 */ + case 532: +#line 2839 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5838 "util/configparser.c" /* yacc.c:1646 */ +#line 5865 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2833 "./util/configparser.y" /* yacc.c:1646 */ + case 533: +#line 2847 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5850,19 +5877,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5854 "util/configparser.c" /* yacc.c:1646 */ +#line 5881 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2846 "./util/configparser.y" /* yacc.c:1646 */ + case 534: +#line 2860 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5862 "util/configparser.c" /* yacc.c:1646 */ +#line 5889 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2856 "./util/configparser.y" /* yacc.c:1646 */ + case 542: +#line 2870 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5876,11 +5903,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5880 "util/configparser.c" /* yacc.c:1646 */ +#line 5907 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2871 "./util/configparser.y" /* yacc.c:1646 */ + case 543: +#line 2885 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5894,11 +5921,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5898 "util/configparser.c" /* yacc.c:1646 */ +#line 5925 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2886 "./util/configparser.y" /* yacc.c:1646 */ + case 544: +#line 2900 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5909,11 +5936,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5913 "util/configparser.c" /* yacc.c:1646 */ +#line 5940 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2898 "./util/configparser.y" /* yacc.c:1646 */ + case 545: +#line 2912 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5927,11 +5954,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5931 "util/configparser.c" /* yacc.c:1646 */ +#line 5958 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2913 "./util/configparser.y" /* yacc.c:1646 */ + case 546: +#line 2927 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5943,11 +5970,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5947 "util/configparser.c" /* yacc.c:1646 */ +#line 5974 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2926 "./util/configparser.y" /* yacc.c:1646 */ + case 547: +#line 2940 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -5957,11 +5984,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 5961 "util/configparser.c" /* yacc.c:1646 */ +#line 5988 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5965 "util/configparser.c" /* yacc.c:1646 */ +#line 5992 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6189,7 +6216,7 @@ yyreturn: #endif return yyresult; } -#line 2936 "./util/configparser.y" /* yacc.c:1906 */ +#line 2950 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 966998589..c02bb6d5f 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -305,7 +305,9 @@ extern int yydebug; VAR_DENY_ANY = 515, VAR_UNKNOWN_SERVER_TIME_LIMIT = 516, VAR_LOG_TAG_QUERYREPLY = 517, - VAR_STREAM_WAIT_SIZE = 518 + VAR_STREAM_WAIT_SIZE = 518, + VAR_TLS_CIPHERS = 519, + VAR_TLS_CIPHERSUITES = 520 }; #endif /* Tokens. */ @@ -570,6 +572,8 @@ extern int yydebug; #define VAR_UNKNOWN_SERVER_TIME_LIMIT 516 #define VAR_LOG_TAG_QUERYREPLY 517 #define VAR_STREAM_WAIT_SIZE 518 +#define VAR_TLS_CIPHERS 519 +#define VAR_TLS_CIPHERSUITES 520 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -580,7 +584,7 @@ union YYSTYPE char* str; -#line 584 "util/configparser.h" /* yacc.c:1909 */ +#line 588 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; From 4c8f334c1543dc7cf9a5b2fec35d5b389016c91a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 08:48:52 +0000 Subject: [PATCH 032/117] another spelling fix. git-svn-id: file:///svn/unbound/trunk@5057 be551aaa-1e26-0410-a405-d3ace91eadb9 --- util/config_file.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/config_file.h b/util/config_file.h index f61fff269..a6b18b8dd 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -122,7 +122,7 @@ struct config_file { struct config_strlist* tls_additional_port; /** TLS ciphers */ char* tls_ciphers; - /** TLS chipersuites (TLSv1.3) */ + /** TLS chiphersuites (TLSv1.3) */ char* tls_ciphersuites; /** outgoing port range number of ports (per thread) */ From 4e59c8344fb576e488b344f813bbc40121ba6cd8 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 08:57:49 +0000 Subject: [PATCH 033/117] - Fix configure to detect SSL_CTX_set_ciphersuites, for better library compatibility when compiling. git-svn-id: file:///svn/unbound/trunk@5058 be551aaa-1e26-0410-a405-d3ace91eadb9 --- config.h.in | 3 +++ configure | 2 +- configure.ac | 2 +- daemon/unbound.c | 2 +- doc/Changelog | 2 ++ 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/config.h.in b/config.h.in index f1853ba38..22403ad2f 100644 --- a/config.h.in +++ b/config.h.in @@ -451,6 +451,9 @@ /* Define if you have the SSL libraries installed. */ #undef HAVE_SSL +/* Define to 1 if you have the `SSL_CTX_set_ciphersuites' function. */ +#undef HAVE_SSL_CTX_SET_CIPHERSUITES + /* Define to 1 if you have the `SSL_CTX_set_security_level' function. */ #undef HAVE_SSL_CTX_SET_SECURITY_LEVEL diff --git a/configure b/configure index 480cc3fbf..bfc57db74 100755 --- a/configure +++ b/configure @@ -18009,7 +18009,7 @@ done # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" -for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host +for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites 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/configure.ac b/configure.ac index d5385d39a..31937d046 100644 --- a/configure.ac +++ b/configure.ac @@ -786,7 +786,7 @@ AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_C # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" -AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host]) +AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites]) LIBS="$BAKLIBS" AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [ diff --git a/daemon/unbound.c b/daemon/unbound.c index 193bb1231..dfbc1238f 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -436,7 +436,7 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, fatal_exit("failed to set tls-cipher %s", cfg->tls_ciphers); } } -#if OPENSSL_VERSION_NUMBER >= 0x1010101 +#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES if(cfg->tls_ciphersuites && cfg->tls_ciphersuites[0]) { if (!SSL_CTX_set_ciphersuites(daemon->listen_sslctx, cfg->tls_ciphersuites)) { fatal_exit("failed to set tls-ciphersuites %s", cfg->tls_ciphersuites); diff --git a/doc/Changelog b/doc/Changelog index 7f2b6dc95..402b7ce30 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites options for unbound.conf. - Fixes for the patch, and man page entry. + - Fix configure to detect SSL_CTX_set_ciphersuites, for better + library compatibility when compiling. 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. From 510606dd1cb77ab3c555b7700a1673416b9864e9 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 09:35:52 +0000 Subject: [PATCH 034/117] - Patch for TLS session resumption from Manabu Sonoda, enable with tls-session-ticket-keys in unbound.conf. git-svn-id: file:///svn/unbound/trunk@5059 be551aaa-1e26-0410-a405-d3ace91eadb9 --- config.h.in | 12 + configure | 2 +- configure.ac | 2 +- daemon/remote.c | 2 + daemon/stats.c | 11 +- daemon/unbound.c | 5 + doc/Changelog | 2 + doc/example.conf.in | 8 + libunbound/unbound.h | 2 + smallapp/unbound-control.c | 1 + testdata/stream_ssl.tdir/stream_ssl.serv.conf | 3 +- util/config_file.c | 3 + util/config_file.h | 2 + util/configlexer.c | 3978 +++++++++-------- util/configlexer.lex | 1 + util/configparser.c | 2245 +++++----- util/configparser.h | 6 +- util/configparser.y | 12 +- util/net_help.c | 110 + util/net_help.h | 21 + 20 files changed, 3328 insertions(+), 3100 deletions(-) diff --git a/config.h.in b/config.h.in index 22403ad2f..545536d63 100644 --- a/config.h.in +++ b/config.h.in @@ -178,6 +178,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_EVENT_H +/* Define to 1 if you have the `EVP_aes_256_cbc' function. */ +#undef HAVE_EVP_AES_256_CBC + /* Define to 1 if you have the `EVP_cleanup' function. */ #undef HAVE_EVP_CLEANUP @@ -187,6 +190,9 @@ /* Define to 1 if you have the `EVP_dss1' function. */ #undef HAVE_EVP_DSS1 +/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */ +#undef HAVE_EVP_ENCRYPTINIT_EX + /* Define to 1 if you have the `EVP_MD_CTX_new' function. */ #undef HAVE_EVP_MD_CTX_NEW @@ -259,6 +265,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_HIREDIS_HIREDIS_H +/* Define to 1 if you have the `HMAC_Init_ex' function. */ +#undef HAVE_HMAC_INIT_EX + /* If you have HMAC_Update */ #undef HAVE_HMAC_UPDATE @@ -457,6 +466,9 @@ /* Define to 1 if you have the `SSL_CTX_set_security_level' function. */ #undef HAVE_SSL_CTX_SET_SECURITY_LEVEL +/* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_cb' function. */ +#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_CB + /* Define to 1 if you have the `SSL_get0_peername' function. */ #undef HAVE_SSL_GET0_PEERNAME diff --git a/configure b/configure index bfc57db74..86c582adc 100755 --- a/configure +++ b/configure @@ -17993,7 +17993,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 +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 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/configure.ac b/configure.ac index 31937d046..fc84e0cd0 100644 --- a/configure.ac +++ b/configure.ac @@ -781,7 +781,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]) +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]) # these check_funcs need -lssl BAKLIBS="$LIBS" diff --git a/daemon/remote.c b/daemon/remote.c index b25cf1798..48efba740 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -973,6 +973,8 @@ print_ext(RES* ssl, struct ub_stats_info* s) (unsigned long)s->svr.qtcp_outgoing)) return 0; if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n", (unsigned long)s->svr.qtls)) return 0; + if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n", + (unsigned long)s->svr.qtls_resume)) return 0; if(!ssl_printf(ssl, "num.query.ipv6"SQ"%lu\n", (unsigned long)s->svr.qipv6)) return 0; /* flags */ diff --git a/daemon/stats.c b/daemon/stats.c index 6b7b03ea5..504b0efcc 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -66,6 +66,9 @@ #ifdef CLIENT_SUBNET #include "edns-subnet/subnetmod.h" #endif +#ifdef HAVE_SSL +#include +#endif /** add timers and the values do not overflow or become negative */ static void @@ -414,6 +417,7 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) total->svr.qtcp += a->svr.qtcp; total->svr.qtcp_outgoing += a->svr.qtcp_outgoing; total->svr.qtls += a->svr.qtls; + total->svr.qtls_resume += a->svr.qtls_resume; total->svr.qipv6 += a->svr.qipv6; total->svr.qbit_QR += a->svr.qbit_QR; total->svr.qbit_AA += a->svr.qbit_AA; @@ -470,8 +474,13 @@ void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c, stats->qopcode[ LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) ]++; if(c->type != comm_udp) { stats->qtcp++; - if(c->ssl != NULL) + if(c->ssl != NULL) { stats->qtls++; +#ifdef HAVE_SSL + if(SSL_session_reused(c->ssl)) + stats->qtls_resume++; +#endif + } } if(repinfo && addr_is_ip6(&repinfo->addr, repinfo->addrlen)) stats->qipv6++; diff --git a/daemon/unbound.c b/daemon/unbound.c index dfbc1238f..c4e39e354 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -443,6 +443,11 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, } } #endif + if(cfg->tls_session_ticket_keys) { + if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys)) { + fatal_exit("could not set session ticket SSL_CTX"); + } + } } if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert))) diff --git a/doc/Changelog b/doc/Changelog index 402b7ce30..856c65781 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,8 @@ - Fixes for the patch, and man page entry. - Fix configure to detect SSL_CTX_set_ciphersuites, for better library compatibility when compiling. + - Patch for TLS session resumption from Manabu Sonoda, + enable with tls-session-ticket-keys in unbound.conf. 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. diff --git a/doc/example.conf.in b/doc/example.conf.in index ca4070917..5603db817 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -720,6 +720,14 @@ 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" + # 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. + # Other keys use to decrypt only. + # requires restart to take effect. + # tls-session-ticket-keys: "path/to/secret_file1" + # tls-session-ticket-keys: "path/to/secret_file2" + # request upstream over TLS (with plain DNS inside the TLS stream). # Default is no. Can be turned on and off with unbound-control. # tls-upstream: no diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 3fa5b13de..3681340f8 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -682,6 +682,8 @@ struct ub_server_stats { long long qtcp_outgoing; /** number of queries over (DNS over) TLS */ long long qtls; + /** number of TLS connection resume */ + long long qtls_resume; /** number of queries over IPv6 */ long long qipv6; /** number of queries with QR bit */ diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index dd00e4940..3ea6aa033 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -330,6 +330,7 @@ static void print_extended(struct ub_stats_info* s) PR_UL("num.query.tcp", s->svr.qtcp); PR_UL("num.query.tcpout", s->svr.qtcp_outgoing); PR_UL("num.query.tls", s->svr.qtls); + PR_UL("num.query.tls_resume", s->svr.qtls_resume); PR_UL("num.query.ipv6", s->svr.qipv6); /* flags */ diff --git a/testdata/stream_ssl.tdir/stream_ssl.serv.conf b/testdata/stream_ssl.tdir/stream_ssl.serv.conf index 9dd169ff7..c77e39fc5 100644 --- a/testdata/stream_ssl.tdir/stream_ssl.serv.conf +++ b/testdata/stream_ssl.tdir/stream_ssl.serv.conf @@ -13,7 +13,8 @@ server: ssl-port: @SERVPORT@ ssl-service-key: "unbound_server.key" ssl-service-pem: "unbound_server.pem" - + tls-session-ticket-keys: "ticket1.dat" + tls-session-ticket-keys: "ticket2.dat" # no other queries should reach here. forward-zone: name: "." diff --git a/util/config_file.c b/util/config_file.c index 30d537273..3e517695e 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -487,6 +487,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST("additional-tls-port:", tls_additional_port) else S_STRLIST("tls-additional-ports:", tls_additional_port) else S_STRLIST("tls-additional-port:", tls_additional_port) + else S_STRLIST("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("interface-automatic:", if_automatic) @@ -926,6 +927,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) else O_YNO(opt, "tls-win-cert", tls_win_cert) else O_LST(opt, "tls-additional-port", tls_additional_port) + else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys) else O_STR(opt, "tls-ciphers", tls_ciphers) else O_STR(opt, "tls-ciphersuites", tls_ciphersuites) else O_YNO(opt, "use-systemd", use_systemd) @@ -1362,6 +1364,7 @@ config_delete(struct config_file* cfg) free(cfg->ssl_service_pem); free(cfg->tls_cert_bundle); config_delstrlist(cfg->tls_additional_port); + config_delstrlist(cfg->tls_session_ticket_keys); free(cfg->tls_ciphers); free(cfg->tls_ciphersuites); free(cfg->log_identity); diff --git a/util/config_file.h b/util/config_file.h index a6b18b8dd..32fb7d30b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -120,6 +120,8 @@ struct config_file { int tls_win_cert; /** additional tls ports */ struct config_strlist* tls_additional_port; + /** secret key used to encrypt and decrypt TLS session ticket -**/ + struct config_strlist* tls_session_ticket_keys; /** TLS ciphers */ char* tls_ciphers; /** TLS chiphersuites (TLSv1.3) */ diff --git a/util/configlexer.c b/util/configlexer.c index 1afa122dc..7b839b3a9 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 290 -#define YY_END_OF_BUFFER 291 +#define YY_NUM_RULES 291 +#define YY_END_OF_BUFFER 292 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,325 +372,328 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2887] = +static yyconst flex_int16_t yy_accept[2905] = { 0, - 1, 1, 272, 272, 276, 276, 280, 280, 284, 284, - 1, 1, 291, 288, 1, 270, 270, 289, 2, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 272, 273, 273, 274, 289, 276, 277, 277, - 278, 289, 283, 280, 281, 281, 282, 289, 284, 285, - 285, 286, 289, 287, 271, 2, 275, 289, 287, 288, - 0, 1, 2, 2, 2, 2, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 1, 1, 273, 273, 277, 277, 281, 281, 285, 285, + 1, 1, 292, 289, 1, 271, 271, 290, 2, 290, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 273, 274, 274, 275, 290, 277, 278, 278, + 279, 290, 284, 281, 282, 282, 283, 290, 285, 286, + 286, 287, 290, 288, 272, 2, 276, 290, 288, 289, + 0, 1, 2, 2, 2, 2, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 272, - 0, 276, 0, 283, 0, 280, 284, 0, 287, 0, - 2, 2, 287, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 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, 273, + 0, 277, 0, 284, 0, 281, 285, 0, 288, 0, + 2, 2, 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, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 287, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 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, + 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, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 113, - 288, 288, 288, 288, 288, 288, 288, 287, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 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, 114, + 289, 289, 289, 289, 289, 289, 289, 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, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 95, 288, 288, 288, 288, 288, 288, 8, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 118, 288, 287, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 96, 289, 289, 289, 289, 289, 289, 8, 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, 119, 289, 288, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 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, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 287, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 53, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 213, 288, 14, 15, 288, 18, - 17, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 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, 288, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 54, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 214, 289, 14, 15, 289, 18, + 17, 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, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 112, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 197, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 3, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 113, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 198, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 3, 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, - 287, 288, 288, 288, 288, 288, 288, 288, 263, 288, - 288, 262, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 279, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 56, 288, 237, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 57, 288, 288, 288, + 289, 288, 289, 289, 289, 289, 289, 289, 289, 264, + 289, 289, 263, 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, 280, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 57, 289, 238, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 58, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 186, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 20, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 137, 288, 288, 279, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 93, - 288, 288, 288, 288, 288, 288, 288, 245, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 187, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 20, + 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, 138, 289, 289, + 280, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 94, 289, 289, 289, 289, 289, 289, 289, 246, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 158, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 136, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 92, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 31, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 159, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 137, 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, 93, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 32, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 54, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 111, 288, 288, 288, 288, 288, 110, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 55, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 159, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 31, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 32, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 55, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 112, 289, 289, 289, 289, 289, + 111, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 56, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 160, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 44, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 228, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 48, 288, 49, - 288, 288, 288, 288, 288, 96, 288, 97, 288, 288, - 288, 288, 94, 288, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 45, 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, 229, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 49, 289, 50, 289, 289, 289, 289, 289, 97, 289, + 98, 289, 289, 289, 289, 95, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 7, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 206, 288, - 288, 288, 288, 139, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 45, 288, 288, 288, 288, 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, 7, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 207, 289, 289, 289, 289, 140, 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, 46, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 178, 288, 177, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 16, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 58, - 288, 288, 288, 288, 288, 288, 288, 288, 185, 288, - 288, 288, 288, 288, 288, 99, 288, 98, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 169, 288, 288, - 288, 288, 288, 288, 288, 288, 119, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 179, 289, 178, 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, + 16, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 59, 289, 289, 289, 289, 289, 289, + 289, 289, 186, 289, 289, 289, 289, 289, 289, 100, + 289, 99, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 170, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 77, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 81, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 52, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 172, 173, - 288, 288, 288, 239, 288, 288, 288, 288, 288, 288, + 289, 120, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 78, 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, 82, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 53, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 173, 174, 289, 289, 289, 240, 289, - 288, 288, 288, 288, 288, 288, 6, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 243, 288, 288, - 288, 264, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 40, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 42, 288, 288, 288, 288, 288, - 288, 288, 288, 165, 288, 288, 288, 114, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 190, 288, - 166, 288, 288, 288, 203, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 6, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 244, 289, 289, 289, 265, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 41, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 43, 289, 289, 289, 289, 289, 289, 289, 289, 166, + 289, 289, 289, 115, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 191, 289, 167, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 43, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 116, 104, 288, 105, 288, 288, 288, 103, 288, - 288, 288, 288, 288, 288, 288, 288, 134, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 227, - 288, 288, 288, 288, 288, 288, 288, 288, 167, 288, - 288, 288, 288, 288, 170, 288, 176, 288, 288, 288, - 288, 288, 202, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 91, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 204, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 44, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 117, 105, 289, + 106, 289, 289, 289, 104, 289, 289, 289, 289, 289, + 289, 289, 289, 135, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 228, 289, 289, 289, 289, + 289, 289, 289, 289, 168, 289, 289, 289, 289, 289, + 171, 289, 177, 289, 289, 289, 289, 289, 203, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 92, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 50, - 288, 288, 288, 25, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 19, 288, 288, 288, 288, 288, 26, - 35, 288, 144, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 66, 68, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 247, 288, 288, - 288, 214, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 106, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 51, 289, 289, 289, 25, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 19, + 289, 289, 289, 289, 289, 289, 26, 35, 289, 145, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 67, + 69, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 248, 289, 289, 289, 215, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 107, 289, 289, - 133, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 258, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 138, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 196, - 288, 288, 288, 288, 288, 288, 288, 288, 267, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 155, 288, - 288, 288, 288, 288, 288, 288, 288, 100, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 150, 288, 160, 288, + 289, 289, 289, 289, 289, 289, 289, 134, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 259, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 139, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 197, 289, 289, 289, + 289, 289, 289, 289, 289, 268, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 156, 289, 289, 289, 289, + 289, 289, 289, 289, 101, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 122, 288, 288, 288, 288, 288, - 87, 288, 288, 288, 288, 188, 288, 288, 288, 288, - 288, 288, 204, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 219, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 115, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 154, 288, 288, 288, - 288, 288, 69, 70, 288, 288, 288, 288, 288, 51, - 288, 288, 288, 288, 288, 76, 161, 288, 179, 288, - 207, 288, 288, 171, 240, 288, 288, 288, 288, 288, - 62, 288, 163, 288, 288, 288, 288, 288, 9, 288, + 289, 289, 289, 289, 151, 289, 161, 289, 289, 289, + 289, 289, 123, 289, 289, 289, 289, 289, 88, 289, + 289, 289, 289, 189, 289, 289, 289, 289, 289, 289, + 205, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 220, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 116, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 155, 289, 289, 289, 289, 289, + 70, 71, 289, 289, 289, 289, 289, 52, 289, 289, + 289, 289, 289, 77, 162, 289, 180, 289, 208, 289, + 289, 172, 241, 289, 289, 289, 289, 289, 63, 289, - 288, 288, 90, 288, 288, 288, 288, 232, 288, 288, - 288, 187, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 153, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 140, 288, 246, - 288, 288, 288, 288, 218, 288, 288, 288, 288, 288, - 288, 288, 288, 198, 288, 288, 288, 288, 238, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 164, 289, 289, 289, 289, 289, 9, 289, 289, 289, + 91, 289, 289, 289, 289, 233, 289, 289, 289, 188, + 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, 154, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 141, 289, 247, 289, + 289, 289, 289, 219, 289, 289, 289, 289, 289, 289, + 289, 289, 199, 289, 289, 289, 289, 239, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 261, 288, 162, 288, 288, 288, 288, - 288, 288, 288, 61, 63, 288, 288, 288, 288, 288, - 288, 288, 89, 288, 288, 288, 288, 230, 288, 288, - 288, 242, 288, 288, 288, 288, 288, 288, 288, 192, - 33, 27, 29, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 34, 288, 28, 30, 288, 288, 288, 288, - 288, 288, 288, 86, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 194, 191, 288, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 262, 289, 163, 289, 289, 289, 289, 289, + 289, 289, 62, 64, 289, 289, 289, 289, 289, 289, + 289, 90, 289, 289, 289, 289, 231, 289, 289, 289, + 243, 289, 289, 289, 289, 289, 289, 289, 193, 33, + 27, 29, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 34, 289, 28, 30, 289, 289, 289, 289, 289, + 289, 289, 289, 87, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 288, 288, 288, 288, 288, 288, 60, 288, 288, - 117, 288, 107, 288, 288, 288, 288, 288, 288, 288, - 288, 135, 13, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 256, 288, 259, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 12, 288, 288, 21, 288, - 288, 288, 236, 288, 288, 288, 244, 288, 64, 288, - 200, 288, 288, 193, 288, 288, 59, 288, 288, 288, - 288, 22, 288, 41, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 149, 148, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 195, 189, 288, 205, + 289, 195, 192, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 61, 289, 289, + 118, 289, 108, 289, 289, 289, 289, 289, 289, 289, + 289, 136, 13, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 257, 289, 260, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 12, 289, 289, 21, 289, + 289, 289, 237, 289, 289, 289, 245, 289, 65, 289, + 201, 289, 289, 194, 289, 289, 60, 289, 289, 289, + 289, 22, 289, 42, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 150, 149, 289, 289, - 288, 288, 248, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 71, 288, 288, - 288, 231, 288, 288, 288, 288, 175, 288, 288, 288, - 288, 199, 288, 288, 288, 288, 288, 288, 288, 288, - 265, 266, 146, 65, 288, 288, 156, 288, 288, 101, - 102, 288, 288, 288, 141, 288, 143, 288, 180, 288, - 288, 288, 288, 147, 288, 288, 208, 288, 288, 288, - 288, 288, 288, 288, 124, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 215, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 196, 190, 289, + 206, 289, 289, 249, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 72, 289, + 289, 289, 232, 289, 289, 289, 289, 176, 289, 289, + 289, 289, 200, 289, 289, 289, 289, 289, 289, 289, + 289, 266, 267, 147, 66, 289, 289, 157, 289, 289, + 102, 103, 289, 289, 289, 289, 142, 289, 144, 289, + 181, 289, 289, 289, 289, 148, 289, 289, 209, 289, + 289, 289, 289, 289, 289, 289, 125, 289, 289, 289, - 23, 288, 241, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 181, 288, 288, 229, 288, 260, - 288, 174, 288, 288, 288, 288, 46, 288, 288, 288, - 288, 4, 288, 288, 123, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 211, 36, 37, 288, 288, 288, 288, 288, 288, 288, - 249, 288, 288, 288, 288, 288, 288, 217, 288, 288, - 288, 184, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 74, 288, 47, 235, 288, 212, 288, 288, 288, - 288, 11, 288, 288, 288, 288, 288, 288, 288, 182, + 289, 289, 289, 289, 289, 289, 289, 289, 216, 289, + 289, 289, 23, 289, 242, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 182, 289, 289, 230, + 289, 261, 289, 175, 289, 289, 289, 289, 47, 289, + 289, 289, 289, 4, 289, 289, 124, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 212, 36, 37, 289, 289, 289, 289, + 289, 289, 289, 250, 289, 289, 289, 289, 289, 289, + 218, 289, 289, 289, 185, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 75, 289, 48, 236, 289, 213, - 78, 288, 39, 288, 288, 288, 288, 288, 288, 288, - 152, 288, 288, 288, 288, 288, 126, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 216, 120, 288, 288, - 108, 109, 288, 288, 288, 80, 84, 79, 288, 72, - 288, 288, 288, 288, 288, 10, 288, 288, 288, 233, - 288, 288, 269, 38, 288, 288, 288, 288, 151, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 85, 83, 288, - 73, 257, 288, 288, 288, 288, 288, 288, 288, 168, - 288, 288, 288, 183, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 11, 289, 289, 289, 289, 289, + 289, 289, 183, 79, 289, 39, 289, 289, 289, 289, + 289, 289, 289, 289, 153, 289, 289, 289, 289, 289, + 127, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 217, 121, 289, 289, 109, 110, 289, 289, 289, 81, + 85, 80, 289, 73, 289, 289, 289, 289, 289, 10, + 289, 289, 289, 234, 289, 289, 270, 38, 289, 289, + 289, 289, 289, 152, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 86, 84, 289, 74, 258, 289, 289, 289, - 288, 142, 67, 288, 288, 288, 288, 288, 250, 288, - 288, 288, 288, 288, 288, 288, 121, 288, 82, 127, - 128, 131, 132, 129, 130, 75, 288, 234, 288, 145, - 288, 288, 288, 288, 288, 210, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 157, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 88, 288, 209, 288, 226, 254, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 5, 288, - 201, 288, 288, 255, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 169, 289, 289, 289, 184, 289, + 289, 289, 289, 289, 289, 289, 289, 143, 68, 289, + 289, 289, 289, 289, 251, 289, 289, 289, 289, 289, + 289, 289, 122, 289, 83, 128, 129, 132, 133, 130, + 131, 76, 289, 235, 289, 289, 146, 289, 289, 289, + 289, 289, 211, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 158, 40, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 89, 289, 210, 289, 227, 255, 289, 289, 289, 289, - 288, 288, 24, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 125, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 164, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 251, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 268, 288, 288, 222, 288, 288, - 288, 288, 288, 252, 288, 288, 288, 288, 288, 288, - 253, 288, 288, 288, 220, 288, 223, 224, 288, 288, - 288, 288, 288, 221, 225, 0 + 289, 289, 289, 289, 289, 289, 5, 289, 202, 289, + 289, 256, 289, 289, 289, 289, 289, 289, 289, 289, + 24, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 126, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 165, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 252, 289, 289, 289, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 289, 269, 289, 289, 223, 289, 289, 289, 289, + 289, 253, 289, 289, 289, 289, 289, 289, 254, 289, + 289, 289, 221, 289, 224, 225, 289, 289, 289, 289, + + 289, 222, 226, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -733,15 +736,15 @@ static yyconst YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2901] = +static yyconst flex_uint16_t yy_base[2919] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2301, 2135, 81, 5642, 5642, 5642, 96, 52, + 90, 112, 2146, 1869, 81, 5674, 5674, 5674, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 176, - 191, 152, 1790, 5642, 5642, 5642, 107, 1586, 5642, 5642, - 5642, 165, 1398, 1331, 5642, 5642, 5642, 211, 1221, 5642, - 5642, 5642, 180, 1211, 5642, 217, 5642, 221, 168, 962, + 191, 152, 1830, 5674, 5674, 5674, 107, 1790, 5674, 5674, + 5674, 165, 1674, 1331, 5674, 5674, 5674, 211, 1221, 5674, + 5674, 5674, 180, 1211, 5674, 217, 5674, 221, 168, 962, 225, 189, 0, 232, 0, 0, 226, 189, 85, 221, 114, 227, 234, 156, 219, 235, 239, 236, 238, 132, 246, 242, 241, 252, 244, 247, 266, 243, 258, 273, @@ -771,7 +774,7 @@ static yyconst flex_uint16_t yy_base[2901] = 693, 708, 702, 723, 712, 724, 713, 705, 694, 719, 732, 729, 735, 737, 738, 739, 740, 741, 742, 750, 745, 748, 755, 758, 762, 766, 746, 772, 747, 776, - 770, 774, 781, 803, 778, 768, 780, 782, 785, 5642, + 770, 774, 781, 803, 778, 768, 780, 782, 785, 5674, 808, 786, 828, 792, 787, 815, 810, 812, 801, 817, 825, 818, 829, 813, 821, 835, 851, 836, 838, 846, 848, 852, 850, 860, 861, 853, 856, 864, 875, 867, @@ -781,13 +784,13 @@ static yyconst flex_uint16_t yy_base[2901] = 937, 938, 946, 943, 942, 944, 949, 953, 955, 959, 952, 945, 961, 966, 970, 967, 975, 977, 960, 983, - 5642, 985, 968, 980, 978, 990, 991, 5642, 993, 992, + 5674, 985, 968, 980, 978, 990, 991, 5674, 993, 992, 994, 1001, 996, 1004, 997, 1000, 1007, 1022, 999, 1006, 1023, 1020, 1021, 783, 1024, 1025, 1027, 1028, 1030, 1031, 1033, 1036, 1053, 1037, 1040, 1038, 1039, 1044, 1046, 1065, 1048, 1051, 1062, 1066, 1077, 1064, 1081, 1068, 1076, 1085, 1083, 1087, 1089, 1090, 1092, 1093, 1094, 1095, 1097, 1098, - 1099, 1103, 5642, 1101, 1111, 1119, 1118, 1105, 1121, 1122, + 1099, 1103, 5674, 1101, 1111, 1119, 1118, 1105, 1121, 1122, 1123, 1124, 1125, 1126, 1131, 1127, 1144, 1134, 1137, 1147, 1145, 1148, 1132, 1150, 1153, 1152, 1154, 1156, 1167, 1162, @@ -803,583 +806,587 @@ static yyconst flex_uint16_t yy_base[2901] = 1354, 1355, 1349, 1359, 1357, 1376, 1361, 1365, 1363, 1366, 1374, 1379, 1380, 1381, 1383, 1384, 1386, 1387, 1389, 1390, - 1391, 1392, 1405, 1395, 1394, 1404, 1407, 1415, 1412, 1416, - 1418, 1408, 1422, 1424, 1425, 1427, 1428, 1430, 1431, 1437, - 1432, 1438, 1442, 1444, 1443, 1449, 1450, 1453, 1445, 5642, - 1455, 1462, 1460, 1461, 1463, 1466, 1467, 1476, 1469, 1471, - 1468, 1472, 1473, 1483, 5642, 1479, 5642, 5642, 1481, 5642, - 5642, 1487, 1484, 1499, 1500, 1506, 1508, 1501, 1503, 1510, - 1511, 1519, 1532, 1517, 1514, 1520, 1516, 1523, 1528, 1482, - 1529, 1525, 1542, 1547, 1545, 1549, 1553, 1546, 1518, 1556, + 1394, 1392, 1407, 1395, 1391, 1404, 1408, 1413, 1414, 1419, + 1420, 1398, 1422, 1423, 1426, 1427, 1430, 1428, 1431, 1435, + 1437, 1438, 1441, 1443, 1444, 1446, 1449, 1453, 1454, 5674, + 1448, 1461, 1459, 1460, 1462, 1466, 1468, 1475, 1470, 1473, + 1471, 1472, 1476, 1483, 5674, 1484, 5674, 5674, 1477, 5674, + 5674, 1481, 1487, 1482, 1500, 1506, 1508, 1501, 1485, 1510, + 1511, 1519, 1532, 1515, 1514, 1522, 1516, 1518, 1526, 1523, + 1527, 1537, 1542, 1548, 1546, 1554, 1545, 1517, 1538, 1556, - 1557, 1559, 1561, 1562, 1564, 1566, 1567, 1565, 1570, 1571, - 1581, 1584, 1573, 1591, 5642, 1587, 1594, 1601, 1597, 1604, - 1596, 1600, 1603, 1605, 1607, 1609, 1608, 1610, 1617, 1612, - 1618, 1628, 1619, 5642, 1623, 1624, 1630, 1627, 1631, 1637, - 1639, 1620, 1640, 1643, 1644, 1646, 1647, 1648, 5642, 1574, - 1650, 1652, 1656, 1654, 1657, 1660, 1662, 1665, 1667, 1664, - 1666, 1668, 1669, 1678, 1674, 1679, 1681, 1682, 1689, 1690, - 1692, 1694, 1698, 1699, 1701, 1702, 1703, 1705, 1706, 1713, - 1711, 1715, 1712, 1720, 1722, 1724, 1717, 1719, 1729, 1730, - 1737, 1741, 1740, 1742, 1733, 1750, 1745, 1748, 1749, 1752, + 1555, 1558, 1561, 1562, 1564, 1566, 1567, 1565, 1570, 1571, + 1578, 1576, 1574, 1590, 5674, 1586, 1594, 1598, 1595, 1602, + 1601, 1597, 1599, 1605, 1606, 1609, 1608, 1610, 1612, 1616, + 1618, 1623, 1619, 5674, 1621, 1622, 1627, 1628, 1633, 1634, + 1635, 1620, 1640, 1642, 1643, 1644, 1646, 1647, 5674, 1585, + 1652, 1648, 1654, 1655, 1660, 1661, 1656, 1663, 1664, 1665, + 1667, 1666, 1668, 1685, 1677, 1682, 1672, 1675, 1690, 1692, + 1693, 1700, 1695, 1701, 1697, 1703, 1702, 1704, 1705, 1707, + 1714, 1709, 1718, 1713, 1725, 1734, 1716, 1721, 1729, 1730, + 1731, 1736, 1738, 1739, 1743, 1744, 1751, 1746, 1748, 1750, - 1754, 1755, 1758, 1763, 1756, 1759, 1761, 1768, 5642, 1769, - 1771, 5642, 1772, 1773, 1795, 1774, 1776, 1781, 1783, 1777, - 1784, 1786, 1789, 1805, 1799, 1815, 1807, 1808, 1817, 1818, - 1819, 1820, 1822, 1825, 1791, 1835, 1836, 1827, 1842, 1844, - 1828, 1840, 1831, 1860, 1841, 1846, 1848, 1845, 1854, 1847, - 1856, 1858, 1863, 1865, 1870, 1867, 5642, 1881, 1873, 1877, - 1878, 1889, 1885, 1887, 1888, 1892, 1893, 1900, 1895, 1898, - 1902, 1899, 1908, 1903, 1912, 1905, 1911, 1910, 1913, 1921, - 5642, 1918, 5642, 1925, 1926, 1928, 1927, 1931, 1929, 1932, - 1933, 1935, 1936, 1942, 1954, 1950, 5642, 1951, 1958, 1955, + 1753, 1755, 1756, 1759, 1764, 1760, 1767, 1769, 1762, 5674, + 1770, 1772, 5674, 1773, 1775, 1797, 1776, 1779, 1780, 1785, + 1778, 1788, 1789, 1791, 1807, 1801, 1817, 1809, 1810, 1819, + 1820, 1821, 1822, 1824, 1827, 1831, 1838, 1839, 1799, 1847, + 1846, 1828, 1829, 1843, 1862, 1844, 1849, 1851, 1852, 1857, + 1855, 1859, 1866, 1853, 1871, 1874, 1875, 5674, 1883, 1884, + 1878, 1885, 1892, 1889, 1891, 1893, 1895, 1896, 1905, 1900, + 1901, 1903, 1906, 1907, 1911, 1913, 1914, 1915, 1916, 1917, + 1933, 5674, 1919, 5674, 1918, 1928, 1930, 1929, 1936, 1937, + 1939, 1940, 1941, 1938, 1950, 1959, 1942, 5674, 1956, 1963, - 1961, 1960, 1953, 1962, 1965, 1966, 1975, 1968, 1976, 1979, - 1971, 1972, 1984, 1983, 1985, 1986, 1993, 5642, 1994, 1987, - 1995, 2002, 1998, 2004, 2006, 2007, 2008, 2011, 2012, 2014, - 2015, 2017, 2022, 2025, 2021, 2023, 2027, 2039, 5642, 2020, - 2035, 2042, 2040, 2044, 2037, 2041, 2047, 2048, 2049, 2052, - 2053, 2054, 2062, 2063, 2061, 2064, 2067, 2058, 2068, 2071, - 2078, 2072, 2075, 2079, 2080, 5642, 2081, 2086, 124, 2087, - 2088, 2092, 2089, 2093, 2096, 2091, 2112, 2113, 2109, 2097, - 2110, 2108, 2116, 2118, 2117, 2119, 2120, 2121, 2124, 5642, - 2126, 2128, 2129, 2131, 2133, 2134, 2144, 5642, 2140, 2145, + 1960, 1965, 1966, 1958, 1967, 1969, 1971, 1976, 1973, 1981, + 1974, 1979, 1983, 1984, 1987, 1990, 1991, 1992, 5674, 1999, + 1994, 2001, 2008, 1998, 2006, 2009, 2011, 2012, 2016, 2017, + 2018, 2019, 2020, 2029, 2030, 2021, 2032, 2035, 2031, 5674, + 2028, 2039, 2047, 2043, 2045, 2042, 2049, 2050, 2052, 2053, + 2054, 2057, 2060, 2061, 2069, 2070, 2062, 2066, 2074, 2067, + 2076, 2079, 2082, 2081, 2083, 2084, 2085, 5674, 2087, 2089, + 124, 2093, 2094, 2096, 2095, 2102, 2098, 2101, 2118, 2119, + 2115, 2114, 2117, 2123, 2124, 2125, 2126, 2127, 2128, 2129, + 2131, 5674, 2105, 2133, 2134, 2136, 2139, 2140, 2143, 5674, - 2148, 2137, 2153, 2152, 2157, 2159, 2161, 2162, 2165, 2168, - 5642, 2172, 2169, 2173, 2175, 2177, 2179, 2181, 2184, 2185, - 2186, 2189, 2188, 2191, 2192, 2193, 2194, 2196, 2202, 2206, - 2197, 2207, 2209, 5642, 2216, 2211, 2220, 2213, 2219, 2222, - 2232, 2223, 2229, 2235, 2236, 2249, 2238, 2230, 2246, 2244, - 2247, 2241, 2259, 2255, 2256, 2263, 2265, 2266, 2270, 2269, - 2274, 2271, 2276, 2277, 2279, 2281, 2284, 2291, 2283, 2290, - 2295, 2297, 2302, 2301, 5642, 2303, 2305, 2306, 2308, 2322, - 2310, 2314, 2323, 2318, 2325, 2326, 2328, 2329, 2330, 2333, - 2331, 2334, 2338, 2341, 2349, 2339, 2351, 2353, 5642, 2356, + 2153, 2156, 2142, 2155, 2163, 2158, 2164, 2165, 2167, 2172, + 2168, 2171, 5674, 2175, 2178, 2180, 2181, 2182, 2184, 2189, + 2191, 2192, 2193, 2196, 2194, 2195, 2199, 2197, 2200, 2204, + 2213, 2203, 2205, 2210, 2214, 5674, 2226, 2215, 2224, 2217, + 2228, 2227, 2241, 2231, 2234, 2236, 2242, 2251, 2244, 2238, + 2252, 2253, 2258, 2262, 2261, 2267, 2268, 2265, 2269, 2275, + 2277, 2278, 2279, 2283, 2281, 2284, 2285, 2286, 2293, 2294, + 2291, 2302, 2300, 2307, 2305, 2310, 5674, 2311, 2312, 2295, + 2317, 2325, 2322, 2323, 2329, 2330, 2331, 2332, 2333, 2334, + 2335, 2338, 2336, 2337, 2342, 2349, 2347, 2353, 2357, 2358, - 2357, 2342, 2358, 2365, 2360, 2369, 2370, 2372, 2366, 2373, - 2375, 2376, 2378, 2379, 2383, 2382, 2384, 2385, 5642, 2389, - 2390, 2393, 2397, 2401, 2402, 2408, 2410, 2400, 2411, 2412, - 2413, 5642, 2420, 2422, 2423, 2427, 2424, 2425, 2429, 2431, - 2432, 5642, 2434, 2435, 2442, 2443, 2439, 5642, 2447, 2446, - 2448, 2438, 2449, 2451, 2455, 2453, 2457, 2459, 2462, 2465, - 2461, 2470, 5642, 2471, 2480, 2476, 2472, 2478, 2483, 2485, - 2487, 2488, 2489, 2492, 2501, 2499, 2498, 2504, 2507, 2508, - 2510, 2511, 2512, 2514, 5642, 2513, 2518, 2519, 2520, 2524, - 2522, 2516, 2531, 2530, 2532, 2538, 2539, 2541, 2543, 2544, + 5674, 2359, 2361, 2363, 2364, 2370, 2365, 2372, 2374, 2376, + 2377, 2378, 2380, 2383, 2384, 2386, 2388, 2391, 2390, 2389, + 5674, 2394, 2395, 2396, 2404, 2405, 2411, 2412, 2414, 2418, + 2402, 2419, 2421, 2422, 5674, 2430, 2432, 2429, 2433, 2431, + 2436, 2437, 2439, 2441, 5674, 2442, 2443, 2450, 2451, 2446, + 5674, 2453, 2449, 2454, 2456, 2457, 2458, 2459, 2464, 2465, + 2467, 2470, 2473, 2477, 2478, 5674, 2479, 2487, 2488, 2480, + 2491, 2482, 2492, 2493, 2497, 2501, 2495, 2510, 2512, 2513, + 2514, 2494, 2517, 2518, 2519, 2521, 2522, 5674, 2515, 2525, + 2527, 2530, 2528, 2534, 2536, 2544, 2539, 2540, 2546, 2541, - 2546, 2545, 2547, 2548, 2558, 2555, 2560, 2561, 2563, 2573, - 2575, 2571, 2576, 5642, 2579, 2580, 2574, 2581, 2586, 2587, - 2585, 2588, 2590, 2593, 2591, 2594, 2595, 2604, 2612, 2597, - 2615, 2605, 2607, 2609, 2620, 2613, 2619, 2622, 2627, 2623, - 2629, 2636, 2631, 2635, 2643, 2633, 2634, 2638, 2642, 2644, - 2645, 2647, 2648, 2651, 2656, 2660, 2664, 2663, 2665, 2670, - 2671, 2674, 5642, 2672, 2673, 2675, 2681, 2683, 2685, 2686, - 2692, 2694, 2687, 2699, 2689, 2706, 2702, 5642, 2703, 5642, - 2704, 2705, 2711, 2714, 2713, 5642, 2716, 5642, 2719, 2724, - 2718, 2720, 5642, 2726, 2727, 2728, 2730, 2735, 2732, 2738, + 2547, 2548, 2549, 2550, 2553, 2561, 2563, 2564, 2566, 2568, + 2569, 2570, 2577, 2582, 2583, 2585, 5674, 2588, 2589, 2591, + 2578, 2580, 2592, 2595, 2597, 2599, 2601, 2603, 2604, 2605, + 2612, 2616, 2613, 2620, 2617, 2622, 2614, 2625, 2626, 2627, + 2628, 2635, 2632, 2631, 2640, 2639, 2638, 2648, 2643, 2649, + 2650, 2651, 2652, 2653, 2656, 2654, 2660, 2661, 2665, 2667, + 2675, 2676, 2677, 2678, 2681, 5674, 2680, 2682, 2684, 2690, + 2693, 2694, 2696, 2698, 2703, 2688, 2695, 2705, 2715, 2711, + 5674, 2712, 5674, 2714, 2716, 2717, 2726, 2719, 5674, 2723, + 5674, 2724, 2729, 2731, 2732, 5674, 2733, 2734, 2737, 2740, - 2739, 2740, 2742, 2743, 2745, 2748, 2751, 2746, 2754, 2752, - 2756, 2762, 2761, 2768, 2763, 2771, 2772, 2773, 2774, 5642, - 2778, 2775, 2780, 2783, 2784, 2786, 2787, 2790, 2789, 2796, - 2791, 2799, 2797, 2805, 2801, 2814, 2810, 2818, 5642, 2813, - 2820, 2815, 2822, 5642, 2821, 2823, 2824, 2831, 2829, 2833, - 2835, 2836, 2837, 2840, 2841, 2842, 2855, 2853, 2854, 2857, - 2844, 2856, 2870, 2866, 2867, 2872, 2880, 2876, 2865, 2875, - 2877, 2879, 2882, 2889, 2890, 2886, 2894, 2887, 2892, 2901, - 2898, 2895, 2902, 2904, 2905, 2906, 2909, 2912, 2914, 2907, - 2911, 2915, 2916, 5642, 2918, 2923, 2928, 2934, 2926, 2930, + 2738, 2742, 2743, 2744, 2745, 2750, 2752, 2756, 2755, 2757, + 2760, 2761, 2764, 2766, 2768, 2772, 2765, 2777, 2773, 2775, + 2783, 2782, 2784, 5674, 2791, 2788, 2793, 2792, 2794, 2796, + 2797, 2799, 2800, 2802, 2805, 2810, 2803, 2816, 2819, 2831, + 2809, 2832, 5674, 2813, 2834, 2817, 2835, 5674, 2837, 2828, + 2838, 2843, 2840, 2830, 2845, 2846, 2850, 2847, 2853, 2858, + 2862, 2863, 2857, 2865, 2855, 2869, 2877, 2874, 2881, 2883, + 2891, 2887, 2875, 2878, 2867, 2889, 2890, 2900, 2901, 2897, + 2904, 2899, 2903, 2906, 2907, 2910, 2911, 2913, 2915, 2916, + 2914, 2919, 2923, 2918, 2920, 2921, 2924, 5674, 2937, 2927, - 2932, 2936, 2938, 2940, 2939, 2948, 2942, 5642, 2949, 5642, - 2945, 2950, 2952, 2962, 2959, 2963, 2965, 2967, 2972, 2973, - 2974, 2975, 2976, 2977, 2978, 2982, 2988, 2989, 2990, 3003, - 2986, 2983, 2991, 2994, 2999, 3004, 5642, 3005, 3007, 3010, - 3012, 3013, 3014, 3017, 3024, 3020, 3021, 3023, 3035, 5642, - 3026, 3037, 3027, 3044, 3052, 3048, 3055, 3050, 5642, 3039, - 3047, 3057, 3054, 3060, 3064, 5642, 3062, 5642, 3065, 3066, - 3068, 3071, 3073, 3074, 3075, 3077, 3079, 3088, 3081, 3072, - 3083, 3090, 3093, 3102, 3095, 3097, 3098, 5642, 3104, 3099, - 3107, 3105, 3115, 3118, 3112, 3108, 5642, 3114, 3125, 3122, + 2934, 2941, 2943, 2946, 2925, 2944, 2948, 2950, 2952, 2954, + 2951, 5674, 2953, 5674, 2955, 2961, 2970, 2972, 2974, 2975, + 2976, 2978, 2981, 2982, 2983, 2984, 2985, 2987, 2990, 2991, + 2996, 2997, 2998, 3012, 2995, 3000, 3002, 3007, 3009, 3014, + 5674, 3016, 3017, 3018, 3022, 3023, 3024, 3027, 3031, 3030, + 3033, 3034, 3045, 5674, 3036, 3053, 3037, 3057, 3064, 3046, + 3065, 3060, 5674, 3049, 3061, 3068, 3063, 3070, 3077, 5674, + 3072, 5674, 3067, 3074, 3081, 3078, 3082, 3083, 3084, 3085, + 3091, 3094, 3103, 3092, 3100, 3101, 3102, 3104, 3113, 3106, + 3108, 3109, 5674, 3111, 3114, 3118, 3125, 3126, 3132, 3129, - 3126, 3127, 3133, 3128, 3130, 3135, 3136, 3134, 3139, 3149, - 3140, 3144, 3145, 3155, 3157, 3164, 5642, 3156, 3158, 3171, - 3169, 3166, 3170, 3173, 3174, 3175, 3177, 3180, 3179, 3181, - 3187, 3185, 3183, 3182, 3186, 3192, 3202, 3209, 3189, 3193, - 3205, 3196, 3211, 3208, 3214, 3218, 3220, 3223, 3226, 3227, - 3229, 3230, 3232, 3233, 3240, 3235, 5642, 3242, 3239, 3247, - 3244, 3245, 3253, 3254, 3262, 3246, 3261, 3263, 3270, 3266, - 5642, 3273, 3268, 3274, 3277, 3275, 3284, 3271, 3279, 3285, - 3292, 3287, 3293, 3289, 3295, 3296, 3301, 3298, 5642, 5642, - 3303, 3304, 3305, 5642, 3307, 3310, 3321, 3312, 3319, 3308, + 3116, 5674, 3133, 3136, 3123, 3140, 3141, 3144, 3145, 3146, + 3149, 3150, 3147, 3151, 3163, 3155, 3154, 3158, 3169, 3170, + 3175, 5674, 3176, 3156, 3183, 3179, 3180, 3182, 3185, 3186, + 3187, 3189, 3190, 3191, 3193, 3198, 3197, 3194, 3195, 3200, + 3201, 3214, 3211, 3203, 3215, 3219, 3218, 3221, 3225, 3226, + 3229, 3231, 3222, 3233, 3236, 3240, 3243, 3245, 3246, 3253, + 3248, 5674, 3255, 3252, 3260, 3256, 3259, 3258, 3265, 3269, + 3271, 3267, 3268, 3278, 3273, 5674, 3280, 3275, 3292, 3286, + 3276, 3301, 3296, 3282, 3277, 3300, 3303, 3306, 3304, 3308, + 3309, 3312, 3313, 5674, 5674, 3315, 3316, 3317, 5674, 3318, - 3320, 3324, 3322, 3325, 3328, 3330, 5642, 3332, 3341, 3336, - 3338, 3349, 3350, 3352, 3334, 3353, 3347, 3342, 3357, 3355, - 3359, 3360, 3363, 3371, 3368, 3366, 3370, 5642, 3372, 3375, - 3376, 5642, 3378, 3379, 3387, 3373, 3385, 3395, 3389, 3402, - 3396, 3398, 3403, 3404, 3406, 3407, 3414, 3410, 3411, 3419, - 3420, 3424, 5642, 3423, 3429, 3431, 3434, 3442, 3443, 3444, - 3413, 3446, 3435, 3454, 5642, 3449, 3452, 3450, 3453, 3463, - 3455, 3464, 3459, 5642, 3460, 3465, 3468, 5642, 3466, 3474, - 3480, 3482, 3467, 3476, 3483, 3485, 3486, 3488, 5642, 3491, - 5642, 3495, 3493, 3499, 5642, 3494, 3501, 3502, 3504, 3508, + 3319, 3328, 3321, 3323, 3331, 3325, 3334, 3335, 3336, 3338, + 3339, 5674, 3342, 3351, 3348, 3349, 3358, 3359, 3363, 3360, + 3357, 3350, 3354, 3367, 3369, 3371, 3374, 3375, 3383, 3378, + 3380, 3381, 5674, 3382, 3384, 3390, 5674, 3387, 3388, 3391, + 3399, 3394, 3407, 3404, 3410, 3396, 3412, 3413, 3414, 3416, + 3418, 3427, 3422, 3423, 3425, 3429, 3431, 5674, 3433, 3434, + 3439, 3441, 3444, 3452, 3453, 3454, 3449, 3455, 3456, 3463, + 5674, 3458, 3461, 3462, 3464, 3472, 3469, 3473, 3471, 5674, + 3476, 3477, 3479, 5674, 3478, 3485, 3493, 3495, 3480, 3503, + 3498, 3482, 3499, 3501, 5674, 3502, 5674, 3506, 3508, 3511, - 3509, 3510, 3512, 3516, 3518, 3519, 3520, 3521, 3523, 3530, - 3526, 5642, 3531, 3529, 3533, 3534, 3541, 3544, 3538, 3546, - 3545, 5642, 5642, 3549, 5642, 3552, 3553, 3554, 5642, 3557, - 3560, 3567, 3562, 3563, 3566, 3576, 3565, 5642, 3571, 3577, - 3580, 3582, 3583, 3584, 3586, 3587, 3585, 3588, 3589, 5642, - 3590, 3593, 3601, 3594, 3602, 3606, 3613, 3607, 5642, 3614, - 3615, 3616, 3620, 3621, 5642, 3623, 5642, 3624, 3626, 3629, - 3631, 3630, 5642, 3636, 3637, 3640, 3643, 3645, 3644, 3647, - 3648, 3654, 3655, 3662, 3658, 3657, 3659, 5642, 3660, 3664, - 3666, 3673, 3661, 3668, 3677, 3680, 3681, 3682, 3687, 3684, + 5674, 3513, 3514, 3516, 3518, 3515, 3522, 3523, 3530, 3519, + 3531, 3532, 3533, 3534, 3536, 3543, 3535, 5674, 3544, 3542, + 3546, 3547, 3553, 3551, 3554, 3559, 3557, 5674, 5674, 3566, + 5674, 3558, 3567, 3568, 5674, 3571, 3573, 3578, 3574, 3576, + 3579, 3589, 3582, 5674, 3585, 3580, 3593, 3595, 3596, 3597, + 3598, 3599, 3601, 3603, 3602, 5674, 3605, 3607, 3613, 3606, + 3614, 3620, 3626, 3615, 5674, 3628, 3630, 3622, 3636, 3637, + 5674, 3629, 5674, 3639, 3642, 3643, 3645, 3646, 5674, 3648, + 3649, 3653, 3654, 3656, 3658, 3659, 3662, 3666, 3668, 3675, + 3671, 3670, 3673, 5674, 3672, 3678, 3686, 3689, 3679, 3677, - 3691, 3693, 3695, 3697, 3699, 3689, 3708, 3703, 3705, 5642, - 3711, 3713, 3714, 5642, 3715, 3700, 3716, 3722, 3724, 3726, - 3727, 3731, 3732, 5642, 3729, 3734, 3730, 3733, 3735, 5642, - 5642, 3748, 5642, 3749, 3736, 3737, 3739, 3751, 3753, 3761, - 3756, 3764, 3758, 3766, 3768, 3769, 3780, 3778, 3781, 3783, - 3784, 3771, 5642, 5642, 3788, 3789, 3785, 3796, 3797, 3793, - 3799, 3806, 3802, 3808, 3811, 3813, 3820, 5642, 3812, 3801, - 3819, 5642, 3803, 3822, 3824, 3825, 3826, 3830, 3829, 3833, - 3834, 3835, 3836, 3837, 3839, 3842, 3844, 3843, 3846, 3853, - 5642, 3854, 3855, 3857, 3858, 3859, 3860, 3865, 3866, 3867, + 3693, 3695, 3696, 3699, 3702, 3704, 3705, 3708, 3703, 3710, + 3711, 3714, 3724, 3717, 3720, 5674, 3721, 3725, 3729, 5674, + 3727, 3728, 3736, 3738, 3731, 3739, 3742, 3741, 3744, 5674, + 3750, 3751, 3746, 3747, 3756, 3760, 5674, 5674, 3764, 5674, + 3765, 3753, 3767, 3754, 3743, 3775, 3774, 3777, 3779, 3780, + 3781, 3787, 3788, 3795, 3796, 3797, 3800, 3674, 3793, 5674, + 5674, 3805, 3806, 3802, 3809, 3814, 3798, 3812, 3822, 3818, + 3819, 3825, 3826, 3833, 5674, 3834, 3817, 3835, 5674, 3828, + 3836, 3829, 3840, 3842, 3843, 3844, 3846, 3850, 3848, 3851, + 3849, 3857, 3858, 3859, 3865, 3862, 3867, 5674, 3868, 3870, - 5642, 3869, 3871, 3872, 3877, 3868, 3880, 3891, 3895, 3897, - 3885, 3889, 3898, 3901, 3904, 3906, 5642, 3907, 3905, 3908, - 3909, 3915, 3917, 3918, 3920, 3922, 3924, 3926, 3927, 3930, - 3934, 3873, 3935, 3931, 3936, 5642, 3938, 3947, 3939, 3949, - 3942, 3950, 3951, 3952, 3962, 3957, 3959, 3963, 3965, 5642, - 3966, 3967, 3969, 3971, 3973, 3970, 3977, 3978, 5642, 3980, - 3981, 3987, 3983, 3985, 3995, 3991, 4002, 3988, 5642, 3998, - 4007, 4009, 3999, 4003, 4005, 4013, 4006, 5642, 4015, 4017, - 4019, 4027, 4023, 4031, 4028, 4030, 4029, 4036, 4037, 4038, - 4039, 4041, 4042, 4051, 4058, 4053, 5642, 4040, 5642, 4055, + 3871, 3872, 3873, 3874, 3879, 3882, 3881, 5674, 3883, 3885, + 3888, 3886, 3887, 3892, 3903, 3907, 3909, 3896, 3910, 3912, + 3915, 3917, 3914, 5674, 3920, 3918, 3921, 3922, 3929, 3931, + 3926, 3933, 3935, 3937, 3939, 3942, 3944, 3949, 3946, 3950, + 3951, 3952, 5674, 3956, 3958, 3955, 3963, 3964, 3966, 3967, + 3968, 3976, 3973, 3978, 3977, 3980, 5674, 3981, 3983, 3985, + 3986, 3988, 3989, 3994, 3995, 5674, 3998, 3991, 4005, 3999, + 4002, 4003, 4007, 4015, 4014, 5674, 4018, 4019, 4020, 4021, + 4022, 4023, 4026, 4027, 5674, 4032, 4033, 4036, 4045, 4029, + 4047, 4043, 4049, 4040, 4042, 4056, 4052, 4057, 4058, 4060, - 4061, 4065, 4066, 4063, 5642, 4068, 4070, 4072, 4073, 4069, - 5642, 4077, 4074, 4076, 4080, 5642, 4079, 4093, 4081, 4087, - 4095, 4096, 5642, 4103, 4104, 4100, 4112, 4114, 4110, 4111, - 4115, 4117, 4113, 4118, 4119, 5642, 4122, 4121, 4131, 4123, - 4132, 4133, 4134, 4136, 4139, 5642, 4140, 4142, 4143, 4144, - 4146, 4147, 4149, 4157, 4155, 4148, 5642, 4156, 4159, 4171, - 4160, 4173, 5642, 5642, 4169, 4176, 4178, 4170, 4179, 5642, - 4182, 4190, 4185, 4188, 4189, 5642, 5642, 4192, 5642, 4193, - 5642, 4194, 4199, 5642, 5642, 4195, 4201, 4202, 4204, 4206, - 5642, 4213, 5642, 4216, 4217, 4203, 4214, 4220, 5642, 4221, + 4062, 4070, 4074, 4071, 5674, 4063, 5674, 4072, 4077, 4079, + 4084, 4080, 5674, 4082, 4087, 4089, 4086, 4090, 5674, 4092, + 4091, 4094, 4096, 5674, 4110, 4106, 4095, 4105, 4119, 4120, + 5674, 4123, 4124, 4125, 4132, 4134, 4136, 4129, 4137, 4133, + 4139, 4097, 4140, 5674, 4142, 4144, 4149, 4150, 4151, 4152, + 4154, 4157, 4161, 5674, 4159, 4162, 4163, 4165, 4166, 4167, + 4168, 4175, 4171, 4176, 5674, 4180, 4181, 4184, 4185, 4112, + 5674, 5674, 4188, 4189, 4192, 4191, 4197, 5674, 4199, 4206, + 4201, 4205, 4207, 5674, 5674, 4209, 5674, 4210, 5674, 4211, + 4214, 5674, 5674, 4215, 4212, 4218, 4219, 4222, 5674, 4227, - 4222, 4224, 5642, 4226, 4237, 4228, 4229, 5642, 4233, 4230, - 4238, 5642, 4241, 4248, 4245, 4252, 4251, 4254, 4255, 4239, - 4258, 4261, 4265, 4267, 4271, 4262, 4272, 4273, 4275, 4279, - 4277, 4281, 4282, 4283, 4285, 4286, 4288, 4292, 4294, 4296, - 4295, 4297, 4304, 4298, 4300, 4311, 4312, 4301, 4308, 4313, - 4314, 4315, 4322, 4316, 4319, 4324, 5642, 4330, 4331, 4332, - 4333, 4335, 4337, 4340, 4344, 4347, 4350, 5642, 4356, 5642, - 4358, 4352, 4354, 4341, 5642, 4361, 4362, 4363, 4364, 4366, - 4367, 4368, 4371, 5642, 4374, 4369, 4379, 4377, 5642, 4383, - 4390, 4378, 4382, 4394, 4393, 4395, 4397, 4398, 4399, 4403, + 5674, 4235, 4231, 4233, 4234, 4236, 5674, 4239, 4240, 4243, + 5674, 4237, 4250, 4245, 4247, 5674, 4254, 4248, 4251, 5674, + 4259, 4265, 4261, 4268, 4255, 4270, 4271, 4272, 4274, 4276, + 4278, 4281, 4283, 4286, 4287, 4288, 4289, 4294, 4291, 4296, + 4297, 4299, 4301, 4302, 4307, 4310, 4311, 4304, 4312, 4313, + 4314, 4318, 4320, 4324, 4327, 4328, 4329, 4330, 4332, 4333, + 4335, 4338, 4342, 4331, 4341, 5674, 4336, 4343, 4347, 4358, + 4348, 4359, 4363, 4353, 4367, 4371, 5674, 4373, 5674, 4375, + 4360, 4369, 4377, 5674, 4379, 4382, 4381, 4384, 4383, 4385, + 4388, 4386, 5674, 4390, 4391, 4393, 4395, 5674, 4398, 4409, - 4405, 4412, 4407, 4409, 4410, 4411, 4417, 4419, 4421, 4420, - 4428, 4430, 4434, 5642, 4423, 5642, 4431, 4435, 4436, 4438, - 4441, 4443, 4445, 5642, 5642, 4447, 4449, 4451, 4444, 4453, - 4456, 4457, 5642, 4460, 4462, 4469, 4465, 5642, 4470, 4472, - 4474, 5642, 4476, 4480, 4477, 4482, 4484, 4483, 4486, 5642, - 5642, 5642, 5642, 4493, 4487, 4498, 4491, 4499, 4501, 4502, - 4506, 4500, 5642, 4508, 5642, 5642, 4513, 4503, 4514, 4516, - 4520, 4521, 4523, 5642, 4522, 4527, 4528, 4525, 4535, 4542, - 4529, 4538, 4526, 4545, 4552, 4548, 4549, 4547, 4551, 4555, - 4558, 5642, 5642, 4559, 4561, 4564, 4571, 4568, 4569, 4581, + 4397, 4401, 4410, 4411, 4412, 4414, 4418, 4416, 4421, 4423, + 4431, 4424, 4428, 4427, 4433, 4429, 4436, 4439, 4445, 4441, + 4448, 4452, 5674, 4453, 5674, 4454, 4455, 4457, 4458, 4459, + 4460, 4462, 5674, 5674, 4465, 4467, 4476, 4468, 4461, 4487, + 4473, 5674, 4482, 4484, 4490, 4491, 5674, 4492, 4493, 4495, + 5674, 4496, 4499, 4500, 4502, 4466, 4503, 4506, 5674, 5674, + 5674, 5674, 4509, 4507, 4517, 4511, 4514, 4521, 4522, 4526, + 4518, 5674, 4535, 5674, 5674, 4523, 4532, 4536, 4538, 4539, + 4540, 4542, 4541, 5674, 4545, 4548, 4552, 4546, 4555, 4563, + 4558, 4564, 4556, 4566, 4573, 4570, 4571, 4568, 4576, 4578, - 4576, 4577, 4578, 4579, 4583, 4584, 4585, 5642, 4588, 4592, - 5642, 4586, 5642, 4596, 4599, 4590, 4600, 4602, 4603, 4605, - 4607, 5642, 5642, 4609, 4610, 4614, 4618, 4615, 4620, 4621, - 4623, 4619, 5642, 4624, 5642, 4625, 4627, 4641, 4626, 4643, - 4648, 4650, 4647, 4649, 4653, 5642, 4652, 4654, 5642, 4655, - 4656, 4660, 5642, 4662, 4665, 4669, 5642, 4672, 5642, 4674, - 5642, 4666, 4682, 5642, 4677, 4678, 5642, 4684, 4688, 4632, - 4680, 5642, 4685, 5642, 4690, 4691, 4695, 4696, 4699, 4700, - 4701, 4702, 4710, 4706, 4708, 5642, 5642, 4715, 4707, 4717, - 4718, 4720, 4727, 4722, 4724, 4732, 5642, 5642, 4729, 5642, + 4580, 5674, 5674, 4582, 4586, 4587, 4594, 4591, 4592, 4604, + 4599, 4600, 4601, 4602, 4606, 4607, 4608, 5674, 4611, 4615, + 5674, 4609, 5674, 4619, 4622, 4613, 4623, 4625, 4626, 4628, + 4630, 5674, 5674, 4632, 4633, 4637, 4641, 4638, 4643, 4644, + 4646, 4642, 5674, 4647, 5674, 4648, 4650, 4664, 4649, 4666, + 4671, 4673, 4670, 4672, 4676, 5674, 4675, 4677, 5674, 4678, + 4679, 4683, 5674, 4685, 4688, 4692, 5674, 4695, 5674, 4697, + 5674, 4689, 4705, 5674, 4700, 4701, 5674, 4707, 4711, 4655, + 4703, 5674, 4708, 5674, 4712, 4714, 4717, 4722, 4715, 4724, + 4725, 4719, 4727, 4734, 4736, 4729, 5674, 5674, 4745, 4731, - 4725, 4736, 5642, 4723, 4740, 4735, 4741, 4742, 4744, 4745, - 4750, 4751, 4754, 4767, 4755, 4757, 4768, 4771, 4775, 4777, - 4763, 4780, 4773, 4758, 4781, 4782, 4783, 5642, 4787, 4788, - 4789, 5642, 4795, 4792, 4797, 4800, 5642, 4809, 4801, 4804, - 4806, 5642, 4798, 4812, 4814, 4817, 4819, 4828, 4820, 4821, - 5642, 5642, 5642, 5642, 4824, 4825, 5642, 4829, 4832, 5642, - 5642, 4831, 4836, 4835, 5642, 4837, 5642, 4839, 5642, 4841, - 4842, 4850, 4848, 5642, 4853, 4861, 5642, 4864, 4867, 4869, - 4870, 4852, 4840, 4871, 5642, 4880, 4873, 4877, 4884, 4875, - 4881, 4885, 4886, 4894, 4887, 4892, 5642, 4889, 4895, 4896, + 4740, 4742, 4743, 4752, 4747, 4751, 4757, 5674, 5674, 4748, + 5674, 4750, 4761, 5674, 4759, 4763, 4765, 4768, 4767, 4769, + 4774, 4771, 4775, 4778, 4793, 4776, 4780, 4790, 4796, 4798, + 4800, 4802, 4803, 4804, 4781, 4805, 4806, 4809, 5674, 4811, + 4812, 4813, 5674, 4817, 4820, 4822, 4823, 5674, 4833, 4825, + 4830, 4835, 5674, 4819, 4841, 4838, 4836, 4843, 4852, 4847, + 4848, 5674, 5674, 5674, 5674, 4850, 4853, 5674, 4854, 4855, + 5674, 5674, 4856, 4859, 4862, 4870, 5674, 4861, 5674, 4865, + 5674, 4869, 4872, 4875, 4878, 5674, 4879, 4888, 5674, 4891, + 4894, 4896, 4897, 4880, 4866, 4898, 5674, 4905, 4902, 4904, - 5642, 4898, 5642, 4900, 4901, 4899, 4906, 4905, 4907, 4909, - 4918, 4911, 4920, 4922, 5642, 4925, 4928, 5642, 4929, 5642, - 4931, 5642, 4932, 4933, 4935, 4934, 5642, 4943, 4936, 4938, - 4940, 5642, 4944, 4946, 5642, 4947, 4953, 4955, 4958, 4962, - 4964, 4965, 4966, 4973, 4968, 4969, 4970, 4972, 4976, 4977, - 5642, 5642, 5642, 4980, 4984, 4991, 4989, 4993, 5000, 4995, - 5642, 4997, 4998, 4999, 5007, 5005, 5009, 5642, 5011, 5006, - 5012, 5642, 5015, 5017, 5019, 5020, 5026, 5028, 5030, 5033, - 5035, 5642, 5037, 5642, 5642, 5038, 5642, 5039, 5041, 5042, - 5043, 5642, 5046, 5048, 5047, 5049, 5051, 5052, 5054, 5642, + 4911, 4883, 4908, 4912, 4913, 4920, 4915, 4919, 5674, 4916, + 4921, 4922, 5674, 4924, 5674, 4925, 4926, 4928, 4934, 4930, + 4933, 4937, 4944, 4927, 4948, 4941, 5674, 4951, 4955, 5674, + 4956, 5674, 4958, 5674, 4959, 4962, 4963, 4961, 5674, 4965, + 4967, 4968, 4969, 5674, 4970, 4972, 5674, 4976, 4973, 4983, + 4985, 4974, 4990, 4992, 4993, 4980, 5004, 4996, 4999, 4997, + 5006, 5007, 5012, 5674, 5674, 5674, 5008, 5001, 5022, 5019, + 5023, 5030, 5014, 5674, 5028, 5029, 5025, 5037, 5035, 5039, + 5674, 5041, 5027, 5036, 5674, 5043, 5048, 5049, 5050, 5051, + 5058, 5060, 5062, 5063, 5674, 5066, 5674, 5674, 5055, 5674, - 5642, 5056, 5642, 5066, 5060, 5075, 5068, 5070, 5073, 5076, - 5642, 5077, 5079, 5082, 5083, 5084, 5642, 5085, 5086, 5088, - 5089, 5092, 5091, 5094, 5096, 5098, 5642, 5642, 5100, 5101, - 5642, 5642, 5116, 5119, 5102, 5642, 5642, 5642, 5122, 5642, - 5124, 5128, 5132, 5136, 5127, 5642, 5138, 5135, 5140, 5642, - 5139, 5142, 5642, 5642, 5143, 5145, 5104, 5146, 5642, 5147, - 5148, 5151, 5156, 5159, 5160, 5162, 5164, 5169, 5172, 5170, - 5171, 5177, 5174, 5178, 5180, 5182, 5184, 5642, 5642, 5188, - 5642, 5642, 5191, 5193, 5197, 5201, 5203, 5205, 5207, 5642, - 5185, 5209, 5210, 5642, 5212, 5213, 5214, 5217, 5215, 5218, + 5067, 5069, 5070, 5071, 5674, 5076, 5073, 5077, 5079, 5081, + 5082, 5078, 5674, 5674, 5085, 5674, 5094, 5090, 5086, 5102, + 5098, 5099, 5104, 5106, 5674, 5105, 5108, 5109, 5112, 5113, + 5674, 5115, 5116, 5117, 5118, 5121, 5120, 5126, 5127, 5129, + 5674, 5674, 5122, 5132, 5674, 5674, 5131, 5141, 5146, 5674, + 5674, 5674, 5152, 5674, 5154, 5158, 5162, 5166, 5157, 5674, + 5168, 5147, 5169, 5674, 5170, 5172, 5674, 5674, 5149, 5173, + 5177, 5176, 5178, 5674, 5179, 5182, 5186, 5189, 5195, 5184, + 5196, 5198, 5206, 5208, 5190, 5203, 5192, 5204, 5211, 5212, + 5220, 5217, 5674, 5674, 5224, 5674, 5674, 5226, 5228, 5230, - 5220, 5642, 5642, 5221, 5222, 5223, 5231, 5224, 5642, 5234, - 5241, 5226, 5238, 5236, 5244, 5245, 5642, 5248, 5642, 5642, - 5642, 5642, 5642, 5642, 5642, 5642, 5247, 5642, 5252, 5642, - 5246, 5256, 5253, 5254, 5258, 5642, 5259, 5260, 5268, 5264, - 5270, 5275, 5267, 5277, 5279, 5278, 5281, 5283, 5284, 5287, - 5642, 5286, 5288, 5290, 5292, 5303, 5309, 5312, 5314, 5299, - 5295, 5316, 5317, 5320, 5304, 5321, 5330, 5323, 5326, 5328, - 5331, 5333, 5642, 5334, 5642, 5335, 5642, 5642, 5339, 5340, - 5343, 5342, 5354, 5358, 5345, 5344, 5347, 5356, 5642, 5360, - 5642, 5362, 5363, 5642, 5364, 5365, 5368, 5369, 5372, 5371, + 5233, 5235, 5237, 5239, 5674, 5240, 5242, 5243, 5674, 5245, + 5247, 5244, 5248, 5250, 5251, 5253, 5255, 5674, 5674, 5256, + 5257, 5258, 5265, 5267, 5674, 5269, 5276, 5273, 5275, 5271, + 5277, 5278, 5674, 5281, 5674, 5674, 5674, 5674, 5674, 5674, + 5674, 5674, 5279, 5674, 5289, 5292, 5674, 5283, 5293, 5297, + 5298, 5286, 5674, 5299, 5303, 5304, 5305, 5308, 5310, 5312, + 5313, 5315, 5319, 5316, 5321, 5317, 5320, 5674, 5674, 5328, + 5324, 5327, 5330, 5346, 5347, 5350, 5352, 5334, 5337, 5355, + 5354, 5356, 5343, 5360, 5369, 5362, 5364, 5366, 5367, 5371, + 5674, 5372, 5674, 5373, 5674, 5674, 5378, 5379, 5374, 5381, - 5373, 5374, 5642, 5375, 5377, 5389, 5381, 5397, 5394, 5398, - 5399, 5400, 5383, 5407, 5406, 5409, 5642, 5410, 5412, 5413, - 5415, 5416, 5423, 5418, 5419, 5421, 5642, 5425, 5427, 5428, - 5426, 5429, 5430, 5440, 5442, 5438, 5642, 5444, 5449, 5446, - 5452, 5454, 5456, 5457, 5458, 5460, 5462, 5291, 5469, 5466, - 5471, 5463, 5474, 5472, 5642, 5476, 5480, 5642, 5481, 5483, - 5484, 5485, 5489, 5642, 5493, 5487, 5494, 5495, 5498, 5500, - 5642, 5502, 5509, 5505, 5642, 5510, 5642, 5642, 5511, 5514, - 5517, 5519, 5521, 5642, 5642, 5642, 5550, 5557, 5564, 5571, - 5578, 88, 5585, 5592, 5599, 5606, 5613, 5620, 5627, 5634 + 5389, 5394, 5385, 5390, 5392, 5396, 5674, 5393, 5674, 5398, + 5397, 5674, 5402, 5404, 5405, 5406, 5407, 5408, 5410, 5416, + 5674, 5414, 5417, 5426, 5418, 5434, 5429, 5433, 5435, 5437, + 5431, 5445, 5441, 5444, 5674, 5447, 5448, 5214, 5449, 5452, + 5459, 5454, 5456, 5457, 5674, 5461, 5463, 5465, 5455, 5462, + 5464, 5478, 5480, 5476, 5674, 5466, 5482, 5484, 5486, 5490, + 5488, 5494, 5495, 5497, 5499, 5329, 5506, 5500, 5502, 5498, + 5508, 5510, 5674, 5512, 5515, 5674, 5516, 5518, 5519, 5520, + 5524, 5674, 5527, 5522, 5528, 5530, 5533, 5535, 5674, 5537, + 5544, 5545, 5674, 5546, 5674, 5674, 5548, 5540, 5549, 5555, + 5557, 5674, 5674, 5674, 5582, 5589, 5596, 5603, 5610, 88, + 5617, 5624, 5631, 5638, 5645, 5652, 5659, 5666 } ; -static yyconst flex_int16_t yy_def[2901] = +static yyconst flex_int16_t yy_def[2919] = { 0, - 2886, 1, 2887, 2887, 2888, 2888, 2889, 2889, 2890, 2890, - 2891, 2891, 2886, 2892, 2886, 2886, 2886, 2886, 2893, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2894, 2886, 2886, 2886, 2894, 2895, 2886, 2886, - 2886, 2895, 2896, 2886, 2886, 2886, 2886, 2896, 2897, 2886, - 2886, 2886, 2897, 2898, 2886, 2899, 2886, 2898, 2898, 2892, - 2892, 2886, 2900, 2893, 2900, 2893, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2904, 1, 2905, 2905, 2906, 2906, 2907, 2907, 2908, 2908, + 2909, 2909, 2904, 2910, 2904, 2904, 2904, 2904, 2911, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2912, 2904, 2904, 2904, 2912, 2913, 2904, 2904, + 2904, 2913, 2914, 2904, 2904, 2904, 2904, 2914, 2915, 2904, + 2904, 2904, 2915, 2916, 2904, 2917, 2904, 2916, 2916, 2910, + 2910, 2904, 2918, 2911, 2918, 2911, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2894, - 2894, 2895, 2895, 2896, 2896, 2886, 2897, 2897, 2898, 2898, - 2899, 2899, 2898, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2912, + 2912, 2913, 2913, 2914, 2914, 2904, 2915, 2915, 2916, 2916, + 2917, 2917, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2898, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2898, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2898, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2916, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2898, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2886, 2892, 2886, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2898, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2910, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2898, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2886, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2886, 2892, 2886, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, + 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2886, - 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2886, 2892, - 2886, 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, + 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2904, 2910, + 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2886, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2886, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, + 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, - 2892, 2892, 2886, 2892, 2892, 2892, 2886, 2892, 2886, 2892, - 2886, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2886, + 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2904, 2910, + 2904, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2910, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2886, 2886, 2886, 2892, 2892, 2886, 2892, 2892, 2886, - 2886, 2892, 2892, 2892, 2886, 2892, 2886, 2892, 2886, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, + 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2904, 2904, 2904, 2904, 2910, 2910, 2904, 2910, 2910, + 2904, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, + 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2886, - 2892, 2886, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2886, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2886, 2892, 2886, 2886, 2892, 2886, 2892, 2892, 2892, - 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, + 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2904, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904, - 2886, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, 2892, - 2886, 2886, 2892, 2892, 2892, 2886, 2886, 2886, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2886, - 2892, 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2886, 2892, - 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2904, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904, + 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, + 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2904, 2910, 2910, + 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2904, 2910, 2904, 2904, 2910, 2910, 2910, - 2892, 2886, 2886, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2892, 2886, 2892, 2886, - 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2886, 2892, 2886, 2892, 2886, 2886, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, - 2886, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, - 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, 2892, - 2892, 2892, 2892, 2892, 2886, 2892, 2892, 2886, 2892, 2892, - 2892, 2892, 2892, 2886, 2892, 2892, 2892, 2892, 2892, 2892, - 2886, 2892, 2892, 2892, 2886, 2892, 2886, 2886, 2892, 2892, - 2892, 2892, 2892, 2886, 2886, 0, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886 + 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, + 2910, 2904, 2904, 0, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904 } ; -static yyconst flex_uint16_t yy_nxt[5683] = +static yyconst flex_uint16_t yy_nxt[5715] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1535,480 +1542,484 @@ static yyconst flex_uint16_t yy_nxt[5683] = 763, 766, 764, 769, 767, 768, 765, 71, 770, 71, 771, 774, 71, 71, 71, 772, 71, 71, 773, 71, - 71, 781, 71, 71, 71, 71, 782, 71, 71, 776, - 775, 145, 777, 780, 778, 784, 779, 71, 71, 785, - 71, 71, 783, 786, 787, 71, 788, 790, 71, 71, - 789, 71, 792, 791, 793, 71, 794, 71, 71, 795, - 71, 71, 796, 150, 71, 71, 797, 802, 801, 799, - 71, 71, 798, 800, 803, 71, 71, 71, 71, 804, - 805, 809, 71, 71, 810, 812, 71, 813, 71, 815, - 806, 807, 811, 71, 71, 71, 71, 808, 817, 71, - 71, 71, 71, 821, 71, 71, 71, 814, 818, 71, - 822, 823, 71, 816, 71, 71, 71, 71, 820, 824, + 71, 782, 71, 71, 71, 71, 783, 71, 71, 776, + 775, 71, 777, 781, 778, 779, 780, 71, 785, 786, + 71, 71, 784, 789, 788, 787, 71, 71, 791, 796, + 790, 792, 71, 71, 793, 71, 71, 794, 795, 71, + 71, 150, 797, 71, 71, 798, 802, 803, 71, 800, + 71, 71, 804, 799, 71, 801, 71, 71, 810, 71, + 806, 71, 71, 811, 805, 813, 71, 71, 816, 807, + 808, 812, 71, 71, 71, 71, 814, 818, 809, 71, + 815, 71, 822, 71, 71, 71, 71, 819, 71, 71, + 71, 823, 817, 824, 71, 71, 71, 71, 71, 821, - 71, 827, 858, 835, 819, 828, 826, 832, 829, 834, - 825, 833, 71, 71, 71, 830, 71, 837, 831, 71, - 838, 71, 839, 71, 71, 840, 844, 71, 836, 71, - 71, 71, 71, 71, 841, 852, 71, 842, 71, 856, - 857, 71, 71, 859, 843, 71, 845, 846, 853, 847, - 867, 854, 848, 860, 855, 71, 861, 849, 71, 71, - 71, 863, 71, 850, 851, 862, 71, 864, 865, 71, - 71, 866, 71, 868, 71, 71, 872, 71, 71, 71, - 71, 875, 871, 71, 71, 881, 71, 71, 879, 917, - 869, 870, 873, 874, 71, 877, 876, 71, 882, 143, + 71, 828, 825, 835, 820, 829, 836, 834, 830, 827, + 826, 837, 833, 71, 71, 831, 842, 838, 832, 71, + 839, 71, 840, 71, 71, 841, 845, 71, 71, 71, + 71, 71, 71, 853, 857, 71, 71, 843, 858, 71, + 71, 860, 867, 859, 844, 71, 846, 847, 854, 848, + 71, 71, 849, 855, 856, 71, 862, 850, 71, 71, + 866, 71, 864, 851, 852, 861, 863, 71, 71, 71, + 868, 71, 865, 869, 71, 71, 873, 71, 71, 71, + 71, 876, 872, 71, 71, 880, 882, 71, 870, 71, + 871, 71, 874, 875, 881, 878, 877, 883, 71, 71, - 71, 885, 880, 883, 71, 884, 878, 71, 886, 71, - 71, 888, 889, 71, 71, 887, 71, 71, 71, 890, - 71, 71, 71, 71, 891, 71, 892, 894, 895, 897, - 71, 71, 71, 71, 898, 900, 71, 71, 893, 899, - 71, 71, 896, 71, 71, 902, 903, 906, 904, 905, - 71, 901, 71, 71, 910, 907, 71, 71, 909, 71, - 71, 71, 918, 71, 915, 71, 908, 71, 913, 71, - 71, 911, 916, 71, 920, 71, 912, 71, 71, 71, - 71, 71, 71, 928, 914, 931, 919, 71, 921, 926, - 922, 71, 71, 923, 71, 71, 932, 924, 925, 929, + 918, 886, 884, 71, 885, 887, 879, 71, 71, 889, + 71, 71, 71, 888, 71, 71, 891, 890, 71, 71, + 892, 71, 71, 71, 898, 71, 893, 895, 896, 71, + 901, 71, 71, 71, 71, 71, 71, 894, 899, 900, + 71, 71, 897, 903, 904, 905, 71, 71, 71, 907, + 906, 902, 908, 71, 911, 71, 71, 71, 910, 71, + 71, 71, 909, 916, 919, 71, 914, 71, 71, 71, + 912, 917, 921, 71, 71, 913, 71, 71, 71, 71, + 71, 71, 920, 915, 929, 71, 927, 145, 71, 922, + 71, 925, 932, 923, 924, 71, 926, 930, 71, 933, - 927, 930, 71, 71, 933, 71, 939, 71, 936, 935, - 938, 71, 71, 934, 71, 71, 71, 937, 71, 71, - 947, 941, 949, 943, 71, 71, 71, 951, 71, 952, - 71, 940, 71, 71, 942, 71, 944, 71, 948, 946, - 945, 953, 71, 71, 955, 950, 71, 957, 960, 954, - 71, 959, 956, 71, 71, 71, 961, 964, 71, 963, - 966, 71, 71, 71, 958, 71, 969, 150, 71, 71, - 968, 71, 71, 962, 71, 971, 71, 972, 965, 975, - 967, 71, 71, 970, 71, 71, 71, 71, 987, 71, - 71, 973, 974, 988, 71, 990, 71, 71, 978, 71, + 931, 928, 936, 71, 935, 71, 71, 934, 71, 937, + 71, 939, 940, 71, 71, 71, 71, 71, 71, 938, + 71, 949, 71, 942, 944, 951, 71, 71, 941, 71, + 943, 71, 953, 955, 71, 945, 950, 947, 71, 946, + 948, 954, 71, 71, 71, 962, 952, 71, 959, 71, + 961, 71, 71, 956, 957, 963, 71, 71, 966, 71, + 968, 71, 958, 71, 71, 960, 71, 971, 150, 71, + 965, 970, 71, 71, 964, 71, 973, 71, 974, 967, + 71, 969, 71, 71, 972, 71, 71, 977, 71, 71, + 989, 71, 71, 71, 978, 975, 990, 992, 71, 980, - 976, 992, 71, 141, 71, 979, 977, 980, 71, 989, - 1008, 981, 71, 982, 993, 991, 994, 983, 71, 984, - 71, 71, 997, 995, 985, 1000, 996, 998, 71, 986, - 71, 71, 71, 71, 999, 71, 1002, 1004, 71, 1011, - 71, 71, 1009, 1010, 71, 1001, 1003, 1005, 71, 71, - 1012, 1013, 1007, 71, 71, 71, 1006, 71, 71, 71, - 71, 71, 1016, 1014, 1025, 1029, 1024, 71, 1028, 71, - 1027, 71, 1015, 71, 1017, 1026, 71, 1030, 71, 1018, - 71, 1019, 1034, 71, 1035, 1031, 71, 1020, 1036, 1037, - 71, 71, 1021, 1022, 71, 1032, 1040, 1033, 71, 1023, + 976, 71, 71, 143, 71, 994, 981, 979, 991, 982, + 71, 1013, 71, 983, 71, 984, 993, 995, 996, 985, + 71, 986, 71, 71, 999, 997, 987, 1002, 998, 1000, + 71, 988, 71, 71, 71, 71, 1001, 71, 1004, 1006, + 71, 71, 71, 141, 71, 1011, 1012, 1003, 1005, 1007, + 1010, 71, 71, 1015, 1009, 1014, 71, 71, 1008, 71, + 71, 1017, 71, 1016, 71, 71, 71, 1027, 71, 1026, + 71, 1030, 71, 1031, 1018, 71, 1019, 1029, 1028, 71, + 1032, 1020, 71, 1021, 71, 1034, 1036, 71, 71, 1022, + 1038, 71, 1037, 1033, 1023, 1024, 71, 71, 71, 1042, - 71, 71, 71, 1041, 1039, 71, 71, 1046, 71, 1038, - 1043, 71, 71, 71, 1044, 71, 71, 1047, 71, 1042, - 1049, 71, 1045, 71, 71, 71, 71, 1054, 1058, 1056, - 1048, 71, 1050, 1055, 71, 1051, 1052, 1053, 71, 71, - 71, 71, 71, 1057, 71, 71, 71, 1059, 71, 71, - 1066, 1067, 1060, 1068, 1063, 71, 1070, 1065, 1069, 1061, - 1062, 1071, 1064, 71, 71, 1074, 71, 71, 71, 1076, - 1075, 71, 1077, 71, 71, 71, 1072, 1078, 71, 71, - 1073, 71, 1084, 1086, 71, 71, 1080, 1079, 71, 71, - 1089, 1082, 71, 1081, 1083, 1087, 71, 71, 71, 71, + 1039, 1025, 71, 1035, 71, 71, 71, 1043, 71, 71, + 1040, 1041, 1048, 71, 71, 1045, 71, 1046, 71, 71, + 71, 1051, 1049, 1044, 71, 1047, 71, 71, 71, 71, + 71, 71, 71, 1050, 1053, 1058, 1056, 1057, 1055, 1052, + 1060, 71, 71, 71, 1054, 1062, 71, 1059, 1061, 71, + 71, 71, 71, 71, 71, 71, 1065, 1068, 1069, 1070, + 1071, 1063, 1064, 71, 1072, 1067, 1073, 1066, 1074, 71, + 1076, 71, 71, 71, 1078, 1077, 71, 1079, 71, 71, + 71, 1080, 71, 1086, 71, 1075, 71, 71, 1088, 71, + 1089, 1082, 71, 1081, 71, 1084, 71, 71, 1083, 1085, - 71, 1085, 1090, 1092, 1093, 1088, 71, 71, 71, 1098, - 1099, 71, 1091, 1095, 1097, 71, 1096, 71, 1094, 71, - 71, 71, 1103, 1102, 71, 71, 1100, 71, 71, 1109, - 71, 1107, 1110, 71, 71, 71, 71, 1101, 71, 1111, - 71, 1112, 1104, 1108, 1105, 1113, 1114, 1106, 71, 1117, - 71, 1115, 71, 71, 71, 71, 1119, 71, 1118, 1120, - 71, 71, 71, 1122, 1123, 71, 71, 71, 1116, 1128, - 1129, 71, 1121, 1124, 71, 71, 71, 71, 1126, 1132, - 71, 71, 1131, 1125, 71, 71, 1127, 1136, 71, 1130, - 1133, 71, 71, 71, 71, 1134, 1135, 1138, 1142, 71, + 71, 1091, 1092, 71, 71, 71, 1087, 71, 1094, 1095, + 1101, 71, 71, 1090, 71, 1100, 1093, 1096, 1097, 71, + 1099, 71, 71, 1098, 71, 71, 1105, 1104, 1102, 71, + 71, 71, 71, 71, 71, 1109, 1111, 1112, 1116, 1113, + 1103, 71, 71, 71, 71, 71, 1110, 1106, 71, 1107, + 1114, 1108, 71, 1115, 1119, 71, 71, 1121, 71, 1117, + 71, 1120, 71, 71, 1122, 71, 71, 71, 1125, 1126, + 71, 1123, 1118, 71, 71, 71, 1131, 1132, 1127, 71, + 71, 1124, 71, 71, 1134, 1129, 1135, 71, 1128, 71, + 1133, 1139, 71, 1130, 71, 71, 71, 71, 71, 1136, - 71, 71, 71, 1137, 71, 71, 71, 1146, 1148, 71, - 71, 1139, 1153, 1141, 1143, 1147, 1144, 1145, 1140, 1150, - 1151, 71, 71, 71, 1149, 71, 71, 1152, 1154, 71, - 71, 71, 71, 71, 71, 1155, 1157, 71, 1163, 71, - 1160, 71, 71, 1156, 71, 1158, 71, 71, 71, 1161, - 71, 1159, 1167, 71, 1173, 1164, 1162, 71, 71, 1166, - 1165, 71, 1169, 1174, 1176, 71, 71, 1168, 1175, 1177, - 71, 1170, 71, 1171, 71, 71, 1172, 1180, 71, 1179, - 1182, 71, 71, 1178, 1185, 71, 71, 1186, 71, 1183, - 71, 1187, 71, 1181, 71, 1189, 1190, 71, 71, 71, + 71, 1145, 71, 1137, 1138, 1141, 71, 71, 71, 71, + 1151, 71, 1140, 1149, 71, 71, 1142, 1166, 71, 1144, + 1146, 1148, 1147, 1143, 1150, 1153, 1154, 71, 71, 1156, + 71, 71, 71, 1155, 1152, 1157, 71, 71, 71, 71, + 71, 71, 71, 1160, 71, 2904, 71, 71, 1163, 71, + 1158, 1159, 71, 71, 1161, 71, 71, 1164, 1170, 1162, + 1167, 1172, 1178, 1165, 1169, 1168, 71, 1176, 71, 71, + 1173, 71, 1174, 1171, 1177, 1175, 71, 71, 71, 1180, + 71, 71, 1179, 1183, 71, 71, 1182, 1188, 71, 1181, + 1185, 71, 1186, 71, 71, 71, 1189, 71, 1190, 1184, - 1184, 71, 71, 1191, 71, 71, 71, 71, 1188, 71, - 71, 1197, 1192, 1193, 1195, 71, 1196, 1198, 1194, 71, - 71, 1202, 71, 1207, 71, 1199, 71, 1201, 1200, 71, - 1204, 1206, 71, 71, 1203, 71, 71, 1211, 1208, 1213, - 1205, 1209, 71, 71, 1214, 71, 1210, 1212, 71, 71, - 1218, 71, 1226, 1227, 71, 1215, 1216, 71, 1228, 71, - 71, 1217, 71, 1230, 1225, 1229, 1231, 1219, 71, 71, - 1220, 1221, 71, 1232, 1233, 1222, 71, 1234, 71, 71, - 1236, 1223, 71, 71, 71, 1224, 1237, 71, 1238, 71, - 71, 1246, 71, 1241, 71, 1243, 71, 71, 1247, 1235, + 1192, 1193, 71, 1187, 71, 71, 71, 71, 71, 71, + 71, 1194, 71, 71, 1191, 1200, 71, 71, 71, 1195, + 1196, 1198, 1199, 71, 1201, 1197, 71, 71, 71, 1202, + 71, 1206, 1205, 1210, 1203, 1204, 1209, 71, 1207, 71, + 71, 71, 1211, 1208, 71, 1212, 1214, 71, 1216, 71, + 1213, 71, 1215, 1217, 71, 71, 1221, 71, 2904, 1230, + 1229, 1219, 1220, 1218, 71, 71, 71, 1231, 1234, 1222, + 1228, 71, 1223, 1224, 71, 71, 1232, 1225, 71, 1237, + 71, 71, 71, 1226, 1233, 1235, 1236, 1227, 71, 1239, + 71, 71, 71, 1240, 71, 1241, 71, 71, 71, 71, - 2886, 1248, 1239, 71, 71, 1240, 1244, 1249, 71, 1242, - 71, 1255, 1245, 1256, 71, 71, 71, 1250, 71, 71, - 1258, 71, 1251, 71, 1252, 1257, 1253, 71, 1254, 1262, - 1261, 71, 1265, 1259, 1263, 71, 71, 1260, 71, 71, - 1267, 71, 71, 71, 71, 1264, 71, 71, 1272, 1270, - 1266, 71, 71, 1274, 71, 71, 1271, 1268, 1269, 1277, - 1273, 1278, 71, 1280, 71, 1275, 71, 1279, 1281, 71, - 71, 71, 1282, 71, 1284, 1283, 1276, 1286, 71, 71, - 1285, 1288, 71, 71, 1289, 71, 71, 1293, 71, 71, - 1290, 71, 71, 1287, 1295, 71, 71, 71, 71, 1299, + 1249, 1250, 1246, 1238, 71, 1244, 71, 71, 71, 1251, + 1243, 1242, 1247, 71, 1245, 71, 1259, 1248, 71, 1252, + 71, 1258, 1253, 71, 71, 71, 1263, 1254, 1261, 1255, + 71, 1256, 1265, 1257, 1260, 71, 71, 1266, 71, 1264, + 1262, 1268, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 1270, 1275, 1273, 71, 1269, 1267, 1277, 1281, + 71, 1274, 71, 1271, 1272, 1276, 71, 1280, 1278, 1283, + 71, 71, 71, 1284, 71, 1285, 71, 71, 71, 1286, + 1279, 1282, 1289, 71, 1291, 71, 1288, 71, 1292, 71, + 71, 71, 1296, 71, 1293, 1287, 71, 71, 1290, 71, - 1291, 1297, 71, 71, 1298, 1301, 71, 1292, 1302, 1294, - 71, 1303, 1296, 71, 71, 71, 1300, 2886, 1304, 1305, - 1306, 71, 1307, 71, 71, 71, 71, 1313, 1308, 1314, - 1310, 1309, 1311, 71, 1316, 71, 71, 71, 71, 1312, - 71, 1315, 71, 1320, 71, 71, 1317, 71, 71, 1324, - 1325, 71, 71, 1319, 1327, 71, 71, 1318, 1326, 71, - 71, 71, 71, 1331, 71, 1321, 71, 1322, 71, 1334, - 71, 1323, 71, 1328, 71, 71, 1332, 1339, 71, 1329, - 1338, 1330, 1333, 71, 71, 71, 1335, 1343, 1341, 71, - 1337, 71, 1344, 71, 1346, 1336, 71, 1340, 71, 1347, + 1298, 71, 71, 71, 71, 1302, 1300, 71, 71, 71, + 1304, 1294, 1295, 1301, 1306, 71, 1297, 71, 71, 1299, + 1303, 2904, 1307, 1305, 71, 71, 1308, 71, 1311, 1309, + 1310, 71, 71, 1313, 71, 71, 1312, 1317, 1314, 1318, + 1320, 1315, 71, 71, 71, 71, 71, 1319, 1316, 71, + 71, 1324, 71, 1321, 71, 71, 71, 1328, 1329, 71, + 1331, 1323, 71, 71, 71, 1330, 71, 71, 1322, 71, + 71, 71, 71, 1338, 1325, 1326, 1332, 71, 71, 1327, + 71, 1335, 1333, 71, 1336, 1343, 71, 1334, 1342, 1337, + 71, 71, 71, 71, 1347, 71, 1345, 1339, 1341, 1348, - 71, 71, 71, 1342, 1354, 71, 1352, 1345, 1356, 1353, - 1348, 71, 71, 1349, 71, 1350, 1357, 71, 1351, 1355, - 71, 71, 1358, 71, 71, 71, 71, 71, 1362, 71, - 1364, 71, 71, 71, 1369, 71, 1359, 71, 1373, 1361, - 1366, 1370, 1363, 71, 71, 71, 1360, 1365, 1372, 1367, - 1368, 71, 71, 1371, 71, 1374, 71, 71, 71, 71, - 71, 71, 1380, 1382, 1375, 1376, 1381, 1377, 71, 1378, - 1384, 71, 1385, 71, 71, 1379, 71, 2886, 1383, 1387, - 1390, 1389, 1391, 1386, 71, 1392, 71, 71, 71, 71, - 1393, 1394, 71, 71, 71, 1388, 1396, 1395, 71, 71, + 71, 71, 1350, 1340, 71, 71, 71, 71, 71, 1352, + 71, 1346, 1351, 1344, 71, 1356, 1358, 1360, 1357, 1349, + 1353, 1354, 1359, 71, 1355, 71, 71, 71, 71, 1361, + 71, 71, 71, 1364, 71, 71, 1366, 1362, 71, 1368, + 71, 71, 1370, 71, 1373, 1374, 1363, 71, 1365, 71, + 1367, 1377, 71, 71, 71, 1369, 1371, 71, 1372, 71, + 71, 71, 71, 71, 1378, 1375, 71, 1384, 1376, 1381, + 1385, 1386, 1379, 1380, 71, 1382, 71, 71, 1389, 71, + 1383, 71, 71, 71, 1394, 1388, 2904, 1391, 1393, 1395, + 71, 71, 1387, 71, 1390, 71, 71, 1396, 71, 1397, - 71, 71, 1401, 71, 71, 1400, 71, 71, 71, 1404, - 71, 1407, 1397, 1398, 1403, 1399, 1408, 71, 71, 1409, - 71, 1405, 71, 1402, 1410, 71, 71, 1406, 71, 1412, - 1411, 1415, 71, 71, 1420, 71, 71, 1413, 1416, 1414, - 71, 1421, 71, 1423, 71, 1417, 71, 71, 71, 71, - 1426, 71, 1418, 1419, 1425, 71, 71, 71, 71, 2886, - 71, 71, 1434, 1424, 71, 1427, 1428, 1435, 1422, 71, - 1429, 1431, 1437, 71, 1430, 1433, 71, 71, 71, 1432, - 1439, 1436, 1438, 71, 71, 71, 71, 71, 71, 1443, - 1446, 1440, 1441, 1444, 71, 1450, 71, 1442, 71, 71, + 1398, 71, 71, 1392, 71, 71, 1399, 1402, 71, 1401, + 71, 1405, 71, 1400, 71, 1404, 71, 71, 71, 1411, + 1403, 1408, 1407, 1413, 1412, 71, 71, 71, 1414, 71, + 71, 1409, 1406, 71, 1416, 71, 1419, 1410, 71, 71, + 71, 71, 1424, 1420, 71, 71, 1415, 1427, 71, 1417, + 1425, 71, 71, 71, 1418, 1430, 71, 1429, 1421, 1423, + 1422, 71, 71, 71, 71, 71, 71, 71, 1438, 71, + 1426, 1428, 2904, 71, 71, 1431, 1439, 1441, 71, 1435, + 71, 1432, 1433, 1434, 1437, 1442, 1440, 1436, 71, 71, + 71, 71, 1443, 71, 71, 71, 1447, 71, 1450, 1445, - 71, 1447, 71, 1451, 1452, 71, 1445, 71, 1448, 1453, - 1449, 1454, 71, 1458, 1459, 71, 71, 71, 71, 71, - 1455, 1464, 1457, 1462, 71, 1463, 71, 71, 1466, 71, - 1456, 71, 71, 71, 1460, 1467, 1468, 71, 1461, 71, - 71, 71, 1471, 71, 1474, 71, 1465, 1469, 71, 1470, - 1473, 71, 71, 71, 1479, 71, 71, 1478, 71, 71, - 1472, 71, 1483, 1475, 71, 71, 1476, 71, 1488, 71, - 1477, 1481, 1486, 1480, 71, 71, 71, 1485, 1484, 1489, - 1487, 71, 1491, 1482, 71, 71, 71, 71, 71, 1494, - 1497, 71, 1496, 71, 1490, 1493, 71, 71, 1492, 71, + 1448, 71, 1444, 71, 1446, 1454, 71, 71, 71, 71, + 1451, 71, 1455, 1449, 1456, 1457, 71, 1452, 71, 1453, + 1458, 1459, 1462, 1463, 71, 71, 1460, 71, 71, 71, + 71, 1467, 71, 1468, 1466, 1470, 71, 71, 1461, 71, + 1471, 1472, 71, 1464, 71, 71, 71, 71, 1465, 1475, + 71, 71, 1469, 71, 1478, 71, 71, 71, 71, 1477, + 1473, 1474, 1482, 71, 1484, 71, 1479, 1476, 71, 71, + 71, 1488, 1483, 71, 71, 1481, 1480, 71, 71, 71, + 1493, 71, 1491, 1485, 1486, 71, 71, 1489, 71, 1494, + 71, 1496, 1490, 1487, 1492, 71, 71, 71, 1495, 1498, - 71, 1504, 71, 71, 71, 1495, 1498, 1499, 1505, 71, - 71, 1502, 71, 1508, 71, 1500, 1501, 1509, 71, 1512, - 1511, 1513, 1506, 71, 1503, 1515, 71, 71, 71, 1507, - 1510, 71, 1517, 71, 71, 71, 71, 71, 1522, 1520, - 1516, 1519, 71, 1514, 71, 1523, 71, 1518, 71, 71, - 71, 1528, 1527, 71, 71, 71, 1524, 71, 1531, 2886, - 1521, 1532, 1534, 1526, 1525, 1529, 71, 71, 71, 71, - 71, 1535, 1539, 1533, 1530, 1537, 1536, 1540, 71, 71, - 71, 1542, 1538, 71, 1541, 71, 1543, 1544, 71, 71, - 71, 1546, 71, 71, 1545, 71, 1551, 1552, 1550, 71, + 1499, 71, 1501, 1502, 71, 71, 71, 71, 1497, 71, + 71, 1509, 71, 71, 1500, 71, 71, 1510, 71, 1503, + 1504, 1507, 71, 71, 1505, 1506, 71, 1513, 1514, 71, + 71, 1516, 71, 1511, 1508, 1512, 1515, 1517, 1518, 1520, + 1521, 71, 1519, 71, 71, 71, 1522, 71, 71, 1523, + 71, 71, 1527, 71, 1524, 1525, 71, 1528, 71, 71, + 71, 1530, 1532, 71, 1533, 1526, 71, 1529, 71, 1539, + 71, 71, 1534, 1531, 1536, 71, 71, 1537, 71, 1541, + 71, 1540, 71, 1542, 1545, 1544, 1535, 71, 71, 1538, + 71, 71, 1546, 1543, 71, 1547, 71, 1548, 1549, 1553, - 71, 1554, 71, 71, 1553, 71, 1547, 71, 71, 1548, - 1556, 71, 1549, 1557, 71, 71, 1558, 71, 71, 71, - 71, 1566, 71, 1555, 71, 71, 1559, 71, 71, 71, - 1571, 71, 1562, 1563, 1564, 1560, 71, 1561, 1565, 71, - 1567, 71, 1569, 71, 1568, 71, 1573, 71, 1574, 71, - 1570, 71, 71, 71, 1575, 71, 1572, 1576, 71, 1581, - 1579, 71, 71, 71, 1589, 71, 1588, 1578, 1580, 1577, - 1582, 1584, 71, 1583, 1590, 71, 71, 1585, 71, 1594, - 71, 1593, 1586, 1587, 1591, 71, 71, 71, 71, 71, - 71, 71, 1597, 1598, 1592, 71, 71, 1606, 1595, 71, + 71, 1551, 71, 71, 71, 1550, 1555, 1556, 1557, 1552, + 71, 1559, 71, 71, 71, 1558, 71, 71, 1562, 71, + 71, 1561, 1554, 71, 71, 1563, 71, 71, 71, 71, + 1571, 71, 71, 71, 71, 1560, 71, 71, 71, 1569, + 71, 1564, 1567, 1568, 1565, 1570, 1566, 71, 1574, 1576, + 71, 1572, 1578, 1573, 71, 1579, 71, 71, 1575, 71, + 1577, 71, 1582, 71, 71, 71, 71, 71, 71, 2904, + 1584, 1580, 1586, 1581, 71, 1583, 1587, 1593, 1585, 1588, + 1589, 1590, 1594, 71, 1595, 71, 1591, 71, 71, 71, + 1599, 71, 1598, 1592, 71, 71, 71, 71, 71, 1596, - 1601, 71, 71, 71, 71, 1596, 1600, 71, 1599, 1609, - 1603, 1605, 71, 1604, 1602, 1607, 71, 71, 71, 1608, - 71, 1611, 1610, 71, 1616, 71, 71, 71, 1612, 1613, - 71, 1620, 1619, 71, 71, 1618, 71, 71, 1615, 71, - 71, 1617, 1627, 1614, 1630, 1621, 1622, 1628, 71, 1623, - 71, 1624, 71, 1629, 1626, 1625, 1632, 71, 1631, 1633, - 71, 71, 1635, 71, 1639, 71, 1634, 71, 71, 1636, - 71, 1643, 1637, 71, 1638, 71, 1641, 71, 71, 71, - 1640, 71, 1642, 1644, 71, 71, 71, 71, 71, 1647, - 71, 1653, 71, 1648, 71, 1655, 71, 1645, 1646, 1649, + 71, 1602, 1603, 71, 71, 1611, 1597, 1600, 71, 71, + 71, 71, 1606, 71, 1601, 71, 1605, 1604, 1608, 1610, + 71, 1609, 71, 1607, 1612, 71, 1614, 71, 1613, 71, + 71, 71, 1621, 1615, 1616, 71, 71, 71, 1617, 1618, + 71, 1625, 1624, 71, 71, 1623, 71, 71, 1620, 71, + 71, 1622, 1632, 1627, 1619, 1626, 1628, 1633, 71, 71, + 1635, 1629, 71, 1634, 1639, 1631, 71, 1630, 1636, 1637, + 71, 1638, 1640, 71, 71, 1644, 71, 71, 71, 1641, + 71, 71, 1642, 71, 1648, 71, 1646, 71, 1643, 1645, + 71, 71, 1647, 1649, 71, 71, 71, 71, 71, 1650, - 1650, 71, 1651, 71, 1652, 1657, 71, 1656, 71, 1661, - 71, 71, 71, 1654, 1658, 71, 1665, 71, 71, 1660, - 71, 71, 1659, 1668, 1667, 71, 1663, 71, 71, 1664, - 1662, 71, 1666, 1669, 1671, 71, 1670, 1674, 71, 71, - 71, 71, 1673, 71, 1672, 1678, 71, 71, 71, 71, - 1680, 1676, 71, 71, 1675, 1679, 1685, 71, 71, 1677, - 1681, 1682, 71, 2886, 1688, 1686, 1683, 1689, 71, 71, - 71, 71, 1684, 1690, 1692, 1687, 1691, 71, 1694, 71, - 1693, 1695, 71, 71, 71, 1697, 71, 71, 71, 1698, - 71, 1696, 71, 71, 71, 71, 71, 1703, 71, 71, + 1653, 1660, 1652, 1658, 71, 71, 1651, 71, 1654, 1655, + 1661, 1656, 1657, 71, 71, 71, 71, 71, 1662, 71, + 1667, 71, 71, 1671, 71, 1659, 71, 71, 2904, 71, + 1666, 71, 1664, 1663, 1665, 1673, 71, 1669, 71, 71, + 1670, 1668, 71, 1674, 1675, 71, 71, 1672, 1680, 71, + 1676, 1677, 1678, 71, 71, 1681, 1684, 71, 71, 71, + 71, 1679, 71, 71, 71, 1682, 1686, 71, 71, 71, + 1691, 71, 1685, 1683, 1687, 1688, 71, 1694, 1699, 1689, + 1692, 1695, 71, 71, 1690, 1693, 1696, 1697, 71, 71, + 1700, 1701, 71, 71, 1698, 71, 71, 1703, 71, 71, - 71, 1707, 71, 1704, 1708, 71, 71, 1699, 1701, 71, - 1700, 1702, 1705, 1706, 1712, 71, 1713, 1709, 71, 1710, - 1711, 71, 71, 1714, 71, 1715, 1718, 71, 1721, 1717, - 1722, 71, 1723, 71, 1716, 1719, 71, 1720, 1725, 71, - 71, 1726, 71, 71, 1729, 71, 71, 1731, 71, 1733, - 1730, 1732, 71, 71, 1735, 71, 1724, 71, 71, 71, - 71, 1737, 2886, 1727, 1728, 1738, 71, 71, 1739, 1740, - 1734, 1741, 1742, 1743, 71, 71, 71, 1747, 1744, 71, - 1749, 71, 1736, 71, 71, 1750, 71, 71, 71, 1752, - 71, 1755, 71, 1756, 1745, 1751, 1746, 71, 71, 1748, + 71, 1704, 71, 71, 71, 1702, 71, 71, 71, 1709, + 71, 71, 1713, 71, 71, 1710, 71, 1714, 1719, 1705, + 1707, 1708, 1706, 1711, 71, 1712, 1718, 71, 71, 1717, + 1715, 71, 71, 1716, 71, 71, 1724, 1720, 71, 71, + 1727, 1728, 71, 1729, 71, 1731, 71, 1721, 1722, 71, + 1732, 1723, 1725, 71, 1726, 1730, 71, 1735, 71, 71, + 1737, 71, 1739, 1736, 1738, 71, 71, 1741, 71, 71, + 1744, 71, 71, 71, 1733, 1743, 1746, 1734, 71, 1745, + 71, 71, 71, 1740, 71, 1753, 71, 1755, 71, 71, + 71, 71, 1756, 71, 1742, 71, 1747, 1748, 1749, 71, - 71, 1753, 71, 1754, 1759, 71, 71, 1761, 71, 71, - 1764, 71, 1757, 1765, 71, 1767, 71, 71, 71, 1758, - 71, 71, 1762, 71, 1773, 71, 1760, 1769, 1772, 1770, - 1763, 1766, 71, 71, 71, 71, 1775, 71, 71, 1779, - 1776, 71, 1768, 71, 1771, 71, 1777, 71, 1783, 71, - 1782, 71, 1789, 1774, 71, 71, 1786, 1787, 1785, 1781, - 71, 1778, 71, 71, 1788, 71, 71, 1780, 71, 1784, - 71, 1794, 71, 71, 1792, 1790, 71, 1797, 1798, 71, - 1791, 71, 1793, 71, 71, 71, 71, 1801, 71, 71, - 1795, 71, 71, 2886, 1800, 1809, 1807, 1810, 71, 1796, + 1751, 1752, 1757, 1750, 1760, 71, 1754, 1758, 1761, 71, + 1759, 1764, 1765, 71, 71, 1763, 71, 71, 1762, 71, + 1767, 71, 71, 1770, 1771, 71, 71, 1773, 71, 71, + 71, 71, 71, 1779, 71, 1778, 71, 1768, 71, 1775, + 1776, 71, 1766, 1769, 71, 1782, 1772, 71, 71, 71, + 1785, 71, 71, 1777, 1774, 71, 1783, 1780, 1789, 1781, + 1788, 71, 71, 71, 71, 1792, 1793, 71, 1787, 1791, + 71, 71, 71, 71, 1784, 1794, 71, 1786, 1795, 1796, + 71, 1790, 71, 1797, 71, 1800, 1798, 71, 71, 1803, + 1804, 71, 1799, 71, 71, 71, 71, 71, 1807, 2904, - 71, 1799, 71, 1802, 1805, 1803, 1808, 1804, 71, 71, - 1806, 71, 1811, 1812, 1814, 71, 71, 71, 1813, 71, - 71, 1821, 1818, 71, 71, 1816, 71, 71, 2886, 1823, - 1815, 1824, 71, 71, 1825, 1817, 71, 71, 1822, 1819, - 1820, 1826, 71, 1830, 71, 1827, 1831, 71, 71, 1832, - 1834, 1835, 1836, 1828, 1833, 71, 71, 71, 1829, 71, - 1838, 1839, 71, 71, 1837, 71, 71, 71, 71, 1841, - 1844, 1846, 71, 71, 1840, 1842, 71, 71, 71, 71, - 71, 71, 1851, 1856, 1847, 1848, 1850, 71, 1852, 71, - 1845, 1843, 1853, 71, 1854, 71, 71, 1849, 71, 71, + 71, 71, 1801, 71, 71, 1813, 1816, 71, 1806, 71, + 1814, 1805, 71, 1802, 1808, 1809, 1810, 71, 1811, 1812, + 71, 1815, 1820, 71, 1817, 71, 71, 71, 1818, 71, + 1821, 71, 1824, 1819, 1827, 71, 71, 1830, 71, 1822, + 71, 1829, 71, 1831, 71, 1823, 71, 71, 1832, 1825, + 1828, 1826, 71, 1837, 71, 1833, 1838, 71, 1834, 1839, + 1841, 1842, 71, 1835, 1840, 71, 71, 71, 71, 71, + 1846, 71, 1836, 1844, 71, 71, 71, 71, 1848, 1851, + 1853, 1845, 71, 1847, 71, 71, 71, 1849, 1843, 71, + 71, 71, 71, 71, 1858, 71, 1854, 1857, 71, 1859, - 1855, 71, 1857, 1858, 71, 1859, 71, 71, 71, 1861, - 1860, 1862, 71, 1864, 71, 71, 1868, 71, 1863, 1865, - 1867, 71, 71, 71, 1872, 71, 1866, 1870, 1871, 71, - 1869, 71, 71, 71, 71, 2886, 71, 1879, 1877, 71, - 1874, 1878, 71, 71, 71, 1881, 71, 71, 1885, 1873, - 1875, 71, 1876, 1880, 71, 1884, 1882, 71, 71, 71, - 1883, 1891, 71, 1886, 1889, 71, 71, 71, 1892, 1887, - 71, 1890, 1888, 71, 1897, 71, 71, 1899, 71, 71, - 71, 1900, 1893, 1894, 71, 1895, 1902, 1896, 1901, 71, - 71, 1903, 1898, 71, 1905, 71, 71, 71, 71, 71, + 1865, 1855, 1850, 2904, 1852, 1860, 71, 1861, 71, 1856, + 1863, 71, 71, 1862, 71, 71, 71, 1864, 1866, 71, + 1868, 71, 1869, 1867, 71, 1871, 71, 71, 71, 71, + 1875, 71, 71, 1870, 1874, 71, 71, 1876, 1872, 1873, + 1877, 1878, 1879, 71, 71, 71, 71, 71, 71, 71, + 1886, 1884, 1880, 1881, 1885, 71, 71, 71, 1888, 71, + 71, 1892, 1887, 1882, 71, 1883, 71, 71, 1891, 1889, + 71, 71, 71, 1890, 1899, 1893, 1894, 1896, 1898, 71, + 71, 71, 2904, 1897, 71, 1904, 71, 71, 1895, 71, + 1906, 71, 71, 71, 1907, 71, 1900, 1901, 71, 1902, - 71, 71, 71, 71, 1906, 2886, 71, 71, 1913, 1908, - 1904, 1909, 1910, 1917, 71, 71, 1912, 1907, 1916, 71, - 71, 1914, 1920, 1915, 1911, 1918, 71, 71, 71, 71, - 1924, 1921, 1923, 71, 71, 1919, 71, 71, 1926, 71, - 1922, 1927, 71, 71, 71, 1928, 1932, 1925, 1930, 71, - 71, 1934, 1936, 71, 1931, 1929, 71, 71, 71, 1939, - 71, 71, 1933, 1938, 1935, 1940, 1941, 71, 71, 1944, - 71, 71, 71, 71, 71, 71, 1945, 71, 1950, 71, - 1947, 71, 1937, 1946, 1954, 1942, 71, 1951, 1943, 1952, - 71, 1949, 1948, 71, 71, 71, 1956, 71, 1955, 1959, + 1903, 1908, 71, 1909, 1905, 1910, 71, 1912, 71, 71, + 71, 71, 71, 1911, 71, 71, 71, 1913, 71, 71, + 71, 1920, 1915, 1916, 1917, 1924, 71, 71, 71, 2904, + 1914, 1919, 1923, 71, 1921, 71, 1927, 1925, 1922, 71, + 1918, 71, 71, 71, 1928, 1931, 1930, 1926, 1929, 71, + 71, 1935, 71, 1932, 1933, 71, 71, 1934, 71, 71, + 1939, 71, 71, 1941, 1937, 1943, 71, 71, 1938, 71, + 1936, 71, 71, 1946, 1945, 71, 1942, 1947, 1940, 71, + 1948, 71, 1951, 71, 71, 71, 71, 71, 71, 1952, + 71, 71, 71, 1944, 1954, 2017, 1953, 1949, 1957, 71, - 71, 1953, 71, 1957, 71, 1961, 71, 1962, 71, 1960, - 71, 1958, 71, 71, 1966, 1968, 71, 1963, 71, 1964, - 1969, 71, 1965, 1967, 71, 1970, 71, 71, 71, 71, - 1971, 1973, 1974, 1976, 1978, 71, 1972, 71, 1977, 71, - 71, 1975, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 1987, 71, 1988, 1984, 1979, 1981, 1980, 1982, 1985, - 1983, 71, 71, 1986, 71, 1993, 71, 1989, 1991, 71, - 1994, 71, 1992, 1997, 71, 1996, 1999, 71, 1998, 71, - 1990, 71, 71, 2001, 71, 2006, 2002, 2004, 2007, 1995, - 2000, 71, 2005, 71, 71, 2003, 71, 71, 71, 2008, + 1961, 1950, 71, 1958, 1955, 1956, 71, 1959, 71, 71, + 1960, 1963, 71, 1962, 1966, 71, 71, 71, 71, 1968, + 1964, 71, 1969, 71, 71, 1970, 1973, 71, 1965, 1967, + 71, 1975, 1971, 71, 71, 1972, 1976, 71, 71, 1977, + 71, 71, 71, 1980, 71, 1978, 1979, 1981, 1974, 71, + 1985, 71, 71, 1982, 71, 71, 71, 71, 1984, 71, + 71, 1983, 1986, 71, 71, 1994, 71, 71, 1989, 71, + 1987, 1988, 1990, 71, 1995, 1991, 1992, 71, 71, 1993, + 71, 2003, 1996, 1997, 1999, 2002, 2005, 71, 71, 2000, + 71, 2007, 71, 71, 71, 2001, 1998, 2004, 2009, 2006, - 2011, 71, 71, 2012, 2010, 2009, 71, 2015, 2016, 71, - 71, 2017, 71, 2020, 71, 71, 71, 2013, 2018, 71, - 2021, 71, 2022, 2023, 71, 71, 71, 2025, 2014, 2026, - 2019, 2024, 71, 71, 2027, 71, 2028, 71, 71, 71, - 2030, 2029, 71, 71, 2033, 2036, 71, 71, 71, 71, - 71, 2037, 71, 2032, 2039, 71, 71, 71, 2035, 71, - 2031, 2034, 2043, 2038, 2041, 2046, 71, 71, 71, 2044, - 71, 71, 71, 71, 2042, 2047, 2040, 2045, 71, 71, - 71, 71, 71, 2057, 71, 71, 71, 2048, 2058, 2049, - 71, 2054, 2052, 71, 2050, 2060, 2051, 2056, 71, 2053, + 71, 71, 2012, 2014, 2015, 2010, 71, 2013, 71, 71, + 71, 71, 2008, 71, 2011, 71, 2016, 2019, 71, 71, + 2020, 2024, 71, 2026, 2023, 71, 2018, 71, 2025, 2028, + 71, 71, 71, 2030, 2021, 71, 2029, 2031, 71, 71, + 2033, 71, 71, 2027, 2032, 2022, 71, 71, 71, 71, + 2035, 2034, 2036, 71, 2038, 71, 71, 71, 2044, 71, + 2041, 71, 71, 71, 71, 2039, 2037, 2045, 2040, 2047, + 71, 71, 71, 2043, 2042, 71, 2046, 2051, 71, 2054, + 71, 71, 2049, 71, 71, 71, 71, 71, 2048, 2055, + 2050, 2052, 71, 2053, 71, 71, 71, 2065, 71, 71, - 2086, 2055, 71, 2059, 71, 2062, 2061, 2063, 71, 2064, - 71, 71, 2067, 2065, 71, 2066, 2070, 71, 71, 71, - 71, 71, 71, 2068, 2071, 2072, 2069, 2076, 71, 2077, - 71, 71, 2079, 71, 2075, 71, 2081, 71, 2073, 71, - 71, 2074, 2084, 71, 71, 2083, 2085, 71, 71, 71, - 2078, 71, 71, 2080, 2082, 71, 2090, 2087, 2088, 2091, - 71, 2093, 71, 71, 71, 71, 2097, 2096, 2089, 2095, - 71, 2092, 71, 2094, 2099, 71, 71, 2103, 71, 71, - 71, 2098, 71, 71, 71, 2108, 71, 2101, 2107, 2100, - 71, 71, 2112, 71, 71, 2102, 71, 2106, 71, 2104, + 71, 71, 2056, 2057, 2066, 71, 2060, 2062, 2058, 71, + 2059, 2064, 2067, 2061, 2068, 2063, 71, 2070, 2069, 2071, + 71, 2072, 71, 71, 2073, 71, 2075, 71, 71, 2078, + 71, 71, 2079, 71, 71, 71, 2074, 2076, 2080, 71, + 2077, 2084, 71, 2085, 71, 2087, 71, 2083, 71, 2089, + 71, 2081, 71, 2904, 2082, 71, 2092, 71, 2086, 71, + 2091, 2093, 71, 71, 71, 71, 2088, 2090, 71, 71, + 2099, 71, 2095, 2094, 2098, 2101, 71, 71, 2096, 71, + 71, 71, 2105, 2104, 2097, 2103, 71, 2100, 2107, 71, + 71, 71, 2111, 71, 71, 2102, 71, 2106, 71, 71, - 71, 71, 2109, 2105, 71, 2110, 2111, 2114, 71, 2117, - 2115, 71, 71, 2118, 2113, 71, 71, 2119, 71, 71, - 71, 2120, 71, 2121, 2116, 2122, 71, 2123, 71, 2125, - 71, 2127, 71, 2129, 2132, 2130, 71, 2124, 2134, 2126, - 71, 71, 71, 71, 71, 2128, 2135, 2131, 2136, 71, - 71, 71, 71, 71, 71, 71, 2886, 2133, 2144, 2139, - 2140, 2141, 2138, 2142, 71, 2145, 71, 2137, 71, 2143, - 2146, 71, 2150, 2147, 71, 2149, 71, 2148, 71, 71, - 2151, 71, 71, 71, 2157, 71, 71, 71, 2152, 71, - 71, 2159, 71, 71, 71, 2164, 2153, 2155, 2154, 2156, + 2116, 71, 71, 2115, 71, 2108, 2109, 71, 71, 2110, + 2120, 71, 71, 2114, 2112, 71, 71, 2125, 71, 2113, + 71, 2117, 2118, 2119, 2121, 2122, 2123, 71, 71, 2126, + 2127, 71, 71, 71, 71, 71, 71, 2130, 2131, 71, + 71, 2124, 71, 2129, 2135, 71, 71, 2128, 2133, 71, + 2137, 2138, 2140, 71, 2142, 71, 71, 2134, 71, 2132, + 71, 2143, 71, 2141, 2139, 71, 2136, 2144, 2146, 71, + 71, 71, 2147, 71, 2148, 71, 71, 2153, 2145, 2149, + 2150, 2154, 2151, 71, 71, 71, 2159, 71, 2155, 2152, + 71, 2158, 71, 71, 2157, 71, 2156, 71, 2160, 71, - 71, 2158, 2160, 2161, 2162, 2163, 71, 2168, 71, 71, - 2169, 2165, 2167, 71, 2166, 2170, 71, 71, 2172, 2173, - 2171, 2174, 2175, 71, 71, 71, 71, 71, 71, 2177, - 71, 71, 71, 2181, 71, 71, 71, 2183, 2176, 2182, - 2179, 2185, 2178, 2184, 71, 71, 71, 71, 2189, 71, - 2180, 2188, 71, 71, 2186, 71, 71, 71, 2191, 71, - 71, 71, 71, 2195, 2198, 2190, 2187, 2197, 71, 71, - 71, 2194, 71, 71, 2199, 2192, 2193, 2202, 2203, 2200, - 2196, 2204, 71, 71, 71, 2201, 71, 2886, 2205, 71, - 2207, 71, 71, 2210, 2208, 71, 2206, 2212, 71, 2211, + 71, 2166, 71, 71, 71, 71, 2161, 71, 71, 71, + 71, 2164, 2168, 2162, 2167, 2163, 2165, 2169, 71, 71, + 2170, 2172, 2171, 71, 2174, 71, 2173, 2214, 2175, 2189, + 2176, 2177, 71, 71, 2178, 2179, 71, 71, 71, 2182, + 2180, 2183, 71, 2181, 2904, 71, 71, 71, 2184, 71, + 71, 2186, 71, 71, 2190, 71, 2185, 71, 2187, 2191, + 2192, 2193, 71, 71, 71, 71, 2188, 71, 2194, 2198, + 71, 2197, 71, 2195, 71, 71, 71, 2200, 71, 71, + 71, 71, 2207, 2204, 71, 2196, 2206, 2199, 71, 71, + 2208, 2212, 2203, 71, 71, 2201, 2202, 71, 71, 2211, - 2214, 71, 71, 71, 2216, 71, 71, 71, 71, 2209, - 2213, 2215, 71, 2220, 71, 71, 71, 71, 2224, 71, - 2222, 2218, 2223, 2226, 2217, 2225, 71, 71, 2219, 71, - 71, 2227, 2228, 71, 71, 71, 2233, 71, 2230, 71, - 2221, 71, 71, 71, 2235, 2238, 71, 2232, 2234, 2229, - 71, 71, 71, 2231, 71, 2241, 2886, 2237, 71, 2236, - 2242, 71, 2239, 2243, 71, 71, 2245, 71, 71, 2240, - 2244, 71, 2248, 2250, 71, 71, 2249, 2251, 71, 2252, - 71, 2246, 2247, 2253, 71, 71, 71, 2254, 71, 2257, - 71, 2256, 71, 2258, 71, 71, 71, 2263, 71, 71, + 2205, 71, 71, 2216, 71, 71, 2213, 2209, 2217, 2210, + 71, 2219, 71, 2221, 71, 2215, 2220, 2223, 71, 71, + 71, 2225, 71, 71, 71, 71, 2222, 71, 71, 2224, + 2218, 71, 71, 2229, 2233, 71, 2231, 2232, 2227, 2234, + 71, 2226, 2235, 2228, 71, 2236, 71, 71, 71, 71, + 71, 2230, 71, 71, 2239, 2242, 71, 2244, 71, 2243, + 71, 71, 2237, 71, 71, 2241, 2247, 71, 71, 2238, + 2254, 2240, 71, 2250, 71, 2246, 2245, 2251, 71, 2252, + 2248, 71, 2249, 71, 71, 71, 2253, 71, 2259, 71, + 2260, 71, 2258, 2261, 71, 2262, 71, 2255, 2256, 71, - 2265, 71, 2259, 2255, 2266, 71, 2260, 71, 71, 71, - 71, 71, 2262, 71, 71, 2261, 2268, 71, 2264, 2267, - 2269, 71, 2271, 2274, 71, 71, 71, 71, 71, 71, - 2270, 2272, 71, 2273, 2275, 71, 2281, 71, 2282, 2278, - 2276, 2277, 2280, 71, 71, 71, 71, 2283, 71, 2288, - 71, 2279, 2284, 71, 71, 2290, 2292, 71, 2291, 2293, - 71, 2285, 2289, 71, 2294, 71, 2286, 71, 2287, 71, - 2295, 71, 2296, 2299, 71, 71, 71, 71, 2298, 71, - 71, 71, 71, 2297, 71, 2307, 2308, 71, 2304, 2311, - 71, 71, 71, 2301, 2300, 71, 71, 2303, 2302, 2306, + 71, 71, 71, 2266, 71, 2257, 2265, 71, 2267, 71, + 71, 2263, 71, 2272, 71, 71, 2268, 71, 2264, 2274, + 71, 2269, 2275, 71, 71, 71, 71, 71, 2271, 2277, + 2270, 71, 2278, 71, 2273, 2276, 2281, 71, 2279, 2284, + 71, 71, 71, 71, 71, 71, 71, 2280, 71, 71, + 2285, 71, 2291, 2282, 71, 71, 71, 2283, 2288, 2293, + 71, 71, 2290, 2287, 2292, 2302, 71, 2295, 2286, 2294, + 2289, 71, 71, 71, 2298, 2299, 71, 2300, 2296, 2303, + 71, 2301, 71, 2297, 71, 2304, 71, 2305, 71, 2306, + 71, 2307, 71, 2308, 71, 71, 71, 71, 71, 71, - 2305, 2310, 2313, 71, 2309, 2312, 71, 71, 71, 2314, - 71, 71, 71, 2315, 2316, 2322, 71, 2323, 71, 2324, - 71, 2317, 71, 71, 71, 71, 2318, 2320, 2319, 2328, - 71, 2321, 71, 71, 71, 2332, 71, 2326, 2325, 2331, - 2333, 71, 2327, 71, 71, 2334, 2335, 71, 71, 71, - 2329, 71, 2330, 2337, 71, 2336, 71, 71, 71, 2341, - 71, 2339, 71, 2346, 71, 2345, 71, 2338, 2349, 71, - 71, 2340, 2347, 71, 2350, 71, 2342, 2343, 71, 2352, - 2344, 2353, 71, 71, 2348, 71, 2357, 71, 2351, 71, - 71, 2354, 2359, 71, 2361, 71, 71, 71, 2364, 71, + 2317, 71, 2318, 71, 71, 2314, 71, 2321, 71, 2309, + 71, 71, 2310, 2311, 71, 2320, 2312, 2313, 2315, 2316, + 2322, 2323, 71, 71, 71, 71, 2319, 71, 2324, 71, + 2326, 71, 2325, 2332, 71, 2333, 71, 71, 2334, 2327, + 71, 71, 71, 2328, 71, 2329, 71, 2330, 2331, 71, + 2904, 2338, 71, 2343, 71, 2335, 2336, 2341, 71, 2337, + 2342, 71, 2339, 2344, 2345, 71, 71, 71, 71, 2340, + 71, 71, 71, 71, 71, 71, 2347, 2351, 71, 71, + 71, 71, 2349, 2355, 2372, 2346, 71, 2348, 2356, 71, + 2360, 2350, 2358, 2352, 2353, 71, 2357, 71, 2354, 2359, - 71, 2358, 2362, 2355, 71, 2356, 71, 2365, 2363, 2360, - 2367, 71, 71, 71, 71, 71, 71, 2368, 2372, 71, - 2374, 71, 2366, 2370, 2371, 2369, 71, 71, 2373, 71, - 2376, 2375, 2377, 71, 71, 71, 71, 2378, 71, 71, - 71, 71, 71, 2380, 2381, 2383, 2384, 2386, 71, 2388, - 2382, 71, 2379, 2385, 2387, 71, 2389, 2390, 71, 2392, - 71, 71, 71, 2394, 71, 71, 2393, 2397, 71, 2396, - 2398, 71, 71, 2400, 71, 2395, 2391, 71, 2402, 2886, - 2401, 71, 71, 2403, 71, 2399, 2404, 2405, 2406, 71, - 71, 71, 71, 2407, 71, 2408, 71, 71, 71, 71, + 71, 2362, 2363, 71, 71, 71, 71, 2367, 71, 71, + 2361, 2369, 71, 71, 2371, 71, 71, 2364, 2374, 71, + 71, 2368, 71, 2375, 71, 2365, 2366, 71, 2373, 2377, + 71, 71, 2370, 2904, 71, 71, 71, 2378, 2382, 71, + 2379, 2385, 2376, 2380, 2381, 71, 2383, 2384, 71, 71, + 2386, 71, 71, 71, 71, 71, 2388, 2904, 71, 71, + 2389, 71, 2392, 2387, 2391, 71, 2394, 2397, 71, 71, + 2395, 71, 2390, 2393, 2396, 2398, 71, 71, 2399, 71, + 2403, 71, 2400, 71, 71, 2405, 71, 2401, 2404, 71, + 2408, 71, 2409, 71, 2407, 71, 2406, 2402, 2411, 71, - 2409, 71, 2412, 71, 2411, 71, 2414, 2410, 2415, 71, - 2413, 2416, 71, 71, 2417, 71, 71, 2418, 71, 2423, - 71, 2419, 71, 71, 2421, 2422, 2420, 71, 71, 2424, - 2428, 71, 71, 71, 71, 2432, 71, 71, 71, 71, - 71, 2425, 2430, 2426, 2436, 71, 2427, 2429, 2462, 2431, - 2439, 2433, 2434, 2437, 71, 2440, 71, 2441, 2435, 2442, - 71, 71, 71, 71, 2438, 71, 71, 71, 71, 71, - 2443, 2444, 2447, 71, 2445, 71, 2450, 2451, 71, 71, - 2446, 2452, 71, 2448, 2453, 71, 2454, 71, 2449, 2456, - 71, 71, 2459, 71, 2457, 71, 2460, 71, 71, 2455, + 71, 2413, 2904, 2412, 71, 71, 2414, 71, 2410, 2415, + 2416, 2417, 71, 71, 71, 71, 2418, 71, 2419, 71, + 71, 71, 71, 2420, 71, 2423, 71, 2422, 71, 2425, + 2421, 2426, 71, 2424, 2427, 71, 71, 2428, 71, 71, + 2429, 71, 2434, 71, 2430, 71, 71, 2432, 2433, 2431, + 71, 71, 2435, 2439, 71, 71, 71, 71, 2443, 71, + 71, 71, 71, 71, 2436, 2441, 2437, 2447, 71, 2438, + 2440, 2473, 2442, 2450, 2444, 2445, 2448, 71, 2451, 71, + 2452, 2446, 2453, 71, 71, 71, 71, 2449, 71, 71, + 71, 71, 71, 2454, 2455, 2458, 71, 2456, 71, 2461, - 2461, 71, 2465, 71, 71, 2466, 2463, 2467, 71, 71, - 2458, 2469, 71, 71, 71, 71, 2464, 2473, 2474, 71, - 71, 71, 2476, 71, 2468, 2475, 2470, 2477, 71, 2472, - 71, 71, 2471, 71, 2482, 71, 71, 71, 71, 2481, - 71, 2484, 71, 2478, 2485, 71, 2487, 2486, 71, 71, - 2479, 2480, 2488, 71, 71, 71, 2490, 71, 71, 2493, - 2483, 2489, 2497, 71, 71, 2491, 2492, 71, 71, 2503, - 71, 71, 2496, 2494, 2500, 2499, 71, 2495, 2886, 2501, - 71, 71, 2504, 2498, 71, 2505, 71, 2502, 71, 2506, - 71, 2507, 2508, 71, 71, 71, 71, 2511, 2509, 2515, + 2462, 71, 71, 2457, 2463, 71, 2459, 2464, 71, 2465, + 71, 2460, 2467, 71, 71, 2470, 71, 2468, 71, 2471, + 71, 71, 2466, 2472, 71, 71, 2477, 71, 71, 2474, + 71, 2478, 71, 2469, 2479, 71, 2481, 71, 71, 2475, + 71, 2485, 71, 2480, 71, 2476, 2487, 71, 2486, 71, + 2483, 2482, 2488, 71, 2484, 71, 71, 2489, 71, 2494, + 71, 71, 2493, 71, 71, 71, 2498, 2490, 2496, 2497, + 71, 2499, 71, 2491, 71, 2492, 71, 2500, 71, 2502, + 71, 71, 71, 2509, 71, 2495, 2505, 71, 71, 71, + 2904, 71, 2515, 71, 71, 2503, 2504, 2501, 2506, 2511, - 71, 71, 71, 2512, 2516, 71, 2510, 2518, 71, 2520, - 71, 71, 2519, 71, 71, 2513, 2514, 71, 2521, 71, - 2517, 2522, 71, 2523, 2527, 71, 2524, 71, 2525, 2526, - 71, 2528, 71, 71, 71, 2531, 2535, 71, 71, 2529, - 2532, 71, 71, 2534, 71, 71, 2533, 2530, 71, 71, - 71, 2537, 71, 71, 71, 71, 2536, 2538, 2540, 2544, - 2545, 71, 2542, 71, 2546, 71, 71, 2886, 2541, 2539, - 2547, 2548, 2556, 2543, 71, 2549, 2551, 71, 2550, 2552, - 71, 2553, 71, 71, 71, 2555, 71, 2558, 71, 2557, - 71, 2559, 2554, 71, 71, 2560, 2561, 71, 71, 71, + 2512, 2508, 2507, 71, 2516, 2513, 71, 2510, 2514, 71, + 2517, 71, 2518, 71, 2519, 71, 71, 71, 71, 71, + 2523, 2521, 71, 2527, 71, 71, 71, 2524, 2528, 2530, + 71, 2520, 71, 71, 2532, 71, 71, 2522, 71, 2525, + 2531, 2533, 2526, 71, 2529, 2534, 71, 2535, 71, 71, + 2538, 71, 2536, 2539, 71, 2540, 71, 2537, 2541, 2543, + 71, 71, 2547, 71, 2544, 71, 71, 71, 71, 71, + 2546, 2542, 71, 2545, 71, 71, 2549, 2554, 71, 71, + 2550, 2552, 71, 71, 2548, 71, 2555, 2557, 71, 2559, + 2558, 71, 71, 71, 2551, 2553, 71, 2561, 2569, 2556, - 71, 2566, 71, 2564, 2568, 71, 2562, 71, 71, 71, - 2572, 71, 71, 71, 71, 2563, 2575, 2565, 71, 71, - 71, 2569, 71, 2570, 71, 2567, 2573, 2574, 2576, 2571, - 2579, 71, 2582, 71, 2577, 71, 2580, 2584, 71, 2578, - 2585, 71, 71, 2587, 71, 71, 71, 71, 71, 71, - 2581, 71, 2591, 71, 2583, 2592, 71, 71, 2596, 71, - 71, 2588, 2589, 2586, 2590, 2598, 71, 2600, 71, 2593, - 2601, 71, 2595, 2597, 2594, 71, 2603, 71, 71, 71, - 2607, 71, 71, 71, 2611, 71, 71, 2605, 2599, 71, - 71, 2613, 2612, 71, 2609, 2602, 2604, 71, 2616, 2606, + 2560, 71, 2562, 2564, 71, 2563, 2565, 71, 2566, 71, + 71, 71, 2571, 2568, 2575, 71, 2570, 71, 71, 2567, + 2572, 71, 2573, 2574, 71, 71, 71, 2579, 71, 71, + 2577, 2581, 71, 71, 71, 71, 2585, 71, 71, 71, + 71, 71, 2576, 71, 2578, 2588, 71, 71, 2582, 2583, + 71, 2586, 2587, 2580, 71, 2584, 2589, 71, 2592, 2590, + 2595, 71, 2593, 2597, 71, 2591, 2594, 2598, 71, 71, + 2600, 71, 71, 2596, 71, 71, 71, 2605, 71, 2604, + 71, 71, 71, 71, 2609, 71, 71, 71, 2601, 71, + 2599, 2602, 2603, 71, 2611, 2613, 71, 2614, 71, 2610, - 2608, 2617, 71, 2610, 71, 2614, 71, 2619, 71, 2618, - 71, 71, 71, 71, 2624, 2621, 2622, 2615, 71, 71, - 71, 2627, 71, 2628, 71, 71, 2620, 2631, 71, 2632, - 71, 2623, 71, 71, 2630, 2625, 2626, 2633, 2629, 71, - 2636, 71, 2637, 71, 2635, 2638, 71, 2634, 71, 2640, - 71, 71, 71, 2639, 71, 71, 71, 2645, 2646, 71, - 71, 71, 71, 2650, 71, 71, 2886, 71, 2653, 71, - 2641, 2649, 2652, 71, 2642, 2647, 2643, 2644, 2654, 71, - 2648, 71, 2656, 71, 2651, 2659, 71, 2655, 71, 71, - 71, 2658, 71, 2657, 2660, 71, 71, 71, 71, 71, + 2606, 2608, 2616, 71, 2607, 71, 71, 2615, 2612, 71, + 71, 2621, 71, 2620, 71, 2619, 2618, 71, 2625, 71, + 71, 71, 2617, 2626, 2623, 71, 2627, 71, 2622, 2630, + 2624, 2631, 71, 2628, 2629, 71, 71, 2633, 71, 2632, + 71, 71, 71, 71, 2638, 2634, 2635, 2636, 71, 71, + 71, 2641, 71, 2642, 71, 2645, 71, 2637, 2644, 2643, + 2646, 71, 71, 71, 71, 2639, 2640, 2647, 71, 2649, + 2650, 71, 2651, 71, 2652, 71, 71, 2648, 2654, 71, + 71, 2653, 71, 71, 71, 2659, 71, 2655, 2660, 71, + 71, 71, 71, 2664, 71, 71, 2666, 2667, 71, 71, - 2663, 71, 71, 2665, 71, 71, 2666, 71, 2664, 71, - 2661, 71, 2662, 71, 71, 71, 2675, 71, 2667, 2680, - 2671, 2668, 2669, 2670, 2672, 2673, 2697, 2677, 2678, 71, - 2674, 2679, 71, 2676, 2681, 71, 2682, 71, 2683, 2684, - 71, 71, 2685, 2686, 2689, 71, 2687, 2688, 71, 71, - 2690, 71, 71, 71, 2694, 71, 71, 2693, 71, 71, - 71, 71, 2696, 2695, 71, 2701, 2691, 2692, 2702, 71, - 2700, 2703, 71, 71, 2698, 71, 2708, 71, 2699, 2710, - 2705, 2709, 71, 71, 71, 71, 2706, 71, 2704, 2707, - 71, 71, 2714, 71, 2717, 71, 2715, 71, 71, 2712, + 2661, 2663, 2656, 71, 2657, 2658, 2668, 71, 2669, 2671, + 2662, 71, 71, 2670, 2665, 71, 2674, 71, 71, 71, + 2673, 71, 71, 2672, 2675, 71, 71, 2678, 71, 71, + 71, 71, 2680, 71, 71, 71, 2681, 2679, 2676, 71, + 71, 2677, 71, 2693, 71, 71, 2904, 2690, 2682, 2686, + 2683, 2684, 2685, 2694, 71, 2691, 2687, 2688, 2692, 71, + 71, 2689, 71, 2695, 2696, 71, 2697, 71, 2698, 2699, + 71, 71, 2700, 2701, 2704, 71, 2702, 2703, 2706, 71, + 2705, 71, 71, 71, 2709, 71, 71, 2710, 2708, 71, + 71, 71, 71, 2711, 2712, 71, 2707, 71, 2713, 71, - 2719, 71, 2718, 2720, 71, 2721, 71, 2727, 2711, 2722, - 71, 2713, 2716, 2723, 71, 2724, 71, 2725, 71, 2726, - 71, 2728, 71, 71, 2730, 71, 71, 71, 71, 2734, - 71, 71, 2736, 71, 71, 71, 71, 71, 2738, 71, - 2732, 2731, 2733, 2729, 71, 2740, 2735, 71, 2743, 71, - 2742, 71, 2737, 2744, 71, 2741, 2745, 71, 71, 71, - 71, 71, 2739, 2750, 2751, 71, 71, 71, 2746, 71, - 2754, 71, 71, 71, 2748, 2747, 2749, 71, 2753, 2760, - 71, 71, 2752, 71, 2758, 2756, 2759, 2755, 71, 2762, - 71, 71, 71, 2763, 71, 2757, 71, 71, 2761, 71, + 2717, 2718, 71, 71, 2716, 71, 2714, 2719, 71, 71, + 2715, 71, 2720, 2724, 2721, 2726, 71, 71, 2725, 71, + 2722, 71, 2730, 2723, 71, 71, 2729, 71, 2727, 2731, + 71, 2728, 2733, 71, 2848, 2734, 2735, 71, 2736, 71, + 2737, 71, 2738, 71, 2732, 2739, 71, 2740, 71, 2741, + 71, 2742, 71, 71, 2744, 71, 71, 71, 71, 2747, + 71, 71, 2743, 71, 71, 2751, 71, 2753, 71, 71, + 71, 71, 2748, 2755, 2749, 2750, 2745, 2746, 71, 2757, + 71, 2752, 71, 2760, 71, 2759, 71, 2754, 71, 71, + 71, 71, 71, 2762, 71, 2767, 71, 2756, 2758, 71, - 71, 71, 2773, 71, 71, 71, 2857, 2766, 71, 2764, - 2765, 2768, 71, 2771, 2774, 2775, 71, 71, 2769, 2767, - 2770, 2772, 71, 2776, 2777, 71, 2778, 71, 2780, 71, - 71, 2779, 2781, 71, 71, 2782, 71, 2786, 2783, 71, - 2789, 71, 2784, 71, 71, 2791, 71, 71, 71, 2785, - 2787, 2794, 71, 71, 2795, 71, 71, 71, 71, 2788, - 71, 2798, 2792, 2790, 2796, 2799, 2793, 71, 2803, 71, - 2801, 71, 2800, 71, 2797, 71, 71, 71, 71, 2802, - 2806, 71, 71, 2808, 71, 71, 71, 71, 71, 2805, - 71, 2813, 2814, 2804, 71, 2810, 71, 2807, 2811, 2818, + 2761, 2768, 71, 2763, 2769, 71, 71, 2765, 2764, 2766, + 71, 71, 71, 2774, 2772, 2771, 71, 71, 71, 2770, + 2778, 71, 2777, 71, 2780, 71, 71, 2776, 71, 71, + 71, 2773, 71, 71, 71, 2775, 2779, 71, 2781, 2791, + 71, 71, 71, 71, 2875, 2782, 2783, 71, 2784, 2786, + 71, 2787, 2792, 2788, 2785, 2789, 71, 2790, 2793, 71, + 71, 2794, 2795, 71, 2796, 71, 2797, 71, 71, 71, + 2798, 2799, 2800, 71, 2801, 71, 2804, 71, 2807, 71, + 71, 2802, 71, 2809, 71, 71, 71, 71, 2803, 2805, + 2812, 71, 71, 2813, 71, 2814, 2816, 2806, 71, 2808, - 2809, 2817, 71, 2812, 2819, 2886, 2815, 71, 2820, 2816, - 71, 71, 71, 71, 2825, 2824, 2821, 2822, 2823, 71, - 71, 2827, 71, 71, 2826, 71, 71, 2828, 71, 71, - 2833, 71, 71, 2830, 71, 2836, 71, 2837, 71, 71, - 71, 71, 71, 71, 2829, 2835, 2840, 2831, 2832, 2838, - 2834, 71, 2839, 71, 2844, 71, 2843, 71, 2841, 71, - 2845, 2842, 71, 2848, 2846, 71, 2850, 71, 2851, 71, - 71, 71, 2855, 71, 2852, 71, 71, 2853, 2849, 71, - 2856, 2858, 71, 2847, 71, 71, 2859, 71, 2864, 71, - 2854, 2860, 2862, 71, 71, 2861, 71, 71, 71, 2866, + 2810, 2817, 71, 71, 2811, 71, 71, 71, 2821, 71, + 71, 71, 2818, 2815, 2824, 71, 2819, 71, 71, 71, + 71, 71, 2826, 71, 2820, 2823, 2822, 71, 2831, 71, + 71, 71, 2828, 2829, 2832, 2825, 2836, 2827, 2835, 71, + 2830, 2837, 71, 2838, 71, 2833, 71, 71, 71, 2834, + 71, 2839, 2843, 2840, 71, 2841, 2845, 71, 71, 2844, + 71, 71, 71, 2842, 2846, 71, 2851, 71, 71, 71, + 71, 2854, 71, 2855, 71, 71, 71, 71, 71, 71, + 2847, 2849, 2853, 2858, 2850, 2856, 2852, 2859, 2857, 71, + 2861, 71, 2862, 71, 2860, 71, 2866, 71, 2863, 71, - 71, 2867, 71, 2870, 2863, 2871, 71, 71, 71, 2874, - 2875, 71, 2865, 71, 2877, 71, 2868, 2869, 71, 2872, - 2876, 2878, 71, 71, 71, 2879, 2873, 71, 2880, 2881, - 71, 2884, 71, 2885, 71, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2882, 2886, 2886, 2883, - 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, 2886, 74, 74, - 74, 74, 140, 140, 2886, 2886, 2886, 140, 140, 142, + 2868, 71, 2864, 71, 2869, 2865, 2870, 71, 71, 2873, + 71, 71, 71, 71, 2871, 71, 2867, 2874, 2876, 71, + 2877, 71, 2878, 71, 2882, 71, 2880, 2872, 71, 71, + 2879, 71, 71, 71, 2884, 71, 2885, 71, 2888, 2889, + 71, 71, 2881, 71, 2892, 2893, 71, 2883, 71, 2895, + 71, 2886, 2887, 71, 2890, 2894, 2896, 71, 71, 71, + 2891, 71, 71, 2904, 2898, 2897, 2899, 2902, 71, 2903, + 71, 2904, 2900, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2901, 43, 43, 43, 43, 43, 43, 43, 48, + 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, - 142, 2886, 2886, 142, 2886, 142, 144, 2886, 2886, 2886, - 2886, 2886, 144, 147, 147, 2886, 2886, 2886, 147, 147, - 149, 2886, 2886, 2886, 2886, 2886, 149, 151, 151, 2886, - 151, 151, 151, 151, 75, 75, 2886, 75, 75, 75, - 75, 13, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886 + 53, 53, 53, 59, 59, 59, 59, 59, 59, 59, + 64, 64, 64, 64, 64, 64, 64, 74, 74, 2904, + 74, 74, 74, 74, 140, 140, 2904, 2904, 2904, 140, + 140, 142, 142, 2904, 2904, 142, 2904, 142, 144, 2904, + 2904, 2904, 2904, 2904, 144, 147, 147, 2904, 2904, 2904, + 147, 147, 149, 2904, 2904, 2904, 2904, 2904, 149, 151, + 151, 2904, 151, 151, 151, 151, 75, 75, 2904, 75, + 75, 75, 75, 13, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904 } ; -static yyconst flex_int16_t yy_chk[5683] = +static yyconst flex_int16_t yy_chk[5715] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2018,13 +2029,13 @@ static yyconst flex_int16_t yy_chk[5683] = 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, 2892, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2910, 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, 969, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 971, 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, @@ -2164,477 +2175,481 @@ static yyconst flex_int16_t yy_chk[5683] = 600, 603, 601, 606, 604, 605, 602, 611, 607, 606, 608, 611, 612, 613, 614, 609, 615, 616, 610, 617, - 618, 618, 619, 620, 621, 622, 619, 625, 624, 613, - 612, 53, 614, 617, 615, 621, 616, 626, 623, 622, - 627, 632, 620, 623, 624, 629, 625, 627, 628, 630, - 626, 631, 629, 628, 630, 633, 631, 634, 635, 632, - 636, 637, 633, 638, 639, 641, 634, 639, 638, 636, - 640, 642, 635, 637, 640, 643, 645, 644, 649, 641, - 642, 646, 646, 647, 647, 648, 648, 649, 651, 652, - 643, 644, 647, 653, 654, 652, 655, 645, 654, 656, - 657, 661, 659, 658, 660, 662, 663, 651, 655, 658, - 659, 660, 666, 653, 669, 690, 664, 673, 657, 661, + 618, 618, 619, 620, 625, 622, 619, 621, 624, 613, + 612, 632, 614, 617, 615, 615, 616, 626, 621, 622, + 623, 627, 620, 625, 624, 623, 628, 629, 627, 632, + 626, 628, 630, 631, 629, 633, 634, 630, 631, 635, + 636, 638, 633, 637, 639, 634, 638, 639, 640, 636, + 641, 642, 640, 635, 643, 637, 644, 645, 646, 646, + 642, 651, 647, 647, 641, 648, 648, 649, 652, 643, + 644, 647, 653, 654, 652, 655, 649, 654, 645, 656, + 651, 657, 658, 659, 661, 662, 660, 655, 658, 663, + 669, 659, 653, 660, 672, 674, 664, 666, 679, 657, - 672, 664, 690, 673, 656, 664, 663, 666, 664, 672, - 662, 669, 674, 675, 678, 664, 679, 675, 664, 676, - 676, 677, 677, 680, 681, 678, 682, 685, 674, 687, - 684, 699, 682, 686, 679, 684, 688, 680, 692, 688, - 689, 689, 691, 691, 681, 683, 683, 683, 685, 683, - 699, 686, 683, 692, 687, 693, 693, 683, 695, 698, - 694, 695, 696, 683, 683, 694, 697, 696, 697, 700, - 701, 698, 702, 700, 703, 704, 704, 705, 708, 706, - 707, 707, 703, 709, 710, 713, 713, 750, 711, 750, - 701, 702, 705, 706, 711, 709, 708, 712, 714, 48, + 673, 664, 661, 672, 656, 664, 673, 669, 664, 663, + 662, 674, 666, 675, 678, 664, 679, 675, 664, 676, + 676, 677, 677, 680, 681, 678, 682, 685, 684, 687, + 698, 688, 682, 684, 688, 686, 690, 680, 689, 689, + 691, 691, 698, 690, 681, 683, 683, 683, 685, 683, + 692, 699, 683, 686, 687, 693, 693, 683, 697, 695, + 697, 694, 695, 683, 683, 692, 694, 696, 701, 700, + 699, 702, 696, 700, 703, 704, 704, 705, 708, 706, + 707, 707, 703, 709, 710, 711, 713, 713, 701, 712, + 702, 711, 705, 706, 712, 709, 708, 714, 750, 716, - 716, 717, 712, 714, 714, 716, 710, 717, 718, 721, - 719, 720, 721, 722, 718, 719, 723, 720, 724, 722, - 725, 727, 726, 728, 723, 730, 724, 726, 727, 729, - 729, 731, 733, 742, 730, 732, 735, 736, 725, 731, - 738, 732, 728, 737, 739, 735, 736, 739, 737, 738, - 740, 733, 741, 743, 743, 740, 744, 745, 742, 746, - 747, 748, 751, 751, 748, 752, 741, 754, 746, 753, - 755, 744, 748, 756, 753, 757, 745, 760, 758, 761, - 759, 762, 763, 761, 747, 764, 752, 765, 754, 759, - 755, 764, 766, 756, 767, 768, 765, 757, 758, 762, + 750, 717, 714, 714, 716, 718, 710, 717, 719, 720, + 722, 718, 723, 719, 721, 720, 722, 721, 724, 725, + 723, 727, 726, 728, 729, 729, 724, 726, 727, 730, + 732, 731, 733, 742, 735, 736, 732, 725, 730, 731, + 737, 738, 728, 735, 736, 737, 739, 740, 741, 739, + 738, 733, 740, 743, 743, 744, 745, 746, 742, 747, + 748, 752, 741, 748, 751, 751, 746, 753, 754, 757, + 744, 748, 753, 755, 756, 745, 758, 759, 760, 762, + 761, 763, 752, 747, 761, 767, 759, 53, 768, 754, + 765, 757, 764, 755, 756, 766, 758, 762, 764, 765, - 760, 763, 769, 770, 766, 771, 772, 772, 769, 768, - 771, 773, 774, 767, 775, 776, 777, 770, 778, 779, - 780, 774, 782, 776, 781, 783, 780, 784, 782, 785, - 787, 773, 788, 784, 775, 785, 777, 786, 781, 779, - 778, 786, 789, 790, 788, 783, 795, 789, 792, 787, - 791, 791, 788, 793, 792, 794, 793, 796, 797, 795, - 798, 798, 799, 796, 790, 800, 801, 801, 802, 805, - 800, 803, 806, 794, 807, 803, 804, 804, 797, 807, - 799, 808, 810, 802, 811, 813, 814, 816, 816, 817, - 820, 805, 806, 817, 818, 819, 819, 821, 811, 822, + 763, 760, 768, 769, 767, 770, 771, 766, 773, 769, + 775, 771, 772, 772, 774, 777, 776, 778, 779, 770, + 780, 781, 782, 774, 776, 783, 784, 781, 773, 787, + 775, 783, 785, 787, 788, 777, 782, 779, 785, 778, + 780, 786, 789, 790, 791, 793, 784, 786, 790, 792, + 792, 793, 794, 788, 789, 794, 795, 796, 797, 798, + 799, 799, 789, 800, 797, 791, 801, 802, 802, 803, + 796, 801, 804, 806, 795, 809, 804, 805, 805, 798, + 807, 800, 808, 811, 803, 812, 814, 808, 815, 817, + 817, 821, 818, 819, 809, 806, 818, 820, 820, 812, - 808, 821, 823, 43, 835, 813, 810, 814, 815, 818, - 835, 815, 825, 815, 822, 820, 823, 815, 824, 815, - 827, 828, 826, 824, 815, 828, 825, 826, 826, 815, - 829, 830, 831, 832, 827, 833, 830, 831, 834, 838, - 838, 841, 836, 837, 843, 829, 830, 832, 836, 837, - 839, 840, 834, 842, 845, 839, 833, 840, 848, 846, - 850, 847, 843, 841, 846, 850, 845, 849, 849, 851, - 848, 852, 842, 844, 844, 847, 853, 851, 854, 844, - 856, 844, 855, 855, 856, 852, 859, 844, 858, 859, - 860, 861, 844, 844, 858, 853, 862, 854, 863, 844, + 807, 822, 823, 48, 824, 822, 814, 811, 819, 815, + 816, 839, 839, 816, 826, 816, 821, 823, 824, 816, + 825, 816, 828, 829, 827, 825, 816, 829, 826, 827, + 827, 816, 830, 831, 832, 833, 828, 834, 831, 832, + 835, 842, 843, 43, 836, 837, 838, 830, 831, 833, + 836, 837, 838, 841, 835, 840, 844, 846, 834, 841, + 840, 843, 847, 842, 848, 849, 854, 847, 851, 846, + 850, 850, 852, 851, 844, 845, 845, 849, 848, 853, + 852, 845, 14, 845, 855, 854, 856, 856, 857, 845, + 859, 861, 857, 853, 845, 845, 859, 860, 862, 863, - 864, 865, 862, 863, 861, 866, 867, 868, 869, 860, - 865, 870, 872, 868, 866, 871, 874, 869, 876, 864, - 871, 873, 867, 878, 877, 875, 879, 876, 880, 878, - 870, 882, 872, 877, 880, 873, 874, 875, 884, 885, - 887, 886, 889, 879, 888, 890, 891, 882, 892, 893, - 890, 891, 884, 892, 887, 894, 894, 889, 893, 885, - 886, 895, 888, 896, 898, 899, 903, 895, 900, 900, - 899, 899, 900, 902, 901, 904, 896, 901, 905, 906, - 898, 908, 907, 909, 911, 912, 903, 902, 907, 909, - 912, 905, 910, 904, 906, 910, 914, 913, 915, 916, + 860, 845, 864, 855, 865, 863, 866, 864, 867, 868, + 861, 862, 869, 870, 871, 866, 872, 867, 869, 873, + 874, 872, 870, 865, 875, 868, 876, 877, 878, 879, + 880, 885, 883, 871, 874, 879, 877, 878, 876, 873, + 881, 886, 888, 887, 875, 885, 881, 880, 883, 889, + 890, 894, 891, 892, 893, 897, 888, 891, 892, 893, + 894, 886, 887, 895, 895, 890, 896, 889, 897, 899, + 900, 904, 896, 901, 901, 900, 900, 901, 902, 903, + 905, 902, 906, 908, 907, 899, 909, 911, 910, 908, + 911, 904, 912, 903, 910, 906, 913, 914, 905, 907, - 920, 908, 913, 915, 916, 911, 917, 919, 921, 922, - 923, 923, 914, 919, 921, 922, 920, 924, 917, 925, - 926, 927, 927, 926, 928, 929, 924, 930, 931, 933, - 932, 931, 934, 940, 935, 933, 936, 925, 934, 935, - 937, 936, 928, 932, 929, 937, 938, 930, 941, 942, - 945, 940, 938, 943, 946, 942, 944, 944, 943, 945, - 947, 948, 949, 947, 948, 950, 951, 952, 941, 953, - 954, 958, 946, 949, 955, 953, 954, 956, 951, 957, - 957, 959, 956, 950, 960, 962, 952, 961, 963, 955, - 958, 961, 964, 965, 967, 959, 960, 963, 968, 968, + 915, 913, 914, 916, 917, 918, 909, 921, 916, 917, + 924, 924, 920, 912, 922, 923, 915, 918, 920, 925, + 922, 923, 926, 921, 927, 928, 928, 927, 925, 929, + 930, 931, 932, 933, 936, 932, 934, 935, 939, 936, + 926, 941, 934, 935, 939, 937, 933, 929, 938, 930, + 937, 931, 942, 938, 943, 946, 944, 945, 945, 941, + 943, 944, 947, 948, 946, 949, 950, 951, 949, 950, + 952, 947, 942, 953, 954, 957, 955, 956, 951, 958, + 960, 948, 955, 956, 958, 953, 959, 959, 952, 961, + 957, 963, 962, 954, 964, 963, 965, 966, 967, 960, - 970, 971, 973, 962, 976, 972, 974, 973, 975, 975, - 980, 964, 980, 967, 970, 974, 971, 972, 965, 977, - 978, 982, 979, 981, 976, 977, 978, 979, 981, 983, - 985, 984, 986, 987, 988, 982, 984, 989, 991, 991, - 987, 992, 993, 983, 994, 985, 995, 996, 14, 988, - 1002, 986, 995, 999, 999, 992, 989, 997, 1000, 994, - 993, 1001, 997, 1000, 1002, 1004, 1003, 996, 1001, 1003, - 1005, 997, 1006, 997, 1007, 1008, 997, 1006, 1009, 1005, - 1008, 1010, 1013, 1004, 1012, 1012, 1014, 1013, 1015, 1009, - 1016, 1014, 1017, 1007, 1018, 1016, 1017, 1019, 1020, 1021, + 969, 970, 970, 961, 962, 965, 972, 973, 975, 974, + 977, 977, 964, 975, 978, 976, 966, 993, 993, 969, + 972, 974, 973, 967, 976, 979, 980, 982, 981, 982, + 983, 979, 980, 981, 978, 983, 984, 985, 986, 987, + 988, 989, 990, 986, 991, 13, 994, 995, 989, 996, + 984, 985, 997, 998, 987, 1003, 999, 990, 997, 988, + 994, 999, 1003, 991, 996, 995, 1001, 1001, 1004, 1002, + 999, 1006, 999, 998, 1002, 999, 1005, 1007, 1008, 1005, + 1009, 1011, 1004, 1008, 1012, 1010, 1007, 1014, 1014, 1006, + 1010, 1015, 1011, 1016, 1017, 1018, 1015, 1019, 1016, 1009, - 1010, 1023, 1022, 1018, 1024, 1025, 1026, 1027, 1015, 1028, - 1031, 1024, 1019, 1020, 1022, 1029, 1023, 1025, 1021, 1030, - 1032, 1029, 1033, 1035, 1036, 1026, 1038, 1028, 1027, 1035, - 1031, 1033, 1039, 1037, 1030, 1040, 1042, 1039, 1036, 1041, - 1032, 1037, 1043, 1048, 1041, 1041, 1038, 1040, 1044, 1045, - 1045, 1047, 1048, 1049, 1052, 1042, 1043, 1050, 1050, 1049, - 1051, 1044, 1046, 1052, 1047, 1051, 1053, 1046, 1054, 1055, - 1046, 1046, 1053, 1054, 1055, 1046, 1056, 1056, 1057, 1058, - 1058, 1046, 1060, 1059, 1062, 1046, 1059, 1061, 1059, 1063, - 1064, 1067, 1065, 1062, 1066, 1064, 1069, 1067, 1068, 1057, + 1018, 1019, 1020, 1012, 1021, 1022, 1023, 1025, 1026, 1024, + 1028, 1020, 1027, 1029, 1017, 1026, 1032, 1030, 1033, 1021, + 1022, 1024, 1025, 1034, 1027, 1023, 1031, 1035, 1038, 1028, + 1040, 1032, 1031, 1037, 1029, 1030, 1035, 1039, 1033, 1037, + 1042, 1041, 1038, 1034, 1044, 1039, 1041, 1045, 1043, 1046, + 1040, 1050, 1042, 1043, 1043, 1047, 1047, 1049, 0, 1051, + 1050, 1045, 1046, 1044, 1048, 1051, 1052, 1052, 1055, 1048, + 1049, 1053, 1048, 1048, 1055, 1054, 1053, 1048, 1058, 1058, + 1056, 1057, 1059, 1048, 1054, 1056, 1057, 1048, 1060, 1060, + 1061, 1062, 1063, 1061, 1065, 1061, 1064, 1066, 1067, 1068, - 13, 1069, 1060, 1070, 1068, 1061, 1065, 1070, 1071, 1063, - 1072, 1072, 1066, 1073, 1074, 1073, 1076, 1071, 1077, 1078, - 1076, 1079, 1071, 1081, 1071, 1074, 1071, 1082, 1071, 1080, - 1079, 1084, 1082, 1077, 1080, 1080, 1083, 1078, 1085, 1086, - 1084, 1087, 1088, 1089, 1091, 1081, 1090, 1092, 1089, 1087, - 1083, 1093, 1096, 1091, 1094, 1102, 1088, 1085, 1086, 1094, - 1090, 1095, 1095, 1097, 1097, 1092, 1098, 1096, 1098, 1100, - 1101, 1103, 1100, 1105, 1102, 1101, 1093, 1104, 1104, 1109, - 1103, 1106, 1106, 1107, 1107, 1108, 1110, 1111, 1111, 1112, - 1108, 1113, 1114, 1105, 1113, 1116, 1115, 1117, 1118, 1117, + 1069, 1070, 1066, 1059, 1071, 1064, 1069, 1070, 1080, 1071, + 1063, 1062, 1067, 1073, 1065, 1072, 1075, 1068, 1075, 1072, + 1074, 1074, 1073, 1076, 1078, 1079, 1080, 1073, 1078, 1073, + 1081, 1073, 1082, 1073, 1076, 1083, 1084, 1082, 1082, 1081, + 1079, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1093, + 1094, 1092, 1086, 1091, 1089, 1095, 1085, 1083, 1093, 1097, + 1097, 1090, 1096, 1087, 1088, 1092, 1098, 1096, 1094, 1099, + 1099, 1100, 1102, 1100, 1103, 1102, 1104, 1105, 1107, 1103, + 1095, 1098, 1106, 1106, 1108, 1108, 1105, 1109, 1109, 1110, + 1111, 1112, 1113, 1113, 1110, 1104, 1114, 1115, 1107, 1116, - 1109, 1115, 1120, 1121, 1116, 1120, 1122, 1110, 1121, 1112, - 1123, 1122, 1114, 1128, 1124, 1125, 1118, 0, 1123, 1124, - 1125, 1126, 1126, 1127, 1129, 1130, 1131, 1133, 1127, 1134, - 1129, 1128, 1130, 1133, 1136, 1134, 1135, 1137, 1138, 1131, - 1136, 1135, 1139, 1140, 1140, 1141, 1137, 1143, 1144, 1145, - 1146, 1152, 1147, 1139, 1149, 1145, 1146, 1138, 1147, 1150, - 1149, 1151, 1153, 1152, 1154, 1141, 1156, 1143, 1155, 1155, - 1157, 1144, 1158, 1150, 1161, 1159, 1153, 1160, 1160, 1150, - 1159, 1151, 1154, 1162, 1164, 1167, 1156, 1165, 1162, 1166, - 1158, 1168, 1165, 1165, 1167, 1157, 1169, 1161, 1170, 1168, + 1115, 1117, 1120, 1119, 1118, 1119, 1117, 1122, 1123, 1124, + 1122, 1111, 1112, 1118, 1124, 1131, 1114, 1125, 1126, 1116, + 1120, 0, 1125, 1123, 1127, 1128, 1126, 1129, 1129, 1127, + 1128, 1130, 1132, 1131, 1133, 1134, 1130, 1136, 1132, 1137, + 1139, 1133, 1138, 1136, 1140, 1137, 1139, 1138, 1134, 1141, + 1142, 1143, 1143, 1140, 1144, 1146, 1147, 1148, 1149, 1150, + 1152, 1142, 1153, 1148, 1149, 1150, 1152, 1154, 1141, 1155, + 1156, 1157, 1158, 1158, 1144, 1146, 1153, 1159, 1160, 1147, + 1161, 1155, 1153, 1162, 1156, 1163, 1163, 1154, 1162, 1157, + 1164, 1165, 1167, 1170, 1168, 1172, 1165, 1159, 1161, 1168, - 1171, 1172, 1173, 1164, 1173, 1174, 1172, 1166, 1175, 1172, - 1169, 1177, 1176, 1170, 1175, 1171, 1176, 1178, 1171, 1174, - 1179, 1180, 1177, 1181, 1182, 1183, 1186, 1184, 1181, 1192, - 1183, 1187, 1188, 1189, 1189, 1191, 1178, 1190, 1193, 1180, - 1186, 1190, 1182, 1194, 1193, 1195, 1179, 1184, 1192, 1187, - 1188, 1196, 1197, 1191, 1198, 1194, 1199, 1200, 1202, 1201, - 1203, 1204, 1200, 1202, 1195, 1196, 1201, 1197, 1206, 1198, - 1204, 1205, 1205, 1207, 1208, 1199, 1209, 0, 1203, 1207, - 1210, 1209, 1211, 1206, 1212, 1212, 1210, 1217, 1211, 1213, - 1213, 1215, 1215, 1216, 1218, 1208, 1217, 1216, 1221, 1219, + 1168, 1169, 1170, 1160, 1171, 1173, 1174, 1182, 1177, 1172, + 1175, 1167, 1171, 1164, 1176, 1175, 1176, 1178, 1175, 1169, + 1173, 1174, 1177, 1178, 1174, 1179, 1180, 1181, 1189, 1179, + 1183, 1184, 1185, 1182, 1186, 1187, 1184, 1180, 1190, 1186, + 1191, 1193, 1189, 1192, 1192, 1193, 1181, 1194, 1183, 1195, + 1185, 1196, 1197, 1198, 1200, 1187, 1190, 1196, 1191, 1199, + 1201, 1202, 1203, 1204, 1197, 1194, 1205, 1203, 1195, 1200, + 1204, 1205, 1198, 1199, 1206, 1201, 1207, 1208, 1208, 1209, + 1202, 1210, 1211, 1212, 1213, 1207, 0, 1210, 1212, 1214, + 1213, 1221, 1206, 1222, 1209, 1214, 1215, 1215, 1216, 1216, - 1220, 1222, 1222, 1223, 1225, 1221, 1224, 1226, 1227, 1225, - 1230, 1228, 1218, 1219, 1224, 1220, 1228, 1228, 1232, 1229, - 1233, 1226, 1234, 1223, 1229, 1229, 1236, 1227, 1231, 1231, - 1230, 1234, 1237, 1235, 1239, 1238, 1240, 1232, 1235, 1233, - 1239, 1240, 1241, 1242, 1243, 1236, 1246, 1247, 1244, 1242, - 1245, 1248, 1237, 1238, 1244, 1249, 1245, 1250, 1251, 0, - 1252, 1253, 1253, 1243, 1254, 1246, 1247, 1254, 1241, 1255, - 1248, 1250, 1256, 1256, 1249, 1252, 1258, 1257, 1259, 1251, - 1258, 1255, 1257, 1260, 1261, 1264, 1265, 1262, 1266, 1262, - 1264, 1259, 1260, 1262, 1267, 1268, 1268, 1261, 1269, 1270, + 1218, 1218, 1219, 1211, 1220, 1223, 1219, 1222, 1224, 1221, + 1225, 1225, 1226, 1220, 1227, 1224, 1228, 1229, 1230, 1231, + 1223, 1228, 1227, 1232, 1231, 1231, 1233, 1237, 1232, 1232, + 1235, 1229, 1226, 1234, 1234, 1236, 1237, 1230, 1238, 1239, + 1240, 1241, 1242, 1238, 1244, 1243, 1233, 1245, 1242, 1235, + 1243, 1247, 1246, 1245, 1236, 1248, 1249, 1247, 1239, 1241, + 1240, 1248, 1250, 1251, 1252, 1253, 1254, 1256, 1256, 1255, + 1244, 1246, 0, 1257, 1258, 1249, 1257, 1259, 1259, 1253, + 1260, 1250, 1251, 1252, 1255, 1260, 1258, 1254, 1261, 1262, + 1263, 1264, 1261, 1267, 1265, 1268, 1265, 1269, 1267, 1263, - 1273, 1265, 1275, 1269, 1270, 1271, 1262, 1272, 1266, 1271, - 1267, 1272, 1274, 1276, 1277, 1277, 1279, 1281, 1282, 1276, - 1273, 1284, 1275, 1282, 1283, 1283, 1285, 1284, 1287, 1287, - 1274, 1291, 1289, 1292, 1279, 1289, 1290, 1290, 1281, 1294, - 1295, 1296, 1294, 1297, 1297, 1299, 1285, 1291, 1298, 1292, - 1296, 1300, 1301, 1302, 1302, 1303, 1304, 1301, 1305, 1308, - 1295, 1306, 1306, 1298, 1307, 1310, 1299, 1309, 1311, 1311, - 1300, 1304, 1309, 1303, 1313, 1312, 1315, 1308, 1307, 1312, - 1310, 1314, 1314, 1305, 1316, 1317, 1318, 1319, 1322, 1317, - 1321, 1321, 1319, 1323, 1313, 1316, 1324, 1325, 1315, 1326, + 1265, 1276, 1262, 1270, 1264, 1271, 1271, 1272, 1277, 1273, + 1268, 1274, 1272, 1265, 1273, 1274, 1275, 1269, 1278, 1270, + 1275, 1276, 1279, 1280, 1280, 1282, 1277, 1284, 1279, 1285, + 1286, 1286, 1288, 1287, 1285, 1290, 1290, 1292, 1278, 1287, + 1292, 1293, 1293, 1282, 1294, 1295, 1297, 1298, 1284, 1297, + 1299, 1301, 1288, 1300, 1300, 1302, 1303, 1304, 1305, 1299, + 1294, 1295, 1304, 1306, 1306, 1307, 1301, 1298, 1309, 1308, + 1310, 1310, 1305, 1311, 1312, 1303, 1302, 1313, 1317, 1314, + 1315, 1315, 1313, 1307, 1308, 1316, 1319, 1311, 1320, 1316, + 1318, 1318, 1312, 1309, 1314, 1322, 1321, 1323, 1317, 1320, - 1327, 1327, 1329, 1328, 1331, 1318, 1322, 1323, 1328, 1330, - 1333, 1325, 1332, 1331, 1335, 1324, 1324, 1332, 1334, 1335, - 1334, 1336, 1329, 1337, 1326, 1338, 1340, 1336, 1342, 1330, - 1333, 1338, 1341, 1341, 1345, 1343, 1346, 1347, 1347, 1345, - 1340, 1343, 1349, 1337, 1348, 1348, 1350, 1342, 1351, 1352, - 1353, 1353, 1352, 1354, 1355, 1356, 1349, 1361, 1356, 0, - 1346, 1356, 1357, 1351, 1350, 1354, 1358, 1359, 1357, 1362, - 1360, 1358, 1362, 1356, 1355, 1360, 1359, 1363, 1369, 1364, - 1365, 1365, 1361, 1363, 1364, 1366, 1366, 1367, 1370, 1368, - 1371, 1369, 1372, 1367, 1368, 1373, 1374, 1375, 1373, 1376, + 1321, 1326, 1323, 1325, 1325, 1328, 1327, 1329, 1319, 1330, + 1331, 1331, 1332, 1333, 1322, 1334, 1337, 1332, 1335, 1326, + 1327, 1329, 1341, 1336, 1328, 1328, 1344, 1335, 1336, 1338, + 1346, 1338, 1339, 1333, 1330, 1334, 1337, 1339, 1340, 1342, + 1344, 1350, 1341, 1354, 1340, 1342, 1345, 1345, 1347, 1346, + 1349, 1351, 1351, 1353, 1347, 1349, 1352, 1352, 1355, 1356, + 1358, 1354, 1356, 1357, 1357, 1350, 1359, 1353, 1365, 1361, + 1363, 1360, 1358, 1355, 1360, 1361, 1362, 1360, 1364, 1363, + 1375, 1362, 1366, 1364, 1367, 1366, 1359, 1368, 1373, 1360, + 1367, 1374, 1368, 1365, 1369, 1369, 1370, 1370, 1371, 1375, - 1378, 1377, 1374, 1375, 1376, 1379, 1370, 1377, 1382, 1371, - 1379, 1381, 1372, 1380, 1380, 1383, 1381, 1384, 1385, 1386, - 1390, 1389, 1387, 1378, 1391, 1388, 1382, 1389, 1392, 1393, - 1395, 1395, 1385, 1386, 1387, 1383, 1396, 1384, 1388, 1399, - 1390, 1397, 1392, 1400, 1391, 1401, 1397, 1398, 1398, 1402, - 1393, 1403, 1405, 1404, 1399, 1407, 1396, 1400, 1411, 1405, - 1403, 1406, 1409, 1412, 1413, 1413, 1412, 1402, 1404, 1401, - 1406, 1407, 1415, 1406, 1414, 1414, 1416, 1409, 1417, 1418, - 1418, 1417, 1409, 1411, 1415, 1419, 1420, 1421, 1422, 1423, - 1424, 1425, 1421, 1422, 1416, 1426, 1432, 1429, 1419, 1431, + 1372, 1373, 1376, 1377, 1371, 1372, 1377, 1378, 1379, 1374, + 1380, 1381, 1382, 1378, 1379, 1380, 1383, 1381, 1384, 1384, + 1385, 1383, 1376, 1386, 1387, 1385, 1388, 1391, 1389, 1390, + 1393, 1394, 1392, 1395, 1396, 1382, 1393, 1397, 1405, 1391, + 1400, 1386, 1389, 1390, 1387, 1392, 1388, 1401, 1396, 1399, + 1399, 1394, 1401, 1395, 1402, 1402, 1403, 1406, 1397, 1404, + 1400, 1407, 1405, 1408, 1411, 1409, 1413, 1410, 1415, 0, + 1407, 1403, 1409, 1404, 1416, 1406, 1410, 1416, 1408, 1410, + 1411, 1413, 1417, 1417, 1418, 1418, 1413, 1419, 1420, 1421, + 1422, 1422, 1421, 1415, 1423, 1424, 1425, 1426, 1427, 1419, - 1425, 1427, 1428, 1429, 1433, 1420, 1424, 1434, 1423, 1432, - 1427, 1428, 1435, 1427, 1426, 1430, 1430, 1436, 1438, 1431, - 1439, 1434, 1433, 1440, 1440, 1441, 1442, 1443, 1435, 1436, - 1444, 1444, 1443, 1446, 1447, 1442, 1448, 1445, 1439, 1451, - 1453, 1441, 1449, 1438, 1452, 1444, 1445, 1449, 1449, 1445, - 1452, 1446, 1460, 1451, 1448, 1447, 1454, 1454, 1453, 1455, - 1461, 1456, 1457, 1458, 1462, 1455, 1456, 1463, 1457, 1458, - 1462, 1465, 1460, 1464, 1461, 1467, 1464, 1465, 1469, 1470, - 1463, 1471, 1464, 1467, 1472, 1480, 1473, 1474, 1475, 1471, - 1476, 1477, 1477, 1472, 1479, 1478, 1481, 1469, 1470, 1473, + 1428, 1425, 1426, 1429, 1430, 1433, 1420, 1423, 1435, 1431, + 1432, 1433, 1429, 1436, 1424, 1437, 1428, 1427, 1431, 1432, + 1438, 1431, 1439, 1430, 1434, 1434, 1436, 1440, 1435, 1442, + 1443, 1444, 1444, 1437, 1438, 1445, 1446, 1447, 1439, 1440, + 1448, 1448, 1447, 1450, 1449, 1446, 1451, 1452, 1443, 1455, + 1457, 1445, 1453, 1449, 1442, 1448, 1449, 1453, 1453, 1460, + 1456, 1450, 1464, 1455, 1460, 1452, 1456, 1451, 1457, 1458, + 1458, 1459, 1461, 1462, 1465, 1466, 1467, 1459, 1461, 1462, + 1473, 1466, 1464, 1468, 1469, 1471, 1468, 1474, 1465, 1467, + 1469, 1476, 1468, 1471, 1475, 1477, 1478, 1479, 1480, 1473, - 1474, 1478, 1475, 1482, 1476, 1480, 1483, 1479, 1485, 1484, - 1486, 1487, 1490, 1477, 1481, 1484, 1489, 1489, 1492, 1483, - 1491, 1496, 1482, 1492, 1491, 1495, 1486, 1498, 1493, 1487, - 1485, 1494, 1490, 1493, 1495, 1500, 1494, 1499, 1499, 1501, - 1502, 1504, 1498, 1505, 1496, 1503, 1503, 1508, 1506, 1507, - 1505, 1501, 1509, 1511, 1500, 1504, 1510, 1512, 1513, 1502, - 1506, 1507, 1510, 0, 1513, 1511, 1508, 1514, 1514, 1518, - 1515, 1519, 1509, 1515, 1518, 1512, 1516, 1516, 1520, 1522, - 1519, 1521, 1521, 1523, 1520, 1523, 1524, 1525, 1526, 1524, - 1527, 1522, 1529, 1528, 1530, 1534, 1533, 1529, 1532, 1535, + 1476, 1482, 1475, 1481, 1481, 1484, 1474, 1482, 1477, 1478, + 1483, 1479, 1480, 1485, 1486, 1487, 1483, 1488, 1484, 1490, + 1489, 1491, 1492, 1494, 1494, 1481, 1489, 1495, 0, 1501, + 1488, 1496, 1486, 1485, 1487, 1496, 1505, 1491, 1497, 1498, + 1492, 1490, 1500, 1497, 1498, 1499, 1503, 1495, 1504, 1504, + 1499, 1500, 1501, 1506, 1507, 1505, 1508, 1508, 1509, 1510, + 1513, 1503, 1511, 1512, 1514, 1506, 1510, 1517, 1516, 1524, + 1515, 1518, 1509, 1507, 1511, 1512, 1515, 1518, 1524, 1513, + 1516, 1519, 1519, 1520, 1514, 1517, 1520, 1521, 1521, 1523, + 1525, 1526, 1526, 1527, 1523, 1528, 1525, 1528, 1529, 1530, - 1531, 1533, 1539, 1530, 1534, 1536, 1540, 1525, 1527, 1542, - 1526, 1528, 1531, 1532, 1537, 1537, 1538, 1534, 1541, 1535, - 1536, 1544, 1538, 1539, 1543, 1540, 1543, 1545, 1545, 1542, - 1546, 1546, 1547, 1547, 1541, 1544, 1548, 1544, 1549, 1549, - 1550, 1550, 1551, 1552, 1553, 1553, 1554, 1555, 1556, 1558, - 1554, 1556, 1559, 1555, 1560, 1558, 1548, 1561, 1562, 1566, - 1560, 1562, 0, 1551, 1552, 1563, 1563, 1564, 1564, 1565, - 1559, 1566, 1566, 1566, 1567, 1565, 1568, 1569, 1566, 1570, - 1572, 1573, 1561, 1569, 1578, 1572, 1572, 1574, 1576, 1574, - 1575, 1577, 1579, 1578, 1567, 1573, 1568, 1577, 1580, 1570, + 1531, 1529, 1532, 1533, 1534, 1527, 1535, 1538, 1539, 1534, + 1537, 1536, 1538, 1540, 1541, 1535, 1544, 1539, 1543, 1530, + 1532, 1533, 1531, 1536, 1543, 1537, 1542, 1542, 1545, 1541, + 1539, 1547, 1546, 1540, 1548, 1553, 1548, 1544, 1549, 1550, + 1550, 1551, 1551, 1552, 1552, 1554, 1554, 1545, 1546, 1555, + 1555, 1547, 1549, 1556, 1549, 1553, 1557, 1558, 1558, 1559, + 1560, 1561, 1563, 1559, 1561, 1564, 1560, 1565, 1563, 1566, + 1568, 1568, 1567, 1565, 1556, 1567, 1570, 1557, 1569, 1569, + 1572, 1573, 1570, 1564, 1571, 1574, 1575, 1577, 1578, 1581, + 1585, 1574, 1577, 1577, 1566, 1584, 1571, 1571, 1571, 1580, - 1582, 1575, 1584, 1576, 1581, 1581, 1583, 1583, 1585, 1586, - 1586, 1588, 1579, 1587, 1587, 1591, 1591, 1592, 1593, 1580, - 1595, 1600, 1584, 1596, 1598, 1598, 1582, 1593, 1597, 1595, - 1585, 1588, 1599, 1601, 1597, 1603, 1600, 1602, 1604, 1604, - 1601, 1605, 1592, 1606, 1596, 1608, 1602, 1615, 1609, 1610, - 1608, 1611, 1615, 1599, 1609, 1618, 1612, 1613, 1611, 1606, - 1617, 1603, 1612, 1613, 1614, 1614, 1616, 1605, 1620, 1610, - 1619, 1620, 1621, 1622, 1618, 1616, 1623, 1623, 1624, 1626, - 1617, 1625, 1619, 1627, 1624, 1629, 1636, 1627, 1630, 1631, - 1621, 1633, 1634, 0, 1626, 1636, 1634, 1637, 1637, 1622, + 1572, 1573, 1578, 1571, 1581, 1579, 1575, 1579, 1582, 1583, + 1580, 1585, 1586, 1586, 1582, 1584, 1587, 1589, 1583, 1588, + 1588, 1590, 1591, 1591, 1592, 1592, 1593, 1596, 1596, 1597, + 1598, 1600, 1601, 1603, 1603, 1602, 1604, 1589, 1606, 1598, + 1600, 1602, 1587, 1590, 1605, 1606, 1593, 1607, 1608, 1609, + 1609, 1610, 1611, 1601, 1597, 1613, 1607, 1604, 1614, 1605, + 1613, 1615, 1616, 1622, 1614, 1617, 1618, 1623, 1611, 1616, + 1621, 1617, 1618, 1620, 1608, 1619, 1619, 1610, 1620, 1621, + 1624, 1615, 1625, 1622, 1626, 1625, 1623, 1627, 1628, 1628, + 1629, 1630, 1624, 1631, 1632, 1634, 1629, 1635, 1632, 0, - 1635, 1625, 1639, 1627, 1631, 1629, 1635, 1630, 1638, 1641, - 1633, 1642, 1638, 1639, 1640, 1640, 1643, 1644, 1639, 1645, - 1646, 1647, 1644, 1648, 1649, 1642, 1661, 1647, 0, 1649, - 1641, 1650, 1650, 1651, 1651, 1643, 1654, 1652, 1648, 1645, - 1646, 1652, 1655, 1656, 1656, 1654, 1657, 1657, 1663, 1658, - 1659, 1660, 1661, 1655, 1658, 1658, 1659, 1660, 1655, 1662, - 1663, 1664, 1666, 1668, 1662, 1667, 1669, 1664, 1671, 1667, - 1670, 1672, 1673, 1675, 1666, 1668, 1670, 1672, 1676, 1679, - 1683, 1677, 1679, 1684, 1673, 1675, 1677, 1680, 1680, 1684, - 1671, 1669, 1681, 1681, 1682, 1682, 1685, 1676, 1686, 1687, + 1638, 1639, 1626, 1636, 1640, 1639, 1642, 1642, 1631, 1646, + 1640, 1630, 1641, 1627, 1632, 1634, 1635, 1644, 1636, 1638, + 1643, 1641, 1645, 1645, 1643, 1647, 1648, 1649, 1644, 1650, + 1646, 1651, 1649, 1644, 1652, 1653, 1654, 1655, 1655, 1647, + 1652, 1654, 1656, 1656, 1657, 1648, 1659, 1660, 1657, 1650, + 1653, 1651, 1661, 1662, 1662, 1659, 1663, 1663, 1660, 1664, + 1665, 1666, 1667, 1660, 1664, 1664, 1665, 1666, 1668, 1669, + 1670, 1672, 1661, 1668, 1673, 1674, 1670, 1675, 1673, 1676, + 1678, 1669, 1677, 1672, 1679, 1676, 1678, 1674, 1667, 1681, + 1682, 1685, 1683, 1689, 1685, 1692, 1679, 1683, 1686, 1686, - 1683, 1688, 1685, 1686, 1690, 1687, 1693, 1696, 1692, 1690, - 1688, 1692, 1694, 1694, 1697, 1698, 1699, 1699, 1693, 1696, - 1698, 1700, 1701, 1702, 1703, 1703, 1697, 1701, 1702, 1704, - 1700, 1705, 1706, 1707, 1708, 0, 1709, 1710, 1708, 1711, - 1705, 1709, 1714, 1710, 1713, 1713, 1715, 1716, 1716, 1704, - 1706, 1719, 1707, 1711, 1717, 1715, 1713, 1718, 1721, 1720, - 1714, 1724, 1724, 1717, 1720, 1726, 1727, 1728, 1726, 1718, - 1730, 1721, 1719, 1731, 1732, 1733, 1734, 1734, 1737, 1735, - 1732, 1735, 1727, 1728, 1739, 1730, 1737, 1731, 1736, 1736, - 1740, 1739, 1733, 1741, 1741, 1742, 1743, 1744, 1747, 1745, + 1692, 1681, 1675, 0, 1677, 1687, 1687, 1688, 1688, 1682, + 1690, 1691, 1693, 1689, 1694, 1696, 1690, 1691, 1693, 1698, + 1696, 1699, 1698, 1694, 1700, 1700, 1702, 1703, 1706, 1704, + 1705, 1705, 1710, 1699, 1704, 1707, 1708, 1706, 1702, 1703, + 1707, 1708, 1709, 1709, 1711, 1712, 1713, 1714, 1717, 1715, + 1716, 1714, 1710, 1711, 1715, 1720, 1716, 1719, 1719, 1721, + 1722, 1722, 1717, 1712, 1724, 1713, 1723, 1725, 1721, 1719, + 1727, 1732, 1726, 1720, 1732, 1723, 1724, 1726, 1730, 1730, + 1733, 1734, 0, 1727, 1736, 1738, 1737, 1739, 1725, 1740, + 1740, 1738, 1741, 1746, 1741, 1743, 1733, 1734, 1745, 1736, - 1746, 1748, 1749, 1751, 1742, 0, 1752, 1754, 1749, 1744, - 1740, 1745, 1746, 1753, 1753, 1755, 1748, 1743, 1752, 1756, - 1758, 1749, 1756, 1751, 1747, 1754, 1757, 1760, 1761, 1762, - 1761, 1757, 1760, 1763, 1764, 1755, 1766, 1768, 1763, 1769, - 1758, 1764, 1770, 1772, 1771, 1766, 1771, 1762, 1769, 1774, - 1775, 1774, 1776, 1776, 1770, 1768, 1777, 1779, 1778, 1779, - 1780, 1781, 1772, 1778, 1775, 1780, 1781, 1782, 1783, 1784, - 1786, 1785, 1787, 1789, 1793, 1784, 1785, 1790, 1791, 1791, - 1787, 1794, 1777, 1786, 1795, 1782, 1792, 1792, 1783, 1793, - 1795, 1790, 1789, 1796, 1797, 1798, 1797, 1800, 1796, 1799, + 1737, 1742, 1742, 1743, 1739, 1745, 1747, 1747, 1748, 1749, + 1750, 1751, 1752, 1746, 1753, 1755, 1754, 1748, 1757, 1760, + 1758, 1755, 1750, 1751, 1752, 1759, 1759, 1761, 1764, 0, + 1749, 1754, 1758, 1762, 1755, 1768, 1762, 1760, 1757, 1763, + 1753, 1766, 1772, 1767, 1763, 1767, 1766, 1761, 1764, 1769, + 1770, 1772, 1774, 1768, 1769, 1775, 1776, 1770, 1777, 1778, + 1777, 1780, 1781, 1780, 1775, 1782, 1782, 1783, 1776, 1784, + 1774, 1785, 1786, 1785, 1784, 1787, 1781, 1786, 1778, 1788, + 1787, 1789, 1790, 1792, 1791, 1795, 1793, 1858, 1790, 1791, + 1800, 1796, 1799, 1783, 1793, 1858, 1792, 1788, 1797, 1797, - 1799, 1794, 1806, 1798, 1801, 1801, 1802, 1802, 1803, 1800, - 1804, 1798, 1805, 1816, 1805, 1807, 1808, 1803, 1809, 1804, - 1807, 1807, 1804, 1806, 1811, 1808, 1812, 1813, 1815, 1817, - 1809, 1812, 1813, 1816, 1818, 1818, 1811, 1819, 1817, 1820, - 1821, 1815, 1825, 1827, 1822, 1823, 1828, 1826, 1829, 1835, - 1836, 1828, 1837, 1829, 1825, 1819, 1821, 1820, 1822, 1826, - 1823, 1832, 1834, 1827, 1838, 1836, 1839, 1832, 1834, 1841, - 1837, 1843, 1835, 1840, 1840, 1839, 1842, 1842, 1841, 1844, - 1832, 1845, 1846, 1844, 1852, 1848, 1845, 1847, 1849, 1838, - 1843, 1848, 1847, 1847, 1849, 1846, 1850, 1851, 1857, 1850, + 1801, 1789, 1798, 1798, 1795, 1796, 1801, 1799, 1802, 1803, + 1800, 1803, 1804, 1802, 1805, 1805, 1809, 1806, 1807, 1807, + 1804, 1808, 1808, 1810, 1811, 1809, 1811, 1812, 1804, 1806, + 1814, 1813, 1810, 1815, 1817, 1810, 1813, 1813, 1818, 1814, + 1821, 1822, 1819, 1818, 1825, 1815, 1817, 1819, 1812, 1823, + 1824, 1824, 1826, 1821, 1828, 1827, 1845, 1829, 1823, 1833, + 1834, 1822, 1825, 1831, 1832, 1834, 1842, 1844, 1828, 1835, + 1826, 1827, 1829, 1836, 1835, 1831, 1832, 1839, 1841, 1833, + 1843, 1845, 1836, 1839, 1841, 1844, 1847, 1847, 1846, 1842, + 1848, 1849, 1849, 1850, 1851, 1843, 1839, 1846, 1851, 1848, - 1855, 1855, 1856, 1856, 1852, 1851, 1860, 1857, 1858, 1858, - 1859, 1859, 1861, 1862, 1870, 1863, 1873, 1856, 1860, 1862, - 1863, 1864, 1864, 1865, 1865, 1869, 1866, 1867, 1856, 1869, - 1861, 1866, 1871, 1867, 1870, 1874, 1871, 1875, 1876, 1877, - 1874, 1873, 1879, 1878, 1877, 1880, 1880, 1881, 1882, 1883, - 1884, 1881, 1885, 1876, 1883, 1886, 1888, 1887, 1879, 1889, - 1875, 1878, 1887, 1882, 1885, 1890, 1890, 1892, 1893, 1888, - 1894, 1895, 1896, 1897, 1886, 1892, 1884, 1889, 1898, 1899, - 1900, 1906, 1902, 1903, 1903, 1904, 1932, 1893, 1904, 1894, - 1905, 1899, 1897, 1907, 1895, 1906, 1896, 1902, 1911, 1898, + 1852, 1853, 1854, 1855, 1856, 1852, 1859, 1854, 1854, 1855, + 1856, 1867, 1850, 1857, 1853, 1864, 1857, 1862, 1862, 1863, + 1863, 1865, 1865, 1867, 1864, 1868, 1859, 1866, 1866, 1869, + 1877, 1870, 1871, 1871, 1863, 1869, 1870, 1872, 1872, 1873, + 1874, 1880, 1882, 1868, 1873, 1863, 1874, 1876, 1878, 1881, + 1877, 1876, 1878, 1883, 1881, 1884, 1885, 1886, 1887, 1887, + 1884, 1889, 1891, 1888, 1890, 1882, 1880, 1888, 1883, 1890, + 1892, 1893, 1894, 1886, 1885, 1896, 1889, 1894, 1895, 1897, + 1897, 1899, 1892, 1900, 1901, 1902, 1903, 1904, 1891, 1899, + 1893, 1895, 1905, 1896, 1907, 1906, 1909, 1910, 1910, 1912, - 1932, 1900, 1912, 1905, 1908, 1908, 1907, 1909, 1909, 1910, - 1910, 1913, 1913, 1911, 1914, 1912, 1915, 1915, 1919, 1916, - 1918, 1920, 1921, 1914, 1916, 1918, 1914, 1922, 1922, 1923, - 1923, 1924, 1925, 1925, 1921, 1926, 1927, 1927, 1919, 1928, - 1929, 1920, 1930, 1930, 1934, 1929, 1931, 1931, 1933, 1935, - 1924, 1937, 1939, 1926, 1928, 1941, 1937, 1933, 1934, 1938, - 1938, 1940, 1940, 1942, 1943, 1944, 1944, 1943, 1935, 1942, - 1946, 1939, 1947, 1941, 1945, 1945, 1948, 1949, 1949, 1951, - 1952, 1944, 1953, 1956, 1954, 1955, 1955, 1947, 1954, 1946, - 1957, 1958, 1960, 1960, 1961, 1948, 1963, 1953, 1964, 1951, + 1913, 1911, 1900, 1901, 1911, 1914, 1904, 1906, 1902, 1918, + 1903, 1909, 1912, 1905, 1913, 1907, 1915, 1915, 1914, 1916, + 1916, 1917, 1917, 1919, 1918, 1920, 1920, 1923, 1921, 1922, + 1922, 1926, 1923, 1925, 1927, 1928, 1919, 1921, 1925, 1931, + 1921, 1929, 1929, 1930, 1930, 1932, 1932, 1928, 1933, 1934, + 1934, 1926, 1935, 0, 1927, 1936, 1937, 1937, 1931, 1939, + 1936, 1938, 1938, 1940, 1941, 1942, 1933, 1935, 1946, 1944, + 1945, 1945, 1940, 1939, 1944, 1947, 1947, 1948, 1941, 1949, + 1950, 1951, 1951, 1950, 1942, 1949, 1953, 1946, 1952, 1952, + 1955, 1954, 1956, 1956, 1958, 1948, 1959, 1951, 1960, 1961, - 1962, 1968, 1956, 1952, 1966, 1957, 1958, 1962, 1965, 1965, - 1963, 1970, 1973, 1966, 1961, 1967, 1974, 1967, 1975, 1977, - 1971, 1968, 1972, 1970, 1964, 1971, 1976, 1972, 1979, 1974, - 1980, 1976, 1981, 1979, 1982, 1980, 1983, 1973, 1984, 1975, - 1982, 1985, 1987, 1986, 1984, 1977, 1985, 1981, 1986, 1988, - 1989, 1990, 1991, 1998, 1992, 1993, 0, 1983, 1994, 1989, - 1990, 1991, 1988, 1992, 1994, 1995, 1996, 1987, 2000, 1993, - 1996, 1995, 2002, 1998, 2001, 2001, 2004, 2000, 2002, 2003, - 2003, 2006, 2010, 2007, 2008, 2008, 2009, 2013, 2003, 2014, - 2012, 2010, 2017, 2015, 2019, 2017, 2004, 2006, 2004, 2007, + 1962, 1962, 1963, 1961, 1968, 1953, 1954, 1964, 1965, 1955, + 1967, 1967, 1970, 1960, 1958, 1971, 1972, 1972, 1969, 1959, + 1973, 1963, 1964, 1965, 1968, 1969, 1970, 1975, 1974, 1973, + 1974, 1977, 1978, 1979, 1980, 1981, 1982, 1978, 1979, 1983, + 1984, 1971, 1990, 1977, 1983, 1986, 1987, 1975, 1981, 1988, + 1986, 1987, 1989, 1994, 1991, 1995, 1992, 1982, 1989, 1980, + 1991, 1992, 1993, 1990, 1988, 1997, 1984, 1993, 1995, 1996, + 1998, 1999, 1996, 2000, 1997, 2001, 2006, 2002, 1994, 1998, + 1999, 2003, 2000, 2002, 2004, 2008, 2010, 2003, 2004, 2001, + 2009, 2009, 2010, 2012, 2008, 2014, 2006, 2011, 2011, 2017, - 2020, 2009, 2012, 2013, 2014, 2015, 2018, 2021, 2021, 2022, - 2022, 2018, 2020, 2026, 2019, 2024, 2024, 2025, 2026, 2027, - 2025, 2028, 2029, 2029, 2030, 2027, 2033, 2028, 2031, 2031, - 2032, 2034, 2035, 2035, 2038, 2037, 2040, 2038, 2030, 2037, - 2033, 2040, 2032, 2039, 2039, 2041, 2042, 2043, 2044, 2044, - 2034, 2043, 2045, 2047, 2041, 2048, 2049, 2050, 2047, 2051, - 2052, 2056, 2053, 2051, 2054, 2045, 2042, 2053, 2055, 2058, - 2054, 2050, 2059, 2061, 2055, 2048, 2049, 2059, 2060, 2056, - 2052, 2061, 2065, 2068, 2060, 2058, 2062, 0, 2062, 2066, - 2066, 2067, 2069, 2069, 2067, 2071, 2065, 2072, 2073, 2071, + 2015, 2016, 2016, 2018, 2021, 2020, 2011, 2022, 2027, 2023, + 2042, 2014, 2018, 2012, 2017, 2012, 2015, 2020, 2028, 2026, + 2021, 2023, 2022, 2025, 2026, 2070, 2025, 2070, 2027, 2042, + 2028, 2029, 2029, 2030, 2030, 2032, 2032, 2033, 2034, 2035, + 2033, 2036, 2038, 2034, 0, 2035, 2040, 2036, 2037, 2037, + 2039, 2039, 2041, 2043, 2043, 2045, 2038, 2046, 2040, 2045, + 2046, 2047, 2047, 2048, 2049, 2050, 2041, 2051, 2048, 2052, + 2052, 2051, 2055, 2049, 2053, 2056, 2057, 2055, 2058, 2059, + 2060, 2061, 2062, 2059, 2063, 2050, 2061, 2053, 2062, 2064, + 2063, 2068, 2058, 2066, 2067, 2056, 2057, 2068, 2069, 2067, - 2074, 2074, 2075, 2072, 2078, 2078, 2080, 2082, 2086, 2068, - 2073, 2075, 2083, 2086, 2087, 2088, 2096, 2089, 2090, 2090, - 2088, 2082, 2089, 2094, 2080, 2092, 2092, 2097, 2083, 2094, - 2095, 2095, 2096, 2098, 2100, 2101, 2102, 2102, 2098, 2104, - 2087, 2106, 2107, 2110, 2105, 2109, 2109, 2101, 2104, 2097, - 2105, 2111, 2120, 2100, 2113, 2113, 0, 2107, 2115, 2106, - 2114, 2114, 2110, 2115, 2117, 2116, 2117, 2118, 2119, 2111, - 2116, 2121, 2120, 2122, 2122, 2126, 2121, 2123, 2123, 2124, - 2124, 2118, 2119, 2125, 2125, 2127, 2128, 2126, 2129, 2129, - 2131, 2128, 2130, 2130, 2132, 2133, 2134, 2135, 2135, 2136, + 2060, 2073, 2074, 2074, 2076, 2075, 2069, 2064, 2075, 2066, + 2077, 2077, 2079, 2080, 2081, 2073, 2079, 2082, 2082, 2080, + 2083, 2086, 2086, 2088, 2090, 2095, 2081, 2091, 2094, 2083, + 2076, 2096, 2097, 2094, 2098, 2098, 2096, 2097, 2090, 2100, + 2100, 2088, 2102, 2091, 2103, 2103, 2104, 2105, 2102, 2106, + 2112, 2095, 2108, 2109, 2106, 2110, 2110, 2113, 2114, 2112, + 2115, 2118, 2104, 2113, 2119, 2109, 2117, 2117, 2125, 2105, + 2125, 2108, 2121, 2121, 2123, 2115, 2114, 2122, 2122, 2123, + 2118, 2124, 2119, 2126, 2127, 2128, 2124, 2129, 2130, 2130, + 2131, 2131, 2129, 2132, 2132, 2133, 2133, 2126, 2127, 2134, - 2137, 2137, 2131, 2127, 2138, 2138, 2132, 2139, 2141, 2140, - 2142, 2144, 2134, 2145, 2148, 2133, 2140, 2143, 2136, 2139, - 2141, 2149, 2143, 2146, 2146, 2147, 2150, 2151, 2152, 2154, - 2142, 2144, 2155, 2145, 2147, 2153, 2153, 2156, 2154, 2150, - 2148, 2149, 2152, 2158, 2159, 2160, 2161, 2155, 2162, 2161, - 2163, 2151, 2156, 2164, 2174, 2163, 2165, 2165, 2164, 2166, - 2166, 2158, 2162, 2167, 2167, 2172, 2159, 2173, 2160, 2169, - 2169, 2171, 2171, 2174, 2176, 2177, 2178, 2179, 2173, 2180, - 2181, 2182, 2186, 2172, 2183, 2183, 2185, 2185, 2180, 2188, - 2188, 2192, 2187, 2177, 2176, 2193, 2190, 2179, 2178, 2182, + 2135, 2136, 2137, 2137, 2139, 2128, 2136, 2138, 2138, 2140, + 2141, 2134, 2142, 2143, 2143, 2144, 2139, 2148, 2135, 2145, + 2145, 2140, 2146, 2146, 2147, 2149, 2150, 2151, 2142, 2148, + 2141, 2152, 2149, 2153, 2144, 2147, 2152, 2154, 2150, 2155, + 2155, 2156, 2157, 2158, 2164, 2159, 2160, 2151, 2161, 2167, + 2156, 2162, 2162, 2153, 2165, 2163, 2168, 2154, 2159, 2164, + 2169, 2171, 2161, 2158, 2163, 2174, 2174, 2167, 2157, 2165, + 2160, 2170, 2172, 2181, 2170, 2171, 2173, 2172, 2168, 2175, + 2175, 2173, 2182, 2169, 2176, 2176, 2178, 2178, 2180, 2180, + 2183, 2181, 2185, 2182, 2187, 2186, 2189, 2188, 2190, 2192, - 2181, 2187, 2191, 2191, 2186, 2190, 2195, 2194, 2196, 2192, - 2197, 2198, 2199, 2193, 2194, 2200, 2200, 2201, 2201, 2202, - 2203, 2195, 2204, 2205, 2206, 2202, 2196, 2198, 2197, 2206, - 2207, 2199, 2208, 2210, 2209, 2210, 2215, 2204, 2203, 2209, - 2211, 2211, 2205, 2212, 2217, 2212, 2213, 2213, 2218, 2219, - 2207, 2220, 2208, 2217, 2221, 2215, 2222, 2229, 2223, 2221, - 2226, 2219, 2227, 2228, 2228, 2227, 2230, 2218, 2231, 2231, - 2232, 2220, 2229, 2234, 2232, 2235, 2222, 2223, 2237, 2235, - 2226, 2236, 2236, 2239, 2230, 2240, 2241, 2241, 2234, 2243, - 2245, 2237, 2244, 2244, 2246, 2246, 2248, 2247, 2249, 2249, + 2192, 2191, 2194, 2194, 2195, 2189, 2196, 2197, 2197, 2183, + 2201, 2199, 2185, 2186, 2202, 2196, 2187, 2188, 2190, 2191, + 2199, 2200, 2200, 2203, 2204, 2205, 2195, 2206, 2201, 2208, + 2203, 2207, 2202, 2209, 2209, 2210, 2210, 2212, 2211, 2204, + 2214, 2213, 2216, 2205, 2211, 2206, 2215, 2207, 2208, 2217, + 0, 2215, 2218, 2220, 2220, 2212, 2213, 2218, 2219, 2214, + 2219, 2221, 2216, 2221, 2222, 2222, 2224, 2226, 2227, 2217, + 2228, 2229, 2230, 2231, 2239, 2232, 2226, 2230, 2235, 2256, + 2236, 2238, 2228, 2236, 2256, 2224, 2241, 2227, 2237, 2237, + 2241, 2229, 2239, 2231, 2232, 2243, 2238, 2244, 2235, 2240, - 2255, 2243, 2247, 2239, 2257, 2240, 2254, 2254, 2248, 2245, - 2256, 2256, 2258, 2262, 2259, 2260, 2268, 2257, 2261, 2261, - 2264, 2264, 2255, 2259, 2260, 2258, 2267, 2269, 2262, 2270, - 2268, 2267, 2269, 2271, 2272, 2275, 2273, 2270, 2278, 2283, - 2276, 2277, 2281, 2272, 2273, 2276, 2277, 2279, 2279, 2281, - 2275, 2282, 2271, 2278, 2280, 2280, 2282, 2283, 2284, 2285, - 2288, 2286, 2287, 2287, 2289, 2285, 2286, 2290, 2290, 2289, - 2291, 2291, 2294, 2295, 2295, 2288, 2284, 2296, 2297, 0, - 2296, 2298, 2299, 2297, 2297, 2294, 2298, 2299, 2300, 2301, - 2302, 2303, 2304, 2301, 2300, 2302, 2305, 2306, 2307, 2312, + 2240, 2244, 2245, 2245, 2246, 2248, 2249, 2250, 2250, 2252, + 2243, 2253, 2253, 2254, 2255, 2255, 2257, 2246, 2258, 2258, + 2264, 2252, 2263, 2263, 2266, 2248, 2249, 2267, 2257, 2265, + 2265, 2271, 2254, 0, 2268, 2269, 2276, 2266, 2270, 2270, + 2267, 2276, 2264, 2268, 2269, 2277, 2271, 2273, 2273, 2278, + 2277, 2279, 2280, 2281, 2283, 2282, 2279, 0, 2285, 2288, + 2280, 2286, 2283, 2278, 2282, 2287, 2286, 2289, 2289, 2293, + 2287, 2291, 2281, 2285, 2288, 2290, 2290, 2292, 2291, 2294, + 2295, 2298, 2292, 2296, 2297, 2297, 2295, 2293, 2296, 2299, + 2300, 2300, 2301, 2301, 2299, 2304, 2298, 2294, 2305, 2305, - 2303, 2309, 2306, 2316, 2305, 2310, 2309, 2304, 2310, 2314, - 2307, 2312, 2315, 2317, 2314, 2318, 2319, 2315, 2320, 2320, - 2321, 2316, 2324, 2325, 2318, 2319, 2317, 2326, 2328, 2321, - 2327, 2327, 2332, 2329, 2330, 2331, 2331, 2334, 2336, 2339, - 2337, 2324, 2329, 2325, 2337, 2370, 2326, 2328, 2370, 2330, - 2340, 2332, 2334, 2338, 2338, 2341, 2340, 2342, 2336, 2343, - 2343, 2341, 2344, 2342, 2339, 2347, 2345, 2348, 2350, 2351, - 2344, 2345, 2350, 2352, 2347, 2354, 2354, 2355, 2355, 2362, - 2348, 2356, 2356, 2351, 2358, 2358, 2360, 2360, 2352, 2363, - 2365, 2366, 2366, 2371, 2363, 2363, 2368, 2368, 2373, 2362, + 2306, 2307, 0, 2306, 2308, 2309, 2307, 2307, 2304, 2308, + 2309, 2310, 2311, 2312, 2313, 2314, 2311, 2310, 2312, 2315, + 2316, 2317, 2322, 2313, 2319, 2316, 2326, 2315, 2320, 2319, + 2314, 2320, 2324, 2317, 2322, 2325, 2327, 2324, 2328, 2329, + 2325, 2330, 2330, 2331, 2326, 2334, 2335, 2328, 2329, 2327, + 2336, 2338, 2331, 2337, 2337, 2342, 2339, 2340, 2341, 2341, + 2344, 2346, 2349, 2347, 2334, 2339, 2335, 2347, 2380, 2336, + 2338, 2380, 2340, 2350, 2342, 2344, 2348, 2348, 2351, 2350, + 2352, 2346, 2353, 2353, 2351, 2354, 2352, 2349, 2357, 2355, + 2358, 2360, 2361, 2354, 2355, 2360, 2362, 2357, 2364, 2364, - 2369, 2369, 2375, 2375, 2376, 2376, 2371, 2377, 2377, 2378, - 2365, 2379, 2379, 2380, 2381, 2382, 2373, 2383, 2384, 2384, - 2389, 2385, 2388, 2383, 2378, 2385, 2380, 2388, 2388, 2382, - 2390, 2391, 2381, 2392, 2393, 2394, 2404, 2395, 2401, 2392, - 2393, 2395, 2399, 2389, 2396, 2396, 2401, 2399, 2406, 2402, - 2390, 2391, 2402, 2405, 2407, 2408, 2405, 2409, 2410, 2407, - 2394, 2404, 2411, 2411, 2412, 2406, 2406, 2413, 2415, 2416, - 2416, 2424, 2410, 2408, 2414, 2413, 2421, 2409, 0, 2414, - 2414, 2417, 2417, 2412, 2418, 2418, 2423, 2415, 2419, 2419, - 2420, 2420, 2421, 2422, 2425, 2426, 2427, 2424, 2422, 2429, + 2365, 2365, 2372, 2358, 2366, 2366, 2361, 2368, 2368, 2370, + 2370, 2362, 2373, 2375, 2376, 2376, 2381, 2373, 2373, 2378, + 2378, 2383, 2372, 2379, 2379, 2385, 2386, 2386, 2389, 2381, + 2387, 2387, 2392, 2375, 2388, 2388, 2390, 2390, 2391, 2383, + 2393, 2394, 2396, 2389, 2400, 2385, 2396, 2394, 2395, 2395, + 2392, 2391, 2399, 2401, 2393, 2402, 2403, 2399, 2399, 2404, + 2405, 2410, 2403, 2412, 2406, 2404, 2410, 2400, 2406, 2407, + 2407, 2412, 2415, 2401, 2413, 2402, 2416, 2413, 2417, 2416, + 2419, 2418, 2420, 2422, 2422, 2405, 2418, 2421, 2423, 2426, + 0, 2424, 2427, 2427, 2435, 2417, 2417, 2415, 2419, 2424, - 2429, 2430, 2431, 2425, 2430, 2434, 2423, 2433, 2433, 2435, - 2435, 2443, 2434, 2436, 2439, 2426, 2427, 2440, 2436, 2441, - 2431, 2438, 2438, 2439, 2444, 2444, 2440, 2445, 2441, 2443, - 2446, 2445, 2447, 2449, 2450, 2448, 2455, 2455, 2456, 2446, - 2448, 2448, 2458, 2450, 2462, 2459, 2449, 2447, 2464, 2463, - 2466, 2458, 2468, 2483, 2470, 2471, 2456, 2459, 2463, 2470, - 2471, 2473, 2466, 2472, 2472, 2482, 2475, 0, 2464, 2462, - 2473, 2475, 2483, 2468, 2476, 2476, 2478, 2478, 2476, 2479, - 2479, 2480, 2480, 2481, 2484, 2482, 2487, 2486, 2490, 2484, - 2488, 2487, 2481, 2486, 2491, 2488, 2489, 2489, 2492, 2493, + 2425, 2421, 2420, 2428, 2428, 2425, 2425, 2423, 2426, 2429, + 2429, 2430, 2430, 2431, 2431, 2432, 2433, 2434, 2436, 2437, + 2435, 2433, 2438, 2440, 2440, 2441, 2442, 2436, 2441, 2444, + 2444, 2432, 2454, 2445, 2446, 2446, 2447, 2434, 2450, 2437, + 2445, 2447, 2438, 2451, 2442, 2449, 2449, 2450, 2452, 2457, + 2454, 2456, 2451, 2455, 2455, 2456, 2458, 2452, 2457, 2459, + 2460, 2461, 2466, 2466, 2459, 2459, 2467, 2469, 2470, 2473, + 2461, 2458, 2474, 2460, 2478, 2475, 2469, 2476, 2480, 2495, + 2470, 2474, 2482, 2476, 2467, 2483, 2478, 2482, 2484, 2484, + 2483, 2485, 2487, 2494, 2473, 2475, 2502, 2487, 2495, 2480, - 2495, 2494, 2498, 2492, 2496, 2496, 2490, 2494, 2499, 2500, - 2502, 2502, 2506, 2504, 2505, 2491, 2506, 2493, 2508, 2507, - 2509, 2498, 2510, 2499, 2512, 2495, 2504, 2505, 2507, 2500, - 2510, 2511, 2513, 2513, 2508, 2514, 2511, 2516, 2516, 2509, - 2517, 2517, 2519, 2521, 2521, 2523, 2524, 2526, 2525, 2529, - 2512, 2530, 2526, 2531, 2514, 2528, 2528, 2533, 2533, 2534, - 2536, 2523, 2524, 2519, 2525, 2536, 2537, 2538, 2538, 2529, - 2539, 2539, 2531, 2534, 2530, 2540, 2541, 2541, 2542, 2543, - 2544, 2545, 2546, 2547, 2548, 2548, 2544, 2542, 2537, 2549, - 2550, 2550, 2549, 2554, 2546, 2540, 2541, 2555, 2556, 2543, + 2485, 2488, 2488, 2490, 2490, 2488, 2491, 2491, 2492, 2492, + 2493, 2496, 2498, 2494, 2502, 2499, 2496, 2500, 2498, 2493, + 2499, 2503, 2500, 2501, 2501, 2504, 2505, 2506, 2507, 2510, + 2504, 2508, 2508, 2506, 2511, 2512, 2514, 2514, 2516, 2517, + 2524, 2518, 2503, 2520, 2505, 2518, 2521, 2519, 2510, 2511, + 2522, 2516, 2517, 2507, 2526, 2512, 2519, 2523, 2522, 2520, + 2525, 2525, 2523, 2528, 2528, 2521, 2524, 2529, 2529, 2531, + 2533, 2533, 2535, 2526, 2538, 2536, 2537, 2540, 2540, 2538, + 2541, 2542, 2543, 2545, 2545, 2546, 2549, 2552, 2535, 2548, + 2531, 2536, 2537, 2556, 2548, 2550, 2550, 2551, 2551, 2546, - 2545, 2557, 2557, 2547, 2556, 2554, 2558, 2559, 2560, 2558, - 2562, 2563, 2564, 2559, 2565, 2562, 2563, 2555, 2566, 2570, - 2565, 2567, 2567, 2569, 2569, 2571, 2560, 2573, 2573, 2574, - 2574, 2564, 2575, 2576, 2571, 2566, 2566, 2575, 2570, 2577, - 2578, 2578, 2579, 2579, 2577, 2580, 2580, 2576, 2581, 2583, - 2583, 2586, 2588, 2581, 2589, 2590, 2591, 2591, 2593, 2593, - 2595, 2594, 2596, 2597, 2597, 2598, 0, 2599, 2602, 2602, - 2586, 2596, 2599, 2605, 2588, 2594, 2589, 2590, 2604, 2604, - 2595, 2607, 2606, 2608, 2598, 2609, 2609, 2605, 2606, 2610, - 2612, 2608, 2613, 2607, 2610, 2614, 2615, 2616, 2618, 2619, + 2541, 2543, 2553, 2553, 2542, 2554, 2555, 2552, 2549, 2558, + 2560, 2557, 2559, 2556, 2568, 2555, 2554, 2557, 2561, 2561, + 2562, 2567, 2553, 2562, 2559, 2563, 2563, 2573, 2558, 2569, + 2560, 2570, 2570, 2567, 2568, 2569, 2571, 2572, 2577, 2571, + 2583, 2575, 2576, 2572, 2578, 2573, 2575, 2576, 2579, 2584, + 2578, 2580, 2580, 2582, 2582, 2586, 2586, 2577, 2584, 2583, + 2587, 2587, 2588, 2589, 2590, 2579, 2579, 2588, 2599, 2590, + 2591, 2591, 2592, 2592, 2593, 2593, 2594, 2589, 2596, 2596, + 2601, 2594, 2602, 2603, 2604, 2604, 2607, 2599, 2606, 2606, + 2608, 2612, 2609, 2610, 2610, 2611, 2612, 2615, 2615, 2619, - 2614, 2620, 2621, 2616, 2623, 2622, 2618, 2624, 2615, 2625, - 2612, 2626, 2613, 2629, 2630, 2635, 2626, 2657, 2619, 2635, - 2623, 2620, 2621, 2622, 2624, 2624, 2657, 2630, 2633, 2633, - 2625, 2634, 2634, 2629, 2639, 2639, 2641, 2641, 2642, 2642, - 2645, 2642, 2643, 2643, 2645, 2643, 2644, 2644, 2648, 2644, - 2647, 2647, 2651, 2649, 2652, 2652, 2655, 2651, 2656, 2658, - 2660, 2661, 2656, 2655, 2662, 2662, 2648, 2649, 2663, 2663, - 2661, 2664, 2664, 2665, 2658, 2666, 2668, 2667, 2660, 2669, - 2666, 2668, 2668, 2670, 2671, 2669, 2667, 2673, 2665, 2667, - 2672, 2674, 2673, 2675, 2676, 2676, 2674, 2677, 2691, 2671, + 2607, 2609, 2601, 2618, 2602, 2603, 2617, 2617, 2618, 2620, + 2608, 2621, 2622, 2619, 2611, 2620, 2623, 2623, 2626, 2624, + 2622, 2627, 2628, 2621, 2624, 2629, 2630, 2628, 2632, 2633, + 2634, 2635, 2630, 2637, 2636, 2643, 2632, 2629, 2626, 2638, + 2639, 2627, 2640, 2647, 2647, 2644, 0, 2640, 2633, 2637, + 2634, 2635, 2636, 2648, 2648, 2643, 2638, 2638, 2644, 2649, + 2662, 2639, 2669, 2649, 2653, 2653, 2655, 2655, 2656, 2656, + 2659, 2656, 2657, 2657, 2659, 2657, 2658, 2658, 2662, 2658, + 2661, 2661, 2663, 2665, 2666, 2666, 2670, 2669, 2665, 2672, + 2671, 2673, 2675, 2670, 2671, 2676, 2663, 2680, 2672, 2677, - 2680, 2680, 2677, 2683, 2683, 2684, 2684, 2691, 2670, 2685, - 2685, 2672, 2675, 2686, 2686, 2687, 2687, 2688, 2688, 2689, - 2689, 2692, 2692, 2693, 2695, 2695, 2696, 2697, 2699, 2699, - 2698, 2700, 2701, 2701, 2704, 2705, 2706, 2708, 2705, 2712, - 2697, 2696, 2698, 2693, 2707, 2707, 2700, 2710, 2711, 2714, - 2710, 2713, 2704, 2712, 2711, 2708, 2713, 2715, 2716, 2731, - 2727, 2718, 2706, 2727, 2729, 2729, 2733, 2734, 2714, 2732, - 2733, 2735, 2737, 2738, 2716, 2715, 2718, 2740, 2732, 2740, - 2743, 2739, 2731, 2741, 2738, 2735, 2739, 2734, 2742, 2742, - 2744, 2746, 2745, 2743, 2747, 2737, 2748, 2749, 2741, 2752, + 2677, 2678, 2678, 2685, 2676, 2687, 2673, 2679, 2679, 2681, + 2675, 2682, 2680, 2683, 2681, 2684, 2686, 2688, 2683, 2683, + 2682, 2684, 2688, 2682, 2689, 2690, 2687, 2838, 2685, 2689, + 2692, 2686, 2691, 2691, 2838, 2692, 2695, 2695, 2698, 2698, + 2699, 2699, 2700, 2700, 2690, 2701, 2701, 2702, 2702, 2703, + 2703, 2704, 2704, 2706, 2707, 2707, 2708, 2712, 2710, 2711, + 2711, 2713, 2706, 2714, 2715, 2715, 2716, 2717, 2717, 2720, + 2721, 2722, 2712, 2721, 2713, 2714, 2708, 2710, 2723, 2723, + 2724, 2716, 2726, 2727, 2730, 2726, 2728, 2720, 2729, 2727, + 2731, 2732, 2743, 2729, 2734, 2743, 2748, 2722, 2724, 2752, - 2750, 2753, 2754, 2754, 2848, 2755, 2848, 2746, 2761, 2744, - 2745, 2748, 2760, 2752, 2755, 2756, 2756, 2765, 2749, 2747, - 2750, 2753, 2757, 2757, 2758, 2758, 2759, 2759, 2761, 2762, - 2763, 2760, 2762, 2764, 2766, 2763, 2768, 2767, 2764, 2769, - 2770, 2770, 2765, 2767, 2771, 2772, 2772, 2774, 2776, 2766, - 2768, 2779, 2779, 2780, 2780, 2782, 2781, 2786, 2785, 2769, - 2787, 2783, 2774, 2771, 2781, 2784, 2776, 2783, 2788, 2788, - 2786, 2784, 2785, 2790, 2782, 2792, 2793, 2795, 2796, 2787, - 2793, 2797, 2798, 2796, 2800, 2799, 2801, 2802, 2804, 2792, - 2805, 2801, 2802, 2790, 2807, 2798, 2813, 2795, 2799, 2807, + 2728, 2745, 2745, 2730, 2746, 2746, 2749, 2732, 2731, 2734, + 2750, 2751, 2754, 2752, 2750, 2749, 2755, 2756, 2757, 2748, + 2757, 2758, 2756, 2759, 2759, 2760, 2761, 2755, 2762, 2764, + 2766, 2751, 2763, 2767, 2765, 2754, 2758, 2771, 2760, 2772, + 2772, 2770, 2866, 2773, 2866, 2761, 2762, 2778, 2763, 2765, + 2779, 2766, 2773, 2767, 2764, 2770, 2783, 2771, 2774, 2774, + 2775, 2775, 2776, 2776, 2777, 2777, 2778, 2781, 2780, 2782, + 2779, 2780, 2781, 2784, 2782, 2786, 2785, 2787, 2788, 2788, + 2789, 2783, 2785, 2790, 2790, 2792, 2794, 2799, 2784, 2786, + 2797, 2797, 2798, 2798, 2800, 2799, 2801, 2787, 2803, 2789, - 2797, 2806, 2806, 2800, 2808, 0, 2804, 2809, 2809, 2805, - 2808, 2810, 2811, 2812, 2814, 2813, 2810, 2811, 2812, 2815, - 2814, 2816, 2816, 2818, 2815, 2819, 2820, 2818, 2821, 2822, - 2823, 2824, 2825, 2820, 2826, 2826, 2823, 2828, 2828, 2831, - 2829, 2830, 2832, 2833, 2819, 2825, 2830, 2821, 2822, 2829, - 2824, 2836, 2829, 2834, 2834, 2835, 2833, 2838, 2831, 2840, - 2835, 2832, 2839, 2839, 2836, 2841, 2841, 2842, 2842, 2843, - 2844, 2845, 2846, 2846, 2843, 2847, 2852, 2844, 2840, 2850, - 2847, 2849, 2849, 2838, 2851, 2854, 2850, 2853, 2856, 2856, - 2845, 2851, 2853, 2857, 2859, 2852, 2860, 2861, 2862, 2859, + 2792, 2802, 2801, 2804, 2794, 2805, 2808, 2802, 2806, 2806, + 2811, 2810, 2803, 2800, 2811, 2813, 2804, 2814, 2815, 2816, + 2817, 2818, 2814, 2819, 2805, 2810, 2808, 2822, 2819, 2820, + 2823, 2825, 2816, 2817, 2820, 2813, 2825, 2815, 2824, 2824, + 2818, 2826, 2827, 2827, 2831, 2822, 2828, 2826, 2829, 2823, + 2830, 2828, 2832, 2829, 2833, 2830, 2834, 2834, 2832, 2833, + 2836, 2837, 2839, 2831, 2836, 2840, 2841, 2842, 2849, 2843, + 2844, 2844, 2841, 2846, 2846, 2850, 2847, 2851, 2848, 2856, + 2837, 2839, 2843, 2848, 2840, 2847, 2842, 2849, 2847, 2854, + 2851, 2852, 2852, 2853, 2850, 2857, 2857, 2858, 2853, 2859, - 2866, 2860, 2863, 2863, 2854, 2865, 2865, 2867, 2868, 2868, - 2869, 2869, 2857, 2870, 2872, 2872, 2861, 2862, 2874, 2866, - 2870, 2873, 2873, 2876, 2879, 2874, 2867, 2880, 2876, 2879, - 2881, 2882, 2882, 2883, 2883, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2880, 0, 0, 2881, - 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2888, 2888, 2888, - 2888, 2888, 2888, 2888, 2889, 2889, 2889, 2889, 2889, 2889, - 2889, 2890, 2890, 2890, 2890, 2890, 2890, 2890, 2891, 2891, - 2891, 2891, 2891, 2891, 2891, 2893, 2893, 0, 2893, 2893, - 2893, 2893, 2894, 2894, 0, 0, 0, 2894, 2894, 2895, + 2859, 2861, 2854, 2860, 2860, 2856, 2861, 2862, 2863, 2864, + 2864, 2870, 2865, 2868, 2862, 2869, 2858, 2865, 2867, 2867, + 2868, 2871, 2869, 2872, 2874, 2874, 2871, 2863, 2875, 2877, + 2870, 2878, 2879, 2880, 2877, 2884, 2878, 2881, 2881, 2883, + 2883, 2885, 2872, 2886, 2886, 2887, 2887, 2875, 2888, 2890, + 2890, 2879, 2880, 2898, 2884, 2888, 2891, 2891, 2892, 2894, + 2885, 2897, 2899, 0, 2894, 2892, 2897, 2900, 2900, 2901, + 2901, 0, 2898, 0, 0, 0, 0, 0, 0, 0, + 0, 2899, 2905, 2905, 2905, 2905, 2905, 2905, 2905, 2906, + 2906, 2906, 2906, 2906, 2906, 2906, 2907, 2907, 2907, 2907, - 2895, 0, 0, 2895, 0, 2895, 2896, 0, 0, 0, - 0, 0, 2896, 2897, 2897, 0, 0, 0, 2897, 2897, - 2898, 0, 0, 0, 0, 0, 2898, 2899, 2899, 0, - 2899, 2899, 2899, 2899, 2900, 2900, 0, 2900, 2900, 2900, - 2900, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, - 2886, 2886 + 2907, 2907, 2907, 2908, 2908, 2908, 2908, 2908, 2908, 2908, + 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2911, 2911, 0, + 2911, 2911, 2911, 2911, 2912, 2912, 0, 0, 0, 2912, + 2912, 2913, 2913, 0, 0, 2913, 0, 2913, 2914, 0, + 0, 0, 0, 0, 2914, 2915, 2915, 0, 0, 0, + 2915, 2915, 2916, 0, 0, 0, 0, 0, 2916, 2917, + 2917, 0, 2917, 2917, 2917, 2917, 2918, 2918, 0, 2918, + 2918, 2918, 2918, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + + 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904 } ; static yy_state_type yy_last_accepting_state; @@ -2843,7 +2858,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2845 "" +#line 2860 "" #define INITIAL 0 #define quotedstring 1 @@ -3066,7 +3081,7 @@ YY_DECL { #line 205 "./util/configlexer.lex" -#line 3068 "" +#line 3083 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3099,13 +3114,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 >= 2887 ) + if ( yy_current_state >= 2905 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5642 ); + while ( yy_base[yy_current_state] != 5674 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3330,27 +3345,27 @@ YY_RULE_SETUP case 40: YY_RULE_SETUP #line 248 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_CIPHERS) } +{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } YY_BREAK case 41: YY_RULE_SETUP #line 249 "./util/configlexer.lex" -{ YDVAR(1, VAR_TLS_CIPHERSUITES) } +{ YDVAR(1, VAR_TLS_CIPHERS) } YY_BREAK case 42: YY_RULE_SETUP #line 250 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_TLS_CIPHERSUITES) } YY_BREAK case 43: YY_RULE_SETUP #line 251 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 44: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 45: YY_RULE_SETUP @@ -3360,282 +3375,282 @@ YY_RULE_SETUP case 46: YY_RULE_SETUP #line 254 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 47: YY_RULE_SETUP #line 255 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 48: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 49: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 50: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 51: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 52: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 53: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 54: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 55: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 56: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 57: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 58: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 59: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 60: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 61: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 62: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 63: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 64: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 65: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 66: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 67: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 68: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 69: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 70: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 71: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 72: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 73: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 74: 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 75: 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 76: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 77: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 78: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 79: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 80: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 81: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 82: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 83: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 84: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 85: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 86: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 87: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 88: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 89: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 90: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 91: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 92: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 93: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 94: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 95: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 96: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 97: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 98: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 99: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 100: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 101: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 102: YY_RULE_SETUP @@ -3645,32 +3660,32 @@ YY_RULE_SETUP case 103: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 104: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 105: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 106: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 107: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 108: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 109: YY_RULE_SETUP @@ -3680,659 +3695,659 @@ YY_RULE_SETUP case 110: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 111: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 112: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 113: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 114: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 115: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 116: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 117: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 118: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 119: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 120: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 121: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 122: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 123: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 124: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 125: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 126: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 127: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 128: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 129: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 130: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 131: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 132: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 133: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 134: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 135: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 136: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 137: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 138: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 139: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 140: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 141: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 142: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 143: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 144: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 145: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 146: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 147: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 148: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 149: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 150: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 151: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 152: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 153: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 154: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 155: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 156: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 157: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 158: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 159: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 160: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 161: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 162: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 163: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 164: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 165: YY_RULE_SETUP -#line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 373 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 166: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 167: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 168: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 169: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 170: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 171: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 172: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 173: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 174: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 175: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 176: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 177: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 178: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 179: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 180: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 181: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 182: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 183: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 184: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 185: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 186: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 187: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 188: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 189: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 190: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 191: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 192: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 193: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 194: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 195: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 196: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 197: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 198: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 199: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 200: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 201: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 202: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 203: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 204: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 205: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 206: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 207: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 208: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 209: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 210: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 211: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 212: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 213: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 214: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 215: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 216: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 217: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 218: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 219: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 220: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 221: YY_RULE_SETUP -#line 431 "./util/configlexer.lex" +#line 430 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 222: YY_RULE_SETUP -#line 433 "./util/configlexer.lex" +#line 432 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 223: YY_RULE_SETUP -#line 435 "./util/configlexer.lex" +#line 434 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 224: YY_RULE_SETUP -#line 437 "./util/configlexer.lex" +#line 436 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 225: YY_RULE_SETUP -#line 439 "./util/configlexer.lex" +#line 438 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 226: YY_RULE_SETUP -#line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 440 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 240: YY_RULE_SETUP @@ -4347,180 +4362,185 @@ YY_RULE_SETUP case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 253: YY_RULE_SETUP -#line 469 "./util/configlexer.lex" +#line 468 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 254: YY_RULE_SETUP -#line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 470 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 255: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 256: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 257: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 258: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 259: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 260: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 267: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 268: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 269: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 270: -/* rule 270 can match eol */ YY_RULE_SETUP #line 487 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 271: +/* rule 271 can match eol */ +YY_RULE_SETUP +#line 488 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 271: +case 272: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" +#line 491 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 491 "./util/configlexer.lex" +#line 492 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 272: -YY_RULE_SETUP -#line 496 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 273: -/* rule 273 can match eol */ YY_RULE_SETUP #line 497 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 274: +/* rule 274 can match eol */ +YY_RULE_SETUP +#line 498 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 274: +case 275: YY_RULE_SETUP -#line 499 "./util/configlexer.lex" +#line 500 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4533,34 +4553,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 275: +case 276: YY_RULE_SETUP -#line 511 "./util/configlexer.lex" +#line 512 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#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 276: -YY_RULE_SETUP -#line 517 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 277: -/* rule 277 can match eol */ YY_RULE_SETUP #line 518 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 278: +/* rule 278 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 278: +case 279: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4573,38 +4593,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 279: +case 280: YY_RULE_SETUP -#line 532 "./util/configlexer.lex" +#line 533 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 534 "./util/configlexer.lex" +#line 535 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 280: -YY_RULE_SETUP -#line 538 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 281: -/* rule 281 can match eol */ YY_RULE_SETUP #line 539 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 282: +/* rule 282 can match eol */ YY_RULE_SETUP #line 540 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 283: YY_RULE_SETUP #line 541 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 284: +YY_RULE_SETUP +#line 542 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4612,27 +4632,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 546 "./util/configlexer.lex" +#line 547 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 284: -YY_RULE_SETUP -#line 550 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 285: -/* rule 285 can match eol */ YY_RULE_SETUP #line 551 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 286: +/* rule 286 can match eol */ +YY_RULE_SETUP +#line 552 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 286: +case 287: YY_RULE_SETUP -#line 553 "./util/configlexer.lex" +#line 554 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4642,7 +4662,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 559 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4654,33 +4674,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 287: +case 288: YY_RULE_SETUP -#line 570 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 288: +case 289: YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 289: +case 290: YY_RULE_SETUP -#line 578 "./util/configlexer.lex" +#line 579 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 290: +case 291: YY_RULE_SETUP -#line 582 "./util/configlexer.lex" +#line 583 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4682 "" +#line 4702 "" case YY_END_OF_BUFFER: { @@ -4971,7 +4991,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 >= 2887 ) + if ( yy_current_state >= 2905 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -4999,11 +5019,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 >= 2887 ) + if ( yy_current_state >= 2905 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2886); + yy_is_jam = (yy_current_state == 2904); return yy_is_jam ? 0 : yy_current_state; } @@ -5642,7 +5662,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 582 "./util/configlexer.lex" +#line 583 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index beec31396..16b5bc547 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -245,6 +245,7 @@ additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } 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) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } diff --git a/util/configparser.c b/util/configparser.c index 9c9d5fb77..0a12dcad2 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -388,7 +388,8 @@ extern int yydebug; VAR_LOG_TAG_QUERYREPLY = 517, VAR_STREAM_WAIT_SIZE = 518, VAR_TLS_CIPHERS = 519, - VAR_TLS_CIPHERSUITES = 520 + VAR_TLS_CIPHERSUITES = 520, + VAR_TLS_SESSION_TICKET_KEYS = 521 }; #endif /* Tokens. */ @@ -655,6 +656,7 @@ extern int yydebug; #define VAR_STREAM_WAIT_SIZE 518 #define VAR_TLS_CIPHERS 519 #define VAR_TLS_CIPHERSUITES 520 +#define VAR_TLS_SESSION_TICKET_KEYS 521 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -665,7 +667,7 @@ union YYSTYPE char* str; -#line 669 "util/configparser.c" /* yacc.c:355 */ +#line 671 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -682,7 +684,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 686 "util/configparser.c" /* yacc.c:358 */ +#line 688 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -924,21 +926,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 534 +#define YYLAST 536 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 266 +#define YYNTOKENS 267 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 285 +#define YYNNTS 286 /* YYNRULES -- Number of rules. */ -#define YYNRULES 547 +#define YYNRULES 549 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 820 +#define YYNSTATES 823 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 520 +#define YYMAXUTOK 521 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -999,68 +1001,68 @@ static const yytype_uint16 yytranslate[] = 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 + 265, 266 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 171, 171, 171, 172, 172, 173, 173, 174, 174, - 174, 175, 175, 176, 180, 185, 186, 187, 187, 187, - 188, 188, 189, 189, 190, 190, 191, 191, 191, 192, - 192, 193, 193, 193, 194, 194, 194, 195, 195, 196, - 196, 197, 197, 198, 198, 199, 199, 200, 200, 201, - 201, 202, 202, 203, 203, 203, 204, 204, 204, 205, - 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, - 210, 210, 210, 211, 211, 212, 212, 213, 213, 213, - 214, 214, 215, 215, 216, 216, 217, 217, 217, 218, - 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, - 223, 223, 224, 224, 225, 225, 225, 226, 226, 226, - 227, 227, 227, 228, 228, 228, 228, 229, 230, 230, - 230, 231, 231, 231, 232, 232, 233, 233, 234, 234, - 234, 235, 235, 236, 236, 236, 237, 237, 238, 238, - 239, 240, 240, 241, 241, 242, 242, 243, 244, 244, - 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, - 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, - 254, 255, 255, 255, 256, 256, 256, 257, 257, 257, - 258, 258, 259, 260, 260, 261, 261, 262, 262, 263, - 263, 264, 264, 264, 265, 265, 265, 266, 266, 266, - 267, 267, 268, 268, 268, 270, 282, 283, 284, 284, - 284, 284, 284, 285, 285, 287, 299, 300, 301, 301, - 301, 301, 302, 302, 304, 318, 319, 320, 320, 320, - 320, 321, 321, 321, 323, 339, 340, 341, 341, 341, - 341, 342, 342, 342, 343, 345, 354, 363, 374, 383, - 392, 401, 412, 421, 432, 445, 460, 471, 488, 505, - 522, 539, 554, 569, 582, 597, 606, 615, 624, 633, - 642, 651, 660, 669, 678, 687, 696, 705, 714, 727, - 736, 749, 758, 767, 776, 783, 790, 799, 806, 815, - 823, 830, 837, 846, 855, 869, 878, 887, 896, 905, - 914, 923, 930, 937, 963, 971, 978, 985, 992, 999, - 1007, 1015, 1023, 1030, 1041, 1052, 1059, 1068, 1077, 1086, - 1093, 1100, 1108, 1116, 1126, 1136, 1146, 1154, 1167, 1178, - 1186, 1199, 1208, 1217, 1226, 1236, 1246, 1254, 1267, 1276, - 1284, 1293, 1301, 1314, 1323, 1330, 1340, 1350, 1360, 1370, - 1380, 1390, 1400, 1410, 1417, 1424, 1431, 1440, 1449, 1458, - 1467, 1474, 1484, 1504, 1511, 1529, 1542, 1555, 1564, 1573, - 1582, 1591, 1601, 1611, 1622, 1631, 1640, 1649, 1658, 1671, - 1684, 1693, 1700, 1709, 1718, 1727, 1736, 1744, 1757, 1765, - 1796, 1803, 1818, 1828, 1838, 1845, 1852, 1859, 1868, 1876, - 1890, 1911, 1932, 1944, 1956, 1968, 1977, 1998, 2008, 2017, - 2025, 2033, 2046, 2059, 2074, 2089, 2098, 2107, 2113, 2122, - 2131, 2141, 2151, 2164, 2177, 2189, 2203, 2215, 2229, 2239, - 2246, 2253, 2262, 2271, 2281, 2291, 2301, 2308, 2315, 2324, - 2333, 2343, 2353, 2360, 2367, 2374, 2382, 2392, 2402, 2412, - 2422, 2454, 2464, 2472, 2480, 2495, 2504, 2509, 2510, 2511, - 2511, 2511, 2512, 2512, 2512, 2513, 2513, 2515, 2525, 2534, - 2541, 2548, 2555, 2562, 2569, 2576, 2581, 2582, 2583, 2583, - 2584, 2584, 2585, 2585, 2586, 2587, 2588, 2589, 2590, 2591, - 2593, 2602, 2609, 2618, 2627, 2634, 2641, 2651, 2661, 2671, - 2681, 2691, 2701, 2706, 2707, 2708, 2710, 2716, 2726, 2733, - 2742, 2750, 2755, 2756, 2758, 2758, 2758, 2759, 2759, 2760, - 2761, 2762, 2763, 2764, 2766, 2776, 2785, 2792, 2801, 2808, - 2817, 2825, 2838, 2846, 2859, 2864, 2865, 2866, 2866, 2867, - 2867, 2867, 2869, 2884, 2899, 2911, 2926, 2939 + 0, 172, 172, 172, 173, 173, 174, 174, 175, 175, + 175, 176, 176, 177, 181, 186, 187, 188, 188, 188, + 189, 189, 190, 190, 191, 191, 192, 192, 192, 193, + 193, 194, 194, 194, 195, 195, 195, 196, 196, 197, + 197, 198, 198, 199, 199, 200, 200, 201, 201, 202, + 202, 203, 203, 204, 204, 204, 205, 205, 205, 206, + 206, 206, 207, 207, 208, 208, 209, 209, 210, 210, + 211, 211, 211, 212, 212, 213, 213, 214, 214, 214, + 215, 215, 216, 216, 217, 217, 218, 218, 218, 219, + 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, + 224, 224, 225, 225, 226, 226, 226, 227, 227, 227, + 228, 228, 228, 229, 229, 229, 229, 230, 231, 231, + 231, 232, 232, 232, 233, 233, 234, 234, 235, 235, + 235, 236, 236, 237, 237, 237, 238, 238, 239, 239, + 240, 241, 241, 242, 242, 243, 243, 244, 245, 245, + 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, + 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, + 255, 256, 256, 256, 257, 257, 257, 258, 258, 258, + 259, 259, 260, 261, 261, 262, 262, 263, 263, 264, + 264, 265, 265, 265, 266, 266, 266, 267, 267, 267, + 268, 268, 269, 269, 270, 270, 272, 284, 285, 286, + 286, 286, 286, 286, 287, 287, 289, 301, 302, 303, + 303, 303, 303, 304, 304, 306, 320, 321, 322, 322, + 322, 322, 323, 323, 323, 325, 341, 342, 343, 343, + 343, 343, 344, 344, 344, 345, 347, 356, 365, 376, + 385, 394, 403, 414, 423, 434, 447, 462, 473, 490, + 507, 524, 541, 556, 571, 584, 599, 608, 617, 626, + 635, 644, 653, 662, 671, 680, 689, 698, 707, 716, + 729, 738, 751, 760, 769, 778, 785, 792, 801, 808, + 817, 825, 832, 839, 847, 856, 865, 879, 888, 897, + 906, 915, 924, 933, 940, 947, 973, 981, 988, 995, + 1002, 1009, 1017, 1025, 1033, 1040, 1051, 1062, 1069, 1078, + 1087, 1096, 1103, 1110, 1118, 1126, 1136, 1146, 1156, 1164, + 1177, 1188, 1196, 1209, 1218, 1227, 1236, 1246, 1256, 1264, + 1277, 1286, 1294, 1303, 1311, 1324, 1333, 1340, 1350, 1360, + 1370, 1380, 1390, 1400, 1410, 1420, 1427, 1434, 1441, 1450, + 1459, 1468, 1477, 1484, 1494, 1514, 1521, 1539, 1552, 1565, + 1574, 1583, 1592, 1601, 1611, 1621, 1632, 1641, 1650, 1659, + 1668, 1681, 1694, 1703, 1710, 1719, 1728, 1737, 1746, 1754, + 1767, 1775, 1806, 1813, 1828, 1838, 1848, 1855, 1862, 1869, + 1878, 1886, 1900, 1921, 1942, 1954, 1966, 1978, 1987, 2008, + 2018, 2027, 2035, 2043, 2056, 2069, 2084, 2099, 2108, 2117, + 2123, 2132, 2141, 2151, 2161, 2174, 2187, 2199, 2213, 2225, + 2239, 2249, 2256, 2263, 2272, 2281, 2291, 2301, 2311, 2318, + 2325, 2334, 2343, 2353, 2363, 2370, 2377, 2384, 2392, 2402, + 2412, 2422, 2432, 2464, 2474, 2482, 2490, 2505, 2514, 2519, + 2520, 2521, 2521, 2521, 2522, 2522, 2522, 2523, 2523, 2525, + 2535, 2544, 2551, 2558, 2565, 2572, 2579, 2586, 2591, 2592, + 2593, 2593, 2594, 2594, 2595, 2595, 2596, 2597, 2598, 2599, + 2600, 2601, 2603, 2612, 2619, 2628, 2637, 2644, 2651, 2661, + 2671, 2681, 2691, 2701, 2711, 2716, 2717, 2718, 2720, 2726, + 2736, 2743, 2752, 2760, 2765, 2766, 2768, 2768, 2768, 2769, + 2769, 2770, 2771, 2772, 2773, 2774, 2776, 2786, 2795, 2802, + 2811, 2818, 2827, 2835, 2848, 2856, 2869, 2874, 2875, 2876, + 2876, 2877, 2877, 2877, 2879, 2894, 2909, 2921, 2936, 2949 }; #endif @@ -1167,11 +1169,11 @@ static const char *const yytname[] = "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", - "$accept", "toplevelvars", "toplevelvar", "serverstart", - "contents_server", "content_server", "stubstart", "contents_stub", - "content_stub", "forwardstart", "contents_forward", "content_forward", - "viewstart", "contents_view", "content_view", "authstart", - "contents_auth", "content_auth", "server_num_threads", + "VAR_TLS_SESSION_TICKET_KEYS", "$accept", "toplevelvars", "toplevelvar", + "serverstart", "contents_server", "content_server", "stubstart", + "contents_stub", "content_stub", "forwardstart", "contents_forward", + "content_forward", "viewstart", "contents_view", "content_view", + "authstart", "contents_auth", "content_auth", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", @@ -1191,7 +1193,8 @@ static const char *const yytname[] = "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_use_systemd", + "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", @@ -1317,7 +1320,7 @@ static const yytype_uint16 yytoknum[] = 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 + 515, 516, 517, 518, 519, 520, 521 }; # endif @@ -1342,22 +1345,22 @@ static const yytype_int16 yypact[] = 78, 79, 80, 84, 88, 89, 114, 115, 116, 118, 129, 130, 132, 133, 134, 136, 141, 180, 182, 196, 197, 200, 201, 203, 204, 205, 206, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 225, 244, 245, 247, - 248, 249, 250, 251, 253, 254, 255, 256, 257, 258, - 259, 272, 278, 279, 280, 281, 282, 297, 306, 307, - 308, 309, 310, 311, 313, 314, 315, 316, 317, 318, - 319, 320, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 346, 347, 348, 349, 351, 352, - 354, 355, 356, 357, 358, 359, 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, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 438, 439, -154, -154, -154, -154, -154, -154, -154, -154, + 217, 218, 220, 221, 222, 223, 225, 245, 247, 248, + 249, 250, 251, 253, 254, 255, 256, 257, 258, 259, + 272, 278, 279, 280, 281, 282, 297, 306, 307, 308, + 309, 310, 311, 313, 314, 315, 316, 317, 318, 319, + 320, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 346, 347, 348, 349, 351, 352, 354, + 355, 356, 357, 358, 359, 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, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 438, + 439, 440, 441, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, @@ -1376,47 +1379,48 @@ static const yytype_int16 yypact[] = -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, 440, 441, 442, 443, 444, 446, 447, -154, -154, - -154, -154, -154, -154, -154, -154, 448, 449, 450, 451, - 452, 453, -154, -154, -154, -154, -154, -154, -154, 454, - 455, 456, 457, 458, 459, 460, -154, -154, -154, -154, - -154, -154, -154, -154, 461, 462, 463, 464, 465, 466, - 467, 468, -154, -154, -154, -154, -154, -154, -154, -154, - -154, 469, 470, 471, 472, 473, 474, 475, 476, -154, - -154, -154, -154, -154, -154, -154, -154, -154, 477, 478, + -154, -154, -154, 442, 443, 444, 446, 447, 448, 449, + -154, -154, -154, -154, -154, -154, -154, -154, 450, 451, + 452, 453, 454, 455, -154, -154, -154, -154, -154, -154, + -154, 456, 457, 458, 459, 460, 461, 462, -154, -154, + -154, -154, -154, -154, -154, -154, 463, 464, 465, 466, + 467, 468, 469, 470, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 471, 472, 473, 474, 475, 476, 477, + 478, -154, -154, -154, -154, -154, -154, -154, -154, -154, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 489, -154, -154, 490, 491, 492, 493, - 494, 495, 496, 497, 498, 499, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, 500, 501, 502, - 503, 504, -154, -154, -154, -154, -154, -154, -154, -154, + 489, 490, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, 491, -154, -154, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, 502, + 503, 504, 505, 506, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, 505, 506, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, 507, + 508, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, 509, 510, 511, -154, + -154, -154, -154, -154, -154, -154, -154, -154, 512, 513, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, 514, + 515, 516, 517, 518, 519, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + 520, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 521, -154, -154, 522, 523, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, 507, 508, 509, -154, -154, -154, - -154, -154, -154, -154, -154, -154, 510, 511, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, 512, 513, 514, - 515, 516, 517, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, 518, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - 519, -154, -154, 520, 521, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, 522, - 523, 524, -154, -154, -154, -154, -154, -154, -154, -154 + -154, -154, 524, 525, 526, -154, -154, -154, -154, -154, + -154, -154, -154 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1424,9 +1428,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 14, 205, 215, 456, 502, 475, 224, - 511, 534, 234, 3, 16, 207, 217, 226, 236, 458, - 477, 504, 513, 536, 4, 5, 6, 10, 13, 8, + 2, 0, 1, 14, 206, 216, 458, 504, 477, 225, + 513, 536, 235, 3, 16, 208, 218, 227, 237, 460, + 479, 506, 515, 538, 4, 5, 6, 10, 13, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1446,66 +1450,67 @@ 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, 15, 17, 18, 80, 83, 92, 177, 178, - 19, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 31, 71, 20, 84, 85, 42, 64, 79, 21, - 22, 24, 25, 23, 26, 27, 28, 29, 30, 115, - 189, 116, 118, 119, 120, 191, 196, 192, 203, 204, - 173, 81, 70, 96, 113, 114, 201, 198, 117, 32, - 33, 34, 35, 36, 72, 86, 87, 102, 58, 68, - 59, 181, 182, 97, 52, 53, 180, 54, 55, 106, - 110, 124, 133, 158, 202, 107, 65, 37, 38, 39, - 94, 125, 126, 127, 40, 41, 43, 44, 46, 47, - 45, 131, 48, 49, 50, 56, 75, 111, 89, 132, - 82, 154, 90, 91, 108, 109, 199, 95, 51, 73, - 76, 57, 60, 98, 99, 74, 155, 100, 61, 62, - 63, 190, 112, 168, 169, 170, 171, 179, 101, 69, - 103, 104, 105, 156, 66, 67, 88, 77, 78, 93, - 121, 122, 200, 123, 128, 129, 130, 159, 160, 162, - 164, 165, 163, 166, 174, 134, 135, 138, 139, 136, - 137, 140, 141, 143, 142, 193, 195, 194, 157, 167, - 183, 185, 184, 186, 187, 188, 161, 172, 175, 176, - 197, 0, 0, 0, 0, 0, 0, 0, 206, 208, - 209, 210, 212, 213, 214, 211, 0, 0, 0, 0, - 0, 0, 216, 218, 219, 220, 221, 222, 223, 0, - 0, 0, 0, 0, 0, 0, 225, 227, 228, 231, - 232, 229, 233, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 237, 238, 239, 240, 244, 241, 242, - 243, 0, 0, 0, 0, 0, 0, 0, 0, 457, - 459, 461, 460, 466, 462, 463, 464, 465, 0, 0, + 0, 0, 0, 15, 17, 18, 80, 83, 92, 177, + 178, 19, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 31, 71, 20, 84, 85, 42, 64, 79, + 21, 22, 24, 25, 23, 26, 27, 28, 29, 30, + 115, 189, 116, 118, 119, 120, 191, 196, 192, 203, + 204, 205, 173, 81, 70, 96, 113, 114, 201, 198, + 117, 32, 33, 34, 35, 36, 72, 86, 87, 102, + 58, 68, 59, 181, 182, 97, 52, 53, 180, 54, + 55, 106, 110, 124, 133, 158, 202, 107, 65, 37, + 38, 39, 94, 125, 126, 127, 40, 41, 43, 44, + 46, 47, 45, 131, 48, 49, 50, 56, 75, 111, + 89, 132, 82, 154, 90, 91, 108, 109, 199, 95, + 51, 73, 76, 57, 60, 98, 99, 74, 155, 100, + 61, 62, 63, 190, 112, 168, 169, 170, 171, 179, + 101, 69, 103, 104, 105, 156, 66, 67, 88, 77, + 78, 93, 121, 122, 200, 123, 128, 129, 130, 159, + 160, 162, 164, 165, 163, 166, 174, 134, 135, 138, + 139, 136, 137, 140, 141, 143, 142, 193, 195, 194, + 157, 167, 183, 185, 184, 186, 187, 188, 161, 172, + 175, 176, 197, 0, 0, 0, 0, 0, 0, 0, + 207, 209, 210, 211, 213, 214, 215, 212, 0, 0, + 0, 0, 0, 0, 217, 219, 220, 221, 222, 223, + 224, 0, 0, 0, 0, 0, 0, 0, 226, 228, + 229, 232, 233, 230, 234, 231, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 238, 239, 240, 241, 245, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 0, 459, 461, 463, 462, 468, 464, 465, 466, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 476, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 0, 503, 505, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 512, 514, 515, 516, - 518, 519, 517, 520, 521, 522, 523, 0, 0, 0, - 0, 0, 535, 537, 538, 539, 540, 541, 246, 245, - 252, 265, 263, 271, 272, 275, 273, 274, 276, 277, - 278, 279, 280, 301, 302, 303, 304, 305, 329, 330, - 331, 336, 337, 268, 338, 339, 342, 340, 341, 344, - 345, 346, 360, 316, 317, 319, 320, 347, 363, 310, - 312, 364, 370, 371, 372, 269, 328, 386, 387, 311, - 381, 294, 264, 306, 361, 367, 348, 0, 0, 390, - 270, 247, 293, 352, 248, 266, 267, 307, 308, 388, - 350, 354, 355, 249, 391, 332, 359, 295, 315, 365, - 366, 369, 380, 309, 384, 382, 383, 321, 327, 356, - 357, 322, 323, 349, 374, 296, 297, 300, 281, 283, - 284, 285, 286, 287, 392, 393, 395, 333, 334, 335, - 343, 396, 397, 398, 0, 0, 0, 351, 324, 507, - 407, 411, 409, 408, 412, 410, 0, 0, 415, 416, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 353, 368, 385, 420, 421, 325, 399, 0, 0, 0, - 0, 0, 0, 375, 376, 377, 378, 379, 508, 318, - 313, 373, 292, 250, 251, 314, 422, 424, 423, 425, - 426, 427, 282, 289, 417, 419, 418, 288, 0, 299, - 358, 394, 298, 326, 290, 291, 428, 429, 430, 434, - 433, 431, 432, 435, 436, 437, 438, 440, 439, 449, - 0, 453, 454, 0, 0, 455, 441, 447, 442, 443, - 444, 446, 448, 445, 467, 469, 468, 471, 472, 473, - 474, 470, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 506, 524, 525, 526, 529, 527, - 528, 530, 531, 532, 533, 542, 543, 544, 545, 546, - 362, 389, 406, 509, 510, 413, 414, 400, 401, 0, - 0, 0, 405, 547, 450, 451, 452, 404, 402, 403 + 0, 0, 478, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 0, 505, 507, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 514, 516, + 517, 518, 520, 521, 519, 522, 523, 524, 525, 0, + 0, 0, 0, 0, 537, 539, 540, 541, 542, 543, + 247, 246, 253, 266, 264, 272, 273, 276, 274, 275, + 277, 278, 279, 280, 281, 303, 304, 305, 306, 307, + 331, 332, 333, 338, 339, 269, 340, 341, 344, 342, + 343, 346, 347, 348, 362, 318, 319, 321, 322, 349, + 365, 312, 314, 366, 372, 373, 374, 270, 330, 388, + 389, 313, 383, 296, 265, 308, 363, 369, 350, 0, + 0, 392, 271, 248, 295, 354, 249, 267, 268, 309, + 310, 390, 352, 356, 357, 250, 393, 334, 361, 297, + 317, 367, 368, 371, 382, 311, 386, 384, 385, 323, + 329, 358, 359, 324, 325, 351, 376, 298, 299, 302, + 282, 284, 285, 286, 287, 288, 394, 395, 397, 335, + 336, 337, 345, 398, 399, 400, 0, 0, 0, 353, + 326, 509, 409, 413, 411, 410, 414, 412, 0, 0, + 417, 418, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 355, 370, 387, 422, 423, 327, 401, 0, + 0, 0, 0, 0, 0, 377, 378, 379, 380, 381, + 510, 320, 315, 375, 294, 251, 252, 316, 424, 426, + 425, 427, 428, 429, 283, 290, 419, 421, 420, 289, + 0, 301, 360, 396, 300, 328, 291, 292, 293, 430, + 431, 432, 436, 435, 433, 434, 437, 438, 439, 440, + 442, 441, 451, 0, 455, 456, 0, 0, 457, 443, + 449, 444, 445, 446, 448, 450, 447, 469, 471, 470, + 473, 474, 475, 476, 472, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 508, 526, 527, + 528, 531, 529, 530, 532, 533, 534, 535, 544, 545, + 546, 547, 548, 364, 391, 408, 511, 512, 415, 416, + 402, 403, 0, 0, 0, 407, 549, 452, 453, 454, + 406, 404, 405 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1539,41 +1544,41 @@ static const yytype_int16 yypgoto[] = -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154 + -154, -154, -154, -154, -154, -154 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 13, 14, 24, 222, 15, 25, 418, 16, - 26, 432, 17, 27, 446, 18, 28, 462, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 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, 419, 420, 421, 422, 423, 424, 425, 433, 434, - 435, 436, 437, 438, 463, 464, 465, 466, 467, 468, - 469, 470, 447, 448, 449, 450, 451, 452, 453, 19, - 29, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 20, 30, 500, 501, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 21, 31, 514, 515, 406, - 407, 408, 409, 22, 32, 526, 527, 528, 529, 530, - 531, 532, 533, 534, 535, 536, 23, 33, 542, 543, - 544, 545, 546, 547, 410 + -1, 1, 13, 14, 24, 223, 15, 25, 420, 16, + 26, 434, 17, 27, 448, 18, 28, 464, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 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, 421, 422, 423, 424, 425, 426, 427, 435, + 436, 437, 438, 439, 440, 465, 466, 467, 468, 469, + 470, 471, 472, 449, 450, 451, 452, 453, 454, 455, + 19, 29, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 20, 30, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 21, 31, 516, 517, + 408, 409, 410, 411, 22, 32, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 23, 33, 544, + 545, 546, 547, 548, 549, 412 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1584,57 +1589,57 @@ static const yytype_uint16 yytable[] = 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 513, 548, 549, 550, 65, 66, 67, 551, 552, - 553, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 64, 515, 550, 551, 552, 65, 66, 67, 553, 554, + 555, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 454, 537, 538, 539, 540, 541, 554, 555, - 556, 109, 110, 111, 557, 112, 113, 114, 558, 559, + 107, 108, 456, 539, 540, 541, 542, 543, 556, 557, + 558, 109, 110, 111, 559, 112, 113, 114, 560, 561, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 560, 561, 562, 139, 563, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 564, - 565, 426, 566, 567, 568, 411, 569, 412, 413, 427, - 428, 570, 150, 151, 152, 153, 154, 155, 156, 157, + 135, 136, 137, 138, 562, 563, 564, 139, 565, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 566, + 567, 428, 568, 569, 570, 413, 571, 414, 415, 429, + 430, 572, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 571, 188, 572, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 573, 574, 414, 439, - 575, 576, 2, 577, 578, 579, 580, 202, 203, 204, - 205, 206, 207, 3, 581, 582, 583, 584, 585, 208, - 586, 587, 588, 589, 429, 590, 430, 209, 210, 415, - 211, 212, 416, 213, 214, 440, 441, 215, 216, 217, - 218, 219, 220, 221, 591, 592, 4, 593, 594, 595, - 596, 597, 5, 598, 599, 600, 601, 602, 603, 604, - 442, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 455, 605, 456, 457, 458, 459, 460, 606, 607, - 608, 609, 610, 461, 488, 489, 490, 491, 492, 493, - 494, 495, 496, 497, 498, 499, 6, 611, 471, 472, - 473, 474, 475, 476, 477, 478, 612, 613, 614, 615, - 616, 617, 7, 618, 619, 620, 621, 622, 623, 624, - 625, 443, 444, 626, 627, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 431, 648, 649, 650, 651, - 417, 652, 653, 8, 654, 655, 656, 657, 658, 659, - 445, 660, 661, 662, 663, 664, 665, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 700, 701, 702, 9, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, - 10, 718, 719, 720, 721, 722, 723, 724, 725, 726, - 727, 728, 729, 730, 731, 732, 733, 11, 734, 735, - 736, 737, 738, 739, 740, 12, 741, 742, 743, 744, - 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, - 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, - 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, - 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, - 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, - 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, - 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, - 815, 816, 817, 818, 819 + 573, 188, 574, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 575, 576, 416, 441, + 577, 578, 2, 579, 580, 581, 582, 202, 203, 204, + 205, 206, 207, 3, 583, 584, 585, 586, 587, 208, + 588, 589, 590, 591, 431, 592, 432, 209, 210, 417, + 211, 212, 418, 213, 214, 442, 443, 215, 216, 217, + 218, 219, 220, 221, 222, 593, 4, 594, 595, 596, + 597, 598, 5, 599, 600, 601, 602, 603, 604, 605, + 444, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 457, 606, 458, 459, 460, 461, 462, 607, 608, + 609, 610, 611, 463, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 6, 612, 473, 474, + 475, 476, 477, 478, 479, 480, 613, 614, 615, 616, + 617, 618, 7, 619, 620, 621, 622, 623, 624, 625, + 626, 445, 446, 627, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 644, 645, 646, 647, 648, 433, 649, 650, 651, 652, + 419, 653, 654, 8, 655, 656, 657, 658, 659, 660, + 447, 661, 662, 663, 664, 665, 666, 667, 668, 669, + 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 9, 704, 705, 706, 707, 708, + 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, + 10, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 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, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, + 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, + 816, 817, 818, 819, 820, 821, 822 }; static const yytype_uint16 yycheck[] = @@ -1664,7 +1669,7 @@ static const yytype_uint16 yycheck[] = 232, 233, 234, 11, 10, 10, 10, 10, 10, 241, 10, 10, 10, 10, 136, 10, 138, 249, 250, 137, 252, 253, 140, 255, 256, 79, 80, 259, 260, 261, - 262, 263, 264, 265, 10, 10, 44, 10, 10, 10, + 262, 263, 264, 265, 266, 10, 44, 10, 10, 10, 10, 10, 50, 10, 10, 10, 10, 10, 10, 10, 104, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 242, 10, 244, 245, 246, 247, 248, 10, 10, @@ -1692,17 +1697,17 @@ static const yytype_uint16 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, - 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 267, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 268, 269, 272, 275, 278, 281, 495, - 506, 521, 529, 542, 270, 273, 276, 279, 282, 496, - 507, 522, 530, 543, 12, 13, 14, 15, 16, 17, + 0, 268, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 269, 270, 273, 276, 279, 282, 497, + 508, 523, 531, 544, 271, 274, 277, 280, 283, 498, + 509, 524, 532, 545, 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, @@ -1721,7 +1726,7 @@ static const yytype_uint16 yystos[] = 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, 234, 241, 249, 250, 252, 253, 255, 256, 259, 260, 261, 262, 263, - 264, 265, 271, 284, 285, 286, 287, 288, 289, 290, + 264, 265, 266, 272, 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, @@ -1739,21 +1744,21 @@ static const yytype_uint16 yystos[] = 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, 525, 526, 527, 528, - 550, 43, 45, 46, 106, 137, 140, 258, 274, 467, - 468, 469, 470, 471, 472, 473, 43, 51, 52, 136, - 138, 257, 277, 474, 475, 476, 477, 478, 479, 43, - 79, 80, 104, 165, 166, 204, 280, 488, 489, 490, - 491, 492, 493, 494, 43, 242, 244, 245, 246, 247, - 248, 254, 283, 480, 481, 482, 483, 484, 485, 486, - 487, 95, 96, 97, 98, 99, 100, 101, 102, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 111, 523, 524, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 236, 237, 238, - 239, 240, 544, 545, 546, 547, 548, 549, 10, 10, + 461, 462, 463, 464, 465, 466, 467, 468, 527, 528, + 529, 530, 552, 43, 45, 46, 106, 137, 140, 258, + 275, 469, 470, 471, 472, 473, 474, 475, 43, 51, + 52, 136, 138, 257, 278, 476, 477, 478, 479, 480, + 481, 43, 79, 80, 104, 165, 166, 204, 281, 490, + 491, 492, 493, 494, 495, 496, 43, 242, 244, 245, + 246, 247, 248, 254, 284, 482, 483, 484, 485, 486, + 487, 488, 489, 95, 96, 97, 98, 99, 100, 101, + 102, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 520, 521, 522, 111, 525, 526, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 236, + 237, 238, 239, 240, 546, 547, 548, 549, 550, 551, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1780,37 +1785,38 @@ 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, 10, 10, 10, + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 266, 267, 267, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 269, 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, 272, 273, 273, 274, 274, - 274, 274, 274, 274, 274, 275, 276, 276, 277, 277, - 277, 277, 277, 277, 278, 279, 279, 280, 280, 280, - 280, 280, 280, 280, 281, 282, 282, 283, 283, 283, - 283, 283, 283, 283, 283, 284, 285, 286, 287, 288, + 0, 267, 268, 268, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 270, 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, 273, 274, 274, 275, + 275, 275, 275, 275, 275, 275, 276, 277, 277, 278, + 278, 278, 278, 278, 278, 279, 280, 280, 281, 281, + 281, 281, 281, 281, 281, 282, 283, 283, 284, 284, + 284, 284, 284, 284, 284, 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, @@ -1831,16 +1837,16 @@ static const yytype_uint16 yyr1[] = 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, 496, 497, - 497, 497, 497, 497, 497, 497, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 507, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 522, 523, 524, 525, 526, 527, - 528, 529, 530, 530, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 532, 533, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 543, 544, 544, 544, - 544, 544, 545, 546, 547, 548, 549, 550 + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 498, 499, 499, 499, 499, 499, 499, 499, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 509, + 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, + 510, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 532, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 545, 546, + 546, 546, 546, 546, 547, 548, 549, 550, 551, 552 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1866,11 +1872,11 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 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, 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, @@ -1882,25 +1888,25 @@ 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, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 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, - 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, + 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, - 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, 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 }; @@ -2577,15 +2583,15 @@ yyreduce: switch (yyn) { case 14: -#line 181 "./util/configparser.y" /* yacc.c:1646 */ +#line 182 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2585 "util/configparser.c" /* yacc.c:1646 */ +#line 2591 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 271 "./util/configparser.y" /* yacc.c:1646 */ + case 206: +#line 273 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2596,11 +2602,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2600 "util/configparser.c" /* yacc.c:1646 */ +#line 2606 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 288 "./util/configparser.y" /* yacc.c:1646 */ + case 216: +#line 290 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2611,11 +2617,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2615 "util/configparser.c" /* yacc.c:1646 */ +#line 2621 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 305 "./util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 307 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2628,11 +2634,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2632 "util/configparser.c" /* yacc.c:1646 */ +#line 2638 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 324 "./util/configparser.y" /* yacc.c:1646 */ + case 235: +#line 326 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2647,11 +2653,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2651 "util/configparser.c" /* yacc.c:1646 */ +#line 2657 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 346 "./util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 348 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2659,11 +2665,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2663 "util/configparser.c" /* yacc.c:1646 */ +#line 2669 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 355 "./util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 357 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2671,11 +2677,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2675 "util/configparser.c" /* yacc.c:1646 */ +#line 2681 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 364 "./util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 366 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2685,11 +2691,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2689 "util/configparser.c" /* yacc.c:1646 */ +#line 2695 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 375 "./util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 377 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2697,11 +2703,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2701 "util/configparser.c" /* yacc.c:1646 */ +#line 2707 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 384 "./util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 386 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2709,11 +2715,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2713 "util/configparser.c" /* yacc.c:1646 */ +#line 2719 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 393 "./util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 395 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2721,11 +2727,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2725 "util/configparser.c" /* yacc.c:1646 */ +#line 2731 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 402 "./util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 404 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2735,11 +2741,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2739 "util/configparser.c" /* yacc.c:1646 */ +#line 2745 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 413 "./util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 415 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2747,11 +2753,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2751 "util/configparser.c" /* yacc.c:1646 */ +#line 2757 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 422 "./util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 424 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2761,11 +2767,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2765 "util/configparser.c" /* yacc.c:1646 */ +#line 2771 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 433 "./util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 435 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2776,11 +2782,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2780 "util/configparser.c" /* yacc.c:1646 */ +#line 2786 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 446 "./util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 448 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2794,11 +2800,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2798 "util/configparser.c" /* yacc.c:1646 */ +#line 2804 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 461 "./util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 463 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2808,11 +2814,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2812 "util/configparser.c" /* yacc.c:1646 */ +#line 2818 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 472 "./util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 474 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2828,11 +2834,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2832 "util/configparser.c" /* yacc.c:1646 */ +#line 2838 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 489 "./util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 491 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2848,11 +2854,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2852 "util/configparser.c" /* yacc.c:1646 */ +#line 2858 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 506 "./util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 508 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2868,11 +2874,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2872 "util/configparser.c" /* yacc.c:1646 */ +#line 2878 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 523 "./util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 525 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2888,11 +2894,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2892 "util/configparser.c" /* yacc.c:1646 */ +#line 2898 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 540 "./util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 542 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2906,11 +2912,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2910 "util/configparser.c" /* yacc.c:1646 */ +#line 2916 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 555 "./util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 557 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2924,11 +2930,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2928 "util/configparser.c" /* yacc.c:1646 */ +#line 2934 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 570 "./util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 572 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2940,11 +2946,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2944 "util/configparser.c" /* yacc.c:1646 */ +#line 2950 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 583 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 585 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2958,11 +2964,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2962 "util/configparser.c" /* yacc.c:1646 */ +#line 2968 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 598 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 600 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2970,11 +2976,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2974 "util/configparser.c" /* yacc.c:1646 */ +#line 2980 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 607 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 609 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2982,11 +2988,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2986 "util/configparser.c" /* yacc.c:1646 */ +#line 2992 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 616 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 618 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -2994,11 +3000,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2998 "util/configparser.c" /* yacc.c:1646 */ +#line 3004 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 625 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 627 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3006,11 +3012,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3010 "util/configparser.c" /* yacc.c:1646 */ +#line 3016 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 634 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 636 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3018,11 +3024,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3022 "util/configparser.c" /* yacc.c:1646 */ +#line 3028 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 643 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 645 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3030,11 +3036,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3034 "util/configparser.c" /* yacc.c:1646 */ +#line 3040 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 652 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 654 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3042,11 +3048,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3046 "util/configparser.c" /* yacc.c:1646 */ +#line 3052 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 661 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 663 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3054,11 +3060,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3058 "util/configparser.c" /* yacc.c:1646 */ +#line 3064 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 670 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 672 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3066,11 +3072,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3070 "util/configparser.c" /* yacc.c:1646 */ +#line 3076 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 679 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 681 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3078,11 +3084,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3082 "util/configparser.c" /* yacc.c:1646 */ +#line 3088 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 688 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 690 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3090,11 +3096,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3094 "util/configparser.c" /* yacc.c:1646 */ +#line 3100 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 697 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 699 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3102,11 +3108,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3106 "util/configparser.c" /* yacc.c:1646 */ +#line 3112 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 706 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 708 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3114,11 +3120,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3118 "util/configparser.c" /* yacc.c:1646 */ +#line 3124 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 715 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3130,11 +3136,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3134 "util/configparser.c" /* yacc.c:1646 */ +#line 3140 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 728 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 730 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3142,11 +3148,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3146 "util/configparser.c" /* yacc.c:1646 */ +#line 3152 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 737 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 739 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3158,11 +3164,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3162 "util/configparser.c" /* yacc.c:1646 */ +#line 3168 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 750 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 752 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3170,11 +3176,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3174 "util/configparser.c" /* yacc.c:1646 */ +#line 3180 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 759 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 761 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3182,11 +3188,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3186 "util/configparser.c" /* yacc.c:1646 */ +#line 3192 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 768 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 770 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3194,31 +3200,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3198 "util/configparser.c" /* yacc.c:1646 */ +#line 3204 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 777 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3208 "util/configparser.c" /* yacc.c:1646 */ +#line 3214 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 784 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 786 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3218 "util/configparser.c" /* yacc.c:1646 */ +#line 3224 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 791 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 793 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3226,21 +3232,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3230 "util/configparser.c" /* yacc.c:1646 */ +#line 3236 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 800 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 802 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3240 "util/configparser.c" /* yacc.c:1646 */ +#line 3246 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 807 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 809 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3248,42 +3254,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3252 "util/configparser.c" /* yacc.c:1646 */ +#line 3258 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 816 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 818 "./util/configparser.y" /* yacc.c:1646 */ { 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 3263 "util/configparser.c" /* yacc.c:1646 */ +#line 3269 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 824 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 826 "./util/configparser.y" /* yacc.c:1646 */ { 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 3273 "util/configparser.c" /* yacc.c:1646 */ +#line 3279 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 831 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 833 "./util/configparser.y" /* yacc.c:1646 */ { 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 3283 "util/configparser.c" /* yacc.c:1646 */ +#line 3289 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 838 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 840 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_session_ticket_keys, + (yyvsp[0].str))) + yyerror("out of memory"); + } +#line 3300 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 294: +#line 848 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3291,11 +3308,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3295 "util/configparser.c" /* yacc.c:1646 */ +#line 3312 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 847 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 857 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3303,11 +3320,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3307 "util/configparser.c" /* yacc.c:1646 */ +#line 3324 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 856 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 866 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3320,11 +3337,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3324 "util/configparser.c" /* yacc.c:1646 */ +#line 3341 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 870 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 880 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3332,11 +3349,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3336 "util/configparser.c" /* yacc.c:1646 */ +#line 3353 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 879 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 889 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3344,11 +3361,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3348 "util/configparser.c" /* yacc.c:1646 */ +#line 3365 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 888 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 898 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3356,11 +3373,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3360 "util/configparser.c" /* yacc.c:1646 */ +#line 3377 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 897 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 907 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3368,11 +3385,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3372 "util/configparser.c" /* yacc.c:1646 */ +#line 3389 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 906 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 916 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3380,11 +3397,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3384 "util/configparser.c" /* yacc.c:1646 */ +#line 3401 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 915 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 925 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3392,31 +3409,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3396 "util/configparser.c" /* yacc.c:1646 */ +#line 3413 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 924 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 934 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3406 "util/configparser.c" /* yacc.c:1646 */ +#line 3423 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 931 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 941 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3416 "util/configparser.c" /* yacc.c:1646 */ +#line 3433 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 938 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 948 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3441,105 +3458,105 @@ yyreduce: } } } -#line 3445 "util/configparser.c" /* yacc.c:1646 */ +#line 3462 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 964 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 974 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3456 "util/configparser.c" /* yacc.c:1646 */ +#line 3473 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 972 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 982 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3466 "util/configparser.c" /* yacc.c:1646 */ +#line 3483 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 979 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 989 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3476 "util/configparser.c" /* yacc.c:1646 */ +#line 3493 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 986 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 996 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3486 "util/configparser.c" /* yacc.c:1646 */ +#line 3503 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 993 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1003 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3496 "util/configparser.c" /* yacc.c:1646 */ +#line 3513 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1000 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1010 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3507 "util/configparser.c" /* yacc.c:1646 */ +#line 3524 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1008 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1018 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3518 "util/configparser.c" /* yacc.c:1646 */ +#line 3535 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1016 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1026 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3529 "util/configparser.c" /* yacc.c:1646 */ +#line 3546 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1024 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1034 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3539 "util/configparser.c" /* yacc.c:1646 */ +#line 3556 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1031 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1041 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3549,11 +3566,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3553 "util/configparser.c" /* yacc.c:1646 */ +#line 3570 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1042 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1052 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3563,21 +3580,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3567 "util/configparser.c" /* yacc.c:1646 */ +#line 3584 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1053 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1063 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3577 "util/configparser.c" /* yacc.c:1646 */ +#line 3594 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1060 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1070 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3585,11 +3602,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3589 "util/configparser.c" /* yacc.c:1646 */ +#line 3606 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1069 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1079 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3597,11 +3614,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3601 "util/configparser.c" /* yacc.c:1646 */ +#line 3618 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1078 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1088 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3609,53 +3626,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3613 "util/configparser.c" /* yacc.c:1646 */ +#line 3630 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1087 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1097 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3623 "util/configparser.c" /* yacc.c:1646 */ +#line 3640 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1094 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1104 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3633 "util/configparser.c" /* yacc.c:1646 */ +#line 3650 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1101 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1111 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3644 "util/configparser.c" /* yacc.c:1646 */ +#line 3661 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1109 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1119 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3655 "util/configparser.c" /* yacc.c:1646 */ +#line 3672 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1117 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1127 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3664,11 +3681,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3668 "util/configparser.c" /* yacc.c:1646 */ +#line 3685 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1127 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1137 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3677,11 +3694,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3681 "util/configparser.c" /* yacc.c:1646 */ +#line 3698 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1137 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1147 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3690,22 +3707,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3694 "util/configparser.c" /* yacc.c:1646 */ +#line 3711 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1147 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1157 "./util/configparser.y" /* yacc.c:1646 */ { 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 3705 "util/configparser.c" /* yacc.c:1646 */ +#line 3722 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1155 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1165 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3717,11 +3734,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3721 "util/configparser.c" /* yacc.c:1646 */ +#line 3738 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1168 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1178 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3731,22 +3748,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3735 "util/configparser.c" /* yacc.c:1646 */ +#line 3752 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1179 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1189 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3746 "util/configparser.c" /* yacc.c:1646 */ +#line 3763 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1187 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1197 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3758,11 +3775,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3762 "util/configparser.c" /* yacc.c:1646 */ +#line 3779 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1200 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1210 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3770,11 +3787,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3774 "util/configparser.c" /* yacc.c:1646 */ +#line 3791 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1209 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1219 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3782,11 +3799,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3786 "util/configparser.c" /* yacc.c:1646 */ +#line 3803 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1218 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1228 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3794,11 +3811,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3798 "util/configparser.c" /* yacc.c:1646 */ +#line 3815 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1227 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1237 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3807,11 +3824,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3811 "util/configparser.c" /* yacc.c:1646 */ +#line 3828 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1237 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1247 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3820,22 +3837,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" /* yacc.c:1646 */ +#line 3841 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1247 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1257 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3835 "util/configparser.c" /* yacc.c:1646 */ +#line 3852 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1255 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1265 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3847,11 +3864,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3851 "util/configparser.c" /* yacc.c:1646 */ +#line 3868 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1268 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1278 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3859,22 +3876,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3863 "util/configparser.c" /* yacc.c:1646 */ +#line 3880 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1277 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1287 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3874 "util/configparser.c" /* yacc.c:1646 */ +#line 3891 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1285 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1295 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3882,22 +3899,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3886 "util/configparser.c" /* yacc.c:1646 */ +#line 3903 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1294 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1304 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3897 "util/configparser.c" /* yacc.c:1646 */ +#line 3914 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1302 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1312 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3909,11 +3926,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3913 "util/configparser.c" /* yacc.c:1646 */ +#line 3930 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1315 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1325 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3921,21 +3938,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3925 "util/configparser.c" /* yacc.c:1646 */ +#line 3942 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1324 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1334 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3935 "util/configparser.c" /* yacc.c:1646 */ +#line 3952 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1331 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1341 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3944,11 +3961,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3948 "util/configparser.c" /* yacc.c:1646 */ +#line 3965 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1341 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1351 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3957,11 +3974,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3961 "util/configparser.c" /* yacc.c:1646 */ +#line 3978 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1351 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1361 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3970,11 +3987,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3974 "util/configparser.c" /* yacc.c:1646 */ +#line 3991 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1361 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1371 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3983,11 +4000,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3987 "util/configparser.c" /* yacc.c:1646 */ +#line 4004 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1371 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1381 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3996,11 +4013,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4000 "util/configparser.c" /* yacc.c:1646 */ +#line 4017 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1381 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1391 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4009,11 +4026,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4013 "util/configparser.c" /* yacc.c:1646 */ +#line 4030 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1391 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1401 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4022,11 +4039,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4026 "util/configparser.c" /* yacc.c:1646 */ +#line 4043 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1401 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1411 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4035,41 +4052,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4039 "util/configparser.c" /* yacc.c:1646 */ +#line 4056 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1411 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4049 "util/configparser.c" /* yacc.c:1646 */ +#line 4066 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1418 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1428 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4059 "util/configparser.c" /* yacc.c:1646 */ +#line 4076 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1425 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4069 "util/configparser.c" /* yacc.c:1646 */ +#line 4086 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1432 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1442 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4077,11 +4094,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4081 "util/configparser.c" /* yacc.c:1646 */ +#line 4098 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1441 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1451 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4089,11 +4106,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4093 "util/configparser.c" /* yacc.c:1646 */ +#line 4110 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1450 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1460 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4101,11 +4118,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4105 "util/configparser.c" /* yacc.c:1646 */ +#line 4122 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1459 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1469 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4113,21 +4130,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4117 "util/configparser.c" /* yacc.c:1646 */ +#line 4134 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1468 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1478 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4127 "util/configparser.c" /* yacc.c:1646 */ +#line 4144 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1475 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4136,11 +4153,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4140 "util/configparser.c" /* yacc.c:1646 */ +#line 4157 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1485 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4159,21 +4176,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4163 "util/configparser.c" /* yacc.c:1646 */ +#line 4180 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1505 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4173 "util/configparser.c" /* yacc.c:1646 */ +#line 4190 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1512 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1522 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4190,11 +4207,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4194 "util/configparser.c" /* yacc.c:1646 */ +#line 4211 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1530 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1540 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4206,11 +4223,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4210 "util/configparser.c" /* yacc.c:1646 */ +#line 4227 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1543 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1553 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4222,11 +4239,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4226 "util/configparser.c" /* yacc.c:1646 */ +#line 4243 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1556 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1566 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4234,11 +4251,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4238 "util/configparser.c" /* yacc.c:1646 */ +#line 4255 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1565 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1575 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4246,11 +4263,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4250 "util/configparser.c" /* yacc.c:1646 */ +#line 4267 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1574 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1584 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4258,11 +4275,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4262 "util/configparser.c" /* yacc.c:1646 */ +#line 4279 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1583 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1593 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4270,11 +4287,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4274 "util/configparser.c" /* yacc.c:1646 */ +#line 4291 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1592 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1602 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4283,11 +4300,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4287 "util/configparser.c" /* yacc.c:1646 */ +#line 4304 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1602 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4296,11 +4313,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4300 "util/configparser.c" /* yacc.c:1646 */ +#line 4317 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1612 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1622 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4310,11 +4327,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4314 "util/configparser.c" /* yacc.c:1646 */ +#line 4331 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1623 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1633 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4322,11 +4339,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4326 "util/configparser.c" /* yacc.c:1646 */ +#line 4343 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1632 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1642 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4334,11 +4351,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4338 "util/configparser.c" /* yacc.c:1646 */ +#line 4355 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1641 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1651 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4346,11 +4363,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" /* yacc.c:1646 */ +#line 4367 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1650 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1660 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4358,11 +4375,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4362 "util/configparser.c" /* yacc.c:1646 */ +#line 4379 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1659 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1669 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4374,11 +4391,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4378 "util/configparser.c" /* yacc.c:1646 */ +#line 4395 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1672 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4390,11 +4407,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" /* yacc.c:1646 */ +#line 4411 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1685 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1695 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4402,21 +4419,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4406 "util/configparser.c" /* yacc.c:1646 */ +#line 4423 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1694 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1704 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4416 "util/configparser.c" /* yacc.c:1646 */ +#line 4433 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1701 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4424,11 +4441,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4428 "util/configparser.c" /* yacc.c:1646 */ +#line 4445 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1710 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1720 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4436,11 +4453,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4440 "util/configparser.c" /* yacc.c:1646 */ +#line 4457 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1719 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1729 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4448,11 +4465,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4452 "util/configparser.c" /* yacc.c:1646 */ +#line 4469 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1728 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4461,22 +4478,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4465 "util/configparser.c" /* yacc.c:1646 */ +#line 4482 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1737 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1747 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4476 "util/configparser.c" /* yacc.c:1646 */ +#line 4493 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1745 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1755 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4488,22 +4505,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4492 "util/configparser.c" /* yacc.c:1646 */ +#line 4509 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1758 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1768 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4503 "util/configparser.c" /* yacc.c:1646 */ +#line 4520 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1766 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1776 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4533,21 +4550,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4537 "util/configparser.c" /* yacc.c:1646 */ +#line 4554 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1797 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1807 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4547 "util/configparser.c" /* yacc.c:1646 */ +#line 4564 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1804 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1814 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4561,11 +4578,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4565 "util/configparser.c" /* yacc.c:1646 */ +#line 4582 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1819 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1829 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4574,11 +4591,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4578 "util/configparser.c" /* yacc.c:1646 */ +#line 4595 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1829 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1839 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4587,41 +4604,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4591 "util/configparser.c" /* yacc.c:1646 */ +#line 4608 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1839 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1849 "./util/configparser.y" /* yacc.c:1646 */ { 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 4601 "util/configparser.c" /* yacc.c:1646 */ +#line 4618 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1846 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1856 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4611 "util/configparser.c" /* yacc.c:1646 */ +#line 4628 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1853 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4621 "util/configparser.c" /* yacc.c:1646 */ +#line 4638 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1860 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4629,22 +4646,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4633 "util/configparser.c" /* yacc.c:1646 */ +#line 4650 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1869 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1879 "./util/configparser.y" /* yacc.c:1646 */ { 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 4644 "util/configparser.c" /* yacc.c:1646 */ +#line 4661 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1877 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1887 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4657,11 +4674,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4661 "util/configparser.c" /* yacc.c:1646 */ +#line 4678 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1891 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1901 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4681,11 +4698,11 @@ yyreduce: } } } -#line 4685 "util/configparser.c" /* yacc.c:1646 */ +#line 4702 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1912 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1922 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4705,11 +4722,11 @@ yyreduce: } } } -#line 4709 "util/configparser.c" /* yacc.c:1646 */ +#line 4726 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1933 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1943 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4720,11 +4737,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4724 "util/configparser.c" /* yacc.c:1646 */ +#line 4741 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1945 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 1955 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4735,11 +4752,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4739 "util/configparser.c" /* yacc.c:1646 */ +#line 4756 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1957 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 1967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4750,11 +4767,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4754 "util/configparser.c" /* yacc.c:1646 */ +#line 4771 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1969 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 1979 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4762,11 +4779,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4766 "util/configparser.c" /* yacc.c:1646 */ +#line 4783 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1978 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 1988 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4786,11 +4803,11 @@ yyreduce: } } } -#line 4790 "util/configparser.c" /* yacc.c:1646 */ +#line 4807 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1999 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 2009 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4798,11 +4815,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4802 "util/configparser.c" /* yacc.c:1646 */ +#line 4819 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 2009 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 2019 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4810,33 +4827,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4814 "util/configparser.c" /* yacc.c:1646 */ +#line 4831 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 2018 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 2028 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4825 "util/configparser.c" /* yacc.c:1646 */ +#line 4842 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2026 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2036 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4836 "util/configparser.c" /* yacc.c:1646 */ +#line 4853 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2034 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2044 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4848,11 +4865,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4852 "util/configparser.c" /* yacc.c:1646 */ +#line 4869 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2047 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2057 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4864,11 +4881,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4868 "util/configparser.c" /* yacc.c:1646 */ +#line 4885 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2060 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2070 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4882,11 +4899,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4886 "util/configparser.c" /* yacc.c:1646 */ +#line 4903 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2075 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2085 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4900,11 +4917,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4904 "util/configparser.c" /* yacc.c:1646 */ +#line 4921 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2090 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2100 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4912,11 +4929,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4916 "util/configparser.c" /* yacc.c:1646 */ +#line 4933 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2099 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2109 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4924,20 +4941,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4928 "util/configparser.c" /* yacc.c:1646 */ +#line 4945 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2108 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2118 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4937 "util/configparser.c" /* yacc.c:1646 */ +#line 4954 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2114 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2124 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4945,11 +4962,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4949 "util/configparser.c" /* yacc.c:1646 */ +#line 4966 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2123 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2133 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4957,11 +4974,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4961 "util/configparser.c" /* yacc.c:1646 */ +#line 4978 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2132 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2142 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4970,11 +4987,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4974 "util/configparser.c" /* yacc.c:1646 */ +#line 4991 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2142 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2152 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4983,11 +5000,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4987 "util/configparser.c" /* yacc.c:1646 */ +#line 5004 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2152 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2162 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4999,11 +5016,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5003 "util/configparser.c" /* yacc.c:1646 */ +#line 5020 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2165 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2175 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5015,11 +5032,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5019 "util/configparser.c" /* yacc.c:1646 */ +#line 5036 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2178 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2188 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5030,11 +5047,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5034 "util/configparser.c" /* yacc.c:1646 */ +#line 5051 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2190 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2200 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5047,11 +5064,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5051 "util/configparser.c" /* yacc.c:1646 */ +#line 5068 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2204 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2214 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5062,11 +5079,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5066 "util/configparser.c" /* yacc.c:1646 */ +#line 5083 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2216 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2226 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5079,11 +5096,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5083 "util/configparser.c" /* yacc.c:1646 */ +#line 5100 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2230 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2240 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5092,31 +5109,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5096 "util/configparser.c" /* yacc.c:1646 */ +#line 5113 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2240 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2250 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5106 "util/configparser.c" /* yacc.c:1646 */ +#line 5123 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2247 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2257 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5116 "util/configparser.c" /* yacc.c:1646 */ +#line 5133 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2254 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2264 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5124,11 +5141,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5128 "util/configparser.c" /* yacc.c:1646 */ +#line 5145 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2263 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2273 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5136,11 +5153,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5140 "util/configparser.c" /* yacc.c:1646 */ +#line 5157 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2272 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2282 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5149,11 +5166,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5153 "util/configparser.c" /* yacc.c:1646 */ +#line 5170 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2282 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2292 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5162,11 +5179,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5166 "util/configparser.c" /* yacc.c:1646 */ +#line 5183 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2292 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2302 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5175,31 +5192,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5179 "util/configparser.c" /* yacc.c:1646 */ +#line 5196 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2302 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2312 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5189 "util/configparser.c" /* yacc.c:1646 */ +#line 5206 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2309 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2319 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5199 "util/configparser.c" /* yacc.c:1646 */ +#line 5216 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2316 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2326 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5207,11 +5224,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5211 "util/configparser.c" /* yacc.c:1646 */ +#line 5228 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2325 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2335 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5219,11 +5236,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5223 "util/configparser.c" /* yacc.c:1646 */ +#line 5240 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2334 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2344 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5232,11 +5249,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5236 "util/configparser.c" /* yacc.c:1646 */ +#line 5253 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2344 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2354 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5245,52 +5262,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5249 "util/configparser.c" /* yacc.c:1646 */ +#line 5266 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2354 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2364 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5259 "util/configparser.c" /* yacc.c:1646 */ +#line 5276 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2361 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2371 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5269 "util/configparser.c" /* yacc.c:1646 */ +#line 5286 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2368 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2378 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5279 "util/configparser.c" /* yacc.c:1646 */ +#line 5296 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2375 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2385 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5290 "util/configparser.c" /* yacc.c:1646 */ +#line 5307 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2383 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2393 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5299,11 +5316,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5303 "util/configparser.c" /* yacc.c:1646 */ +#line 5320 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2393 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2403 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5312,11 +5329,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5316 "util/configparser.c" /* yacc.c:1646 */ +#line 5333 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2403 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2413 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5325,11 +5342,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5329 "util/configparser.c" /* yacc.c:1646 */ +#line 5346 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2413 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2423 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5338,11 +5355,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5342 "util/configparser.c" /* yacc.c:1646 */ +#line 5359 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2423 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2433 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5373,11 +5390,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5377 "util/configparser.c" /* yacc.c:1646 */ +#line 5394 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2455 "./util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2465 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5386,33 +5403,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5390 "util/configparser.c" /* yacc.c:1646 */ +#line 5407 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2465 "./util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2475 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5401 "util/configparser.c" /* yacc.c:1646 */ +#line 5418 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2473 "./util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2483 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5412 "util/configparser.c" /* yacc.c:1646 */ +#line 5429 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2481 "./util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2491 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5426,11 +5443,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5430 "util/configparser.c" /* yacc.c:1646 */ +#line 5447 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2496 "./util/configparser.y" /* yacc.c:1646 */ + case 457: +#line 2506 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5438,19 +5455,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5442 "util/configparser.c" /* yacc.c:1646 */ +#line 5459 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2505 "./util/configparser.y" /* yacc.c:1646 */ + case 458: +#line 2515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5450 "util/configparser.c" /* yacc.c:1646 */ +#line 5467 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2516 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2526 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5459,11 +5476,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5463 "util/configparser.c" /* yacc.c:1646 */ +#line 5480 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2526 "./util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2536 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5471,79 +5488,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5475 "util/configparser.c" /* yacc.c:1646 */ +#line 5492 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2535 "./util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2545 "./util/configparser.y" /* yacc.c:1646 */ { 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 5485 "util/configparser.c" /* yacc.c:1646 */ +#line 5502 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2542 "./util/configparser.y" /* yacc.c:1646 */ + case 472: +#line 2552 "./util/configparser.y" /* yacc.c:1646 */ { 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 5495 "util/configparser.c" /* yacc.c:1646 */ +#line 5512 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2549 "./util/configparser.y" /* yacc.c:1646 */ + case 473: +#line 2559 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5505 "util/configparser.c" /* yacc.c:1646 */ +#line 5522 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2556 "./util/configparser.y" /* yacc.c:1646 */ + case 474: +#line 2566 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5515 "util/configparser.c" /* yacc.c:1646 */ +#line 5532 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2563 "./util/configparser.y" /* yacc.c:1646 */ + case 475: +#line 2573 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5525 "util/configparser.c" /* yacc.c:1646 */ +#line 5542 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2570 "./util/configparser.y" /* yacc.c:1646 */ + case 476: +#line 2580 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5535 "util/configparser.c" /* yacc.c:1646 */ +#line 5552 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2577 "./util/configparser.y" /* yacc.c:1646 */ + case 477: +#line 2587 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5543 "util/configparser.c" /* yacc.c:1646 */ +#line 5560 "util/configparser.c" /* yacc.c:1646 */ break; - case 490: -#line 2594 "./util/configparser.y" /* yacc.c:1646 */ + case 492: +#line 2604 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5551,21 +5568,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5555 "util/configparser.c" /* yacc.c:1646 */ +#line 5572 "util/configparser.c" /* yacc.c:1646 */ break; - case 491: -#line 2603 "./util/configparser.y" /* yacc.c:1646 */ + case 493: +#line 2613 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5565 "util/configparser.c" /* yacc.c:1646 */ +#line 5582 "util/configparser.c" /* yacc.c:1646 */ break; - case 492: -#line 2610 "./util/configparser.y" /* yacc.c:1646 */ + case 494: +#line 2620 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5573,11 +5590,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5577 "util/configparser.c" /* yacc.c:1646 */ +#line 5594 "util/configparser.c" /* yacc.c:1646 */ break; - case 493: -#line 2619 "./util/configparser.y" /* yacc.c:1646 */ + case 495: +#line 2629 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5585,31 +5602,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5589 "util/configparser.c" /* yacc.c:1646 */ +#line 5606 "util/configparser.c" /* yacc.c:1646 */ break; - case 494: -#line 2628 "./util/configparser.y" /* yacc.c:1646 */ + case 496: +#line 2638 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5599 "util/configparser.c" /* yacc.c:1646 */ +#line 5616 "util/configparser.c" /* yacc.c:1646 */ break; - case 495: -#line 2635 "./util/configparser.y" /* yacc.c:1646 */ + case 497: +#line 2645 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5609 "util/configparser.c" /* yacc.c:1646 */ +#line 5626 "util/configparser.c" /* yacc.c:1646 */ break; - case 496: -#line 2642 "./util/configparser.y" /* yacc.c:1646 */ + case 498: +#line 2652 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5618,11 +5635,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5622 "util/configparser.c" /* yacc.c:1646 */ +#line 5639 "util/configparser.c" /* yacc.c:1646 */ break; - case 497: -#line 2652 "./util/configparser.y" /* yacc.c:1646 */ + case 499: +#line 2662 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5631,11 +5648,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5635 "util/configparser.c" /* yacc.c:1646 */ +#line 5652 "util/configparser.c" /* yacc.c:1646 */ break; - case 498: -#line 2662 "./util/configparser.y" /* yacc.c:1646 */ + case 500: +#line 2672 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5644,11 +5661,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5648 "util/configparser.c" /* yacc.c:1646 */ +#line 5665 "util/configparser.c" /* yacc.c:1646 */ break; - case 499: -#line 2672 "./util/configparser.y" /* yacc.c:1646 */ + case 501: +#line 2682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5657,11 +5674,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5661 "util/configparser.c" /* yacc.c:1646 */ +#line 5678 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2682 "./util/configparser.y" /* yacc.c:1646 */ + case 502: +#line 2692 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5670,11 +5687,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5674 "util/configparser.c" /* yacc.c:1646 */ +#line 5691 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2692 "./util/configparser.y" /* yacc.c:1646 */ + case 503: +#line 2702 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5683,29 +5700,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5687 "util/configparser.c" /* yacc.c:1646 */ +#line 5704 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2702 "./util/configparser.y" /* yacc.c:1646 */ + case 504: +#line 2712 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5695 "util/configparser.c" /* yacc.c:1646 */ +#line 5712 "util/configparser.c" /* yacc.c:1646 */ break; - case 506: -#line 2711 "./util/configparser.y" /* yacc.c:1646 */ + case 508: +#line 2721 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5705 "util/configparser.c" /* yacc.c:1646 */ +#line 5722 "util/configparser.c" /* yacc.c:1646 */ break; - case 507: -#line 2717 "./util/configparser.y" /* yacc.c:1646 */ + case 509: +#line 2727 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5714,21 +5731,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5718 "util/configparser.c" /* yacc.c:1646 */ +#line 5735 "util/configparser.c" /* yacc.c:1646 */ break; - case 508: -#line 2727 "./util/configparser.y" /* yacc.c:1646 */ + case 510: +#line 2737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 5728 "util/configparser.c" /* yacc.c:1646 */ +#line 5745 "util/configparser.c" /* yacc.c:1646 */ break; - case 509: -#line 2734 "./util/configparser.y" /* yacc.c:1646 */ + case 511: +#line 2744 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5736,30 +5753,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5740 "util/configparser.c" /* yacc.c:1646 */ +#line 5757 "util/configparser.c" /* yacc.c:1646 */ break; - case 510: -#line 2743 "./util/configparser.y" /* yacc.c:1646 */ + case 512: +#line 2753 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5751 "util/configparser.c" /* yacc.c:1646 */ +#line 5768 "util/configparser.c" /* yacc.c:1646 */ break; - case 511: -#line 2751 "./util/configparser.y" /* yacc.c:1646 */ + case 513: +#line 2761 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5759 "util/configparser.c" /* yacc.c:1646 */ +#line 5776 "util/configparser.c" /* yacc.c:1646 */ break; - case 524: -#line 2767 "./util/configparser.y" /* yacc.c:1646 */ + case 526: +#line 2777 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5767,11 +5784,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5771 "util/configparser.c" /* yacc.c:1646 */ +#line 5788 "util/configparser.c" /* yacc.c:1646 */ break; - case 525: -#line 2777 "./util/configparser.y" /* yacc.c:1646 */ + case 527: +#line 2787 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5779,21 +5796,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5783 "util/configparser.c" /* yacc.c:1646 */ +#line 5800 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2786 "./util/configparser.y" /* yacc.c:1646 */ + case 528: +#line 2796 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5793 "util/configparser.c" /* yacc.c:1646 */ +#line 5810 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2793 "./util/configparser.y" /* yacc.c:1646 */ + case 529: +#line 2803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5801,21 +5818,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 5805 "util/configparser.c" /* yacc.c:1646 */ +#line 5822 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2802 "./util/configparser.y" /* yacc.c:1646 */ + case 530: +#line 2812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 5815 "util/configparser.c" /* yacc.c:1646 */ +#line 5832 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2809 "./util/configparser.y" /* yacc.c:1646 */ + case 531: +#line 2819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5823,22 +5840,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 5827 "util/configparser.c" /* yacc.c:1646 */ +#line 5844 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2818 "./util/configparser.y" /* yacc.c:1646 */ + case 532: +#line 2828 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5838 "util/configparser.c" /* yacc.c:1646 */ +#line 5855 "util/configparser.c" /* yacc.c:1646 */ break; - case 531: -#line 2826 "./util/configparser.y" /* yacc.c:1646 */ + case 533: +#line 2836 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5850,22 +5867,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5854 "util/configparser.c" /* yacc.c:1646 */ +#line 5871 "util/configparser.c" /* yacc.c:1646 */ break; - case 532: -#line 2839 "./util/configparser.y" /* yacc.c:1646 */ + case 534: +#line 2849 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5865 "util/configparser.c" /* yacc.c:1646 */ +#line 5882 "util/configparser.c" /* yacc.c:1646 */ break; - case 533: -#line 2847 "./util/configparser.y" /* yacc.c:1646 */ + case 535: +#line 2857 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5877,19 +5894,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5881 "util/configparser.c" /* yacc.c:1646 */ +#line 5898 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2860 "./util/configparser.y" /* yacc.c:1646 */ + case 536: +#line 2870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5889 "util/configparser.c" /* yacc.c:1646 */ +#line 5906 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2870 "./util/configparser.y" /* yacc.c:1646 */ + case 544: +#line 2880 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5903,11 +5920,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5907 "util/configparser.c" /* yacc.c:1646 */ +#line 5924 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2885 "./util/configparser.y" /* yacc.c:1646 */ + case 545: +#line 2895 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5921,11 +5938,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5925 "util/configparser.c" /* yacc.c:1646 */ +#line 5942 "util/configparser.c" /* yacc.c:1646 */ break; - case 544: -#line 2900 "./util/configparser.y" /* yacc.c:1646 */ + case 546: +#line 2910 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5936,11 +5953,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5940 "util/configparser.c" /* yacc.c:1646 */ +#line 5957 "util/configparser.c" /* yacc.c:1646 */ break; - case 545: -#line 2912 "./util/configparser.y" /* yacc.c:1646 */ + case 547: +#line 2922 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5954,11 +5971,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5958 "util/configparser.c" /* yacc.c:1646 */ +#line 5975 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2927 "./util/configparser.y" /* yacc.c:1646 */ + case 548: +#line 2937 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5970,11 +5987,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5974 "util/configparser.c" /* yacc.c:1646 */ +#line 5991 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2940 "./util/configparser.y" /* yacc.c:1646 */ + case 549: +#line 2950 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -5984,11 +6001,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 5988 "util/configparser.c" /* yacc.c:1646 */ +#line 6005 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5992 "util/configparser.c" /* yacc.c:1646 */ +#line 6009 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6216,7 +6233,7 @@ yyreturn: #endif return yyresult; } -#line 2950 "./util/configparser.y" /* yacc.c:1906 */ +#line 2960 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index c02bb6d5f..0235e6ed2 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -307,7 +307,8 @@ extern int yydebug; VAR_LOG_TAG_QUERYREPLY = 517, VAR_STREAM_WAIT_SIZE = 518, VAR_TLS_CIPHERS = 519, - VAR_TLS_CIPHERSUITES = 520 + VAR_TLS_CIPHERSUITES = 520, + VAR_TLS_SESSION_TICKET_KEYS = 521 }; #endif /* Tokens. */ @@ -574,6 +575,7 @@ extern int yydebug; #define VAR_STREAM_WAIT_SIZE 518 #define VAR_TLS_CIPHERS 519 #define VAR_TLS_CIPHERSUITES 520 +#define VAR_TLS_SESSION_TICKET_KEYS 521 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -584,7 +586,7 @@ union YYSTYPE char* str; -#line 588 "util/configparser.h" /* yacc.c:1909 */ +#line 590 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 440e9afec..ca9f10db0 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -166,6 +166,7 @@ extern struct config_parser_state* cfg_parser; %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_TLS_SESSION_TICKET_KEYS %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -265,7 +266,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_fast_server_permil | server_fast_server_num | server_tls_win_cert | 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_stream_wait_size | server_tls_ciphers | + server_tls_ciphersuites | server_tls_session_ticket_keys ; stubstart: VAR_STUB_ZONE { @@ -834,6 +836,14 @@ server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG cfg_parser->cfg->tls_ciphersuites = $2; } ; +server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG + { + OUTYY(("P(server_tls_session_ticket_keys:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_session_ticket_keys, + $2)) + yyerror("out of memory"); + } + ; 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 0393ff9a1..861ee5748 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -48,6 +48,7 @@ #include #ifdef HAVE_OPENSSL_SSL_H #include +#include #endif #ifdef HAVE_OPENSSL_ERR_H #include @@ -70,6 +71,12 @@ int RRSET_ROUNDROBIN = 0; /** log tag queries with name instead of 'info' for filtering */ int LOG_TAG_QUERYREPLY = 0; +static struct tls_session_ticket_key { + unsigned char *key_name; + unsigned char *aes_key; + unsigned char *hmac_key; +} *ticket_keys; + /* returns true is string addr is an ip6 specced address */ int str_is_ip6(const char* str) @@ -1090,3 +1097,106 @@ void ub_openssl_lock_delete(void) #endif /* OPENSSL_THREADS */ } +int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys) { +#ifdef HAVE_SSL + int s = 1; + struct config_strlist* p; + struct tls_session_ticket_key *keys; + for(p = tls_session_ticket_keys; p; p = p->next) { + s++; + } + keys = calloc(s, sizeof(struct tls_session_ticket_key)); + memset(keys, 0, sizeof(keys)); + ticket_keys = keys; + + for(p = tls_session_ticket_keys; p; p = p->next) { + unsigned char *data = (unsigned char *)malloc(80); + FILE *f = fopen(p->str, "r"); + if(!f) { + log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); + return 0; + } + int n = fread(data, 1, 80, f); + fclose(f); + + if(n != 80) { + log_err("tls-session-ticket-key %s is %d bytes, must be 80 bytes", p->str, n); + return 0; + } + verbose(VERB_OPS, "read tls-session-ticket-key: %s", p->str); + + keys->key_name = data; + keys->aes_key = data + 16; + keys->hmac_key = data + 48; + keys++; + } + keys->key_name = NULL; + if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) { + log_err("not support TLS session ticket"); + return 0; + } + return 1; +#else + return 0; +#endif + +} + +int tls_session_ticket_key_cb(void *sslctx, unsigned char* key_name,unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc) +{ +#ifdef HAVE_SSL + const EVP_MD *digest; + const EVP_CIPHER *cipher; + int evp_chiper_length; + digest = EVP_sha256(); + cipher = EVP_aes_256_cbc(); + evp_chiper_length = EVP_CIPHER_iv_length(cipher); + if( enc == 1 ) { + // encrypt + verbose(VERB_CLIENT, "start session encrypt"); + memcpy(key_name, ticket_keys->key_name, 16); + if (RAND_bytes(iv, evp_chiper_length) != 1) { + verbose(VERB_CLIENT, "RAND_bytes failed"); + return -1; + } + if (EVP_EncryptInit_ex(evp_sctx, cipher, NULL, ticket_keys->aes_key, iv) != 1) { + verbose(VERB_CLIENT, "EVP_EncryptInit_ex failed"); + return -1; + } + if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) { + verbose(VERB_CLIENT, "HMAC_Init_ex failed"); + return -1; + } + return 1; + } else if (enc == 0) { + //decrypt + verbose(VERB_CLIENT, "start session decrypt"); + struct tls_session_ticket_key *key; + for(key = ticket_keys; key->key_name != NULL; key++) { + if (!memcmp(key_name, key->key_name, 16)) { + verbose(VERB_CLIENT, "Found session_key"); + break; + } + } + if(key->key_name == NULL) { + verbose(VERB_CLIENT, "Not found session_key"); + return 0; + } + + if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) { + verbose(VERB_CLIENT, "HMAC_Init_ex failed"); + return -1; + } + if (EVP_DecryptInit_ex(evp_sctx, cipher, NULL, key->aes_key, iv) != 1) { + log_err("EVP_DecryptInit_ex failed"); + return -1; + } + + return (key == ticket_keys) ? 1 : 2; + } + return -1; +#else + return 0; +#endif + +} \ No newline at end of file diff --git a/util/net_help.h b/util/net_help.h index 0ca0f3f7d..d3dc04e52 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -42,6 +42,7 @@ #ifndef NET_HELP_H #define NET_HELP_H #include "util/log.h" +#include "util/config_file.h" struct sock_list; struct regional; @@ -437,4 +438,24 @@ int ub_openssl_lock_init(void); */ void ub_openssl_lock_delete(void); +/** + * setup TLS session ticket + * @param sslctx: the SSL_CTX to use (from connect_sslctx_create()) + * @param tls_session_ticket_keys: TLS ticket secret filenames + * @return false on failure (alloc failure). + */ +int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys); + +/** + * callback TLS session ticket encrypt and decrypt + * @param s: the SSL_CTX to use (from connect_sslctx_create()) + * @param key_name: secret name + * @param iv: + * @param evp_ctx: + * @param hmac_ctx: + * @param enc: 1 is encrypt, 0 is decrypt + * @return false on failure (alloc failure). + */ + +int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv, void *evp_ctx, void *hmac_ctx, int enc); #endif /* NET_HELP_H */ From 011a7d8830d86945ea54791c699876559e47c404 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 09:43:47 +0000 Subject: [PATCH 035/117] - Fixes for patch (includes, declarations, warnings). git-svn-id: file:///svn/unbound/trunk@5060 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + util/config_file.h | 2 +- util/net_help.c | 19 +++++++++++-------- util/net_help.h | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 856c65781..a5b9bb886 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,7 @@ library compatibility when compiling. - Patch for TLS session resumption from Manabu Sonoda, enable with tls-session-ticket-keys in unbound.conf. + - Fixes for patch (includes, declarations, warnings). 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. diff --git a/util/config_file.h b/util/config_file.h index 32fb7d30b..e87461aab 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -120,7 +120,7 @@ struct config_file { int tls_win_cert; /** additional tls ports */ struct config_strlist* tls_additional_port; - /** secret key used to encrypt and decrypt TLS session ticket -**/ + /** secret key used to encrypt and decrypt TLS session ticket */ struct config_strlist* tls_session_ticket_keys; /** TLS ciphers */ char* tls_ciphers; diff --git a/util/net_help.c b/util/net_help.c index 861ee5748..01c82cc0a 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -43,12 +43,14 @@ #include "util/data/dname.h" #include "util/module.h" #include "util/regional.h" +#include "util/config_file.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" #include #ifdef HAVE_OPENSSL_SSL_H #include #include +#include #endif #ifdef HAVE_OPENSSL_ERR_H #include @@ -1106,17 +1108,18 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses s++; } keys = calloc(s, sizeof(struct tls_session_ticket_key)); - memset(keys, 0, sizeof(keys)); + memset(keys, 0, sizeof(*keys)); ticket_keys = keys; for(p = tls_session_ticket_keys; p; p = p->next) { + int n; unsigned char *data = (unsigned char *)malloc(80); FILE *f = fopen(p->str, "r"); if(!f) { log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); return 0; } - int n = fread(data, 1, 80, f); + n = fread(data, 1, 80, f); fclose(f); if(n != 80) { @@ -1132,7 +1135,7 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses } keys->key_name = NULL; if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) { - log_err("not support TLS session ticket"); + log_err("no support for TLS session ticket"); return 0; } return 1; @@ -1142,7 +1145,7 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses } -int tls_session_ticket_key_cb(void *sslctx, unsigned char* key_name,unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc) +int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name,unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc) { #ifdef HAVE_SSL const EVP_MD *digest; @@ -1152,7 +1155,7 @@ int tls_session_ticket_key_cb(void *sslctx, unsigned char* key_name,unsigned cha cipher = EVP_aes_256_cbc(); evp_chiper_length = EVP_CIPHER_iv_length(cipher); if( enc == 1 ) { - // encrypt + /* encrypt */ verbose(VERB_CLIENT, "start session encrypt"); memcpy(key_name, ticket_keys->key_name, 16); if (RAND_bytes(iv, evp_chiper_length) != 1) { @@ -1169,9 +1172,9 @@ int tls_session_ticket_key_cb(void *sslctx, unsigned char* key_name,unsigned cha } return 1; } else if (enc == 0) { - //decrypt - verbose(VERB_CLIENT, "start session decrypt"); + /* decrypt */ struct tls_session_ticket_key *key; + verbose(VERB_CLIENT, "start session decrypt"); for(key = ticket_keys; key->key_name != NULL; key++) { if (!memcmp(key_name, key->key_name, 16)) { verbose(VERB_CLIENT, "Found session_key"); @@ -1199,4 +1202,4 @@ int tls_session_ticket_key_cb(void *sslctx, unsigned char* key_name,unsigned cha return 0; #endif -} \ No newline at end of file +} diff --git a/util/net_help.h b/util/net_help.h index d3dc04e52..6c6707677 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -42,9 +42,9 @@ #ifndef NET_HELP_H #define NET_HELP_H #include "util/log.h" -#include "util/config_file.h" struct sock_list; struct regional; +struct config_strlist; /** DNS constants for uint16_t style flag manipulation. host byteorder. * 1 1 1 1 1 1 From ed8b859e31b63e1e51b12fd41e4d7ac9a3c7e3c3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 09:44:08 +0000 Subject: [PATCH 036/117] make depend git-svn-id: file:///svn/unbound/trunk@5061 be551aaa-1e26-0410-a405-d3ace91eadb9 --- Makefile.in | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index 0a257bda5..7c641712c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -879,8 +879,8 @@ netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/neteve net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.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/regional.h $(srcdir)/sldns/parseutil.h \ - $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ @@ -1186,7 +1186,8 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \ - $(srcdir)/validator/val_neg.h + $(srcdir)/validator/val_neg.h \ + unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/remote.h \ @@ -1280,7 +1281,8 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \ - $(srcdir)/validator/val_neg.h + $(srcdir)/validator/val_neg.h \ + replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \ From d3f397c686059f117dac669eff6e89773eeedebb Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 10:19:04 +0000 Subject: [PATCH 037/117] More fixes, statistic counter at end of struct for backwards compatibility, man page, free at exit, indent. git-svn-id: file:///svn/unbound/trunk@5062 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/daemon.c | 1 + doc/unbound-control.8.in | 4 +++ doc/unbound.conf.5.in | 10 ++++++ libunbound/unbound.h | 4 +-- util/net_help.c | 72 +++++++++++++++++++++++----------------- util/net_help.h | 20 +++++++---- 6 files changed, 72 insertions(+), 39 deletions(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index 4c3d5f1c1..e14edb99d 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -749,6 +749,7 @@ daemon_delete(struct daemon* daemon) free(daemon->pidfile); free(daemon->env); #ifdef HAVE_SSL + listen_sslctx_delete_ticket_keys(); SSL_CTX_free((SSL_CTX*)daemon->listen_sslctx); SSL_CTX_free((SSL_CTX*)daemon->connect_sslctx); #endif diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index f5944a75f..6ea40009c 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -538,6 +538,10 @@ other servers. Number of queries that were made using TLS towards the unbound server. These are also counted in num.query.tcp, because TLS uses TCP. .TP +.I num.query.tls.resume +Number of TLS session resumptions, these are queries over TLS towards +the unbound server where the client negotiated a TLS session resumption key. +.TP .I num.query.ipv6 Number of queries that were made using IPv6 towards the unbound server. .TP diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index d23292725..9723141b9 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -504,6 +504,16 @@ List portnumbers as tls\-additional\-port, and when interfaces are defined, eg. with the @port suffix, as this port number, they provide dns over TLS service. Can list multiple, each on a new statement. .TP +.B tls-session-ticket-keys: \fI +If not "", lists files with 80 bytes of random contents that are used to +perform TLS session resumption for clients using the unbound server. +These files contain the secret key for the TLS session tickets. +First key use to encrypt and decrypt TLS session tickets. +Other keys use to decrypt only. With this you can roll over to new keys, +by generating a new first file and allowing decrypt of the old file by +listing it after the first file for some time, after the wait clients are not +using the old key any more and the old key can be removed. +.TP .B tls\-ciphers: \fI Set the list of ciphers to allow when serving TLS. Use "" for defaults, and that is the default. diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 3681340f8..a290e3e6c 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -682,8 +682,6 @@ struct ub_server_stats { long long qtcp_outgoing; /** number of queries over (DNS over) TLS */ long long qtls; - /** number of TLS connection resume */ - long long qtls_resume; /** number of queries over IPv6 */ long long qipv6; /** number of queries with QR bit */ @@ -774,6 +772,8 @@ struct ub_server_stats { long long num_query_subnet_cache; /** number of bytes in the stream wait buffers */ long long mem_stream_wait; + /** number of TLS connection resume */ + long long qtls_resume; }; /** diff --git a/util/net_help.c b/util/net_help.c index 01c82cc0a..63841becb 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -74,9 +74,9 @@ int RRSET_ROUNDROBIN = 0; int LOG_TAG_QUERYREPLY = 0; static struct tls_session_ticket_key { - unsigned char *key_name; - unsigned char *aes_key; - unsigned char *hmac_key; + unsigned char *key_name; + unsigned char *aes_key; + unsigned char *hmac_key; } *ticket_keys; /* returns true is string addr is an ip6 specced address */ @@ -1108,7 +1108,7 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses s++; } keys = calloc(s, sizeof(struct tls_session_ticket_key)); - memset(keys, 0, sizeof(*keys)); + memset(keys, 0, s*sizeof(*keys)); ticket_keys = keys; for(p = tls_session_ticket_keys; p; p = p->next) { @@ -1133,50 +1133,51 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses keys->hmac_key = data + 48; keys++; } + /* terminate array with NULL key name entry */ keys->key_name = NULL; - if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) { + if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) { log_err("no support for TLS session ticket"); return 0; - } - return 1; + } + return 1; #else return 0; #endif } -int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name,unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc) +int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name, unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc) { #ifdef HAVE_SSL - const EVP_MD *digest; - const EVP_CIPHER *cipher; - int evp_chiper_length; + const EVP_MD *digest; + const EVP_CIPHER *cipher; + int evp_cipher_length; digest = EVP_sha256(); cipher = EVP_aes_256_cbc(); - evp_chiper_length = EVP_CIPHER_iv_length(cipher); + evp_cipher_length = EVP_CIPHER_iv_length(cipher); if( enc == 1 ) { /* encrypt */ verbose(VERB_CLIENT, "start session encrypt"); memcpy(key_name, ticket_keys->key_name, 16); - if (RAND_bytes(iv, evp_chiper_length) != 1) { + if (RAND_bytes(iv, evp_cipher_length) != 1) { verbose(VERB_CLIENT, "RAND_bytes failed"); - return -1; + return -1; } - if (EVP_EncryptInit_ex(evp_sctx, cipher, NULL, ticket_keys->aes_key, iv) != 1) { + if (EVP_EncryptInit_ex(evp_sctx, cipher, NULL, ticket_keys->aes_key, iv) != 1) { verbose(VERB_CLIENT, "EVP_EncryptInit_ex failed"); - return -1; + return -1; } - if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) { + if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) { verbose(VERB_CLIENT, "HMAC_Init_ex failed"); - return -1; - } - return 1; - } else if (enc == 0) { + return -1; + } + return 1; + } else if (enc == 0) { /* decrypt */ struct tls_session_ticket_key *key; verbose(VERB_CLIENT, "start session decrypt"); for(key = ticket_keys; key->key_name != NULL; key++) { - if (!memcmp(key_name, key->key_name, 16)) { + if (!memcmp(key_name, key->key_name, 16)) { verbose(VERB_CLIENT, "Found session_key"); break; } @@ -1186,20 +1187,31 @@ int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name return 0; } - if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) { + if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) { verbose(VERB_CLIENT, "HMAC_Init_ex failed"); - return -1; - } - if (EVP_DecryptInit_ex(evp_sctx, cipher, NULL, key->aes_key, iv) != 1) { + return -1; + } + if (EVP_DecryptInit_ex(evp_sctx, cipher, NULL, key->aes_key, iv) != 1) { log_err("EVP_DecryptInit_ex failed"); - return -1; - } + return -1; + } return (key == ticket_keys) ? 1 : 2; } - return -1; + return -1; #else return 0; #endif - +} + +void +listen_sslctx_delete_ticket_keys(void) +{ + struct tls_session_ticket_key *key; + if(!ticket_keys) return; + for(key = ticket_keys; key->key_name != NULL; key++) { + free(key->key_name); + } + free(ticket_keys); + ticket_keys = NULL; } diff --git a/util/net_help.h b/util/net_help.h index 6c6707677..0b197fbdd 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -444,18 +444,24 @@ void ub_openssl_lock_delete(void); * @param tls_session_ticket_keys: TLS ticket secret filenames * @return false on failure (alloc failure). */ -int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys); +int listen_sslctx_setup_ticket_keys(void* sslctx, + struct config_strlist* tls_session_ticket_keys); /** * callback TLS session ticket encrypt and decrypt + * For use with SSL_CTX_set_tlsext_ticket_key_cb * @param s: the SSL_CTX to use (from connect_sslctx_create()) - * @param key_name: secret name - * @param iv: - * @param evp_ctx: - * @param hmac_ctx: + * @param key_name: secret name, 16 bytes + * @param iv: up to EVP_MAX_IV_LENGTH. + * @param evp_ctx: the evp cipher context, function sets this. + * @param hmac_ctx: the hmax context, function sets this. * @param enc: 1 is encrypt, 0 is decrypt - * @return false on failure (alloc failure). + * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket + * (the ticket is decrypt only). and <0 for failures. */ - int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv, void *evp_ctx, void *hmac_ctx, int enc); + +/** Free memory used for TLS session ticket keys */ +void listen_sslctx_delete_ticket_keys(void); + #endif /* NET_HELP_H */ From cc9fb69911d6bda0e592cfaace51ba9d60902847 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 10:23:02 +0000 Subject: [PATCH 038/117] fix lint and clang analysis errors git-svn-id: file:///svn/unbound/trunk@5063 be551aaa-1e26-0410-a405-d3ace91eadb9 --- util/net_help.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/util/net_help.c b/util/net_help.c index 63841becb..7fa140fd9 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1101,7 +1101,7 @@ void ub_openssl_lock_delete(void) int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys) { #ifdef HAVE_SSL - int s = 1; + size_t s = 1; struct config_strlist* p; struct tls_session_ticket_key *keys; for(p = tls_session_ticket_keys; p; p = p->next) { @@ -1112,18 +1112,20 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses ticket_keys = keys; for(p = tls_session_ticket_keys; p; p = p->next) { - int n; + size_t n; unsigned char *data = (unsigned char *)malloc(80); FILE *f = fopen(p->str, "r"); if(!f) { log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); + free(data); return 0; } n = fread(data, 1, 80, f); fclose(f); if(n != 80) { - log_err("tls-session-ticket-key %s is %d bytes, must be 80 bytes", p->str, n); + log_err("tls-session-ticket-key %s is %d bytes, must be 80 bytes", p->str, (int)n); + free(data); return 0; } verbose(VERB_OPS, "read tls-session-ticket-key: %s", p->str); From 68a57554a62ee547495f28e9d6826f3fb47e141b Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 10:41:03 +0000 Subject: [PATCH 039/117] For TLS session keys, keep config options in order read from file to keep the first one as the first one. git-svn-id: file:///svn/unbound/trunk@5064 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/unbound.c | 4 ++-- doc/Changelog | 4 +++- util/config_file.c | 6 +++--- util/config_file.h | 2 +- util/configparser.c | 2 +- util/configparser.y | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/daemon/unbound.c b/daemon/unbound.c index c4e39e354..4a508c138 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -443,8 +443,8 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, } } #endif - if(cfg->tls_session_ticket_keys) { - if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys)) { + if(cfg->tls_session_ticket_keys.first) { + if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys.first)) { fatal_exit("could not set session ticket SSL_CTX"); } } diff --git a/doc/Changelog b/doc/Changelog index a5b9bb886..bb789fbfa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,7 +6,9 @@ library compatibility when compiling. - Patch for TLS session resumption from Manabu Sonoda, enable with tls-session-ticket-keys in unbound.conf. - - Fixes for patch (includes, declarations, warnings). + - Fixes for patch (includes, declarations, warnings). Free at end + and keep config options in order read from file to keep the first + one as the first one. 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. diff --git a/util/config_file.c b/util/config_file.c index 3e517695e..9b60254d7 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -487,7 +487,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST("additional-tls-port:", tls_additional_port) else S_STRLIST("tls-additional-ports:", tls_additional_port) else S_STRLIST("tls-additional-port:", tls_additional_port) - else S_STRLIST("tls-session-ticket-keys:", tls_session_ticket_keys) + 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("interface-automatic:", if_automatic) @@ -927,7 +927,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) else O_YNO(opt, "tls-win-cert", tls_win_cert) else O_LST(opt, "tls-additional-port", tls_additional_port) - else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys) + 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, "use-systemd", use_systemd) @@ -1364,7 +1364,7 @@ config_delete(struct config_file* cfg) free(cfg->ssl_service_pem); free(cfg->tls_cert_bundle); config_delstrlist(cfg->tls_additional_port); - config_delstrlist(cfg->tls_session_ticket_keys); + config_delstrlist(cfg->tls_session_ticket_keys.first); free(cfg->tls_ciphers); free(cfg->tls_ciphersuites); free(cfg->log_identity); diff --git a/util/config_file.h b/util/config_file.h index e87461aab..3cffdbff9 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -121,7 +121,7 @@ struct config_file { /** additional tls ports */ struct config_strlist* tls_additional_port; /** secret key used to encrypt and decrypt TLS session ticket */ - struct config_strlist* tls_session_ticket_keys; + struct config_strlist_head tls_session_ticket_keys; /** TLS ciphers */ char* tls_ciphers; /** TLS chiphersuites (TLSv1.3) */ diff --git a/util/configparser.c b/util/configparser.c index 0a12dcad2..18739485a 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -3292,7 +3292,7 @@ yyreduce: #line 840 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->tls_session_ticket_keys, + if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } diff --git a/util/configparser.y b/util/configparser.y index ca9f10db0..5f52f4d77 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -839,7 +839,7 @@ server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", $2)); - if(!cfg_strlist_insert(&cfg_parser->cfg->tls_session_ticket_keys, + if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, $2)) yyerror("out of memory"); } From 9d4ca81959cb686e3140166bd2940f1f3e962271 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 10:50:26 +0000 Subject: [PATCH 040/117] Fixup ssl unit test with example ticket files. git-svn-id: file:///svn/unbound/trunk@5065 be551aaa-1e26-0410-a405-d3ace91eadb9 --- testdata/stream_ssl.tdir/stream_ssl.post | 2 ++ testdata/stream_ssl.tdir/ticket1.dat | 1 + testdata/stream_ssl.tdir/ticket2.dat | 1 + 3 files changed, 4 insertions(+) create mode 100644 testdata/stream_ssl.tdir/ticket1.dat create mode 100644 testdata/stream_ssl.tdir/ticket2.dat diff --git a/testdata/stream_ssl.tdir/stream_ssl.post b/testdata/stream_ssl.tdir/stream_ssl.post index 4cdbe7267..eed0c0e1b 100644 --- a/testdata/stream_ssl.tdir/stream_ssl.post +++ b/testdata/stream_ssl.tdir/stream_ssl.post @@ -8,3 +8,5 @@ . ../common.sh kill_pid $UNBOUNDSERV_PID kill_pid $UNBOUNDCLIE_PID +cat unboundserv.log +cat unboundclie.log diff --git a/testdata/stream_ssl.tdir/ticket1.dat b/testdata/stream_ssl.tdir/ticket1.dat new file mode 100644 index 000000000..1cc7902af --- /dev/null +++ b/testdata/stream_ssl.tdir/ticket1.dat @@ -0,0 +1 @@ +XÁ„d¨,f}¼Œš;òJ‚qéÌŒÍ ¨ñs%Ã[)œMÎï½éo“Á¶@ðÓÙ5n_wÛ¿ô›ÃÃÅI¢KæâCºšÓúÊè" \ No newline at end of file diff --git a/testdata/stream_ssl.tdir/ticket2.dat b/testdata/stream_ssl.tdir/ticket2.dat new file mode 100644 index 000000000..7cb5ddff7 --- /dev/null +++ b/testdata/stream_ssl.tdir/ticket2.dat @@ -0,0 +1 @@ +s×ß¶|ÜNü*Ô2a{IiÒ6ù™'õÐÝ ²Äi9I½ÛÅ+ȵj"WzëÙ)s0“ˆ÷ÔD%õh ³H€“O£é…´K©ëò @ \ No newline at end of file From 649e265d6f6ecdc0d3dd99bc3416129177abb25a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 11:52:17 +0000 Subject: [PATCH 041/117] - Fix for IXFR fallback to reset counter when IXFR does not timeout. git-svn-id: file:///svn/unbound/trunk@5066 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + doc/unbound.conf.5.in | 3 +++ services/authzone.c | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index bb789fbfa..483be7efa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -9,6 +9,7 @@ - Fixes for patch (includes, declarations, warnings). Free at end and keep config options in order read from file to keep the first one as the first one. + - Fix for IXFR fallback to reset counter when IXFR does not timeout. 22 January 2018: Wouter - Fix space calculation for tcp req buffer size. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 9723141b9..cbb7b654b 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -513,6 +513,9 @@ Other keys use to decrypt only. With this you can roll over to new keys, by generating a new first file and allowing decrypt of the old file by listing it after the first file for some time, after the wait clients are not using the old key any more and the old key can be removed. +One way to create the file is dd if=/dev/random bs=1 count=80 of=ticket.dat +The first 16 bytes should be different from the old one if you create a second key, that is the name used to identify the key. Then there is 32 bytes random +data for an AES key and then 32 bytes random data for the HMAC key. .TP .B tls\-ciphers: \fI Set the list of ciphers to allow when serving TLS. Use "" for defaults, diff --git a/services/authzone.c b/services/authzone.c index 69163b981..03991d9b8 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5663,7 +5663,9 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, xfr_transfer_nexttarget_or_end(xfr, env); return 0; } - xfr->task_transfer->ixfr_possible_timeout_count = 0; + /* note that IXFR worked without timeout */ + if(xfr->task_transfer->on_ixfr) + xfr->task_transfer->ixfr_possible_timeout_count = 0; /* handle returned packet */ /* if it fails, cleanup and end this transfer */ From 707e5a915b5cee76279adb43cbe0eda91509f479 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 23 Jan 2019 14:18:24 +0000 Subject: [PATCH 042/117] Neater spaces git-svn-id: file:///svn/unbound/trunk@5067 be551aaa-1e26-0410-a405-d3ace91eadb9 --- 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 7fa140fd9..b6e8f091c 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1116,7 +1116,7 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses unsigned char *data = (unsigned char *)malloc(80); FILE *f = fopen(p->str, "r"); if(!f) { - log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); + log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); free(data); return 0; } From 299cc0c6894fcd10691c9d2ecb5360045df33f1f Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 24 Jan 2019 08:57:47 +0000 Subject: [PATCH 043/117] - Newer aclocal and libtoolize used for generating configure scripts, aclocal 1.16.1 and libtoolize 2.4.6. git-svn-id: file:///svn/unbound/trunk@5068 be551aaa-1e26-0410-a405-d3ace91eadb9 --- aclocal.m4 | 8 ++++---- config.guess | 2 +- config.sub | 2 +- doc/Changelog | 4 ++++ install-sh | 2 +- ltmain.sh | 6 ++++-- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index 002c4723b..dd1b8658c 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9390,7 +9390,7 @@ AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9421,7 +9421,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/config.guess b/config.guess index 2e9ad7fe8..7ea49fadc 100755 --- a/config.guess +++ b/config.guess @@ -1,4 +1,4 @@ -#! /bin/sh +#!/usr/bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. diff --git a/config.sub b/config.sub index cc69b0676..ba15a57a5 100755 --- a/config.sub +++ b/config.sub @@ -1,4 +1,4 @@ -#! /bin/sh +#!/usr/bin/sh # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. diff --git a/doc/Changelog b/doc/Changelog index 483be7efa..f466a2944 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +24 January 2018: Wouter + - Newer aclocal and libtoolize used for generating configure scripts, + aclocal 1.16.1 and libtoolize 2.4.6. + 23 January 2018: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites options for unbound.conf. diff --git a/install-sh b/install-sh index 0b0fdcbba..ea4c8234c 100755 --- a/install-sh +++ b/install-sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC diff --git a/ltmain.sh b/ltmain.sh index 0f0a2da3f..7f3523d33 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -2124,7 +2124,7 @@ fi # a configuration failure hint, and exit. func_fatal_configuration () { - func__fatal_error ${1+"$@"} \ + func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } @@ -7272,10 +7272,12 @@ func_mode_link () # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" From 37361a1d100cf6a6a7bc3b0f15dfe009c9ccc547 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 24 Jan 2019 09:37:57 +0000 Subject: [PATCH 044/117] - Fix unit test for python 3.7 new keyword 'async'. git-svn-id: file:///svn/unbound/trunk@5069 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + testdata/pylib.tdir/pylib.lookup.py | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index f466a2944..b3fd66c14 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 24 January 2018: Wouter - Newer aclocal and libtoolize used for generating configure scripts, aclocal 1.16.1 and libtoolize 2.4.6. + - Fix unit test for python 3.7 new keyword 'async'. 23 January 2018: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites diff --git a/testdata/pylib.tdir/pylib.lookup.py b/testdata/pylib.tdir/pylib.lookup.py index 5f69c58ab..114bb49a0 100755 --- a/testdata/pylib.tdir/pylib.lookup.py +++ b/testdata/pylib.tdir/pylib.lookup.py @@ -12,7 +12,7 @@ qname = "www.example.com" qtype = unbound.RR_TYPE_A qclass = unbound.RR_CLASS_IN -def create_context(config_file="ub.lookup.conf", async=False): +def create_context(config_file="ub.lookup.conf", asyncflag=False): """ Create an unbound context to use for testing. @@ -22,7 +22,7 @@ def create_context(config_file="ub.lookup.conf", async=False): if status != 0: print("read config failed with status: {}".format(status)) sys.exit(1) - ctx.set_async(async) + ctx.set_async(asyncflag) return ctx @@ -132,10 +132,10 @@ def test_ratelimit_bg_off(ctx): test_resolve(create_context()) -test_async_resolve(create_context(async=True)) +test_async_resolve(create_context(asyncflag=True)) test_ratelimit_fg_on(create_context()) test_ratelimit_fg_off(create_context()) -test_ratelimit_bg_on(create_context(async=True)) -test_ratelimit_bg_off(create_context(async=True)) +test_ratelimit_bg_on(create_context(asyncflag=True)) +test_ratelimit_bg_off(create_context(asyncflag=True)) sys.exit(0) From d48abb9a846f710420beff7ec154984af84ee197 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 24 Jan 2019 11:55:10 +0000 Subject: [PATCH 045/117] clang analysis fixes, assert arc4random buffer in init, no check for already checked delegation pointer in iterator, in testcode check for NULL packet matches, in perf do not copy from NULL start list when growing capacity. Adjust host and file only when present in test header read to please checker. In testcode for unknown macro operand give zero result. Initialise the passed argv array in test code. In test code add EDNS data segment copy only when nonempty. git-svn-id: file:///svn/unbound/trunk@5070 be551aaa-1e26-0410-a405-d3ace91eadb9 --- compat/arc4random.c | 1 + doc/Changelog | 8 ++++++++ iterator/iterator.c | 2 +- testcode/fake_event.c | 4 ++-- testcode/perf.c | 10 ++++++---- testcode/petal.c | 14 +++++++++++--- testcode/replay.c | 1 + testcode/testbound.c | 1 + testcode/testpkts.c | 3 ++- 9 files changed, 33 insertions(+), 11 deletions(-) diff --git a/compat/arc4random.c b/compat/arc4random.c index bcef0ec90..b536d3143 100644 --- a/compat/arc4random.c +++ b/compat/arc4random.c @@ -140,6 +140,7 @@ nodevrandom: static inline void _rs_init(u_char *buf, size_t n) { + assert(buf); if (n < KEYSZ + IVSZ) return; diff --git a/doc/Changelog b/doc/Changelog index b3fd66c14..3bd7d86c4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,14 @@ - Newer aclocal and libtoolize used for generating configure scripts, aclocal 1.16.1 and libtoolize 2.4.6. - Fix unit test for python 3.7 new keyword 'async'. + - clang analysis fixes, assert arc4random buffer in init, + no check for already checked delegation pointer in iterator, + in testcode check for NULL packet matches, in perf do not copy + from NULL start list when growing capacity. Adjust host and file + only when present in test header read to please checker. In + testcode for unknown macro operand give zero result. Initialise the + passed argv array in test code. In test code add EDNS data + segment copy only when nonempty. 23 January 2018: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites diff --git a/iterator/iterator.c b/iterator/iterator.c index 7a62e1281..a3b52806a 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -2299,7 +2299,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, errinf(qstate, "auth zone lookup failed, fallback is off"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } - if(iq->dp && iq->dp->auth_dp) { + if(iq->dp->auth_dp) { /* we wanted to fallback, but had no delegpt, only the * auth zone generated delegpt, create an actual one */ iq->auth_zone_avoid = 1; diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 016f70e3d..4fb9bc8ed 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -385,7 +385,7 @@ answer_callback_from_entry(struct replay_runtime* runtime, repinfo.addrlen = pend->addrlen; memcpy(&repinfo.addr, &pend->addr, pend->addrlen); if(!pend->serviced) { - if(entry->reply_list->next && + if(entry && entry->reply_list->next && pend->tcp_pkt_counter < count_reply_packets(entry)) { /* go to next packet next time */ pend->tcp_pkt_counter++; @@ -509,7 +509,7 @@ fake_pending_callback(struct replay_runtime* runtime, repinfo.addrlen = p->addrlen; memcpy(&repinfo.addr, &p->addr, p->addrlen); if(!p->serviced) { - if(todo->match->reply_list->next && !error && + if(todo->match && todo->match->reply_list->next && !error && p->tcp_pkt_counter < count_reply_packets(todo->match)) { /* go to next packet next time */ p->tcp_pkt_counter++; diff --git a/testcode/perf.c b/testcode/perf.c index 32a5307ed..8e4c5fe91 100644 --- a/testcode/perf.c +++ b/testcode/perf.c @@ -513,10 +513,12 @@ qlist_grow_capacity(struct perfinfo* info) uint8_t** d = (uint8_t**)calloc(sizeof(uint8_t*), newcap); size_t* l = (size_t*)calloc(sizeof(size_t), newcap); if(!d || !l) fatal_exit("out of memory"); - memcpy(d, info->qlist_data, sizeof(uint8_t*)* - info->qlist_capacity); - memcpy(l, info->qlist_len, sizeof(size_t)* - info->qlist_capacity); + if(info->qlist_data) + memcpy(d, info->qlist_data, sizeof(uint8_t*)* + info->qlist_capacity); + if(info->qlist_len) + memcpy(l, info->qlist_len, sizeof(size_t)* + info->qlist_capacity); free(info->qlist_data); free(info->qlist_len); info->qlist_data = d; diff --git a/testcode/petal.c b/testcode/petal.c index e1f5f4341..a733017a4 100644 --- a/testcode/petal.c +++ b/testcode/petal.c @@ -323,9 +323,9 @@ file_name_is_safe(char* s) return 1; } -/** adjust host and filename */ +/** adjust host */ static void -adjust_host_file(char* host, char* file) +adjust_host(char* host) { size_t i, len; /* remove a port number if present */ @@ -335,6 +335,13 @@ adjust_host_file(char* host, char* file) len = strlen(host); for(i=0; i pktsize) error("not enough space for EDNS OPT record"); memmove(pktbuf+*pktlen, edns, sizeof(edns)); - memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen); + if(ednsdata && ednslen) + memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen); sldns_write_uint16(pktbuf+10, LDNS_ARCOUNT(pktbuf)+1); *pktlen += (sizeof(edns) + ednslen); } From e584933b2bdb47a2c2e62bf0af9756be38d33283 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 24 Jan 2019 12:52:26 +0000 Subject: [PATCH 046/117] make fix nicer in perf testcode. git-svn-id: file:///svn/unbound/trunk@5071 be551aaa-1e26-0410-a405-d3ace91eadb9 --- testcode/perf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testcode/perf.c b/testcode/perf.c index 8e4c5fe91..d6d2b0529 100644 --- a/testcode/perf.c +++ b/testcode/perf.c @@ -513,10 +513,10 @@ qlist_grow_capacity(struct perfinfo* info) uint8_t** d = (uint8_t**)calloc(sizeof(uint8_t*), newcap); size_t* l = (size_t*)calloc(sizeof(size_t), newcap); if(!d || !l) fatal_exit("out of memory"); - if(info->qlist_data) + if(info->qlist_data && info->qlist_capacity) memcpy(d, info->qlist_data, sizeof(uint8_t*)* info->qlist_capacity); - if(info->qlist_len) + if(info->qlist_len && info->qlist_capacity) memcpy(l, info->qlist_len, sizeof(size_t)* info->qlist_capacity); free(info->qlist_data); From 3028fa50a8fefc48f79cab00ce522b13ad6d2b4d Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 24 Jan 2019 16:05:00 +0000 Subject: [PATCH 047/117] - Patch from Florian Obser fixes some compiler warnings: include mini_event.h to have a prototype for mini_ev_cmp include edns.h to have a prototype for apply_edns_options sldns_wire2str_edns_keepalive_print is only called in the wire2str, module declare it static to get rid of compiler warning: no previous prototype for function infra_find_ip_ratedata() is only called in the infra module, declare it static to get rid of compiler warning: no previous prototype for function do not shadow local variable buf in authzone auth_chunks_delete and az_nsec3_findnode are only called in the authzone module, declare them static to get rid of compiler warning: no previous prototype for function... copy_rrset() is only called in the respip module, declare it static to get rid of compiler warning: no previous prototype for function 'copy_rrset' no need for another variable "r"; gets rid of compiler warning: declaration shadows a local variable in libunbound.c no need for another variable "ns"; gets rid of compiler warning: declaration shadows a local variable in iterator.c git-svn-id: file:///svn/unbound/trunk@5072 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 20 ++++++++++++++++++++ iterator/iterator.c | 1 - libunbound/libunbound.c | 2 +- respip/respip.c | 2 +- services/authzone.c | 16 ++++++++-------- services/cache/infra.c | 2 +- sldns/wire2str.c | 4 ++-- util/edns.c | 1 + util/mini_event.c | 1 + 9 files changed, 35 insertions(+), 14 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 3bd7d86c4..b9bbd8720 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -10,6 +10,26 @@ testcode for unknown macro operand give zero result. Initialise the passed argv array in test code. In test code add EDNS data segment copy only when nonempty. + - Patch from Florian Obser fixes some compiler warnings: + include mini_event.h to have a prototype for mini_ev_cmp + include edns.h to have a prototype for apply_edns_options + sldns_wire2str_edns_keepalive_print is only called in the wire2str, + module declare it static to get rid of compiler warning: + no previous prototype for function + infra_find_ip_ratedata() is only called in the infra module, + declare it static to get rid of compiler warning: + no previous prototype for function + do not shadow local variable buf in authzone + auth_chunks_delete and az_nsec3_findnode are only called in the + authzone module, declare them static to get rid of compiler warning: + no previous prototype for function... + copy_rrset() is only called in the respip module, declare it + static to get rid of compiler warning: + no previous prototype for function 'copy_rrset' + no need for another variable "r"; gets rid of compiler warning: + declaration shadows a local variable in libunbound.c + no need for another variable "ns"; gets rid of compiler warning: + declaration shadows a local variable in iterator.c 23 January 2018: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites diff --git a/iterator/iterator.c b/iterator/iterator.c index a3b52806a..8312dfd53 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -1882,7 +1882,6 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, struct delegpt* p = hints_lookup_root(qstate->env->hints, iq->qchase.qclass); if(p) { - struct delegpt_ns* ns; struct delegpt_addr* a; iq->chase_flags &= ~BIT_RD; /* go to authorities */ for(ns = p->nslist; ns; ns=ns->next) { diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c index 31adbd54d..0e59364d5 100644 --- a/libunbound/libunbound.c +++ b/libunbound/libunbound.c @@ -724,7 +724,7 @@ ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype, *async_id = 0; lock_basic_lock(&ctx->cfglock); if(!ctx->finalized) { - int r = context_finalize(ctx); + r = context_finalize(ctx); if(r) { lock_basic_unlock(&ctx->cfglock); return r; diff --git a/respip/respip.c b/respip/respip.c index aea528f15..bcb31f892 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -451,7 +451,7 @@ respip_views_apply_cfg(struct views* vs, struct config_file* cfg, * This function returns the copied rrset key on success, and NULL on memory * allocation failure. */ -struct ub_packed_rrset_key* +static struct ub_packed_rrset_key* copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region) { struct ub_packed_rrset_key* ck = regional_alloc(region, diff --git a/services/authzone.c b/services/authzone.c index 03991d9b8..a87c2274f 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1982,7 +1982,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, * @param at: transfer structure with chunks list. The chunks and their * data are freed. */ -void +static void auth_chunks_delete(struct auth_transfer* at) { if(at->chunks_first) { @@ -2621,7 +2621,7 @@ az_nsec3_hashname(struct auth_zone* z, uint8_t* hashname, size_t* hashnmlen, } /** Find the datanode that covers the nsec3hash-name */ -struct auth_data* +static struct auth_data* az_nsec3_findnode(struct auth_zone* z, uint8_t* hashnm, size_t hashnmlen) { struct query_info qinfo; @@ -4997,12 +4997,12 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) qinfo.qtype = LDNS_RR_TYPE_AAAA; qinfo.local_alias = NULL; if(verbosity >= VERB_ALGO) { - char buf[512]; + char buf1[512]; char buf2[LDNS_MAX_DOMAINLEN+1]; dname_str(xfr->name, buf2); - snprintf(buf, sizeof(buf), "auth zone %s: master lookup" + snprintf(buf1, sizeof(buf1), "auth zone %s: master lookup" " for task_transfer", buf2); - log_query_info(VERB_ALGO, buf, &qinfo); + log_query_info(VERB_ALGO, buf1, &qinfo); } edns.edns_present = 1; edns.ext_rcode = 0; @@ -6037,12 +6037,12 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) qinfo.qtype = LDNS_RR_TYPE_AAAA; qinfo.local_alias = NULL; if(verbosity >= VERB_ALGO) { - char buf[512]; + char buf1[512]; char buf2[LDNS_MAX_DOMAINLEN+1]; dname_str(xfr->name, buf2); - snprintf(buf, sizeof(buf), "auth zone %s: master lookup" + snprintf(buf1, sizeof(buf1), "auth zone %s: master lookup" " for task_probe", buf2); - log_query_info(VERB_ALGO, buf, &qinfo); + log_query_info(VERB_ALGO, buf1, &qinfo); } edns.edns_present = 1; edns.ext_rcode = 0; diff --git a/services/cache/infra.c b/services/cache/infra.c index 489f93949..07c41928d 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -808,7 +808,7 @@ static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra, } /** find data item in array for ip addresses */ -struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra, +static struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra, struct comm_reply* repinfo, int wr) { struct ip_rate_key key; diff --git a/sldns/wire2str.c b/sldns/wire2str.c index 832239f9b..01ec84b3c 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -1908,8 +1908,8 @@ int sldns_wire2str_edns_subnet_print(char** s, size_t* sl, uint8_t* data, return w; } -int sldns_wire2str_edns_keepalive_print(char** s, size_t* sl, uint8_t* data, - size_t len) +static int sldns_wire2str_edns_keepalive_print(char** s, size_t* sl, + uint8_t* data, size_t len) { int w = 0; uint16_t timeout; diff --git a/util/edns.c b/util/edns.c index 2c4e4a1fd..1fa6b2921 100644 --- a/util/edns.c +++ b/util/edns.c @@ -42,6 +42,7 @@ #include "config.h" #include "util/config_file.h" +#include "util/edns.h" #include "util/netevent.h" #include "util/regional.h" #include "util/data/msgparse.h" diff --git a/util/mini_event.c b/util/mini_event.c index 14e9efe47..ee517b263 100644 --- a/util/mini_event.c +++ b/util/mini_event.c @@ -41,6 +41,7 @@ */ #include "config.h" +#include "util/mini_event.h" #ifdef HAVE_TIME_H #include #endif From 20d5e3557631334249b9576f37d6d09d27fe38e2 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 24 Jan 2019 16:10:05 +0000 Subject: [PATCH 048/117] - Moved includes and make depend. git-svn-id: file:///svn/unbound/trunk@5073 be551aaa-1e26-0410-a405-d3ace91eadb9 --- Makefile.in | 8 ++++---- doc/Changelog | 1 + util/edns.c | 3 +-- util/mini_event.c | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Makefile.in b/Makefile.in index 7c641712c..1f035725d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -894,10 +894,10 @@ rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/itera $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h -edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/config_file.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/regional.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ +edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ diff --git a/doc/Changelog b/doc/Changelog index b9bbd8720..bb96b35b8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -30,6 +30,7 @@ declaration shadows a local variable in libunbound.c no need for another variable "ns"; gets rid of compiler warning: declaration shadows a local variable in iterator.c + - Moved includes and make depend. 23 January 2018: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites diff --git a/util/edns.c b/util/edns.c index 1fa6b2921..d19952df0 100644 --- a/util/edns.c +++ b/util/edns.c @@ -40,9 +40,8 @@ */ #include "config.h" - -#include "util/config_file.h" #include "util/edns.h" +#include "util/config_file.h" #include "util/netevent.h" #include "util/regional.h" #include "util/data/msgparse.h" diff --git a/util/mini_event.c b/util/mini_event.c index ee517b263..faadf1a23 100644 --- a/util/mini_event.c +++ b/util/mini_event.c @@ -49,7 +49,6 @@ #if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK) #include -#include "util/mini_event.h" #include "util/fptr_wlist.h" /** compare events in tree, based on timevalue, ptr for uniqueness */ From f11d6653d67891ddcc0817d8af837ad176dfbf47 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 25 Jan 2019 12:46:15 +0000 Subject: [PATCH 049/117] - Fix that tcp for auth zone and outgoing does not remove and then gets the ssl read again applied to the deleted commpoint. git-svn-id: file:///svn/unbound/trunk@5074 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ util/netevent.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index bb96b35b8..1bf44c85d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +25 January 2018: Wouter + - Fix that tcp for auth zone and outgoing does not remove and + then gets the ssl read again applied to the deleted commpoint. + 24 January 2018: Wouter - Newer aclocal and libtoolize used for generating configure scripts, aclocal 1.16.1 and libtoolize 2.4.6. diff --git a/util/netevent.c b/util/netevent.c index 5dbcb03d6..a507faf7e 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1739,6 +1739,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) #endif if(event&UB_EV_READ) { + int has_tcpq = (c->tcp_req_info != NULL); if(!comm_point_tcp_handle_read(fd, c, 0)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { @@ -1748,11 +1749,12 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) NETEVENT_CLOSED, NULL); } } - if(c->tcp_req_info && c->tcp_req_info->read_again) + if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); return; } if(event&UB_EV_WRITE) { + int has_tcpq = (c->tcp_req_info != NULL); if(!comm_point_tcp_handle_write(fd, c)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { @@ -1762,7 +1764,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) NETEVENT_CLOSED, NULL); } } - if(c->tcp_req_info && c->tcp_req_info->read_again) + if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); return; } From b005fcd87b9ab1fbf81fa3a9e8f696e4bfe5e885 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 25 Jan 2019 12:50:45 +0000 Subject: [PATCH 050/117] - updated contrib/fastrpz.patch to cleanly diff. git-svn-id: file:///svn/unbound/trunk@5075 be551aaa-1e26-0410-a405-d3ace91eadb9 --- contrib/fastrpz.patch | 94 +++++++++++++++++++++---------------------- doc/Changelog | 1 + 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/contrib/fastrpz.patch b/contrib/fastrpz.patch index c49191a0b..0291ea3d8 100644 --- a/contrib/fastrpz.patch +++ b/contrib/fastrpz.patch @@ -3,7 +3,7 @@ Author: fastrpz@farsightsecurity.com --- Index: unboundfastrpz/Makefile.in =================================================================== ---- unboundfastrpz/Makefile.in (revision 4987) +--- unboundfastrpz/Makefile.in (revision 5073) +++ unboundfastrpz/Makefile.in (working copy) @@ -23,6 +23,8 @@ CHECKLOCK_OBJ=@CHECKLOCK_OBJ@ @@ -46,9 +46,9 @@ Index: unboundfastrpz/Makefile.in pythonmod/interface.h \ Index: unboundfastrpz/config.h.in =================================================================== ---- unboundfastrpz/config.h.in (revision 4987) +--- unboundfastrpz/config.h.in (revision 5073) +++ unboundfastrpz/config.h.in (working copy) -@@ -1275,4 +1275,11 @@ +@@ -1293,4 +1293,11 @@ /** the version of unbound-control that this software implements */ #define UNBOUND_CONTROL_VERSION 1 @@ -63,7 +63,7 @@ Index: unboundfastrpz/config.h.in +#undef ENABLE_FASTRPZ Index: unboundfastrpz/configure.ac =================================================================== ---- unboundfastrpz/configure.ac (revision 4987) +--- unboundfastrpz/configure.ac (revision 5073) +++ unboundfastrpz/configure.ac (working copy) @@ -6,6 +6,7 @@ sinclude(acx_python.m4) @@ -73,7 +73,7 @@ Index: unboundfastrpz/configure.ac sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing -@@ -1573,6 +1574,9 @@ +@@ -1575,6 +1576,9 @@ ;; esac @@ -85,7 +85,7 @@ Index: unboundfastrpz/configure.ac # on Solaris, it does not work ($? is changed sources, $^ lists dependencies). Index: unboundfastrpz/daemon/daemon.c =================================================================== ---- unboundfastrpz/daemon/daemon.c (revision 4987) +--- unboundfastrpz/daemon/daemon.c (revision 5073) +++ unboundfastrpz/daemon/daemon.c (working copy) @@ -91,6 +91,9 @@ #include "sldns/keyraw.h" @@ -124,7 +124,7 @@ Index: unboundfastrpz/daemon/daemon.c Index: unboundfastrpz/daemon/daemon.h =================================================================== ---- unboundfastrpz/daemon/daemon.h (revision 4987) +--- unboundfastrpz/daemon/daemon.h (revision 5073) +++ unboundfastrpz/daemon/daemon.h (working copy) @@ -136,6 +136,11 @@ /** the dnscrypt environment */ @@ -140,7 +140,7 @@ Index: unboundfastrpz/daemon/daemon.h /** Index: unboundfastrpz/daemon/worker.c =================================================================== ---- unboundfastrpz/daemon/worker.c (revision 4987) +--- unboundfastrpz/daemon/worker.c (revision 5073) +++ unboundfastrpz/daemon/worker.c (working copy) @@ -75,6 +75,9 @@ #include "libunbound/context.h" @@ -268,9 +268,9 @@ Index: unboundfastrpz/daemon/worker.c verbose(VERB_ALGO, "answer norec from cache -- " Index: unboundfastrpz/doc/unbound.conf.5.in =================================================================== ---- unboundfastrpz/doc/unbound.conf.5.in (revision 4987) +--- unboundfastrpz/doc/unbound.conf.5.in (revision 5073) +++ unboundfastrpz/doc/unbound.conf.5.in (working copy) -@@ -1745,6 +1745,81 @@ +@@ -1781,6 +1781,81 @@ used by dns64 processing instead. Can be entered multiple times, list a new domain for which it applies, one per line. Applies also to names underneath the name given. @@ -2885,7 +2885,7 @@ Index: unboundfastrpz/fastrpz/rpz.m4 +]) Index: unboundfastrpz/iterator/iterator.c =================================================================== ---- unboundfastrpz/iterator/iterator.c (revision 4987) +--- unboundfastrpz/iterator/iterator.c (revision 5073) +++ unboundfastrpz/iterator/iterator.c (working copy) @@ -68,6 +68,9 @@ #include "sldns/str2wire.h" @@ -2972,7 +2972,7 @@ Index: unboundfastrpz/iterator/iterator.c if(type == RESPONSE_TYPE_CNAME) { uint8_t* sname = 0; size_t slen = 0; -@@ -2695,6 +2733,62 @@ +@@ -2694,6 +2732,62 @@ sock_list_insert(&qstate->reply_origin, &qstate->reply->addr, qstate->reply->addrlen, qstate->region); @@ -3035,7 +3035,7 @@ Index: unboundfastrpz/iterator/iterator.c if(iq->minimisation_state != DONOT_MINIMISE_STATE && !(iq->chase_flags & BIT_RD)) { if(FLAGS_GET_RCODE(iq->response->rep->flags) != -@@ -3441,6 +3535,10 @@ +@@ -3440,6 +3534,10 @@ * but only if we did recursion. The nonrecursion referral * from cache does not need to be stored in the msg cache. */ if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) { @@ -3046,7 +3046,7 @@ Index: unboundfastrpz/iterator/iterator.c iter_dns_store(qstate->env, &qstate->qinfo, iq->response->rep, 0, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, -@@ -3447,6 +3545,34 @@ +@@ -3446,6 +3544,34 @@ qstate->region, qstate->query_flags); } } @@ -3083,7 +3083,7 @@ Index: unboundfastrpz/iterator/iterator.c return 0; Index: unboundfastrpz/iterator/iterator.h =================================================================== ---- unboundfastrpz/iterator/iterator.h (revision 4987) +--- unboundfastrpz/iterator/iterator.h (revision 5073) +++ unboundfastrpz/iterator/iterator.h (working copy) @@ -386,6 +386,16 @@ */ @@ -3104,7 +3104,7 @@ Index: unboundfastrpz/iterator/iterator.h * the QNAME minimisation QTYPE is blocked. */ Index: unboundfastrpz/services/cache/dns.c =================================================================== ---- unboundfastrpz/services/cache/dns.c (revision 4987) +--- unboundfastrpz/services/cache/dns.c (revision 5073) +++ unboundfastrpz/services/cache/dns.c (working copy) @@ -939,6 +939,14 @@ struct regional* region, uint32_t flags) @@ -3123,7 +3123,7 @@ Index: unboundfastrpz/services/cache/dns.c if(!rep) Index: unboundfastrpz/services/mesh.c =================================================================== ---- unboundfastrpz/services/mesh.c (revision 4987) +--- unboundfastrpz/services/mesh.c (revision 5073) +++ unboundfastrpz/services/mesh.c (working copy) @@ -60,6 +60,9 @@ #include "sldns/wire2str.h" @@ -3133,9 +3133,9 @@ Index: unboundfastrpz/services/mesh.c +#include "fastrpz/rpz.h" +#endif #include "respip/respip.h" + #include "services/listen_dnsport.h" - /** subtract timers and the values do not overflow or become negative */ -@@ -1057,6 +1060,13 @@ +@@ -1072,6 +1075,13 @@ else secure = 0; if(!rep && rcode == LDNS_RCODE_NOERROR) rcode = LDNS_RCODE_SERVFAIL; @@ -3149,7 +3149,7 @@ Index: unboundfastrpz/services/mesh.c /* send the reply */ /* We don't reuse the encoded answer if either the previous or current * response has a local alias. We could compare the alias records -@@ -1230,6 +1240,7 @@ +@@ -1247,6 +1257,7 @@ key.s.is_valrec = valrec; key.s.qinfo = *qinfo; key.s.query_flags = qflags; @@ -3157,7 +3157,7 @@ Index: unboundfastrpz/services/mesh.c /* We are searching for a similar mesh state when we DO want to * aggregate the state. Thus unique is set to NULL. (default when we * desire aggregation).*/ -@@ -1276,6 +1287,10 @@ +@@ -1293,6 +1304,10 @@ if(!r) return 0; r->query_reply = *rep; @@ -3170,9 +3170,9 @@ Index: unboundfastrpz/services/mesh.c r->edns.opt_list = edns_opt_copy_region(edns->opt_list, Index: unboundfastrpz/util/config_file.c =================================================================== ---- unboundfastrpz/util/config_file.c (revision 4987) +--- unboundfastrpz/util/config_file.c (revision 5073) +++ unboundfastrpz/util/config_file.c (working copy) -@@ -1401,6 +1401,8 @@ +@@ -1418,6 +1418,8 @@ free(cfg->dnstap_socket_path); free(cfg->dnstap_identity); free(cfg->dnstap_version); @@ -3183,9 +3183,9 @@ Index: unboundfastrpz/util/config_file.c #ifdef USE_IPSECMOD Index: unboundfastrpz/util/config_file.h =================================================================== ---- unboundfastrpz/util/config_file.h (revision 4987) +--- unboundfastrpz/util/config_file.h (revision 5073) +++ unboundfastrpz/util/config_file.h (working copy) -@@ -480,6 +480,11 @@ +@@ -490,6 +490,11 @@ /** true to disable DNSSEC lameness check in iterator */ int disable_dnssec_lame_check; @@ -3199,9 +3199,9 @@ Index: unboundfastrpz/util/config_file.h /** number of slabs for ip_ratelimit cache */ Index: unboundfastrpz/util/configlexer.lex =================================================================== ---- unboundfastrpz/util/configlexer.lex (revision 4987) +--- unboundfastrpz/util/configlexer.lex (revision 5073) +++ unboundfastrpz/util/configlexer.lex (working copy) -@@ -434,6 +434,10 @@ +@@ -439,6 +439,10 @@ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } dnstap-log-forwarder-response-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } @@ -3214,7 +3214,7 @@ Index: unboundfastrpz/util/configlexer.lex ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) } Index: unboundfastrpz/util/configparser.y =================================================================== ---- unboundfastrpz/util/configparser.y (revision 4987) +--- unboundfastrpz/util/configparser.y (revision 5073) +++ unboundfastrpz/util/configparser.y (working copy) @@ -125,6 +125,7 @@ %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES @@ -3224,7 +3224,7 @@ Index: unboundfastrpz/util/configparser.y %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT %token VAR_DISABLE_DNSSEC_LAME_CHECK -@@ -168,7 +169,7 @@ +@@ -170,7 +171,7 @@ %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -3233,8 +3233,8 @@ Index: unboundfastrpz/util/configparser.y forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | -@@ -2639,6 +2640,50 @@ - (strcmp($2, "yes")==0); +@@ -2708,6 +2709,50 @@ + free($2); } ; +rpzstart: VAR_RPZ @@ -3286,7 +3286,7 @@ Index: unboundfastrpz/util/configparser.y OUTYY(("\nP(python:)\n")); Index: unboundfastrpz/util/data/msgencode.c =================================================================== ---- unboundfastrpz/util/data/msgencode.c (revision 4987) +--- unboundfastrpz/util/data/msgencode.c (revision 5073) +++ unboundfastrpz/util/data/msgencode.c (working copy) @@ -590,6 +590,35 @@ return RETVAL_OK; @@ -3346,7 +3346,7 @@ Index: unboundfastrpz/util/data/msgencode.c return 1; Index: unboundfastrpz/util/data/packed_rrset.c =================================================================== ---- unboundfastrpz/util/data/packed_rrset.c (revision 4987) +--- unboundfastrpz/util/data/packed_rrset.c (revision 5073) +++ unboundfastrpz/util/data/packed_rrset.c (working copy) @@ -255,6 +255,10 @@ case sec_status_insecure: return "sec_status_insecure"; @@ -3361,7 +3361,7 @@ Index: unboundfastrpz/util/data/packed_rrset.c } Index: unboundfastrpz/util/data/packed_rrset.h =================================================================== ---- unboundfastrpz/util/data/packed_rrset.h (revision 4987) +--- unboundfastrpz/util/data/packed_rrset.h (revision 5073) +++ unboundfastrpz/util/data/packed_rrset.h (working copy) @@ -193,7 +193,15 @@ sec_status_secure_sentinel_fail, @@ -3382,9 +3382,9 @@ Index: unboundfastrpz/util/data/packed_rrset.h /** Index: unboundfastrpz/util/netevent.c =================================================================== ---- unboundfastrpz/util/netevent.c (revision 4987) +--- unboundfastrpz/util/netevent.c (revision 5073) +++ unboundfastrpz/util/netevent.c (working copy) -@@ -56,6 +56,9 @@ +@@ -57,6 +57,9 @@ #ifdef HAVE_OPENSSL_ERR_H #include #endif @@ -3394,7 +3394,7 @@ Index: unboundfastrpz/util/netevent.c /* -------- Start of local definitions -------- */ /** if CMSG_ALIGN is not defined on this platform, a workaround */ -@@ -588,6 +591,9 @@ +@@ -590,6 +593,9 @@ struct cmsghdr* cmsg; #endif /* S_SPLINT_S */ @@ -3404,7 +3404,7 @@ Index: unboundfastrpz/util/netevent.c rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); -@@ -677,6 +683,9 @@ +@@ -679,6 +685,9 @@ int i; struct sldns_buffer *buffer; @@ -3414,7 +3414,7 @@ Index: unboundfastrpz/util/netevent.c rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); -@@ -720,6 +729,9 @@ +@@ -722,6 +731,9 @@ (void)comm_point_send_udp_msg(rep.c, buffer, (struct sockaddr*)&rep.addr, rep.addrlen); } @@ -3424,9 +3424,9 @@ Index: unboundfastrpz/util/netevent.c if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for another UDP port. Note rep.c cannot be reused with TCP fd. */ break; -@@ -3035,6 +3047,9 @@ - comm_point_start_listening(repinfo->c, -1, - repinfo->c->tcp_timeout_msec); +@@ -3108,6 +3120,9 @@ + repinfo->c->tcp_timeout_msec); + } } +#ifdef ENABLE_FASTRPZ + rpz_end(repinfo); @@ -3434,7 +3434,7 @@ Index: unboundfastrpz/util/netevent.c } void -@@ -3044,6 +3059,9 @@ +@@ -3117,6 +3132,9 @@ return; log_assert(repinfo && repinfo->c); log_assert(repinfo->c->type != comm_tcp_accept); @@ -3443,8 +3443,8 @@ Index: unboundfastrpz/util/netevent.c +#endif if(repinfo->c->type == comm_udp) return; - reclaim_tcp_handler(repinfo->c); -@@ -3063,6 +3081,9 @@ + if(repinfo->c->tcp_req_info) +@@ -3138,6 +3156,9 @@ { verbose(VERB_ALGO, "comm point start listening %d", c->fd==-1?newfd:c->fd); @@ -3456,7 +3456,7 @@ Index: unboundfastrpz/util/netevent.c return; Index: unboundfastrpz/util/netevent.h =================================================================== ---- unboundfastrpz/util/netevent.h (revision 4987) +--- unboundfastrpz/util/netevent.h (revision 5073) +++ unboundfastrpz/util/netevent.h (working copy) @@ -120,6 +120,10 @@ /** return type 0 (none), 4(IP4), 6(IP6) */ @@ -3471,7 +3471,7 @@ Index: unboundfastrpz/util/netevent.h uint8_t nmkey[crypto_box_BEFORENMBYTES]; Index: unboundfastrpz/validator/validator.c =================================================================== ---- unboundfastrpz/validator/validator.c (revision 4987) +--- unboundfastrpz/validator/validator.c (revision 5073) +++ unboundfastrpz/validator/validator.c (working copy) @@ -2755,6 +2755,12 @@ default: diff --git a/doc/Changelog b/doc/Changelog index 1bf44c85d..8255021ca 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 25 January 2018: Wouter - Fix that tcp for auth zone and outgoing does not remove and then gets the ssl read again applied to the deleted commpoint. + - updated contrib/fastrpz.patch to cleanly diff. 24 January 2018: Wouter - Newer aclocal and libtoolize used for generating configure scripts, From ce65cdde71a4d997483e6188818e42f62ad9acc1 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 25 Jan 2019 12:54:40 +0000 Subject: [PATCH 051/117] - no lock when threads disabled in tcp request buffer count. git-svn-id: file:///svn/unbound/trunk@5076 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/listen_dnsport.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 8255021ca..20871bf13 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Fix that tcp for auth zone and outgoing does not remove and then gets the ssl read again applied to the deleted commpoint. - updated contrib/fastrpz.patch to cleanly diff. + - no lock when threads disabled in tcp request buffer count. 24 January 2018: Wouter - Newer aclocal and libtoolize used for generating configure scripts, diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index ef65aeda1..f86a83d96 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -76,8 +76,10 @@ /** number of simultaneous requests a client can have */ #define TCP_MAX_REQ_SIMULTANEOUS 32 +#ifndef THREADS_DISABLED /** lock on the counter of stream buffer memory */ static lock_basic_type stream_wait_count_lock; +#endif /** size (in bytes) of stream wait buffers */ static size_t stream_wait_count = 0; /** is the lock initialised for stream wait buffers */ From 062c2cacfc9f406f7218d2207913b83904cb6f5c Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 25 Jan 2019 12:58:06 +0000 Subject: [PATCH 052/117] - remove compile warnings from libnettle compile. git-svn-id: file:///svn/unbound/trunk@5077 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + util/net_help.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 20871bf13..9cea746e4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,7 @@ then gets the ssl read again applied to the deleted commpoint. - updated contrib/fastrpz.patch to cleanly diff. - no lock when threads disabled in tcp request buffer count. + - remove compile warnings from libnettle compile. 24 January 2018: Wouter - Newer aclocal and libtoolize used for generating configure scripts, diff --git a/util/net_help.c b/util/net_help.c index b6e8f091c..1a4fa8a58 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1143,6 +1143,8 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses } return 1; #else + (void)sslctx; + (void)tls_session_ticket_keys; return 0; #endif @@ -1202,6 +1204,11 @@ int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name } return -1; #else + (void)key_name; + (void)iv; + (void)evp_sctx; + (void)hmac_ctx; + (void)enc; return 0; #endif } From aae44940c7728ad9744f954cd6981c7d6609fd35 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 25 Jan 2019 13:00:09 +0000 Subject: [PATCH 053/117] - output of newer lex 2.6.1 and bison 3.0.5. git-svn-id: file:///svn/unbound/trunk@5078 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + util/configlexer.c | 4 +- util/configparser.c | 1063 ++++++++++++++++++++++--------------------- util/configparser.h | 8 +- 4 files changed, 539 insertions(+), 537 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 9cea746e4..f115b79f4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,7 @@ - updated contrib/fastrpz.patch to cleanly diff. - no lock when threads disabled in tcp request buffer count. - remove compile warnings from libnettle compile. + - output of newer lex 2.6.1 and bison 3.0.5. 24 January 2018: Wouter - Newer aclocal and libtoolize used for generating configure scripts, diff --git a/util/configlexer.c b/util/configlexer.c index 7b839b3a9..2d9be6217 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -5430,10 +5430,10 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) YY_BUFFER_STATE b; char *buf; yy_size_t n; - yy_size_t i; + int i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = (yy_size_t) _yybytes_len + 2; + n = (yy_size_t) (_yybytes_len + 2); buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); diff --git a/util/configparser.c b/util/configparser.c index 18739485a..9674aa283 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.0.5. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.0.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -2267,6 +2267,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 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")); @@ -2583,15 +2584,15 @@ yyreduce: switch (yyn) { case 14: -#line 182 "./util/configparser.y" /* yacc.c:1646 */ +#line 182 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(server:)\n")); } -#line 2591 "util/configparser.c" /* yacc.c:1646 */ +#line 2592 "util/configparser.c" /* yacc.c:1648 */ break; case 206: -#line 273 "./util/configparser.y" /* yacc.c:1646 */ +#line 273 "./util/configparser.y" /* yacc.c:1648 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2602,11 +2603,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2606 "util/configparser.c" /* yacc.c:1646 */ +#line 2607 "util/configparser.c" /* yacc.c:1648 */ break; case 216: -#line 290 "./util/configparser.y" /* yacc.c:1646 */ +#line 290 "./util/configparser.y" /* yacc.c:1648 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2617,11 +2618,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2621 "util/configparser.c" /* yacc.c:1646 */ +#line 2622 "util/configparser.c" /* yacc.c:1648 */ break; case 225: -#line 307 "./util/configparser.y" /* yacc.c:1646 */ +#line 307 "./util/configparser.y" /* yacc.c:1648 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2634,11 +2635,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2638 "util/configparser.c" /* yacc.c:1646 */ +#line 2639 "util/configparser.c" /* yacc.c:1648 */ break; case 235: -#line 326 "./util/configparser.y" /* yacc.c:1646 */ +#line 326 "./util/configparser.y" /* yacc.c:1648 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2653,11 +2654,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2657 "util/configparser.c" /* yacc.c:1646 */ +#line 2658 "util/configparser.c" /* yacc.c:1648 */ break; case 246: -#line 348 "./util/configparser.y" /* yacc.c:1646 */ +#line 348 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2665,11 +2666,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2669 "util/configparser.c" /* yacc.c:1646 */ +#line 2670 "util/configparser.c" /* yacc.c:1648 */ break; case 247: -#line 357 "./util/configparser.y" /* yacc.c:1646 */ +#line 357 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2677,11 +2678,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2681 "util/configparser.c" /* yacc.c:1646 */ +#line 2682 "util/configparser.c" /* yacc.c:1648 */ break; case 248: -#line 366 "./util/configparser.y" /* yacc.c:1646 */ +#line 366 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2691,11 +2692,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2695 "util/configparser.c" /* yacc.c:1646 */ +#line 2696 "util/configparser.c" /* yacc.c:1648 */ break; case 249: -#line 377 "./util/configparser.y" /* yacc.c:1646 */ +#line 377 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2703,11 +2704,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2707 "util/configparser.c" /* yacc.c:1646 */ +#line 2708 "util/configparser.c" /* yacc.c:1648 */ break; case 250: -#line 386 "./util/configparser.y" /* yacc.c:1646 */ +#line 386 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2715,11 +2716,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2719 "util/configparser.c" /* yacc.c:1646 */ +#line 2720 "util/configparser.c" /* yacc.c:1648 */ break; case 251: -#line 395 "./util/configparser.y" /* yacc.c:1646 */ +#line 395 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2727,11 +2728,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2731 "util/configparser.c" /* yacc.c:1646 */ +#line 2732 "util/configparser.c" /* yacc.c:1648 */ break; case 252: -#line 404 "./util/configparser.y" /* yacc.c:1646 */ +#line 404 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2741,11 +2742,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2745 "util/configparser.c" /* yacc.c:1646 */ +#line 2746 "util/configparser.c" /* yacc.c:1648 */ break; case 253: -#line 415 "./util/configparser.y" /* yacc.c:1646 */ +#line 415 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2753,11 +2754,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2757 "util/configparser.c" /* yacc.c:1646 */ +#line 2758 "util/configparser.c" /* yacc.c:1648 */ break; case 254: -#line 424 "./util/configparser.y" /* yacc.c:1646 */ +#line 424 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2767,11 +2768,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2771 "util/configparser.c" /* yacc.c:1646 */ +#line 2772 "util/configparser.c" /* yacc.c:1648 */ break; case 255: -#line 435 "./util/configparser.y" /* yacc.c:1646 */ +#line 435 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2782,11 +2783,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2786 "util/configparser.c" /* yacc.c:1646 */ +#line 2787 "util/configparser.c" /* yacc.c:1648 */ break; case 256: -#line 448 "./util/configparser.y" /* yacc.c:1646 */ +#line 448 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2800,11 +2801,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2804 "util/configparser.c" /* yacc.c:1646 */ +#line 2805 "util/configparser.c" /* yacc.c:1648 */ break; case 257: -#line 463 "./util/configparser.y" /* yacc.c:1646 */ +#line 463 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2814,11 +2815,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2818 "util/configparser.c" /* yacc.c:1646 */ +#line 2819 "util/configparser.c" /* yacc.c:1648 */ break; case 258: -#line 474 "./util/configparser.y" /* yacc.c:1646 */ +#line 474 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2834,11 +2835,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2838 "util/configparser.c" /* yacc.c:1646 */ +#line 2839 "util/configparser.c" /* yacc.c:1648 */ break; case 259: -#line 491 "./util/configparser.y" /* yacc.c:1646 */ +#line 491 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2854,11 +2855,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2858 "util/configparser.c" /* yacc.c:1646 */ +#line 2859 "util/configparser.c" /* yacc.c:1648 */ break; case 260: -#line 508 "./util/configparser.y" /* yacc.c:1646 */ +#line 508 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2874,11 +2875,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2878 "util/configparser.c" /* yacc.c:1646 */ +#line 2879 "util/configparser.c" /* yacc.c:1648 */ break; case 261: -#line 525 "./util/configparser.y" /* yacc.c:1646 */ +#line 525 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2894,11 +2895,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2898 "util/configparser.c" /* yacc.c:1646 */ +#line 2899 "util/configparser.c" /* yacc.c:1648 */ break; case 262: -#line 542 "./util/configparser.y" /* yacc.c:1646 */ +#line 542 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2912,11 +2913,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2916 "util/configparser.c" /* yacc.c:1646 */ +#line 2917 "util/configparser.c" /* yacc.c:1648 */ break; case 263: -#line 557 "./util/configparser.y" /* yacc.c:1646 */ +#line 557 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2930,11 +2931,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2934 "util/configparser.c" /* yacc.c:1646 */ +#line 2935 "util/configparser.c" /* yacc.c:1648 */ break; case 264: -#line 572 "./util/configparser.y" /* yacc.c:1646 */ +#line 572 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2946,11 +2947,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2950 "util/configparser.c" /* yacc.c:1646 */ +#line 2951 "util/configparser.c" /* yacc.c:1648 */ break; case 265: -#line 585 "./util/configparser.y" /* yacc.c:1646 */ +#line 585 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2964,11 +2965,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2968 "util/configparser.c" /* yacc.c:1646 */ +#line 2969 "util/configparser.c" /* yacc.c:1648 */ break; case 266: -#line 600 "./util/configparser.y" /* yacc.c:1646 */ +#line 600 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2976,11 +2977,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2980 "util/configparser.c" /* yacc.c:1646 */ +#line 2981 "util/configparser.c" /* yacc.c:1648 */ break; case 267: -#line 609 "./util/configparser.y" /* yacc.c:1646 */ +#line 609 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2988,11 +2989,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2992 "util/configparser.c" /* yacc.c:1646 */ +#line 2993 "util/configparser.c" /* yacc.c:1648 */ break; case 268: -#line 618 "./util/configparser.y" /* yacc.c:1646 */ +#line 618 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3000,11 +3001,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3004 "util/configparser.c" /* yacc.c:1646 */ +#line 3005 "util/configparser.c" /* yacc.c:1648 */ break; case 269: -#line 627 "./util/configparser.y" /* yacc.c:1646 */ +#line 627 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3012,11 +3013,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3016 "util/configparser.c" /* yacc.c:1646 */ +#line 3017 "util/configparser.c" /* yacc.c:1648 */ break; case 270: -#line 636 "./util/configparser.y" /* yacc.c:1646 */ +#line 636 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3024,11 +3025,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3028 "util/configparser.c" /* yacc.c:1646 */ +#line 3029 "util/configparser.c" /* yacc.c:1648 */ break; case 271: -#line 645 "./util/configparser.y" /* yacc.c:1646 */ +#line 645 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3036,11 +3037,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3040 "util/configparser.c" /* yacc.c:1646 */ +#line 3041 "util/configparser.c" /* yacc.c:1648 */ break; case 272: -#line 654 "./util/configparser.y" /* yacc.c:1646 */ +#line 654 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3048,11 +3049,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3052 "util/configparser.c" /* yacc.c:1646 */ +#line 3053 "util/configparser.c" /* yacc.c:1648 */ break; case 273: -#line 663 "./util/configparser.y" /* yacc.c:1646 */ +#line 663 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3060,11 +3061,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3064 "util/configparser.c" /* yacc.c:1646 */ +#line 3065 "util/configparser.c" /* yacc.c:1648 */ break; case 274: -#line 672 "./util/configparser.y" /* yacc.c:1646 */ +#line 672 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3072,11 +3073,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3076 "util/configparser.c" /* yacc.c:1646 */ +#line 3077 "util/configparser.c" /* yacc.c:1648 */ break; case 275: -#line 681 "./util/configparser.y" /* yacc.c:1646 */ +#line 681 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3084,11 +3085,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3088 "util/configparser.c" /* yacc.c:1646 */ +#line 3089 "util/configparser.c" /* yacc.c:1648 */ break; case 276: -#line 690 "./util/configparser.y" /* yacc.c:1646 */ +#line 690 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3096,11 +3097,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3100 "util/configparser.c" /* yacc.c:1646 */ +#line 3101 "util/configparser.c" /* yacc.c:1648 */ break; case 277: -#line 699 "./util/configparser.y" /* yacc.c:1646 */ +#line 699 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3108,11 +3109,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3112 "util/configparser.c" /* yacc.c:1646 */ +#line 3113 "util/configparser.c" /* yacc.c:1648 */ break; case 278: -#line 708 "./util/configparser.y" /* yacc.c:1646 */ +#line 708 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3120,11 +3121,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3124 "util/configparser.c" /* yacc.c:1646 */ +#line 3125 "util/configparser.c" /* yacc.c:1648 */ break; case 279: -#line 717 "./util/configparser.y" /* yacc.c:1646 */ +#line 717 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3136,11 +3137,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3140 "util/configparser.c" /* yacc.c:1646 */ +#line 3141 "util/configparser.c" /* yacc.c:1648 */ break; case 280: -#line 730 "./util/configparser.y" /* yacc.c:1646 */ +#line 730 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3148,11 +3149,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3152 "util/configparser.c" /* yacc.c:1646 */ +#line 3153 "util/configparser.c" /* yacc.c:1648 */ break; case 281: -#line 739 "./util/configparser.y" /* yacc.c:1646 */ +#line 739 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3164,11 +3165,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3168 "util/configparser.c" /* yacc.c:1646 */ +#line 3169 "util/configparser.c" /* yacc.c:1648 */ break; case 282: -#line 752 "./util/configparser.y" /* yacc.c:1646 */ +#line 752 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3176,11 +3177,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3180 "util/configparser.c" /* yacc.c:1646 */ +#line 3181 "util/configparser.c" /* yacc.c:1648 */ break; case 283: -#line 761 "./util/configparser.y" /* yacc.c:1646 */ +#line 761 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -3188,11 +3189,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3192 "util/configparser.c" /* yacc.c:1646 */ +#line 3193 "util/configparser.c" /* yacc.c:1648 */ break; case 284: -#line 770 "./util/configparser.y" /* yacc.c:1646 */ +#line 770 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3200,31 +3201,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3204 "util/configparser.c" /* yacc.c:1646 */ +#line 3205 "util/configparser.c" /* yacc.c:1648 */ break; case 285: -#line 779 "./util/configparser.y" /* yacc.c:1646 */ +#line 779 "./util/configparser.y" /* yacc.c:1648 */ { 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 3214 "util/configparser.c" /* yacc.c:1646 */ +#line 3215 "util/configparser.c" /* yacc.c:1648 */ break; case 286: -#line 786 "./util/configparser.y" /* yacc.c:1646 */ +#line 786 "./util/configparser.y" /* yacc.c:1648 */ { 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 3224 "util/configparser.c" /* yacc.c:1646 */ +#line 3225 "util/configparser.c" /* yacc.c:1648 */ break; case 287: -#line 793 "./util/configparser.y" /* yacc.c:1646 */ +#line 793 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3232,21 +3233,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3236 "util/configparser.c" /* yacc.c:1646 */ +#line 3237 "util/configparser.c" /* yacc.c:1648 */ break; case 288: -#line 802 "./util/configparser.y" /* yacc.c:1646 */ +#line 802 "./util/configparser.y" /* yacc.c:1648 */ { 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 3246 "util/configparser.c" /* yacc.c:1646 */ +#line 3247 "util/configparser.c" /* yacc.c:1648 */ break; case 289: -#line 809 "./util/configparser.y" /* yacc.c:1646 */ +#line 809 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3254,53 +3255,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3258 "util/configparser.c" /* yacc.c:1646 */ +#line 3259 "util/configparser.c" /* yacc.c:1648 */ break; case 290: -#line 818 "./util/configparser.y" /* yacc.c:1646 */ +#line 818 "./util/configparser.y" /* yacc.c:1648 */ { 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 3269 "util/configparser.c" /* yacc.c:1646 */ +#line 3270 "util/configparser.c" /* yacc.c:1648 */ break; case 291: -#line 826 "./util/configparser.y" /* yacc.c:1646 */ +#line 826 "./util/configparser.y" /* yacc.c:1648 */ { 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 3279 "util/configparser.c" /* yacc.c:1646 */ +#line 3280 "util/configparser.c" /* yacc.c:1648 */ break; case 292: -#line 833 "./util/configparser.y" /* yacc.c:1646 */ +#line 833 "./util/configparser.y" /* yacc.c:1648 */ { 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 3289 "util/configparser.c" /* yacc.c:1646 */ +#line 3290 "util/configparser.c" /* yacc.c:1648 */ break; case 293: -#line 840 "./util/configparser.y" /* yacc.c:1646 */ +#line 840 "./util/configparser.y" /* yacc.c:1648 */ { 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 3300 "util/configparser.c" /* yacc.c:1646 */ +#line 3301 "util/configparser.c" /* yacc.c:1648 */ break; case 294: -#line 848 "./util/configparser.y" /* yacc.c:1646 */ +#line 848 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3308,11 +3309,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3312 "util/configparser.c" /* yacc.c:1646 */ +#line 3313 "util/configparser.c" /* yacc.c:1648 */ break; case 295: -#line 857 "./util/configparser.y" /* yacc.c:1646 */ +#line 857 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3320,11 +3321,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3324 "util/configparser.c" /* yacc.c:1646 */ +#line 3325 "util/configparser.c" /* yacc.c:1648 */ break; case 296: -#line 866 "./util/configparser.y" /* yacc.c:1646 */ +#line 866 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3337,11 +3338,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3341 "util/configparser.c" /* yacc.c:1646 */ +#line 3342 "util/configparser.c" /* yacc.c:1648 */ break; case 297: -#line 880 "./util/configparser.y" /* yacc.c:1646 */ +#line 880 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3349,11 +3350,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3353 "util/configparser.c" /* yacc.c:1646 */ +#line 3354 "util/configparser.c" /* yacc.c:1648 */ break; case 298: -#line 889 "./util/configparser.y" /* yacc.c:1646 */ +#line 889 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3361,11 +3362,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3365 "util/configparser.c" /* yacc.c:1646 */ +#line 3366 "util/configparser.c" /* yacc.c:1648 */ break; case 299: -#line 898 "./util/configparser.y" /* yacc.c:1646 */ +#line 898 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3373,11 +3374,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3377 "util/configparser.c" /* yacc.c:1646 */ +#line 3378 "util/configparser.c" /* yacc.c:1648 */ break; case 300: -#line 907 "./util/configparser.y" /* yacc.c:1646 */ +#line 907 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3385,11 +3386,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3389 "util/configparser.c" /* yacc.c:1646 */ +#line 3390 "util/configparser.c" /* yacc.c:1648 */ break; case 301: -#line 916 "./util/configparser.y" /* yacc.c:1646 */ +#line 916 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3397,11 +3398,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3401 "util/configparser.c" /* yacc.c:1646 */ +#line 3402 "util/configparser.c" /* yacc.c:1648 */ break; case 302: -#line 925 "./util/configparser.y" /* yacc.c:1646 */ +#line 925 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3409,31 +3410,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3413 "util/configparser.c" /* yacc.c:1646 */ +#line 3414 "util/configparser.c" /* yacc.c:1648 */ break; case 303: -#line 934 "./util/configparser.y" /* yacc.c:1646 */ +#line 934 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3423 "util/configparser.c" /* yacc.c:1646 */ +#line 3424 "util/configparser.c" /* yacc.c:1648 */ break; case 304: -#line 941 "./util/configparser.y" /* yacc.c:1646 */ +#line 941 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3433 "util/configparser.c" /* yacc.c:1646 */ +#line 3434 "util/configparser.c" /* yacc.c:1648 */ break; case 305: -#line 948 "./util/configparser.y" /* yacc.c:1646 */ +#line 948 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3458,105 +3459,105 @@ yyreduce: } } } -#line 3462 "util/configparser.c" /* yacc.c:1646 */ +#line 3463 "util/configparser.c" /* yacc.c:1648 */ break; case 306: -#line 974 "./util/configparser.y" /* yacc.c:1646 */ +#line 974 "./util/configparser.y" /* yacc.c:1648 */ { 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 3473 "util/configparser.c" /* yacc.c:1646 */ +#line 3474 "util/configparser.c" /* yacc.c:1648 */ break; case 307: -#line 982 "./util/configparser.y" /* yacc.c:1646 */ +#line 982 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3483 "util/configparser.c" /* yacc.c:1646 */ +#line 3484 "util/configparser.c" /* yacc.c:1648 */ break; case 308: -#line 989 "./util/configparser.y" /* yacc.c:1646 */ +#line 989 "./util/configparser.y" /* yacc.c:1648 */ { 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 3493 "util/configparser.c" /* yacc.c:1646 */ +#line 3494 "util/configparser.c" /* yacc.c:1648 */ break; case 309: -#line 996 "./util/configparser.y" /* yacc.c:1646 */ +#line 996 "./util/configparser.y" /* yacc.c:1648 */ { 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 3503 "util/configparser.c" /* yacc.c:1646 */ +#line 3504 "util/configparser.c" /* yacc.c:1648 */ break; case 310: -#line 1003 "./util/configparser.y" /* yacc.c:1646 */ +#line 1003 "./util/configparser.y" /* yacc.c:1648 */ { 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 3513 "util/configparser.c" /* yacc.c:1646 */ +#line 3514 "util/configparser.c" /* yacc.c:1648 */ break; case 311: -#line 1010 "./util/configparser.y" /* yacc.c:1646 */ +#line 1010 "./util/configparser.y" /* yacc.c:1648 */ { 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 3524 "util/configparser.c" /* yacc.c:1646 */ +#line 3525 "util/configparser.c" /* yacc.c:1648 */ break; case 312: -#line 1018 "./util/configparser.y" /* yacc.c:1646 */ +#line 1018 "./util/configparser.y" /* yacc.c:1648 */ { 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 3535 "util/configparser.c" /* yacc.c:1646 */ +#line 3536 "util/configparser.c" /* yacc.c:1648 */ break; case 313: -#line 1026 "./util/configparser.y" /* yacc.c:1646 */ +#line 1026 "./util/configparser.y" /* yacc.c:1648 */ { 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 3546 "util/configparser.c" /* yacc.c:1646 */ +#line 3547 "util/configparser.c" /* yacc.c:1648 */ break; case 314: -#line 1034 "./util/configparser.y" /* yacc.c:1646 */ +#line 1034 "./util/configparser.y" /* yacc.c:1648 */ { 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 3556 "util/configparser.c" /* yacc.c:1646 */ +#line 3557 "util/configparser.c" /* yacc.c:1648 */ break; case 315: -#line 1041 "./util/configparser.y" /* yacc.c:1646 */ +#line 1041 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3566,11 +3567,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3570 "util/configparser.c" /* yacc.c:1646 */ +#line 3571 "util/configparser.c" /* yacc.c:1648 */ break; case 316: -#line 1052 "./util/configparser.y" /* yacc.c:1646 */ +#line 1052 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3580,21 +3581,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3584 "util/configparser.c" /* yacc.c:1646 */ +#line 3585 "util/configparser.c" /* yacc.c:1648 */ break; case 317: -#line 1063 "./util/configparser.y" /* yacc.c:1646 */ +#line 1063 "./util/configparser.y" /* yacc.c:1648 */ { 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 3594 "util/configparser.c" /* yacc.c:1646 */ +#line 3595 "util/configparser.c" /* yacc.c:1648 */ break; case 318: -#line 1070 "./util/configparser.y" /* yacc.c:1646 */ +#line 1070 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3602,11 +3603,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3606 "util/configparser.c" /* yacc.c:1646 */ +#line 3607 "util/configparser.c" /* yacc.c:1648 */ break; case 319: -#line 1079 "./util/configparser.y" /* yacc.c:1646 */ +#line 1079 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3614,11 +3615,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3618 "util/configparser.c" /* yacc.c:1646 */ +#line 3619 "util/configparser.c" /* yacc.c:1648 */ break; case 320: -#line 1088 "./util/configparser.y" /* yacc.c:1646 */ +#line 1088 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3626,53 +3627,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3630 "util/configparser.c" /* yacc.c:1646 */ +#line 3631 "util/configparser.c" /* yacc.c:1648 */ break; case 321: -#line 1097 "./util/configparser.y" /* yacc.c:1646 */ +#line 1097 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3640 "util/configparser.c" /* yacc.c:1646 */ +#line 3641 "util/configparser.c" /* yacc.c:1648 */ break; case 322: -#line 1104 "./util/configparser.y" /* yacc.c:1646 */ +#line 1104 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3650 "util/configparser.c" /* yacc.c:1646 */ +#line 3651 "util/configparser.c" /* yacc.c:1648 */ break; case 323: -#line 1111 "./util/configparser.y" /* yacc.c:1646 */ +#line 1111 "./util/configparser.y" /* yacc.c:1648 */ { 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 3661 "util/configparser.c" /* yacc.c:1646 */ +#line 3662 "util/configparser.c" /* yacc.c:1648 */ break; case 324: -#line 1119 "./util/configparser.y" /* yacc.c:1646 */ +#line 1119 "./util/configparser.y" /* yacc.c:1648 */ { 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 3672 "util/configparser.c" /* yacc.c:1646 */ +#line 3673 "util/configparser.c" /* yacc.c:1648 */ break; case 325: -#line 1127 "./util/configparser.y" /* yacc.c:1646 */ +#line 1127 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3681,11 +3682,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3685 "util/configparser.c" /* yacc.c:1646 */ +#line 3686 "util/configparser.c" /* yacc.c:1648 */ break; case 326: -#line 1137 "./util/configparser.y" /* yacc.c:1646 */ +#line 1137 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3694,11 +3695,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3698 "util/configparser.c" /* yacc.c:1646 */ +#line 3699 "util/configparser.c" /* yacc.c:1648 */ break; case 327: -#line 1147 "./util/configparser.y" /* yacc.c:1646 */ +#line 1147 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3707,22 +3708,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3711 "util/configparser.c" /* yacc.c:1646 */ +#line 3712 "util/configparser.c" /* yacc.c:1648 */ break; case 328: -#line 1157 "./util/configparser.y" /* yacc.c:1646 */ +#line 1157 "./util/configparser.y" /* yacc.c:1648 */ { 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 3722 "util/configparser.c" /* yacc.c:1646 */ +#line 3723 "util/configparser.c" /* yacc.c:1648 */ break; case 329: -#line 1165 "./util/configparser.y" /* yacc.c:1646 */ +#line 1165 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3734,11 +3735,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3738 "util/configparser.c" /* yacc.c:1646 */ +#line 3739 "util/configparser.c" /* yacc.c:1648 */ break; case 330: -#line 1178 "./util/configparser.y" /* yacc.c:1646 */ +#line 1178 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3748,22 +3749,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3752 "util/configparser.c" /* yacc.c:1646 */ +#line 3753 "util/configparser.c" /* yacc.c:1648 */ break; case 331: -#line 1189 "./util/configparser.y" /* yacc.c:1646 */ +#line 1189 "./util/configparser.y" /* yacc.c:1648 */ { 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 3763 "util/configparser.c" /* yacc.c:1646 */ +#line 3764 "util/configparser.c" /* yacc.c:1648 */ break; case 332: -#line 1197 "./util/configparser.y" /* yacc.c:1646 */ +#line 1197 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3775,11 +3776,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3779 "util/configparser.c" /* yacc.c:1646 */ +#line 3780 "util/configparser.c" /* yacc.c:1648 */ break; case 333: -#line 1210 "./util/configparser.y" /* yacc.c:1646 */ +#line 1210 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3787,11 +3788,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3791 "util/configparser.c" /* yacc.c:1646 */ +#line 3792 "util/configparser.c" /* yacc.c:1648 */ break; case 334: -#line 1219 "./util/configparser.y" /* yacc.c:1646 */ +#line 1219 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3799,11 +3800,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3803 "util/configparser.c" /* yacc.c:1646 */ +#line 3804 "util/configparser.c" /* yacc.c:1648 */ break; case 335: -#line 1228 "./util/configparser.y" /* yacc.c:1646 */ +#line 1228 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3811,11 +3812,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3815 "util/configparser.c" /* yacc.c:1646 */ +#line 3816 "util/configparser.c" /* yacc.c:1648 */ break; case 336: -#line 1237 "./util/configparser.y" /* yacc.c:1646 */ +#line 1237 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3824,11 +3825,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3828 "util/configparser.c" /* yacc.c:1646 */ +#line 3829 "util/configparser.c" /* yacc.c:1648 */ break; case 337: -#line 1247 "./util/configparser.y" /* yacc.c:1646 */ +#line 1247 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3837,22 +3838,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3841 "util/configparser.c" /* yacc.c:1646 */ +#line 3842 "util/configparser.c" /* yacc.c:1648 */ break; case 338: -#line 1257 "./util/configparser.y" /* yacc.c:1646 */ +#line 1257 "./util/configparser.y" /* yacc.c:1648 */ { 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 3852 "util/configparser.c" /* yacc.c:1646 */ +#line 3853 "util/configparser.c" /* yacc.c:1648 */ break; case 339: -#line 1265 "./util/configparser.y" /* yacc.c:1646 */ +#line 1265 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3864,11 +3865,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3868 "util/configparser.c" /* yacc.c:1646 */ +#line 3869 "util/configparser.c" /* yacc.c:1648 */ break; case 340: -#line 1278 "./util/configparser.y" /* yacc.c:1646 */ +#line 1278 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3876,22 +3877,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3880 "util/configparser.c" /* yacc.c:1646 */ +#line 3881 "util/configparser.c" /* yacc.c:1648 */ break; case 341: -#line 1287 "./util/configparser.y" /* yacc.c:1646 */ +#line 1287 "./util/configparser.y" /* yacc.c:1648 */ { 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 3891 "util/configparser.c" /* yacc.c:1646 */ +#line 3892 "util/configparser.c" /* yacc.c:1648 */ break; case 342: -#line 1295 "./util/configparser.y" /* yacc.c:1646 */ +#line 1295 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3899,22 +3900,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3903 "util/configparser.c" /* yacc.c:1646 */ +#line 3904 "util/configparser.c" /* yacc.c:1648 */ break; case 343: -#line 1304 "./util/configparser.y" /* yacc.c:1646 */ +#line 1304 "./util/configparser.y" /* yacc.c:1648 */ { 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 3914 "util/configparser.c" /* yacc.c:1646 */ +#line 3915 "util/configparser.c" /* yacc.c:1648 */ break; case 344: -#line 1312 "./util/configparser.y" /* yacc.c:1646 */ +#line 1312 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3926,11 +3927,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3930 "util/configparser.c" /* yacc.c:1646 */ +#line 3931 "util/configparser.c" /* yacc.c:1648 */ break; case 345: -#line 1325 "./util/configparser.y" /* yacc.c:1646 */ +#line 1325 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3938,21 +3939,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3942 "util/configparser.c" /* yacc.c:1646 */ +#line 3943 "util/configparser.c" /* yacc.c:1648 */ break; case 346: -#line 1334 "./util/configparser.y" /* yacc.c:1646 */ +#line 1334 "./util/configparser.y" /* yacc.c:1648 */ { 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 3952 "util/configparser.c" /* yacc.c:1646 */ +#line 3953 "util/configparser.c" /* yacc.c:1648 */ break; case 347: -#line 1341 "./util/configparser.y" /* yacc.c:1646 */ +#line 1341 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3961,11 +3962,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3965 "util/configparser.c" /* yacc.c:1646 */ +#line 3966 "util/configparser.c" /* yacc.c:1648 */ break; case 348: -#line 1351 "./util/configparser.y" /* yacc.c:1646 */ +#line 1351 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3974,11 +3975,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3978 "util/configparser.c" /* yacc.c:1646 */ +#line 3979 "util/configparser.c" /* yacc.c:1648 */ break; case 349: -#line 1361 "./util/configparser.y" /* yacc.c:1646 */ +#line 1361 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3987,11 +3988,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3991 "util/configparser.c" /* yacc.c:1646 */ +#line 3992 "util/configparser.c" /* yacc.c:1648 */ break; case 350: -#line 1371 "./util/configparser.y" /* yacc.c:1646 */ +#line 1371 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4000,11 +4001,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4004 "util/configparser.c" /* yacc.c:1646 */ +#line 4005 "util/configparser.c" /* yacc.c:1648 */ break; case 351: -#line 1381 "./util/configparser.y" /* yacc.c:1646 */ +#line 1381 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4013,11 +4014,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4017 "util/configparser.c" /* yacc.c:1646 */ +#line 4018 "util/configparser.c" /* yacc.c:1648 */ break; case 352: -#line 1391 "./util/configparser.y" /* yacc.c:1646 */ +#line 1391 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4026,11 +4027,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4030 "util/configparser.c" /* yacc.c:1646 */ +#line 4031 "util/configparser.c" /* yacc.c:1648 */ break; case 353: -#line 1401 "./util/configparser.y" /* yacc.c:1646 */ +#line 1401 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4039,11 +4040,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4043 "util/configparser.c" /* yacc.c:1646 */ +#line 4044 "util/configparser.c" /* yacc.c:1648 */ break; case 354: -#line 1411 "./util/configparser.y" /* yacc.c:1646 */ +#line 1411 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -4052,41 +4053,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4056 "util/configparser.c" /* yacc.c:1646 */ +#line 4057 "util/configparser.c" /* yacc.c:1648 */ break; case 355: -#line 1421 "./util/configparser.y" /* yacc.c:1646 */ +#line 1421 "./util/configparser.y" /* yacc.c:1648 */ { 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 4066 "util/configparser.c" /* yacc.c:1646 */ +#line 4067 "util/configparser.c" /* yacc.c:1648 */ break; case 356: -#line 1428 "./util/configparser.y" /* yacc.c:1646 */ +#line 1428 "./util/configparser.y" /* yacc.c:1648 */ { 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 4076 "util/configparser.c" /* yacc.c:1646 */ +#line 4077 "util/configparser.c" /* yacc.c:1648 */ break; case 357: -#line 1435 "./util/configparser.y" /* yacc.c:1646 */ +#line 1435 "./util/configparser.y" /* yacc.c:1648 */ { 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 4086 "util/configparser.c" /* yacc.c:1646 */ +#line 4087 "util/configparser.c" /* yacc.c:1648 */ break; case 358: -#line 1442 "./util/configparser.y" /* yacc.c:1646 */ +#line 1442 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4094,11 +4095,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4098 "util/configparser.c" /* yacc.c:1646 */ +#line 4099 "util/configparser.c" /* yacc.c:1648 */ break; case 359: -#line 1451 "./util/configparser.y" /* yacc.c:1646 */ +#line 1451 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4106,11 +4107,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4110 "util/configparser.c" /* yacc.c:1646 */ +#line 4111 "util/configparser.c" /* yacc.c:1648 */ break; case 360: -#line 1460 "./util/configparser.y" /* yacc.c:1646 */ +#line 1460 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4118,11 +4119,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4122 "util/configparser.c" /* yacc.c:1646 */ +#line 4123 "util/configparser.c" /* yacc.c:1648 */ break; case 361: -#line 1469 "./util/configparser.y" /* yacc.c:1646 */ +#line 1469 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4130,21 +4131,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4134 "util/configparser.c" /* yacc.c:1646 */ +#line 4135 "util/configparser.c" /* yacc.c:1648 */ break; case 362: -#line 1478 "./util/configparser.y" /* yacc.c:1646 */ +#line 1478 "./util/configparser.y" /* yacc.c:1648 */ { 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 4144 "util/configparser.c" /* yacc.c:1646 */ +#line 4145 "util/configparser.c" /* yacc.c:1648 */ break; case 363: -#line 1485 "./util/configparser.y" /* yacc.c:1646 */ +#line 1485 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -4153,11 +4154,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4157 "util/configparser.c" /* yacc.c:1646 */ +#line 4158 "util/configparser.c" /* yacc.c:1648 */ break; case 364: -#line 1495 "./util/configparser.y" /* yacc.c:1646 */ +#line 1495 "./util/configparser.y" /* yacc.c:1648 */ { 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 && @@ -4176,21 +4177,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4180 "util/configparser.c" /* yacc.c:1646 */ +#line 4181 "util/configparser.c" /* yacc.c:1648 */ break; case 365: -#line 1515 "./util/configparser.y" /* yacc.c:1646 */ +#line 1515 "./util/configparser.y" /* yacc.c:1648 */ { 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 4190 "util/configparser.c" /* yacc.c:1646 */ +#line 4191 "util/configparser.c" /* yacc.c:1648 */ break; case 366: -#line 1522 "./util/configparser.y" /* yacc.c:1646 */ +#line 1522 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4207,11 +4208,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4211 "util/configparser.c" /* yacc.c:1646 */ +#line 4212 "util/configparser.c" /* yacc.c:1648 */ break; case 367: -#line 1540 "./util/configparser.y" /* yacc.c:1646 */ +#line 1540 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4223,11 +4224,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4227 "util/configparser.c" /* yacc.c:1646 */ +#line 4228 "util/configparser.c" /* yacc.c:1648 */ break; case 368: -#line 1553 "./util/configparser.y" /* yacc.c:1646 */ +#line 1553 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4239,11 +4240,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4243 "util/configparser.c" /* yacc.c:1646 */ +#line 4244 "util/configparser.c" /* yacc.c:1648 */ break; case 369: -#line 1566 "./util/configparser.y" /* yacc.c:1646 */ +#line 1566 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4251,11 +4252,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4255 "util/configparser.c" /* yacc.c:1646 */ +#line 4256 "util/configparser.c" /* yacc.c:1648 */ break; case 370: -#line 1575 "./util/configparser.y" /* yacc.c:1646 */ +#line 1575 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4263,11 +4264,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4267 "util/configparser.c" /* yacc.c:1646 */ +#line 4268 "util/configparser.c" /* yacc.c:1648 */ break; case 371: -#line 1584 "./util/configparser.y" /* yacc.c:1646 */ +#line 1584 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4275,11 +4276,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4279 "util/configparser.c" /* yacc.c:1646 */ +#line 4280 "util/configparser.c" /* yacc.c:1648 */ break; case 372: -#line 1593 "./util/configparser.y" /* yacc.c:1646 */ +#line 1593 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4287,11 +4288,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4291 "util/configparser.c" /* yacc.c:1646 */ +#line 4292 "util/configparser.c" /* yacc.c:1648 */ break; case 373: -#line 1602 "./util/configparser.y" /* yacc.c:1646 */ +#line 1602 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4300,11 +4301,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4304 "util/configparser.c" /* yacc.c:1646 */ +#line 4305 "util/configparser.c" /* yacc.c:1648 */ break; case 374: -#line 1612 "./util/configparser.y" /* yacc.c:1646 */ +#line 1612 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4313,11 +4314,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4317 "util/configparser.c" /* yacc.c:1646 */ +#line 4318 "util/configparser.c" /* yacc.c:1648 */ break; case 375: -#line 1622 "./util/configparser.y" /* yacc.c:1646 */ +#line 1622 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4327,11 +4328,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4331 "util/configparser.c" /* yacc.c:1646 */ +#line 4332 "util/configparser.c" /* yacc.c:1648 */ break; case 376: -#line 1633 "./util/configparser.y" /* yacc.c:1646 */ +#line 1633 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4339,11 +4340,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4343 "util/configparser.c" /* yacc.c:1646 */ +#line 4344 "util/configparser.c" /* yacc.c:1648 */ break; case 377: -#line 1642 "./util/configparser.y" /* yacc.c:1646 */ +#line 1642 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4351,11 +4352,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4355 "util/configparser.c" /* yacc.c:1646 */ +#line 4356 "util/configparser.c" /* yacc.c:1648 */ break; case 378: -#line 1651 "./util/configparser.y" /* yacc.c:1646 */ +#line 1651 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4363,11 +4364,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4367 "util/configparser.c" /* yacc.c:1646 */ +#line 4368 "util/configparser.c" /* yacc.c:1648 */ break; case 379: -#line 1660 "./util/configparser.y" /* yacc.c:1646 */ +#line 1660 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -4375,11 +4376,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4379 "util/configparser.c" /* yacc.c:1646 */ +#line 4380 "util/configparser.c" /* yacc.c:1648 */ break; case 380: -#line 1669 "./util/configparser.y" /* yacc.c:1646 */ +#line 1669 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4391,11 +4392,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4395 "util/configparser.c" /* yacc.c:1646 */ +#line 4396 "util/configparser.c" /* yacc.c:1648 */ break; case 381: -#line 1682 "./util/configparser.y" /* yacc.c:1646 */ +#line 1682 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4407,11 +4408,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4411 "util/configparser.c" /* yacc.c:1646 */ +#line 4412 "util/configparser.c" /* yacc.c:1648 */ break; case 382: -#line 1695 "./util/configparser.y" /* yacc.c:1646 */ +#line 1695 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4419,21 +4420,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4423 "util/configparser.c" /* yacc.c:1646 */ +#line 4424 "util/configparser.c" /* yacc.c:1648 */ break; case 383: -#line 1704 "./util/configparser.y" /* yacc.c:1646 */ +#line 1704 "./util/configparser.y" /* yacc.c:1648 */ { 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 4433 "util/configparser.c" /* yacc.c:1646 */ +#line 4434 "util/configparser.c" /* yacc.c:1648 */ break; case 384: -#line 1711 "./util/configparser.y" /* yacc.c:1646 */ +#line 1711 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4441,11 +4442,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4445 "util/configparser.c" /* yacc.c:1646 */ +#line 4446 "util/configparser.c" /* yacc.c:1648 */ break; case 385: -#line 1720 "./util/configparser.y" /* yacc.c:1646 */ +#line 1720 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4453,11 +4454,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4457 "util/configparser.c" /* yacc.c:1646 */ +#line 4458 "util/configparser.c" /* yacc.c:1648 */ break; case 386: -#line 1729 "./util/configparser.y" /* yacc.c:1646 */ +#line 1729 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4465,11 +4466,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4469 "util/configparser.c" /* yacc.c:1646 */ +#line 4470 "util/configparser.c" /* yacc.c:1648 */ break; case 387: -#line 1738 "./util/configparser.y" /* yacc.c:1646 */ +#line 1738 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4478,22 +4479,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" /* yacc.c:1646 */ +#line 4483 "util/configparser.c" /* yacc.c:1648 */ break; case 388: -#line 1747 "./util/configparser.y" /* yacc.c:1646 */ +#line 1747 "./util/configparser.y" /* yacc.c:1648 */ { 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 4493 "util/configparser.c" /* yacc.c:1646 */ +#line 4494 "util/configparser.c" /* yacc.c:1648 */ break; case 389: -#line 1755 "./util/configparser.y" /* yacc.c:1646 */ +#line 1755 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4505,22 +4506,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4509 "util/configparser.c" /* yacc.c:1646 */ +#line 4510 "util/configparser.c" /* yacc.c:1648 */ break; case 390: -#line 1768 "./util/configparser.y" /* yacc.c:1646 */ +#line 1768 "./util/configparser.y" /* yacc.c:1648 */ { 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 4520 "util/configparser.c" /* yacc.c:1646 */ +#line 4521 "util/configparser.c" /* yacc.c:1648 */ break; case 391: -#line 1776 "./util/configparser.y" /* yacc.c:1646 */ +#line 1776 "./util/configparser.y" /* yacc.c:1648 */ { 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 && @@ -4550,21 +4551,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4554 "util/configparser.c" /* yacc.c:1646 */ +#line 4555 "util/configparser.c" /* yacc.c:1648 */ break; case 392: -#line 1807 "./util/configparser.y" /* yacc.c:1646 */ +#line 1807 "./util/configparser.y" /* yacc.c:1648 */ { 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 4564 "util/configparser.c" /* yacc.c:1646 */ +#line 4565 "util/configparser.c" /* yacc.c:1648 */ break; case 393: -#line 1814 "./util/configparser.y" /* yacc.c:1646 */ +#line 1814 "./util/configparser.y" /* yacc.c:1648 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4578,11 +4579,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4582 "util/configparser.c" /* yacc.c:1646 */ +#line 4583 "util/configparser.c" /* yacc.c:1648 */ break; case 394: -#line 1829 "./util/configparser.y" /* yacc.c:1646 */ +#line 1829 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4591,11 +4592,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4595 "util/configparser.c" /* yacc.c:1646 */ +#line 4596 "util/configparser.c" /* yacc.c:1648 */ break; case 395: -#line 1839 "./util/configparser.y" /* yacc.c:1646 */ +#line 1839 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4604,41 +4605,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4608 "util/configparser.c" /* yacc.c:1646 */ +#line 4609 "util/configparser.c" /* yacc.c:1648 */ break; case 396: -#line 1849 "./util/configparser.y" /* yacc.c:1646 */ +#line 1849 "./util/configparser.y" /* yacc.c:1648 */ { 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 4618 "util/configparser.c" /* yacc.c:1646 */ +#line 4619 "util/configparser.c" /* yacc.c:1648 */ break; case 397: -#line 1856 "./util/configparser.y" /* yacc.c:1646 */ +#line 1856 "./util/configparser.y" /* yacc.c:1648 */ { 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 4628 "util/configparser.c" /* yacc.c:1646 */ +#line 4629 "util/configparser.c" /* yacc.c:1648 */ break; case 398: -#line 1863 "./util/configparser.y" /* yacc.c:1646 */ +#line 1863 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4638 "util/configparser.c" /* yacc.c:1646 */ +#line 4639 "util/configparser.c" /* yacc.c:1648 */ break; case 399: -#line 1870 "./util/configparser.y" /* yacc.c:1646 */ +#line 1870 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4646,22 +4647,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4650 "util/configparser.c" /* yacc.c:1646 */ +#line 4651 "util/configparser.c" /* yacc.c:1648 */ break; case 400: -#line 1879 "./util/configparser.y" /* yacc.c:1646 */ +#line 1879 "./util/configparser.y" /* yacc.c:1648 */ { 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 4661 "util/configparser.c" /* yacc.c:1646 */ +#line 4662 "util/configparser.c" /* yacc.c:1648 */ break; case 401: -#line 1887 "./util/configparser.y" /* yacc.c:1646 */ +#line 1887 "./util/configparser.y" /* yacc.c:1648 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4674,11 +4675,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4678 "util/configparser.c" /* yacc.c:1646 */ +#line 4679 "util/configparser.c" /* yacc.c:1648 */ break; case 402: -#line 1901 "./util/configparser.y" /* yacc.c:1646 */ +#line 1901 "./util/configparser.y" /* yacc.c:1648 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4698,11 +4699,11 @@ yyreduce: } } } -#line 4702 "util/configparser.c" /* yacc.c:1646 */ +#line 4703 "util/configparser.c" /* yacc.c:1648 */ break; case 403: -#line 1922 "./util/configparser.y" /* yacc.c:1646 */ +#line 1922 "./util/configparser.y" /* yacc.c:1648 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4722,11 +4723,11 @@ yyreduce: } } } -#line 4726 "util/configparser.c" /* yacc.c:1646 */ +#line 4727 "util/configparser.c" /* yacc.c:1648 */ break; case 404: -#line 1943 "./util/configparser.y" /* yacc.c:1646 */ +#line 1943 "./util/configparser.y" /* yacc.c:1648 */ { 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, @@ -4737,11 +4738,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4741 "util/configparser.c" /* yacc.c:1646 */ +#line 4742 "util/configparser.c" /* yacc.c:1648 */ break; case 405: -#line 1955 "./util/configparser.y" /* yacc.c:1646 */ +#line 1955 "./util/configparser.y" /* yacc.c:1648 */ { 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, @@ -4752,11 +4753,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4756 "util/configparser.c" /* yacc.c:1646 */ +#line 4757 "util/configparser.c" /* yacc.c:1648 */ break; case 406: -#line 1967 "./util/configparser.y" /* yacc.c:1646 */ +#line 1967 "./util/configparser.y" /* yacc.c:1648 */ { 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, @@ -4767,11 +4768,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4771 "util/configparser.c" /* yacc.c:1646 */ +#line 4772 "util/configparser.c" /* yacc.c:1648 */ break; case 407: -#line 1979 "./util/configparser.y" /* yacc.c:1646 */ +#line 1979 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4779,11 +4780,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4783 "util/configparser.c" /* yacc.c:1646 */ +#line 4784 "util/configparser.c" /* yacc.c:1648 */ break; case 408: -#line 1988 "./util/configparser.y" /* yacc.c:1646 */ +#line 1988 "./util/configparser.y" /* yacc.c:1648 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4803,11 +4804,11 @@ yyreduce: } } } -#line 4807 "util/configparser.c" /* yacc.c:1646 */ +#line 4808 "util/configparser.c" /* yacc.c:1648 */ break; case 409: -#line 2009 "./util/configparser.y" /* yacc.c:1646 */ +#line 2009 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4815,11 +4816,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4819 "util/configparser.c" /* yacc.c:1646 */ +#line 4820 "util/configparser.c" /* yacc.c:1648 */ break; case 410: -#line 2019 "./util/configparser.y" /* yacc.c:1646 */ +#line 2019 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4827,33 +4828,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4831 "util/configparser.c" /* yacc.c:1646 */ +#line 4832 "util/configparser.c" /* yacc.c:1648 */ break; case 411: -#line 2028 "./util/configparser.y" /* yacc.c:1646 */ +#line 2028 "./util/configparser.y" /* yacc.c:1648 */ { 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 4842 "util/configparser.c" /* yacc.c:1646 */ +#line 4843 "util/configparser.c" /* yacc.c:1648 */ break; case 412: -#line 2036 "./util/configparser.y" /* yacc.c:1646 */ +#line 2036 "./util/configparser.y" /* yacc.c:1648 */ { 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 4853 "util/configparser.c" /* yacc.c:1646 */ +#line 4854 "util/configparser.c" /* yacc.c:1648 */ break; case 413: -#line 2044 "./util/configparser.y" /* yacc.c:1646 */ +#line 2044 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4865,11 +4866,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4869 "util/configparser.c" /* yacc.c:1646 */ +#line 4870 "util/configparser.c" /* yacc.c:1648 */ break; case 414: -#line 2057 "./util/configparser.y" /* yacc.c:1646 */ +#line 2057 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4881,11 +4882,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4885 "util/configparser.c" /* yacc.c:1646 */ +#line 4886 "util/configparser.c" /* yacc.c:1648 */ break; case 415: -#line 2070 "./util/configparser.y" /* yacc.c:1646 */ +#line 2070 "./util/configparser.y" /* yacc.c:1648 */ { 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) { @@ -4899,11 +4900,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4903 "util/configparser.c" /* yacc.c:1646 */ +#line 4904 "util/configparser.c" /* yacc.c:1648 */ break; case 416: -#line 2085 "./util/configparser.y" /* yacc.c:1646 */ +#line 2085 "./util/configparser.y" /* yacc.c:1648 */ { 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) { @@ -4917,11 +4918,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4921 "util/configparser.c" /* yacc.c:1646 */ +#line 4922 "util/configparser.c" /* yacc.c:1648 */ break; case 417: -#line 2100 "./util/configparser.y" /* yacc.c:1646 */ +#line 2100 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4929,11 +4930,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4933 "util/configparser.c" /* yacc.c:1646 */ +#line 4934 "util/configparser.c" /* yacc.c:1648 */ break; case 418: -#line 2109 "./util/configparser.y" /* yacc.c:1646 */ +#line 2109 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4941,20 +4942,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4945 "util/configparser.c" /* yacc.c:1646 */ +#line 4946 "util/configparser.c" /* yacc.c:1648 */ break; case 419: -#line 2118 "./util/configparser.y" /* yacc.c:1646 */ +#line 2118 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4954 "util/configparser.c" /* yacc.c:1646 */ +#line 4955 "util/configparser.c" /* yacc.c:1648 */ break; case 420: -#line 2124 "./util/configparser.y" /* yacc.c:1646 */ +#line 2124 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4962,11 +4963,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4966 "util/configparser.c" /* yacc.c:1646 */ +#line 4967 "util/configparser.c" /* yacc.c:1648 */ break; case 421: -#line 2133 "./util/configparser.y" /* yacc.c:1646 */ +#line 2133 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4974,11 +4975,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4978 "util/configparser.c" /* yacc.c:1646 */ +#line 4979 "util/configparser.c" /* yacc.c:1648 */ break; case 422: -#line 2142 "./util/configparser.y" /* yacc.c:1646 */ +#line 2142 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4987,11 +4988,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4991 "util/configparser.c" /* yacc.c:1646 */ +#line 4992 "util/configparser.c" /* yacc.c:1648 */ break; case 423: -#line 2152 "./util/configparser.y" /* yacc.c:1646 */ +#line 2152 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5000,11 +5001,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5004 "util/configparser.c" /* yacc.c:1646 */ +#line 5005 "util/configparser.c" /* yacc.c:1648 */ break; case 424: -#line 2162 "./util/configparser.y" /* yacc.c:1646 */ +#line 2162 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5016,11 +5017,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5020 "util/configparser.c" /* yacc.c:1646 */ +#line 5021 "util/configparser.c" /* yacc.c:1648 */ break; case 425: -#line 2175 "./util/configparser.y" /* yacc.c:1646 */ +#line 2175 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5032,11 +5033,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5036 "util/configparser.c" /* yacc.c:1646 */ +#line 5037 "util/configparser.c" /* yacc.c:1648 */ break; case 426: -#line 2188 "./util/configparser.y" /* yacc.c:1646 */ +#line 2188 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5047,11 +5048,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5051 "util/configparser.c" /* yacc.c:1646 */ +#line 5052 "util/configparser.c" /* yacc.c:1648 */ break; case 427: -#line 2200 "./util/configparser.y" /* yacc.c:1646 */ +#line 2200 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5064,11 +5065,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5068 "util/configparser.c" /* yacc.c:1646 */ +#line 5069 "util/configparser.c" /* yacc.c:1648 */ break; case 428: -#line 2214 "./util/configparser.y" /* yacc.c:1646 */ +#line 2214 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5079,11 +5080,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5083 "util/configparser.c" /* yacc.c:1646 */ +#line 5084 "util/configparser.c" /* yacc.c:1648 */ break; case 429: -#line 2226 "./util/configparser.y" /* yacc.c:1646 */ +#line 2226 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5096,11 +5097,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5100 "util/configparser.c" /* yacc.c:1646 */ +#line 5101 "util/configparser.c" /* yacc.c:1648 */ break; case 430: -#line 2240 "./util/configparser.y" /* yacc.c:1646 */ +#line 2240 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5109,31 +5110,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5113 "util/configparser.c" /* yacc.c:1646 */ +#line 5114 "util/configparser.c" /* yacc.c:1648 */ break; case 431: -#line 2250 "./util/configparser.y" /* yacc.c:1646 */ +#line 2250 "./util/configparser.y" /* yacc.c:1648 */ { 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 5123 "util/configparser.c" /* yacc.c:1646 */ +#line 5124 "util/configparser.c" /* yacc.c:1648 */ break; case 432: -#line 2257 "./util/configparser.y" /* yacc.c:1646 */ +#line 2257 "./util/configparser.y" /* yacc.c:1648 */ { 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 5133 "util/configparser.c" /* yacc.c:1646 */ +#line 5134 "util/configparser.c" /* yacc.c:1648 */ break; case 433: -#line 2264 "./util/configparser.y" /* yacc.c:1646 */ +#line 2264 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5141,11 +5142,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5145 "util/configparser.c" /* yacc.c:1646 */ +#line 5146 "util/configparser.c" /* yacc.c:1648 */ break; case 434: -#line 2273 "./util/configparser.y" /* yacc.c:1646 */ +#line 2273 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5153,11 +5154,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5157 "util/configparser.c" /* yacc.c:1646 */ +#line 5158 "util/configparser.c" /* yacc.c:1648 */ break; case 435: -#line 2282 "./util/configparser.y" /* yacc.c:1646 */ +#line 2282 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5166,11 +5167,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5170 "util/configparser.c" /* yacc.c:1646 */ +#line 5171 "util/configparser.c" /* yacc.c:1648 */ break; case 436: -#line 2292 "./util/configparser.y" /* yacc.c:1646 */ +#line 2292 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5179,11 +5180,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5183 "util/configparser.c" /* yacc.c:1646 */ +#line 5184 "util/configparser.c" /* yacc.c:1648 */ break; case 437: -#line 2302 "./util/configparser.y" /* yacc.c:1646 */ +#line 2302 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5192,31 +5193,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5196 "util/configparser.c" /* yacc.c:1646 */ +#line 5197 "util/configparser.c" /* yacc.c:1648 */ break; case 438: -#line 2312 "./util/configparser.y" /* yacc.c:1646 */ +#line 2312 "./util/configparser.y" /* yacc.c:1648 */ { 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 5206 "util/configparser.c" /* yacc.c:1646 */ +#line 5207 "util/configparser.c" /* yacc.c:1648 */ break; case 439: -#line 2319 "./util/configparser.y" /* yacc.c:1646 */ +#line 2319 "./util/configparser.y" /* yacc.c:1648 */ { 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 5216 "util/configparser.c" /* yacc.c:1646 */ +#line 5217 "util/configparser.c" /* yacc.c:1648 */ break; case 440: -#line 2326 "./util/configparser.y" /* yacc.c:1646 */ +#line 2326 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5224,11 +5225,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5228 "util/configparser.c" /* yacc.c:1646 */ +#line 5229 "util/configparser.c" /* yacc.c:1648 */ break; case 441: -#line 2335 "./util/configparser.y" /* yacc.c:1646 */ +#line 2335 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5236,11 +5237,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5240 "util/configparser.c" /* yacc.c:1646 */ +#line 5241 "util/configparser.c" /* yacc.c:1648 */ break; case 442: -#line 2344 "./util/configparser.y" /* yacc.c:1646 */ +#line 2344 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5249,11 +5250,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5253 "util/configparser.c" /* yacc.c:1646 */ +#line 5254 "util/configparser.c" /* yacc.c:1648 */ break; case 443: -#line 2354 "./util/configparser.y" /* yacc.c:1646 */ +#line 2354 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5262,52 +5263,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5266 "util/configparser.c" /* yacc.c:1646 */ +#line 5267 "util/configparser.c" /* yacc.c:1648 */ break; case 444: -#line 2364 "./util/configparser.y" /* yacc.c:1646 */ +#line 2364 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5276 "util/configparser.c" /* yacc.c:1646 */ +#line 5277 "util/configparser.c" /* yacc.c:1648 */ break; case 445: -#line 2371 "./util/configparser.y" /* yacc.c:1646 */ +#line 2371 "./util/configparser.y" /* yacc.c:1648 */ { 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 5286 "util/configparser.c" /* yacc.c:1646 */ +#line 5287 "util/configparser.c" /* yacc.c:1648 */ break; case 446: -#line 2378 "./util/configparser.y" /* yacc.c:1646 */ +#line 2378 "./util/configparser.y" /* yacc.c:1648 */ { 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 5296 "util/configparser.c" /* yacc.c:1646 */ +#line 5297 "util/configparser.c" /* yacc.c:1648 */ break; case 447: -#line 2385 "./util/configparser.y" /* yacc.c:1646 */ +#line 2385 "./util/configparser.y" /* yacc.c:1648 */ { 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 5307 "util/configparser.c" /* yacc.c:1646 */ +#line 5308 "util/configparser.c" /* yacc.c:1648 */ break; case 448: -#line 2393 "./util/configparser.y" /* yacc.c:1646 */ +#line 2393 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5316,11 +5317,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5320 "util/configparser.c" /* yacc.c:1646 */ +#line 5321 "util/configparser.c" /* yacc.c:1648 */ break; case 449: -#line 2403 "./util/configparser.y" /* yacc.c:1646 */ +#line 2403 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5329,11 +5330,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5333 "util/configparser.c" /* yacc.c:1646 */ +#line 5334 "util/configparser.c" /* yacc.c:1648 */ break; case 450: -#line 2413 "./util/configparser.y" /* yacc.c:1646 */ +#line 2413 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5342,11 +5343,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5346 "util/configparser.c" /* yacc.c:1646 */ +#line 5347 "util/configparser.c" /* yacc.c:1648 */ break; case 451: -#line 2423 "./util/configparser.y" /* yacc.c:1646 */ +#line 2423 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5355,11 +5356,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5359 "util/configparser.c" /* yacc.c:1646 */ +#line 5360 "util/configparser.c" /* yacc.c:1648 */ break; case 452: -#line 2433 "./util/configparser.y" /* yacc.c:1646 */ +#line 2433 "./util/configparser.y" /* yacc.c:1648 */ { 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 && @@ -5390,11 +5391,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5394 "util/configparser.c" /* yacc.c:1646 */ +#line 5395 "util/configparser.c" /* yacc.c:1648 */ break; case 453: -#line 2465 "./util/configparser.y" /* yacc.c:1646 */ +#line 2465 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5403,33 +5404,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5407 "util/configparser.c" /* yacc.c:1646 */ +#line 5408 "util/configparser.c" /* yacc.c:1648 */ break; case 454: -#line 2475 "./util/configparser.y" /* yacc.c:1646 */ +#line 2475 "./util/configparser.y" /* yacc.c:1648 */ { 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 5418 "util/configparser.c" /* yacc.c:1646 */ +#line 5419 "util/configparser.c" /* yacc.c:1648 */ break; case 455: -#line 2483 "./util/configparser.y" /* yacc.c:1646 */ +#line 2483 "./util/configparser.y" /* yacc.c:1648 */ { 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 5429 "util/configparser.c" /* yacc.c:1646 */ +#line 5430 "util/configparser.c" /* yacc.c:1648 */ break; case 456: -#line 2491 "./util/configparser.y" /* yacc.c:1646 */ +#line 2491 "./util/configparser.y" /* yacc.c:1648 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5443,11 +5444,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5447 "util/configparser.c" /* yacc.c:1646 */ +#line 5448 "util/configparser.c" /* yacc.c:1648 */ break; case 457: -#line 2506 "./util/configparser.y" /* yacc.c:1646 */ +#line 2506 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5455,19 +5456,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5459 "util/configparser.c" /* yacc.c:1646 */ +#line 5460 "util/configparser.c" /* yacc.c:1648 */ break; case 458: -#line 2515 "./util/configparser.y" /* yacc.c:1646 */ +#line 2515 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5467 "util/configparser.c" /* yacc.c:1646 */ +#line 5468 "util/configparser.c" /* yacc.c:1648 */ break; case 469: -#line 2526 "./util/configparser.y" /* yacc.c:1646 */ +#line 2526 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5476,11 +5477,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5480 "util/configparser.c" /* yacc.c:1646 */ +#line 5481 "util/configparser.c" /* yacc.c:1648 */ break; case 470: -#line 2536 "./util/configparser.y" /* yacc.c:1646 */ +#line 2536 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5488,79 +5489,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5492 "util/configparser.c" /* yacc.c:1646 */ +#line 5493 "util/configparser.c" /* yacc.c:1648 */ break; case 471: -#line 2545 "./util/configparser.y" /* yacc.c:1646 */ +#line 2545 "./util/configparser.y" /* yacc.c:1648 */ { 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 5502 "util/configparser.c" /* yacc.c:1646 */ +#line 5503 "util/configparser.c" /* yacc.c:1648 */ break; case 472: -#line 2552 "./util/configparser.y" /* yacc.c:1646 */ +#line 2552 "./util/configparser.y" /* yacc.c:1648 */ { 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 5512 "util/configparser.c" /* yacc.c:1646 */ +#line 5513 "util/configparser.c" /* yacc.c:1648 */ break; case 473: -#line 2559 "./util/configparser.y" /* yacc.c:1646 */ +#line 2559 "./util/configparser.y" /* yacc.c:1648 */ { 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 5522 "util/configparser.c" /* yacc.c:1646 */ +#line 5523 "util/configparser.c" /* yacc.c:1648 */ break; case 474: -#line 2566 "./util/configparser.y" /* yacc.c:1646 */ +#line 2566 "./util/configparser.y" /* yacc.c:1648 */ { 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 5532 "util/configparser.c" /* yacc.c:1646 */ +#line 5533 "util/configparser.c" /* yacc.c:1648 */ break; case 475: -#line 2573 "./util/configparser.y" /* yacc.c:1646 */ +#line 2573 "./util/configparser.y" /* yacc.c:1648 */ { 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 5542 "util/configparser.c" /* yacc.c:1646 */ +#line 5543 "util/configparser.c" /* yacc.c:1648 */ break; case 476: -#line 2580 "./util/configparser.y" /* yacc.c:1646 */ +#line 2580 "./util/configparser.y" /* yacc.c:1648 */ { 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 5552 "util/configparser.c" /* yacc.c:1646 */ +#line 5553 "util/configparser.c" /* yacc.c:1648 */ break; case 477: -#line 2587 "./util/configparser.y" /* yacc.c:1646 */ +#line 2587 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5560 "util/configparser.c" /* yacc.c:1646 */ +#line 5561 "util/configparser.c" /* yacc.c:1648 */ break; case 492: -#line 2604 "./util/configparser.y" /* yacc.c:1646 */ +#line 2604 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5568,21 +5569,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5572 "util/configparser.c" /* yacc.c:1646 */ +#line 5573 "util/configparser.c" /* yacc.c:1648 */ break; case 493: -#line 2613 "./util/configparser.y" /* yacc.c:1646 */ +#line 2613 "./util/configparser.y" /* yacc.c:1648 */ { 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 5582 "util/configparser.c" /* yacc.c:1646 */ +#line 5583 "util/configparser.c" /* yacc.c:1648 */ break; case 494: -#line 2620 "./util/configparser.y" /* yacc.c:1646 */ +#line 2620 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5590,11 +5591,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5594 "util/configparser.c" /* yacc.c:1646 */ +#line 5595 "util/configparser.c" /* yacc.c:1648 */ break; case 495: -#line 2629 "./util/configparser.y" /* yacc.c:1646 */ +#line 2629 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5602,31 +5603,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5606 "util/configparser.c" /* yacc.c:1646 */ +#line 5607 "util/configparser.c" /* yacc.c:1648 */ break; case 496: -#line 2638 "./util/configparser.y" /* yacc.c:1646 */ +#line 2638 "./util/configparser.y" /* yacc.c:1648 */ { 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 5616 "util/configparser.c" /* yacc.c:1646 */ +#line 5617 "util/configparser.c" /* yacc.c:1648 */ break; case 497: -#line 2645 "./util/configparser.y" /* yacc.c:1646 */ +#line 2645 "./util/configparser.y" /* yacc.c:1648 */ { 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 5626 "util/configparser.c" /* yacc.c:1646 */ +#line 5627 "util/configparser.c" /* yacc.c:1648 */ break; case 498: -#line 2652 "./util/configparser.y" /* yacc.c:1646 */ +#line 2652 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5635,11 +5636,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5639 "util/configparser.c" /* yacc.c:1646 */ +#line 5640 "util/configparser.c" /* yacc.c:1648 */ break; case 499: -#line 2662 "./util/configparser.y" /* yacc.c:1646 */ +#line 2662 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5648,11 +5649,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5652 "util/configparser.c" /* yacc.c:1646 */ +#line 5653 "util/configparser.c" /* yacc.c:1648 */ break; case 500: -#line 2672 "./util/configparser.y" /* yacc.c:1646 */ +#line 2672 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5661,11 +5662,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5665 "util/configparser.c" /* yacc.c:1646 */ +#line 5666 "util/configparser.c" /* yacc.c:1648 */ break; case 501: -#line 2682 "./util/configparser.y" /* yacc.c:1646 */ +#line 2682 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5674,11 +5675,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5678 "util/configparser.c" /* yacc.c:1646 */ +#line 5679 "util/configparser.c" /* yacc.c:1648 */ break; case 502: -#line 2692 "./util/configparser.y" /* yacc.c:1646 */ +#line 2692 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5687,11 +5688,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5691 "util/configparser.c" /* yacc.c:1646 */ +#line 5692 "util/configparser.c" /* yacc.c:1648 */ break; case 503: -#line 2702 "./util/configparser.y" /* yacc.c:1646 */ +#line 2702 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5700,29 +5701,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5704 "util/configparser.c" /* yacc.c:1646 */ +#line 5705 "util/configparser.c" /* yacc.c:1648 */ break; case 504: -#line 2712 "./util/configparser.y" /* yacc.c:1646 */ +#line 2712 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(python:)\n")); } -#line 5712 "util/configparser.c" /* yacc.c:1646 */ +#line 5713 "util/configparser.c" /* yacc.c:1648 */ break; case 508: -#line 2721 "./util/configparser.y" /* yacc.c:1646 */ +#line 2721 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5722 "util/configparser.c" /* yacc.c:1646 */ +#line 5723 "util/configparser.c" /* yacc.c:1648 */ break; case 509: -#line 2727 "./util/configparser.y" /* yacc.c:1646 */ +#line 2727 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5731,21 +5732,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5735 "util/configparser.c" /* yacc.c:1646 */ +#line 5736 "util/configparser.c" /* yacc.c:1648 */ break; case 510: -#line 2737 "./util/configparser.y" /* yacc.c:1646 */ +#line 2737 "./util/configparser.y" /* yacc.c:1648 */ { 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 5745 "util/configparser.c" /* yacc.c:1646 */ +#line 5746 "util/configparser.c" /* yacc.c:1648 */ break; case 511: -#line 2744 "./util/configparser.y" /* yacc.c:1646 */ +#line 2744 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5753,30 +5754,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5757 "util/configparser.c" /* yacc.c:1646 */ +#line 5758 "util/configparser.c" /* yacc.c:1648 */ break; case 512: -#line 2753 "./util/configparser.y" /* yacc.c:1646 */ +#line 2753 "./util/configparser.y" /* yacc.c:1648 */ { 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 5768 "util/configparser.c" /* yacc.c:1646 */ +#line 5769 "util/configparser.c" /* yacc.c:1648 */ break; case 513: -#line 2761 "./util/configparser.y" /* yacc.c:1646 */ +#line 2761 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5776 "util/configparser.c" /* yacc.c:1646 */ +#line 5777 "util/configparser.c" /* yacc.c:1648 */ break; case 526: -#line 2777 "./util/configparser.y" /* yacc.c:1646 */ +#line 2777 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5784,11 +5785,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5788 "util/configparser.c" /* yacc.c:1646 */ +#line 5789 "util/configparser.c" /* yacc.c:1648 */ break; case 527: -#line 2787 "./util/configparser.y" /* yacc.c:1646 */ +#line 2787 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5796,21 +5797,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5800 "util/configparser.c" /* yacc.c:1646 */ +#line 5801 "util/configparser.c" /* yacc.c:1648 */ break; case 528: -#line 2796 "./util/configparser.y" /* yacc.c:1646 */ +#line 2796 "./util/configparser.y" /* yacc.c:1648 */ { 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 5810 "util/configparser.c" /* yacc.c:1646 */ +#line 5811 "util/configparser.c" /* yacc.c:1648 */ break; case 529: -#line 2803 "./util/configparser.y" /* yacc.c:1646 */ +#line 2803 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5818,21 +5819,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 5822 "util/configparser.c" /* yacc.c:1646 */ +#line 5823 "util/configparser.c" /* yacc.c:1648 */ break; case 530: -#line 2812 "./util/configparser.y" /* yacc.c:1646 */ +#line 2812 "./util/configparser.y" /* yacc.c:1648 */ { 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 5832 "util/configparser.c" /* yacc.c:1646 */ +#line 5833 "util/configparser.c" /* yacc.c:1648 */ break; case 531: -#line 2819 "./util/configparser.y" /* yacc.c:1646 */ +#line 2819 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5840,22 +5841,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 5844 "util/configparser.c" /* yacc.c:1646 */ +#line 5845 "util/configparser.c" /* yacc.c:1648 */ break; case 532: -#line 2828 "./util/configparser.y" /* yacc.c:1646 */ +#line 2828 "./util/configparser.y" /* yacc.c:1648 */ { 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 5855 "util/configparser.c" /* yacc.c:1646 */ +#line 5856 "util/configparser.c" /* yacc.c:1648 */ break; case 533: -#line 2836 "./util/configparser.y" /* yacc.c:1646 */ +#line 2836 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5867,22 +5868,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5871 "util/configparser.c" /* yacc.c:1646 */ +#line 5872 "util/configparser.c" /* yacc.c:1648 */ break; case 534: -#line 2849 "./util/configparser.y" /* yacc.c:1646 */ +#line 2849 "./util/configparser.y" /* yacc.c:1648 */ { 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 5882 "util/configparser.c" /* yacc.c:1646 */ +#line 5883 "util/configparser.c" /* yacc.c:1648 */ break; case 535: -#line 2857 "./util/configparser.y" /* yacc.c:1646 */ +#line 2857 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5894,19 +5895,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5898 "util/configparser.c" /* yacc.c:1646 */ +#line 5899 "util/configparser.c" /* yacc.c:1648 */ break; case 536: -#line 2870 "./util/configparser.y" /* yacc.c:1646 */ +#line 2870 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5906 "util/configparser.c" /* yacc.c:1646 */ +#line 5907 "util/configparser.c" /* yacc.c:1648 */ break; case 544: -#line 2880 "./util/configparser.y" /* yacc.c:1646 */ +#line 2880 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5920,11 +5921,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5924 "util/configparser.c" /* yacc.c:1646 */ +#line 5925 "util/configparser.c" /* yacc.c:1648 */ break; case 545: -#line 2895 "./util/configparser.y" /* yacc.c:1646 */ +#line 2895 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5938,11 +5939,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5942 "util/configparser.c" /* yacc.c:1646 */ +#line 5943 "util/configparser.c" /* yacc.c:1648 */ break; case 546: -#line 2910 "./util/configparser.y" /* yacc.c:1646 */ +#line 2910 "./util/configparser.y" /* yacc.c:1648 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5953,11 +5954,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5957 "util/configparser.c" /* yacc.c:1646 */ +#line 5958 "util/configparser.c" /* yacc.c:1648 */ break; case 547: -#line 2922 "./util/configparser.y" /* yacc.c:1646 */ +#line 2922 "./util/configparser.y" /* yacc.c:1648 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5971,11 +5972,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5975 "util/configparser.c" /* yacc.c:1646 */ +#line 5976 "util/configparser.c" /* yacc.c:1648 */ break; case 548: -#line 2937 "./util/configparser.y" /* yacc.c:1646 */ +#line 2937 "./util/configparser.y" /* yacc.c:1648 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5987,11 +5988,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5991 "util/configparser.c" /* yacc.c:1646 */ +#line 5992 "util/configparser.c" /* yacc.c:1648 */ break; case 549: -#line 2950 "./util/configparser.y" /* yacc.c:1646 */ +#line 2950 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6001,11 +6002,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6005 "util/configparser.c" /* yacc.c:1646 */ +#line 6006 "util/configparser.c" /* yacc.c:1648 */ break; -#line 6009 "util/configparser.c" /* yacc.c:1646 */ +#line 6010 "util/configparser.c" /* yacc.c:1648 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6233,7 +6234,7 @@ yyreturn: #endif return yyresult; } -#line 2960 "./util/configparser.y" /* yacc.c:1906 */ +#line 2960 "./util/configparser.y" /* yacc.c:1907 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 0235e6ed2..db6e94714 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.0.5. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -582,11 +582,11 @@ extern int yydebug; union YYSTYPE { -#line 66 "./util/configparser.y" /* yacc.c:1909 */ +#line 66 "./util/configparser.y" /* yacc.c:1910 */ char* str; -#line 590 "util/configparser.h" /* yacc.c:1909 */ +#line 590 "util/configparser.h" /* yacc.c:1910 */ }; typedef union YYSTYPE YYSTYPE; From 5e4f0d65ce414060ef7556a9b12e486b730d6ea3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 25 Jan 2019 16:19:37 +0000 Subject: [PATCH 054/117] Fix year on recent commit messages. git-svn-id: file:///svn/unbound/trunk@5079 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index f115b79f4..63edd4824 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,4 +1,4 @@ -25 January 2018: Wouter +25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and then gets the ssl read again applied to the deleted commpoint. - updated contrib/fastrpz.patch to cleanly diff. @@ -6,7 +6,7 @@ - remove compile warnings from libnettle compile. - output of newer lex 2.6.1 and bison 3.0.5. -24 January 2018: Wouter +24 January 2019: Wouter - Newer aclocal and libtoolize used for generating configure scripts, aclocal 1.16.1 and libtoolize 2.4.6. - Fix unit test for python 3.7 new keyword 'async'. @@ -40,7 +40,7 @@ declaration shadows a local variable in iterator.c - Moved includes and make depend. -23 January 2018: Wouter +23 January 2019: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites options for unbound.conf. - Fixes for the patch, and man page entry. @@ -53,7 +53,7 @@ one as the first one. - Fix for IXFR fallback to reset counter when IXFR does not timeout. -22 January 2018: Wouter +22 January 2019: Wouter - Fix space calculation for tcp req buffer size. - Doc for stream-wait-size and unit test. - unbound-control stats has mem.streamwait that counts TCP and TLS @@ -62,7 +62,7 @@ falls back to AXFR after IXFR gives several timeout failures. - Fix that auth zone after IXFR fallback tries the same master. -21 January 2018: Wouter +21 January 2019: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. - Unit test for tcp request reorder and timeouts. - Unit tests for ssl out of order processing. @@ -71,38 +71,38 @@ memory used by waiting tcp and tls stream replies. This avoids a denial of service where these replies use up all of the memory. -17 January 2018: Wouter +17 January 2019: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout starting a fallback sequence for it. - increase mesh max activation count for capsforid long fetches. -16 January 2018: Ralph +16 January 2019: Ralph - Get ready for the DNS flag day: remove EDNS lame procedure, do not re-query without EDNS after timeout. -15 January 2018: Wouter +15 January 2019: Wouter - In the out of order processing, reset byte count for (potential) partial read. - Review fixes in out of order processing. -14 January 2018: Wouter +14 January 2019: Wouter - streamtcp option -a send queries consecutively and prints answers as they arrive. - Fix for out of order processing administration quit cleanup. - unit test for tcp out of order processing. -11 January 2018: Wouter +11 January 2019: Wouter - Initial commit for out-of-order processing for TCP and TLS. -9 January 2018: Wouter +9 January 2019: Wouter - Log query name for looping module errors. -8 January 2018: Wouter +8 January 2019: Wouter - Fix syntax in comment of local alias processing. - Fix NSEC3 record that is returned in wildcard replies from auth-zone zones with NSEC3 and wildcards. -7 January 2018: Wouter +7 January 2019: Wouter - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, and server tcp fastopen is enabled at compile time. - Document interaction between the tls-upstream option in the server From 3d2dfc476994b93e63be89128cbbbe89146cc50b Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 28 Jan 2019 08:22:08 +0000 Subject: [PATCH 055/117] - ub_ctx_set_tls call for libunbound that enables DoT for the machines set with ub_ctx_set_fwd. Patch from Florian Obser. git-svn-id: file:///svn/unbound/trunk@5080 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ doc/libunbound.3.in | 10 ++++++++++ libunbound/libunbound.c | 13 +++++++++++++ libunbound/ubsyms.def | 1 + libunbound/unbound.h | 11 +++++++++++ 5 files changed, 39 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 63edd4824..2130b4819 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +28 January 2019: Wouter + - ub_ctx_set_tls call for libunbound that enables DoT for the machines + set with ub_ctx_set_fwd. Patch from Florian Obser. + 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and then gets the ssl read again applied to the deleted commpoint. diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index 1f48d9de6..5bd4ad8a1 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -20,6 +20,7 @@ .B ub_ctx_config, .B ub_ctx_set_fwd, .B ub_ctx_set_stub, +.B ub_ctx_set_tls, .B ub_ctx_resolvconf, .B ub_ctx_hosts, .B ub_ctx_add_ta, @@ -72,6 +73,9 @@ \fIint\fR isprime); .LP \fIint\fR +\fBub_ctx_set_tls\fR(\fIstruct ub_ctx*\fR ctx, \fIint\fR tls); +.LP +\fIint\fR \fBub_ctx_resolvconf\fR(\fIstruct ub_ctx*\fR ctx, \fIchar*\fR fname); .LP \fIint\fR @@ -227,6 +231,12 @@ for different zones, or to add multiple addresses for a particular zone. At this time it is only possible to set configuration before the first resolve is done. .TP +.B ub_ctx_set_tls +Enable DNS over TLS (DoT) for machines set with +.B ub_ctx_set_fwd. +At this time it is only possible to set configuration before the +first resolve is done. +.TP .B ub_ctx_resolvconf By default the root servers are queried and full resolver mode is used, but you can use this call to read the list of nameservers to use from the diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c index 0e59364d5..5f5a8a102 100644 --- a/libunbound/libunbound.c +++ b/libunbound/libunbound.c @@ -966,6 +966,19 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr) return UB_NOERROR; } +int ub_ctx_set_tls(struct ub_ctx* ctx, int tls) +{ + lock_basic_lock(&ctx->cfglock); + if(ctx->finalized) { + lock_basic_unlock(&ctx->cfglock); + errno=EINVAL; + return UB_AFTERFINAL; + } + ctx->env->cfg->ssl_upstream = tls; + lock_basic_unlock(&ctx->cfglock); + return UB_NOERROR; +} + int ub_ctx_set_stub(struct ub_ctx* ctx, const char* zone, const char* addr, int isprime) { diff --git a/libunbound/ubsyms.def b/libunbound/ubsyms.def index 0d8e6af91..0ace984fa 100644 --- a/libunbound/ubsyms.def +++ b/libunbound/ubsyms.def @@ -20,6 +20,7 @@ ub_ctx_set_event ub_ctx_set_fwd ub_ctx_set_option ub_ctx_set_stub +ub_ctx_set_tls ub_ctx_trustedkeys ub_ctx_zone_add ub_ctx_zone_remove diff --git a/libunbound/unbound.h b/libunbound/unbound.h index a290e3e6c..682ba5530 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -309,6 +309,17 @@ int ub_ctx_config(struct ub_ctx* ctx, const char* fname); */ int ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr); +/** + * Use DNS over TLS to send queries to machines set with ub_ctx_set_fwd(). + * + * @param ctx: context. + * At this time it is only possible to set configuration before the + * first resolve is done. + * @param tls: enable or disable DNS over TLS + * @return 0 if OK, else error. + */ +int ub_ctx_set_tls(struct ub_ctx* ctx, int tls); + /** * Add a stub zone, with given address to send to. This is for custom * root hints or pointing to a local authoritative dns server. From 71744b8bb2605bd6d9bfbbc4a5f92b1d02499a73 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 28 Jan 2019 08:26:10 +0000 Subject: [PATCH 056/117] - Set build system for added call in the libunbound API. git-svn-id: file:///svn/unbound/trunk@5081 be551aaa-1e26-0410-a405-d3ace91eadb9 --- configure | 8 ++++---- configure.ac | 8 ++++---- doc/Changelog | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 86c582adc..da07ef3ad 100755 --- a/configure +++ b/configure @@ -2786,9 +2786,9 @@ UNBOUND_VERSION_MINOR=8 UNBOUND_VERSION_MICRO=4 -LIBUNBOUND_CURRENT=8 -LIBUNBOUND_REVISION=4 -LIBUNBOUND_AGE=0 +LIBUNBOUND_CURRENT=9 +LIBUNBOUND_REVISION=0 +LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 # 1.0.2 had 0:14:0 @@ -2854,7 +2854,7 @@ LIBUNBOUND_AGE=0 # 1.8.1 had 8:1:0 # 1.8.2 had 8:2:0 # 1.8.3 had 8:3:0 -# 1.8.4 had 8:4:0 +# 1.8.4 had 9:0:1 # add ub_ctx_set_tls # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/configure.ac b/configure.ac index fc84e0cd0..2c3419014 100644 --- a/configure.ac +++ b/configure.ac @@ -17,9 +17,9 @@ AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) -LIBUNBOUND_CURRENT=8 -LIBUNBOUND_REVISION=4 -LIBUNBOUND_AGE=0 +LIBUNBOUND_CURRENT=9 +LIBUNBOUND_REVISION=0 +LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 # 1.0.2 had 0:14:0 @@ -85,7 +85,7 @@ LIBUNBOUND_AGE=0 # 1.8.1 had 8:1:0 # 1.8.2 had 8:2:0 # 1.8.3 had 8:3:0 -# 1.8.4 had 8:4:0 +# 1.8.4 had 9:0:1 # add ub_ctx_set_tls # 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 2130b4819..0f4ce269f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 28 January 2019: Wouter - ub_ctx_set_tls call for libunbound that enables DoT for the machines set with ub_ctx_set_fwd. Patch from Florian Obser. + - Set build system for added call in the libunbound API. 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and From 065c7c5dd8f9fb26ed31ce2e50c88d1f9b86223a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 28 Jan 2019 08:39:50 +0000 Subject: [PATCH 057/117] - List d.root-servers.net as a host that allows AXFR in example.conf config file, as suggested from draft-ietf-dnsop-7706-bis-02. git-svn-id: file:///svn/unbound/trunk@5082 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ doc/example.conf.in | 1 + 2 files changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 0f4ce269f..59a54ebbe 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - ub_ctx_set_tls call for libunbound that enables DoT for the machines set with ub_ctx_set_fwd. Patch from Florian Obser. - Set build system for added call in the libunbound API. + - List d.root-servers.net as a host that allows AXFR in example.conf + config file, as suggested from draft-ietf-dnsop-7706-bis-02. 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and diff --git a/doc/example.conf.in b/doc/example.conf.in index 5603db817..bc6834439 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -911,6 +911,7 @@ remote-control: # fallback-enabled: yes # master: b.root-servers.net # master: c.root-servers.net +# master: d.root-servers.net # master: e.root-servers.net # master: f.root-servers.net # master: g.root-servers.net From 7ad8ffccf5968eac231136bf23c1f61cc33f4b76 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 28 Jan 2019 08:49:12 +0000 Subject: [PATCH 058/117] - List example config for root zone copy locally hosted with auth-zone as suggested from draft-ietf-dnsop-7706-bis-02. But with updated B root address. git-svn-id: file:///svn/unbound/trunk@5083 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 5 +++-- doc/example.conf.in | 27 ++++++++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 59a54ebbe..f7f225385 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,8 +2,9 @@ - ub_ctx_set_tls call for libunbound that enables DoT for the machines set with ub_ctx_set_fwd. Patch from Florian Obser. - Set build system for added call in the libunbound API. - - List d.root-servers.net as a host that allows AXFR in example.conf - config file, as suggested from draft-ietf-dnsop-7706-bis-02. + - List example config for root zone copy locally hosted with auth-zone + as suggested from draft-ietf-dnsop-7706-bis-02. But with updated + B root address. 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and diff --git a/doc/example.conf.in b/doc/example.conf.in index bc6834439..0a55dc861 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -906,16 +906,25 @@ remote-control: # notifies. # auth-zone: # name: "." -# for-downstream: no +# master: 199.9.14.201 # b.root-servers.net +# master: 192.33.4.12 # c.root-servers.net +# master: 199.7.91.13 # d.root-servers.net +# master: 192.5.5.241 # f.root-servers.net +# master: 192.112.36.4 # g.root-servers.net +# master: 193.0.14.129 # k.root-servers.net +# master: 192.0.47.132 # xfr.cjr.dns.icann.org +# master: 192.0.32.132 # xfr.lax.dns.icann.org +# master: 2001:500:200::b # b.root-servers.net +# master: 2001:500:2::c # c.root-servers.net +# master: 2001:500:2d::d # d.root-servers.net +# master: 2001:500:2f::f # f.root-servers.net +# master: 2001:500:12::d0d # g.root-servers.net +# master: 2001:7fd::1 # k.root-servers.net +# master: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org +# master: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org +# fallback-enabled: yes +# for-downstream: no # for-upstream: yes -# fallback-enabled: yes -# master: b.root-servers.net -# master: c.root-servers.net -# master: d.root-servers.net -# master: e.root-servers.net -# master: f.root-servers.net -# master: g.root-servers.net -# master: k.root-servers.net # auth-zone: # name: "example.org" # for-downstream: yes From dfe8e0dfa208b633077cd5602050ed55f1990910 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 29 Jan 2019 08:07:50 +0000 Subject: [PATCH 059/117] - set version to 1.9.0 for release. git-svn-id: file:///svn/unbound/trunk@5084 be551aaa-1e26-0410-a405-d3ace91eadb9 --- configure | 24 ++++++++++++------------ configure.ac | 4 ++-- doc/Changelog | 1 + 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/configure b/configure index da07ef3ad..6d8611192 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.8.4. +# Generated by GNU Autoconf 2.69 for unbound 1.9.0. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.8.4' -PACKAGE_STRING='unbound 1.8.4' +PACKAGE_VERSION='1.9.0' +PACKAGE_STRING='unbound 1.9.0' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1440,7 +1440,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.8.4 to adapt to many kinds of systems. +\`configure' configures unbound 1.9.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1505,7 +1505,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.8.4:";; + short | recursive ) echo "Configuration of unbound 1.9.0:";; esac cat <<\_ACEOF @@ -1722,7 +1722,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.8.4 +unbound configure 1.9.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2431,7 +2431,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.8.4, which was +It was created by unbound $as_me 1.9.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2781,9 +2781,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu UNBOUND_VERSION_MAJOR=1 -UNBOUND_VERSION_MINOR=8 +UNBOUND_VERSION_MINOR=9 -UNBOUND_VERSION_MICRO=4 +UNBOUND_VERSION_MICRO=0 LIBUNBOUND_CURRENT=9 @@ -21148,7 +21148,7 @@ _ACEOF -version=1.8.4 +version=1.9.0 date=`date +'%b %e, %Y'` @@ -21667,7 +21667,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.8.4, which was +This file was extended by unbound $as_me 1.9.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21733,7 +21733,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.8.4 +unbound config.status 1.9.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 2c3419014..e071dc398 100644 --- a/configure.ac +++ b/configure.ac @@ -10,8 +10,8 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) -m4_define([VERSION_MINOR],[8]) -m4_define([VERSION_MICRO],[4]) +m4_define([VERSION_MINOR],[9]) +m4_define([VERSION_MICRO],[0]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) diff --git a/doc/Changelog b/doc/Changelog index f7f225385..5745af214 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -5,6 +5,7 @@ - List example config for root zone copy locally hosted with auth-zone as suggested from draft-ietf-dnsop-7706-bis-02. But with updated B root address. + - set version to 1.9.0 for release. 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and From 7273b352434e52ed8246d03c5f4f5c821a68b7d3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 29 Jan 2019 12:43:56 +0000 Subject: [PATCH 060/117] - Fix spelling of tls-ciphers in example.conf.in. git-svn-id: file:///svn/unbound/trunk@5086 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ doc/example.conf.in | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 5745af214..45ac20fae 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +29 January 2019: Wouter + - Fix spelling of tls-ciphers in example.conf.in. + 28 January 2019: Wouter - ub_ctx_set_tls call for libunbound that enables DoT for the machines set with ub_ctx_set_fwd. Patch from Florian Obser. diff --git a/doc/example.conf.in b/doc/example.conf.in index 0a55dc861..100e98d9b 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -716,7 +716,7 @@ server: # tls-port: 853 # cipher setting for TLSv1.2 - # tls-chiphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" + # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" # 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" From c2e3baa81a89addb600baa595fd86df4a0f28e6f Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 29 Jan 2019 14:37:35 +0000 Subject: [PATCH 061/117] - Fix #4224: auth_xfr_notify.rpl test broken due to typo git-svn-id: file:///svn/unbound/trunk@5087 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + testdata/auth_xfr_notify.rpl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 45ac20fae..7b1dc9ad9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 29 January 2019: Wouter - Fix spelling of tls-ciphers in example.conf.in. + - Fix #4224: auth_xfr_notify.rpl test broken due to typo 28 January 2019: Wouter - ub_ctx_set_tls call for libunbound that enables DoT for the machines diff --git a/testdata/auth_xfr_notify.rpl b/testdata/auth_xfr_notify.rpl index 3603a223f..d7af5ae50 100644 --- a/testdata/auth_xfr_notify.rpl +++ b/testdata/auth_xfr_notify.rpl @@ -195,7 +195,7 @@ ENTRY_END RANGE_END ; lookups for notify hostnames. -STEP 1 TIME_PASSES ELAPSED 0 +STEP 1 TIME_PASSES ELAPSE 0 ; now the query STEP 2 QUERY From 31b677b35f9f3f2789e71329d92b0fc6cbbe23ed Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 29 Jan 2019 16:07:07 +0000 Subject: [PATCH 062/117] - Fix locking for libunbound context setup with broken port config. git-svn-id: file:///svn/unbound/trunk@5088 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + libunbound/libworker.c | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 7b1dc9ad9..1b44f837d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 29 January 2019: Wouter - Fix spelling of tls-ciphers in example.conf.in. - Fix #4224: auth_xfr_notify.rpl test broken due to typo + - Fix locking for libunbound context setup with broken port config. 28 January 2019: Wouter - ub_ctx_set_tls call for libunbound that enables DoT for the machines diff --git a/libunbound/libworker.c b/libunbound/libworker.c index a886f9a88..01621927e 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -222,11 +222,10 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) } numports = cfg_condense_ports(cfg, &ports); if(numports == 0) { - int locked = !w->is_bg || w->is_bg_thread; - libworker_delete(w); - if(locked) { + if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } + libworker_delete(w); return NULL; } w->back = outside_network_create(w->base, cfg->msg_buffer_size, From 723845b3502eb2a87c469cc98c6a171196c6be37 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 30 Jan 2019 13:44:19 +0000 Subject: [PATCH 063/117] - Fix case in which query timeout can result in marking delegation as edns_lame_known. git-svn-id: file:///svn/unbound/trunk@5089 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ services/outside_network.c | 31 +++++++++++-------------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 1b44f837d..70f0f71ab 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +30 January 2019: Ralph + - Fix case in which query timeout can result in marking delegation + as edns_lame_known. + 29 January 2019: Wouter - Fix spelling of tls-ciphers in example.conf.in. - Fix #4224: auth_xfr_notify.rpl test broken due to typo diff --git a/services/outside_network.c b/services/outside_network.c index 8ed5de375..16d63df43 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1964,7 +1964,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, struct serviced_query* sq = (struct serviced_query*)arg; struct outside_network* outnet = sq->outnet; struct timeval now = *sq->outnet->now_tv; - int fallback_tcp = 0; sq->pending = NULL; /* removed after callback */ if(error == NETEVENT_TIMEOUT) { @@ -1996,14 +1995,8 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, } return 0; } - if(rto >= RTT_MAX_TIMEOUT) { - /* fallback_tcp = 1; */ - /* UDP does not work, fallback to TCP below */ - } else { - serviced_callbacks(sq, NETEVENT_TIMEOUT, c, rep); - return 0; - } - } else if(error != NETEVENT_NOERROR) { + } + if(error != NETEVENT_NOERROR) { /* udp returns error (due to no ID or interface available) */ serviced_callbacks(sq, error, c, rep); return 0; @@ -2016,9 +2009,8 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv, c->buffer); #endif - if(!fallback_tcp) { - if( (sq->status == serviced_query_UDP_EDNS - ||sq->status == serviced_query_UDP_EDNS_FRAG) + if( (sq->status == serviced_query_UDP_EDNS + ||sq->status == serviced_query_UDP_EDNS_FRAG) && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_FORMERR || LDNS_RCODE_WIRE( sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOTIMPL @@ -2032,7 +2024,7 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, serviced_callbacks(sq, NETEVENT_CLOSED, c, rep); } return 0; - } else if(sq->status == serviced_query_UDP_EDNS && + } else if(sq->status == serviced_query_UDP_EDNS && !sq->edns_lame_known) { /* now we know that edns queries received answers store that */ log_addr(VERB_ALGO, "serviced query: EDNS works for", @@ -2042,7 +2034,7 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, log_err("Out of memory caching edns works"); } sq->edns_lame_known = 1; - } else if(sq->status == serviced_query_UDP_EDNS_fallback && + } else if(sq->status == serviced_query_UDP_EDNS_fallback && !sq->edns_lame_known && (LDNS_RCODE_WIRE( sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOERROR || LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == @@ -2060,12 +2052,12 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, } } else { log_addr(VERB_ALGO, "serviced query: EDNS fails, but " - "not stored because need DNSSEC for", &sq->addr, + "not stored because need DNSSEC for", &sq->addr, sq->addrlen); } sq->status = serviced_query_UDP; - } - if(now.tv_sec > sq->last_sent_time.tv_sec || + } + if(now.tv_sec > sq->last_sent_time.tv_sec || (now.tv_sec == sq->last_sent_time.tv_sec && now.tv_usec > sq->last_sent_time.tv_usec)) { /* convert from microseconds to milliseconds */ @@ -2081,11 +2073,10 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, sq->last_rtt, (time_t)now.tv_sec)) log_err("out of memory noting rtt."); } - } - } /* end of if_!fallback_tcp */ + } /* perform TC flag check and TCP fallback after updating our * cache entries for EDNS status and RTT times */ - if(LDNS_TC_WIRE(sldns_buffer_begin(c->buffer)) || fallback_tcp) { + if(LDNS_TC_WIRE(sldns_buffer_begin(c->buffer))) { /* fallback to TCP */ /* this discards partial UDP contents */ if(sq->status == serviced_query_UDP_EDNS || From 8fffdca2a61822589f27f0a73ac441766020303a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 09:16:15 +0000 Subject: [PATCH 064/117] - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. git-svn-id: file:///svn/unbound/trunk@5090 be551aaa-1e26-0410-a405-d3ace91eadb9 --- contrib/libunbound.so.conf | 1 + doc/Changelog | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/contrib/libunbound.so.conf b/contrib/libunbound.so.conf index 3b78fca7f..7cf26fee4 100644 --- a/contrib/libunbound.so.conf +++ b/contrib/libunbound.so.conf @@ -14,6 +14,7 @@ int ub_ctx_set_option(ub_ctx*, string, string); int ub_ctx_get_option(ub_ctx*, string, +string*); int ub_ctx_config(ub_ctx*, string); int ub_ctx_set_fwd(ub_ctx*, string); +int ub_ctx_set_tls(ub_ctx*, bool(int)); int ub_ctx_set_stub(ub_ctx*, string, string, bool(int)); int ub_ctx_resolvconf(ub_ctx*, string); int ub_ctx_hosts(ub_ctx*, string); diff --git a/doc/Changelog b/doc/Changelog index 70f0f71ab..ea8bfe8ff 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +31 January 2019: Wouter + - Set ub_ctx_set_tls call signature in ltrace config file for + libunbound in contrib/libunbound.so.conf. + 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation as edns_lame_known. From b9b226bdea816ef07a4c745c16e0283bd811875a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 09:22:48 +0000 Subject: [PATCH 065/117] - improve documentation for tls-service-key. git-svn-id: file:///svn/unbound/trunk@5091 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + doc/unbound.conf.5.in | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index ea8bfe8ff..2c445b08b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 31 January 2019: Wouter - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. + - improve documentation for tls-service-key. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index cbb7b654b..71bc27f6a 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -458,14 +458,15 @@ Alternate syntax for \fBtls\-upstream\fR. If both are present in the config file the last is used. .TP .B tls\-service\-key: \fI -If enabled, the server provides TLS service on its TCP sockets. The clients -have to use tls\-upstream: yes. The file is the private key for the TLS -session. The public certificate is in the tls\-service\-pem file. Default -is "", turned off. Requires a restart (a reload is not enough) if changed, -because the private key is read while root permissions are held and before -chroot (if any). Normal DNS TCP service is not provided and gives errors, -this service is best run with a different \fBport:\fR config or \fI@port\fR -suffixes in the \fBinterface\fR config. +If enabled, the server provides TLS service on the TCP ports marked +implicitly or explicitly for TLS service with tls\-port. The file must +contain the private key for the TLS session, the public certificate is in +the tls\-service\-pem file and it must also be specified if tls\-service\-key +is specified. The default is "", turned off. Enabling or disabling +this service requires a restart (a reload is not enough), because the +key is read while root permissions are held and before chroot (if any). +The ports enabled implicitly or explicitly via \fBtls\-port:\fR do not provide +normal DNS TCP service. .TP .B ssl\-service\-key: \fI Alternate syntax for \fBtls\-service\-key\fR. From 91f585ed387d2d25349331ab2d4c2d3370e2e0a6 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 09:37:06 +0000 Subject: [PATCH 066/117] - improve documentation for forward-first. git-svn-id: file:///svn/unbound/trunk@5092 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 +- doc/unbound.conf.5.in | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 2c445b08b..d67fbbf55 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,7 +1,7 @@ 31 January 2019: Wouter - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. - - improve documentation for tls-service-key. + - improve documentation for tls-service-key and forward-first. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 71bc27f6a..9bfd729c1 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1618,10 +1618,9 @@ name is accepted. The cert must also match a CA from the tls\-cert\-bundle. The cert name match code needs OpenSSL 1.1.0 or later to be enabled. .TP .B forward\-first: \fI -If enabled, a query is attempted without the forward clause if it fails. -The data could not be retrieved and would have caused SERVFAIL because -the servers are unreachable, instead it is tried without this clause. -The default is no. +If a forwarded query is met with a SERVFAIL error, and this option is +enabled, unbound will fall back to normal recursive resolution for this +query as if no query forwarding had been specified. The default is "no". .TP .B forward\-tls\-upstream: \fI Enabled or disable whether the queries to this forwarder use TLS for transport. From 273ff1201b68b72f064a159cf0ca015918df49a5 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 10:21:54 +0000 Subject: [PATCH 067/117] - fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of conditional section, fixes systemd builds, from Enrico Scholz. git-svn-id: file:///svn/unbound/trunk@5093 be551aaa-1e26-0410-a405-d3ace91eadb9 --- configure | 257 +++++++++++++++++++++++++------------------------- configure.ac | 3 +- doc/Changelog | 2 + 3 files changed, 133 insertions(+), 129 deletions(-) diff --git a/configure b/configure index 6d8611192..113d3844d 100755 --- a/configure +++ b/configure @@ -694,9 +694,6 @@ swig SWIG_LIB SWIG PC_PY_DEPENDENCY -PKG_CONFIG_LIBDIR -PKG_CONFIG_PATH -PKG_CONFIG PY_MAJOR_VERSION PYTHON_SITE_PKG PYTHON_LDFLAGS @@ -710,6 +707,9 @@ PTHREAD_CC ax_pthread_config RUNTIME_PATH LIBOBJS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -892,10 +892,10 @@ CPP YACC YFLAGS LT_SYS_LIBRARY_PATH -PYTHON_VERSION PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR +PYTHON_VERSION SYSTEMD_CFLAGS SYSTEMD_LIBS SYSTEMD_DAEMON_CFLAGS @@ -1638,15 +1638,15 @@ Some influential environment variables: default value of `-d' given by some make applications. LT_SYS_LIBRARY_PATH User-defined run-time library search path. - PYTHON_VERSION - The installed Python version to use, for example '2.3'. This - string will be appended to the Python interpreter canonical - name. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path + PYTHON_VERSION + The installed Python version to use, for example '2.3'. This + string will be appended to the Python interpreter canonical + name. SYSTEMD_CFLAGS C compiler flags for SYSTEMD, overriding pkg-config SYSTEMD_LIBS @@ -14558,6 +14558,127 @@ CC=$lt_save_CC + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + # Checks for header files. for ac_header in 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 do : @@ -17015,126 +17136,6 @@ $as_echo "#define HAVE_PYTHON 1" >>confdefs.h CPPFLAGS="$PYTHON_CPPFLAGS" fi ub_have_python=yes - - - - - - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi -fi if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"python\${PY_MAJOR_VERSION}\"\""; } >&5 ($PKG_CONFIG --exists --print-errors ""python${PY_MAJOR_VERSION}"") 2>&5 diff --git a/configure.ac b/configure.ac index e071dc398..afe0c39c5 100644 --- a/configure.ac +++ b/configure.ac @@ -382,6 +382,8 @@ AC_CHECK_PROG(doxygen, doxygen, doxygen) AC_CHECK_TOOL(STRIP, strip) ACX_LIBTOOL_C_ONLY +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]) @@ -641,7 +643,6 @@ if test x_$ub_test_python != x_no; then CPPFLAGS="$PYTHON_CPPFLAGS" fi ub_have_python=yes - PKG_PROG_PKG_CONFIG PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"], [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"], [PC_PY_DEPENDENCY="python"]) diff --git a/doc/Changelog b/doc/Changelog index d67fbbf55..2229877e8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. - improve documentation for tls-service-key and forward-first. + - fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of + conditional section, fixes systemd builds, from Enrico Scholz. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation From df8f236b62c7ac837e27c6824f13656a441d8860 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 11:31:55 +0000 Subject: [PATCH 068/117] - For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks, still supports the set_id_callback previous API. And for 1.1.0 no locking callbacks are needed. git-svn-id: file:///svn/unbound/trunk@5094 be551aaa-1e26-0410-a405-d3ace91eadb9 --- config.h.in | 3 +++ configure | 2 +- configure.ac | 2 +- doc/Changelog | 3 +++ util/net_help.c | 16 ++++++++++++++++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/config.h.in b/config.h.in index 545536d63..f0eb7d6aa 100644 --- a/config.h.in +++ b/config.h.in @@ -69,6 +69,9 @@ /* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */ #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA +/* Define to 1 if you have the `CRYPTO_THREADID_set_callback' function. */ +#undef HAVE_CRYPTO_THREADID_SET_CALLBACK + /* Define to 1 if you have the `ctime_r' function. */ #undef HAVE_CTIME_R diff --git a/configure b/configure index 113d3844d..61fb928c1 100755 --- a/configure +++ b/configure @@ -17994,7 +17994,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 +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 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/configure.ac b/configure.ac index afe0c39c5..938f2cf1d 100644 --- a/configure.ac +++ b/configure.ac @@ -782,7 +782,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]) +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]) # these check_funcs need -lssl BAKLIBS="$LIBS" diff --git a/doc/Changelog b/doc/Changelog index 2229877e8..c28d4ee0f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,9 @@ - improve documentation for tls-service-key and forward-first. - fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of conditional section, fixes systemd builds, from Enrico Scholz. + - For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks, + still supports the set_id_callback previous API. And for 1.1.0 + no locking callbacks are needed. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation diff --git a/util/net_help.c b/util/net_help.c index 1a4fa8a58..1f62148dd 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1049,11 +1049,19 @@ void* outgoing_ssl_fd(void* sslctx, int fd) static lock_basic_type *ub_openssl_locks = NULL; /** callback that gets thread id for openssl */ +#ifdef HAVE_CRYPTO_THREADID_SET_CALLBACK +static void +ub_crypto_id_cb(CRYPTO_THREADID *id) +{ + CRYPTO_THREADID_set_numeric(id, (unsigned long)log_thread_get()); +} +#else static unsigned long ub_crypto_id_cb(void) { return (unsigned long)log_thread_get(); } +#endif static void ub_crypto_lock_cb(int mode, int type, const char *ATTR_UNUSED(file), @@ -1078,7 +1086,11 @@ int ub_openssl_lock_init(void) for(i=0; i Date: Thu, 31 Jan 2019 11:34:11 +0000 Subject: [PATCH 069/117] - Fix OpenSSL without ENGINE support compilation. git-svn-id: file:///svn/unbound/trunk@5095 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/daemon.c | 2 +- doc/Changelog | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index e14edb99d..e95c17bba 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -770,7 +770,7 @@ daemon_delete(struct daemon* daemon) # endif # ifdef HAVE_OPENSSL_CONFIG EVP_cleanup(); -# if OPENSSL_VERSION_NUMBER < 0x10100000 +# if (OPENSSL_VERSION_NUMBER < 0x10100000) || !defined(OPENSSL_NO_ENGINE) ENGINE_cleanup(); # endif CONF_modules_free(); diff --git a/doc/Changelog b/doc/Changelog index c28d4ee0f..8022f0f4f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,7 @@ - For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks, still supports the set_id_callback previous API. And for 1.1.0 no locking callbacks are needed. + - Fix OpenSSL without ENGINE support compilation. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation From b34a6defc11224202b15c0de611d8be4290ae631 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 12:33:28 +0000 Subject: [PATCH 070/117] - Fix OpenSSL without ENGINE support compilation. git-svn-id: file:///svn/unbound/trunk@5096 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/daemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index e95c17bba..7461a26e2 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -770,7 +770,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) ENGINE_cleanup(); # endif CONF_modules_free(); From 8992e8c91f907556959f647ab4230b656ab3ea05 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 12:35:33 +0000 Subject: [PATCH 071/117] note ticker number. git-svn-id: file:///svn/unbound/trunk@5097 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 8022f0f4f..0608fb236 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,12 +2,12 @@ - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. - improve documentation for tls-service-key and forward-first. - - fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of + - #10: fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of conditional section, fixes systemd builds, from Enrico Scholz. - - For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks, + - #9: For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks, still supports the set_id_callback previous API. And for 1.1.0 no locking callbacks are needed. - - Fix OpenSSL without ENGINE support compilation. + - #8: Fix OpenSSL without ENGINE support compilation. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation From 281030d5768b962b4c319a6378bb62e645a13f63 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 31 Jan 2019 15:25:27 +0000 Subject: [PATCH 072/117] - Wipe TLS session key data from memory on exit. git-svn-id: file:///svn/unbound/trunk@5098 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + util/net_help.c | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 0608fb236..e4938533f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -8,6 +8,7 @@ still supports the set_id_callback previous API. And for 1.1.0 no locking callbacks are needed. - #8: Fix OpenSSL without ENGINE support compilation. + - Wipe TLS session key data from memory on exit. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation diff --git a/util/net_help.c b/util/net_help.c index 1f62148dd..2b1be9246 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1235,6 +1235,7 @@ listen_sslctx_delete_ticket_keys(void) struct tls_session_ticket_key *key; if(!ticket_keys) return; for(key = ticket_keys; key->key_name != NULL; key++) { + memset(key->key_name, 0xdd, 80); /* wipe key data from memory*/ free(key->key_name); } free(ticket_keys); From fe97f25b75a38cf478ea575350bc5017301afe58 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 4 Feb 2019 09:51:27 +0000 Subject: [PATCH 073/117] - Fix that log-replies prints the correct name for local-alias names, for names that have a CNAME in local-data configuration. It logs the original query name, not the target of the CNAME. - Add local-zone type inform_redirect, which logs like type inform, and redirects like type redirect. git-svn-id: file:///svn/unbound/trunk@5099 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/worker.c | 13 +- doc/Changelog | 7 + doc/example.conf.in | 1 + doc/unbound.conf.5.in | 6 +- respip/respip.c | 8 +- services/localzone.c | 26 ++- services/localzone.h | 4 + util/configparser.c | 494 +++++++++++++++++++++--------------------- util/configparser.y | 8 +- 9 files changed, 306 insertions(+), 261 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index c9504dd20..886107b94 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1559,8 +1559,17 @@ send_reply_rc: if(worker->env.cfg->log_replies) { struct timeval tv = {0, 0}; - log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen, - tv, 1, c->buffer); + if(qinfo.local_alias && qinfo.local_alias->rrset && + qinfo.local_alias->rrset->rk.dname) { + /* log original qname, before the local alias was + * used to resolve that CNAME to something else */ + qinfo.qname = qinfo.local_alias->rrset->rk.dname; + log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen, + tv, 1, c->buffer); + } else { + log_reply_info(0, &qinfo, &repinfo->addr, repinfo->addrlen, + tv, 1, c->buffer); + } } #ifdef USE_DNSCRYPT if(!dnsc_handle_uncurved_request(repinfo)) { diff --git a/doc/Changelog b/doc/Changelog index e4938533f..b746e9979 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,10 @@ +4 February 2019: Wouter + - Fix that log-replies prints the correct name for local-alias + names, for names that have a CNAME in local-data configuration. + It logs the original query name, not the target of the CNAME. + - Add local-zone type inform_redirect, which logs like type inform, + and redirects like type redirect. + 31 January 2019: Wouter - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. diff --git a/doc/example.conf.in b/doc/example.conf.in index 100e98d9b..1c7165a2d 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -673,6 +673,7 @@ server: # o typetransparent resolves normally for other types and other names # o inform acts like transparent, but logs client IP address # o inform_deny drops queries and logs client IP address + # o inform_redirect redirects queries and logs client IP address # o always_transparent, always_refuse, always_nxdomain, resolve in # that way but ignore local data for that name # o noview breaks out of that view towards global local-zones. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 9bfd729c1..88340b4a1 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1141,7 +1141,7 @@ address space are not validated. This is usually required whenever Configure a local zone. The type determines the answer to give if there is no match from local\-data. The types are deny, refuse, static, transparent, redirect, nodefault, typetransparent, inform, inform_deny, -always_transparent, always_refuse, always_nxdomain, noview, +inform_redirect, always_transparent, always_refuse, always_nxdomain, noview, and are explained below. After that the default settings are listed. Use local\-data: to enter data into the local zone. Answers for local zones are authoritative DNS answers. By default the zones are class IN. @@ -1202,6 +1202,10 @@ looking up infected names are logged, eg. to run antivirus on them. The query is dropped, like 'deny', and logged, like 'inform'. Ie. find infected machines without answering the queries. .TP 10 +\h'5'\fIinform_redirect\fR +The query is redirected, like 'redirect', and logged, like 'inform'. +Ie. answer queries with fixed data and also log the machines that ask. +.TP 10 \h'5'\fIalways_transparent\fR Like transparent, but ignores local data and resolves normally. .TP 10 diff --git a/respip/respip.c b/respip/respip.c index bcb31f892..d61877b55 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -183,6 +183,8 @@ respip_action_cfg(struct respip_set* set, const char* ipstr, action = respip_inform; else if(strcmp(actnstr, "inform_deny") == 0) action = respip_inform_deny; + else if(strcmp(actnstr, "inform_redirect") == 0) + action = respip_inform_redirect; else if(strcmp(actnstr, "always_transparent") == 0) action = respip_always_transparent; else if(strcmp(actnstr, "always_refuse") == 0) @@ -245,7 +247,8 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr, struct packed_rrset_data* pd; struct sockaddr* sa; int ret; - if(raddr->action != respip_redirect) { + if(raddr->action != respip_redirect + && raddr->action != respip_inform_redirect) { log_err("cannot parse response-ip-data %s: response-ip " "action for %s is not redirect", rrstr, netblock); return 0; @@ -750,7 +753,8 @@ respip_nodata_answer(uint16_t qtype, enum respip_action action, *new_repp = new_rep; return 1; } else if(action == respip_static || action == respip_redirect || - action == respip_always_nxdomain) { + action == respip_always_nxdomain || + action == respip_inform_redirect) { /* Since we don't know about other types of the owner name, * we generally return NOERROR/NODATA unless an NXDOMAIN action * is explicitly specified. */ diff --git a/services/localzone.c b/services/localzone.c index 902a29f21..6295b17e2 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -464,7 +464,8 @@ lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) return 0; } log_assert(z->dclass == rrclass); - if(z->type == local_zone_redirect && + if((z->type == local_zone_redirect || + z->type == local_zone_inform_redirect) && query_dname_compare(z->name, nm) != 0) { log_err("local-data in redirect zone must reside at top of zone" ", not at %s", rrstr); @@ -481,7 +482,8 @@ lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) /* Reject it if we would end up having CNAME and other data (including * another CNAME) for a redirect zone. */ - if(z->type == local_zone_redirect && node->rrsets) { + if((z->type == local_zone_redirect || + z->type == local_zone_inform_redirect) && node->rrsets) { const char* othertype = NULL; if (rrtype == LDNS_RR_TYPE_CNAME) othertype = "other"; @@ -1323,7 +1325,8 @@ local_data_answer(struct local_zone* z, struct module_env* env, key.name = qinfo->qname; key.namelen = qinfo->qname_len; key.namelabs = labs; - if(lz_type == local_zone_redirect) { + if(lz_type == local_zone_redirect || + lz_type == local_zone_inform_redirect) { key.name = z->name; key.namelen = z->namelen; key.namelabs = z->namelabs; @@ -1355,7 +1358,8 @@ local_data_answer(struct local_zone* z, struct module_env* env, return 0; /* Special case for alias matching. See local_data_answer(). */ - if(lz_type == local_zone_redirect && + if((lz_type == local_zone_redirect || + lz_type == local_zone_inform_redirect) && qinfo->qtype != LDNS_RR_TYPE_CNAME && lr->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) { qinfo->local_alias = @@ -1370,7 +1374,8 @@ local_data_answer(struct local_zone* z, struct module_env* env, qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; return 1; } - if(lz_type == local_zone_redirect) { + if(lz_type == local_zone_redirect || + lz_type == local_zone_inform_redirect) { /* convert rrset name to query name; like a wildcard */ struct ub_packed_rrset_key r = *lr->rrset; r.rk.dname = qinfo->qname; @@ -1442,6 +1447,7 @@ lz_zone_answer(struct local_zone* z, struct module_env* env, return 1; } else if(lz_type == local_zone_static || lz_type == local_zone_redirect || + lz_type == local_zone_inform_redirect || lz_type == local_zone_always_nxdomain) { /* for static, reply nodata or nxdomain * for redirect, reply nodata */ @@ -1450,7 +1456,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env, * or using closest match for NSEC. * or using closest match for returning delegation downwards */ - int rcode = (ld || lz_type == local_zone_redirect)? + int rcode = (ld || lz_type == local_zone_redirect || + lz_type == local_zone_inform_redirect)? LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN; if(z->soa) return local_encode(qinfo, env, edns, repinfo, buf, temp, @@ -1624,7 +1631,9 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, } } if((env->cfg->log_local_actions || - lzt == local_zone_inform || lzt == local_zone_inform_deny) + lzt == local_zone_inform || + lzt == local_zone_inform_deny || + lzt == local_zone_inform_redirect) && repinfo) lz_inform_print(z, qinfo, repinfo); @@ -1656,6 +1665,7 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_nodefault: return "nodefault"; case local_zone_inform: return "inform"; case local_zone_inform_deny: return "inform_deny"; + case local_zone_inform_redirect: return "inform_redirect"; case local_zone_always_transparent: return "always_transparent"; case local_zone_always_refuse: return "always_refuse"; case local_zone_always_nxdomain: return "always_nxdomain"; @@ -1682,6 +1692,8 @@ int local_zone_str2type(const char* type, enum localzone_type* t) *t = local_zone_inform; else if(strcmp(type, "inform_deny") == 0) *t = local_zone_inform_deny; + else if(strcmp(type, "inform_redirect") == 0) + *t = local_zone_inform_redirect; else if(strcmp(type, "always_transparent") == 0) *t = local_zone_always_transparent; else if(strcmp(type, "always_refuse") == 0) diff --git a/services/localzone.h b/services/localzone.h index dd7aa584c..1d6caeff2 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -83,6 +83,8 @@ enum localzone_type { local_zone_inform, /** log client address, and block (drop) */ local_zone_inform_deny, + /** log client address, and direct */ + local_zone_inform_redirect, /** resolve normally, even when there is local data */ local_zone_always_transparent, /** answer with error, even when there is local data */ @@ -491,6 +493,8 @@ enum respip_action { respip_inform = local_zone_inform, /** log query source and don't answer query */ respip_inform_deny = local_zone_inform_deny, + /** log query source and redirect */ + respip_inform_redirect = local_zone_inform_redirect, /** resolve normally, even when there is response-ip data */ respip_always_transparent = local_zone_always_transparent, /** answer with 'refused' response */ diff --git a/util/configparser.c b/util/configparser.c index 9674aa283..9253702bc 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1047,22 +1047,22 @@ static const yytype_uint16 yyrline[] = 1459, 1468, 1477, 1484, 1494, 1514, 1521, 1539, 1552, 1565, 1574, 1583, 1592, 1601, 1611, 1621, 1632, 1641, 1650, 1659, 1668, 1681, 1694, 1703, 1710, 1719, 1728, 1737, 1746, 1754, - 1767, 1775, 1806, 1813, 1828, 1838, 1848, 1855, 1862, 1869, - 1878, 1886, 1900, 1921, 1942, 1954, 1966, 1978, 1987, 2008, - 2018, 2027, 2035, 2043, 2056, 2069, 2084, 2099, 2108, 2117, - 2123, 2132, 2141, 2151, 2161, 2174, 2187, 2199, 2213, 2225, - 2239, 2249, 2256, 2263, 2272, 2281, 2291, 2301, 2311, 2318, - 2325, 2334, 2343, 2353, 2363, 2370, 2377, 2384, 2392, 2402, - 2412, 2422, 2432, 2464, 2474, 2482, 2490, 2505, 2514, 2519, - 2520, 2521, 2521, 2521, 2522, 2522, 2522, 2523, 2523, 2525, - 2535, 2544, 2551, 2558, 2565, 2572, 2579, 2586, 2591, 2592, - 2593, 2593, 2594, 2594, 2595, 2595, 2596, 2597, 2598, 2599, - 2600, 2601, 2603, 2612, 2619, 2628, 2637, 2644, 2651, 2661, - 2671, 2681, 2691, 2701, 2711, 2716, 2717, 2718, 2720, 2726, - 2736, 2743, 2752, 2760, 2765, 2766, 2768, 2768, 2768, 2769, - 2769, 2770, 2771, 2772, 2773, 2774, 2776, 2786, 2795, 2802, - 2811, 2818, 2827, 2835, 2848, 2856, 2869, 2874, 2875, 2876, - 2876, 2877, 2877, 2877, 2879, 2894, 2909, 2921, 2936, 2949 + 1767, 1775, 1808, 1815, 1830, 1840, 1850, 1857, 1864, 1871, + 1880, 1888, 1902, 1923, 1944, 1956, 1968, 1980, 1989, 2010, + 2020, 2029, 2037, 2045, 2058, 2071, 2086, 2101, 2110, 2119, + 2125, 2134, 2143, 2153, 2163, 2176, 2189, 2201, 2215, 2227, + 2241, 2251, 2258, 2265, 2274, 2283, 2293, 2303, 2313, 2320, + 2327, 2336, 2345, 2355, 2365, 2372, 2379, 2386, 2394, 2404, + 2414, 2424, 2434, 2466, 2476, 2484, 2492, 2507, 2516, 2521, + 2522, 2523, 2523, 2523, 2524, 2524, 2524, 2525, 2525, 2527, + 2537, 2546, 2553, 2560, 2567, 2574, 2581, 2588, 2593, 2594, + 2595, 2595, 2596, 2596, 2597, 2597, 2598, 2599, 2600, 2601, + 2602, 2603, 2605, 2614, 2621, 2630, 2639, 2646, 2653, 2663, + 2673, 2683, 2693, 2703, 2713, 2718, 2719, 2720, 2722, 2728, + 2738, 2745, 2754, 2762, 2767, 2768, 2770, 2770, 2770, 2771, + 2771, 2772, 2773, 2774, 2775, 2776, 2778, 2788, 2797, 2804, + 2813, 2820, 2829, 2837, 2850, 2858, 2871, 2876, 2877, 2878, + 2878, 2879, 2879, 2879, 2881, 2896, 2911, 2923, 2938, 2951 }; #endif @@ -4532,12 +4532,14 @@ yyreduce: && 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")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0 + && strcmp((yyvsp[0].str), "inform_redirect") != 0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " - "always_transparent, always_refuse, " - "always_nxdomain, noview or nodefault"); + "inform_redirect, 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) { @@ -4551,21 +4553,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4555 "util/configparser.c" /* yacc.c:1648 */ +#line 4557 "util/configparser.c" /* yacc.c:1648 */ break; case 392: -#line 1807 "./util/configparser.y" /* yacc.c:1648 */ +#line 1809 "./util/configparser.y" /* yacc.c:1648 */ { 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 4565 "util/configparser.c" /* yacc.c:1648 */ +#line 4567 "util/configparser.c" /* yacc.c:1648 */ break; case 393: -#line 1814 "./util/configparser.y" /* yacc.c:1648 */ +#line 1816 "./util/configparser.y" /* yacc.c:1648 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4579,11 +4581,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4583 "util/configparser.c" /* yacc.c:1648 */ +#line 4585 "util/configparser.c" /* yacc.c:1648 */ break; case 394: -#line 1829 "./util/configparser.y" /* yacc.c:1648 */ +#line 1831 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4592,11 +4594,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4596 "util/configparser.c" /* yacc.c:1648 */ +#line 4598 "util/configparser.c" /* yacc.c:1648 */ break; case 395: -#line 1839 "./util/configparser.y" /* yacc.c:1648 */ +#line 1841 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4605,41 +4607,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4609 "util/configparser.c" /* yacc.c:1648 */ +#line 4611 "util/configparser.c" /* yacc.c:1648 */ break; case 396: -#line 1849 "./util/configparser.y" /* yacc.c:1648 */ +#line 1851 "./util/configparser.y" /* yacc.c:1648 */ { 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 4619 "util/configparser.c" /* yacc.c:1648 */ +#line 4621 "util/configparser.c" /* yacc.c:1648 */ break; case 397: -#line 1856 "./util/configparser.y" /* yacc.c:1648 */ +#line 1858 "./util/configparser.y" /* yacc.c:1648 */ { 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 4629 "util/configparser.c" /* yacc.c:1648 */ +#line 4631 "util/configparser.c" /* yacc.c:1648 */ break; case 398: -#line 1863 "./util/configparser.y" /* yacc.c:1648 */ +#line 1865 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4639 "util/configparser.c" /* yacc.c:1648 */ +#line 4641 "util/configparser.c" /* yacc.c:1648 */ break; case 399: -#line 1870 "./util/configparser.y" /* yacc.c:1648 */ +#line 1872 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4647,22 +4649,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4651 "util/configparser.c" /* yacc.c:1648 */ +#line 4653 "util/configparser.c" /* yacc.c:1648 */ break; case 400: -#line 1879 "./util/configparser.y" /* yacc.c:1648 */ +#line 1881 "./util/configparser.y" /* yacc.c:1648 */ { 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 4662 "util/configparser.c" /* yacc.c:1648 */ +#line 4664 "util/configparser.c" /* yacc.c:1648 */ break; case 401: -#line 1887 "./util/configparser.y" /* yacc.c:1648 */ +#line 1889 "./util/configparser.y" /* yacc.c:1648 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4675,11 +4677,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4679 "util/configparser.c" /* yacc.c:1648 */ +#line 4681 "util/configparser.c" /* yacc.c:1648 */ break; case 402: -#line 1901 "./util/configparser.y" /* yacc.c:1648 */ +#line 1903 "./util/configparser.y" /* yacc.c:1648 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4699,11 +4701,11 @@ yyreduce: } } } -#line 4703 "util/configparser.c" /* yacc.c:1648 */ +#line 4705 "util/configparser.c" /* yacc.c:1648 */ break; case 403: -#line 1922 "./util/configparser.y" /* yacc.c:1648 */ +#line 1924 "./util/configparser.y" /* yacc.c:1648 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4723,11 +4725,11 @@ yyreduce: } } } -#line 4727 "util/configparser.c" /* yacc.c:1648 */ +#line 4729 "util/configparser.c" /* yacc.c:1648 */ break; case 404: -#line 1943 "./util/configparser.y" /* yacc.c:1648 */ +#line 1945 "./util/configparser.y" /* yacc.c:1648 */ { 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, @@ -4738,11 +4740,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4742 "util/configparser.c" /* yacc.c:1648 */ +#line 4744 "util/configparser.c" /* yacc.c:1648 */ break; case 405: -#line 1955 "./util/configparser.y" /* yacc.c:1648 */ +#line 1957 "./util/configparser.y" /* yacc.c:1648 */ { 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, @@ -4753,11 +4755,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4757 "util/configparser.c" /* yacc.c:1648 */ +#line 4759 "util/configparser.c" /* yacc.c:1648 */ break; case 406: -#line 1967 "./util/configparser.y" /* yacc.c:1648 */ +#line 1969 "./util/configparser.y" /* yacc.c:1648 */ { 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, @@ -4768,11 +4770,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4772 "util/configparser.c" /* yacc.c:1648 */ +#line 4774 "util/configparser.c" /* yacc.c:1648 */ break; case 407: -#line 1979 "./util/configparser.y" /* yacc.c:1648 */ +#line 1981 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4780,11 +4782,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4784 "util/configparser.c" /* yacc.c:1648 */ +#line 4786 "util/configparser.c" /* yacc.c:1648 */ break; case 408: -#line 1988 "./util/configparser.y" /* yacc.c:1648 */ +#line 1990 "./util/configparser.y" /* yacc.c:1648 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4804,11 +4806,11 @@ yyreduce: } } } -#line 4808 "util/configparser.c" /* yacc.c:1648 */ +#line 4810 "util/configparser.c" /* yacc.c:1648 */ break; case 409: -#line 2009 "./util/configparser.y" /* yacc.c:1648 */ +#line 2011 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4816,11 +4818,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4820 "util/configparser.c" /* yacc.c:1648 */ +#line 4822 "util/configparser.c" /* yacc.c:1648 */ break; case 410: -#line 2019 "./util/configparser.y" /* yacc.c:1648 */ +#line 2021 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4828,33 +4830,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4832 "util/configparser.c" /* yacc.c:1648 */ +#line 4834 "util/configparser.c" /* yacc.c:1648 */ break; case 411: -#line 2028 "./util/configparser.y" /* yacc.c:1648 */ +#line 2030 "./util/configparser.y" /* yacc.c:1648 */ { 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 4843 "util/configparser.c" /* yacc.c:1648 */ +#line 4845 "util/configparser.c" /* yacc.c:1648 */ break; case 412: -#line 2036 "./util/configparser.y" /* yacc.c:1648 */ +#line 2038 "./util/configparser.y" /* yacc.c:1648 */ { 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 4854 "util/configparser.c" /* yacc.c:1648 */ +#line 4856 "util/configparser.c" /* yacc.c:1648 */ break; case 413: -#line 2044 "./util/configparser.y" /* yacc.c:1648 */ +#line 2046 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4866,11 +4868,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4870 "util/configparser.c" /* yacc.c:1648 */ +#line 4872 "util/configparser.c" /* yacc.c:1648 */ break; case 414: -#line 2057 "./util/configparser.y" /* yacc.c:1648 */ +#line 2059 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4882,11 +4884,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4886 "util/configparser.c" /* yacc.c:1648 */ +#line 4888 "util/configparser.c" /* yacc.c:1648 */ break; case 415: -#line 2070 "./util/configparser.y" /* yacc.c:1648 */ +#line 2072 "./util/configparser.y" /* yacc.c:1648 */ { 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) { @@ -4900,11 +4902,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4904 "util/configparser.c" /* yacc.c:1648 */ +#line 4906 "util/configparser.c" /* yacc.c:1648 */ break; case 416: -#line 2085 "./util/configparser.y" /* yacc.c:1648 */ +#line 2087 "./util/configparser.y" /* yacc.c:1648 */ { 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) { @@ -4918,11 +4920,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4922 "util/configparser.c" /* yacc.c:1648 */ +#line 4924 "util/configparser.c" /* yacc.c:1648 */ break; case 417: -#line 2100 "./util/configparser.y" /* yacc.c:1648 */ +#line 2102 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4930,11 +4932,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4934 "util/configparser.c" /* yacc.c:1648 */ +#line 4936 "util/configparser.c" /* yacc.c:1648 */ break; case 418: -#line 2109 "./util/configparser.y" /* yacc.c:1648 */ +#line 2111 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4942,20 +4944,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4946 "util/configparser.c" /* yacc.c:1648 */ +#line 4948 "util/configparser.c" /* yacc.c:1648 */ break; case 419: -#line 2118 "./util/configparser.y" /* yacc.c:1648 */ +#line 2120 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4955 "util/configparser.c" /* yacc.c:1648 */ +#line 4957 "util/configparser.c" /* yacc.c:1648 */ break; case 420: -#line 2124 "./util/configparser.y" /* yacc.c:1648 */ +#line 2126 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4963,11 +4965,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4967 "util/configparser.c" /* yacc.c:1648 */ +#line 4969 "util/configparser.c" /* yacc.c:1648 */ break; case 421: -#line 2133 "./util/configparser.y" /* yacc.c:1648 */ +#line 2135 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4975,11 +4977,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4979 "util/configparser.c" /* yacc.c:1648 */ +#line 4981 "util/configparser.c" /* yacc.c:1648 */ break; case 422: -#line 2142 "./util/configparser.y" /* yacc.c:1648 */ +#line 2144 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4988,11 +4990,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4992 "util/configparser.c" /* yacc.c:1648 */ +#line 4994 "util/configparser.c" /* yacc.c:1648 */ break; case 423: -#line 2152 "./util/configparser.y" /* yacc.c:1648 */ +#line 2154 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5001,11 +5003,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5005 "util/configparser.c" /* yacc.c:1648 */ +#line 5007 "util/configparser.c" /* yacc.c:1648 */ break; case 424: -#line 2162 "./util/configparser.y" /* yacc.c:1648 */ +#line 2164 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5017,11 +5019,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5021 "util/configparser.c" /* yacc.c:1648 */ +#line 5023 "util/configparser.c" /* yacc.c:1648 */ break; case 425: -#line 2175 "./util/configparser.y" /* yacc.c:1648 */ +#line 2177 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5033,11 +5035,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5037 "util/configparser.c" /* yacc.c:1648 */ +#line 5039 "util/configparser.c" /* yacc.c:1648 */ break; case 426: -#line 2188 "./util/configparser.y" /* yacc.c:1648 */ +#line 2190 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5048,11 +5050,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5052 "util/configparser.c" /* yacc.c:1648 */ +#line 5054 "util/configparser.c" /* yacc.c:1648 */ break; case 427: -#line 2200 "./util/configparser.y" /* yacc.c:1648 */ +#line 2202 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5065,11 +5067,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5069 "util/configparser.c" /* yacc.c:1648 */ +#line 5071 "util/configparser.c" /* yacc.c:1648 */ break; case 428: -#line 2214 "./util/configparser.y" /* yacc.c:1648 */ +#line 2216 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5080,11 +5082,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5084 "util/configparser.c" /* yacc.c:1648 */ +#line 5086 "util/configparser.c" /* yacc.c:1648 */ break; case 429: -#line 2226 "./util/configparser.y" /* yacc.c:1648 */ +#line 2228 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5097,11 +5099,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5101 "util/configparser.c" /* yacc.c:1648 */ +#line 5103 "util/configparser.c" /* yacc.c:1648 */ break; case 430: -#line 2240 "./util/configparser.y" /* yacc.c:1648 */ +#line 2242 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5110,31 +5112,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5114 "util/configparser.c" /* yacc.c:1648 */ +#line 5116 "util/configparser.c" /* yacc.c:1648 */ break; case 431: -#line 2250 "./util/configparser.y" /* yacc.c:1648 */ +#line 2252 "./util/configparser.y" /* yacc.c:1648 */ { 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 5124 "util/configparser.c" /* yacc.c:1648 */ +#line 5126 "util/configparser.c" /* yacc.c:1648 */ break; case 432: -#line 2257 "./util/configparser.y" /* yacc.c:1648 */ +#line 2259 "./util/configparser.y" /* yacc.c:1648 */ { 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 5134 "util/configparser.c" /* yacc.c:1648 */ +#line 5136 "util/configparser.c" /* yacc.c:1648 */ break; case 433: -#line 2264 "./util/configparser.y" /* yacc.c:1648 */ +#line 2266 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5142,11 +5144,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5146 "util/configparser.c" /* yacc.c:1648 */ +#line 5148 "util/configparser.c" /* yacc.c:1648 */ break; case 434: -#line 2273 "./util/configparser.y" /* yacc.c:1648 */ +#line 2275 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5154,11 +5156,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5158 "util/configparser.c" /* yacc.c:1648 */ +#line 5160 "util/configparser.c" /* yacc.c:1648 */ break; case 435: -#line 2282 "./util/configparser.y" /* yacc.c:1648 */ +#line 2284 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5167,11 +5169,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5171 "util/configparser.c" /* yacc.c:1648 */ +#line 5173 "util/configparser.c" /* yacc.c:1648 */ break; case 436: -#line 2292 "./util/configparser.y" /* yacc.c:1648 */ +#line 2294 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5180,11 +5182,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5184 "util/configparser.c" /* yacc.c:1648 */ +#line 5186 "util/configparser.c" /* yacc.c:1648 */ break; case 437: -#line 2302 "./util/configparser.y" /* yacc.c:1648 */ +#line 2304 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5193,31 +5195,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5197 "util/configparser.c" /* yacc.c:1648 */ +#line 5199 "util/configparser.c" /* yacc.c:1648 */ break; case 438: -#line 2312 "./util/configparser.y" /* yacc.c:1648 */ +#line 2314 "./util/configparser.y" /* yacc.c:1648 */ { 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 5207 "util/configparser.c" /* yacc.c:1648 */ +#line 5209 "util/configparser.c" /* yacc.c:1648 */ break; case 439: -#line 2319 "./util/configparser.y" /* yacc.c:1648 */ +#line 2321 "./util/configparser.y" /* yacc.c:1648 */ { 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 5217 "util/configparser.c" /* yacc.c:1648 */ +#line 5219 "util/configparser.c" /* yacc.c:1648 */ break; case 440: -#line 2326 "./util/configparser.y" /* yacc.c:1648 */ +#line 2328 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5225,11 +5227,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5229 "util/configparser.c" /* yacc.c:1648 */ +#line 5231 "util/configparser.c" /* yacc.c:1648 */ break; case 441: -#line 2335 "./util/configparser.y" /* yacc.c:1648 */ +#line 2337 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5237,11 +5239,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5241 "util/configparser.c" /* yacc.c:1648 */ +#line 5243 "util/configparser.c" /* yacc.c:1648 */ break; case 442: -#line 2344 "./util/configparser.y" /* yacc.c:1648 */ +#line 2346 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5250,11 +5252,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5254 "util/configparser.c" /* yacc.c:1648 */ +#line 5256 "util/configparser.c" /* yacc.c:1648 */ break; case 443: -#line 2354 "./util/configparser.y" /* yacc.c:1648 */ +#line 2356 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5263,52 +5265,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5267 "util/configparser.c" /* yacc.c:1648 */ +#line 5269 "util/configparser.c" /* yacc.c:1648 */ break; case 444: -#line 2364 "./util/configparser.y" /* yacc.c:1648 */ +#line 2366 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5277 "util/configparser.c" /* yacc.c:1648 */ +#line 5279 "util/configparser.c" /* yacc.c:1648 */ break; case 445: -#line 2371 "./util/configparser.y" /* yacc.c:1648 */ +#line 2373 "./util/configparser.y" /* yacc.c:1648 */ { 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 5287 "util/configparser.c" /* yacc.c:1648 */ +#line 5289 "util/configparser.c" /* yacc.c:1648 */ break; case 446: -#line 2378 "./util/configparser.y" /* yacc.c:1648 */ +#line 2380 "./util/configparser.y" /* yacc.c:1648 */ { 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 5297 "util/configparser.c" /* yacc.c:1648 */ +#line 5299 "util/configparser.c" /* yacc.c:1648 */ break; case 447: -#line 2385 "./util/configparser.y" /* yacc.c:1648 */ +#line 2387 "./util/configparser.y" /* yacc.c:1648 */ { 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 5308 "util/configparser.c" /* yacc.c:1648 */ +#line 5310 "util/configparser.c" /* yacc.c:1648 */ break; case 448: -#line 2393 "./util/configparser.y" /* yacc.c:1648 */ +#line 2395 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5317,11 +5319,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5321 "util/configparser.c" /* yacc.c:1648 */ +#line 5323 "util/configparser.c" /* yacc.c:1648 */ break; case 449: -#line 2403 "./util/configparser.y" /* yacc.c:1648 */ +#line 2405 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5330,11 +5332,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5334 "util/configparser.c" /* yacc.c:1648 */ +#line 5336 "util/configparser.c" /* yacc.c:1648 */ break; case 450: -#line 2413 "./util/configparser.y" /* yacc.c:1648 */ +#line 2415 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5343,11 +5345,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5347 "util/configparser.c" /* yacc.c:1648 */ +#line 5349 "util/configparser.c" /* yacc.c:1648 */ break; case 451: -#line 2423 "./util/configparser.y" /* yacc.c:1648 */ +#line 2425 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5356,11 +5358,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5360 "util/configparser.c" /* yacc.c:1648 */ +#line 5362 "util/configparser.c" /* yacc.c:1648 */ break; case 452: -#line 2433 "./util/configparser.y" /* yacc.c:1648 */ +#line 2435 "./util/configparser.y" /* yacc.c:1648 */ { 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 && @@ -5391,11 +5393,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5395 "util/configparser.c" /* yacc.c:1648 */ +#line 5397 "util/configparser.c" /* yacc.c:1648 */ break; case 453: -#line 2465 "./util/configparser.y" /* yacc.c:1648 */ +#line 2467 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5404,33 +5406,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5408 "util/configparser.c" /* yacc.c:1648 */ +#line 5410 "util/configparser.c" /* yacc.c:1648 */ break; case 454: -#line 2475 "./util/configparser.y" /* yacc.c:1648 */ +#line 2477 "./util/configparser.y" /* yacc.c:1648 */ { 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 5419 "util/configparser.c" /* yacc.c:1648 */ +#line 5421 "util/configparser.c" /* yacc.c:1648 */ break; case 455: -#line 2483 "./util/configparser.y" /* yacc.c:1648 */ +#line 2485 "./util/configparser.y" /* yacc.c:1648 */ { 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 5430 "util/configparser.c" /* yacc.c:1648 */ +#line 5432 "util/configparser.c" /* yacc.c:1648 */ break; case 456: -#line 2491 "./util/configparser.y" /* yacc.c:1648 */ +#line 2493 "./util/configparser.y" /* yacc.c:1648 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5444,11 +5446,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5448 "util/configparser.c" /* yacc.c:1648 */ +#line 5450 "util/configparser.c" /* yacc.c:1648 */ break; case 457: -#line 2506 "./util/configparser.y" /* yacc.c:1648 */ +#line 2508 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5456,19 +5458,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5460 "util/configparser.c" /* yacc.c:1648 */ +#line 5462 "util/configparser.c" /* yacc.c:1648 */ break; case 458: -#line 2515 "./util/configparser.y" /* yacc.c:1648 */ +#line 2517 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5468 "util/configparser.c" /* yacc.c:1648 */ +#line 5470 "util/configparser.c" /* yacc.c:1648 */ break; case 469: -#line 2526 "./util/configparser.y" /* yacc.c:1648 */ +#line 2528 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5477,11 +5479,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5481 "util/configparser.c" /* yacc.c:1648 */ +#line 5483 "util/configparser.c" /* yacc.c:1648 */ break; case 470: -#line 2536 "./util/configparser.y" /* yacc.c:1648 */ +#line 2538 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5489,79 +5491,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5493 "util/configparser.c" /* yacc.c:1648 */ +#line 5495 "util/configparser.c" /* yacc.c:1648 */ break; case 471: -#line 2545 "./util/configparser.y" /* yacc.c:1648 */ +#line 2547 "./util/configparser.y" /* yacc.c:1648 */ { 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 5503 "util/configparser.c" /* yacc.c:1648 */ +#line 5505 "util/configparser.c" /* yacc.c:1648 */ break; case 472: -#line 2552 "./util/configparser.y" /* yacc.c:1648 */ +#line 2554 "./util/configparser.y" /* yacc.c:1648 */ { 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 5513 "util/configparser.c" /* yacc.c:1648 */ +#line 5515 "util/configparser.c" /* yacc.c:1648 */ break; case 473: -#line 2559 "./util/configparser.y" /* yacc.c:1648 */ +#line 2561 "./util/configparser.y" /* yacc.c:1648 */ { 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 5523 "util/configparser.c" /* yacc.c:1648 */ +#line 5525 "util/configparser.c" /* yacc.c:1648 */ break; case 474: -#line 2566 "./util/configparser.y" /* yacc.c:1648 */ +#line 2568 "./util/configparser.y" /* yacc.c:1648 */ { 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 5533 "util/configparser.c" /* yacc.c:1648 */ +#line 5535 "util/configparser.c" /* yacc.c:1648 */ break; case 475: -#line 2573 "./util/configparser.y" /* yacc.c:1648 */ +#line 2575 "./util/configparser.y" /* yacc.c:1648 */ { 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 5543 "util/configparser.c" /* yacc.c:1648 */ +#line 5545 "util/configparser.c" /* yacc.c:1648 */ break; case 476: -#line 2580 "./util/configparser.y" /* yacc.c:1648 */ +#line 2582 "./util/configparser.y" /* yacc.c:1648 */ { 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 5553 "util/configparser.c" /* yacc.c:1648 */ +#line 5555 "util/configparser.c" /* yacc.c:1648 */ break; case 477: -#line 2587 "./util/configparser.y" /* yacc.c:1648 */ +#line 2589 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5561 "util/configparser.c" /* yacc.c:1648 */ +#line 5563 "util/configparser.c" /* yacc.c:1648 */ break; case 492: -#line 2604 "./util/configparser.y" /* yacc.c:1648 */ +#line 2606 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5569,21 +5571,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5573 "util/configparser.c" /* yacc.c:1648 */ +#line 5575 "util/configparser.c" /* yacc.c:1648 */ break; case 493: -#line 2613 "./util/configparser.y" /* yacc.c:1648 */ +#line 2615 "./util/configparser.y" /* yacc.c:1648 */ { 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 5583 "util/configparser.c" /* yacc.c:1648 */ +#line 5585 "util/configparser.c" /* yacc.c:1648 */ break; case 494: -#line 2620 "./util/configparser.y" /* yacc.c:1648 */ +#line 2622 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5591,11 +5593,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5595 "util/configparser.c" /* yacc.c:1648 */ +#line 5597 "util/configparser.c" /* yacc.c:1648 */ break; case 495: -#line 2629 "./util/configparser.y" /* yacc.c:1648 */ +#line 2631 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5603,31 +5605,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5607 "util/configparser.c" /* yacc.c:1648 */ +#line 5609 "util/configparser.c" /* yacc.c:1648 */ break; case 496: -#line 2638 "./util/configparser.y" /* yacc.c:1648 */ +#line 2640 "./util/configparser.y" /* yacc.c:1648 */ { 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 5617 "util/configparser.c" /* yacc.c:1648 */ +#line 5619 "util/configparser.c" /* yacc.c:1648 */ break; case 497: -#line 2645 "./util/configparser.y" /* yacc.c:1648 */ +#line 2647 "./util/configparser.y" /* yacc.c:1648 */ { 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 5627 "util/configparser.c" /* yacc.c:1648 */ +#line 5629 "util/configparser.c" /* yacc.c:1648 */ break; case 498: -#line 2652 "./util/configparser.y" /* yacc.c:1648 */ +#line 2654 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5636,11 +5638,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5640 "util/configparser.c" /* yacc.c:1648 */ +#line 5642 "util/configparser.c" /* yacc.c:1648 */ break; case 499: -#line 2662 "./util/configparser.y" /* yacc.c:1648 */ +#line 2664 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5649,11 +5651,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5653 "util/configparser.c" /* yacc.c:1648 */ +#line 5655 "util/configparser.c" /* yacc.c:1648 */ break; case 500: -#line 2672 "./util/configparser.y" /* yacc.c:1648 */ +#line 2674 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5662,11 +5664,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5666 "util/configparser.c" /* yacc.c:1648 */ +#line 5668 "util/configparser.c" /* yacc.c:1648 */ break; case 501: -#line 2682 "./util/configparser.y" /* yacc.c:1648 */ +#line 2684 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5675,11 +5677,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5679 "util/configparser.c" /* yacc.c:1648 */ +#line 5681 "util/configparser.c" /* yacc.c:1648 */ break; case 502: -#line 2692 "./util/configparser.y" /* yacc.c:1648 */ +#line 2694 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5688,11 +5690,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5692 "util/configparser.c" /* yacc.c:1648 */ +#line 5694 "util/configparser.c" /* yacc.c:1648 */ break; case 503: -#line 2702 "./util/configparser.y" /* yacc.c:1648 */ +#line 2704 "./util/configparser.y" /* yacc.c:1648 */ { 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) @@ -5701,29 +5703,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5705 "util/configparser.c" /* yacc.c:1648 */ +#line 5707 "util/configparser.c" /* yacc.c:1648 */ break; case 504: -#line 2712 "./util/configparser.y" /* yacc.c:1648 */ +#line 2714 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(python:)\n")); } -#line 5713 "util/configparser.c" /* yacc.c:1648 */ +#line 5715 "util/configparser.c" /* yacc.c:1648 */ break; case 508: -#line 2721 "./util/configparser.y" /* yacc.c:1648 */ +#line 2723 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5723 "util/configparser.c" /* yacc.c:1648 */ +#line 5725 "util/configparser.c" /* yacc.c:1648 */ break; case 509: -#line 2727 "./util/configparser.y" /* yacc.c:1648 */ +#line 2729 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5732,21 +5734,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5736 "util/configparser.c" /* yacc.c:1648 */ +#line 5738 "util/configparser.c" /* yacc.c:1648 */ break; case 510: -#line 2737 "./util/configparser.y" /* yacc.c:1648 */ +#line 2739 "./util/configparser.y" /* yacc.c:1648 */ { 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 5746 "util/configparser.c" /* yacc.c:1648 */ +#line 5748 "util/configparser.c" /* yacc.c:1648 */ break; case 511: -#line 2744 "./util/configparser.y" /* yacc.c:1648 */ +#line 2746 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5754,30 +5756,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5758 "util/configparser.c" /* yacc.c:1648 */ +#line 5760 "util/configparser.c" /* yacc.c:1648 */ break; case 512: -#line 2753 "./util/configparser.y" /* yacc.c:1648 */ +#line 2755 "./util/configparser.y" /* yacc.c:1648 */ { 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 5769 "util/configparser.c" /* yacc.c:1648 */ +#line 5771 "util/configparser.c" /* yacc.c:1648 */ break; case 513: -#line 2761 "./util/configparser.y" /* yacc.c:1648 */ +#line 2763 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5777 "util/configparser.c" /* yacc.c:1648 */ +#line 5779 "util/configparser.c" /* yacc.c:1648 */ break; case 526: -#line 2777 "./util/configparser.y" /* yacc.c:1648 */ +#line 2779 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5785,11 +5787,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5789 "util/configparser.c" /* yacc.c:1648 */ +#line 5791 "util/configparser.c" /* yacc.c:1648 */ break; case 527: -#line 2787 "./util/configparser.y" /* yacc.c:1648 */ +#line 2789 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5797,21 +5799,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5801 "util/configparser.c" /* yacc.c:1648 */ +#line 5803 "util/configparser.c" /* yacc.c:1648 */ break; case 528: -#line 2796 "./util/configparser.y" /* yacc.c:1648 */ +#line 2798 "./util/configparser.y" /* yacc.c:1648 */ { 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 5811 "util/configparser.c" /* yacc.c:1648 */ +#line 5813 "util/configparser.c" /* yacc.c:1648 */ break; case 529: -#line 2803 "./util/configparser.y" /* yacc.c:1648 */ +#line 2805 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5819,21 +5821,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 5823 "util/configparser.c" /* yacc.c:1648 */ +#line 5825 "util/configparser.c" /* yacc.c:1648 */ break; case 530: -#line 2812 "./util/configparser.y" /* yacc.c:1648 */ +#line 2814 "./util/configparser.y" /* yacc.c:1648 */ { 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 5833 "util/configparser.c" /* yacc.c:1648 */ +#line 5835 "util/configparser.c" /* yacc.c:1648 */ break; case 531: -#line 2819 "./util/configparser.y" /* yacc.c:1648 */ +#line 2821 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5841,22 +5843,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 5845 "util/configparser.c" /* yacc.c:1648 */ +#line 5847 "util/configparser.c" /* yacc.c:1648 */ break; case 532: -#line 2828 "./util/configparser.y" /* yacc.c:1648 */ +#line 2830 "./util/configparser.y" /* yacc.c:1648 */ { 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 5856 "util/configparser.c" /* yacc.c:1648 */ +#line 5858 "util/configparser.c" /* yacc.c:1648 */ break; case 533: -#line 2836 "./util/configparser.y" /* yacc.c:1648 */ +#line 2838 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5868,22 +5870,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5872 "util/configparser.c" /* yacc.c:1648 */ +#line 5874 "util/configparser.c" /* yacc.c:1648 */ break; case 534: -#line 2849 "./util/configparser.y" /* yacc.c:1648 */ +#line 2851 "./util/configparser.y" /* yacc.c:1648 */ { 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 5883 "util/configparser.c" /* yacc.c:1648 */ +#line 5885 "util/configparser.c" /* yacc.c:1648 */ break; case 535: -#line 2857 "./util/configparser.y" /* yacc.c:1648 */ +#line 2859 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5895,19 +5897,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5899 "util/configparser.c" /* yacc.c:1648 */ +#line 5901 "util/configparser.c" /* yacc.c:1648 */ break; case 536: -#line 2870 "./util/configparser.y" /* yacc.c:1648 */ +#line 2872 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5907 "util/configparser.c" /* yacc.c:1648 */ +#line 5909 "util/configparser.c" /* yacc.c:1648 */ break; case 544: -#line 2880 "./util/configparser.y" /* yacc.c:1648 */ +#line 2882 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5921,11 +5923,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5925 "util/configparser.c" /* yacc.c:1648 */ +#line 5927 "util/configparser.c" /* yacc.c:1648 */ break; case 545: -#line 2895 "./util/configparser.y" /* yacc.c:1648 */ +#line 2897 "./util/configparser.y" /* yacc.c:1648 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5939,11 +5941,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5943 "util/configparser.c" /* yacc.c:1648 */ +#line 5945 "util/configparser.c" /* yacc.c:1648 */ break; case 546: -#line 2910 "./util/configparser.y" /* yacc.c:1648 */ +#line 2912 "./util/configparser.y" /* yacc.c:1648 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5954,11 +5956,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5958 "util/configparser.c" /* yacc.c:1648 */ +#line 5960 "util/configparser.c" /* yacc.c:1648 */ break; case 547: -#line 2922 "./util/configparser.y" /* yacc.c:1648 */ +#line 2924 "./util/configparser.y" /* yacc.c:1648 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5972,11 +5974,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5976 "util/configparser.c" /* yacc.c:1648 */ +#line 5978 "util/configparser.c" /* yacc.c:1648 */ break; case 548: -#line 2937 "./util/configparser.y" /* yacc.c:1648 */ +#line 2939 "./util/configparser.y" /* yacc.c:1648 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5988,11 +5990,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5992 "util/configparser.c" /* yacc.c:1648 */ +#line 5994 "util/configparser.c" /* yacc.c:1648 */ break; case 549: -#line 2950 "./util/configparser.y" /* yacc.c:1648 */ +#line 2952 "./util/configparser.y" /* yacc.c:1648 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6002,11 +6004,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6006 "util/configparser.c" /* yacc.c:1648 */ +#line 6008 "util/configparser.c" /* yacc.c:1648 */ break; -#line 6010 "util/configparser.c" /* yacc.c:1648 */ +#line 6012 "util/configparser.c" /* yacc.c:1648 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6234,7 +6236,7 @@ yyreturn: #endif return yyresult; } -#line 2960 "./util/configparser.y" /* yacc.c:1907 */ +#line 2962 "./util/configparser.y" /* yacc.c:1907 */ /* parse helper routines could be here */ diff --git a/util/configparser.y b/util/configparser.y index 5f52f4d77..c7b916966 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -1783,12 +1783,14 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG && strcmp($3, "always_refuse")!=0 && strcmp($3, "always_nxdomain")!=0 && strcmp($3, "noview")!=0 - && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) { + && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0 + && strcmp($3, "inform_redirect") != 0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " - "always_transparent, always_refuse, " - "always_nxdomain, noview or nodefault"); + "inform_redirect, always_transparent, " + "always_refuse, always_nxdomain, noview " + "or nodefault"); free($2); free($3); } else if(strcmp($3, "nodefault")==0) { From 99994a26b0acb7d2c4672d7d9140c9172b83c120 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 4 Feb 2019 15:22:08 +0000 Subject: [PATCH 074/117] - Perform canonical sort for 0x20 capsforid compare of replies, this sorts rrsets in the authority and additional section before comparison, so that out of order rrsets do not cause failure. git-svn-id: file:///svn/unbound/trunk@5100 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ iterator/iter_utils.c | 57 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index b746e9979..3e43447fe 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,9 @@ It logs the original query name, not the target of the CNAME. - Add local-zone type inform_redirect, which logs like type inform, and redirects like type redirect. + - Perform canonical sort for 0x20 capsforid compare of replies, + this sorts rrsets in the authority and additional section before + comparison, so that out of order rrsets do not cause failure. 31 January 2019: Wouter - Set ub_ctx_set_tls call signature in ltrace config file for diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 4ac8efd0d..6eacaf2ce 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -882,10 +882,35 @@ rrset_equal(struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2) return 1; } +/** compare rrsets and sort canonically. Compares rrset name, type, class. + * return 0 if equal, +1 if x > y, and -1 if x < y. + */ +static int +rrset_canonical_sort_cmp(const void* x, const void* y) +{ + struct ub_packed_rrset_key* rrx = (struct ub_packed_rrset_key*)x; + struct ub_packed_rrset_key* rry = (struct ub_packed_rrset_key*)y; + int r = dname_canonical_compare(rrx->rk.dname, rry->rk.dname); + if(r != 0) + return r; + if(rrx->rk.type != rry->rk.type) { + if(ntohs(rrx->rk.type) > ntohs(rry->rk.type)) + return 1; + else return -1; + } + if(rrx->rk.rrset_class != rry->rk.rrset_class) { + if(ntohs(rrx->rk.rrset_class) > ntohs(rry->rk.rrset_class)) + return 1; + else return -1; + } + return 0; +} + int reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region) { size_t i; + struct ub_packed_rrset_key** sorted_p, **sorted_q; if(p->flags != q->flags || p->qdcount != q->qdcount || /* do not check TTL, this may differ */ @@ -899,16 +924,40 @@ reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region) p->ar_numrrsets != q->ar_numrrsets || p->rrset_count != q->rrset_count) return 0; + /* sort the rrsets in the authority and additional sections before + * compare, the query and answer sections are ordered in the sequence + * they should have (eg. one after the other for aliases). */ + sorted_p = (struct ub_packed_rrset_key**)regional_alloc_init( + region, p->rrsets, sizeof(*sorted_p)*p->rrset_count); + if(!sorted_p) return 0; + log_assert(p->an_numrrsets + p->ns_numrrsets + p->ar_numrrsets <= + p->rrset_count); + qsort(sorted_p + p->an_numrrsets, p->ns_numrrsets, + sizeof(*sorted_p), rrset_canonical_sort_cmp); + qsort(sorted_p + p->an_numrrsets + p->ns_numrrsets, p->ar_numrrsets, + sizeof(*sorted_p), rrset_canonical_sort_cmp); + + sorted_q = (struct ub_packed_rrset_key**)regional_alloc_init( + region, q->rrsets, sizeof(*sorted_q)*q->rrset_count); + if(!sorted_q) return 0; + log_assert(q->an_numrrsets + q->ns_numrrsets + q->ar_numrrsets <= + q->rrset_count); + qsort(sorted_q + q->an_numrrsets, q->ns_numrrsets, + sizeof(*sorted_q), rrset_canonical_sort_cmp); + qsort(sorted_q + q->an_numrrsets + q->ns_numrrsets, q->ar_numrrsets, + sizeof(*sorted_q), rrset_canonical_sort_cmp); + + /* compare the rrsets */ for(i=0; irrset_count; i++) { - if(!rrset_equal(p->rrsets[i], q->rrsets[i])) { - if(!rrset_canonical_equal(region, p->rrsets[i], - q->rrsets[i])) { + if(!rrset_equal(sorted_p[i], sorted_q[i])) { + if(!rrset_canonical_equal(region, sorted_p[i], + sorted_q[i])) { regional_free_all(region); return 0; } - regional_free_all(region); } } + regional_free_all(region); return 1; } From a9e028564d680804a8dfe588eece3fedd8987d81 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 4 Feb 2019 15:48:21 +0000 Subject: [PATCH 075/117] Keep scratch region free on exit. git-svn-id: file:///svn/unbound/trunk@5101 be551aaa-1e26-0410-a405-d3ace91eadb9 --- iterator/iter_utils.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 6eacaf2ce..46eddf5d2 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -939,7 +939,10 @@ reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region) sorted_q = (struct ub_packed_rrset_key**)regional_alloc_init( region, q->rrsets, sizeof(*sorted_q)*q->rrset_count); - if(!sorted_q) return 0; + if(!sorted_q) { + regional_free_all(region); + return 0; + } log_assert(q->an_numrrsets + q->ns_numrrsets + q->ar_numrrsets <= q->rrset_count); qsort(sorted_q + q->an_numrrsets, q->ns_numrrsets, From 64c4e69b073db13236d278cc98251b4f51cacc0c Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 5 Feb 2019 08:17:36 +0000 Subject: [PATCH 076/117] Release version numbers. git-svn-id: file:///svn/unbound/trunk@5102 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 3e43447fe..1f718fc1e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -36,7 +36,9 @@ - List example config for root zone copy locally hosted with auth-zone as suggested from draft-ietf-dnsop-7706-bis-02. But with updated B root address. - - set version to 1.9.0 for release. + - set version to 1.9.0 for release. And this was released with the + spelling for tls-ciphers fix as 1.9.0 on Feb 5. Trunk has 1.9.1 in + development. 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and From e43c3daec2c3f4083dc9313fe929e0e0e54d21d5 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 5 Feb 2019 09:26:39 +0000 Subject: [PATCH 077/117] Trunk has 1.9.1 in development. git-svn-id: file:///svn/unbound/trunk@5105 be551aaa-1e26-0410-a405-d3ace91eadb9 --- configure | 27 ++++++++++++++------------- configure.ac | 7 ++++--- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/configure b/configure index 61fb928c1..45a251285 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.9.0. +# Generated by GNU Autoconf 2.69 for unbound 1.9.1. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.9.0' -PACKAGE_STRING='unbound 1.9.0' +PACKAGE_VERSION='1.9.1' +PACKAGE_STRING='unbound 1.9.1' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1440,7 +1440,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.9.0 to adapt to many kinds of systems. +\`configure' configures unbound 1.9.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1505,7 +1505,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.9.0:";; + short | recursive ) echo "Configuration of unbound 1.9.1:";; esac cat <<\_ACEOF @@ -1722,7 +1722,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.9.0 +unbound configure 1.9.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2431,7 +2431,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.9.0, which was +It was created by unbound $as_me 1.9.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2783,11 +2783,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=9 -UNBOUND_VERSION_MICRO=0 +UNBOUND_VERSION_MICRO=1 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=0 +LIBUNBOUND_REVISION=1 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2854,7 +2854,8 @@ LIBUNBOUND_AGE=1 # 1.8.1 had 8:1:0 # 1.8.2 had 8:2:0 # 1.8.3 had 8:3:0 -# 1.8.4 had 9:0:1 # add ub_ctx_set_tls +# 1.9.0 had 9:0:1 # add ub_ctx_set_tls +# 1.9.1 had 9:1:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -21149,7 +21150,7 @@ _ACEOF -version=1.9.0 +version=1.9.1 date=`date +'%b %e, %Y'` @@ -21668,7 +21669,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.9.0, which was +This file was extended by unbound $as_me 1.9.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21734,7 +21735,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.9.0 +unbound config.status 1.9.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 938f2cf1d..ff6f05ad7 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],[9]) -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, 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=0 +LIBUNBOUND_REVISION=1 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -85,7 +85,8 @@ LIBUNBOUND_AGE=1 # 1.8.1 had 8:1:0 # 1.8.2 had 8:2:0 # 1.8.3 had 8:3:0 -# 1.8.4 had 9:0:1 # add ub_ctx_set_tls +# 1.9.0 had 9:0:1 # add ub_ctx_set_tls +# 1.9.1 had 9:1:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary From 20d57ec58b075496da417b7ae3b16afd5d853b4a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 7 Feb 2019 08:34:28 +0000 Subject: [PATCH 078/117] - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. git-svn-id: file:///svn/unbound/trunk@5106 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/remote.c | 2 +- doc/Changelog | 3 +++ iterator/iter_fwd.c | 2 +- iterator/iter_hints.c | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 48efba740..1689154f5 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1987,7 +1987,7 @@ parse_delegpt(RES* ssl, char* args, uint8_t* nm, int allow_names) return NULL; } } else { -#ifndef HAVE_SSL_SET1_HOST +#if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(auth_name) log_err("no name verification functionality in " "ssl library, ignored name for %s", todo); diff --git a/doc/Changelog b/doc/Changelog index 1f718fc1e..2f06464f1 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +7 February 2019: Wouter + - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. + 4 February 2019: Wouter - Fix that log-replies prints the correct name for local-alias names, for names that have a CNAME in local-data configuration. diff --git a/iterator/iter_fwd.c b/iterator/iter_fwd.c index 4eb0eb718..ea3d70e07 100644 --- a/iterator/iter_fwd.c +++ b/iterator/iter_fwd.c @@ -239,7 +239,7 @@ read_fwds_addr(struct config_stub* s, struct delegpt* dp) s->name, p->str); return 0; } -#ifndef HAVE_SSL_SET1_HOST +#if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(tls_auth_name) log_err("no name verification functionality in " "ssl library, ignored name for %s", p->str); diff --git a/iterator/iter_hints.c b/iterator/iter_hints.c index 0b35a9d9e..60e518122 100644 --- a/iterator/iter_hints.c +++ b/iterator/iter_hints.c @@ -252,7 +252,7 @@ read_stubs_addr(struct config_stub* s, struct delegpt* dp) s->name, p->str); return 0; } -#ifndef HAVE_SSL_SET1_HOST +#if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(auth_name) log_err("no name verification functionality in " "ssl library, ignored name for %s", p->str); From 429e130768813bde2a604c64e8b38cc8d3e827ae Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 8 Feb 2019 13:30:51 +0000 Subject: [PATCH 079/117] - Fix that qname minimisation does not skip a label when missing nameserver targets need to be fetched. git-svn-id: file:///svn/unbound/trunk@5107 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ iterator/iterator.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 2f06464f1..ca54d2906 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 7 February 2019: Wouter - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. + - Fix that qname minimisation does not skip a label when missing + nameserver targets need to be fetched. 4 February 2019: Wouter - Fix that log-replies prints the correct name for local-alias diff --git a/iterator/iterator.c b/iterator/iterator.c index 8312dfd53..adc2b2233 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -2105,6 +2105,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, struct delegpt_addr* target; struct outbound_entry* outq; int auth_fallback = 0; + uint8_t* qout_orig = NULL; + size_t qout_orig_len = 0; /* NOTE: a request will encounter this state for each target it * needs to send a query to. That is, at least one per referral, @@ -2178,6 +2180,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, int labdiff = qchaselabs - dname_count_labels(iq->qinfo_out.qname); + qout_orig = iq->qinfo_out.qname; + qout_orig_len = iq->qinfo_out.qname_len; iq->qinfo_out.qname = iq->qchase.qname; iq->qinfo_out.qname_len = iq->qchase.qname_len; iq->minimise_count++; @@ -2330,6 +2334,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, /* wait to get all targets, we want to try em */ verbose(VERB_ALGO, "wait for all targets for fallback"); qstate->ext_state[id] = module_wait_reply; + /* undo qname minimise step because we'll get back here + * to do it again */ + if(qout_orig && iq->minimise_count > 0) { + iq->minimise_count--; + iq->qinfo_out.qname = qout_orig; + iq->qinfo_out.qname_len = qout_orig_len; + } return 0; } /* did we do enough fallback queries already? */ @@ -2463,6 +2474,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries); qstate->ext_state[id] = module_wait_reply; } + /* undo qname minimise step because we'll get back here + * to do it again */ + if(qout_orig && iq->minimise_count > 0) { + iq->minimise_count--; + iq->qinfo_out.qname = qout_orig; + iq->qinfo_out.qname_len = qout_orig_len; + } return 0; } From cae8361dcd2809c8e266d259370c9ab8660c2c0e Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 8 Feb 2019 15:05:24 +0000 Subject: [PATCH 080/117] - Fix #4225: clients seem to erroneously receive no answer with DNS-over-TLS and qname-minimisation. git-svn-id: file:///svn/unbound/trunk@5108 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ services/listen_dnsport.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ca54d2906..4a14c6060 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. - Fix that qname minimisation does not skip a label when missing nameserver targets need to be fetched. + - Fix #4225: clients seem to erroneously receive no answer with + DNS-over-TLS and qname-minimisation. 4 February 2019: Wouter - Fix that log-replies prints the correct name for local-alias diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index f86a83d96..664072aa4 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1779,6 +1779,12 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req) /* If mesh failed(mallocfail) and called commpoint_send_reply with * something like servfail then we pick up that reply below. */ if(req->is_reply) { + /* reply from mesh is in the spool_buffer */ + sldns_buffer_clear(c->buffer); + sldns_buffer_write(c->buffer, + sldns_buffer_begin(req->spool_buffer), + sldns_buffer_limit(req->spool_buffer)); + sldns_buffer_flip(c->buffer); goto send_it; } From 4e249c96e8afc24a600a4f9bc1091bf76ebea7f1 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 11 Feb 2019 08:53:59 +0000 Subject: [PATCH 081/117] - Note default for module-config in man page. git-svn-id: file:///svn/unbound/trunk@5109 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ doc/unbound.conf.5.in | 2 ++ 2 files changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 4a14c6060..cafe8fe1c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +11 February 2019: Wouter + - Note default for module-config in man page. + 7 February 2019: Wouter - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. - Fix that qname minimisation does not skip a label when missing diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 88340b4a1..9cbcda406 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -930,6 +930,8 @@ Setting this to "iterator" will result in a non\-validating server. Setting this to "validator iterator" will turn on DNSSEC validation. The ordering of the modules is important. You must also set trust\-anchors for validation to be useful. +The default is "validator iterator". When the server is built with +EDNS client subnet support the default is "subnetcache validator iterator". .TP .B trust\-anchor\-file: \fI File with trusted keys for validation. Both DS and DNSKEY entries can appear From 19193fd5344b55b059f0d390739fe3f925f3f10a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 11 Feb 2019 09:49:13 +0000 Subject: [PATCH 082/117] - Fix recursion lame test for qname minimisation asked queries, that were not present in the set of prepared answers. git-svn-id: file:///svn/unbound/trunk@5110 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ testdata/iter_reclame_two.rpl | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index cafe8fe1c..34a1c7919 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 11 February 2019: Wouter - Note default for module-config in man page. + - Fix recursion lame test for qname minimisation asked queries, + that were not present in the set of prepared answers. 7 February 2019: Wouter - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. diff --git a/testdata/iter_reclame_two.rpl b/testdata/iter_reclame_two.rpl index f30edd941..de4ef4165 100644 --- a/testdata/iter_reclame_two.rpl +++ b/testdata/iter_reclame_two.rpl @@ -105,6 +105,26 @@ lame.example.com. IN AAAA SECTION ANSWER ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR RA NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION ANSWER +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR RA NOERROR +SECTION QUESTION +lame.example.com. IN A +SECTION ANSWER +lame.example.com. IN A 1.2.3.5 +ENTRY_END + ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id From ddae2885bd59257d1d48509e747e147e25376c97 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 11 Feb 2019 09:56:57 +0000 Subject: [PATCH 083/117] Also fix this unit test for qname minimisation asked queries that have to be added to the provided answer list. git-svn-id: file:///svn/unbound/trunk@5111 be551aaa-1e26-0410-a405-d3ace91eadb9 --- testdata/iter_ranoaa_lame.rpl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/testdata/iter_ranoaa_lame.rpl b/testdata/iter_ranoaa_lame.rpl index efb38a590..4808b25a9 100644 --- a/testdata/iter_ranoaa_lame.rpl +++ b/testdata/iter_ranoaa_lame.rpl @@ -153,6 +153,16 @@ SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION ANSWER +ns.example.com. IN A 1.2.3.55 +ENTRY_END + ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id From 49a36d98bbedf75a163e9cfed1439ba31e9ac049 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 11 Feb 2019 09:59:47 +0000 Subject: [PATCH 084/117] - Fix #13: Remove left-over requirements on OpenSSL >= 1.1.0 for cert name matching, from man page. git-svn-id: file:///svn/unbound/trunk@5112 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ doc/unbound.conf.5.in | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 34a1c7919..2a3a6b80a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Note default for module-config in man page. - Fix recursion lame test for qname minimisation asked queries, that were not present in the set of prepared answers. + - Fix #13: Remove left-over requirements on OpenSSL >= 1.1.0 for + cert name matching, from man page. 7 February 2019: Wouter - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 9cbcda406..98650d207 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1621,7 +1621,6 @@ the '@' and '#', the '@' comes first. At high verbosity it logs the TLS certificate, with TLS enabled. If you leave out the '#' and auth name from the forward\-addr, any name is accepted. The cert must also match a CA from the tls\-cert\-bundle. -The cert name match code needs OpenSSL 1.1.0 or later to be enabled. .TP .B forward\-first: \fI If a forwarded query is met with a SERVFAIL error, and this option is From 030832cf12e60c874d8435ef555d00e307536532 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 11 Feb 2019 10:02:45 +0000 Subject: [PATCH 085/117] - make depend, with newer gcc, nicer layout. git-svn-id: file:///svn/unbound/trunk@5113 be551aaa-1e26-0410-a405-d3ace91eadb9 --- Makefile.in | 3 +-- doc/Changelog | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index 1f035725d..03a63476a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1075,8 +1075,7 @@ unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/util/log.h \ - $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ diff --git a/doc/Changelog b/doc/Changelog index 2a3a6b80a..86699463c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,7 @@ that were not present in the set of prepared answers. - Fix #13: Remove left-over requirements on OpenSSL >= 1.1.0 for cert name matching, from man page. + - make depend, with newer gcc, nicer layout. 7 February 2019: Wouter - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. From a41375411e800c4dcf2e5c99ba4c8279c96e1673 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 14 Feb 2019 08:16:15 +0000 Subject: [PATCH 086/117] - Fix capsforid canonical sort qsort callback. git-svn-id: file:///svn/unbound/trunk@5114 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ iterator/iter_utils.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 86699463c..5f117afe5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +14 February 2019: Wouter + - Fix capsforid canonical sort qsort callback. + 11 February 2019: Wouter - Note default for module-config in man page. - Fix recursion lame test for qname minimisation asked queries, diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 46eddf5d2..be7965a60 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -888,8 +888,8 @@ rrset_equal(struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2) static int rrset_canonical_sort_cmp(const void* x, const void* y) { - struct ub_packed_rrset_key* rrx = (struct ub_packed_rrset_key*)x; - struct ub_packed_rrset_key* rry = (struct ub_packed_rrset_key*)y; + struct ub_packed_rrset_key* rrx = *(struct ub_packed_rrset_key**)x; + struct ub_packed_rrset_key* rry = *(struct ub_packed_rrset_key**)y; int r = dname_canonical_compare(rrx->rk.dname, rry->rk.dname); if(r != 0) return r; From 3949bf2c82ef47fd0b8fc1d12d5dae2a33a31793 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 18 Feb 2019 10:40:41 +0000 Subject: [PATCH 087/117] - Print query name with ip_ratelimit exceeded log lines. git-svn-id: file:///svn/unbound/trunk@5115 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/worker.c | 2 +- doc/Changelog | 3 +++ services/cache/infra.c | 23 +++++++++++++++++++---- services/cache/infra.h | 4 +++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 886107b94..433b96fd5 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1171,7 +1171,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, /* check if this query should be dropped based on source ip rate limiting */ if(!infra_ip_ratelimit_inc(worker->env.infra_cache, repinfo, - *worker->env.now)) { + *worker->env.now, c->buffer)) { /* See if we are passed through with slip factor */ if(worker->env.cfg->ip_ratelimit_factor != 0 && ub_random_max(worker->env.rnd, diff --git a/doc/Changelog b/doc/Changelog index 5f117afe5..041c10516 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +18 February 2019: Wouter + - Print query name with ip_ratelimit exceeded log lines. + 14 February 2019: Wouter - Fix capsforid canonical sort qsort callback. diff --git a/services/cache/infra.c b/services/cache/infra.c index 07c41928d..fa127e918 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -41,6 +41,8 @@ #include "config.h" #include "sldns/rrdef.h" #include "sldns/str2wire.h" +#include "sldns/sbuffer.h" +#include "sldns/wire2str.h" #include "services/cache/infra.h" #include "util/storage/slabhash.h" #include "util/storage/lookup3.h" @@ -991,7 +993,7 @@ infra_get_mem(struct infra_cache* infra) } int infra_ip_ratelimit_inc(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow) + struct comm_reply* repinfo, time_t timenow, struct sldns_buffer* buffer) { int max; struct lruhash_entry* entry; @@ -1010,11 +1012,24 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, lock_rw_unlock(&entry->lock); if(premax < infra_ip_ratelimit && max >= infra_ip_ratelimit) { - char client_ip[128]; + char client_ip[128], qnm[LDNS_MAX_DOMAINLEN+1+12+12]; addr_to_str((struct sockaddr_storage *)&repinfo->addr, repinfo->addrlen, client_ip, sizeof(client_ip)); - verbose(VERB_OPS, "ip_ratelimit exceeded %s %d", - client_ip, infra_ip_ratelimit); + qnm[0]=0; + if(sldns_buffer_limit(buffer)>LDNS_HEADER_SIZE && + LDNS_QDCOUNT(sldns_buffer_begin(buffer))!=0) { + (void)sldns_wire2str_rrquestion_buf( + sldns_buffer_at(buffer, LDNS_HEADER_SIZE), + sldns_buffer_limit(buffer)-LDNS_HEADER_SIZE, + qnm, sizeof(qnm)); + if(strlen(qnm)>0 && qnm[strlen(qnm)-1]=='\n') + qnm[strlen(qnm)-1] = 0; /*remove newline*/ + verbose(VERB_OPS, "ip_ratelimit exceeded %s %d %s", + client_ip, infra_ip_ratelimit, qnm); + } else { + verbose(VERB_OPS, "ip_ratelimit exceeded %s %d (no query name)", + client_ip, infra_ip_ratelimit); + } } return (max <= infra_ip_ratelimit); } diff --git a/services/cache/infra.h b/services/cache/infra.h index 10db796bf..0f398d8ed 100644 --- a/services/cache/infra.h +++ b/services/cache/infra.h @@ -410,10 +410,12 @@ int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, * @param infra: infra cache * @param repinfo: information about client * @param timenow: what time it is now. + * @param buffer: with query for logging. * @return 1 if it could be incremented. 0 if the increment overshot the * ratelimit and the query should be dropped. */ int infra_ip_ratelimit_inc(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow); + struct comm_reply* repinfo, time_t timenow, + struct sldns_buffer* buffer); /** * Get memory used by the infra cache. From d1e92a0ebd137796c919eb6edb08d3e7fc334b8a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 18 Feb 2019 12:32:42 +0000 Subject: [PATCH 088/117] - Spaces instead of tabs in that log message. git-svn-id: file:///svn/unbound/trunk@5116 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/cache/infra.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 041c10516..78af63b84 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 18 February 2019: Wouter - Print query name with ip_ratelimit exceeded log lines. + - Spaces instead of tabs in that log message. 14 February 2019: Wouter - Fix capsforid canonical sort qsort callback. diff --git a/services/cache/infra.c b/services/cache/infra.c index fa127e918..5ced2d5bb 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -1024,6 +1024,10 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, qnm, sizeof(qnm)); if(strlen(qnm)>0 && qnm[strlen(qnm)-1]=='\n') qnm[strlen(qnm)-1] = 0; /*remove newline*/ + if(strchr(qnm, '\t')) + *strchr(qnm, '\t') = ' '; + if(strchr(qnm, '\t')) + *strchr(qnm, '\t') = ' '; verbose(VERB_OPS, "ip_ratelimit exceeded %s %d %s", client_ip, infra_ip_ratelimit, qnm); } else { From 91e863138bce887e276811754c3617f7aa156227 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 18 Feb 2019 15:53:02 +0000 Subject: [PATCH 089/117] - Print query name and IP address when domain rate limit exceeded. git-svn-id: file:///svn/unbound/trunk@5117 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + iterator/iterator.c | 6 ++++-- services/cache/infra.c | 17 ++++++++++++++--- services/cache/infra.h | 5 ++++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 78af63b84..bd2e0a602 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 18 February 2019: Wouter - Print query name with ip_ratelimit exceeded log lines. - Spaces instead of tabs in that log message. + - Print query name and IP address when domain rate limit exceeded. 14 February 2019: Wouter - Fix capsforid canonical sort qsort callback. diff --git a/iterator/iterator.c b/iterator/iterator.c index adc2b2233..c73fb5177 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -1448,7 +1448,8 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, * now will also exceed the rate, keeping cache fresh */ (void)infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, - *qstate->env->now); + *qstate->env->now, &qstate->qinfo, + qstate->reply); /* see if we are passed through with slip factor */ if(qstate->env->cfg->ratelimit_factor != 0 && ub_random_max(qstate->env->rnd, @@ -2487,7 +2488,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, /* if not forwarding, check ratelimits per delegationpoint name */ if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { if(!infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, - iq->dp->namelen, *qstate->env->now)) { + iq->dp->namelen, *qstate->env->now, &qstate->qinfo, + qstate->reply)) { lock_basic_lock(&ie->queries_ratelimit_lock); ie->num_queries_ratelimited++; lock_basic_unlock(&ie->queries_ratelimit_lock); diff --git a/services/cache/infra.c b/services/cache/infra.c index 5ced2d5bb..c2484a9f1 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -909,7 +909,8 @@ int infra_rate_max(void* data, time_t now) } int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, - size_t namelen, time_t timenow) + size_t namelen, time_t timenow, struct query_info* qinfo, + struct comm_reply* replylist) { int lim, max; struct lruhash_entry* entry; @@ -932,9 +933,19 @@ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, lock_rw_unlock(&entry->lock); if(premax < lim && max >= lim) { - char buf[257]; + char buf[257], qnm[257], ts[12], cs[12], ip[128]; dname_str(name, buf); - verbose(VERB_OPS, "ratelimit exceeded %s %d", buf, lim); + dname_str(qinfo->qname, qnm); + sldns_wire2str_type_buf(qinfo->qtype, ts, sizeof(ts)); + sldns_wire2str_class_buf(qinfo->qclass, cs, sizeof(cs)); + ip[0]=0; + if(replylist) { + addr_to_str((struct sockaddr_storage *)&replylist->addr, + replylist->addrlen, ip, sizeof(ip)); + verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s from %s", buf, lim, qnm, cs, ts, ip); + } else { + verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s", buf, lim, qnm, cs, ts); + } } return (max < lim); } diff --git a/services/cache/infra.h b/services/cache/infra.h index 0f398d8ed..e33f2a6c0 100644 --- a/services/cache/infra.h +++ b/services/cache/infra.h @@ -366,12 +366,15 @@ long long infra_get_host_rto(struct infra_cache* infra, * @param name: zone name * @param namelen: zone name length * @param timenow: what time it is now. + * @param qinfo: for logging, query name. + * @param replylist: for logging, querier's address (if any). * @return 1 if it could be incremented. 0 if the increment overshot the * ratelimit or if in the previous second the ratelimit was exceeded. * Failures like alloc failures are not returned (probably as 1). */ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, - size_t namelen, time_t timenow); + size_t namelen, time_t timenow, struct query_info* qinfo, + struct comm_reply* replylist); /** * Decrement the query rate counter for a delegation point. From 079253670eed87776ba6fa26f3e2d7a993d79439 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 20 Feb 2019 15:19:58 +0000 Subject: [PATCH 090/117] - Fix pythonmod include and sockaddr_un ifdefs for compile on Windows, and for libunbound. git-svn-id: file:///svn/unbound/trunk@5118 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ libunbound/python/libunbound.i | 10 ++++++++-- pythonmod/interface.i | 14 ++++++++++++++ pythonmod/pythonmod.c | 6 ++---- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index bd2e0a602..9fb1edd6b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +20 February 2019: Wouter + - Fix pythonmod include and sockaddr_un ifdefs for compile on + Windows, and for libunbound. + 18 February 2019: Wouter - Print query name with ip_ratelimit exceeded log lines. - Spaces instead of tabs in that log message. diff --git a/libunbound/python/libunbound.i b/libunbound/python/libunbound.i index 84a536929..4af75637c 100644 --- a/libunbound/python/libunbound.i +++ b/libunbound/python/libunbound.i @@ -36,9 +36,15 @@ %module unbound %{ #include + #ifdef HAVE_SYS_SOCKET_H #include + #endif + #ifdef HAVE_NETINET_IN_H #include + #endif + #ifdef HAVE_ARPA_INET_H #include + #endif #include "libunbound/unbound.h" %} @@ -108,7 +114,7 @@ %inline %{ void ub_ctx_free_dbg (struct ub_ctx* c) { - printf("******** UB_CTX free 0x%lX ************\n", (long unsigned int)c); + printf("******** UB_CTX free 0x%p ************\n", c); ub_ctx_delete(c); } @@ -648,7 +654,7 @@ Result: ['74.125.43.147', '74.125.43.99', '74.125.43.103', '74.125.43.104'] %inline %{ void ub_resolve_free_dbg (struct ub_result* r) { - printf("******** UB_RESOLVE free 0x%lX ************\n", (long unsigned int)r); + printf("******** UB_RESOLVE free 0x%p ************\n", r); ub_resolve_free(r); } %} diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 5f2559bac..9b5e15a4a 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -9,11 +9,21 @@ * called to perform operations on queries. */ #include + #ifdef HAVE_SYS_SOCKET_H #include + #endif + #ifdef HAVE_NETINET_IN_H #include + #endif + #ifdef HAVE_ARPA_INET_H #include + #endif + #ifdef HAVE_NETDB_H #include + #endif + #ifdef HAVE_SYS_UN_H #include + #endif #include #include "config.h" #include "util/log.h" @@ -449,7 +459,9 @@ struct sockaddr_storage {}; switch (ss->ss_family) { case AF_INET: return sizeof(struct sockaddr_in); case AF_INET6: return sizeof(struct sockaddr_in6); +#ifdef HAVE_SYS_UN_H case AF_UNIX: return sizeof(struct sockaddr_un); +#endif default: return 0; } @@ -515,10 +527,12 @@ struct sockaddr_storage {}; return PyBytes_FromStringAndSize((const char *)raw, sizeof(*raw)); } +#ifdef HAVE_SYS_UN_H if (ss->ss_family == AF_UNIX) { const struct sockaddr_un *sa = (struct sockaddr_un *)ss; return PyBytes_FromString(sa->sun_path); } +#endif return Py_None; } diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index a668ecc23..2f5bdf3b7 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -517,8 +517,7 @@ void pythonmod_clear(struct module_qstate* qstate, int id) return; pq = (struct pythonmod_qstate*)qstate->minfo[id]; - verbose(VERB_ALGO, "pythonmod: clear, id: %d, pq:%lX", id, - (unsigned long int)pq); + verbose(VERB_ALGO, "pythonmod: clear, id: %d, pq:%p", id, pq); if(pq != NULL) { PyGILState_STATE gil = PyGILState_Ensure(); @@ -534,8 +533,7 @@ void pythonmod_clear(struct module_qstate* qstate, int id) size_t pythonmod_get_mem(struct module_env* env, int id) { struct pythonmod_env* pe = (struct pythonmod_env*)env->modinfo[id]; - verbose(VERB_ALGO, "pythonmod: get_mem, id: %d, pe:%lX", id, - (unsigned long int)pe); + verbose(VERB_ALGO, "pythonmod: get_mem, id: %d, pe:%p", id, pe); if(!pe) return 0; return sizeof(*pe); From 62428e17f631e69120cd5a4c974208fb822cd069 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 21 Feb 2019 09:40:25 +0000 Subject: [PATCH 091/117] - Fix the error for unknown module in module-config is understandable, and explains it was not compiled in and where to see the list. git-svn-id: file:///svn/unbound/trunk@5119 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ services/modstack.c | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 9fb1edd6b..258d3fd10 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +21 February 2019: Wouter + - Fix the error for unknown module in module-config is understandable, + and explains it was not compiled in and where to see the list. + 20 February 2019: Wouter - Fix pythonmod include and sockaddr_un ifdefs for compile on Windows, and for libunbound. diff --git a/services/modstack.c b/services/modstack.c index 136245a96..c6e5fd01e 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -113,7 +113,9 @@ modstack_config(struct module_stack* stack, const char* module_conf) for(i=0; inum; i++) { stack->mod[i] = module_factory(&module_conf); if(!stack->mod[i]) { - log_err("Unknown value for next module: '%s'", + log_err("Unknown value in module-config, module: '%s'." + " This module is not present (not compiled in)," + " See the list of linked modules with unbound -h", module_conf); return 0; } From 5b162ead923f259d4c7d8ab5d0f82c01b61117b6 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 21 Feb 2019 09:48:38 +0000 Subject: [PATCH 092/117] - In example.conf explain where to put cachedb module in module-config. git-svn-id: file:///svn/unbound/trunk@5120 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + doc/example.conf.in | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 258d3fd10..94c6ed2d1 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 21 February 2019: Wouter - Fix the error for unknown module in module-config is understandable, and explains it was not compiled in and where to see the list. + - In example.conf explain where to put cachedb module in module-config. 20 February 2019: Wouter - Fix pythonmod include and sockaddr_un ifdefs for compile on diff --git a/doc/example.conf.in b/doc/example.conf.in index 1c7165a2d..b33aaff0f 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -973,7 +973,7 @@ remote-control: # Enable external backend DB as auxiliary cache. Specify the backend name # (default is "testframe", which has no use other than for debugging and # testing) and backend-specific options. The 'cachedb' module must be -# included in module-config. +# included in module-config, just before the iterator module. # cachedb: # backend: "testframe" # # secret seed string to calculate hashed keys From 3599fd9c6007415a3e96db91014a97cee3e580eb Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 21 Feb 2019 10:03:11 +0000 Subject: [PATCH 093/117] - In man page and example config explain that most modules have to be listed at the start of module-config. git-svn-id: file:///svn/unbound/trunk@5121 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ doc/example.conf.in | 5 +++++ doc/unbound.conf.5.in | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 94c6ed2d1..40210c995 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Fix the error for unknown module in module-config is understandable, and explains it was not compiled in and where to see the list. - In example.conf explain where to put cachedb module in module-config. + - In man page and example config explain that most modules have to + be listed at the start of module-config. 20 February 2019: Wouter - Fix pythonmod include and sockaddr_un ifdefs for compile on diff --git a/doc/example.conf.in b/doc/example.conf.in index b33aaff0f..d09e5a793 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -475,6 +475,9 @@ server: # module configuration of the server. A string with identifiers # separated by spaces. Syntax: "[dns64] [validator] iterator" + # most modules have to be listed at the beginning of the line, + # except cachedb(just before iterator), and python (at the beginning, + # or, just before the iterator). # module-config: "validator iterator" # File with trusted keys, kept uptodate using RFC5011 probes, @@ -823,6 +826,8 @@ server: # Python config section. To enable: # o use --with-pythonmodule to configure before compiling. # o list python in the module-config string (above) to enable. +# It can be at the start, it gets validated results, or just before +# the iterator and process before DNSSEC validation. # o and give a python-script to run. python: # Script file to load diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 98650d207..3efdb9216 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -932,6 +932,10 @@ The ordering of the modules is important. You must also set trust\-anchors for validation to be useful. The default is "validator iterator". When the server is built with 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. .TP .B trust\-anchor\-file: \fI File with trusted keys for validation. Both DS and DNSKEY entries can appear From 225534e5ab22d16ab32fa1011733f3c69c7b28ba Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 25 Feb 2019 15:48:27 +0000 Subject: [PATCH 094/117] - Fix #4227: pair event del and add for libevent for tcp_req_info. git-svn-id: file:///svn/unbound/trunk@5122 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ services/listen_dnsport.c | 4 ++++ util/netevent.c | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 40210c995..89c0eb3df 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +25 February 2019: Wouter + - Fix #4227: pair event del and add for libevent for tcp_req_info. + 21 February 2019: Wouter - Fix the error for unknown module in module-config is understandable, and explains it was not compiled in and where to see the list. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 664072aa4..e74d1abcf 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1636,10 +1636,12 @@ tcp_req_info_setup_listen(struct tcp_req_info* req) if(wr) { req->cp->tcp_is_reading = 0; + comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, req->cp->tcp_timeout_msec); } else if(rd) { req->cp->tcp_is_reading = 1; + comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, req->cp->tcp_timeout_msec); /* and also read it (from SSL stack buffers), so @@ -1647,6 +1649,7 @@ tcp_req_info_setup_listen(struct tcp_req_info* req) * the TLS frame is sitting in the buffers. */ req->read_again = 1; } else { + comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, req->cp->tcp_timeout_msec); comm_point_listen_for_rw(req->cp, 0, 0); @@ -1759,6 +1762,7 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req) * clear to write to */ send_it: c->tcp_is_reading = 0; + comm_point_stop_listening(c); comm_point_start_listening(c, -1, c->tcp_timeout_msec); return; } diff --git a/util/netevent.c b/util/netevent.c index a507faf7e..f33e44058 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -989,10 +989,10 @@ tcp_callback_writer(struct comm_point* c) c->tcp_is_reading = 1; c->tcp_byte_count = 0; /* switch from listening(write) to listening(read) */ - comm_point_stop_listening(c); if(c->tcp_req_info) { tcp_req_info_handle_writedone(c->tcp_req_info); } else { + comm_point_stop_listening(c); comm_point_start_listening(c, -1, -1); } } @@ -1006,11 +1006,11 @@ tcp_callback_reader(struct comm_point* c) if(c->tcp_do_toggle_rw) c->tcp_is_reading = 0; c->tcp_byte_count = 0; - if(c->type == comm_tcp) - comm_point_stop_listening(c); if(c->tcp_req_info) { tcp_req_info_handle_readdone(c->tcp_req_info); } else { + if(c->type == comm_tcp) + comm_point_stop_listening(c); fptr_ok(fptr_whitelist_comm_point(c->callback)); if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { comm_point_start_listening(c, -1, c->tcp_timeout_msec); From beebe5ba0c2e14d5f6ca435e0036c5aceb0024ba Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 27 Feb 2019 06:56:21 +0000 Subject: [PATCH 095/117] - Fix #4229: Unbound man pages lack information, about access-control order and local zone tags, and elements in views. git-svn-id: file:///svn/unbound/trunk@5123 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ doc/unbound.conf.5.in | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 89c0eb3df..12634deb9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +27 February 2019: Wouter + - Fix #4229: Unbound man pages lack information, about access-control + order and local zone tags, and elements in views. + 25 February 2019: Wouter - Fix #4227: pair event del and add for libevent for tcp_req_info. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 3efdb9216..0567c4d34 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -546,6 +546,7 @@ classless network block. The action can be \fIdeny\fR, \fIrefuse\fR, \fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or \fIrefuse_non_local\fR. The most specific netblock match is used, if none match \fIdeny\fR is used. +The order of the access\-control statements therefore does not matter. .IP The action \fIdeny\fR stops queries from hosts from that netblock. .IP @@ -1367,7 +1368,8 @@ TTL can be inserted like this: "2001:DB8::4 7200 www.example.com" Assign tags to localzones. Tagged localzones will only be applied when the used access-control element has a matching tag. Tags must be defined in \fIdefine\-tags\fR. Enclose list of tags in quotes ("") and put spaces between -tags. +tags. When there are multiple tags it checks if the intersection of the +list of tags for the query and local\-zone\-tag is non-empty. .TP 5 .B local\-zone\-override: \fI Override the localzone type for queries from addresses matching netblock. @@ -1724,7 +1726,9 @@ data (eg. from the master servers). There may be multiple .B view: clauses. Each with a \fBname:\fR and zero or more \fBlocal\-zone\fR and -\fBlocal\-data\fR elements. View can be mapped to requests by specifying the +\fBlocal\-data\fR elements. Views can also contain view\-first, +response\-ip, response\-ip\-data and local\-data\-ptr elements. +View can be mapped to requests by specifying the view name in an \fBaccess\-control\-view\fR element. Options from matching views will override global options. Global options will be used if no matching view is found, or when the matching view does not have the option specified. From 33a814683b3e695d9e1a79dff0b645aec62d77eb Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 27 Feb 2019 06:58:10 +0000 Subject: [PATCH 096/117] - Fix #14: contrib/unbound.init: Fix wrong comparison judgment before copying. git-svn-id: file:///svn/unbound/trunk@5124 be551aaa-1e26-0410-a405-d3ace91eadb9 --- contrib/unbound.init | 4 ++-- doc/Changelog | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/contrib/unbound.init b/contrib/unbound.init index 747f94e93..cccadeccf 100644 --- a/contrib/unbound.init +++ b/contrib/unbound.init @@ -39,13 +39,13 @@ start() { # setup root jail if [ -s /etc/localtime ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; - if [ ! -e ${rootdir}/etc/localtime ] || /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then + if [ ! -e ${rootdir}/etc/localtime ] || ! /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then cp -fp /etc/localtime ${rootdir}/etc/localtime fi; fi; if [ -s /etc/resolv.conf ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; - if [ ! -e ${rootdir}/etc/resolv.conf ] || /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then + if [ ! -e ${rootdir}/etc/resolv.conf ] || ! /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf fi; fi; diff --git a/doc/Changelog b/doc/Changelog index 12634deb9..65faf7420 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 27 February 2019: Wouter - Fix #4229: Unbound man pages lack information, about access-control order and local zone tags, and elements in views. + - Fix #14: contrib/unbound.init: Fix wrong comparison judgment + before copying. 25 February 2019: Wouter - Fix #4227: pair event del and add for libevent for tcp_req_info. From 7c1f9699d8b489d8cf65938b21fd30f84fbc1d13 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 27 Feb 2019 14:14:08 +0000 Subject: [PATCH 097/117] - Fix for python module on Windows, fix fopen. git-svn-id: file:///svn/unbound/trunk@5125 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + pythonmod/pythonmod.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 65faf7420..6e5b59662 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,7 @@ order and local zone tags, and elements in views. - Fix #14: contrib/unbound.init: Fix wrong comparison judgment before copying. + - Fix for python module on Windows, fix fopen. 25 February 2019: Wouter - Fix #4227: pair event del and add for libevent for tcp_req_info. diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 2f5bdf3b7..25e1bc08a 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -247,6 +247,9 @@ int pythonmod_init(struct module_env* env, int id) PyObject* py_init_arg, *res; PyGILState_STATE gil; int init_standard = 1; +#if PY_MAJOR_VERSION < 3 + PyObject* PyFileObject = NULL; +#endif struct pythonmod_env* pe = (struct pythonmod_env*)calloc(1, sizeof(struct pythonmod_env)); if (!pe) @@ -307,7 +310,15 @@ int pythonmod_init(struct module_env* env, int id) } /* Check Python file load */ - if ((script_py = fopen(pe->fname, "r")) == NULL) + /* uses python to open the file, this works on other platforms, + * eg. Windows, to open the file in the correct mode for python */ +#if PY_MAJOR_VERSION < 3 + PyObject* PyFileObject = PyFile_FromString(pe->fname, "r"); + script_py = PyFile_AsFile(PyFileObject, pe->fname, 1); +#else + script_py = _Py_fopen(pe->fname, "r"); +#endif + if (script_py == NULL) { log_err("pythonmod: can't open file %s for reading", pe->fname); PyGILState_Release(gil); From ba0cad0bc313c22e0e4fd237ba775b8ebaacb976 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 27 Feb 2019 14:22:55 +0000 Subject: [PATCH 098/117] Fixup for python 2 git-svn-id: file:///svn/unbound/trunk@5126 be551aaa-1e26-0410-a405-d3ace91eadb9 --- pythonmod/pythonmod.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 25e1bc08a..459ae1e8c 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -313,8 +313,8 @@ int pythonmod_init(struct module_env* env, int id) /* uses python to open the file, this works on other platforms, * eg. Windows, to open the file in the correct mode for python */ #if PY_MAJOR_VERSION < 3 - PyObject* PyFileObject = PyFile_FromString(pe->fname, "r"); - script_py = PyFile_AsFile(PyFileObject, pe->fname, 1); + PyFileObject = PyFile_FromString((char*)pe->fname, "r"); + script_py = PyFile_AsFile(PyFileObject); #else script_py = _Py_fopen(pe->fname, "r"); #endif From a62c1135fe8d0e1908b4057267c7ec8885331564 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 28 Feb 2019 09:12:54 +0000 Subject: [PATCH 099/117] - Remove memory leak on pythonmod python2 script file init. - Remove swig gcc8 python function cast warnings, they are ignored. git-svn-id: file:///svn/unbound/trunk@5127 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ libunbound/python/libunbound.i | 8 ++++++++ pythonmod/interface.i | 8 ++++++++ pythonmod/pythonmod.c | 4 ++++ 4 files changed, 24 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 6e5b59662..46b678acf 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +28 February 2019: Wouter + - Remove memory leak on pythonmod python2 script file init. + - Remove swig gcc8 python function cast warnings, they are ignored. + 27 February 2019: Wouter - Fix #4229: Unbound man pages lack information, about access-control order and local zone tags, and elements in views. diff --git a/libunbound/python/libunbound.i b/libunbound/python/libunbound.i index 4af75637c..6196a3979 100644 --- a/libunbound/python/libunbound.i +++ b/libunbound/python/libunbound.i @@ -33,8 +33,16 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ +%begin %{ +/* store state of warning output, restored at later pop */ +#pragma GCC diagnostic push +/* ignore gcc8 METH_NOARGS function cast warnings for swig function pointers */ +#pragma GCC diagnostic ignored "-Wcast-function-type" +%} %module unbound %{ +/* restore state of warning output, remove the functioncast ignore */ +#pragma GCC diagnostic pop #include #ifdef HAVE_SYS_SOCKET_H #include diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 9b5e15a4a..f9fd07b51 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -1,8 +1,16 @@ /* * interface.i: unbound python module */ +%begin %{ +/* store state of warning output, restored at later pop */ +#pragma GCC diagnostic push +/* ignore gcc8 METH_NOARGS function cast warnings for swig function pointers */ +#pragma GCC diagnostic ignored "-Wcast-function-type" +%} %module unboundmodule %{ +/* restore state of warning output, remove the functioncast ignore */ +#pragma GCC diagnostic pop /** * \file * This is the interface between the unbound server and a python module diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 459ae1e8c..9009a28da 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -354,7 +354,11 @@ int pythonmod_init(struct module_env* env, int id) PyGILState_Release(gil); return 0; } +#if PY_MAJOR_VERSION < 3 + Py_XDECREF(PyFileObject); +#else fclose(script_py); +#endif if ((pe->func_init = PyDict_GetItemString(pe->dict, "init_standard")) == NULL) { From a82c0eeece4482b3d7143f5b97a87116dc7d1a61 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 28 Feb 2019 09:56:45 +0000 Subject: [PATCH 100/117] - Print correct module that failed when module-config is wrong. git-svn-id: file:///svn/unbound/trunk@5128 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/modstack.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 46b678acf..9ff492836 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 28 February 2019: Wouter - Remove memory leak on pythonmod python2 script file init. - Remove swig gcc8 python function cast warnings, they are ignored. + - Print correct module that failed when module-config is wrong. 27 February 2019: Wouter - Fix #4229: Unbound man pages lack information, about access-control diff --git a/services/modstack.c b/services/modstack.c index c6e5fd01e..fb9c3f54e 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -113,10 +113,13 @@ modstack_config(struct module_stack* stack, const char* module_conf) for(i=0; inum; i++) { stack->mod[i] = module_factory(&module_conf); if(!stack->mod[i]) { + char md[256]; + snprintf(md, sizeof(md), "%s", module_conf); + if(strchr(md, ' ')) *(strchr(md, ' ')) = 0; log_err("Unknown value in module-config, module: '%s'." " This module is not present (not compiled in)," " See the list of linked modules with unbound -h", - module_conf); + md); return 0; } } From c79a99a577e067df04b3b95abf73e8944b646141 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 28 Feb 2019 12:06:04 +0000 Subject: [PATCH 101/117] Fix to account for tabs as well. git-svn-id: file:///svn/unbound/trunk@5129 be551aaa-1e26-0410-a405-d3ace91eadb9 --- services/modstack.c | 1 + 1 file changed, 1 insertion(+) diff --git a/services/modstack.c b/services/modstack.c index fb9c3f54e..05b949d1e 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -116,6 +116,7 @@ modstack_config(struct module_stack* stack, const char* module_conf) char md[256]; snprintf(md, sizeof(md), "%s", module_conf); if(strchr(md, ' ')) *(strchr(md, ' ')) = 0; + if(strchr(md, '\t')) *(strchr(md, '\t')) = 0; log_err("Unknown value in module-config, module: '%s'." " This module is not present (not compiled in)," " See the list of linked modules with unbound -h", From 16cc196bf28aec604ed2dae2b5af2ed82c8a58d6 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 1 Mar 2019 12:38:53 +0000 Subject: [PATCH 102/117] - output forwarder log in ssl_req_order test. git-svn-id: file:///svn/unbound/trunk@5130 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ testdata/ssl_req_order.tdir/ssl_req_order.post | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 9ff492836..ac7c2acde 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +1 March 2019: Wouter + - output forwarder log in ssl_req_order test. + 28 February 2019: Wouter - Remove memory leak on pythonmod python2 script file init. - Remove swig gcc8 python function cast warnings, they are ignored. diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.post b/testdata/ssl_req_order.tdir/ssl_req_order.post index bba50e309..45067e10f 100644 --- a/testdata/ssl_req_order.tdir/ssl_req_order.post +++ b/testdata/ssl_req_order.tdir/ssl_req_order.post @@ -9,3 +9,4 @@ kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log +cat fwd.log From 7105ea929374edc25b4530fd8ec6cbfdc364075d Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 5 Mar 2019 08:48:15 +0000 Subject: [PATCH 103/117] - Tag release 1.9.1rc1. git-svn-id: file:///svn/unbound/trunk@5132 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ac7c2acde..4bb341653 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +5 March 2019: Wouter + - Tag release 1.9.1rc1. + 1 March 2019: Wouter - output forwarder log in ssl_req_order test. From 8092cd6331f28d5af7ef0aa792ab7f18e51a53f3 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 7 Mar 2019 08:34:00 +0000 Subject: [PATCH 104/117] - Fix for #4233: guard use of NDEBUG, so that it can be passed in CFLAGS into configure. git-svn-id: file:///svn/unbound/trunk@5133 be551aaa-1e26-0410-a405-d3ace91eadb9 --- config.h.in | 2 ++ configure.ac | 2 ++ doc/Changelog | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/config.h.in b/config.h.in index f0eb7d6aa..7c3309683 100644 --- a/config.h.in +++ b/config.h.in @@ -966,7 +966,9 @@ #ifndef UNBOUND_DEBUG +# ifndef NDEBUG # define NDEBUG +# endif #endif /** Use small-ldns codebase */ diff --git a/configure.ac b/configure.ac index ff6f05ad7..8393e152a 100644 --- a/configure.ac +++ b/configure.ac @@ -1652,7 +1652,9 @@ AHX_CONFIG_EXT_FLAGS dnl includes [ #ifndef UNBOUND_DEBUG +# ifndef NDEBUG # define NDEBUG +# endif #endif /** Use small-ldns codebase */ diff --git a/doc/Changelog b/doc/Changelog index 4bb341653..43db79466 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +7 March 2019: Wouter + - Fix for #4233: guard use of NDEBUG, so that it can be passed in + CFLAGS into configure. + 5 March 2019: Wouter - Tag release 1.9.1rc1. From bfd0c5ec856b20f010d07c5559864fab08e532ea Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 12 Mar 2019 09:33:18 +0000 Subject: [PATCH 105/117] 1.9.1 on 12 March 2019. Trunk has 1.9.2 in development. git-svn-id: file:///svn/unbound/trunk@5135 be551aaa-1e26-0410-a405-d3ace91eadb9 --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- doc/Changelog | 3 ++- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/configure b/configure index 45a251285..b4c91f8d5 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.9.1. +# Generated by GNU Autoconf 2.69 for unbound 1.9.2. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.9.1' -PACKAGE_STRING='unbound 1.9.1' +PACKAGE_VERSION='1.9.2' +PACKAGE_STRING='unbound 1.9.2' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1440,7 +1440,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.9.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.9.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1505,7 +1505,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.9.1:";; + short | recursive ) echo "Configuration of unbound 1.9.2:";; esac cat <<\_ACEOF @@ -1722,7 +1722,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.9.1 +unbound configure 1.9.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2431,7 +2431,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.9.1, which was +It was created by unbound $as_me 1.9.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2783,11 +2783,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=9 -UNBOUND_VERSION_MICRO=1 +UNBOUND_VERSION_MICRO=2 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=1 +LIBUNBOUND_REVISION=2 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2856,6 +2856,7 @@ LIBUNBOUND_AGE=1 # 1.8.3 had 8:3:0 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls # 1.9.1 had 9:1:1 +# 1.9.2 had 9:2:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -21150,7 +21151,7 @@ _ACEOF -version=1.9.1 +version=1.9.2 date=`date +'%b %e, %Y'` @@ -21669,7 +21670,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.9.1, which was +This file was extended by unbound $as_me 1.9.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21735,7 +21736,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.9.1 +unbound config.status 1.9.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 8393e152a..ea1783b70 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],[9]) -m4_define([VERSION_MICRO],[1]) +m4_define([VERSION_MICRO],[2]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=1 +LIBUNBOUND_REVISION=2 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -87,6 +87,7 @@ LIBUNBOUND_AGE=1 # 1.8.3 had 8:3:0 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls # 1.9.1 had 9:1:1 +# 1.9.2 had 9:2: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 43db79466..82ac70831 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,7 +3,8 @@ CFLAGS into configure. 5 March 2019: Wouter - - Tag release 1.9.1rc1. + - Tag release 1.9.1rc1. Which became 1.9.1 on 12 March 2019. Trunk + has 1.9.2 in development. 1 March 2019: Wouter - output forwarder log in ssl_req_order test. From bb5251da66b3d059221db0a074d8cdf8f851910e Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 18 Mar 2019 08:41:39 +0000 Subject: [PATCH 106/117] - Add log message, at verbosity 4, that says the query is encrypted with TLS, if that is enabled for the query. git-svn-id: file:///svn/unbound/trunk@5136 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 ++++ services/outside_network.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 82ac70831..f6456534e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +18 March 2019: Wouter + - Add log message, at verbosity 4, that says the query is encrypted + with TLS, if that is enabled for the query. + 7 March 2019: Wouter - Fix for #4233: guard use of NDEBUG, so that it can be passed in CFLAGS into configure. diff --git a/services/outside_network.c b/services/outside_network.c index 16d63df43..3347c38e7 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -364,6 +364,8 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) comm_point_close(pend->c); return 0; } + verbose(VERB_ALGO, "the query is using TLS encryption, for %s", + (w->tls_auth_name?w->tls_auth_name:"an unauthenticated connection")); #ifdef USE_WINSOCK comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl); #endif @@ -404,6 +406,8 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) } 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; From ce0628ee552d9b5a38030265d428e666b601aa06 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 18 Mar 2019 09:26:06 +0000 Subject: [PATCH 107/117] - Fix #4239: set NOTIMPL when deny-any is enabled, for RFC8482. git-svn-id: file:///svn/unbound/trunk@5137 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/cache/dns.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index f6456534e..631073da2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 18 March 2019: Wouter - Add log message, at verbosity 4, that says the query is encrypted with TLS, if that is enabled for the query. + - Fix #4239: set NOTIMPL when deny-any is enabled, for RFC8482. 7 March 2019: Wouter - Fix for #4233: guard use of NDEBUG, so that it can be passed in diff --git a/services/cache/dns.c b/services/cache/dns.c index 47611ac5a..088efbcf8 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -728,6 +728,8 @@ fill_any(struct module_env* env, if(!msg) { return NULL; } + /* set NOTIMPL for RFC 8482 */ + msg->rep->flags |= LDNS_RCODE_NOTIMPL; msg->rep->security = sec_status_indeterminate; return msg; } From 83e2cade5b70de1d4d43f41bb27ffa67546726d1 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 19 Mar 2019 12:14:52 +0000 Subject: [PATCH 108/117] - add type CAA to libpyunbound (accessing libunbound from python). git-svn-id: file:///svn/unbound/trunk@5138 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ libunbound/python/libunbound.i | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 631073da2..6e09400b3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +19 March 2019: Wouter + - add type CAA to libpyunbound (accessing libunbound from python). + 18 March 2019: Wouter - Add log message, at verbosity 4, that says the query is encrypted with TLS, if that is enabled for the query. diff --git a/libunbound/python/libunbound.i b/libunbound/python/libunbound.i index 6196a3979..a2b361d4c 100644 --- a/libunbound/python/libunbound.i +++ b/libunbound/python/libunbound.i @@ -242,6 +242,7 @@ RR_TYPE_MAILA = 254, /** any type (wildcard) */ RR_TYPE_ANY = 255, + RR_TYPE_CAA = 257, /* RFC 4431, 5074, DNSSEC Lookaside Validation */ RR_TYPE_DLV = 32769, From 296f28e8d0a63218d372c5ac28762af83c1b1c87 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 21 Mar 2019 12:14:20 +0000 Subject: [PATCH 109/117] - Fix #4240: Fix whitespace cleanup in example.conf. git-svn-id: file:///svn/unbound/trunk@5139 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ doc/example.conf.in | 42 +++++++++++++++++++++--------------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 6e09400b3..7a07b999a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +21 March 2019: Wouter + - Fix #4240: Fix whitespace cleanup in example.conf. + 19 March 2019: Wouter - add type CAA to libpyunbound (accessing libunbound from python). diff --git a/doc/example.conf.in b/doc/example.conf.in index d09e5a793..c78156fe1 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -492,7 +492,7 @@ server: # trust anchor signaling sends a RFC8145 key tag query after priming. # trust-anchor-signaling: yes - + # Root key trust anchor sentinel (draft-ietf-dnsop-kskroll-sentinel) # root-key-sentinel: yes @@ -721,7 +721,7 @@ server: # cipher setting for TLSv1.2 # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" - # cipher setting for TLSv1.3 + # 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" # Add the secret file for TLS Session Ticket. @@ -793,7 +793,7 @@ server: # fast-server-permil: 0 # the number of servers that will be used in the fast server selection. # fast-server-num: 3 - + # Specific options for ipsecmod. unbound needs to be configured with # --enable-ipsecmod for these to take effect. # @@ -912,24 +912,24 @@ remote-control: # notifies. # auth-zone: # name: "." -# master: 199.9.14.201 # b.root-servers.net -# master: 192.33.4.12 # c.root-servers.net -# master: 199.7.91.13 # d.root-servers.net -# master: 192.5.5.241 # f.root-servers.net -# master: 192.112.36.4 # g.root-servers.net -# master: 193.0.14.129 # k.root-servers.net -# master: 192.0.47.132 # xfr.cjr.dns.icann.org -# master: 192.0.32.132 # xfr.lax.dns.icann.org -# master: 2001:500:200::b # b.root-servers.net -# master: 2001:500:2::c # c.root-servers.net -# master: 2001:500:2d::d # d.root-servers.net -# master: 2001:500:2f::f # f.root-servers.net -# master: 2001:500:12::d0d # g.root-servers.net -# master: 2001:7fd::1 # k.root-servers.net -# master: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org -# master: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org -# fallback-enabled: yes -# for-downstream: no +# master: 199.9.14.201 # b.root-servers.net +# master: 192.33.4.12 # c.root-servers.net +# master: 199.7.91.13 # d.root-servers.net +# master: 192.5.5.241 # f.root-servers.net +# master: 192.112.36.4 # g.root-servers.net +# master: 193.0.14.129 # k.root-servers.net +# master: 192.0.47.132 # xfr.cjr.dns.icann.org +# master: 192.0.32.132 # xfr.lax.dns.icann.org +# master: 2001:500:200::b # b.root-servers.net +# master: 2001:500:2::c # c.root-servers.net +# master: 2001:500:2d::d # d.root-servers.net +# master: 2001:500:2f::f # f.root-servers.net +# master: 2001:500:12::d0d # g.root-servers.net +# master: 2001:7fd::1 # k.root-servers.net +# master: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org +# master: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org +# fallback-enabled: yes +# for-downstream: no # for-upstream: yes # auth-zone: # name: "example.org" From b75c37252cdcd973d3e1dddfa51f4df90ff6d850 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 25 Mar 2019 08:47:14 +0000 Subject: [PATCH 110/117] - Fix that tls-session-ticket-keys: "" on its own in unbound.conf disables the tls session ticker key calls into the OpenSSL API. git-svn-id: file:///svn/unbound/trunk@5140 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/unbound.c | 3 ++- doc/Changelog | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/daemon/unbound.c b/daemon/unbound.c index 4a508c138..6cc8225f5 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -443,7 +443,8 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, } } #endif - if(cfg->tls_session_ticket_keys.first) { + if(cfg->tls_session_ticket_keys.first && + cfg->tls_session_ticket_keys.first->str[0] != 0) { if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys.first)) { fatal_exit("could not set session ticket SSL_CTX"); } diff --git a/doc/Changelog b/doc/Changelog index 7a07b999a..28ff7f89c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +25 March 2019: Wouter + - Fix that tls-session-ticket-keys: "" on its own in unbound.conf + disables the tls session ticker key calls into the OpenSSL API. + 21 March 2019: Wouter - Fix #4240: Fix whitespace cleanup in example.conf. From 78adebf8ecbe16e6368d3c13c67cd1c55fef7dfd Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 25 Mar 2019 08:51:17 +0000 Subject: [PATCH 111/117] - Fix crash if tls-servic-pem not filled in when necessary. git-svn-id: file:///svn/unbound/trunk@5141 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + util/net_help.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 28ff7f89c..c9d868a67 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 25 March 2019: Wouter - Fix that tls-session-ticket-keys: "" on its own in unbound.conf disables the tls session ticker key calls into the OpenSSL API. + - Fix crash if tls-servic-pem not filled in when necessary. 21 March 2019: Wouter - Fix #4240: Fix whitespace cleanup in example.conf. diff --git a/util/net_help.c b/util/net_help.c index 2b1be9246..a6c3fd5cc 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -802,6 +802,16 @@ void* listen_sslctx_create(char* key, char* pem, char* verifypem) log_crypto_err("could not SSL_CTX_new"); return NULL; } + if(!key || key[0] == 0) { + log_err("error: no tls-service-key file specified"); + SSL_CTX_free(ctx); + return NULL; + } + if(!pem || pem[0] == 0) { + log_err("error: no tls-service-pem file specified"); + SSL_CTX_free(ctx); + return NULL; + } if(!listen_sslctx_setup(ctx)) { SSL_CTX_free(ctx); return NULL; From 59570b04137e2ea123052d3f2a045a0e5de885d4 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 2 Apr 2019 12:21:41 +0000 Subject: [PATCH 112/117] - Fix auth-zone NSEC3 response for empty nonterminals with exact match nsec3 records. git-svn-id: file:///svn/unbound/trunk@5142 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 4 + services/authzone.c | 38 +++++- testdata/auth_nsec3_ent.rpl | 224 ++++++++++++++++++++++++++++++++++++ 3 files changed, 261 insertions(+), 5 deletions(-) create mode 100644 testdata/auth_nsec3_ent.rpl diff --git a/doc/Changelog b/doc/Changelog index c9d868a67..998b67a6f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +2 April 2019: Wouter + - Fix auth-zone NSEC3 response for empty nonterminals with exact + match nsec3 records. + 25 March 2019: Wouter - Fix that tls-session-ticket-keys: "" on its own in unbound.conf disables the tls session ticker key calls into the OpenSSL API. diff --git a/services/authzone.c b/services/authzone.c index a87c2274f..9a8afd6ff 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2646,6 +2646,19 @@ az_nsec3_findnode(struct auth_zone* z, uint8_t* hashnm, size_t hashnmlen) return node; } +/** Find exact match (or NULL) */ +static struct auth_data* +az_nsec3_find_exact_match(struct auth_zone* z, uint8_t* nm, size_t nmlen, + int algo, size_t iter, uint8_t* salt, size_t saltlen) +{ + uint8_t hname[LDNS_MAX_DOMAINLEN]; + size_t hlen = sizeof(hname); + if(!az_nsec3_hashname(z, hname, &hlen, nm, nmlen, algo, iter, + salt, saltlen)) + return NULL; + return az_nsec3_findnode(z, hname, hlen); +} + /** Find cover for hashed(nm, nmlen) (or NULL) */ static struct auth_data* az_nsec3_find_cover(struct auth_zone* z, uint8_t* nm, size_t nmlen, @@ -2746,6 +2759,7 @@ az_nsec3_insert(struct auth_zone* z, struct regional* region, * that is an exact match that should exist for it. * If that does not exist, a higher exact match + nxproof is enabled * (for some sort of opt-out empty nonterminal cases). + * nodataproof: search for exact match and include that instead. * ceproof: include ce proof NSEC3 (omitted for wildcard replies). * nxproof: include denial of the qname. * wcproof: include denial of wildcard (wildcard.ce). @@ -2753,7 +2767,8 @@ az_nsec3_insert(struct auth_zone* z, struct regional* region, static int az_add_nsec3_proof(struct auth_zone* z, struct regional* region, struct dns_msg* msg, uint8_t* cenm, size_t cenmlen, uint8_t* qname, - size_t qname_len, int ceproof, int nxproof, int wcproof) + size_t qname_len, int nodataproof, int ceproof, int nxproof, + int wcproof) { int algo; size_t iter, saltlen; @@ -2764,6 +2779,19 @@ az_add_nsec3_proof(struct auth_zone* z, struct regional* region, /* find parameters of nsec3 proof */ if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen)) return 1; /* no nsec3 */ + if(nodataproof) { + /* see if the node has a hash of itself for the nodata + * proof nsec3, this has to be an exact match nsec3. */ + struct auth_data* match; + match = az_nsec3_find_exact_match(z, qname, qname_len, algo, + iter, salt, saltlen); + if(match) { + if(!az_nsec3_insert(z, region, msg, match)) + return 0; + /* only nodata NSEC3 needed, no CE or others. */ + return 1; + } + } /* find ce that has an NSEC3 */ if(ceproof) { node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce, @@ -2916,7 +2944,7 @@ az_generate_notype_answer(struct auth_zone* z, struct regional* region, /* DNSSEC denial NSEC3 */ if(!az_add_nsec3_proof(z, region, msg, node->name, node->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 1, 0, 0)) + msg->qinfo.qname_len, 1, 1, 0, 0)) return 0; } return 1; @@ -2943,7 +2971,7 @@ az_generate_referral_answer(struct auth_zone* z, struct regional* region, } else { if(!az_add_nsec3_proof(z, region, msg, ce->name, ce->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 1, 0, 0)) + msg->qinfo.qname_len, 1, 1, 0, 0)) return 0; } } @@ -3019,7 +3047,7 @@ az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo, dname_remove_label(&wildup, &wilduplen); if(!az_add_nsec3_proof(z, region, msg, wildup, wilduplen, msg->qinfo.qname, - msg->qinfo.qname_len, 0, 1, 0)) + msg->qinfo.qname_len, 0, 0, 1, 0)) return 0; } @@ -3045,7 +3073,7 @@ az_generate_nxdomain_answer(struct auth_zone* z, struct regional* region, } else if(ce) { if(!az_add_nsec3_proof(z, region, msg, ce->name, ce->namelen, msg->qinfo.qname, - msg->qinfo.qname_len, 1, 1, 1)) + msg->qinfo.qname_len, 0, 1, 1, 1)) return 0; } return 1; diff --git a/testdata/auth_nsec3_ent.rpl b/testdata/auth_nsec3_ent.rpl new file mode 100644 index 000000000..5730c8d52 --- /dev/null +++ b/testdata/auth_nsec3_ent.rpl @@ -0,0 +1,224 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "unbound-auth-test.nlnetlabs.nl." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME unbound-auth-test.nlnetlabs.nl + ## this is the inline file /tmp/xxx.unbound-auth-test.nlnetlabs.nl + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS unbound-auth-test.nlnetlabs.nl +;; Zone: unbound-auth-test.nlnetlabs.nl. +; +unbound-auth-test.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1554201247 14400 3600 604800 3600 +unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG SOA 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. NLFcC2oet+HC+1dhT4D/2JJFIcMiRtTM81KwvT7u8ybF3iDE4bnyrILvQk8DsizpYKwk+D3J3tMC3TV5+//qFw== +; +unbound-auth-test.nlnetlabs.nl. 3600 IN NS ns.nlnetlabs.nl. +unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NS 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Gm0UF77ljiInG4/HZ6Tkzx7z9N45WwwmbBt9KxeN3z1BkdBLiy10Du71ZBFLP71b+USs1rv5SJQ0hteZFbl8sg== +unbound-auth-test.nlnetlabs.nl. 3600 IN DNSKEY 256 3 13 S3Da9HqpFj0pEbI8WXOdkvN3vgZ6qxNSz4XyKkmWWAG28kq5T+/lWp36DUDvnMI9wJNuixzUHtgZ6oZoAaVrPg== ;{id = 15486 (zsk), size = 256b} +unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 1cLFaDb6kP8KnRJujW1ieHUdS5Tgdv59TCZ+FloCRJMJBwQAow6UKAIY7HHlTb8IHTajyUrjlxX/dN8S/5VwuA== +unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3PARAM 1 0 1 - +unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3PARAM 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. GWgtJArNpfJ4ifoinUBUVRTlkk0CMemdozhMKY13dk3EQMP0jb4g49PcTAgEP2dBUs9efttQVQQpmFPyTGfN1w== +tvdhfml24jp7cott1qijj9812qu9ibh3.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - 41pcah2j3fr8k99gj5pveh4igrjfc871 NS SOA RRSIG DNSKEY NSEC3PARAM ;{ flags: -, from: unbound-auth-test.nlnetlabs.nl. to: b.b.unbound-auth-test.nlnetlabs.nl.} +tvdhfml24jp7cott1qijj9812qu9ibh3.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. DzwQTaZj4j29eHXEKllIFcq4yNWA7VMqkh8+gCrBO+GEek9+hGxL6ANsU0Hv6glyBmPDeYUZcy4xy0EEj1R4hQ== +; +;; Empty nonterminal: b.unbound-auth-test.nlnetlabs.nl. +apejmh1fqds9gir0nnsf4d5gtno10tg1.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - dbs0aj50410urbvt3ghfr644n7h06gs5 ;{ flags: -, from: b.unbound-auth-test.nlnetlabs.nl. to: c.b.unbound-auth-test.nlnetlabs.nl.} +apejmh1fqds9gir0nnsf4d5gtno10tg1.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. m9B0W8xDZF6ml/m8OujrZZBiF1O0wAeKciK/5FMT/hCjHR0hMrbXBPg/ZntpVJD/Pko2HcBvWKu87U721yTHyQ== +; +;; Empty nonterminal: a.b.unbound-auth-test.nlnetlabs.nl. +toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - tvdhfml24jp7cott1qijj9812qu9ibh3 ;{ flags: -, from: a.b.unbound-auth-test.nlnetlabs.nl. to: unbound-auth-test.nlnetlabs.nl.} +toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Jr1oPPs+DGBVV13n4gG4AGVFsleItluLbtCIyQDcYZEA+e5JMkrLzfW3rXqXaUSUauR4iEu5FmTfs4GTsumdUw== +; +*.a.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.a.b" +*.a.b.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG TXT 13 5 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. NrMUaNzZp88lXit/HLL/iDBHspDSfoM//K+/0VwUYRZjmVJQQHCHtHBGgR4NgrLi3ffvCAWq2LNGxDm+YMSl3g== +jrtu61ssgd18lfjglqrbbs5b2vmbh6cl.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s TXT RRSIG ;{ flags: -, from: *.a.b.unbound-auth-test.nlnetlabs.nl. to: *.c.b.unbound-auth-test.nlnetlabs.nl.} +jrtu61ssgd18lfjglqrbbs5b2vmbh6cl.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. kLIhE9+iz1OybJwXbtRJZst+Mk5u4OAtpZGWSwJUfqD6dXAk+h6msKAR18jpPeL7cCjXjIAKIv3x4oYRkl+uKw== +; +;; Empty nonterminal: b.b.unbound-auth-test.nlnetlabs.nl. +41pcah2j3fr8k99gj5pveh4igrjfc871.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - apejmh1fqds9gir0nnsf4d5gtno10tg1 ;{ flags: -, from: b.b.unbound-auth-test.nlnetlabs.nl. to: b.unbound-auth-test.nlnetlabs.nl.} +41pcah2j3fr8k99gj5pveh4igrjfc871.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. XlIjnuF313w0GXn6vymrAcsyuxZSaN6IShFjxQ5T2HUFePHBNvtRkL+TtMQZNlR8nTR3+MWcON0cOZIGjVCCjg== +; +*.b.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.b.b" +*.b.b.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG TXT 13 5 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. FkS3ceWpoHyOKaa8OtywIl148Bwo0vkzBd263vqYe0puhuRa6IvNEk5ERdwfWt9eNEq+6IlizPT/dYxA2fXYXA== +ft7dasbom0copm9e2ak9k151dj08kjfs.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - jrtu61ssgd18lfjglqrbbs5b2vmbh6cl TXT RRSIG ;{ flags: -, from: *.b.b.unbound-auth-test.nlnetlabs.nl. to: *.a.b.unbound-auth-test.nlnetlabs.nl.} +ft7dasbom0copm9e2ak9k151dj08kjfs.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 5QhLGohTRLQSGC8vstzDjqcwfrbOnLUG2OelSjvsZFy1smsWUxJBCQXQdx1+JX7xamZHlZESQtS+cELuZUqpvA== +; +;; Empty nonterminal: c.b.unbound-auth-test.nlnetlabs.nl. +dbs0aj50410urbvt3ghfr644n7h06gs5.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - ft7dasbom0copm9e2ak9k151dj08kjfs ;{ flags: -, from: c.b.unbound-auth-test.nlnetlabs.nl. to: *.b.b.unbound-auth-test.nlnetlabs.nl.} +dbs0aj50410urbvt3ghfr644n7h06gs5.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. hjk1foJWW68JK3O1Ktf0ZogoXVrMDw3mHVBBYTrpaBKX1gWR5icmJiOCYZWYx3z88PUnGkfH+kx4oDUjioqN+Q== +; +*.c.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.c.b" +*.c.b.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG TXT 13 5 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. b7rFR5tlx5Y5SQqNdYBtfD6DrkNx9h79GCmnZfWrUzRz+A256k2v08IPRJDK+WxEHuYHjfNnVWxjRr9M1OW2Iw== +k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - toqivctpt4pdcp5g19neqt19fvtgbgeu TXT RRSIG ;{ flags: -, from: *.c.b.unbound-auth-test.nlnetlabs.nl. to: a.b.unbound-auth-test.nlnetlabs.nl.} +k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 34BS1ajedCNdfXgUfxTyiAK1ichfFLshhJ3TnfplrUps0UsZaQLEG+EIlP4wTBtro2c6V8YCSmOuxuce4gYoDw== +; +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with NSEC3 empty nonterminal +; with exact match NSEC3 in existence (eg. not a CE-proof) + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +a.b.unbound-auth-test.nlnetlabs.nl. IN TXT +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA DO NOERROR +SECTION QUESTION +a.b.unbound-auth-test.nlnetlabs.nl. IN TXT +SECTION ANSWER +SECTION AUTHORITY +unbound-auth-test.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1554201247 14400 3600 604800 3600 +unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG SOA 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. NLFcC2oet+HC+1dhT4D/2JJFIcMiRtTM81KwvT7u8ybF3iDE4bnyrILv Qk8DsizpYKwk+D3J3tMC3TV5+//qFw== +toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - TVDHFML24JP7COTT1QIJJ9812QU9IBH3 +toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Jr1oPPs+DGBVV13n4gG4AGVFsleItluLbtCIyQDcYZEA+e5JMkrLzfW3 rXqXaUSUauR4iEu5FmTfs4GTsumdUw== +ENTRY_END + +SCENARIO_END From e3381436394f5959c715bcb3f9a810feb996584b Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 2 Apr 2019 12:28:20 +0000 Subject: [PATCH 113/117] - Fix for out of bounds integers, thanks to OSTIF audit. It is in allocation debug code. git-svn-id: file:///svn/unbound/trunk@5143 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ util/alloc.c | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 998b67a6f..6740be1e8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 2 April 2019: Wouter - Fix auth-zone NSEC3 response for empty nonterminals with exact match nsec3 records. + - Fix for out of bounds integers, thanks to OSTIF audit. It is in + allocation debug code. 25 March 2019: Wouter - Fix that tls-session-ticket-keys: "" on its own in unbound.conf diff --git a/util/alloc.c b/util/alloc.c index 908b1f423..7e9618931 100644 --- a/util/alloc.c +++ b/util/alloc.c @@ -376,6 +376,7 @@ void *unbound_stat_malloc(size_t size) { void* res; if(size == 0) size = 1; + log_assert(size <= SIZE_MAX-16); res = malloc(size+16); if(!res) return NULL; unbound_mem_alloc += size; @@ -398,6 +399,7 @@ void *unbound_stat_calloc(size_t nmemb, size_t size) if(nmemb != 0 && INT_MAX/nmemb < size) return NULL; /* integer overflow check */ s = (nmemb*size==0)?(size_t)1:nmemb*size; + log_assert(s <= SIZE_MAX-16); res = calloc(1, s+16); if(!res) return NULL; log_info("stat %p=calloc(%u, %u)", res+16, (unsigned)nmemb, (unsigned)size); @@ -447,6 +449,7 @@ void *unbound_stat_realloc(void *ptr, size_t size) /* nothing changes */ return ptr; } + log_assert(size <= SIZE_MAX-16); res = malloc(size+16); if(!res) return NULL; unbound_mem_alloc += size; @@ -521,7 +524,9 @@ void *unbound_stat_malloc_lite(size_t size, const char* file, int line, const char* func) { /* [prefix .. len .. actual data .. suffix] */ - void* res = malloc(size+lite_pad*2+sizeof(size_t)); + void* res; + log_assert(size <= SIZE_MAX-(lite_pad*2+sizeof(size_t))); + res = malloc(size+lite_pad*2+sizeof(size_t)); if(!res) return NULL; memmove(res, lite_pre, lite_pad); memmove(res+lite_pad, &size, sizeof(size_t)); @@ -538,6 +543,7 @@ void *unbound_stat_calloc_lite(size_t nmemb, size_t size, const char* file, if(nmemb != 0 && INT_MAX/nmemb < size) return NULL; /* integer overflow check */ req = nmemb * size; + log_assert(req <= SIZE_MAX-(lite_pad*2+sizeof(size_t))); res = malloc(req+lite_pad*2+sizeof(size_t)); if(!res) return NULL; memmove(res, lite_pre, lite_pad); From 8a0de6b519422e38c727ad5b69cab0569f02446f Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 2 Apr 2019 14:28:36 +0000 Subject: [PATCH 114/117] - Fix for auth zone nsec3 ent fix for wildcard nodata. git-svn-id: file:///svn/unbound/trunk@5144 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 1 + services/authzone.c | 15 +-------------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 6740be1e8..cabc53970 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,7 @@ match nsec3 records. - Fix for out of bounds integers, thanks to OSTIF audit. It is in allocation debug code. + - Fix for auth zone nsec3 ent fix for wildcard nodata. 25 March 2019: Wouter - Fix that tls-session-ticket-keys: "" on its own in unbound.conf diff --git a/services/authzone.c b/services/authzone.c index 9a8afd6ff..7d52b2aa6 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2646,19 +2646,6 @@ az_nsec3_findnode(struct auth_zone* z, uint8_t* hashnm, size_t hashnmlen) return node; } -/** Find exact match (or NULL) */ -static struct auth_data* -az_nsec3_find_exact_match(struct auth_zone* z, uint8_t* nm, size_t nmlen, - int algo, size_t iter, uint8_t* salt, size_t saltlen) -{ - uint8_t hname[LDNS_MAX_DOMAINLEN]; - size_t hlen = sizeof(hname); - if(!az_nsec3_hashname(z, hname, &hlen, nm, nmlen, algo, iter, - salt, saltlen)) - return NULL; - return az_nsec3_findnode(z, hname, hlen); -} - /** Find cover for hashed(nm, nmlen) (or NULL) */ static struct auth_data* az_nsec3_find_cover(struct auth_zone* z, uint8_t* nm, size_t nmlen, @@ -2783,7 +2770,7 @@ az_add_nsec3_proof(struct auth_zone* z, struct regional* region, /* see if the node has a hash of itself for the nodata * proof nsec3, this has to be an exact match nsec3. */ struct auth_data* match; - match = az_nsec3_find_exact_match(z, qname, qname_len, algo, + match = az_nsec3_find_exact(z, qname, qname_len, algo, iter, salt, saltlen); if(match) { if(!az_nsec3_insert(z, region, msg, match)) From 937523285a5085bbb3987e5396f27d1957b45352 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 3 Apr 2019 05:32:28 +0000 Subject: [PATCH 115/117] - Move goto label in answer_from_cache to the end of the function where it is more visible. git-svn-id: file:///svn/unbound/trunk@5145 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/worker.c | 10 ++++++---- doc/Changelog | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 433b96fd5..fc93817a0 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -660,10 +660,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, if(!reply_check_cname_chain(qinfo, rep)) { /* cname chain invalid, redo iterator steps */ verbose(VERB_ALGO, "Cache reply: cname chain broken"); - bail_out: - rrset_array_unlock_touch(worker->env.rrset_cache, - worker->scratchpad, rep->ref, rep->rrset_count); - return 0; + goto bail_out; } } /* check security status of the cached answer */ @@ -758,6 +755,11 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, } /* go and return this buffer to the client */ return 1; + +bail_out: + rrset_array_unlock_touch(worker->env.rrset_cache, + worker->scratchpad, rep->ref, rep->rrset_count); + return 0; } /** Reply to client and perform prefetch to keep cache up to date. diff --git a/doc/Changelog b/doc/Changelog index cabc53970..c5ab7502b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +3 April 2019: Wouter + - Move goto label in answer_from_cache to the end of the function + where it is more visible. + 2 April 2019: Wouter - Fix auth-zone NSEC3 response for empty nonterminals with exact match nsec3 records. From ce8167a3bbcd89cd5ab556aa40a7d48d26ee6bef Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 3 Apr 2019 06:36:40 +0000 Subject: [PATCH 116/117] - Fix auth-zone NSEC3 response for wildcard nodata answers, include the closest encloser in the answer. git-svn-id: file:///svn/unbound/trunk@5146 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ services/authzone.c | 7 ++++++- testdata/auth_nsec3_wild.rpl | 27 +++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index c5ab7502b..c5829031e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 3 April 2019: Wouter - Move goto label in answer_from_cache to the end of the function where it is more visible. + - Fix auth-zone NSEC3 response for wildcard nodata answers, + include the closest encloser in the answer. 2 April 2019: Wouter - Fix auth-zone NSEC3 response for empty nonterminals with exact diff --git a/services/authzone.c b/services/authzone.c index 7d52b2aa6..d62467c9f 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2997,6 +2997,7 @@ az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo, struct auth_data* wildcard, struct auth_data* node) { struct auth_rrset* rrset, *nsec; + int insert_ce = 0; if((rrset=az_domain_rrset(wildcard, qinfo->qtype)) != NULL) { /* wildcard has type, add it */ if(!msg_add_rrset_an(z, region, msg, wildcard, rrset)) @@ -3023,6 +3024,10 @@ az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo, /* call other notype routine for dnssec notype denials */ if(!az_generate_notype_answer(z, region, msg, wildcard)) return 0; + /* because the notype, there is no positive data with an + * RRSIG that indicates the wildcard position. Thus the + * wildcard qname denial needs to have a CE nsec3. */ + insert_ce = 1; } /* ce and node for dnssec denial of wildcard original name */ @@ -3034,7 +3039,7 @@ az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo, dname_remove_label(&wildup, &wilduplen); if(!az_add_nsec3_proof(z, region, msg, wildup, wilduplen, msg->qinfo.qname, - msg->qinfo.qname_len, 0, 0, 1, 0)) + msg->qinfo.qname_len, 0, insert_ce, 1, 0)) return 0; } diff --git a/testdata/auth_nsec3_wild.rpl b/testdata/auth_nsec3_wild.rpl index acfe63bae..1aeeebacc 100644 --- a/testdata/auth_nsec3_wild.rpl +++ b/testdata/auth_nsec3_wild.rpl @@ -200,4 +200,31 @@ i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= ENTRY_END +; Check that the reply for a wildcard nodata answer contains the NSEC3s. +; qname denial NSEC3, closest encloser NSEC3, and type bitmap NSEC3. +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +something.a.b.test-ns-signed.dev.internet.nl. IN AAAA +ENTRY_END + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA DO NOERROR +SECTION QUESTION +something.a.b.test-ns-signed.dev.internet.nl. IN AAAA +SECTION ANSWER +SECTION AUTHORITY +test-ns-signed.dev.internet.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 4 14400 3600 604800 3600 +test-ns-signed.dev.internet.nl. 3600 IN RRSIG SOA 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. ybb0Hc7NC+QOFEEv4cX2+Umlk+miiOAHmeP2Uwvg6lqfxkk+3g7yWBEKMinXjLKz0odWZ6fki6M/3yBPQX8SV0OCRY5gYvAHAjbxAIHozIM+5iwOkRQhNF1DRgQ3BLjL93f6T5e5Z4y1812iOpu4GYswXW/UTOZACXz2UiaCPAg= ;{id = 32784} +7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 93stp7o7i5n9gb83uu7vv6h8qltk14ig TXT RRSIG +7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. gtxoiTa3FRUqoRLvkWSxmWQ+DfijVd26gpKH3+GmGIcNB/sr/Cf8kERRwVVHvgzYIcvdJcys5b2LUXnZJwcdAlx7efZPWgNZzWxJrw6ES25LCWJOrp31isWn9FlAZGIbnpyEXxD2apBSmtyPnKbTgU6lHHS9jrsYHu4G8Zouv3k= ;{id = 32784} +fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv +fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. WIb3ISP1nlafbyWoWa4z7sG5IS+V86PyvEMHdD/64hgsFkrCu483XK7VNnBz28SL/631JXA1R19O+UxeWhTUyctp8QSt6cEZcMPY8b7yG97rNFNvhSw75rSXXt+JwgIYHPHQV5oqPtVmEpQM5SfJd+hs+Nn1bJcWB3UaESNNAMQ= ;{id = 32784} +i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - kl94uofq16t2vlq0bmampf6e4o9k5hbi A AAAA RRSIG +i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= ;{id = 32784} +ENTRY_END + SCENARIO_END From a777329b7f3a501d6250a12ccbaa062fec1a814d Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 4 Apr 2019 14:28:39 +0000 Subject: [PATCH 117/117] - Fix spelling error in log output for event method. git-svn-id: file:///svn/unbound/trunk@5147 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 3 +++ util/netevent.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index c5829031e..2c76f7a2e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +4 April 2019: Wouter + - Fix spelling error in log output for event method. + 3 April 2019: Wouter - Move goto label in answer_from_cache to the end of the function where it is more visible. diff --git a/util/netevent.c b/util/netevent.c index f33e44058..5d9422836 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -178,7 +178,7 @@ comm_base_create(int sigs) } ub_comm_base_now(b); ub_get_event_sys(b->eb->base, &evnm, &evsys, &evmethod); - verbose(VERB_ALGO, "%s %s user %s method.", evnm, evsys, evmethod); + verbose(VERB_ALGO, "%s %s uses %s method.", evnm, evsys, evmethod); return b; }