diff --git a/Makefile.in b/Makefile.in index 690a757ab..b640af006 100644 --- a/Makefile.in +++ b/Makefile.in @@ -248,6 +248,7 @@ DNSTAP_SOCKET_SRC=dnstap/unbound-dnstap-socket.c DNSTAP_SOCKET_OBJ=unbound-dnstap-socket.lo DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) $(COMMON_OBJ) \ $(COMPAT_OBJ) $(SLDNS_OBJ) +DNSTAP_SOCKET_TESTBIN=@DNSTAP_SOCKET_TESTBIN@ LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo @@ -323,7 +324,7 @@ rsrc_unbound_checkconf.o: $(srcdir)/winrc/rsrc_unbound_checkconf.rc config.h TEST_BIN=asynclook$(EXEEXT) delayer$(EXEEXT) \ lock-verify$(EXEEXT) memstats$(EXEEXT) perf$(EXEEXT) \ petal$(EXEEXT) pktview$(EXEEXT) streamtcp$(EXEEXT) \ - unbound-dnstap-socket$(EXEEXT) dohclient$(EXEEXT) \ + $(DNSTAP_SOCKET_TESTBIN) dohclient$(EXEEXT) \ testbound$(EXEEXT) unittest$(EXEEXT) tests: all $(TEST_BIN) @@ -349,10 +350,10 @@ unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) @@ -370,37 +371,37 @@ anchor-update$(EXEEXT): $(ANCHORUPD_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ANCHORUPD_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) unittest$(EXEEXT): $(UNITTEST_OBJ_LINK) - $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) testbound$(EXEEXT): $(TESTBOUND_OBJ_LINK) - $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ_LINK) - $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) petal$(EXEEXT): $(PETAL_OBJ_LINK) $(LINK) -o $@ $(PETAL_OBJ_LINK) $(SSLLIB) $(LIBS) pktview$(EXEEXT): $(PKTVIEW_OBJ_LINK) - $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK) - $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) - $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) dohclient$(EXEEXT): $(DOHCLIENT_OBJ_LINK) - $(LINK) -o $@ $(DOHCLIENT_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(DOHCLIENT_OBJ_LINK) $(SSLLIB) $(LIBS) perf$(EXEEXT): $(PERF_OBJ_LINK) - $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) delayer$(EXEEXT): $(DELAYER_OBJ_LINK) - $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) signit$(EXEEXT): testcode/signit.c $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ -o $@ testcode/signit.c $(LDFLAGS) -lldns $(SSLLIB) $(LIBS) @@ -423,12 +424,13 @@ dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) - $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) + $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h dnstap_fstrm.lo dnstap_fstrm.o: $(srcdir)/dnstap/dnstap_fstrm.c config.h $(srcdir)/dnstap/dnstap_fstrm.h unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h $(srcdir)/dnstap/dtstream.h +dynlibmod.lo dynlibdmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.h # dnscrypt dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \ @@ -826,13 +828,16 @@ modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/service $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ - $(srcdir)/ipset/ipset.h $(srcdir)/dynlibmod/dynlibmod.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ + $(PYTHONMOD_HEADER) $(DYNLIBMOD_HEADER) $(srcdir)/cachedb/cachedb.h \ + $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ @@ -863,7 +868,8 @@ outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c confi $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ - $(srcdir)/dnstap/dnstap.h + $(srcdir)/util/edns.h $(srcdir)/dnstap/dnstap.h \ + alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ @@ -884,7 +890,8 @@ config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/ut $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/edns-subnet/edns-subnet.h \ + $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \ @@ -913,38 +920,31 @@ authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/service $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h $(srcdir)/validator/val_nsec3.h \ - $(srcdir)/validator/val_secalgo.h + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.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/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ - $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \ - $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ - $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ - $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \ - $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h \ - $(srcdir)/dynlibmod/dynlibmod.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ + $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h $(PYTHONMOD_HEADER) $(DYNLIBMOD_HEADER) \ + $(srcdir)/cachedb/cachedb.h $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h $(srcdir)/dnstap/dtstream.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h -mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.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/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h +mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h @@ -957,12 +957,14 @@ netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/neteve $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.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 \ $(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)/util/config_file.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.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 \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ @@ -978,11 +980,11 @@ 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/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 +edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/config_file.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/regional.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/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 \ $(srcdir)/util/log.h $(srcdir)/util/net_help.h @@ -1016,7 +1018,8 @@ tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/u $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/util/tube.h \ + ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ @@ -1026,7 +1029,8 @@ ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -1039,7 +1043,8 @@ autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/val $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h + $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h \ + val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ @@ -1069,11 +1074,13 @@ val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/ val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h -val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ + +val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ + $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ @@ -1091,15 +1098,17 @@ val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/valida val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/sldns/sbuffer.h \ + val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \ - $(srcdir)/sldns/wire2str.h + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ + val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ @@ -1120,15 +1129,43 @@ dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(src $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h -edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h -subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h +edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h +subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h $(srcdir)/edns-subnet/subnetmod.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h \ + $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ + $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h $(srcdir)/util/regional.h \ + $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h -subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h -cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h -redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h +subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ + $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h +cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/cachedb/redis.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/data/msgencode.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_secalgo.h \ + $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h +redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h $(srcdir)/cachedb/redis.h $(srcdir)/cachedb/cachedb.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h \ + $(srcdir)/sldns/sbuffer.h respip.lo respip.o: $(srcdir)/respip/respip.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 $(srcdir)/util/data/packed_rrset.h \ @@ -1143,31 +1180,40 @@ checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/u $(srcdir)/testcode/checklocks.h dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/dnstap/dnstap.h \ - dnstap/dnstap.pb-c.h + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h dnstap/dnstap.pb-c.h dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ -dynlibmod.lo dynlibmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.h \ +dnstap_fstrm.lo dnstap_fstrm.o: $(srcdir)/dnstap/dnstap_fstrm.c config.h $(srcdir)/dnstap/dnstap_fstrm.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h +dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/dnstap/dnstap_fstrm.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h \ + $(srcdir)/util/net_help.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/sldns/sbuffer.h \ + +ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h\ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h -dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/storage/lookup3.h -ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h +ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \ + $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \ + $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h -ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h + $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h @@ -1176,7 +1222,8 @@ unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname.c config.h $(srcdir)/util $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir)/testcode/unitmain.h \ $(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 \ +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/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 \ @@ -1184,7 +1231,8 @@ unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h $(srcdir)/sldns/r $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/outside_network.h unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.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/data/msgreply.h \ @@ -1216,8 +1264,14 @@ testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcod unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/parseutil.h -unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h unitzonemd.lo unitzonemd.o: $(srcdir)/testcode/unitzonemd.c config.h $(srcdir)/services/authzone.h +unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.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)/testcode/unitmain.h $(srcdir)/edns-subnet/addrtree.h \ + $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h \ + $(srcdir)/edns-subnet/edns-subnet.h unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ @@ -1234,40 +1288,43 @@ acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/ac $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.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)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h -cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon/cachedump.h \ - $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ - $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h \ - $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ +cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h \ + $(srcdir)/daemon/cachedump.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ - $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/str2wire.h +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h \ + $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ + $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/edns.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/keyraw.h -remote.lo remote.o: $(srcdir)/daemon/remote.c config.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ +remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \ + $(srcdir)/daemon/remote.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ $(srcdir)/services/modstack.h $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ @@ -1292,19 +1349,21 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(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/rtt.h \ - $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h + $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h $(srcdir)/edns-subnet/subnetmod.h \ + $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.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 $(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)/services/rpz.h $(srcdir)/services/localzone.h \ - $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/ub_event.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)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ @@ -1312,23 +1371,24 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ - $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ - $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ - $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ - $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h \ - $(srcdir)/dnstap/dtstream.h + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \ + $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ + $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h \ + $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/util/shm_side/shm_main.h $(srcdir)/dnstap/dtstream.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ - $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c \ - $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/remote.h \ + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/util/log.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ @@ -1347,34 +1407,35 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ - $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ - $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ - $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ - $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h \ - $(srcdir)/dnstap/dtstream.h + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \ + $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ + $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h \ + $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/util/shm_side/shm_main.h $(srcdir)/dnstap/dtstream.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.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)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ - $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h \ + $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ + $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/edns.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ @@ -1392,7 +1453,9 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(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/rtt.h \ - $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h + $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h $(srcdir)/edns-subnet/subnetmod.h \ + $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.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 \ @@ -1402,13 +1465,14 @@ fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/t $(srcdir)/util/net_help.h $(srcdir)/util/log.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/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/edns.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h lock_verify.lo lock_verify.o: $(srcdir)/testcode/lock_verify.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ @@ -1443,7 +1507,8 @@ unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ + $(PYTHONMOD_HEADER) $(srcdir)/edns-subnet/subnet-whitelist.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ @@ -1464,76 +1529,83 @@ context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbou $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h + $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/util/edns.h libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/libworker.h \ $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \ - $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h $(srcdir)/util/edns.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h -libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h $(srcdir)/libunbound/libworker.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ - $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h \ - $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ - $(srcdir)/sldns/str2wire.h +libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \ + $(srcdir)/libunbound/libworker.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/util/storage/lookup3.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/str2wire.h unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ + asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h \ + streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h + $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ + perf.lo perf.o: $(srcdir)/testcode/perf.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h delayer.lo delayer.o: $(srcdir)/testcode/delayer.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h -unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h $(srcdir)/util/log.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h $(srcdir)/util/shm_side/shm_main.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ +unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h \ + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/shm_side/shm_main.h $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/respip/respip.h unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h -petal.lo petal.o: $(srcdir)/testcode/petal.c config.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \ + +petal.lo petal.o: $(srcdir)/testcode/petal.c config.h \ + unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h \ $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/dnstap/dnstap_fstrm.h \ $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h \ + dnstap/dnstap.pb-c.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \ - $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h \ + win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc.h $(srcdir)/winrc/w_inst.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h \ @@ -1541,8 +1613,8 @@ win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h \ - $(srcdir)/util/net_help.h + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \ $(srcdir)/winrc/w_inst.h @@ -1550,12 +1622,14 @@ unbound-service-remove.lo unbound-service-remove.o: $(srcdir)/winrc/unbound-serv $(srcdir)/winrc/w_inst.h anchor-update.lo anchor-update.o: $(srcdir)/winrc/anchor-update.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/wire2str.h -keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/rrdef.h +keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/sldns/rrdef.h \ + sbuffer.lo sbuffer.o: $(srcdir)/sldns/sbuffer.c config.h $(srcdir)/sldns/sbuffer.h wire2str.lo wire2str.o: $(srcdir)/sldns/wire2str.c config.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/keyraw.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h + $(srcdir)/sldns/keyraw.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h parse.lo parse.o: $(srcdir)/sldns/parse.c config.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/sbuffer.h parseutil.lo parseutil.o: $(srcdir)/sldns/parseutil.c config.h $(srcdir)/sldns/parseutil.h @@ -1563,9 +1637,11 @@ rrdef.lo rrdef.o: $(srcdir)/sldns/rrdef.c config.h $(srcdir)/sldns/rrdef.h $(src str2wire.lo str2wire.o: $(srcdir)/sldns/str2wire.c config.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h dohclient.lo dohclient.o: $(srcdir)/testcode/dohclient.c config.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.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/net_help.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/util/data/msgencode.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/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/util/net_help.h \ + ctime_r.lo ctime_r.o: $(srcdir)/compat/ctime_r.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h fake-rfc2553.lo fake-rfc2553.o: $(srcdir)/compat/fake-rfc2553.c $(srcdir)/compat/fake-rfc2553.h config.h gmtime_r.lo gmtime_r.o: $(srcdir)/compat/gmtime_r.c config.h @@ -1580,9 +1656,11 @@ strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h getentropy_freebsd.lo getentropy_freebsd.o: $(srcdir)/compat/getentropy_freebsd.c -getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h +getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h \ + getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c -getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h +getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h \ + getentropy_win.lo getentropy_win.o: $(srcdir)/compat/getentropy_win.c explicit_bzero.lo explicit_bzero.o: $(srcdir)/compat/explicit_bzero.c config.h arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h $(srcdir)/compat/chacha_private.h diff --git a/acx_nlnetlabs.m4 b/acx_nlnetlabs.m4 index 31e43d67e..d33352f17 100644 --- a/acx_nlnetlabs.m4 +++ b/acx_nlnetlabs.m4 @@ -2,7 +2,9 @@ # Copyright 2009, Wouter Wijngaards, NLnet Labs. # BSD licensed. # -# Version 35 +# Version 37 +# 2021-01-05 fix defun for aclocal +# 2021-01-05 autoconf 2.70 autoupdate and fixes, no AC_TRY_COMPILE # 2020-08-24 Use EVP_sha256 instead of HMAC_Update (for openssl-3.0.0). # 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0. # 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0). @@ -447,15 +449,12 @@ AC_DEFUN([ACX_CHECK_FORMAT_ATTRIBUTE], AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute) AC_CACHE_VAL(ac_cv_c_format_attribute, [ac_cv_c_format_attribute=no -AC_TRY_COMPILE( -[#include +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include void f (char *format, ...) __attribute__ ((format (printf, 1, 2))); void (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2))); -], [ +]], [[ f ("%s", "str"); -], -[ac_cv_c_format_attribute="yes"], -[ac_cv_c_format_attribute="no"]) +]])],[ac_cv_c_format_attribute="yes"],[ac_cv_c_format_attribute="no"]) ]) AC_MSG_RESULT($ac_cv_c_format_attribute) @@ -484,14 +483,11 @@ AC_DEFUN([ACX_CHECK_UNUSED_ATTRIBUTE], AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute) AC_CACHE_VAL(ac_cv_c_unused_attribute, [ac_cv_c_unused_attribute=no -AC_TRY_COMPILE( -[#include +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include void f (char *u __attribute__((unused))); -], [ +]], [[ f ("x"); -], -[ac_cv_c_unused_attribute="yes"], -[ac_cv_c_unused_attribute="no"]) +]])],[ac_cv_c_unused_attribute="yes"],[ac_cv_c_unused_attribute="no"]) ]) dnl Setup ATTR_UNUSED config.h parts. @@ -548,7 +544,7 @@ dnl as a requirement so that is gets called before LIBTOOL dnl because libtools 'AC_REQUIRE' names are right after this one, before dnl this function contents. AC_REQUIRE([ACX_LIBTOOL_C_PRE]) -AC_PROG_LIBTOOL +LT_INIT ]) dnl Detect if u_char type is defined, otherwise define it. @@ -677,14 +673,14 @@ AC_DEFUN([ACX_SSL_CHECKS], [ AC_MSG_CHECKING([for EVP_sha256 in -lcrypto]) LIBS="$LIBS -lcrypto" LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto" - AC_TRY_LINK(, [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); - ], [ + ]])],[ AC_MSG_RESULT(yes) AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) - ], [ + ],[ AC_MSG_RESULT(no) # check if -lwsock32 or -lgdi32 are needed. BAKLIBS="$LIBS" @@ -692,10 +688,10 @@ AC_DEFUN([ACX_SSL_CHECKS], [ LIBS="$LIBS -lgdi32 -lws2_32" LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" AC_MSG_CHECKING([if -lcrypto needs -lgdi32]) - AC_TRY_LINK([], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); - ],[ + ]])],[ AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) AC_MSG_RESULT(yes) @@ -706,10 +702,10 @@ AC_DEFUN([ACX_SSL_CHECKS], [ LIBS="$LIBS -ldl" LIBSSL_LIBS="$LIBSSL_LIBS -ldl" AC_MSG_CHECKING([if -lcrypto needs -ldl]) - AC_TRY_LINK([], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); - ],[ + ]])],[ AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) AC_MSG_RESULT(yes) @@ -720,10 +716,10 @@ AC_DEFUN([ACX_SSL_CHECKS], [ LIBS="$LIBS -ldl -pthread" LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread" AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread]) - AC_TRY_LINK([], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); - ],[ + ]])],[ AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) AC_MSG_RESULT(yes) @@ -750,8 +746,7 @@ dnl Checks main header files of SSL. dnl AC_DEFUN([ACX_WITH_SSL], [ -AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname], - [enable SSL (will check /usr/local/ssl +AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[ ],[ withval="yes" @@ -769,8 +764,7 @@ dnl Checks main header files of SSL. dnl AC_DEFUN([ACX_WITH_SSL_OPTIONAL], [ -AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname], - [enable SSL (will check /usr/local/ssl +AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[ ],[ withval="yes" @@ -1062,7 +1056,7 @@ dnl defines MKDIR_HAS_ONE_ARG AC_DEFUN([ACX_MKDIR_ONE_ARG], [ AC_MSG_CHECKING([whether mkdir has one arg]) -AC_TRY_COMPILE([ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include #ifdef HAVE_WINSOCK2_H @@ -1071,14 +1065,12 @@ AC_TRY_COMPILE([ #ifdef HAVE_SYS_STAT_H #include #endif -], [ +]], [[ (void)mkdir("directory"); -], -AC_MSG_RESULT(yes) +]])],[AC_MSG_RESULT(yes) AC_DEFINE(MKDIR_HAS_ONE_ARG, 1, [Define if mkdir has one argument.]) -, -AC_MSG_RESULT(no) -) +],[AC_MSG_RESULT(no) +]) ])dnl end of ACX_MKDIR_ONE_ARG dnl Check for ioctlsocket function. works on mingw32 too. diff --git a/acx_python.m4 b/acx_python.m4 index a84daa035..767db5b65 100644 --- a/acx_python.m4 +++ b/acx_python.m4 @@ -85,11 +85,11 @@ $ac_distutils_result]) LIBS="$LIBS $PYTHON_LDFLAGS" CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include - ],[ + ]],[[ Py_Initialize(); - ],[pythonexists=yes],[pythonexists=no]) + ]])],[pythonexists=yes],[pythonexists=no]) AC_MSG_RESULT([$pythonexists]) diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index eed4d5fd9..e948a6b0d 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -465,6 +465,7 @@ packed_rrset_ttl_subtract(struct packed_rrset_data* data, time_t subtract) data->rr_ttl[i] -= subtract; else data->rr_ttl[i] = 0; } + data->ttl_add = (subtract < data->ttl_add) ? (data->ttl_add - subtract) : 0; } /* Adjust the TTL of a DNS message and its RRs by 'adjust'. If 'adjust' is diff --git a/config.h.in b/config.h.in index f993b81b0..103ad9f00 100644 --- a/config.h.in +++ b/config.h.in @@ -747,7 +747,8 @@ your system. */ #undef PTHREAD_CREATE_JOINABLE -/* Define as the return type of signal handlers (`int' or `void'). */ +/* Return type of signal handlers, but autoconf 2.70 says 'your code may + safely assume C89 semantics that RETSIGTYPE is void.' */ #undef RETSIGTYPE /* if REUSEPORT is enabled by default */ diff --git a/configure b/configure index 3e5e562ae..622f51e87 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.12.1. +# Generated by GNU Autoconf 2.69 for unbound 1.13.1. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.12.1' -PACKAGE_STRING='unbound 1.12.1' +PACKAGE_VERSION='1.13.1' +PACKAGE_STRING='unbound 1.13.1' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -649,6 +649,7 @@ ENABLE_DNSCRYPT ENABLE_DNSCRYPT_XCHACHA20 DNSTAP_OBJ DNSTAP_SRC +DNSTAP_SOCKET_TESTBIN DNSTAP_SOCKET_PATH opt_dnstap_socket_path ENABLE_DNSTAP @@ -1459,7 +1460,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.12.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.13.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1524,7 +1525,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.12.1:";; + short | recursive ) echo "Configuration of unbound 1.13.1:";; esac cat <<\_ACEOF @@ -1752,7 +1753,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.12.1 +unbound configure 1.13.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2461,7 +2462,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.12.1, which was +It was created by unbound $as_me 1.13.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2811,13 +2812,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu UNBOUND_VERSION_MAJOR=1 -UNBOUND_VERSION_MINOR=12 +UNBOUND_VERSION_MINOR=13 UNBOUND_VERSION_MICRO=1 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=11 +LIBUNBOUND_REVISION=12 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2895,7 +2896,8 @@ LIBUNBOUND_AGE=1 # 1.10.1 had 9:8:1 # 1.11.0 had 9:9:1 # 1.12.0 had 9:10:1 -# 1.12.1 had 9:11:1 +# 1.13.0 had 9:11:1 +# 1.13.1 had 9:12:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -4176,7 +4178,6 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h - if test "$ac_cv_header_minix_config_h" = "yes"; then $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h @@ -15595,38 +15596,8 @@ $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if ${ac_cv_type_signal+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -#define RETSIGTYPE $ac_cv_type_signal -_ACEOF +$as_echo "#define RETSIGTYPE void" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } @@ -17265,9 +17236,68 @@ $as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' if test $on_mingw = "no"; then - DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + # link with -ldl if not already there, for all executables because + # dlopen call is in the dynlib module. For unbound executable, also + # export symbols. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 +$as_echo_n "checking for library containing dlopen... " >&6; } +if ${ac_cv_search_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" else - DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlopen=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlopen+:} false; then : + break +fi +done +if ${ac_cv_search_dlopen+:} false; then : + +else + ac_cv_search_dlopen=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 +$as_echo "$ac_cv_search_dlopen" >&6; } +ac_res=$ac_cv_search_dlopen +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + DYNLIBMOD_EXTRALIBS="-export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi fi @@ -18287,17 +18317,13 @@ $as_echo_n "checking if libssl needs -lcrypt32... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char EVP_sha256 (); int main () { -return EVP_sha256 (); + + int EVP_sha256(void); + (void)EVP_sha256(); + ; return 0; } @@ -19799,6 +19825,7 @@ if test x_$enable_static_exe = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + LIBS="$LIBS -l:libssp.a" fi fi @@ -19818,6 +19845,7 @@ if test x_$enable_fully_static = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + LIBS="$LIBS -l:libssp.a" fi fi @@ -21225,6 +21253,7 @@ _ACEOF DNSTAP_SOCKET_PATH="$hdr_dnstap_socket_path" + DNSTAP_SOCKET_TESTBIN='unbound-dnstap-socket$(EXEEXT)' DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c" @@ -21731,7 +21760,7 @@ _ACEOF -version=1.12.1 +version=1.13.1 date=`date +'%b %e, %Y'` @@ -22250,7 +22279,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.12.1, which was +This file was extended by unbound $as_me 1.13.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22316,7 +22345,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.12.1 +unbound config.status 1.13.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index b4caa37dd..2d88048f7 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_PREREQ(2.56) +AC_PREREQ([2.56]) sinclude(acx_nlnetlabs.m4) sinclude(ax_pthread.m4) sinclude(acx_python.m4) @@ -10,15 +10,15 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) -m4_define([VERSION_MINOR],[12]) +m4_define([VERSION_MINOR],[13]) m4_define([VERSION_MICRO],[1]) -AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues, unbound) +AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=11 +LIBUNBOUND_REVISION=12 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -96,7 +96,8 @@ LIBUNBOUND_AGE=1 # 1.10.1 had 9:8:1 # 1.11.0 had 9:9:1 # 1.12.0 had 9:10:1 -# 1.12.1 had 9:11:1 +# 1.13.0 had 9:11:1 +# 1.13.1 had 9:12:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -125,7 +126,7 @@ cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`" AC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure]) CFLAGS="$CFLAGS" -AC_AIX +AC_USE_SYSTEM_EXTENSIONS if test "$ac_cv_header_minix_config_h" = "yes"; then AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix]) fi @@ -166,8 +167,7 @@ else ub_conf_file="C:\\Program Files\\Unbound\\service.conf" fi AC_ARG_WITH([conf_file], - AC_HELP_STRING([--with-conf-file=path], - [Pathname to the Unbound configuration file]), + AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]), [ub_conf_file="$withval"]) AC_SUBST(ub_conf_file) ACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config) @@ -177,8 +177,7 @@ AC_SUBST(ub_conf_dir) # Determine run, chroot directory and pidfile locations AC_ARG_WITH(run-dir, - AC_HELP_STRING([--with-run-dir=path], - [set default directory to chdir to (by default dir part of cfg file)]), + AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]), UNBOUND_RUN_DIR="$withval", if test $on_mingw = no; then UNBOUND_RUN_DIR=`dirname "$ub_conf_file"` @@ -191,8 +190,7 @@ ACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run) AC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to]) AC_ARG_WITH(chroot-dir, - AC_HELP_STRING([--with-chroot-dir=path], - [set default directory to chroot to (by default same as run-dir)]), + AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]), UNBOUND_CHROOT_DIR="$withval", if test $on_mingw = no; then UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR" @@ -205,16 +203,14 @@ ACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot) AC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to]) AC_ARG_WITH(share-dir, - AC_HELP_STRING([--with-share-dir=path], - [set default directory with shared data (by default same as share/unbound)]), + AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]), UNBOUND_SHARE_DIR="$withval", UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR") AC_SUBST(UNBOUND_SHARE_DIR) AC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data]) AC_ARG_WITH(pidfile, - AC_HELP_STRING([--with-pidfile=filename], - [set default pathname to unbound pidfile (default run-dir/unbound.pid)]), + AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]), UNBOUND_PIDFILE="$withval", if test $on_mingw = no; then UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid" @@ -227,8 +223,7 @@ ACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid) AC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location]) AC_ARG_WITH(rootkey-file, - AC_HELP_STRING([--with-rootkey-file=filename], - [set default pathname to root key file (default run-dir/root.key). This file is read and written.]), + AS_HELP_STRING([--with-rootkey-file=filename],[set default pathname to root key file (default run-dir/root.key). This file is read and written.]), UNBOUND_ROOTKEY_FILE="$withval", if test $on_mingw = no; then UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key" @@ -241,8 +236,7 @@ ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey) AC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location]) AC_ARG_WITH(rootcert-file, - AC_HELP_STRING([--with-rootcert-file=filename], - [set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin.]), + AS_HELP_STRING([--with-rootcert-file=filename],[set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin.]), UNBOUND_ROOTCERT_FILE="$withval", if test $on_mingw = no; then UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem" @@ -255,8 +249,7 @@ ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem) AC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location]) AC_ARG_WITH(username, - AC_HELP_STRING([--with-username=user], - [set default user that unbound changes to (default user is unbound)]), + AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]), UNBOUND_USERNAME="$withval", UNBOUND_USERNAME="unbound") AC_SUBST(UNBOUND_USERNAME) @@ -268,7 +261,7 @@ AC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource f # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST -AC_LANG_C +AC_LANG([C]) # allow user to override the -g -O2 flags. default_cflags=no if test "x$CFLAGS" = "x" ; then @@ -281,8 +274,8 @@ ACX_DEPFLAG ACX_DETERMINE_EXT_FLAGS_UNBOUND # debug mode flags warnings -AC_ARG_ENABLE(checking, AC_HELP_STRING([--enable-checking], [Enable warnings, asserts, makefile-dependencies])) -AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [same as enable-checking])) +AC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies])) +AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking])) if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug"; else debug_enabled="$enable_checking"; fi AC_SUBST(debug_enabled) @@ -316,14 +309,11 @@ AC_DEFUN([CHECK_WEAK_ATTRIBUTE], AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute) AC_CACHE_VAL(ac_cv_c_weak_attribute, [ac_cv_c_weak_attribute=no -AC_TRY_COMPILE( -[ #include +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include __attribute__((weak)) void f(int x) { printf("%d", x); } -], [ +]], [[ f(1); -], -[ac_cv_c_weak_attribute="yes"], -[ac_cv_c_weak_attribute="no"]) +]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"]) ]) AC_MSG_RESULT($ac_cv_c_weak_attribute) @@ -340,14 +330,11 @@ AC_DEFUN([CHECK_NORETURN_ATTRIBUTE], AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute) AC_CACHE_VAL(ac_cv_c_noreturn_attribute, [ac_cv_c_noreturn_attribute=no -AC_TRY_COMPILE( -[ #include +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include __attribute__((noreturn)) void f(int x) { printf("%d", x); } -], [ +]], [[ f(1); -], -[ac_cv_c_noreturn_attribute="yes"], -[ac_cv_c_noreturn_attribute="no"]) +]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"]) ]) AC_MSG_RESULT($ac_cv_c_noreturn_attribute) @@ -385,7 +372,7 @@ EOF fi ]) -AC_PROG_LEX +AC_PROG_LEX([noyywrap]) if test "$LEX" != "" -a "$LEX" != ":"; then ACX_YYLEX_DESTROY fi @@ -494,7 +481,7 @@ fi # check some functions of the OS before linking libs (while still runnable). AC_FUNC_CHOWN AC_FUNC_FORK -AC_TYPE_SIGNAL +AC_DEFINE(RETSIGTYPE,void,[Return type of signal handlers, but autoconf 2.70 says 'your code may safely assume C89 semantics that RETSIGTYPE is void.']) AC_FUNC_FSEEKO ACX_SYS_LARGEFILE ACX_CHECK_NONBLOCKING_BROKEN @@ -513,14 +500,11 @@ sinclude(systemd.m4) # Include systemd.m4 - end # set memory allocation checking if requested -AC_ARG_ENABLE(alloc-checks, AC_HELP_STRING([--enable-alloc-checks], - [ enable to memory allocation statistics, for debug purposes ]), +AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]), , ) -AC_ARG_ENABLE(alloc-lite, AC_HELP_STRING([--enable-alloc-lite], - [ enable for lightweight alloc assertions, for debug purposes ]), +AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]), , ) -AC_ARG_ENABLE(alloc-nonregional, AC_HELP_STRING([--enable-alloc-nonregional], - [ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]), +AC_ARG_ENABLE(alloc-nonregional, AS_HELP_STRING([--enable-alloc-nonregional],[ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]), , ) if test x_$enable_alloc_nonregional = x_yes; then AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use]) @@ -564,8 +548,7 @@ else # check this first, so that the pthread lib does not get linked in via # libssl or libpython, and thus distorts the tests, and we end up using # the non-threadsafe C libraries. -AC_ARG_WITH(pthreads, AC_HELP_STRING([--with-pthreads], - [use pthreads library, or --without-pthreads to disable threading support.]), +AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]), [ ],[ withval="yes" ]) ub_have_pthreads=no if test x_$withval != x_no; then @@ -612,12 +595,11 @@ int main(void) {return 0;} fi # check solaris thread library -AC_ARG_WITH(solaris-threads, AC_HELP_STRING([--with-solaris-threads], - [use solaris native thread library.]), [ ],[ withval="no" ]) +AC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ]) ub_have_sol_threads=no if test x_$withval != x_no; then if test x_$ub_have_pthreads != x_no; then - AC_WARN([Have pthreads already, ignoring --with-solaris-threads]) + AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads]) else AC_SEARCH_LIBS(thr_create, [thread], [ @@ -627,7 +609,7 @@ if test x_$withval != x_no; then [CFLAGS="$CFLAGS -D_REENTRANT"]) ub_have_sol_threads=yes ] , [ - AC_ERROR([no solaris threads found.]) + AC_MSG_ERROR([no solaris threads found.]) ]) fi fi @@ -635,7 +617,7 @@ fi fi # end of non-mingw check of thread libraries # Check for SYSLOG_FACILITY -AC_ARG_WITH(syslog-facility, AC_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7], [ set SYSLOG_FACILITY, default DAEMON ]), +AC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]), [ UNBOUND_SYSLOG_FACILITY="$withval" ], []) case "${UNBOUND_SYSLOG_FACILITY}" in @@ -648,8 +630,7 @@ AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FAC # Check for dynamic library module AC_ARG_WITH(dynlibmodule, - AC_HELP_STRING([--with-dynlibmodule], - [build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), + AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), [], [ withval="no" ]) if test x_$withval != x_no; then @@ -661,17 +642,20 @@ if test x_$withval != x_no; then DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' AC_SUBST(DYNLIBMOD_HEADER) if test $on_mingw = "no"; then - DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + # link with -ldl if not already there, for all executables because + # dlopen call is in the dynlib module. For unbound executable, also + # export symbols. + AC_SEARCH_LIBS([dlopen], [dl]) + DYNLIBMOD_EXTRALIBS="-export-dynamic" else - DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi AC_SUBST(DYNLIBMOD_EXTRALIBS) fi # Check for PyUnbound AC_ARG_WITH(pyunbound, - AC_HELP_STRING([--with-pyunbound], - [build PyUnbound, or --without-pyunbound to skip it. (default=no)]), + AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]), [], [ withval="no" ]) ub_test_python=no @@ -683,8 +667,7 @@ fi # Check for Python module AC_ARG_WITH(pythonmodule, - AC_HELP_STRING([--with-pythonmodule], - [build Python module, or --without-pythonmodule to disable script engine. (default=no)]), + AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]), [], [ withval="no" ]) ub_with_pythonmod=no @@ -702,7 +685,7 @@ if test x_$ub_test_python != x_no; then AC_PYTHON_DEVEL if test ! -z "$PYTHON_VERSION"; then if test `$PYTHON -c "print('$PYTHON_VERSION' >= '2.4.0')"` = "False"; then - AC_ERROR([Python version >= 2.4.0 is required]) + AC_MSG_ERROR([Python version >= 2.4.0 is required]) fi [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"] @@ -730,7 +713,7 @@ if test x_$ub_test_python != x_no; then # Check for SWIG ub_have_swig=no - AC_ARG_ENABLE(swig-version-check, AC_HELP_STRING([--disable-swig-version-check], [Disable swig version check to build python modules with older swig even though that is unreliable])) + AC_ARG_ENABLE(swig-version-check, AS_HELP_STRING([--disable-swig-version-check],[Disable swig version check to build python modules with older swig even though that is unreliable])) if test "$enable_swig_version_check" = "yes"; then AC_PROG_SWIG(2.0.1) else @@ -738,7 +721,7 @@ if test x_$ub_test_python != x_no; then fi AC_MSG_CHECKING(SWIG) if test ! -x "$SWIG"; then - AC_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound]) + AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound]) else AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.]) AC_SUBST(swig, "$SWIG") @@ -793,8 +776,7 @@ AC_SUBST(CONFIG_DATE) # libnss USE_NSS="no" -AC_ARG_WITH([nss], AC_HELP_STRING([--with-nss=path], - [use libnss instead of openssl, installed at path.]), +AC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]), [ USE_NSS="yes" AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto]) @@ -816,8 +798,7 @@ AC_ARG_WITH([nss], AC_HELP_STRING([--with-nss=path], # libnettle USE_NETTLE="no" -AC_ARG_WITH([nettle], AC_HELP_STRING([--with-nettle=path], - [use libnettle as crypto library, installed at path.]), +AC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]), [ USE_NETTLE="yes" AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto]) @@ -849,7 +830,10 @@ AC_SUBST(PC_CRYPTO_DEPENDENCY) BAKLIBS="$LIBS" LIBS="-lssl $LIBS" AC_MSG_CHECKING([if libssl needs -lcrypt32]) -AC_TRY_LINK_FUNC([EVP_sha256], [ +AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ + int EVP_sha256(void); + (void)EVP_sha256(); +]])], [ AC_MSG_RESULT([no]) LIBS="$BAKLIBS" ], [ @@ -937,7 +921,7 @@ fi AC_SUBST(SSLLIB) # libbsd -AC_ARG_WITH([libbsd], AC_HELP_STRING([--with-libbsd], [Use portable libbsd functions]), [ +AC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [ AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT]) if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do @@ -950,7 +934,7 @@ AC_ARG_WITH([libbsd], AC_HELP_STRING([--with-libbsd], [Use portable libbsd funct fi ]) -AC_ARG_ENABLE(sha1, AC_HELP_STRING([--disable-sha1], [Disable SHA1 RRSIG support, does not disable nsec3 support])) +AC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support])) case "$enable_sha1" in no) ;; @@ -960,7 +944,7 @@ case "$enable_sha1" in esac -AC_ARG_ENABLE(sha2, AC_HELP_STRING([--disable-sha2], [Disable SHA256 and SHA512 RRSIG support])) +AC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support])) case "$enable_sha2" in no) ;; @@ -969,7 +953,7 @@ case "$enable_sha2" in ;; esac -AC_ARG_ENABLE(subnet, AC_HELP_STRING([--enable-subnet], [Enable client subnet])) +AC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet])) case "$enable_subnet" in yes) AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.]) @@ -1080,7 +1064,7 @@ fi AC_MSG_RESULT($ac_cv_c_gost_works) ])dnl -AC_ARG_ENABLE(gost, AC_HELP_STRING([--disable-gost], [Disable GOST support])) +AC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support])) use_gost="no" if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then case "$enable_gost" in @@ -1098,7 +1082,7 @@ case "$enable_gost" in esac fi dnl !USE_NSS && !USE_NETTLE -AC_ARG_ENABLE(ecdsa, AC_HELP_STRING([--disable-ecdsa], [Disable ECDSA support])) +AC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support])) use_ecdsa="no" case "$enable_ecdsa" in no) @@ -1130,7 +1114,7 @@ case "$enable_ecdsa" in ;; esac -AC_ARG_ENABLE(dsa, AC_HELP_STRING([--disable-dsa], [Disable DSA support])) +AC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support])) use_dsa="no" case "$enable_dsa" in yes) @@ -1170,7 +1154,7 @@ AC_INCLUDES_DEFAULT ;; esac -AC_ARG_ENABLE(ed25519, AC_HELP_STRING([--disable-ed25519], [Disable ED25519 support])) +AC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support])) use_ed25519="no" case "$enable_ed25519" in no) @@ -1193,7 +1177,7 @@ case "$enable_ed25519" in ;; esac -AC_ARG_ENABLE(ed448, AC_HELP_STRING([--disable-ed448], [Disable ED448 support])) +AC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support])) use_ed448="no" case "$enable_ed448" in no) @@ -1213,7 +1197,7 @@ case "$enable_ed448" in ;; esac -AC_ARG_ENABLE(event-api, AC_HELP_STRING([--enable-event-api], [Enable (experimental) pluggable event base libunbound API installed to unbound-event.h])) +AC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h])) case "$enable_event_api" in yes) AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install]) @@ -1223,7 +1207,7 @@ case "$enable_event_api" in ;; esac -AC_ARG_ENABLE(tfo-client, AC_HELP_STRING([--enable-tfo-client], [Enable TCP Fast Open for client mode])) +AC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode])) case "$enable_tfo_client" in yes) case `uname` in @@ -1247,7 +1231,7 @@ case "$enable_tfo_client" in ;; esac -AC_ARG_ENABLE(tfo-server, AC_HELP_STRING([--enable-tfo-server], [Enable TCP Fast Open for server mode])) +AC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode])) case "$enable_tfo_server" in yes) AC_CHECK_DECL([TCP_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO])], [AC_MSG_ERROR([TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server])], [AC_INCLUDES_DEFAULT @@ -1260,8 +1244,7 @@ case "$enable_tfo_server" in esac # check for libevent -AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname], - [use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]), +AC_ARG_WITH(libevent, AS_HELP_STRING([--with-libevent=pathname],[use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]), [ ],[ with_libevent="no" ]) if test "x_$with_libevent" != x_no; then AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent]) @@ -1355,8 +1338,7 @@ else fi # check for libexpat -AC_ARG_WITH(libexpat, AC_HELP_STRING([--with-libexpat=path], - [specify explicit path for libexpat.]), +AC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]), [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ]) AC_MSG_CHECKING(for libexpat) found_libexpat="no" @@ -1373,7 +1355,7 @@ for dir in $withval ; do fi done if test x_$found_libexpat != x_yes; then - AC_ERROR([Could not find libexpat, expat.h]) + AC_MSG_ERROR([Could not find libexpat, expat.h]) fi AC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT @@ -1381,8 +1363,7 @@ AC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT ]) # hiredis (redis C client for cachedb) -AC_ARG_WITH(libhiredis, AC_HELP_STRING([--with-libhiredis=path], - [specify explicit path for libhiredis.]), +AC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]), [ ],[ withval="no" ]) found_libhiredis="no" if test x_$withval = x_yes -o x_$withval != x_no; then @@ -1405,7 +1386,7 @@ if test x_$withval = x_yes -o x_$withval != x_no; then fi done if test x_$found_libhiredis != x_yes; then - AC_ERROR([Could not find libhiredis, hiredis.h]) + AC_MSG_ERROR([Could not find libhiredis, hiredis.h]) fi AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT @@ -1414,8 +1395,7 @@ if test x_$withval = x_yes -o x_$withval != x_no; then fi # nghttp2 -AC_ARG_WITH(libnghttp2, AC_HELP_STRING([--with-libnghttp2=path], - [specify explicit path for libnghttp2.]), +AC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]), [ ],[ withval="no" ]) found_libnghttp2="no" if test x_$withval = x_yes -o x_$withval != x_no; then @@ -1438,7 +1418,7 @@ if test x_$withval = x_yes -o x_$withval != x_no; then fi done if test x_$found_libnghttp2 != x_yes; then - AC_ERROR([Could not find libnghttp2, nghttp2.h]) + AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h]) fi AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT @@ -1449,8 +1429,7 @@ fi # set static linking for uninstalled libraries if requested AC_SUBST(staticexe) staticexe="" -AC_ARG_ENABLE(static-exe, AC_HELP_STRING([--enable-static-exe], - [ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]), +AC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]), , ) if test x_$enable_static_exe = x_yes; then staticexe="-static" @@ -1463,12 +1442,12 @@ if test x_$enable_static_exe = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + LIBS="$LIBS -l:libssp.a" fi fi # set full static linking if requested -AC_ARG_ENABLE(fully-static, AC_HELP_STRING([--enable-fully-static], - [ enable to compile fully static ]), +AC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]), , ) if test x_$enable_fully_static = x_yes; then staticexe="-all-static" @@ -1480,12 +1459,12 @@ if test x_$enable_fully_static = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + LIBS="$LIBS -l:libssp.a" fi fi # set lock checking if requested -AC_ARG_ENABLE(lock_checks, AC_HELP_STRING([--enable-lock-checks], - [ enable to check lock and unlock calls, for debug purposes ]), +AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]), , ) if test x_$enable_lock_checks = x_yes; then AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).]) @@ -1727,7 +1706,7 @@ AC_SUBST(LIBOBJ_WITHOUT_CTIME) AC_REPLACE_FUNCS(ctime_r) AC_REPLACE_FUNCS(strsep) -AC_ARG_ENABLE(allsymbols, AC_HELP_STRING([--enable-allsymbols], [export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols])) +AC_ARG_ENABLE(allsymbols, AS_HELP_STRING([--enable-allsymbols],[export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols])) case "$enable_allsymbols" in yes) COMMON_OBJ_ALL_SYMBOLS="" @@ -1770,7 +1749,7 @@ dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, ["$hdr_dnstap_socket_path"], [default dnstap socket path]) AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"]) - + AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)']) AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"]) AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"]) ], @@ -1793,7 +1772,7 @@ dnsc_DNSCRYPT([ ) # check for cachedb if requested -AC_ARG_ENABLE(cachedb, AC_HELP_STRING([--enable-cachedb], [enable cachedb module that can use external cache storage])) +AC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage])) # turn on cachedb when hiredis support is enabled. if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi case "$enable_cachedb" in @@ -1806,7 +1785,7 @@ case "$enable_cachedb" in esac # check for ipsecmod if requested -AC_ARG_ENABLE(ipsecmod, AC_HELP_STRING([--enable-ipsecmod], [Enable ipsecmod module that facilitates opportunistic IPsec])) +AC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec])) case "$enable_ipsecmod" in yes) AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.]) @@ -1821,7 +1800,7 @@ case "$enable_ipsecmod" in esac # check for ipset if requested -AC_ARG_ENABLE(ipset, AC_HELP_STRING([--enable-ipset], [enable ipset module])) +AC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module])) case "$enable_ipset" in yes) AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support]) @@ -1831,8 +1810,7 @@ case "$enable_ipset" in AC_SUBST(IPSET_OBJ) # mnl - AC_ARG_WITH(libmnl, AC_HELP_STRING([--with-libmnl=path], - [specify explicit path for libmnl.]), + AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]), [ ],[ withval="yes" ]) found_libmnl="no" AC_MSG_CHECKING(for libmnl) @@ -1853,14 +1831,14 @@ case "$enable_ipset" in fi done if test x_$found_libmnl != x_yes; then - AC_ERROR([Could not find libmnl, libmnl.h]) + AC_MSG_ERROR([Could not find libmnl, libmnl.h]) fi ;; no|*) # nothing ;; esac -AC_ARG_ENABLE(explicit-port-randomisation, AC_HELP_STRING([--disable-explicit-port-randomisation], [disable explicit source port randomisation and rely on the kernel to provide random source ports])) +AC_ARG_ENABLE(explicit-port-randomisation, AS_HELP_STRING([--disable-explicit-port-randomisation],[disable explicit source port randomisation and rely on the kernel to provide random source ports])) case "$enable_explicit_port_randomisation" in no) AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.]) @@ -1908,8 +1886,7 @@ AC_SUBST(SOURCEFILE) # see if we want to build the library or everything ALLTARGET="alltargets" INSTALLTARGET="install-all" -AC_ARG_WITH(libunbound-only, AC_HELP_STRING([--with-libunbound-only], - [do not build daemon and tool programs]), +AC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]), [ if test "$withval" = "yes"; then ALLTARGET="lib" @@ -1918,10 +1895,10 @@ AC_ARG_WITH(libunbound-only, AC_HELP_STRING([--with-libunbound-only], ]) if test $ALLTARGET = "alltargets"; then if test $USE_NSS = "yes"; then - AC_ERROR([--with-nss can only be used in combination with --with-libunbound-only.]) + AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.]) fi if test $USE_NETTLE = "yes"; then - AC_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.]) + AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.]) fi fi @@ -2198,5 +2175,5 @@ AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO]) AC_SUBST(date, [`date +'%b %e, %Y'`]) AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service contrib/unbound_portable.service]) -AC_CONFIG_HEADER([config.h]) +AC_CONFIG_HEADERS([config.h]) AC_OUTPUT diff --git a/contrib/README b/contrib/README index 9db078e56..ef2a0ab88 100644 --- a/contrib/README +++ b/contrib/README @@ -53,3 +53,5 @@ distribution but may be helpful. lookups for downstream clients. * drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format, contributed by Andreas Schulze. +* metrics.awk: awk script that can convert unbound-control stats to + Prometheus metrics format output. diff --git a/contrib/metrics.awk b/contrib/metrics.awk new file mode 100644 index 000000000..5a7a2569c --- /dev/null +++ b/contrib/metrics.awk @@ -0,0 +1,180 @@ +# read output of unbound-control stats +# and output prometheus metrics style output. +# use these options: +# server: extended-statistics: yes +# statistics-cumulative: no +# statistics-interval: 0 +# remote-control: control-enable: yes +# Can use it like unbound-control stats | awk -f "metrics.awk" + +BEGIN { + FS="="; +} +# everything like total.num.queries=value is put in val["total.num.queries"] +/^.*\..*=/ { + val[$1]=$2; +} +# print the output metrics +END { + print "# HELP unbound_hits_queries Unbound DNS traffic and cache hits" + print "# TYPE unbound_hits_queries gauge" + print "unbound_hits_queries{type=\"total.num.queries\"} " val["total.num.queries"]; + for (x=0; x<99; x++) { + if(val["thread" $x ".num.queries"] != "") { + print "unbound_hits_queries{type=\"thread" $x ".num.queries\"} " val["thread" $x ".num.queries"]; + } + } + print "unbound_hits_queries{type=\"total.num.cachehits\"} " val["total.num.cachehits"]; + print "unbound_hits_queries{type=\"total.num.prefetch\"} " val["total.num.prefetch"]; + print "unbound_hits_queries{type=\"num.query.tcp\"} " val["num.query.tcp"]; + print "unbound_hits_queries{type=\"num.query.tcpout\"} " val["num.query.tcpout"]; + print "unbound_hits_queries{type=\"num.query.tls\"} " val["num.query.tls"]; + print "unbound_hits_queries{type=\"num.query.tls.resume\"} " val["num.query.tls.resume"]; + print "unbound_hits_queries{type=\"num.query.ipv6\"} " val["num.query.ipv6"]; + print "unbound_hits_queries{type=\"unwanted.queries\"} " val["unwanted.queries"]; + print "" + + print "# HELP unbound_queue_queries Unbound requestlist size" + print "# TYPE unbound_queue_queries gauge" + print "unbound_queue_queries{type=\"total.requestlist.avg\"} " val["total.requestlist.avg"]; + print "unbound_queue_queries{type=\"total.requestlist.max\"} " val["total.requestlist.max"]; + print "unbound_queue_queries{type=\"total.requestlist.overwritten\"} " val["total.requestlist.overwritten"]; + print "unbound_queue_queries{type=\"total.requestlist.exceeded\"} " val["total.requestlist.exceeded"]; + print "" + + print "# HELP unbound_memory_bytes Unbound memory usage" + print "# TYPE unbound_memory_bytes gauge" + print "unbound_memory_bytes{type=\"mem.cache.rrset\"} " val["mem.cache.rrset"]; + print "unbound_memory_bytes{type=\"mem.cache.message\"} " val["mem.cache.message"]; + print "unbound_memory_bytes{type=\"mem.mod.iterator\"} " val["mem.mod.iterator"]; + if(val["mem.mod.validator"] != "") { + print "unbound_memory_bytes{type=\"mem.mod.validator\"} " val["mem.mod.validator"]; + } + if(val["mem.mod.respip"] != "") { + print "unbound_memory_bytes{type=\"mem.mod.respip\"} " val["mem.mod.respip"]; + } + if(val["mem.mod.subnet"] != "") { + print "unbound_memory_bytes{type=\"mem.mod.subnet\"} " val["mem.mod.subnet"]; + } + if(val["mem.mod.ipsecmod"] != "") { + print "unbound_memory_bytes{type=\"mem.mod.ipsecmod\"} " val["mem.mod.ipsecmod"]; + } + if(val["mem.mod.dynlibmod"] != "") { + print "unbound_memory_bytes{type=\"mem.mod.dynlibmod\"} " val["mem.mod.dynlibmod"]; + } + print "unbound_memory_bytes{type=\"msg.cache.count\"} " val["msg.cache.count"]; + print "unbound_memory_bytes{type=\"rrset.cache.count\"} " val["rrset.cache.count"]; + print "unbound_memory_bytes{type=\"infra.cache.count\"} " val["infra.cache.count"]; + print "unbound_memory_bytes{type=\"key.cache.count\"} " val["key.cache.count"]; + print "" + + print "# HELP unbound_by_type_queries Unbound DNS queries by type" + print "# TYPE unbound_by_type_queries gauge" + for(x in val) { + if(x ~ /^num.query.type./) { + if(val[x] != "") { + split(x, a, "."); + print "unbound_by_type_queries{type=\"" a[4] "\"} " val[x]; + } + } + } + print "" + + print "# HELP unbound_by_class_queries Unbound DNS queries by class" + print "# TYPE unbound_by_class_queries gauge" + for(x in val) { + if(x ~ /^num.query.class./) { + if(val[x] != "") { + split(x, a, "."); + print "unbound_by_class_queries{class=\"" a[4] "\"} " val[x]; + } + } + } + print "" + + print "# HELP unbound_by_opcode_queries Unbound DNS queries by opcode" + print "# TYPE unbound_by_opcode_queries gauge" + for(x in val) { + if(x ~ /^num.query.opcode./) { + if(val[x] != "") { + split(x, a, "."); + print "unbound_by_opcode_queries{opcode=\"" a[4] "\"} " val[x]; + } + } + } + print "" + + print "# HELP unbound_by_rcode_queries Unbound DNS answers by rcode" + print "# TYPE unbound_by_rcode_queries gauge" + for(x in val) { + if(x ~ /^num.answer.rcode./) { + if(val[x] != "") { + split(x, a, "."); + print "unbound_by_rcode_queries{rcode=\"" a[4] "\"} " val[x]; + } + } + } + print "" + + print "# HELP unbound_by_flags_queries Unbound DNS queries by flags" + print "# TYPE unbound_by_flags_queries gauge" + for(x in val) { + if(x ~ /^num.query.flags./) { + if(val[x] != "") { + split(x, a, "."); + print "unbound_by_flags_queries{flag=\"" a[4] "\"} " val[x]; + } + } + } + if(val["num.query.edns.present"] != "") { + print "unbound_by_flags_queries{flag=\"num.query.edns.present\"} " val["num.query.edns.present"]; + } + if(val["num.query.edns.DO"] != "") { + print "unbound_by_flags_queries{flag=\"num.query.edns.DO\"} " val["num.query.edns.DO"]; + } + print "" + + print "# HELP unbound_histogram_seconds Unbound DNS histogram of reply time" + print "# TYPE unbound_histogram_seconds gauge" + print "unbound_histogram_seconds{bucket=\"000000.000000.to.000000.000001\"} " val["histogram.000000.000000.to.000000.000001"]; + print "unbound_histogram_seconds{bucket=\"000000.000001.to.000000.000002\"} " val["histogram.000000.000001.to.000000.000002"]; + print "unbound_histogram_seconds{bucket=\"000000.000002.to.000000.000004\"} " val["histogram.000000.000002.to.000000.000004"]; + print "unbound_histogram_seconds{bucket=\"000000.000004.to.000000.000008\"} " val["histogram.000000.000004.to.000000.000008"]; + print "unbound_histogram_seconds{bucket=\"000000.000008.to.000000.000016\"} " val["histogram.000000.000008.to.000000.000016"]; + print "unbound_histogram_seconds{bucket=\"000000.000016.to.000000.000032\"} " val["histogram.000000.000016.to.000000.000032"]; + print "unbound_histogram_seconds{bucket=\"000000.000032.to.000000.000064\"} " val["histogram.000000.000032.to.000000.000064"]; + print "unbound_histogram_seconds{bucket=\"000000.000064.to.000000.000128\"} " val["histogram.000000.000064.to.000000.000128"]; + print "unbound_histogram_seconds{bucket=\"000000.000128.to.000000.000256\"} " val["histogram.000000.000128.to.000000.000256"]; + print "unbound_histogram_seconds{bucket=\"000000.000256.to.000000.000512\"} " val["histogram.000000.000256.to.000000.000512"]; + print "unbound_histogram_seconds{bucket=\"000000.000512.to.000000.001024\"} " val["histogram.000000.000512.to.000000.001024"]; + print "unbound_histogram_seconds{bucket=\"000000.001024.to.000000.002048\"} " val["histogram.000000.001024.to.000000.002048"]; + print "unbound_histogram_seconds{bucket=\"000000.002048.to.000000.004096\"} " val["histogram.000000.002048.to.000000.004096"]; + print "unbound_histogram_seconds{bucket=\"000000.004096.to.000000.008192\"} " val["histogram.000000.004096.to.000000.008192"]; + print "unbound_histogram_seconds{bucket=\"000000.008192.to.000000.016384\"} " val["histogram.000000.008192.to.000000.016384"]; + print "unbound_histogram_seconds{bucket=\"000000.016384.to.000000.032768\"} " val["histogram.000000.016384.to.000000.032768"]; + print "unbound_histogram_seconds{bucket=\"000000.032768.to.000000.065536\"} " val["histogram.000000.032768.to.000000.065536"]; + print "unbound_histogram_seconds{bucket=\"000000.065536.to.000000.131072\"} " val["histogram.000000.065536.to.000000.131072"]; + print "unbound_histogram_seconds{bucket=\"000000.131072.to.000000.262144\"} " val["histogram.000000.131072.to.000000.262144"]; + print "unbound_histogram_seconds{bucket=\"000000.262144.to.000000.524288\"} " val["histogram.000000.262144.to.000000.524288"]; + print "unbound_histogram_seconds{bucket=\"000000.524288.to.000001.000000\"} " val["histogram.000000.524288.to.000001.000000"]; + print "unbound_histogram_seconds{bucket=\"000001.000000.to.000002.000000\"} " val["histogram.000001.000000.to.000002.000000"]; + print "unbound_histogram_seconds{bucket=\"000002.000000.to.000004.000000\"} " val["histogram.000002.000000.to.000004.000000"]; + print "unbound_histogram_seconds{bucket=\"000004.000000.to.000008.000000\"} " val["histogram.000004.000000.to.000008.000000"]; + print "unbound_histogram_seconds{bucket=\"000008.000000.to.000016.000000\"} " val["histogram.000008.000000.to.000016.000000"]; + print "unbound_histogram_seconds{bucket=\"000016.000000.to.000032.000000\"} " val["histogram.000016.000000.to.000032.000000"]; + print "unbound_histogram_seconds{bucket=\"000032.000000.to.000064.000000\"} " val["histogram.000032.000000.to.000064.000000"]; + print "unbound_histogram_seconds{bucket=\"000064.000000.to.000128.000000\"} " val["histogram.000064.000000.to.000128.000000"]; + print "unbound_histogram_seconds{bucket=\"000128.000000.to.000256.000000\"} " val["histogram.000128.000000.to.000256.000000"]; + print "unbound_histogram_seconds{bucket=\"000256.000000.to.000512.000000\"} " val["histogram.000256.000000.to.000512.000000"]; + print "unbound_histogram_seconds{bucket=\"000512.000000.to.001024.000000\"} " val["histogram.000512.000000.to.001024.000000"]; + print "unbound_histogram_seconds{bucket=\"001024.000000.to.002048.000000\"} " val["histogram.001024.000000.to.002048.000000"]; + print "unbound_histogram_seconds{bucket=\"002048.000000.to.004096.000000\"} " val["histogram.002048.000000.to.004096.000000"]; + print "unbound_histogram_seconds{bucket=\"004096.000000.to.008192.000000\"} " val["histogram.004096.000000.to.008192.000000"]; + print "unbound_histogram_seconds{bucket=\"008192.000000.to.016384.000000\"} " val["histogram.008192.000000.to.016384.000000"]; + print "unbound_histogram_seconds{bucket=\"016384.000000.to.032768.000000\"} " val["histogram.016384.000000.to.032768.000000"]; + print "unbound_histogram_seconds{bucket=\"032768.000000.to.065536.000000\"} " val["histogram.032768.000000.to.065536.000000"]; + print "unbound_histogram_seconds{bucket=\"065536.000000.to.131072.000000\"} " val["histogram.065536.000000.to.131072.000000"]; + print "unbound_histogram_seconds{bucket=\"131072.000000.to.262144.000000\"} " val["histogram.131072.000000.to.262144.000000"]; + print "unbound_histogram_seconds{bucket=\"262144.000000.to.524288.000000\"} " val["histogram.262144.000000.to.524288.000000"]; + print "" +} diff --git a/contrib/unbound.service.in b/contrib/unbound.service.in index c95ab94b3..a4596978d 100644 --- a/contrib/unbound.service.in +++ b/contrib/unbound.service.in @@ -66,7 +66,7 @@ ProtectSystem=strict RuntimeDirectory=unbound ConfigurationDirectory=unbound StateDirectory=unbound -RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX +RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX RestrictRealtime=true SystemCallArchitectures=native SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module mount @obsolete @resources diff --git a/contrib/unbound_portable.service.in b/contrib/unbound_portable.service.in index 998b66dec..e763763f0 100644 --- a/contrib/unbound_portable.service.in +++ b/contrib/unbound_portable.service.in @@ -38,7 +38,7 @@ ProtectSystem=strict RuntimeDirectory=unbound ConfigurationDirectory=unbound StateDirectory=unbound -RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX +RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX RestrictRealtime=true SystemCallArchitectures=native SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module mount @obsolete @resources diff --git a/daemon/daemon.c b/daemon/daemon.c index 83a30def7..f5f0b88fe 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -291,7 +291,7 @@ daemon_init(void) free(daemon); return NULL; } - if(!(daemon->env->edns_tags = edns_tags_create())) { + if(!(daemon->env->edns_strings = edns_strings_create())) { auth_zones_delete(daemon->env->auth_zones); acl_list_delete(daemon->acl); tcl_list_delete(daemon->tcl); @@ -641,9 +641,9 @@ daemon_fork(struct daemon* daemon) &daemon->use_rpz, daemon->env, &daemon->mods)) fatal_exit("auth_zones could not be setup"); - /* Set-up EDNS tags */ - if(!edns_tags_apply_cfg(daemon->env->edns_tags, daemon->cfg)) - fatal_exit("Could not set up EDNS tags"); + /* Set-up EDNS strings */ + if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg)) + fatal_exit("Could not set up EDNS strings"); /* response-ip-xxx options don't work as expected without the respip * module. To avoid run-time operational surprise we reject such @@ -773,7 +773,7 @@ daemon_delete(struct daemon* daemon) rrset_cache_delete(daemon->env->rrset_cache); infra_delete(daemon->env->infra_cache); edns_known_options_delete(daemon->env); - edns_tags_delete(daemon->env->edns_tags); + edns_strings_delete(daemon->env->edns_strings); auth_zones_delete(daemon->env->auth_zones); } ub_randfree(daemon->rand); diff --git a/daemon/remote.c b/daemon/remote.c index 7c99e4f29..18d960c56 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -2906,6 +2906,57 @@ do_ip_ratelimit_list(RES* ssl, struct worker* worker, char* arg) slabhash_traverse(a.infra->client_ip_rates, 0, ip_rate_list, &a); } +/** do the rpz_enable/disable command */ +static void +do_rpz_enable_disable(RES* ssl, struct worker* worker, char* arg, int enable) { + size_t nmlen; + int nmlabs; + uint8_t *nm = NULL; + struct auth_zones *az = worker->env.auth_zones; + struct auth_zone *z = NULL; + if (!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) + return; + if (az) { + lock_rw_rdlock(&az->lock); + z = auth_zone_find(az, nm, nmlen, LDNS_RR_CLASS_IN); + if (z) { + lock_rw_wrlock(&z->lock); + } + lock_rw_unlock(&az->lock); + } + free(nm); + if (!z) { + (void) ssl_printf(ssl, "error no auth-zone %s\n", arg); + return; + } + if (!z->rpz) { + (void) ssl_printf(ssl, "error auth-zone %s not RPZ\n", arg); + lock_rw_unlock(&z->lock); + return; + } + if (enable) { + rpz_enable(z->rpz); + } else { + rpz_disable(z->rpz); + } + lock_rw_unlock(&z->lock); + send_ok(ssl); +} + +/** do the rpz_enable command */ +static void +do_rpz_enable(RES* ssl, struct worker* worker, char* arg) +{ + do_rpz_enable_disable(ssl, worker, arg, 1); +} + +/** do the rpz_disable command */ +static void +do_rpz_disable(RES* ssl, struct worker* worker, char* arg) +{ + do_rpz_enable_disable(ssl, worker, arg, 0); +} + /** tell other processes to execute the command */ static void distribute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd) @@ -3106,6 +3157,10 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd, do_flush_bogus(ssl, worker); } else if(cmdcmp(p, "flush_negative", 14)) { do_flush_negative(ssl, worker); + } else if(cmdcmp(p, "rpz_enable", 10)) { + do_rpz_enable(ssl, worker, skipwhite(p+10)); + } else if(cmdcmp(p, "rpz_disable", 11)) { + do_rpz_disable(ssl, worker, skipwhite(p+11)); } else { (void)ssl_printf(ssl, "error unknown command '%s'\n", p); } diff --git a/daemon/unbound.c b/daemon/unbound.c index cd0fd69f2..bc6d2bc9e 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -337,22 +337,44 @@ readpid (const char* file) /** write pid to file. * @param pidfile: file name of pid file. * @param pid: pid to write to file. + * @return false on failure */ -static void +static int writepid (const char* pidfile, pid_t pid) { - FILE* f; + int fd; + char pidbuf[32]; + size_t count = 0; + snprintf(pidbuf, sizeof(pidbuf), "%lu\n", (unsigned long)pid); - if ((f = fopen(pidfile, "w")) == NULL ) { + if((fd = open(pidfile, O_WRONLY | O_CREAT | O_TRUNC +#ifdef O_NOFOLLOW + | O_NOFOLLOW +#endif + , 0644)) == -1) { log_err("cannot open pidfile %s: %s", pidfile, strerror(errno)); - return; + return 0; } - if(fprintf(f, "%lu\n", (unsigned long)pid) < 0) { - log_err("cannot write to pidfile %s: %s", - pidfile, strerror(errno)); + while(count < strlen(pidbuf)) { + ssize_t r = write(fd, pidbuf+count, strlen(pidbuf)-count); + if(r == -1) { + if(errno == EAGAIN || errno == EINTR) + continue; + log_err("cannot write to pidfile %s: %s", + pidfile, strerror(errno)); + close(fd); + return 0; + } else if(r == 0) { + log_err("cannot write any bytes to pidfile %s: " + "write returns 0 bytes written", pidfile); + close(fd); + return 0; + } + count += r; } - fclose(f); + close(fd); + return 1; } /** @@ -506,16 +528,17 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, /* write new pidfile (while still root, so can be outside chroot) */ #ifdef HAVE_KILL if(cfg->pidfile && cfg->pidfile[0] && need_pidfile) { - writepid(daemon->pidfile, getpid()); - if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1 && - pidinchroot) { + if(writepid(daemon->pidfile, getpid())) { + if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1 && + pidinchroot) { # ifdef HAVE_CHOWN - if(chown(daemon->pidfile, cfg_uid, cfg_gid) == -1) { - verbose(VERB_QUERY, "cannot chown %u.%u %s: %s", - (unsigned)cfg_uid, (unsigned)cfg_gid, - daemon->pidfile, strerror(errno)); - } + if(chown(daemon->pidfile, cfg_uid, cfg_gid) == -1) { + verbose(VERB_QUERY, "cannot chown %u.%u %s: %s", + (unsigned)cfg_uid, (unsigned)cfg_gid, + daemon->pidfile, strerror(errno)); + } # endif /* HAVE_CHOWN */ + } } } #else diff --git a/daemon/worker.c b/daemon/worker.c index 9e4ad7c75..159d7941c 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -513,7 +513,8 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, - msg->rep, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad)) + msg->rep, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, + worker->env.now_tv)) return 0; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, &msg->qinfo, id, flags, edns); @@ -544,7 +545,8 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, msg->rep, - (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad)) + (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad, + worker->env.now_tv)) return 0; msg->rep->flags |= BIT_QR|BIT_RA; if(!apply_edns_options(edns, &edns_bak, worker->env.cfg, @@ -553,7 +555,8 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, repinfo->c->buffer, 0, 1, worker->scratchpad, udpsize, edns, (int)(edns->bits & EDNS_DO), secure)) { if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL, - LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad)) + LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, + worker->env.now_tv)) edns->opt_list = NULL; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, &msg->qinfo, id, flags, edns); @@ -576,7 +579,7 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, struct reply_info** encode_repp, struct auth_zones* az) { - struct respip_action_info actinfo = {0}; + struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; if(qinfo->qtype != LDNS_RR_TYPE_A && @@ -684,7 +687,8 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, rep, - LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad)) + LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, + worker->env.now_tv)) goto bail_out; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, qinfo, id, flags, edns); @@ -718,7 +722,8 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, rep, - (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad)) + (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad, + worker->env.now_tv)) goto bail_out; *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && @@ -754,7 +759,8 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, repinfo->c->buffer, timenow, 1, worker->scratchpad, udpsize, edns, (int)(edns->bits & EDNS_DO), *is_secure_answer)) { if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL, - LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad)) + LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, + worker->env.now_tv)) edns->opt_list = NULL; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, qinfo, id, flags, edns); @@ -842,7 +848,8 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns, edns->udp_size = EDNS_ADVERTISED_SIZE; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(&worker->env, NULL, NULL, NULL, - LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad)) + LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad, + worker->env.now_tv)) edns->opt_list = NULL; if(sldns_buffer_capacity(pkt) >= sldns_buffer_limit(pkt)+calc_edns_field_size(edns)) @@ -1282,6 +1289,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits &= EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; verbose(VERB_ALGO, "query with bad edns version."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); error_encode(c->buffer, EDNS_RCODE_BADVERS&0xf, &qinfo, @@ -1807,7 +1815,7 @@ worker_init(struct worker* worker, struct config_file *cfg, &worker_alloc_cleanup, worker, cfg->do_udp || cfg->udp_upstream_without_downstream, worker->daemon->connect_sslctx, cfg->delay_close, - cfg->tls_use_sni, dtenv); + cfg->tls_use_sni, dtenv, cfg->udp_connect); if(!worker->back) { log_err("could not create outgoing sockets"); worker_delete(worker); diff --git a/dns64/dns64.c b/dns64/dns64.c index 5c70119a5..c79bc9c65 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -198,14 +198,17 @@ uitoa(unsigned n, char* s) static uint32_t extract_ipv4(const uint8_t ipv6[], size_t ipv6_len, const int offset) { - uint32_t ipv4; + uint32_t ipv4 = 0; + int i, pos; log_assert(ipv6_len == 16); (void)ipv6_len; - ipv4 = (uint32_t)ipv6[offset/8+0] << (24 + (offset%8)) - | (uint32_t)ipv6[offset/8+1] << (16 + (offset%8)) - | (uint32_t)ipv6[offset/8+2] << ( 8 + (offset%8)) - | (uint32_t)ipv6[offset/8+3] << ( 0 + (offset%8)); - if (offset/8+4 < 16) - ipv4 |= (uint32_t)ipv6[offset/8+4] >> (8 - offset%8); + log_assert(offset == 32 || offset == 40 || offset == 48 || offset == 56 || + offset == 64 || offset == 96); + for(i = 0, pos = offset / 8; i < 4; i++, pos++) { + if (pos == 8) + pos++; + ipv4 = ipv4 << 8; + ipv4 |= ipv6[pos]; + } return ipv4; } @@ -296,18 +299,18 @@ synthesize_aaaa(const uint8_t prefix_addr[], size_t prefix_addr_len, int prefix_net, const uint8_t a[], size_t a_len, uint8_t aaaa[], size_t aaaa_len) { + size_t i; + int pos; log_assert(prefix_addr_len == 16 && a_len == 4 && aaaa_len == 16); + log_assert(prefix_net == 32 || prefix_net == 40 || prefix_net == 48 || + prefix_net == 56 || prefix_net == 64 || prefix_net == 96); (void)prefix_addr_len; (void)a_len; (void)aaaa_len; memcpy(aaaa, prefix_addr, 16); - aaaa[prefix_net/8+0] |= a[0] >> (0+prefix_net%8); - aaaa[prefix_net/8+1] |= a[0] << (8-prefix_net%8); - aaaa[prefix_net/8+1] |= a[1] >> (0+prefix_net%8); - aaaa[prefix_net/8+2] |= a[1] << (8-prefix_net%8); - aaaa[prefix_net/8+2] |= a[2] >> (0+prefix_net%8); - aaaa[prefix_net/8+3] |= a[2] << (8-prefix_net%8); - aaaa[prefix_net/8+3] |= a[3] >> (0+prefix_net%8); - if (prefix_net/8+4 < 16) /* <-- my beautiful symmetry is destroyed! */ - aaaa[prefix_net/8+4] |= a[3] << (8-prefix_net%8); + for(i = 0, pos = prefix_net / 8; i < a_len; i++, pos++) { + if(pos == 8) + aaaa[pos++] = 0; + aaaa[pos] = a[i]; + } } @@ -374,8 +377,10 @@ dns64_apply_cfg(struct dns64_env* dns64_env, struct config_file* cfg) log_err("dns64_prefix is not IPv6: %s", cfg->dns64_prefix); return 0; } - if (dns64_env->prefix_net < 0 || dns64_env->prefix_net > 96) { - log_err("dns64-prefix length it not between 0 and 96: %s", + if (dns64_env->prefix_net != 32 && dns64_env->prefix_net != 40 && + dns64_env->prefix_net != 48 && dns64_env->prefix_net != 56 && + dns64_env->prefix_net != 64 && dns64_env->prefix_net != 96 ) { + log_err("dns64-prefix length it not 32, 40, 48, 56, 64 or 96: %s", cfg->dns64_prefix); return 0; } @@ -722,7 +727,7 @@ dns64_synth_aaaa_data(const struct ub_packed_rrset_key* fk, *dd_out = NULL; return; /* integer overflow protection in alloc */ } - if (!(dd = *dd_out = regional_alloc(region, + if (!(dd = *dd_out = regional_alloc_zero(region, sizeof(struct packed_rrset_data) + fd->count * (sizeof(size_t) + sizeof(time_t) + sizeof(uint8_t*) + 2 + 16)))) { diff --git a/dnscrypt/dnscrypt.m4 b/dnscrypt/dnscrypt.m4 index 591bd1375..68964242a 100644 --- a/dnscrypt/dnscrypt.m4 +++ b/dnscrypt/dnscrypt.m4 @@ -11,7 +11,7 @@ AC_DEFUN([dnsc_DNSCRYPT], [opt_dnscrypt=$enableval], [opt_dnscrypt=no]) if test "x$opt_dnscrypt" != "xno"; then - AC_ARG_WITH([libsodium], AC_HELP_STRING([--with-libsodium=path], + AC_ARG_WITH([libsodium], AS_HELP_STRING([--with-libsodium=path], [Path where libsodium is installed, for dnscrypt]), [ CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" diff --git a/dnstap/dnstap.m4 b/dnstap/dnstap.m4 index ba723e0be..1ff6c3fea 100644 --- a/dnstap/dnstap.m4 +++ b/dnstap/dnstap.m4 @@ -20,7 +20,7 @@ AC_DEFUN([dt_DNSTAP], if test -z "$PROTOC_C"; then AC_MSG_ERROR([The protoc-c program was not found. Please install protobuf-c!]) fi - AC_ARG_WITH([protobuf-c], AC_HELP_STRING([--with-protobuf-c=path], + AC_ARG_WITH([protobuf-c], AS_HELP_STRING([--with-protobuf-c=path], [Path where protobuf-c is installed, for dnstap]), [ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0 if test -f $withval/include/google/protobuf-c/protobuf-c.h; then diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 3ebe2b4e4..8e28be4e8 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -727,7 +727,7 @@ static ssize_t tap_receive(struct tap_data* data, void* buf, size_t len) } /** delete the tap structure */ -void tap_data_free(struct tap_data* data) +static void tap_data_free(struct tap_data* data) { ub_event_del(data->ev); ub_event_free(data->ev); @@ -1166,7 +1166,8 @@ int sig_quit = 0; /** signal handler for user quit */ static RETSIGTYPE main_sigh(int sig) { - verbose(VERB_ALGO, "exit on signal %d\n", sig); + if(!sig_quit) + fprintf(stderr, "exit on signal %d\n", sig); if(sig_base) { ub_event_base_loopexit(sig_base); sig_base = NULL; @@ -1354,6 +1355,10 @@ int main(int argc, char** argv) struct tube; struct query_info; #include "util/data/packed_rrset.h" +#include "daemon/worker.h" +#include "daemon/remote.h" +#include "util/fptr_wlist.h" +#include "libunbound/context.h" void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), diff --git a/doc/Changelog b/doc/Changelog index e8314747e..37d496835 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,207 @@ +4 February 2021: Wouter + - release 1.13.1rc2 tag on branch-1.13.1 with added changes of 2 feb. + +2 February 2021: Wouter + - branch-1.13.1 is created, with release-1.13.1rc1 tag. + - Fix dynlibmod link on rhel8 for -ldl inclusion. + - Fix windows dependency on libssp.dll because of default stack + protector in mingw. + - Fix indentation of root anchor for use by windows install script. + +1 February 2021: George + - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. + +29 January 2021: Wouter + - Fix for doxygen 1.8.20 compatibility. + +28 January 2021: Wouter + - Annotate that we ignore the return value of if_indextoname. + - Fix to use correct type for label count in rpz routine. + - Fix empty clause warning in config_file nsid parse. + - Fix to use correct type for label count in ipdnametoaddr rpz routine. + - Fix empty clause warning in edns pass for padding. + - Fix fwd ancil test post script when not supported. + +26 January 2021: George + - Merge PR #408 from fobser: Prevent a few more yacc clashes. + - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the + original instead of a decrementing TTL ('serve-original-ttl') + - Merge PR #355 from noloader: Make ICANN Update CA and DS Trust Anchor + static data. + - Ignore cache blacklisting when trying to reply with expired data from + cache (#394). + +26 January 2021: Wouter + - Fix compile of unbound-dnstap-socket without dnstap installed. + +22 January 2021: Willem + - Padding of queries and responses with DNS over TLS as specified in + RFC7830 and RFC8467. + +22 January 2021: George + - Fix TTL of SOA record for negative answers (localzone and + authzone data) to be the minimum of the SOA TTL and the SOA.MINIMUM. + +19 January 2021: Willem + - Support for RFC5001: DNS Name Server Identifier (NSID) Option + with the nsid: option in unbound.conf + +18 January 2021: Wouter + - Fix #404: DNS query with small edns bufsize fail. + - Fix declaration before statement and signed comparison warning in + dns64. + +15 January 2021: Wouter + - Merge #402 from fobser: Implement IPv4-Embedded addresses according + to RFC6052. + +14 January 2021: Wouter + - Fix for #93: dynlibmodule import library is named libunbound.dll.a. + +13 January 2021: Wouter + - Merge #399 from xiangbao227: The lock of lruhash table should + unlocked after markdel entry. + - Fix for #93: dynlibmodule link fix for Windows. + +12 January 2021: Wouter + - Fix #397: [Feature request] add new type always_null to local-zone + similar to always_nxdomain. + - Fix so local zone types always_nodata and always_deny can be used + from the config file. + +8 January 2021: Wouter + - Merge PR #391 from fhriley: Add start_time to reply callbacks so + modules can compute the response time. + - For #391: use struct timeval* start_time for callback information. + - For #391: fix indentation. + - For #391: more double casts in python start time calculation. + - Add comment documentation. + - Fix clang analysis warning. + +6 January 2021: Wouter + - Fix #379: zone loading over HTTP appears to have buffer issues. + - Merge PR #395 from mptre: add missing null check. + - Fix #387: client-subnet-always-forward seems to effectively bypass + any caching? + +5 January 2021: Wouter + - Fix #385: autoconf 2.70 impacts unbound build + - Merge PR #375 by fhriley: Add rpz_enable and rpz_disable commands + to unbound-control. + +4 January 2021: Wouter + - For #376: Fix that comm point event is not double removed or double + added to event map. + - iana portlist updated. + +16 December 2020: George + - Fix error cases when udp-connect is set and send() returns an error + (modified patch from Xin Li @delphij). + +11 December 2020: Wouter + - Fix #371: unbound-control timeout when Unbound is not running. + - Fix to squelch permission denied and other errors from remote host, + they are logged at higher verbosity but not on low verbosity. + - Merge PR #335 from fobser: Sprinkle in some static to prevent + missing prototype warnings. + - Merge PR #373 from fobser: Warning: arithmetic on a pointer to void + is a GNU extension. + - Fix missing prototypes in the code. + +3 December 2020: Wouter + - make depend. + - iana portlist updated. + +2 December 2020: Wouter + - Fix #360: for the additionally reported TCP Fast Open makes TCP + connections fail, in that case we print a hint that this is + happening with the error in the logs. + - Fix #356: deadlock when listening tcp. + - Fix unbound-dnstap-socket to not use log routine from interrupt + handler and not print so frequently when invoked in sequence. + - Fix on windows to ignore connection failure on UDP, unless verbose. + - Fix for #283: fix stream reuse and tcp fast open. + - Fix update, with write event check with streamreuse and fastopen. + +1 December 2020: Wouter + - Fix #358: Squelch udp connect 'no route to host' errors on low + verbosity. + +30 November 2020: Wouter + - Fix assertion failure on double callback when iterator loses + interest in query at head of line that then has the tcp stream + not kept for reuse. + - tag for the 1.13.0rc4 release. This also became the 1.13.0 + release version on 3 dec 2020 with the streamreuse and fastopen + fix from 2 dec 2020. The code repo continues for 1.13.1 in + development. + +27 November 2020: Wouter + - Fix compile warning for type cast in http2_submit_dns_response. + - Fix when use free buffer to initialize rbtree for stream reuse. + - Fix compile warnings for windows. + - Fix compile warnings in rpz initialization. + - Fix contrib/metrics.awk for FreeBSD awk compatibility. + - tag for the 1.13.0rc3 release. + +26 November 2020: Wouter + - Fix to omit UDP receive errors from log, if verbosity low. + These happen because of udp-connect. + - For #352: contrib/metrics.awk for Prometheus style metrics output. + - Fix that after failed read, the readagain cannot activate. + - Clear readagain upon decommission of pending tcp structure. + +25 November 2020: Wouter + - with udp-connect ignore connection refused with UDP timeouts. + - Fix udp-connect on FreeBSD, do send calls on connected UDP socket. + - Better fix for reuse tree comparison for is-tls sockets. Where + the tree key identity is preserved after cleanup of the TLS state. + - Remove debug commands from reuse tests. + - Fix memory leak for edns client tag opcode config element. + - Attempt fix for libevent state in tcp reuse cases after a packet + is written. + - Fix readagain and writeagain callback functions for comm point + cleanup. + - tag for the 1.13.0rc2 release. + +24 November 2020: Wouter + - Merge PR #283 : Stream reuse. This implements upstream stream + reuse for performing several queries over the same TCP or TLS + channel. + - set version of main branch to 1.13.0 for upcoming release. + - iana portlist updated. + - Fix one port unit test for udp-connect. + - tag for the 1.13.0rc1 release. + - Fix crash when TLS connection is closed prematurely, when + reuse tree comparison is not properly identical to insertion. + - Fix padding of struct regional for 32bit systems. + +23 November 2020: George + - Merge PR #313 from Ralph Dolmans: Replace edns-client-tag with + edns-client-string option. + +23 November 2020: Wouter + - Merge #351 from dvzrv: Add AF_NETLINK to set of allowed socket + address families. + - Fix #350: with the AF_NETLINK permission, to fix 1.12.0 error: + failed to list interfaces: getifaddrs: Address family not + supported by protocol. + - Fix #347: IP_DONTFRAG broken on Apple xcode 12.2. + - Option to toggle udp-connect, default is enabled. + - Fix for #303 CVE-2020-28935 : Fix that symlink does not interfere + with chown of pidfile. + - Further fix for it and retvalue 0 fix for it. + +12 November 2020: Wouter + - Fix to connect() to UDP destinations, default turned on, + this lowers vulnerability to ICMP side channels. + - Retry for interfaces with unused ports if possible. + 10 November 2020: Wouter - Fix #341: fixing a possible memory leak. + - Fix memory leak after fix for possible memory leak failure. + - Fix #343: Fail to build --with-libnghttp2 with error: 'SSIZE_MAX' + undeclared. 27 October 2020: Wouter - In man page note that tls-cert-bundle is read before permission diff --git a/doc/FEATURES b/doc/FEATURES index 076988ea9..8d69aba9b 100644 --- a/doc/FEATURES +++ b/doc/FEATURES @@ -39,6 +39,7 @@ RFC 4343: case insensitive handling of domain names. RFC 4509: SHA256 DS hash. RFC 4592: wildcards. RFC 4697: No DNS Resolution Misbehavior. +RFC 5001: DNS Name Server Identifier (NSID) Option RFC 5011: update of trust anchors with timers. RFC 5155: NSEC3, NSEC3PARAM types RFC 5358: reflectors-are-evil: access control list for recursive diff --git a/doc/TODO b/doc/TODO index a2690451a..839656154 100644 --- a/doc/TODO +++ b/doc/TODO @@ -14,7 +14,6 @@ o (option) store primed key data in a overlaid keyhints file (sort of like draft o windows version, auto update feature, a query to check for the version. o command the server with TSIG inband. get-config, clearcache, get stats, get memstats, get ..., reload, clear one zone from cache -o NSID rfc 5001 support. o timers rfc 5011 support. o Treat YXDOMAIN from a DNAME properly, in iterator (not throwaway), validator. o make timeout backoffs randomized (a couple percent random) to spread traffic. diff --git a/doc/example.conf.in b/doc/example.conf.in index ce8b22e57..82b652f8a 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -161,6 +161,9 @@ server: # msec to wait before close of port on timeout UDP. 0 disables. # delay-close: 0 + # perform connect for UDP sockets to mitigate ICMP side channel. + # udp-connect: yes + # msec for waiting for an unknown server to reply. Increase if you # are behind a slow satellite link, to eg. 1128. # unknown-server-time-limit: 376 @@ -374,6 +377,9 @@ server: # the version to report. Leave "" or default to return package version. # version: "" + # NSID identity (hex string, or "ascii_somestring"). default disabled. + # nsid: "aabbccdd" + # the target fetch policy. # series of integers describing the policy per dependency depth. # The number of values in the list determines the maximum dependency @@ -385,7 +391,7 @@ server: # target-fetch-policy: "3 2 1 0 0" # Harden against very small EDNS buffer sizes. - # harden-short-bufsize: no + # harden-short-bufsize: yes # Harden against unseemly large queries. # harden-large-queries: no @@ -592,6 +598,13 @@ server: # A recommended value is 1800. # serve-expired-client-timeout: 0 + # Return the original TTL as received from the upstream name server rather + # than the decrementing TTL as stored in the cache. Enabling this feature + # does not impact cache expiry, it only changes the TTL unbound embeds in + # responses to queries. Note that enabling this feature implicitly disables + # enforcement of the configured minimum and maximum TTL. + # serve-original-ttl: no + # Have the validator log failed validations for your diagnosis. # 0: off. 1: A line per failed user query. 2: With reason and bad IP. # val-log-level: 0 @@ -704,8 +717,10 @@ server: # 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 always_transparent, always_refuse, always_nxdomain, always_nodata, + # always_deny resolve in that way but ignore local data for + # that name + # o always_null returns 0.0.0.0 or ::0 for any name in the zone. # o noview breaks out of that view towards global local-zones. # # defaults are localhost address, reverse for 127.0.0.1 and ::1 @@ -753,6 +768,12 @@ 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" + # Pad responses to padded queries received over TLS + # pad-responses: yes + + # Padded responses will be padded to the closest multiple of this size. + # pad-responses-block-size: 468 + # Use the SNI extension for TLS connections. Default is yes. # Changing the value requires a reload. # tls-use-sni: yes @@ -775,6 +796,12 @@ server: # Add system certs to the cert bundle, from the Windows Cert Store # tls-win-cert: no + # Pad queries over TLS upstreams + # pad-queries: yes + + # Padded queries will be padded to the closest multiple of this size. + # pad-queries-block-size: 128 + # Also serve tls on these port numbers (eg. 443, ...), by listing # tls-additional-port: portno for each of the port numbers. diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 97972ff27..20325abf2 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -305,6 +305,12 @@ Transfer the auth zone from master. The auth zone probe sequence is started, where the masters are probed to see if they have an updated zone (with the SOA serial check). And then the zone is transferred for a newer zone version. .TP +.B rpz_enable \fIzone\fR +Enable the RPZ zone if it had previously been disabled. +.TP +.B rpz_enable \fIzone\fR +Disable the RPZ zone. +.TP .B view_list_local_zones \fIview\fR \fIlist_local_zones\fR for given view. .TP diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 4d59c43ab..649078ea3 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -274,6 +274,10 @@ eg. 1500 msec. When timeouts happen you need extra sockets, it checks the ID and remote IP of packets, and unwanted packets are added to the unwanted packet counter. .TP +.B udp\-connect: \fI +Perform connect for UDP sockets that mitigates ICMP side channel leakage. +Default is yes. +.TP .B unknown\-server\-time\-limit: \fI The wait time in msec for waiting for an unknown server to reply. Increase this if you are behind a slow satellite link, to eg. 1128. @@ -560,6 +564,25 @@ and that is the default. Set the list of ciphersuites to allow when serving TLS. This is for newer TLS 1.3 connections. Use "" for defaults, and that is the default. .TP +.B pad\-responses: \fI +If enabled, TLS serviced queries that contained an EDNS Padding option will +cause responses padded to the closest multiple of the size specified in +\fBpad\-responses\-block\-size\fR. +Default is yes. +.TP +.B pad\-responses\-block\-size: \fI +The block size with which to pad responses serviced over TLS. Only responses +to padded queries will be padded. +Default is 468. +.TP +.B pad\-queries: \fI +If enabled, all queries sent over TLS upstreams will be padded to the closest +multiple of the size specified in \fBpad\-queries\-block\-size\fR. +Default is yes. +.TP +.B pad\-queries\-block\-size: \fI +The block size with which to pad queries sent over TLS upstreams. +Default is 128. .B tls\-use\-sni: \fI Enable or disable sending the SNI extension on TLS connections. Default is yes. @@ -815,6 +838,11 @@ If enabled version.server and version.bind queries are refused. Set the version to report. If set to "", the default, then the package version is returned. .TP +.B nsid:\fR +Add the specified nsid to the EDNS section of the answer when queried +with an NSID EDNS enabled packet. As a sequence of hex characters or +with ascii_ prefix and then an ascii string. +.TP .B hide\-trustanchor: \fI If enabled trustanchor.unbound queries are refused. .TP @@ -835,9 +863,8 @@ closer to that of BIND 9, while setting "\-1 \-1 \-1 \-1 \-1" gives behaviour rumoured to be closer to that of BIND 8. .TP .B harden\-short\-bufsize: \fI -Very small EDNS buffer sizes from queries are ignored. Default is off, since -it is legal protocol wise to send these, and unbound tries to give very -small answers to these queries, where possible. +Very small EDNS buffer sizes from queries are ignored. Default is on, as +described in the standard. .TP .B harden\-large\-queries: \fI Very large queries are ignored. Default is off, since it is legal protocol @@ -1159,6 +1186,19 @@ responding with expired data. A recommended value per RFC 8767 is 1800. Setting this to 0 will disable this behavior. Default is 0. .TP +.B serve\-original\-ttl: \fI +If enabled, unbound will always return the original TTL as received from +the upstream name server rather than the decrementing TTL as +stored in the cache. This feature may be useful if unbound serves as a +front-end to a hidden authoritative name server. Enabling this feature does +not impact cache expiry, it only changes the TTL unbound embeds in responses to +queries. Note that enabling this feature implicitly disables enforcement of +the configured minimum and maximum TTL, as it is assumed users who enable this +feature do not want unbound to change the TTL obtained from an upstream server. +Thus, the values set using \fBcache\-min\-ttl\fR and \fBcache\-max\-ttl\fR are +ignored. +Default is "no". +.TP .B val\-nsec3\-keysize\-iterations: \fI<"list of values"> List of keysize and iteration count values, separated by spaces, surrounded by quotes. Default is "1024 150 2048 500 4096 2500". This determines the @@ -1233,7 +1273,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, -inform_redirect, always_transparent, always_refuse, always_nxdomain, noview, +inform_redirect, always_transparent, always_refuse, always_nxdomain, always_null, 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. @@ -1307,6 +1347,17 @@ Like refuse, but ignores local data and refuses the query. \h'5'\fIalways_nxdomain\fR Like static, but ignores local data and returns nxdomain for the query. .TP 10 +\h'5'\fIalways_nodata\fR +Like static, but ignores local data and returns nodata for the query. +.TP 10 +\h'5'\fIalways_deny\fR +Like deny, but ignores local data and drops the query. +.TP 10 +\h'5'\fIalways_null\fR +Always returns 0.0.0.0 or ::0 for every name in the zone. Like redirect +with zero data for A and AAAA. Ignores local data in the zone. Used for +some block lists. +.TP 10 \h'5'\fInoview\fR Breaks out of that view and moves towards the global local zones for answer to the query. If the view first is no, it'll resolve normally. If view first @@ -1552,15 +1603,15 @@ Set the number of servers that should be used for fast server selection. Only use the fastest specified number of servers with the fast\-server\-permil option, that turns this on or off. The default is to use the fastest 3 servers. .TP 5 -.B edns\-client\-tag: \fI -Include an edns-client-tag option in queries with destination address matching -the configured IP netblock. This configuration option can be used multiple -times. The most specific match will be used. The tag data is configured in -decimal format, from 0 to 65535. +.B edns\-client\-string: \fI +Include an EDNS0 option containing configured ascii string in queries with +destination address matching the configured IP netblock. This configuration +option can be used multiple times. The most specific match will be used. .TP 5 -.B edns\-client\-tag\-opcode: \fI -EDNS0 option code for the edns-client-tag option, from 0 to 65535. Default is -16, as assigned by IANA. +.B edns\-client\-string\-opcode: \fI +EDNS0 option code for the \fIedns\-client\-string\fR option, from 0 to 65535. +A value from the `Reserved for Local/Experimental` range (65001-65534) should +be used. Default is 65001. .SS "Remote Control Options" In the .B remote\-control: @@ -2048,7 +2099,8 @@ Specify whether the ECS address check (configured using query contains an ECS record, or only for queries for which the ECS record is generated using the querier address (and therefore did not contain ECS data in the client query). If enabled, the address check is skipped when the client -query contains an ECS record. Default is no. +query contains an ECS record. And the lookup in the regular cache is skipped. +Default is no. .TP .B max\-client\-subnet\-ipv6: \fI\fR Specifies the maximum prefix length of the client source address we are willing diff --git a/doc/unbound.doxygen b/doc/unbound.doxygen index 45f49b367..4c32d8943 100644 --- a/doc/unbound.doxygen +++ b/doc/unbound.doxygen @@ -1143,7 +1143,7 @@ COMPACT_LATEX = NO # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. -PAPER_TYPE = a4wide +#PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. @@ -1451,7 +1451,7 @@ EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). -PERL_PATH = /usr/bin/perl +#PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool @@ -1473,7 +1473,7 @@ CLASS_DIAGRAMS = YES # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = +#MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 3bf9d1acb..ffac7ff30 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -5,16 +5,16 @@ * module actions. */ #include "config.h" +#include "dynlibmod/dynlibmod.h" #include "util/module.h" #include "util/config_file.h" -#include "dynlibmod/dynlibmod.h" #if HAVE_WINDOWS_H #include #define __DYNMOD HMODULE #define __DYNSYM FARPROC #define __LOADSYM GetProcAddress -void log_dlerror() { +static void log_dlerror() { DWORD dwLastError = GetLastError(); LPSTR MessageBuffer; DWORD dwBufferLength; @@ -37,11 +37,11 @@ void log_dlerror() { } -HMODULE open_library(const char* fname) { +static HMODULE open_library(const char* fname) { return LoadLibrary(fname); } -void close_library(const char* fname, __DYNMOD handle) { +static void close_library(const char* fname, __DYNMOD handle) { (void)fname; (void)handle; } @@ -50,15 +50,15 @@ void close_library(const char* fname, __DYNMOD handle) { #define __DYNMOD void* #define __DYNSYM void* #define __LOADSYM dlsym -void log_dlerror() { +static void log_dlerror() { log_err("dynlibmod: %s", dlerror()); } -void* open_library(const char* fname) { +static void* open_library(const char* fname) { return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); } -void close_library(const char* fname, __DYNMOD handle) { +static void close_library(const char* fname, __DYNMOD handle) { if(!handle) return; if(dlclose(handle) != 0) { log_err("dlclose %s: %s", fname, strerror(errno)); @@ -212,10 +212,10 @@ size_t dynlibmod_get_mem(struct module_env* env, int id) { int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* callback) { + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* callback) { struct cb_pair* cb_pair = (struct cb_pair*) callback; - return ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); + return ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, start_time, id, cb_pair->cb_arg); } int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index c34cf0e88..321f4f693 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -70,8 +70,8 @@ size_t dynlibmod_get_mem(struct module_env* env, int id); int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* callback); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* callback); int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate, struct sockaddr_storage* addr, diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index acb6b5d9b..be2116843 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -7,8 +7,10 @@ * And to build for windows, first make unbound with the --with-dynlibmod * switch, then use this command: * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic - * -o helloworld.dll helloworld.c -L../.. -l:libunbound.a - * to cross-compile a 64-bit Windows DLL. + * -o helloworld.dll helloworld.c -L../.. -l:libunbound.dll.a + * to cross-compile a 64-bit Windows DLL. The libunbound.dll.a is produced + * by the compile step that makes unbound.exe and allows the dynlib dll to + * access definitions in unbound.exe. */ #include "../../config.h" @@ -30,8 +32,8 @@ int reply_callback(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* callback); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* callback); /* Init is called when the module is first loaded. It should be used to set up * the environment for this module and do any other initialisation required. */ @@ -116,8 +118,8 @@ EXPORT size_t get_mem(struct module_env* env, int id) { int reply_callback(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* callback) { + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* callback) { log_info("dynlib: hello world from callback"); struct dynlibmod_env* env = qstate->env->modinfo[id]; if (env->dyn_env != NULL) { diff --git a/libunbound/context.c b/libunbound/context.c index 914855470..267366ae5 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -81,7 +81,7 @@ context_finalize(struct ub_ctx* ctx) if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz, ctx->env, &ctx->mods)) return UB_INITFAIL; - if(!edns_tags_apply_cfg(ctx->env->edns_tags, cfg)) + if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c index 3922eb041..c9e24ba8d 100644 --- a/libunbound/libunbound.c +++ b/libunbound/libunbound.c @@ -154,8 +154,8 @@ static struct ub_ctx* ub_ctx_create_nopipe(void) errno = ENOMEM; return NULL; } - ctx->env->edns_tags = edns_tags_create(); - if(!ctx->env->edns_tags) { + ctx->env->edns_strings = edns_strings_create(); + if(!ctx->env->edns_strings) { auth_zones_delete(ctx->env->auth_zones); edns_known_options_delete(ctx->env); config_delete(ctx->env->cfg); @@ -186,7 +186,7 @@ ub_ctx_create(void) config_delete(ctx->env->cfg); modstack_desetup(&ctx->mods, ctx->env); edns_known_options_delete(ctx->env); - edns_tags_delete(ctx->env->edns_tags); + edns_strings_delete(ctx->env->edns_strings); free(ctx->env); free(ctx); errno = e; @@ -199,7 +199,7 @@ ub_ctx_create(void) config_delete(ctx->env->cfg); modstack_desetup(&ctx->mods, ctx->env); edns_known_options_delete(ctx->env); - edns_tags_delete(ctx->env->edns_tags); + edns_strings_delete(ctx->env->edns_strings); free(ctx->env); free(ctx); errno = e; @@ -338,7 +338,7 @@ ub_ctx_delete(struct ub_ctx* ctx) infra_delete(ctx->env->infra_cache); config_delete(ctx->env->cfg); edns_known_options_delete(ctx->env); - edns_tags_delete(ctx->env->edns_tags); + edns_strings_delete(ctx->env->edns_strings); auth_zones_delete(ctx->env->auth_zones); free(ctx->env); } diff --git a/libunbound/libworker.c b/libunbound/libworker.c index bd42462e1..7f46df386 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -73,6 +73,9 @@ #include "iterator/iter_hints.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" +#ifdef USE_DNSTAP +#include "dnstap/dtstream.h" +#endif #ifdef HAVE_TARGETCONDITIONALS_H #include @@ -238,7 +241,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) ports, numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx, - cfg->delay_close, cfg->tls_use_sni, NULL); + cfg->delay_close, cfg->tls_use_sni, NULL, cfg->udp_connect); w->env->outnet = w->back; if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); @@ -574,6 +577,7 @@ setup_qinfo_edns(struct libworker* w, struct ctx_query* q, edns->edns_version = 0; edns->bits = EDNS_DO; edns->opt_list = NULL; + edns->padding_block_size = 0; if(sldns_buffer_capacity(w->back->udp_buff) < 65535) edns->udp_size = (uint16_t)sldns_buffer_capacity( w->back->udp_buff); diff --git a/makedist.sh b/makedist.sh index c3bfcaad3..25cabe136 100755 --- a/makedist.sh +++ b/makedist.sh @@ -412,6 +412,11 @@ if [ "$DOWIN" = "yes" ]; then cp ../unbound.exe ../unbound-anchor.exe ../unbound-host.exe ../unbound-control.exe ../unbound-checkconf.exe ../unbound-service-install.exe ../unbound-service-remove.exe ../LICENSE ../winrc/unbound-control-setup.cmd ../winrc/unbound-website.url ../winrc/service.conf ../winrc/README.txt ../contrib/create_unbound_ad_servers.cmd ../contrib/warmup.cmd ../contrib/unbound_cache.cmd . mkdir libunbound cp ../../unbound_shared/unbound.h ../../unbound_shared/.libs/libunbound*.dll ../../unbound_shared/.libs/libunbound.dll.a ../../unbound_shared/.libs/libunbound.a ../../unbound_shared/.libs/libunbound*.def ../../sslsharedinstall/lib/libcrypto.dll.a ../../sslsharedinstall/lib/libssl.dll.a ../../sslsharedinstall/bin/libcrypto*.dll ../../sslsharedinstall/bin/libssl*.dll ../../wxpinstall/bin/libexpat*.dll ../../wxpinstall/lib/libexpat.dll.a libunbound/. + if test "$W64" = "no"; then + cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll libunbound/. + else + cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libssp-0.dll libunbound/. + fi # zipfile zip -r ../$file LICENSE README.txt unbound.exe unbound-anchor.exe unbound-host.exe unbound-control.exe unbound-checkconf.exe unbound-service-install.exe unbound-service-remove.exe unbound-control-setup.cmd example.conf service.conf root.key unbound-website.url create_unbound_ad_servers.cmd warmup.cmd unbound_cache.cmd Changelog libunbound info "Testing $file" diff --git a/pythonmod/interface.i b/pythonmod/interface.i index cbee4f714..5dae04aa4 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -20,6 +20,7 @@ * called to perform operations on queries. */ #include + #include #ifdef HAVE_SYS_SOCKET_H #include #endif @@ -696,6 +697,8 @@ struct edns_data { /* ************************************************************************************ * Structure module_env * ************************************************************************************ */ +%rename(_now) module_env::now; +%rename(_now_tv) module_env::now_tv; struct module_env { struct config_file* cfg; struct slabhash* msg_cache; @@ -739,6 +742,19 @@ struct module_env { size_t edns_known_options_num; }; +%inline %{ + PyObject* _module_env_now_get(struct module_env* env) { + double ts = env->now_tv->tv_sec + env->now_tv->tv_usec / 1e6; + return PyFloat_FromDouble(ts); + } +%} +%extend module_env { + %pythoncode %{ + def _now_get(self): return _module_env_now_get(self) + now = property(_now_get) + %} +} + /* ************************************************************************************ * Structure module_qstate * ************************************************************************************ */ @@ -1525,13 +1541,14 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len, int python_inplace_cb_reply_generic(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* python_callback) + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* python_callback) { PyObject *func, *py_edns, *py_qstate, *py_opt_list_out, *py_qinfo; PyObject *py_rep, *py_repinfo, *py_region; PyObject *py_args, *py_kwargs, *result; int res = 0; + double py_start_time = ((double)start_time->tv_sec) + ((double)start_time->tv_usec) / 1.0e6; PyGILState_STATE gstate = PyGILState_Ensure(); func = (PyObject *) python_callback; @@ -1546,7 +1563,8 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len, py_region = SWIG_NewPointerObj((void*) region, SWIGTYPE_p_regional, 0); py_args = Py_BuildValue("(OOOiOOO)", py_qinfo, py_qstate, py_rep, rcode, py_edns, py_opt_list_out, py_region); - py_kwargs = Py_BuildValue("{s:O}", "repinfo", py_repinfo); + py_kwargs = Py_BuildValue("{s:O,s:d}", "repinfo", py_repinfo, "start_time", + py_start_time); result = PyObject_Call(func, py_args, py_kwargs); Py_XDECREF(py_edns); Py_XDECREF(py_qstate); diff --git a/pythonmod/pythonmod.h b/pythonmod/pythonmod.h index ae8af27eb..26d74e09f 100644 --- a/pythonmod/pythonmod.h +++ b/pythonmod/pythonmod.h @@ -72,8 +72,8 @@ size_t pythonmod_get_mem(struct module_env* env, int id); int python_inplace_cb_reply_generic(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* python_callback); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* python_callback); /** Declared here for fptr_wlist access. The definition is in interface.i. */ int python_inplace_cb_query_generic( diff --git a/pythonmod/pythonmod_utils.c b/pythonmod/pythonmod_utils.c index 5d70f2b4b..9f7282540 100644 --- a/pythonmod/pythonmod_utils.c +++ b/pythonmod/pythonmod_utils.c @@ -39,6 +39,7 @@ * conversions. */ #include "config.h" +#include "pythonmod/pythonmod_utils.h" #include "util/module.h" #include "util/netevent.h" #include "util/net_help.h" diff --git a/pythonmod/pythonmod_utils.h b/pythonmod/pythonmod_utils.h index 768eb46de..4ea86f9be 100644 --- a/pythonmod/pythonmod_utils.h +++ b/pythonmod/pythonmod_utils.h @@ -43,6 +43,7 @@ #include "util/module.h" struct delegpt_addr; +struct sldns_buffer; /** * Store the reply_info and query_info pair in message cache (qstate->msg_cache) @@ -77,7 +78,7 @@ void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qin * @param pkt: a sldns_buffer which contains sldns_packet data * @return 0 on failure, out of memory or parse error. */ -int createResponse(struct module_qstate* qstate, sldns_buffer* pkt); +int createResponse(struct module_qstate* qstate, struct sldns_buffer* pkt); /** * Convert reply->addr to string diff --git a/respip/respip.c b/respip/respip.c index 6fa4f1885..8fe82cdee 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -523,7 +523,7 @@ copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region) return NULL; /* guard against integer overflow */ dsize += data->rr_len[i]; } - d = regional_alloc(region, dsize); + d = regional_alloc_zero(region, dsize); if(!d) return NULL; *d = *data; @@ -914,7 +914,7 @@ respip_rewrite_reply(const struct query_info* qinfo, int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; struct rpz* r; - struct auth_zone* a; + struct auth_zone* a = NULL; struct ub_packed_rrset_key* data = NULL; int rpz_used = 0; int rpz_log = 0; @@ -1109,7 +1109,7 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, qstate->return_msg && qstate->return_msg->rep) { struct reply_info* new_rep = qstate->return_msg->rep; struct ub_packed_rrset_key* alias_rrset = NULL; - struct respip_action_info actinfo = {0}; + struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; if(!respip_rewrite_reply(&qstate->qinfo, @@ -1170,7 +1170,7 @@ respip_merge_cname(struct reply_info* base_rep, struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */ uint16_t tgt_rcode; size_t i, j; - struct respip_action_info actinfo = {0}; + struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; /* If the query for the CNAME target would result in an unusual rcode, diff --git a/services/authzone.c b/services/authzone.c index 4c31452a6..6ddf524f8 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2518,7 +2518,8 @@ static int az_add_negative_soa(struct auth_zone* z, struct regional* region, struct dns_msg* msg) { - uint32_t minimum; + time_t minimum; + size_t i; struct packed_rrset_data* d; struct auth_rrset* soa; struct auth_data* apex = az_find_name(z, z->name, z->namelen); @@ -2535,9 +2536,11 @@ az_add_negative_soa(struct auth_zone* z, struct regional* region, /* last 4 bytes are minimum ttl in network format */ if(d->count == 0) return 0; if(d->rr_len[0] < 2+4) return 0; - minimum = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-4)); - d->ttl = (time_t)minimum; - d->rr_ttl[0] = (time_t)minimum; + minimum = (time_t)sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-4)); + minimum = d->ttlttl:minimum; + d->ttl = minimum; + for(i=0; i < d->count + d->rrsig_count; i++) + d->rr_ttl[i] = minimum; msg->rep->ttl = get_rrset_ttl(msg->rep->rrsets[0]); msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; @@ -3473,7 +3476,7 @@ auth_answer_encode(struct query_info* qinfo, struct module_env* env, edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, msg->rep, - (int)FLAGS_GET_RCODE(msg->rep->flags), edns, repinfo, temp) + (int)FLAGS_GET_RCODE(msg->rep->flags), edns, repinfo, temp, env->now_tv) || !reply_info_answer_encode(qinfo, msg->rep, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), @@ -3497,7 +3500,7 @@ auth_error_encode(struct query_info* qinfo, struct module_env* env, edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL, - rcode, edns, repinfo, temp)) + rcode, edns, repinfo, temp, env->now_tv)) edns->opt_list = NULL; error_encode(buf, rcode|BIT_AA, qinfo, *(uint16_t*)sldns_buffer_begin(buf), @@ -5336,6 +5339,7 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; @@ -6322,7 +6326,7 @@ xfr_probe_send_probe(struct auth_xfer* xfr, struct module_env* env, /* send udp packet */ if(!comm_point_send_udp_msg(xfr->task_probe->cp, env->scratch_buffer, - (struct sockaddr*)&addr, addrlen)) { + (struct sockaddr*)&addr, addrlen, 0)) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); @@ -6524,6 +6528,7 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; diff --git a/services/cache/rrset.c b/services/cache/rrset.c index 8c0251bcb..4e3d08bda 100644 --- a/services/cache/rrset.c +++ b/services/cache/rrset.c @@ -45,6 +45,7 @@ #include "util/config_file.h" #include "util/data/packed_rrset.h" #include "util/data/msgreply.h" +#include "util/data/msgparse.h" #include "util/regional.h" #include "util/alloc.h" #include "util/net_help.h" @@ -396,6 +397,7 @@ rrset_update_sec_status(struct rrset_cache* r, cachedata->ttl = updata->ttl + now; for(i=0; icount+cachedata->rrsig_count; i++) cachedata->rr_ttl[i] = updata->rr_ttl[i]+now; + cachedata->ttl_add = now; } } lock_rw_unlock(&e->lock); diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 71c8eb159..b790660f2 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -43,6 +43,7 @@ # include #endif #include +#include #ifdef USE_TCP_FASTOPEN #include #endif @@ -530,7 +531,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, return -1; } } -# elif defined(IP_DONTFRAG) +# elif defined(IP_DONTFRAG) && !defined(__APPLE__) + /* the IP_DONTFRAG option if defined in the 11.0 OSX headers, + * but does not work on that version, so we exclude it */ int off = 0; if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG, &off, (socklen_t)sizeof(off)) < 0) { @@ -1453,7 +1456,7 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres log_err("inet_ntop failed"); return 0; } - if_indextoname(in6->sin6_scope_id, + (void)if_indextoname(in6->sin6_scope_id, (char *)if_index_name); if (strlen(if_index_name) != 0) { snprintf(addr_buf, sizeof(addr_buf), @@ -1471,7 +1474,6 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); if(!tmpbuf) { - free(*ip_addresses); log_err("realloc failed: out of memory"); return 0; } else { @@ -1488,7 +1490,6 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres if (*ip_addresses_size == last_ip_addresses_size) { tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); if(!tmpbuf) { - free(*ip_addresses); log_err("realloc failed: out of memory"); return 0; } else { @@ -1820,12 +1821,12 @@ tcp_req_info_setup_listen(struct tcp_req_info* req) req->cp->tcp_is_reading = 0; comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, - req->cp->tcp_timeout_msec); + adjusted_tcp_timeout(req->cp)); } 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); + adjusted_tcp_timeout(req->cp)); /* 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. */ @@ -1833,7 +1834,7 @@ tcp_req_info_setup_listen(struct tcp_req_info* req) } else { comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, - req->cp->tcp_timeout_msec); + adjusted_tcp_timeout(req->cp)); comm_point_listen_for_rw(req->cp, 0, 0); } } @@ -1946,7 +1947,7 @@ tcp_req_info_handle_readdone(struct tcp_req_info* req) send_it: c->tcp_is_reading = 0; comm_point_stop_listening(c); - comm_point_start_listening(c, -1, c->tcp_timeout_msec); + comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); return; } req->in_worker_handle = 0; @@ -2064,7 +2065,7 @@ tcp_req_info_send_reply(struct tcp_req_info* req) /* switch to listen to write events */ comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, - req->cp->tcp_timeout_msec); + adjusted_tcp_timeout(req->cp)); return; } /* queue up the answer behind the others already pending */ @@ -2207,7 +2208,7 @@ int http2_submit_dns_response(struct http2_session* h2_session) } rlen = sldns_buffer_remaining(h2_session->c->buffer); - snprintf(rlen_str, sizeof(rlen_str), "%u", rlen); + snprintf(rlen_str, sizeof(rlen_str), "%u", (unsigned)rlen); lock_basic_lock(&http2_response_buffer_count_lock); if(http2_response_buffer_count + rlen > http2_response_buffer_max) { @@ -2792,7 +2793,7 @@ void http2_req_stream_clear(struct http2_stream* h2_stream) } } -nghttp2_session_callbacks* http2_req_callbacks_create() +nghttp2_session_callbacks* http2_req_callbacks_create(void) { nghttp2_session_callbacks *callbacks; if(nghttp2_session_callbacks_new(&callbacks) == NGHTTP2_ERR_NOMEM) { diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 9d6ea2c33..f438ff458 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -404,7 +404,7 @@ size_t http2_get_response_buffer_size(void); * Create nghttp2 callbacks to handle HTTP2 requests. * @return malloc'ed struct, NULL on failure */ -nghttp2_session_callbacks* http2_req_callbacks_create(); +nghttp2_session_callbacks* http2_req_callbacks_create(void); /** Free http2 stream buffers and decrease buffer counters */ void http2_req_stream_clear(struct http2_stream* h2_stream); diff --git a/services/localzone.c b/services/localzone.c index cad460663..fd2ff2bb6 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -463,6 +463,48 @@ lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, return 1; } +/* Mark the SOA record for the zone. This only marks the SOA rrset; the data + * for the RR is entered later on local_zone_enter_rr() as with the other + * records. An artifical soa_negative record with a modified TTL (minimum of + * the TTL and the SOA.MINIMUM) is also created and marked for usage with + * negative answers and to avoid allocations during those answers. */ +static int +lz_mark_soa_for_zone(struct local_zone* z, struct ub_packed_rrset_key* soa_rrset, + uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr) +{ + struct packed_rrset_data* pd = (struct packed_rrset_data*) + regional_alloc_zero(z->region, sizeof(*pd)); + struct ub_packed_rrset_key* rrset_negative = (struct ub_packed_rrset_key*) + regional_alloc_zero(z->region, sizeof(*rrset_negative)); + time_t minimum; + if(!rrset_negative||!pd) { + log_err("out of memory"); + return 0; + } + /* Mark the original SOA record and then continue with the negative one. */ + z->soa = soa_rrset; + rrset_negative->entry.key = rrset_negative; + pd->trust = rrset_trust_prim_noglue; + pd->security = sec_status_insecure; + rrset_negative->entry.data = pd; + rrset_negative->rk.dname = soa_rrset->rk.dname; + rrset_negative->rk.dname_len = soa_rrset->rk.dname_len; + rrset_negative->rk.type = soa_rrset->rk.type; + rrset_negative->rk.rrset_class = soa_rrset->rk.rrset_class; + if(!rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr)) + return 0; + /* last 4 bytes are minimum ttl in network format */ + if(pd->count == 0 || pd->rr_len[0] < 2+4) + return 0; + minimum = (time_t)sldns_read_uint32(pd->rr_data[0]+(pd->rr_len[0]-4)); + minimum = ttlttl = minimum; + pd->rr_ttl[0] = minimum; + + z->soa_negative = rrset_negative; + return 1; +} + int local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, @@ -502,8 +544,10 @@ local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, if(query_dname_compare(node->name, z->name) == 0) { if(rrtype == LDNS_RR_TYPE_NSEC) rrset->rrset->rk.flags = PACKED_RRSET_NSEC_AT_APEX; - if(rrtype == LDNS_RR_TYPE_SOA) - z->soa = rrset->rrset; + if(rrtype == LDNS_RR_TYPE_SOA && + !lz_mark_soa_for_zone(z, rrset->rrset, rdata, rdata_len, ttl, + rrstr)) + return 0; } } pd = (struct packed_rrset_data*)rrset->rrset->entry.data; @@ -1215,7 +1259,7 @@ local_encode(struct query_info* qinfo, struct module_env* env, edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, &rep, rcode, edns, - repinfo, temp) || !reply_info_answer_encode(qinfo, &rep, + repinfo, temp, env->now_tv) || !reply_info_answer_encode(qinfo, &rep, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), buf, 0, 0, temp, udpsize, edns, (int)(edns->bits&EDNS_DO), 0)) { error_encode(buf, (LDNS_RCODE_SERVFAIL|BIT_AA), qinfo, @@ -1237,7 +1281,7 @@ local_error_encode(struct query_info* qinfo, struct module_env* env, edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL, - rcode, edns, repinfo, temp)) + rcode, edns, repinfo, temp, env->now_tv)) edns->opt_list = NULL; error_encode(buf, r, qinfo, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), edns); @@ -1548,9 +1592,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, lz_type == local_zone_inform_redirect || lz_type == local_zone_always_nodata)? LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN; - if(z->soa) + if(z->soa && z->soa_negative) return local_encode(qinfo, env, edns, repinfo, buf, temp, - z->soa, 0, rcode); + z->soa_negative, 0, rcode); local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode, (rcode|BIT_AA)); return 1; @@ -1558,6 +1602,46 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, || lz_type == local_zone_always_transparent) { /* no NODATA or NXDOMAINS for this zone type */ return 0; + } else if(lz_type == local_zone_always_null) { + /* 0.0.0.0 or ::0 or noerror/nodata for this zone type, + * used for blocklists. */ + if(qinfo->qtype == LDNS_RR_TYPE_A || + qinfo->qtype == LDNS_RR_TYPE_AAAA) { + struct ub_packed_rrset_key lrr; + struct packed_rrset_data d; + time_t rr_ttl = 3600; + size_t rr_len = 0; + uint8_t rr_data[2+16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + uint8_t* rr_datas = rr_data; + memset(&lrr, 0, sizeof(lrr)); + memset(&d, 0, sizeof(d)); + lrr.entry.data = &d; + lrr.rk.dname = qinfo->qname; + lrr.rk.dname_len = qinfo->qname_len; + lrr.rk.type = htons(qinfo->qtype); + lrr.rk.rrset_class = htons(qinfo->qclass); + if(qinfo->qtype == LDNS_RR_TYPE_A) { + rr_len = 4; + sldns_write_uint16(rr_data, rr_len); + rr_len += 2; + } else { + rr_len = 16; + sldns_write_uint16(rr_data, rr_len); + rr_len += 2; + } + d.ttl = rr_ttl; + d.count = 1; + d.rr_len = &rr_len; + d.rr_data = &rr_datas; + d.rr_ttl = &rr_ttl; + return local_encode(qinfo, env, edns, repinfo, buf, temp, + &lrr, 1, LDNS_RCODE_NOERROR); + } else { + local_error_encode(qinfo, env, edns, repinfo, buf, + temp, LDNS_RCODE_NOERROR, + (LDNS_RCODE_NOERROR|BIT_AA)); + } + return 1; } /* else lz_type == local_zone_transparent */ @@ -1565,9 +1649,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, * does not, then we should make this noerror/nodata */ if(ld && ld->rrsets) { int rcode = LDNS_RCODE_NOERROR; - if(z->soa) + if(z->soa && z->soa_negative) return local_encode(qinfo, env, edns, repinfo, buf, temp, - z->soa, 0, rcode); + z->soa_negative, 0, rcode); local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode, (rcode|BIT_AA)); return 1; @@ -1762,6 +1846,7 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_always_nxdomain: return "always_nxdomain"; case local_zone_always_nodata: return "always_nodata"; case local_zone_always_deny: return "always_deny"; + case local_zone_always_null: return "always_null"; case local_zone_noview: return "noview"; case local_zone_invalid: return "invalid"; } @@ -1798,6 +1883,8 @@ int local_zone_str2type(const char* type, enum localzone_type* t) *t = local_zone_always_nodata; else if(strcmp(type, "always_deny") == 0) *t = local_zone_always_deny; + else if(strcmp(type, "always_null") == 0) + *t = local_zone_always_null; else if(strcmp(type, "noview") == 0) *t = local_zone_noview; else if(strcmp(type, "nodefault") == 0) @@ -2000,8 +2087,10 @@ void local_zones_del_data(struct local_zones* zones, /* no memory recycling for zone deletions ... */ d->rrsets = NULL; /* did we delete the soa record ? */ - if(query_dname_compare(d->name, z->name) == 0) + if(query_dname_compare(d->name, z->name) == 0) { z->soa = NULL; + z->soa_negative = NULL; + } /* cleanup the empty nonterminals for this name */ del_empty_term(z, d, name, len, labs); diff --git a/services/localzone.h b/services/localzone.h index bb3593936..3da5c8754 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -96,6 +96,9 @@ enum localzone_type { local_zone_always_nodata, /** drop query, even when there is local data */ local_zone_always_deny, + /** answer with 0.0.0.0 or ::0 or noerror/nodata, even when there is + * local data */ + local_zone_always_null, /** answer not from the view, but global or no-answer */ local_zone_noview, /** Invalid type, cannot be used to generate answer */ @@ -155,6 +158,10 @@ struct local_zone { rbtree_type data; /** if data contains zone apex SOA data, this is a ptr to it. */ struct ub_packed_rrset_key* soa; + /** if data contains zone apex SOA data, this is a prt to an + * artificial negative SOA rrset (TTL is the minimum of the TTL and the + * SOA.MINIMUM). */ + struct ub_packed_rrset_key* soa_negative; }; /** diff --git a/services/mesh.c b/services/mesh.c index cd9050936..91d23debf 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -498,7 +498,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, if(!s) { log_err("mesh_state_create: out of memory; SERVFAIL"); if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL, - LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch)) + LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv)) edns->opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, qinfo, qid, qflags, edns); @@ -514,7 +514,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, if(!s->s.edns_opts_front_in) { log_err("mesh_state_create: out of memory; SERVFAIL"); if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, - NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch)) + NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv)) edns->opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, qinfo, qid, qflags, edns); @@ -587,7 +587,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, servfail_mem: if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, &s->s, - NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch)) + NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv)) edns->opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, qinfo, qid, qflags, edns); @@ -1112,10 +1112,12 @@ int mesh_state_attachment(struct mesh_state* super, struct mesh_state* sub) * @param rcode: if not 0, error code. * @param rep: reply to send (or NULL if rcode is set). * @param r: callback entry + * @param start_time: the time to pass to callback functions, it is 0 or + * a value from one of the packets if the mesh state had packets. */ static void mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, - struct mesh_cb* r) + struct mesh_cb* r, struct timeval* start_time) { int secure; char* reason = NULL; @@ -1136,11 +1138,11 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, if(rcode) { if(rcode == LDNS_RCODE_SERVFAIL) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, - rep, rcode, &r->edns, NULL, m->s.region)) + rep, rcode, &r->edns, NULL, m->s.region, start_time)) r->edns.opt_list = NULL; } else { if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, - &r->edns, NULL, m->s.region)) + &r->edns, NULL, m->s.region, start_time)) r->edns.opt_list = NULL; } fptr_ok(fptr_whitelist_mesh_cb(r->cb)); @@ -1155,7 +1157,7 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, r->edns.bits &= EDNS_DO; if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, - LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region) || + LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region, start_time) || !reply_info_answer_encode(&m->s.qinfo, rep, r->qid, r->qflags, r->buf, 0, 1, m->s.env->scratch, udp_size, &r->edns, @@ -1256,11 +1258,11 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, m->s.qinfo.local_alias = r->local_alias; if(rcode == LDNS_RCODE_SERVFAIL) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, - rep, rcode, &r->edns, &r->query_reply, m->s.region)) + rep, rcode, &r->edns, &r->query_reply, m->s.region, &r->start_time)) r->edns.opt_list = NULL; } else { if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, - &r->edns, &r->query_reply, m->s.region)) + &r->edns, &r->query_reply, m->s.region, &r->start_time)) r->edns.opt_list = NULL; } error_encode(r_buffer, rcode, &m->s.qinfo, r->qid, @@ -1277,7 +1279,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, - LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region) || + LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region, &r->start_time) || !apply_edns_options(&r->edns, &edns_bak, m->s.env->cfg, r->query_reply.c, m->s.region) || @@ -1287,7 +1289,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, secure)) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, - rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region)) + rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region, &r->start_time)) r->edns.opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, &m->s.qinfo, r->qid, r->qflags, &r->edns); @@ -1330,6 +1332,7 @@ void mesh_query_done(struct mesh_state* mstate) struct mesh_cb* c; struct reply_info* rep = (mstate->s.return_msg? mstate->s.return_msg->rep:NULL); + struct timeval tv = {0, 0}; /* No need for the serve expired timer anymore; we are going to reply. */ if(mstate->s.serve_expired_data) { comm_timer_delete(mstate->s.serve_expired_data->timer); @@ -1349,6 +1352,8 @@ void mesh_query_done(struct mesh_state* mstate) } } for(r = mstate->reply_list; r; r = r->next) { + tv = r->start_time; + /* if a response-ip address block has been stored the * information should be logged for each client. */ if(mstate->s.respip_action_info && @@ -1421,7 +1426,7 @@ void mesh_query_done(struct mesh_state* mstate) if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) mstate->s.env->mesh->num_detached_states++; - mesh_do_callback(mstate, mstate->s.return_rcode, rep, c); + mesh_do_callback(mstate, mstate->s.return_rcode, rep, c, &tv); } } @@ -1917,13 +1922,16 @@ mesh_serve_expired_callback(void* arg) struct respip_action_info actinfo; struct query_info* lookup_qinfo = &qstate->qinfo; struct query_info qinfo_tmp; + struct timeval tv = {0, 0}; int must_validate = (!(qstate->query_flags&BIT_CD) || qstate->env->cfg->ignore_cd) && qstate->env->need_to_validate; if(!qstate->serve_expired_data) return; verbose(VERB_ALGO, "Serve expired: Trying to reply with expired data"); comm_timer_delete(qstate->serve_expired_data->timer); qstate->serve_expired_data->timer = NULL; - if(qstate->blacklist || qstate->no_cache_lookup || qstate->is_drop) { + /* If is_drop or no_cache_lookup (modules that handle their own cache e.g., + * subnetmod) ignore stale data from the main cache. */ + if(qstate->no_cache_lookup || qstate->is_drop) { verbose(VERB_ALGO, "Serve expired: Not allowed to look into cache for stale"); return; @@ -1988,6 +1996,8 @@ mesh_serve_expired_callback(void* arg) log_dns_msg("Serve expired lookup", &qstate->qinfo, msg->rep); for(r = mstate->reply_list; r; r = r->next) { + tv = r->start_time; + /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ if(actinfo.addrinfo) { @@ -2042,6 +2052,6 @@ mesh_serve_expired_callback(void* arg) if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) qstate->env->mesh->num_detached_states++; - mesh_do_callback(mstate, LDNS_RCODE_NOERROR, msg->rep, c); + mesh_do_callback(mstate, LDNS_RCODE_NOERROR, msg->rep, c, &tv); } } diff --git a/services/outside_network.c b/services/outside_network.c index 41a1d83f1..6c6b42ccb 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -90,6 +90,10 @@ static int randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, static void waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w); +/** remove reused element from tree and lru list */ +static void reuse_tcp_remove_tree_list(struct outside_network* outnet, + struct reuse_tcp* reuse); + int pending_cmp(const void* key1, const void* key2) { @@ -132,6 +136,52 @@ serviced_cmp(const void* key1, const void* key2) return sockaddr_cmp(&q1->addr, q1->addrlen, &q2->addr, q2->addrlen); } +/** compare if the reuse element has the same address, port and same ssl-is + * used-for-it characteristic */ +static int +reuse_cmp_addrportssl(const void* key1, const void* key2) +{ + struct reuse_tcp* r1 = (struct reuse_tcp*)key1; + struct reuse_tcp* r2 = (struct reuse_tcp*)key2; + int r; + /* compare address and port */ + r = sockaddr_cmp(&r1->addr, r1->addrlen, &r2->addr, r2->addrlen); + if(r != 0) + return r; + + /* compare if SSL-enabled */ + if(r1->is_ssl && !r2->is_ssl) + return 1; + if(!r1->is_ssl && r2->is_ssl) + return -1; + return 0; +} + +int +reuse_cmp(const void* key1, const void* key2) +{ + int r; + r = reuse_cmp_addrportssl(key1, key2); + if(r != 0) + return r; + + /* compare ptr value */ + if(key1 < key2) return -1; + if(key1 > key2) return 1; + return 0; +} + +int reuse_id_cmp(const void* key1, const void* key2) +{ + struct waiting_tcp* w1 = (struct waiting_tcp*)key1; + struct waiting_tcp* w2 = (struct waiting_tcp*)key2; + if(w1->id < w2->id) + return -1; + if(w1->id > w2->id) + return 1; + return 0; +} + /** delete waiting_tcp entry. Does not unlink from waiting list. * @param w: to delete. */ @@ -280,15 +330,237 @@ outnet_tcp_connect(int s, struct sockaddr_storage* addr, socklen_t addrlen) return 1; } +/** log reuse item addr and ptr with message */ +static void +log_reuse_tcp(enum verbosity_value v, const char* msg, struct reuse_tcp* reuse) +{ + uint16_t port; + char addrbuf[128]; + if(verbosity < v) return; + addr_to_str(&reuse->addr, reuse->addrlen, addrbuf, sizeof(addrbuf)); + port = ntohs(((struct sockaddr_in*)&reuse->addr)->sin_port); + verbose(v, "%s %s#%u fd %d", msg, addrbuf, (unsigned)port, + reuse->pending->c->fd); +} + +/** pop the first element from the writewait list */ +static struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse) +{ + struct waiting_tcp* w = reuse->write_wait_first; + if(!w) + return NULL; + log_assert(w->write_wait_queued); + log_assert(!w->write_wait_prev); + reuse->write_wait_first = w->write_wait_next; + if(w->write_wait_next) + w->write_wait_next->write_wait_prev = NULL; + else reuse->write_wait_last = NULL; + w->write_wait_queued = 0; + return w; +} + +/** remove the element from the writewait list */ +static void reuse_write_wait_remove(struct reuse_tcp* reuse, + struct waiting_tcp* w) +{ + if(!w) + return; + if(!w->write_wait_queued) + return; + if(w->write_wait_prev) + w->write_wait_prev->write_wait_next = w->write_wait_next; + else reuse->write_wait_first = w->write_wait_next; + if(w->write_wait_next) + w->write_wait_next->write_wait_prev = w->write_wait_prev; + else reuse->write_wait_last = w->write_wait_prev; + w->write_wait_queued = 0; +} + +/** push the element after the last on the writewait list */ +static void reuse_write_wait_push_back(struct reuse_tcp* reuse, + struct waiting_tcp* w) +{ + if(!w) return; + log_assert(!w->write_wait_queued); + if(reuse->write_wait_last) { + reuse->write_wait_last->write_wait_next = w; + w->write_wait_prev = reuse->write_wait_last; + } else { + reuse->write_wait_first = w; + } + reuse->write_wait_last = w; + w->write_wait_queued = 1; +} + +/** insert element in tree by id */ +void +reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w) +{ + log_assert(w->id_node.key == NULL); + w->id_node.key = w; + rbtree_insert(&reuse->tree_by_id, &w->id_node); +} + +/** find element in tree by id */ +struct waiting_tcp* +reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id) +{ + struct waiting_tcp key_w; + rbnode_type* n; + memset(&key_w, 0, sizeof(key_w)); + key_w.id_node.key = &key_w; + key_w.id = id; + n = rbtree_search(&reuse->tree_by_id, &key_w); + if(!n) return NULL; + return (struct waiting_tcp*)n->key; +} + +/** return ID value of rbnode in tree_by_id */ +static uint16_t +tree_by_id_get_id(rbnode_type* node) +{ + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + return w->id; +} + +/** insert into reuse tcp tree and LRU, false on failure (duplicate) */ +static int +reuse_tcp_insert(struct outside_network* outnet, struct pending_tcp* pend_tcp) +{ + log_reuse_tcp(VERB_CLIENT, "reuse_tcp_insert", &pend_tcp->reuse); + if(pend_tcp->reuse.item_on_lru_list) { + if(!pend_tcp->reuse.node.key) + log_err("internal error: reuse_tcp_insert: on lru list without key"); + return 1; + } + pend_tcp->reuse.node.key = &pend_tcp->reuse; + pend_tcp->reuse.pending = pend_tcp; + if(!rbtree_insert(&outnet->tcp_reuse, &pend_tcp->reuse.node)) { + /* this is a duplicate connection, close this one */ + verbose(VERB_CLIENT, "reuse_tcp_insert: duplicate connection"); + pend_tcp->reuse.node.key = NULL; + return 0; + } + /* insert into LRU, first is newest */ + pend_tcp->reuse.lru_prev = NULL; + if(outnet->tcp_reuse_first) { + pend_tcp->reuse.lru_next = outnet->tcp_reuse_first; + outnet->tcp_reuse_first->lru_prev = &pend_tcp->reuse; + } else { + pend_tcp->reuse.lru_next = NULL; + outnet->tcp_reuse_last = &pend_tcp->reuse; + } + outnet->tcp_reuse_first = &pend_tcp->reuse; + pend_tcp->reuse.item_on_lru_list = 1; + return 1; +} + +/** find reuse tcp stream to destination for query, or NULL if none */ +static struct reuse_tcp* +reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr, + socklen_t addrlen, int use_ssl) +{ + struct waiting_tcp key_w; + struct pending_tcp key_p; + struct comm_point c; + rbnode_type* result = NULL, *prev; + verbose(VERB_CLIENT, "reuse_tcp_find"); + memset(&key_w, 0, sizeof(key_w)); + memset(&key_p, 0, sizeof(key_p)); + memset(&c, 0, sizeof(c)); + key_p.query = &key_w; + key_p.c = &c; + key_p.reuse.pending = &key_p; + key_p.reuse.node.key = &key_p.reuse; + if(use_ssl) + key_p.reuse.is_ssl = 1; + if(addrlen > (socklen_t)sizeof(key_p.reuse.addr)) + return NULL; + memmove(&key_p.reuse.addr, addr, addrlen); + key_p.reuse.addrlen = addrlen; + + verbose(VERB_CLIENT, "reuse_tcp_find: num reuse streams %u", + (unsigned)outnet->tcp_reuse.count); + if(outnet->tcp_reuse.root == NULL || + outnet->tcp_reuse.root == RBTREE_NULL) + return NULL; + if(rbtree_find_less_equal(&outnet->tcp_reuse, &key_p.reuse, + &result)) { + /* exact match */ + /* but the key is on stack, and ptr is compared, impossible */ + log_assert(&key_p.reuse != (struct reuse_tcp*)result); + log_assert(&key_p != ((struct reuse_tcp*)result)->pending); + } + /* not found, return null */ + if(!result || result == RBTREE_NULL) + return NULL; + verbose(VERB_CLIENT, "reuse_tcp_find check inexact match"); + /* inexact match, find one of possibly several connections to the + * same destination address, with the correct port, ssl, and + * also less than max number of open queries, or else, fail to open + * a new one */ + /* rewind to start of sequence of same address,port,ssl */ + prev = rbtree_previous(result); + while(prev && prev != RBTREE_NULL && + reuse_cmp_addrportssl(prev->key, &key_p.reuse) == 0) { + result = prev; + prev = rbtree_previous(result); + } + + /* loop to find first one that has correct characteristics */ + while(result && result != RBTREE_NULL && + reuse_cmp_addrportssl(result->key, &key_p.reuse) == 0) { + if(((struct reuse_tcp*)result)->tree_by_id.count < + MAX_REUSE_TCP_QUERIES) { + /* same address, port, ssl-yes-or-no, and has + * space for another query */ + return (struct reuse_tcp*)result; + } + result = rbtree_next(result); + } + return NULL; +} + +/** use the buffer to setup writing the query */ +static void +outnet_tcp_take_query_setup(int s, struct pending_tcp* pend, + struct waiting_tcp* w) +{ + struct timeval tv; + verbose(VERB_CLIENT, "outnet_tcp_take_query_setup: setup packet to write " + "len %d timeout %d msec", + (int)w->pkt_len, w->timeout); + pend->c->tcp_write_pkt = w->pkt; + pend->c->tcp_write_pkt_len = w->pkt_len; + pend->c->tcp_write_and_read = 1; + pend->c->tcp_write_byte_count = 0; + pend->c->tcp_is_reading = 0; + comm_point_start_listening(pend->c, s, -1); + /* set timer on the waiting_tcp entry, this is the write timeout + * for the written packet. The timer on pend->c is the timer + * for when there is no written packet and we have readtimeouts */ +#ifndef S_SPLINT_S + tv.tv_sec = w->timeout/1000; + tv.tv_usec = (w->timeout%1000)*1000; +#endif + /* if the waiting_tcp was previously waiting for a buffer in the + * outside_network.tcpwaitlist, then the timer is reset now that + * we start writing it */ + comm_timer_set(w->timer, &tv); +} + /** use next free buffer to service a tcp query */ static int -outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) +outnet_tcp_take_into_use(struct waiting_tcp* w) { struct pending_tcp* pend = w->outnet->tcp_free; int s; log_assert(pend); - log_assert(pkt); + log_assert(w->pkt); + log_assert(w->pkt_len > 0); log_assert(w->addrlen > 0); + pend->c->tcp_do_toggle_rw = 0; + pend->c->tcp_do_close = 0; /* open socket */ s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp); @@ -383,24 +655,75 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) return 0; } } - w->pkt = NULL; w->next_waiting = (void*)pend; - pend->id = LDNS_ID_WIRE(pkt); w->outnet->num_tcp_outgoing++; w->outnet->tcp_free = pend->next_free; pend->next_free = NULL; pend->query = w; + pend->reuse.outnet = w->outnet; pend->c->repinfo.addrlen = w->addrlen; + pend->c->tcp_more_read_again = &pend->reuse.cp_more_read_again; + pend->c->tcp_more_write_again = &pend->reuse.cp_more_write_again; + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen); - sldns_buffer_clear(pend->c->buffer); - sldns_buffer_write(pend->c->buffer, pkt, pkt_len); - sldns_buffer_flip(pend->c->buffer); - pend->c->tcp_is_reading = 0; - pend->c->tcp_byte_count = 0; - comm_point_start_listening(pend->c, s, -1); + pend->reuse.pending = pend; + + /* Remove from tree in case the is_ssl will be different and causes the + * identity of the reuse_tcp to change; could result in nodes not being + * deleted from the tree (because the new identity does not match the + * previous node) but their ->key would be changed to NULL. */ + if(pend->reuse.node.key) + reuse_tcp_remove_tree_list(w->outnet, &pend->reuse); + + if(pend->c->ssl) + pend->reuse.is_ssl = 1; + else pend->reuse.is_ssl = 0; + /* insert in reuse by address tree if not already inserted there */ + (void)reuse_tcp_insert(w->outnet, pend); + reuse_tree_by_id_insert(&pend->reuse, w); + outnet_tcp_take_query_setup(s, pend, w); return 1; } +/** Touch the lru of a reuse_tcp element, it is in use. + * This moves it to the front of the list, where it is not likely to + * be closed. Items at the back of the list are closed to make space. */ +static void +reuse_tcp_lru_touch(struct outside_network* outnet, struct reuse_tcp* reuse) +{ + if(!reuse->item_on_lru_list) { + log_err("internal error: we need to touch the lru_list but item not in list"); + return; /* not on the list, no lru to modify */ + } + if(!reuse->lru_prev) + return; /* already first in the list */ + /* remove at current position */ + /* since it is not first, there is a previous element */ + reuse->lru_prev->lru_next = reuse->lru_next; + if(reuse->lru_next) + reuse->lru_next->lru_prev = reuse->lru_prev; + else outnet->tcp_reuse_last = reuse->lru_prev; + /* insert at the front */ + reuse->lru_prev = NULL; + reuse->lru_next = outnet->tcp_reuse_first; + /* since it is not first, it is not the only element and + * lru_next is thus not NULL and thus reuse is now not the last in + * the list, so outnet->tcp_reuse_last does not need to be modified */ + outnet->tcp_reuse_first = reuse; +} + +/** call callback on waiting_tcp, if not NULL */ +static void +waiting_tcp_callback(struct waiting_tcp* w, struct comm_point* c, int error, + struct comm_reply* reply_info) +{ + if(w->cb) { + fptr_ok(fptr_whitelist_pending_tcp(w->cb)); + (void)(*w->cb)(c, w->cb_arg, error, reply_info); + } +} + /** see if buffers can be used to service TCP queries */ static void use_free_buffer(struct outside_network* outnet) @@ -408,25 +731,198 @@ use_free_buffer(struct outside_network* outnet) struct waiting_tcp* w; while(outnet->tcp_free && outnet->tcp_wait_first && !outnet->want_to_quit) { + struct reuse_tcp* reuse = NULL; w = outnet->tcp_wait_first; outnet->tcp_wait_first = w->next_waiting; if(outnet->tcp_wait_last == w) outnet->tcp_wait_last = NULL; - if(!outnet_tcp_take_into_use(w, w->pkt, w->pkt_len)) { - comm_point_callback_type* cb = w->cb; - void* cb_arg = w->cb_arg; - waiting_tcp_delete(w); - fptr_ok(fptr_whitelist_pending_tcp(cb)); - (void)(*cb)(NULL, cb_arg, NETEVENT_CLOSED, NULL); + w->on_tcp_waiting_list = 0; + reuse = reuse_tcp_find(outnet, &w->addr, w->addrlen, + w->ssl_upstream); + if(reuse) { + log_reuse_tcp(VERB_CLIENT, "use free buffer for waiting tcp: " + "found reuse", reuse); + reuse_tcp_lru_touch(outnet, reuse); + comm_timer_disable(w->timer); + w->next_waiting = (void*)reuse->pending; + reuse_tree_by_id_insert(reuse, w); + if(reuse->pending->query) { + /* on the write wait list */ + reuse_write_wait_push_back(reuse, w); + } else { + /* write straight away */ + /* stop the timer on read of the fd */ + comm_point_stop_listening(reuse->pending->c); + reuse->pending->query = w; + outnet_tcp_take_query_setup( + reuse->pending->c->fd, reuse->pending, + w); + } + } else { + struct pending_tcp* pend = w->outnet->tcp_free; + rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); + pend->reuse.pending = pend; + memcpy(&pend->reuse.addr, &w->addr, w->addrlen); + pend->reuse.addrlen = w->addrlen; + if(!outnet_tcp_take_into_use(w)) { + waiting_tcp_callback(w, NULL, NETEVENT_CLOSED, + NULL); + waiting_tcp_delete(w); + } } } } +/** add waiting_tcp element to the outnet tcp waiting list */ +static void +outnet_add_tcp_waiting(struct outside_network* outnet, struct waiting_tcp* w) +{ + struct timeval tv; + if(w->on_tcp_waiting_list) + return; + w->next_waiting = NULL; + if(outnet->tcp_wait_last) + outnet->tcp_wait_last->next_waiting = w; + else outnet->tcp_wait_first = w; + outnet->tcp_wait_last = w; + w->on_tcp_waiting_list = 1; +#ifndef S_SPLINT_S + tv.tv_sec = w->timeout/1000; + tv.tv_usec = (w->timeout%1000)*1000; +#endif + comm_timer_set(w->timer, &tv); +} + +/** delete element from tree by id */ +static void +reuse_tree_by_id_delete(struct reuse_tcp* reuse, struct waiting_tcp* w) +{ + log_assert(w->id_node.key != NULL); + rbtree_delete(&reuse->tree_by_id, w); + w->id_node.key = NULL; +} + +/** move writewait list to go for another connection. */ +static void +reuse_move_writewait_away(struct outside_network* outnet, + struct pending_tcp* pend) +{ + /* the writewait list has not been written yet, so if the + * stream was closed, they have not actually been failed, only + * the queries written. Other queries can get written to another + * stream. For upstreams that do not support multiple queries + * and answers, the stream can get closed, and then the queries + * can get written on a new socket */ + struct waiting_tcp* w; + if(pend->query && pend->query->error_count == 0 && + pend->c->tcp_write_pkt == pend->query->pkt && + pend->c->tcp_write_pkt_len == pend->query->pkt_len) { + /* since the current query is not written, it can also + * move to a free buffer */ + if(verbosity >= VERB_CLIENT && pend->query->pkt_len > 12+2+2 && + LDNS_QDCOUNT(pend->query->pkt) > 0 && + dname_valid(pend->query->pkt+12, pend->query->pkt_len-12)) { + char buf[LDNS_MAX_DOMAINLEN+1]; + dname_str(pend->query->pkt+12, buf); + verbose(VERB_CLIENT, "reuse_move_writewait_away current %s %d bytes were written", + buf, (int)pend->c->tcp_write_byte_count); + } + pend->c->tcp_write_pkt = NULL; + pend->c->tcp_write_pkt_len = 0; + pend->c->tcp_write_and_read = 0; + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; + pend->c->tcp_is_reading = 1; + w = pend->query; + pend->query = NULL; + /* increase error count, so that if the next socket fails too + * the server selection is run again with this query failed + * and it can select a different server (if possible), or + * fail the query */ + w->error_count ++; + reuse_tree_by_id_delete(&pend->reuse, w); + outnet_add_tcp_waiting(outnet, w); + } + while((w = reuse_write_wait_pop(&pend->reuse)) != NULL) { + if(verbosity >= VERB_CLIENT && w->pkt_len > 12+2+2 && + LDNS_QDCOUNT(w->pkt) > 0 && + dname_valid(w->pkt+12, w->pkt_len-12)) { + char buf[LDNS_MAX_DOMAINLEN+1]; + dname_str(w->pkt+12, buf); + verbose(VERB_CLIENT, "reuse_move_writewait_away item %s", buf); + } + reuse_tree_by_id_delete(&pend->reuse, w); + outnet_add_tcp_waiting(outnet, w); + } +} + +/** remove reused element from tree and lru list */ +static void +reuse_tcp_remove_tree_list(struct outside_network* outnet, + struct reuse_tcp* reuse) +{ + verbose(VERB_CLIENT, "reuse_tcp_remove_tree_list"); + if(reuse->node.key) { + /* delete it from reuse tree */ + (void)rbtree_delete(&outnet->tcp_reuse, reuse); + reuse->node.key = NULL; + } + /* delete from reuse list */ + if(reuse->item_on_lru_list) { + if(reuse->lru_prev) { + /* assert that members of the lru list are waiting + * and thus have a pending pointer to the struct */ + log_assert(reuse->lru_prev->pending); + reuse->lru_prev->lru_next = reuse->lru_next; + } else { + log_assert(!reuse->lru_next || reuse->lru_next->pending); + outnet->tcp_reuse_first = reuse->lru_next; + } + if(reuse->lru_next) { + /* assert that members of the lru list are waiting + * and thus have a pending pointer to the struct */ + log_assert(reuse->lru_next->pending); + reuse->lru_next->lru_prev = reuse->lru_prev; + } else { + log_assert(!reuse->lru_prev || reuse->lru_prev->pending); + outnet->tcp_reuse_last = reuse->lru_prev; + } + reuse->item_on_lru_list = 0; + } +} + +/** helper function that deletes an element from the tree of readwait + * elements in tcp reuse structure */ +static void reuse_del_readwait_elem(rbnode_type* node, void* ATTR_UNUSED(arg)) +{ + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + waiting_tcp_delete(w); +} + +/** delete readwait waiting_tcp elements, deletes the elements in the list */ +void reuse_del_readwait(rbtree_type* tree_by_id) +{ + if(tree_by_id->root == NULL || + tree_by_id->root == RBTREE_NULL) + return; + traverse_postorder(tree_by_id, &reuse_del_readwait_elem, NULL); + rbtree_init(tree_by_id, reuse_id_cmp); +} + /** decommission a tcp buffer, closes commpoint and frees waiting_tcp entry */ static void decommission_pending_tcp(struct outside_network* outnet, struct pending_tcp* pend) { + verbose(VERB_CLIENT, "decommission_pending_tcp"); + pend->next_free = outnet->tcp_free; + outnet->tcp_free = pend; + if(pend->reuse.node.key) { + /* needs unlink from the reuse tree to get deleted */ + reuse_tcp_remove_tree_list(outnet, &pend->reuse); + } + /* free SSL structure after remove from outnet tcp reuse tree, + * because the c->ssl null or not is used for sorting in the tree */ if(pend->c->ssl) { #ifdef HAVE_SSL SSL_shutdown(pend->c->ssl); @@ -435,11 +931,68 @@ decommission_pending_tcp(struct outside_network* outnet, #endif } comm_point_close(pend->c); - pend->next_free = outnet->tcp_free; - outnet->tcp_free = pend; - waiting_tcp_delete(pend->query); + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; + /* unlink the query and writewait list, it is part of the tree + * nodes and is deleted */ pend->query = NULL; - use_free_buffer(outnet); + pend->reuse.write_wait_first = NULL; + pend->reuse.write_wait_last = NULL; + reuse_del_readwait(&pend->reuse.tree_by_id); +} + +/** perform failure callbacks for waiting queries in reuse read rbtree */ +static void reuse_cb_readwait_for_failure(rbtree_type* tree_by_id, int err) +{ + rbnode_type* node; + if(tree_by_id->root == NULL || + tree_by_id->root == RBTREE_NULL) + return; + node = rbtree_first(tree_by_id); + while(node && node != RBTREE_NULL) { + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + waiting_tcp_callback(w, NULL, err, NULL); + node = rbtree_next(node); + } +} + +/** perform callbacks for failure and also decommission pending tcp. + * the callbacks remove references in sq->pending to the waiting_tcp + * members of the tree_by_id in the pending tcp. The pending_tcp is + * removed before the callbacks, so that the callbacks do not modify + * the pending_tcp due to its reference in the outside_network reuse tree */ +static void reuse_cb_and_decommission(struct outside_network* outnet, + struct pending_tcp* pend, int error) +{ + rbtree_type store; + store = pend->reuse.tree_by_id; + pend->query = NULL; + rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); + pend->reuse.write_wait_first = NULL; + pend->reuse.write_wait_last = NULL; + decommission_pending_tcp(outnet, pend); + reuse_cb_readwait_for_failure(&store, error); + reuse_del_readwait(&store); +} + +/** set timeout on tcp fd and setup read event to catch incoming dns msgs */ +static void +reuse_tcp_setup_timeout(struct pending_tcp* pend_tcp) +{ + log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_timeout", &pend_tcp->reuse); + comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT); +} + +/** set timeout on tcp fd and setup read event to catch incoming dns msgs */ +static void +reuse_tcp_setup_read_and_timeout(struct pending_tcp* pend_tcp) +{ + log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_readtimeout", &pend_tcp->reuse); + sldns_buffer_clear(pend_tcp->c->buffer); + pend_tcp->c->tcp_is_reading = 1; + pend_tcp->c->tcp_byte_count = 0; + comm_point_stop_listening(pend_tcp->c); + comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT); } int @@ -447,24 +1000,116 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error, struct comm_reply *reply_info) { struct pending_tcp* pend = (struct pending_tcp*)arg; - struct outside_network* outnet = pend->query->outnet; + struct outside_network* outnet = pend->reuse.outnet; + struct waiting_tcp* w = NULL; verbose(VERB_ALGO, "outnettcp cb"); - if(error != NETEVENT_NOERROR) { + if(error == NETEVENT_TIMEOUT) { + if(pend->c->tcp_write_and_read) { + verbose(VERB_QUERY, "outnettcp got tcp timeout " + "for read, ignored because write underway"); + /* if we are writing, ignore readtimer, wait for write timer + * or write is done */ + return 0; + } else { + verbose(VERB_QUERY, "outnettcp got tcp timeout %s", + (pend->reuse.tree_by_id.count?"for reading pkt": + "for keepalive for reuse")); + } + /* must be timeout for reading or keepalive reuse, + * close it. */ + reuse_tcp_remove_tree_list(outnet, &pend->reuse); + } else if(error == NETEVENT_PKT_WRITTEN) { + /* the packet we want to write has been written. */ + verbose(VERB_ALGO, "outnet tcp pkt was written event"); + log_assert(c == pend->c); + log_assert(pend->query->pkt == pend->c->tcp_write_pkt); + log_assert(pend->query->pkt_len == pend->c->tcp_write_pkt_len); + pend->c->tcp_write_pkt = NULL; + pend->c->tcp_write_pkt_len = 0; + /* the pend.query is already in tree_by_id */ + log_assert(pend->query->id_node.key); + pend->query = NULL; + /* setup to write next packet or setup read timeout */ + if(pend->reuse.write_wait_first) { + verbose(VERB_ALGO, "outnet tcp setup next pkt"); + /* we can write it straight away perhaps, set flag + * because this callback called after a tcp write + * succeeded and likely more buffer space is available + * and we can write some more. */ + pend->reuse.cp_more_write_again = 1; + pend->query = reuse_write_wait_pop(&pend->reuse); + comm_point_stop_listening(pend->c); + outnet_tcp_take_query_setup(pend->c->fd, pend, + pend->query); + } else { + verbose(VERB_ALGO, "outnet tcp writes done, wait"); + pend->c->tcp_write_and_read = 0; + pend->reuse.cp_more_read_again = 0; + pend->reuse.cp_more_write_again = 0; + pend->c->tcp_is_reading = 1; + comm_point_stop_listening(pend->c); + reuse_tcp_setup_timeout(pend); + } + return 0; + } else if(error != NETEVENT_NOERROR) { verbose(VERB_QUERY, "outnettcp got tcp error %d", error); + reuse_move_writewait_away(outnet, pend); /* pass error below and exit */ } else { /* check ID */ - if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t) || - LDNS_ID_WIRE(sldns_buffer_begin(c->buffer))!=pend->id) { + if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t)) { log_addr(VERB_QUERY, - "outnettcp: bad ID in reply, from:", - &pend->query->addr, pend->query->addrlen); + "outnettcp: bad ID in reply, too short, from:", + &pend->reuse.addr, pend->reuse.addrlen); error = NETEVENT_CLOSED; + } else { + uint16_t id = LDNS_ID_WIRE(sldns_buffer_begin( + c->buffer)); + /* find the query the reply is for */ + w = reuse_tcp_by_id_find(&pend->reuse, id); } } - fptr_ok(fptr_whitelist_pending_tcp(pend->query->cb)); - (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info); - decommission_pending_tcp(outnet, pend); + if(error == NETEVENT_NOERROR && !w) { + /* no struct waiting found in tree, no reply to call */ + log_addr(VERB_QUERY, "outnettcp: bad ID in reply, from:", + &pend->reuse.addr, pend->reuse.addrlen); + error = NETEVENT_CLOSED; + } + if(error == NETEVENT_NOERROR) { + /* add to reuse tree so it can be reused, if not a failure. + * This is possible if the state machine wants to make a tcp + * query again to the same destination. */ + if(outnet->tcp_reuse.count < outnet->tcp_reuse_max) { + (void)reuse_tcp_insert(outnet, pend); + } + } + if(w) { + reuse_tree_by_id_delete(&pend->reuse, w); + verbose(VERB_CLIENT, "outnet tcp callback query err %d buflen %d", + error, (int)sldns_buffer_limit(c->buffer)); + waiting_tcp_callback(w, c, error, reply_info); + waiting_tcp_delete(w); + } + verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb"); + if(error == NETEVENT_NOERROR && pend->reuse.node.key) { + verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: keep it"); + /* it is in the reuse_tcp tree, with other queries, or + * on the empty list. do not decommission it */ + /* if there are more outstanding queries, we could try to + * read again, to see if it is on the input, + * because this callback called after a successful read + * and there could be more bytes to read on the input */ + if(pend->reuse.tree_by_id.count != 0) + pend->reuse.cp_more_read_again = 1; + reuse_tcp_setup_read_and_timeout(pend); + return 0; + } + verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: decommission it"); + /* no queries on it, no space to keep it. or timeout or closed due + * to error. Close it */ + reuse_cb_and_decommission(outnet, pend, (error==NETEVENT_TIMEOUT? + NETEVENT_TIMEOUT:NETEVENT_CLOSED)); + use_free_buffer(outnet); return 0; } @@ -723,7 +1368,8 @@ outside_network_create(struct comm_base *base, size_t bufsize, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv) + void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv, + int udp_connect) { struct outside_network* outnet = (struct outside_network*) calloc(1, sizeof(struct outside_network)); @@ -761,6 +1407,9 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->delay_tv.tv_usec = (delayclose%1000)*1000; } #endif + if(udp_connect) { + outnet->udp_connect = 1; + } if(numavailports == 0 || num_ports == 0) { log_err("no outgoing ports available"); outside_network_delete(outnet); @@ -795,6 +1444,8 @@ outside_network_create(struct comm_base *base, size_t bufsize, outside_network_delete(outnet); return NULL; } + rbtree_init(&outnet->tcp_reuse, reuse_cmp); + outnet->tcp_reuse_max = num_tcp; /* allocate commpoints */ for(k=0; knum_tcp; i++) if(outnet->tcp_conns[i]) { + if(outnet->tcp_conns[i]->query && + !outnet->tcp_conns[i]->query-> + on_tcp_waiting_list) { + /* delete waiting_tcp elements that + * the tcp conn is working on */ + struct pending_tcp* pend = + (struct pending_tcp*)outnet-> + tcp_conns[i]->query-> + next_waiting; + decommission_pending_tcp(outnet, pend); + } comm_point_delete(outnet->tcp_conns[i]->c); waiting_tcp_delete(outnet->tcp_conns[i]->query); free(outnet->tcp_conns[i]); @@ -972,6 +1634,10 @@ outside_network_delete(struct outside_network* outnet) p = np; } } + /* was allocated in struct pending that was deleted above */ + rbtree_init(&outnet->tcp_reuse, reuse_cmp); + outnet->tcp_reuse_first = NULL; + outnet->tcp_reuse_last = NULL; if(outnet->udp_wait_first) { struct pending* p = outnet->udp_wait_first, *np; while(p) { @@ -1096,6 +1762,33 @@ select_id(struct outside_network* outnet, struct pending* pend, return 1; } +/** return true is UDP connect error needs to be logged */ +static int udp_connect_needs_log(int err) +{ + switch(err) { + case ECONNREFUSED: +# ifdef ENETUNREACH + case ENETUNREACH: +# endif +# ifdef EHOSTDOWN + case EHOSTDOWN: +# endif +# ifdef EHOSTUNREACH + case EHOSTUNREACH: +# endif +# ifdef ENETDOWN + case ENETDOWN: +# endif + if(verbosity >= VERB_ALGO) + return 1; + return 0; + default: + break; + } + return 1; +} + + /** Select random interface and port */ static int select_ifport(struct outside_network* outnet, struct pending* pend, @@ -1115,13 +1808,26 @@ select_ifport(struct outside_network* outnet, struct pending* pend, my_if = ub_random_max(outnet->rnd, num_if); pif = &ifs[my_if]; #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION - my_port = ub_random_max(outnet->rnd, pif->avail_total); - if(my_port < pif->inuse) { - /* port already open */ - pend->pc = pif->out[my_port]; - verbose(VERB_ALGO, "using UDP if=%d port=%d", - my_if, pend->pc->number); - break; + if(outnet->udp_connect) { + /* if we connect() we cannot reuse fds for a port */ + if(pif->inuse >= pif->avail_total) { + tries++; + if(tries < MAX_PORT_RETRY) + continue; + log_err("failed to find an open port, drop msg"); + return 0; + } + my_port = pif->inuse + ub_random_max(outnet->rnd, + pif->avail_total - pif->inuse); + } else { + my_port = ub_random_max(outnet->rnd, pif->avail_total); + if(my_port < pif->inuse) { + /* port already open */ + pend->pc = pif->out[my_port]; + verbose(VERB_ALGO, "using UDP if=%d port=%d", + my_if, pend->pc->number); + break; + } } /* try to open new port, if fails, loop to try again */ log_assert(pif->inuse < pif->maxout); @@ -1138,6 +1844,19 @@ select_ifport(struct outside_network* outnet, struct pending* pend, if(fd != -1) { verbose(VERB_ALGO, "opened UDP if=%d port=%d", my_if, portno); + if(outnet->udp_connect) { + /* connect() to the destination */ + if(connect(fd, (struct sockaddr*)&pend->addr, + pend->addrlen) < 0) { + if(udp_connect_needs_log(errno)) { + log_err_addr("udp connect failed", + strerror(errno), &pend->addr, + pend->addrlen); + } + sock_close(fd); + return 0; + } + } /* grab fd */ pend->pc = outnet->unused_fds; outnet->unused_fds = pend->pc->next; @@ -1197,8 +1916,8 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) log_assert(pend->pc && pend->pc->cp); /* send it over the commlink */ - if(!comm_point_send_udp_msg(pend->pc->cp, packet, - (struct sockaddr*)&pend->addr, pend->addrlen)) { + if(!comm_point_send_udp_msg(pend->pc->cp, packet, + (struct sockaddr*)&pend->addr, pend->addrlen, outnet->udp_connect)) { portcomm_loweruse(outnet, pend->pc); return 0; } @@ -1273,45 +1992,152 @@ outnet_tcptimer(void* arg) { struct waiting_tcp* w = (struct waiting_tcp*)arg; struct outside_network* outnet = w->outnet; - comm_point_callback_type* cb; - void* cb_arg; - if(w->pkt) { + verbose(VERB_CLIENT, "outnet_tcptimer"); + if(w->on_tcp_waiting_list) { /* it is on the waiting list */ waiting_list_remove(outnet, w); + waiting_tcp_callback(w, NULL, NETEVENT_TIMEOUT, NULL); + waiting_tcp_delete(w); } else { /* it was in use */ struct pending_tcp* pend=(struct pending_tcp*)w->next_waiting; - if(pend->c->ssl) { -#ifdef HAVE_SSL - SSL_shutdown(pend->c->ssl); - SSL_free(pend->c->ssl); - pend->c->ssl = NULL; -#endif - } - comm_point_close(pend->c); - pend->query = NULL; - pend->next_free = outnet->tcp_free; - outnet->tcp_free = pend; + reuse_cb_and_decommission(outnet, pend, NETEVENT_TIMEOUT); } - cb = w->cb; - cb_arg = w->cb_arg; - waiting_tcp_delete(w); - fptr_ok(fptr_whitelist_pending_tcp(cb)); - (void)(*cb)(NULL, cb_arg, NETEVENT_TIMEOUT, NULL); use_free_buffer(outnet); } +/** close the oldest reuse_tcp connection to make a fd and struct pend + * available for a new stream connection */ +static void +reuse_tcp_close_oldest(struct outside_network* outnet) +{ + struct pending_tcp* pend; + verbose(VERB_CLIENT, "reuse_tcp_close_oldest"); + if(!outnet->tcp_reuse_last) return; + pend = outnet->tcp_reuse_last->pending; + + /* snip off of LRU */ + log_assert(pend->reuse.lru_next == NULL); + if(pend->reuse.lru_prev) { + outnet->tcp_reuse_last = pend->reuse.lru_prev; + pend->reuse.lru_prev->lru_next = NULL; + } else { + outnet->tcp_reuse_last = NULL; + outnet->tcp_reuse_first = NULL; + } + pend->reuse.item_on_lru_list = 0; + + /* free up */ + reuse_cb_and_decommission(outnet, pend, NETEVENT_CLOSED); +} + +/** find spare ID value for reuse tcp stream. That is random and also does + * not collide with an existing query ID that is in use or waiting */ +uint16_t +reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet) +{ + uint16_t id = 0, curid, nextid; + const int try_random = 2000; + int i; + unsigned select, count, space; + rbnode_type* node; + + /* make really sure the tree is not empty */ + if(reuse->tree_by_id.count == 0) { + id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff; + return id; + } + + /* try to find random empty spots by picking them */ + for(i = 0; irnd)>>8) & 0xffff; + if(!reuse_tcp_by_id_find(reuse, id)) { + return id; + } + } + + /* equally pick a random unused element from the tree that is + * not in use. Pick a the n-th index of an ununused number, + * then loop over the empty spaces in the tree and find it */ + log_assert(reuse->tree_by_id.count < 0xffff); + select = ub_random_max(outnet->rnd, 0xffff - reuse->tree_by_id.count); + /* select value now in 0 .. num free - 1 */ + + count = 0; /* number of free spaces passed by */ + node = rbtree_first(&reuse->tree_by_id); + log_assert(node && node != RBTREE_NULL); /* tree not empty */ + /* see if select is before first node */ + if(select < tree_by_id_get_id(node)) + return select; + count += tree_by_id_get_id(node); + /* perhaps select is between nodes */ + while(node && node != RBTREE_NULL) { + rbnode_type* next = rbtree_next(node); + if(next && next != RBTREE_NULL) { + curid = tree_by_id_get_id(node); + nextid = tree_by_id_get_id(next); + log_assert(curid < nextid); + if(curid != 0xffff && curid + 1 < nextid) { + /* space between nodes */ + space = nextid - curid - 1; + log_assert(select >= count); + if(select < count + space) { + /* here it is */ + return curid + 1 + (select - count); + } + count += space; + } + } + node = next; + } + + /* select is after the last node */ + /* count is the number of free positions before the nodes in the + * tree */ + node = rbtree_last(&reuse->tree_by_id); + log_assert(node && node != RBTREE_NULL); /* tree not empty */ + curid = tree_by_id_get_id(node); + log_assert(count + (0xffff-curid) + reuse->tree_by_id.count == 0xffff); + return curid + 1 + (select - count); +} + struct waiting_tcp* pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg) { struct pending_tcp* pend = sq->outnet->tcp_free; + struct reuse_tcp* reuse = NULL; struct waiting_tcp* w; - struct timeval tv; - uint16_t id; - /* if no buffer is free allocate space to store query */ + + verbose(VERB_CLIENT, "pending_tcp_query"); + if(sldns_buffer_limit(packet) < sizeof(uint16_t)) { + verbose(VERB_ALGO, "pending tcp query with too short buffer < 2"); + return NULL; + } + + /* find out if a reused stream to the target exists */ + /* if so, take it into use */ + reuse = reuse_tcp_find(sq->outnet, &sq->addr, sq->addrlen, + sq->ssl_upstream); + if(reuse) { + log_reuse_tcp(VERB_CLIENT, "pending_tcp_query: found reuse", reuse); + log_assert(reuse->pending); + pend = reuse->pending; + reuse_tcp_lru_touch(sq->outnet, reuse); + } + + /* if !pend but we have reuse streams, close a reuse stream + * to be able to open a new one to this target, no use waiting + * to reuse a file descriptor while another query needs to use + * that buffer and file descriptor now. */ + if(!pend) { + reuse_tcp_close_oldest(sq->outnet); + pend = sq->outnet->tcp_free; + } + + /* allocate space to store query */ w = (struct waiting_tcp*)malloc(sizeof(struct waiting_tcp) - + (pend?0:sldns_buffer_limit(packet))); + + sldns_buffer_limit(packet)); if(!w) { return NULL; } @@ -1319,47 +2145,76 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, free(w); return NULL; } - w->pkt = NULL; - w->pkt_len = 0; - id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff; - LDNS_ID_SET(sldns_buffer_begin(packet), id); + w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp); + w->pkt_len = sldns_buffer_limit(packet); + memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len); + if(reuse) + w->id = reuse_tcp_select_id(reuse, sq->outnet); + else w->id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff; + LDNS_ID_SET(w->pkt, w->id); memcpy(&w->addr, &sq->addr, sq->addrlen); w->addrlen = sq->addrlen; w->outnet = sq->outnet; + w->on_tcp_waiting_list = 0; + w->next_waiting = NULL; w->cb = callback; w->cb_arg = callback_arg; w->ssl_upstream = sq->ssl_upstream; w->tls_auth_name = sq->tls_auth_name; -#ifndef S_SPLINT_S - tv.tv_sec = timeout/1000; - tv.tv_usec = (timeout%1000)*1000; -#endif - comm_timer_set(w->timer, &tv); + w->timeout = timeout; + w->id_node.key = NULL; + w->write_wait_prev = NULL; + w->write_wait_next = NULL; + w->write_wait_queued = 0; + w->error_count = 0; if(pend) { /* we have a buffer available right now */ - if(!outnet_tcp_take_into_use(w, sldns_buffer_begin(packet), - sldns_buffer_limit(packet))) { - waiting_tcp_delete(w); - return NULL; + if(reuse) { + /* reuse existing fd, write query and continue */ + /* store query in tree by id */ + verbose(VERB_CLIENT, "pending_tcp_query: reuse, store"); + w->next_waiting = (void*)pend; + reuse_tree_by_id_insert(&pend->reuse, w); + /* can we write right now? */ + if(pend->query == NULL) { + /* write straight away */ + /* stop the timer on read of the fd */ + comm_point_stop_listening(pend->c); + pend->query = w; + outnet_tcp_take_query_setup(pend->c->fd, pend, + w); + } else { + /* put it in the waiting list for + * this stream */ + reuse_write_wait_push_back(&pend->reuse, w); + } + } else { + /* create new fd and connect to addr, setup to + * write query */ + verbose(VERB_CLIENT, "pending_tcp_query: new fd, connect"); + rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); + pend->reuse.pending = pend; + memcpy(&pend->reuse.addr, &sq->addr, sq->addrlen); + pend->reuse.addrlen = sq->addrlen; + if(!outnet_tcp_take_into_use(w)) { + waiting_tcp_delete(w); + return NULL; + } } -#ifdef USE_DNSTAP - if(sq->outnet->dtenv && - (sq->outnet->dtenv->log_resolver_query_messages || - sq->outnet->dtenv->log_forwarder_query_messages)) - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, - comm_tcp, sq->zone, sq->zonelen, packet); -#endif } else { /* queue up */ - w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp); - w->pkt_len = sldns_buffer_limit(packet); - memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len); - w->next_waiting = NULL; - if(sq->outnet->tcp_wait_last) - sq->outnet->tcp_wait_last->next_waiting = w; - else sq->outnet->tcp_wait_first = w; - sq->outnet->tcp_wait_last = w; + /* waiting for a buffer on the outside network buffer wait + * list */ + verbose(VERB_CLIENT, "pending_tcp_query: queue to wait"); + outnet_add_tcp_waiting(sq->outnet, w); } +#ifdef USE_DNSTAP + if(sq->outnet->dtenv && + (sq->outnet->dtenv->log_resolver_query_messages || + sq->outnet->dtenv->log_forwarder_query_messages)) + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, + comm_tcp, sq->zone, sq->zonelen, packet); +#endif return w; } @@ -1404,7 +2259,8 @@ static struct serviced_query* serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t* zone, size_t zonelen, int qtype, struct edns_option* opt_list) + uint8_t* zone, size_t zonelen, int qtype, struct edns_option* opt_list, + size_t pad_queries_block_size) { struct serviced_query* sq = (struct serviced_query*)malloc(sizeof(*sq)); #ifdef UNBOUND_DEBUG @@ -1462,6 +2318,7 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, sq->status = serviced_initial; sq->retry = 0; sq->to_be_deleted = 0; + sq->padding_block_size = pad_queries_block_size; #ifdef UNBOUND_DEBUG ins = #else @@ -1477,6 +2334,7 @@ static void waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w) { struct waiting_tcp* p = outnet->tcp_wait_first, *prev = NULL; + w->on_tcp_waiting_list = 0; while(p) { if(p == w) { /* remove w */ @@ -1492,10 +2350,53 @@ waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w) } } +/** reuse tcp stream, remove serviced query from stream, + * return true if the stream is kept, false if it is to be closed */ +static int +reuse_tcp_remove_serviced_keep(struct waiting_tcp* w, + struct serviced_query* sq) +{ + struct pending_tcp* pend_tcp = (struct pending_tcp*)w->next_waiting; + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep"); + /* remove the callback. let query continue to write to not cancel + * the stream itself. also keep it as an entry in the tree_by_id, + * in case the answer returns (that we no longer want), but we cannot + * pick the same ID number meanwhile */ + w->cb = NULL; + /* see if can be entered in reuse tree + * for that the FD has to be non-1 */ + if(pend_tcp->c->fd == -1) { + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: -1 fd"); + return 0; + } + /* if in tree and used by other queries */ + if(pend_tcp->reuse.node.key) { + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: in use by other queries"); + /* do not reset the keepalive timer, for that + * we'd need traffic, and this is where the serviced is + * removed due to state machine internal reasons, + * eg. iterator no longer interested in this query */ + return 1; + } + /* if still open and want to keep it open */ + if(pend_tcp->c->fd != -1 && sq->outnet->tcp_reuse.count < + sq->outnet->tcp_reuse_max) { + verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: keep open"); + /* set a keepalive timer on it */ + if(!reuse_tcp_insert(sq->outnet, pend_tcp)) { + return 0; + } + reuse_tcp_setup_timeout(pend_tcp); + return 1; + } + return 0; +} + /** cleanup serviced query entry */ static void serviced_delete(struct serviced_query* sq) { + verbose(VERB_CLIENT, "serviced_delete"); if(sq->pending) { /* clear up the pending query */ if(sq->status == serviced_query_UDP_EDNS || @@ -1503,6 +2404,7 @@ serviced_delete(struct serviced_query* sq) sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) { struct pending* p = (struct pending*)sq->pending; + verbose(VERB_CLIENT, "serviced_delete: UDP"); if(p->pc) portcomm_loweruse(sq->outnet, p->pc); pending_delete(sq->outnet, p); @@ -1510,14 +2412,32 @@ serviced_delete(struct serviced_query* sq) * mesh */ outnet_send_wait_udp(sq->outnet); } else { - struct waiting_tcp* p = (struct waiting_tcp*) + struct waiting_tcp* w = (struct waiting_tcp*) sq->pending; - if(p->pkt == NULL) { - decommission_pending_tcp(sq->outnet, - (struct pending_tcp*)p->next_waiting); + verbose(VERB_CLIENT, "serviced_delete: TCP"); + /* if on stream-write-waiting list then + * remove from waiting list and waiting_tcp_delete */ + if(w->write_wait_queued) { + struct pending_tcp* pend = + (struct pending_tcp*)w->next_waiting; + verbose(VERB_CLIENT, "serviced_delete: writewait"); + reuse_tree_by_id_delete(&pend->reuse, w); + reuse_write_wait_remove(&pend->reuse, w); + waiting_tcp_delete(w); + } else if(!w->on_tcp_waiting_list) { + struct pending_tcp* pend = + (struct pending_tcp*)w->next_waiting; + verbose(VERB_CLIENT, "serviced_delete: tcpreusekeep"); + if(!reuse_tcp_remove_serviced_keep(w, sq)) { + reuse_cb_and_decommission(sq->outnet, + pend, NETEVENT_CLOSED); + use_free_buffer(sq->outnet); + } + sq->pending = NULL; } else { - waiting_list_remove(sq->outnet, p); - waiting_tcp_delete(p); + verbose(VERB_CLIENT, "serviced_delete: tcpwait"); + waiting_list_remove(sq->outnet, w); + waiting_tcp_delete(w); } } } @@ -1580,6 +2500,7 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns) if(with_edns) { /* add edns section */ struct edns_data edns; + struct edns_option padding_option; edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; @@ -1602,6 +2523,14 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns) edns.bits = EDNS_DO; if(sq->dnssec & BIT_CD) LDNS_CD_SET(sldns_buffer_begin(buff)); + if (sq->ssl_upstream && sq->padding_block_size) { + padding_option.opt_code = LDNS_EDNS_PADDING; + padding_option.opt_len = 0; + padding_option.opt_data = NULL; + padding_option.next = edns.opt_list; + edns.opt_list = &padding_option; + edns.padding_block_size = sq->padding_block_size; + } attach_edns_record(buff, &edns); } } @@ -2097,18 +3026,18 @@ outnet_serviced_query(struct outside_network* outnet, { struct serviced_query* sq; struct service_callback* cb; - struct edns_tag_addr* client_tag_addr; + struct edns_string_addr* client_string_addr; if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, qstate, qstate->region)) return NULL; - if((client_tag_addr = edns_tag_addr_lookup(&env->edns_tags->client_tags, - addr, addrlen))) { - uint16_t client_tag = htons(client_tag_addr->tag_data); + if((client_string_addr = edns_string_addr_lookup( + &env->edns_strings->client_strings, addr, addrlen))) { edns_opt_list_append(&qstate->edns_opts_back_out, - env->edns_tags->client_tag_opcode, 2, - (uint8_t*)&client_tag, qstate->region); + env->edns_strings->client_string_opcode, + client_string_addr->string_len, + client_string_addr->string, qstate->region); } serviced_gen_query(buff, qinfo->qname, qinfo->qname_len, qinfo->qtype, @@ -2125,7 +3054,9 @@ outnet_serviced_query(struct outside_network* outnet, sq = serviced_create(outnet, buff, dnssec, want_dnssec, nocaps, tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, (int)qinfo->qtype, - qstate->edns_opts_back_out); + qstate->edns_opts_back_out, + ( ssl_upstream && env->cfg->pad_queries + ? env->cfg->pad_queries_block_size : 0 )); if(!sq) { free(cb); return NULL; diff --git a/services/outside_network.h b/services/outside_network.h index c8f6d5724..fe287af4f 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -52,6 +52,7 @@ struct ub_randstate; struct pending_tcp; struct waiting_tcp; struct waiting_udp; +struct reuse_tcp; struct infra_cache; struct port_comm; struct port_if; @@ -106,6 +107,9 @@ struct outside_network { int delayclose; /** timeout for delayclose */ struct timeval delay_tv; + /** if we perform udp-connect, connect() for UDP socket to mitigate + * ICMP side channel leakage */ + int udp_connect; /** array of outgoing IP4 interfaces */ struct port_if* ip4_ifs; @@ -154,6 +158,21 @@ struct outside_network { size_t num_tcp; /** number of tcp communication points in use. */ size_t num_tcp_outgoing; + /** + * tree of still-open and waiting tcp connections for reuse. + * can be closed and reopened to get a new tcp connection. + * or reused to the same destination again. with timeout to close. + * Entries are of type struct reuse_tcp. + * The entries are both active and empty connections. + */ + rbtree_type tcp_reuse; + /** max number of tcp_reuse entries we want to keep open */ + size_t tcp_reuse_max; + /** first and last(oldest) in lru list of reuse connections. + * the oldest can be closed to get a new free pending_tcp if needed + * The list contains empty connections, that wait for timeout or + * a new query that can use the existing connection. */ + struct reuse_tcp* tcp_reuse_first, *tcp_reuse_last; /** list of tcp comm points that are free for use */ struct pending_tcp* tcp_free; /** list of tcp queries waiting for a buffer */ @@ -211,6 +230,76 @@ struct port_comm { struct comm_point* cp; }; +/** + * Reuse TCP connection, still open can be used again. + */ +struct reuse_tcp { + /** rbtree node with links in tcp_reuse tree. key is NULL when not + * in tree. Both active and empty connections are in the tree. + * key is a pointer to this structure, the members used to compare + * are the sockaddr and and then is-ssl bool, and then ptr value is + * used in case the same address exists several times in the tree + * when there are multiple connections to the same destination to + * make the rbtree items unique. */ + rbnode_type node; + /** the key for the tcp_reuse tree. address of peer, ip4 or ip6, + * and port number of peer */ + struct sockaddr_storage addr; + /** length of addr */ + socklen_t addrlen; + /** also key for tcp_reuse tree, if ssl is used */ + int is_ssl; + /** lru chain, so that the oldest can be removed to get a new + * connection when all are in (re)use. oldest is last in list. + * The lru only contains empty connections waiting for reuse, + * the ones with active queries are not on the list because they + * do not need to be closed to make space for others. They already + * service a query so the close for another query does not help + * service a larger number of queries. */ + struct reuse_tcp* lru_next, *lru_prev; + /** true if the reuse_tcp item is on the lru list with empty items */ + int item_on_lru_list; + /** the connection to reuse, the fd is non-1 and is open. + * the addr and port determine where the connection is going, + * and is key to the rbtree. The SSL ptr determines if it is + * a TLS connection or a plain TCP connection there. And TLS + * or not is also part of the key to the rbtree. + * There is a timeout and read event on the fd, to close it. */ + struct pending_tcp* pending; + /** + * The more read again value pointed to by the commpoint + * tcp_more_read_again pointer, so that it exists after commpoint + * delete + */ + int cp_more_read_again; + /** + * The more write again value pointed to by the commpoint + * tcp_more_write_again pointer, so that it exists after commpoint + * delete + */ + int cp_more_write_again; + /** rbtree with other queries waiting on the connection, by ID number, + * of type struct waiting_tcp. It is for looking up received + * answers to the structure for callback. And also to see if ID + * numbers are unused and can be used for a new query. + * The write_wait elements are also in the tree, so that ID numbers + * can be looked up also for them. They are bool write_wait_queued. */ + rbtree_type tree_by_id; + /** list of queries waiting to be written on the channel, + * if NULL no queries are waiting to be written and the pending->query + * is the query currently serviced. The first is the next in line. + * They are also in the tree_by_id. Once written, the are removed + * from this list, but stay in the tree. */ + struct waiting_tcp* write_wait_first, *write_wait_last; + /** the outside network it is part of */ + struct outside_network* outnet; +}; + +/** max number of queries on a reuse connection */ +#define MAX_REUSE_TCP_QUERIES 200 +/** timeout for REUSE entries in milliseconds. */ +#define REUSE_TIMEOUT 60000 + /** * A query that has an answer pending for it. */ @@ -255,12 +344,15 @@ struct pending { struct pending_tcp { /** next in list of free tcp comm points, or NULL. */ struct pending_tcp* next_free; - /** the ID for the query; checked in reply */ - uint16_t id; /** tcp comm point it was sent on (and reply must come back on). */ struct comm_point* c; /** the query being serviced, NULL if the pending_tcp is unused. */ struct waiting_tcp* query; + /** the pre-allocated reuse tcp structure. if ->pending is nonNULL + * it is in use and the connection is waiting for reuse. + * It is here for memory pre-allocation, and used to make this + * pending_tcp wait for reuse. */ + struct reuse_tcp reuse; }; /** @@ -269,12 +361,27 @@ struct pending_tcp { struct waiting_tcp { /** * next in waiting list. - * if pkt==0, this points to the pending_tcp structure. + * if on_tcp_waiting_list==0, this points to the pending_tcp structure. */ struct waiting_tcp* next_waiting; + /** if true the item is on the tcp waiting list and next_waiting + * is used for that. If false, the next_waiting points to the + * pending_tcp */ + int on_tcp_waiting_list; + /** next and prev in query waiting list for stream connection */ + struct waiting_tcp* write_wait_prev, *write_wait_next; + /** true if the waiting_tcp structure is on the write_wait queue */ + int write_wait_queued; + /** entry in reuse.tree_by_id, if key is NULL, not in tree, otherwise, + * this struct is key and sorted by ID (from waiting_tcp.id). */ + rbnode_type id_node; + /** the ID for the query; checked in reply */ + uint16_t id; /** timeout event; timer keeps running whether the query is * waiting for a buffer or the tcp reply is pending */ struct comm_timer* timer; + /** timeout in msec */ + int timeout; /** the outside network it is part of */ struct outside_network* outnet; /** remote address. */ @@ -284,13 +391,14 @@ struct waiting_tcp { /** * The query itself, the query packet to send. * allocated after the waiting_tcp structure. - * set to NULL when the query is serviced and it part of pending_tcp. - * if this is NULL, the next_waiting points to the pending_tcp. */ uint8_t* pkt; /** length of query packet. */ size_t pkt_len; - /** callback for the timeout, error or reply to the message */ + /** callback for the timeout, error or reply to the message, + * or NULL if no user is waiting. the entry uses an ID number. + * a query that was written is no longer needed, but the ID number + * and a reply will come back and can be ignored if NULL */ comm_point_callback_type* cb; /** callback user argument */ void* cb_arg; @@ -298,6 +406,8 @@ struct waiting_tcp { int ssl_upstream; /** ref to the tls_auth_name from the serviced_query */ char* tls_auth_name; + /** the packet was involved in an error, to stop looping errors */ + int error_count; }; /** @@ -392,6 +502,8 @@ struct serviced_query { struct service_callback* cblist; /** the UDP or TCP query that is pending, see status which */ void* pending; + /** block size with which to pad encrypted queries (default: 128) */ + size_t padding_block_size; }; /** @@ -421,6 +533,7 @@ struct serviced_query { * msec to wait on timeouted udp sockets. * @param tls_use_sni: if SNI is used for TLS connections. * @param dtenv: environment to send dnstap events with (if enabled). + * @param udp_connect: if the udp_connect option is enabled. * @return: the new structure (with no pending answers) or NULL on error. */ struct outside_network* outside_network_create(struct comm_base* base, @@ -429,7 +542,8 @@ struct outside_network* outside_network_create(struct comm_base* base, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv); + void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv, + int udp_connect); /** * Delete outside_network structure. @@ -546,6 +660,19 @@ size_t outnet_get_mem(struct outside_network* outnet); */ size_t serviced_get_mem(struct serviced_query* sq); +/** Pick random ID value for a tcp stream, avoids existing IDs. */ +uint16_t reuse_tcp_select_id(struct reuse_tcp* reuse, + struct outside_network* outnet); + +/** find element in tree by id */ +struct waiting_tcp* reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id); + +/** insert element in tree by id */ +void reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w); + +/** delete readwait waiting_tcp elements, deletes the elements in the list */ +void reuse_del_readwait(rbtree_type* tree_by_id); + /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp); @@ -643,4 +770,10 @@ int pending_cmp(const void* key1, const void* key2); /** compare function of serviced query rbtree */ int serviced_cmp(const void* key1, const void* key2); +/** compare function of reuse_tcp rbtree in outside_network struct */ +int reuse_cmp(const void* key1, const void* key2); + +/** compare function of reuse_tcp tree_by_id rbtree */ +int reuse_id_cmp(const void* key1, const void* key2); + #endif /* OUTSIDE_NETWORK_H */ diff --git a/services/rpz.c b/services/rpz.c index 13304652c..2b6b0ac3f 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -668,7 +668,8 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, int only_exact, int wr, int zones_keep_lock) { uint8_t* ce; - size_t ce_len, ce_labs; + size_t ce_len; + int ce_labs; uint8_t wc[LDNS_MAX_DOMAINLEN+1]; int exact; struct local_zone* z = NULL; @@ -963,8 +964,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, for(a = az->rpz_first; a; a = a->rpz_az_next) { lock_rw_rdlock(&a->lock); r = a->rpz; - if(!r->taglist || taglist_intersect(r->taglist, - r->taglistlen, taglist, taglen)) { + if(!r->disabled && (!r->taglist || taglist_intersect(r->taglist, + r->taglistlen, taglist, taglen))) { z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, qinfo->qclass, 0, 0, 0); if(z && r->action_override == RPZ_DISABLED_ACTION) { @@ -1044,3 +1045,17 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, return ret; } + +void rpz_enable(struct rpz* r) +{ + if(!r) + return; + r->disabled = 0; +} + +void rpz_disable(struct rpz* r) +{ + if(!r) + return; + r->disabled = 1; +} diff --git a/services/rpz.h b/services/rpz.h index 77a2db55c..d5996a6cf 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -99,6 +99,7 @@ struct rpz { int log; char* log_name; struct regional* region; + int disabled; }; /** @@ -198,4 +199,16 @@ void rpz_finish_config(struct rpz* r); enum respip_action rpz_action_to_respip_action(enum rpz_action a); +/** + * Enable RPZ + * @param r: RPZ struct to enable + */ +void rpz_enable(struct rpz* r); + +/** + * Disable RPZ + * @param r: RPZ struct to disable + */ +void rpz_disable(struct rpz* r); + #endif /* SERVICES_RPZ_H */ diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index a30523c76..3e6fc6e6f 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -155,6 +155,36 @@ char* wsa_strerror(int err); #endif +static const char ICANN_UPDATE_CA[] = + /* The ICANN CA fetched at 24 Sep 2010. Valid to 2028 */ + "-----BEGIN CERTIFICATE-----\n" + "MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n" + "TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n" + "BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0MTkxMloX\n" + "DTI5MTIxODA0MTkxMlowXTEOMAwGA1UEChMFSUNBTk4xJjAkBgNVBAsTHUlDQU5O\n" + "IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1JQ0FOTiBSb290IENB\n" + "MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDb\n" + "cLhPNNqc1NB+u+oVvOnJESofYS9qub0/PXagmgr37pNublVThIzyLPGCJ8gPms9S\n" + "G1TaKNIsMI7d+5IgMy3WyPEOECGIcfqEIktdR1YWfJufXcMReZwU4v/AdKzdOdfg\n" + "ONiwc6r70duEr1IiqPbVm5T05l1e6D+HkAvHGnf1LtOPGs4CHQdpIUcy2kauAEy2\n" + "paKcOcHASvbTHK7TbbvHGPB+7faAztABLoneErruEcumetcNfPMIjXKdv1V1E3C7\n" + "MSJKy+jAqqQJqjZoQGB0necZgUMiUv7JK1IPQRM2CXJllcyJrm9WFxY0c1KjBO29\n" + "iIKK69fcglKcBuFShUECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n" + "Af8EBAMCAf4wHQYDVR0OBBYEFLpS6UmDJIZSL8eZzfyNa2kITcBQMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQAP8emCogqHny2UYFqywEuhLys7R9UKmYY4suzGO4nkbgfPFMfH\n" + "6M+Zj6owwxlwueZt1j/IaCayoKU3QsrYYoDRolpILh+FPwx7wseUEV8ZKpWsoDoD\n" + "2JFbLg2cfB8u/OlE4RYmcxxFSmXBg0yQ8/IoQt/bxOcEEhhiQ168H2yE5rxJMt9h\n" + "15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n" + "0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n" + "j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n" + "-----END CERTIFICATE-----\n"; + +static const char DS_TRUST_ANCHOR[] = + /* The anchors must start on a new line with ". IN DS and end with \n"[;] + * because the makedist script greps on the source here */ + /* anchor 20326 is from 2017 */ +". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; + /** verbosity for this application */ static int verb = 0; @@ -213,48 +243,21 @@ usage(void) static const char* get_builtin_cert(void) { - return -/* The ICANN CA fetched at 24 Sep 2010. Valid to 2028 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n" -"TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n" -"BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0MTkxMloX\n" -"DTI5MTIxODA0MTkxMlowXTEOMAwGA1UEChMFSUNBTk4xJjAkBgNVBAsTHUlDQU5O\n" -"IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1JQ0FOTiBSb290IENB\n" -"MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDb\n" -"cLhPNNqc1NB+u+oVvOnJESofYS9qub0/PXagmgr37pNublVThIzyLPGCJ8gPms9S\n" -"G1TaKNIsMI7d+5IgMy3WyPEOECGIcfqEIktdR1YWfJufXcMReZwU4v/AdKzdOdfg\n" -"ONiwc6r70duEr1IiqPbVm5T05l1e6D+HkAvHGnf1LtOPGs4CHQdpIUcy2kauAEy2\n" -"paKcOcHASvbTHK7TbbvHGPB+7faAztABLoneErruEcumetcNfPMIjXKdv1V1E3C7\n" -"MSJKy+jAqqQJqjZoQGB0necZgUMiUv7JK1IPQRM2CXJllcyJrm9WFxY0c1KjBO29\n" -"iIKK69fcglKcBuFShUECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n" -"Af8EBAMCAf4wHQYDVR0OBBYEFLpS6UmDJIZSL8eZzfyNa2kITcBQMA0GCSqGSIb3\n" -"DQEBCwUAA4IBAQAP8emCogqHny2UYFqywEuhLys7R9UKmYY4suzGO4nkbgfPFMfH\n" -"6M+Zj6owwxlwueZt1j/IaCayoKU3QsrYYoDRolpILh+FPwx7wseUEV8ZKpWsoDoD\n" -"2JFbLg2cfB8u/OlE4RYmcxxFSmXBg0yQ8/IoQt/bxOcEEhhiQ168H2yE5rxJMt9h\n" -"15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n" -"0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n" -"j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n" -"-----END CERTIFICATE-----\n" - ; + return ICANN_UPDATE_CA; } /** return the built in root DS trust anchor */ static const char* get_builtin_ds(void) { - return -/* The anchors must start on a new line with ". IN DS and end with \n"[;] - * because the makedist script greps on the source here */ -/* anchor 20326 is from 2017 */ -". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; + return DS_TRUST_ANCHOR; } /** print hex data */ static void -print_data(const char* msg, const char* data, int len) +print_data(const char* msg, const char* data, size_t len) { - int i; + size_t i; printf("%s: ", msg); for(i=0; i= 4) print_data("read data", data, (int)len); + if(verb >= 4) print_data("read data", data, len); m = BIO_new(BIO_s_mem()); if(!m) { if(verb) printf("out of memory\n"); diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 842dbe0d8..d58f1b2f9 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -82,6 +82,9 @@ static void usage(void) ATTR_NORETURN; static void ssl_err(const char* s) ATTR_NORETURN; static void ssl_path_err(const char* s, const char *path) ATTR_NORETURN; +/** timeout to wait for connection over stream, in msec */ +#define UNBOUND_CONTROL_CONNECT_TIMEOUT 5000 + /** Give unbound-control usage, and exit (1). */ static void usage(void) @@ -164,6 +167,9 @@ usage(void) printf(" view_local_data_remove view name remove local-data in view\n"); printf(" view_local_datas_remove view remove list of local-data from view\n"); printf(" one entry per line read from stdin\n"); + printf(" rpz_enable zone Enable the RPZ zone if it had previously\n"); + printf(" been disabled\n"); + printf(" rpz_disable zone Disable the RPZ zone\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); @@ -545,6 +551,30 @@ setup_ctx(struct config_file* cfg) return ctx; } +/** check connect error */ +static void +checkconnecterr(int err, const char* svr, struct sockaddr_storage* addr, + socklen_t addrlen, int statuscmd, int useport) +{ +#ifndef USE_WINSOCK + if(!useport) log_err("connect: %s for %s", strerror(err), svr); + else log_err_addr("connect", strerror(err), addr, addrlen); + if(err == ECONNREFUSED && statuscmd) { + printf("unbound is stopped\n"); + exit(3); + } +#else + int wsaerr = err; + if(!useport) log_err("connect: %s for %s", wsa_strerror(wsaerr), svr); + else log_err_addr("connect", wsa_strerror(wsaerr), addr, addrlen); + if(wsaerr == WSAECONNREFUSED && statuscmd) { + printf("unbound is stopped\n"); + exit(3); + } +#endif + exit(1); +} + /** contact the server with TCP connect */ static int contact_server(const char* svr, struct config_file* cfg, int statuscmd) @@ -598,26 +628,75 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) if(fd == -1) { fatal_exit("socket: %s", sock_strerror(errno)); } + fd_set_nonblock(fd); if(connect(fd, (struct sockaddr*)&addr, addrlen) < 0) { #ifndef USE_WINSOCK - int err = errno; - if(!useport) log_err("connect: %s for %s", strerror(err), svr); - else log_err_addr("connect", strerror(err), &addr, addrlen); - if(err == ECONNREFUSED && statuscmd) { - printf("unbound is stopped\n"); - exit(3); - } -#else - int wsaerr = WSAGetLastError(); - if(!useport) log_err("connect: %s for %s", wsa_strerror(wsaerr), svr); - else log_err_addr("connect", wsa_strerror(wsaerr), &addr, addrlen); - if(wsaerr == WSAECONNREFUSED && statuscmd) { - printf("unbound is stopped\n"); - exit(3); +#ifdef EINPROGRESS + if(errno != EINPROGRESS) { + checkconnecterr(errno, svr, &addr, + addrlen, statuscmd, useport); + } +#endif +#else + if(WSAGetLastError() != WSAEINPROGRESS && + WSAGetLastError() != WSAEWOULDBLOCK) { + checkconnecterr(WSAGetLastError(), svr, &addr, + addrlen, statuscmd, useport); } #endif - exit(1); } + while(1) { + fd_set rset, wset, eset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(FD_SET_T fd, &rset); + FD_ZERO(&wset); + FD_SET(FD_SET_T fd, &wset); + FD_ZERO(&eset); + FD_SET(FD_SET_T fd, &eset); + tv.tv_sec = UNBOUND_CONTROL_CONNECT_TIMEOUT/1000; + tv.tv_usec= (UNBOUND_CONTROL_CONNECT_TIMEOUT%1000)*1000; + if(select(fd+1, &rset, &wset, &eset, &tv) == -1) { + fatal_exit("select: %s", sock_strerror(errno)); + } + if(!FD_ISSET(fd, &rset) && !FD_ISSET(fd, &wset) && + !FD_ISSET(fd, &eset)) { + fatal_exit("timeout: could not connect to server"); + } else { + /* check nonblocking connect error */ + int error = 0; + socklen_t len = (socklen_t)sizeof(error); + if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error, + &len) < 0) { +#ifndef USE_WINSOCK + error = errno; /* on solaris errno is error */ +#else + error = WSAGetLastError(); +#endif + } + if(error != 0) { +#ifndef USE_WINSOCK +#ifdef EINPROGRESS + if(error == EINPROGRESS) + continue; /* try again later */ +#endif +#ifdef EWOULDBLOCK + if(error == EWOULDBLOCK) + continue; /* try again later */ +#endif +#else + if(error == WSAEINPROGRESS) + continue; /* try again later */ + if(error == WSAEWOULDBLOCK) + continue; /* try again later */ +#endif + checkconnecterr(error, svr, &addr, addrlen, + statuscmd, useport); + } + } + break; + } + fd_set_block(fd); return fd; } diff --git a/smallapp/worker_cb.c b/smallapp/worker_cb.c index 78d921a3c..cdf855dc3 100644 --- a/smallapp/worker_cb.c +++ b/smallapp/worker_cb.c @@ -46,6 +46,9 @@ #include "util/fptr_wlist.h" #include "util/log.h" #include "services/mesh.h" +#ifdef USE_DNSTAP +#include "dnstap/dtstream.h" +#endif void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), diff --git a/testcode/fake_event.c b/testcode/fake_event.c index e8fc84746..b8166c45c 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -64,6 +64,7 @@ #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" +#include "daemon/remote.h" #include struct worker; struct daemon_remote; @@ -1045,7 +1046,7 @@ outside_network_create(struct comm_base* base, size_t bufsize, void (*unwanted_action)(void*), void* ATTR_UNUSED(unwanted_param), int ATTR_UNUSED(do_udp), void* ATTR_UNUSED(sslctx), int ATTR_UNUSED(delayclose), int ATTR_UNUSED(tls_use_sni), - struct dt_env* ATTR_UNUSED(dtenv)) + struct dt_env* ATTR_UNUSED(dtenv), int ATTR_UNUSED(udp_connect)) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct outside_network* outnet = calloc(1, @@ -1214,7 +1215,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, sldns_buffer_flip(pend->buffer); if(1) { struct edns_data edns; - struct edns_tag_addr* client_tag_addr; + struct edns_string_addr* client_string_addr; if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, qstate, qstate->region)) { free(pend); @@ -1228,13 +1229,14 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, edns.bits = 0; if(dnssec) edns.bits = EDNS_DO; - if((client_tag_addr = edns_tag_addr_lookup( - &env->edns_tags->client_tags, + edns.padding_block_size = 0; + if((client_string_addr = edns_string_addr_lookup( + &env->edns_strings->client_strings, addr, addrlen))) { - uint16_t client_tag = htons(client_tag_addr->tag_data); edns_opt_list_append(&qstate->edns_opts_back_out, - env->edns_tags->client_tag_opcode, 2, - (uint8_t*)&client_tag, qstate->region); + env->edns_strings->client_string_opcode, + client_string_addr->string_len, + client_string_addr->string, qstate->region); } edns.opt_list = qstate->edns_opts_back_out; attach_edns_record(pend->buffer, &edns); @@ -1511,6 +1513,18 @@ int serviced_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) return 0; } +int reuse_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) +{ + log_assert(0); + return 0; +} + +int reuse_id_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) +{ + log_assert(0); + return 0; +} + /* timers in testbound for autotrust. statistics tested in tdir. */ struct comm_timer* comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg) @@ -1753,7 +1767,7 @@ struct comm_point* outnet_comm_point_for_http(struct outside_network* outnet, } int comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, - struct sockaddr* addr, socklen_t addrlen) + struct sockaddr* addr, socklen_t addrlen, int ATTR_UNUSED(is_connected)) { struct fake_commpoint* fc = (struct fake_commpoint*)c; struct replay_runtime* runtime = fc->runtime; diff --git a/testcode/testbound.c b/testcode/testbound.c index 3f3e106b0..5e10779fc 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -42,16 +42,22 @@ #ifdef HAVE_TIME_H # include #endif +#include #include "testcode/testpkts.h" #include "testcode/replay.h" #include "testcode/fake_event.h" #include "daemon/remote.h" +#include "libunbound/worker.h" #include "util/config_file.h" #include "sldns/keyraw.h" -#include +#ifdef UB_ON_WINDOWS +#include "winrc/win_svc.h" +#endif /** signal that this is a testbound compile */ #define unbound_testbound 1 +/** renamed main routine */ +int daemon_main(int argc, char* argv[]); /** * include the main program from the unbound daemon. * rename main to daemon_main to call it @@ -333,7 +339,7 @@ setup_playback(const char* filename, int* pass_argc, char* pass_argv[]) } /** remove config file at exit */ -void remove_configfile(void) +static void remove_configfile(void) { struct config_strlist* p; for(p=cfgfiles; p; p=p->next) @@ -551,22 +557,28 @@ void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg)) log_assert(0); } +#ifdef UB_ON_WINDOWS void wsvc_command_option(const char* ATTR_UNUSED(wopt), const char* ATTR_UNUSED(cfgfile), int ATTR_UNUSED(v), int ATTR_UNUSED(c)) { log_assert(0); } +#endif +#ifdef UB_ON_WINDOWS void wsvc_setup_worker(struct worker* ATTR_UNUSED(worker)) { /* do nothing */ } +#endif +#ifdef UB_ON_WINDOWS void wsvc_desetup_worker(struct worker* ATTR_UNUSED(worker)) { /* do nothing */ } +#endif #ifdef UB_ON_WINDOWS void worker_win_stop_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 6a099b15e..30562af11 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -839,6 +839,52 @@ static void respip_test(void) respip_conf_actions_test(); } +#include "services/outside_network.h" +/** add number of new IDs to the reuse tree, randomly chosen */ +static void tcpid_addmore(struct reuse_tcp* reuse, + struct outside_network* outnet, unsigned int addnum) +{ + unsigned int i; + struct waiting_tcp* w; + for(i=0; iid = id; + w->outnet = outnet; + w->next_waiting = (void*)reuse->pending; + reuse_tree_by_id_insert(reuse, w); + } +} + +/** fill up the reuse ID tree and test assertions */ +static void tcpid_fillup(struct reuse_tcp* reuse, + struct outside_network* outnet) +{ + int t, numtest=3; + for(t=0; ttree_by_id, reuse_id_cmp); + tcpid_addmore(reuse, outnet, 65535); + reuse_del_readwait(&reuse->tree_by_id); + } +} + +/** test TCP ID selection */ +static void tcpid_test(void) +{ + struct pending_tcp pend; + struct outside_network outnet; + unit_show_func("services/outside_network.c", "reuse_tcp_select_id"); + memset(&pend, 0, sizeof(pend)); + pend.reuse.pending = &pend; + memset(&outnet, 0, sizeof(outnet)); + outnet.rnd = ub_initstate(NULL); + rbtree_init(&pend.reuse.tree_by_id, reuse_id_cmp); + tcpid_fillup(&pend.reuse, &outnet); + ub_randfree(outnet.rnd); +} + void unit_show_func(const char* file, const char* func) { printf("test %s:%s\n", file, func); @@ -908,6 +954,7 @@ main(int argc, char* argv[]) ldns_test(); zonemd_test(); msgparse_test(); + tcpid_test(); #ifdef CLIENT_SUBNET ecs_test(); #endif /* CLIENT_SUBNET */ diff --git a/testdata/auth_zonefile_down.rpl b/testdata/auth_zonefile_down.rpl index 09e7fd061..9c5ecbb1c 100644 --- a/testdata/auth_zonefile_down.rpl +++ b/testdata/auth_zonefile_down.rpl @@ -1,6 +1,12 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + ; Options for signed zone. The zone is partially copied from val_negcache_nxdomain.rpl + trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" + val-override-date: "20180213111425" + qname-minimisation: "no" + trust-anchor-signaling: no + aggressive-nsec: yes auth-zone: name: "example.com." @@ -41,6 +47,50 @@ ns1 3600 IN A 1.2.3.4 ns2 3600 IN AAAA ::2 TEMPFILE_END +auth-zone: + name: "soa.high.com." + for-downstream: yes + for-upstream: no + zonefile: +TEMPFILE_NAME soa.high.com +TEMPFILE_CONTENTS soa.high.com +$ORIGIN high.com. +soa 500 IN SOA dns.example.de. hostmaster.dns.example.de. ( + 1379078166 28800 7200 604800 200 ) + 3600 IN NS ns1.example.com. + 3600 IN NS ns2.example.com. +TEMPFILE_END + +auth-zone: + name: "soa.low.com." + for-downstream: yes + for-upstream: no + zonefile: +TEMPFILE_NAME soa.low.com +TEMPFILE_CONTENTS soa.low.com +$ORIGIN low.com. +soa 200 IN SOA dns.example.de. hostmaster.dns.example.de. ( + 1379078166 28800 7200 604800 500 ) + 3600 IN NS ns1.example.com. + 3600 IN NS ns2.example.com. +TEMPFILE_END + +auth-zone: + name: "testzone.nlnetlabs.nl." + for-downstream: yes + for-upstream: no + zonefile: +TEMPFILE_NAME testzone.nlnetlabs.nl +TEMPFILE_CONTENTS testzone.nlnetlabs.nl +$ORIGIN testzone.nlnetlabs.nl. +testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY +testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= +alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC +alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= +testzone.nlnetlabs.nl. 4600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 +testzone.nlnetlabs.nl. 4600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= +TEMPFILE_END + stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. @@ -50,7 +100,7 @@ SCENARIO_BEGIN Test authority zone with zonefile for downstream responses ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 - ADDRESS 193.0.14.129 + ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id @@ -182,4 +232,109 @@ SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END +; check SOA TTL to be the minimum of the SOA.minimum and the SOA TTL +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nonexistent.soa.high.com. IN A +ENTRY_END +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +nonexistent.soa.high.com IN A +SECTION AUTHORITY +soa.high.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 200 +ENTRY_END +; check that the original SOA is also returned +STEP 32 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +soa.high.com. IN SOA +ENTRY_END +STEP 33 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NOERROR +SECTION QUESTION +soa.high.com. IN SOA +SECTION ANSWER +soa.high.com. 500 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 200 +ENTRY_END + +; check SOA TTL to be the minimum of the SOA.minimum and the SOA TTL +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nonexistent.soa.low.com. IN A +ENTRY_END +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +nonexistent.soa.low.com. IN A +SECTION AUTHORITY +soa.low.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 500 +ENTRY_END +; check that the original SOA is also returned +STEP 42 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +soa.low.com. IN SOA +ENTRY_END +STEP 43 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NOERROR +SECTION QUESTION +soa.low.com. IN SOA +SECTION ANSWER +soa.low.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 500 +ENTRY_END + +; check SOA TTL to be minimum of the SOA.minimum and the SOA TTL for DNSSEC +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +ant.testzone.nlnetlabs.nl. IN A +ENTRY_END +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD DO RA AA NXDOMAIN +SECTION QUESTION +ant.testzone.nlnetlabs.nl. IN A +SECTION AUTHORITY +testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 +testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= +alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC +alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= +testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY +testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= +ENTRY_END +; check that the original SOA is also returned +STEP 52 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +testzone.nlnetlabs.nl. IN SOA +ENTRY_END +STEP 53 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD DO RA AA NOERROR +SECTION QUESTION +testzone.nlnetlabs.nl. IN SOA +SECTION ANSWER +testzone.nlnetlabs.nl. 4600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 +testzone.nlnetlabs.nl. 4600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= +ENTRY_END + SCENARIO_END diff --git a/testdata/edns_client_tag.rpl b/testdata/edns_client_string.rpl similarity index 72% rename from testdata/edns_client_tag.rpl rename to testdata/edns_client_string.rpl index 767652c26..1822f7898 100644 --- a/testdata/edns_client_tag.rpl +++ b/testdata/edns_client_string.rpl @@ -1,14 +1,14 @@ ; config options server: - edns-client-tag: 10.0.0.0/24 1234 - edns-client-tag: 10.0.0.10/32 5678 + edns-client-string: 10.0.0.0/24 "abc d" + edns-client-string: 10.0.0.10/32 "123AbC!" stub-zone: - name: "tag1234." + name: "edns-string-abc." stub-addr: 10.0.0.1 stub-zone: - name: "tag5678." + name: "edns-string-123." stub-addr: 10.0.0.10 stub-zone: @@ -17,7 +17,7 @@ stub-zone: CONFIG_END -SCENARIO_BEGIN Test EDNS client tag option +SCENARIO_BEGIN Test EDNS string tag option RANGE_BEGIN 0 1000 ADDRESS 10.0.0.1 @@ -26,9 +26,9 @@ MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION -tag1234. IN A +edns-string-abc. IN A SECTION ANSWER -tag1234. IN A 10.20.30.40 +edns-string-abc. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END @@ -40,9 +40,9 @@ MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION -tag5678. IN A +edns-string-123. IN A SECTION ANSWER -tag5678. IN A 10.20.30.40 +edns-string-123. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END @@ -65,19 +65,19 @@ STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION -tag1234. IN A +edns-string-abc. IN A ENTRY_END STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION -tag1234. IN A +edns-string-abc. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN - 00 10 ; Opcode 16 - 00 02 ; Length 2 - 04 d2 ; 1234 + fd e9 ; Opcode 65001 + 00 05 ; Length 5 + 61 62 63 20 64 ; "abc d" HEX_EDNSDATA_END ENTRY_END @@ -86,28 +86,29 @@ ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION -tag1234. IN A +edns-string-abc. IN A SECTION ANSWER -tag1234. IN A 10.20.30.40 +edns-string-abc. IN A 10.20.30.40 ENTRY_END STEP 110 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION -tag5678. IN A +edns-string-123. IN A ENTRY_END STEP 120 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION -tag5678. IN A +edns-string-123. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN - 00 10 ; Opcode 16 - 00 02 ; Length 2 - 16 2e ; 5678 + fd e9 ; Opcode 65001 + 00 07 ; Length 7 + 31 32 33 41 62 ; "123Ab" + 43 21 ; "C!" HEX_EDNSDATA_END ENTRY_END @@ -116,9 +117,9 @@ ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION -tag5678. IN A +edns-string-123. IN A SECTION ANSWER -tag5678. IN A 10.20.30.40 +edns-string-123. IN A 10.20.30.40 ENTRY_END STEP 210 QUERY diff --git a/testdata/edns_client_string_opcode.rpl b/testdata/edns_client_string_opcode.rpl new file mode 100644 index 000000000..3bd6dda4e --- /dev/null +++ b/testdata/edns_client_string_opcode.rpl @@ -0,0 +1,153 @@ +; config options +server: + edns-client-string: 10.0.0.0/24 "abc d" + edns-client-string: 10.0.0.10/32 "123AbC!" + edns-client-string-opcode: 65432 + +stub-zone: + name: "edns-string-abc." + stub-addr: 10.0.0.1 + +stub-zone: + name: "edns-string-123." + stub-addr: 10.0.0.10 + +stub-zone: + name: "notag." + stub-addr: 10.10.0.1 + +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 10.0.0.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +edns-string-abc. IN A +SECTION ANSWER +edns-string-abc. IN A 10.20.30.40 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +RANGE_BEGIN 0 1000 + ADDRESS 10.0.0.10 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +edns-string-123. IN A +SECTION ANSWER +edns-string-123. IN A 10.20.30.40 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +RANGE_BEGIN 0 1000 + ADDRESS 10.10.0.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +notag. IN A +SECTION ANSWER +notag. IN A 10.20.30.40 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +edns-string-abc. IN A +ENTRY_END + +STEP 20 CHECK_OUT_QUERY +ENTRY_BEGIN +MATCH qname qtype opcode ednsdata +SECTION QUESTION +edns-string-abc. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + ff 98 ; Opcode 65432 + 00 05 ; Length 5 + 61 62 63 20 64 ; "abc d" + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +edns-string-abc. IN A +SECTION ANSWER +edns-string-abc. IN A 10.20.30.40 +ENTRY_END + +STEP 110 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +edns-string-123. IN A +ENTRY_END + +STEP 120 CHECK_OUT_QUERY +ENTRY_BEGIN +MATCH qname qtype opcode ednsdata +SECTION QUESTION +edns-string-123. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + ff 98 ; Opcode 65432 + 00 07 ; Length 7 + 31 32 33 41 62 ; "123Ab" + 43 21 ; "C!" + HEX_EDNSDATA_END +ENTRY_END + +STEP 130 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +edns-string-123. IN A +SECTION ANSWER +edns-string-123. IN A 10.20.30.40 +ENTRY_END + +STEP 210 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +notag. IN A +ENTRY_END + +STEP 220 CHECK_OUT_QUERY +ENTRY_BEGIN +MATCH qname qtype opcode ednsdata +SECTION QUESTION +notag. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + HEX_EDNSDATA_END +ENTRY_END + +STEP 230 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +notag. IN A +SECTION ANSWER +notag. IN A 10.20.30.40 +ENTRY_END + +SCENARIO_END diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.post b/testdata/fwd_ancil.tdir/fwd_ancil.post index a74ba856e..6578151af 100644 --- a/testdata/fwd_ancil.tdir/fwd_ancil.post +++ b/testdata/fwd_ancil.tdir/fwd_ancil.post @@ -14,5 +14,9 @@ fi kill_pid $FWD_PID if fgrep "service stopped" unbound.log; then exit 0 -fi +fi +if fgrep "disable interface-automatic" unbound.log; then + echo "skip test" + exit 0 +fi kill_pid $UNBOUND_PID diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.conf b/testdata/fwd_oneport.tdir/fwd_oneport.conf index f3427fece..21ebc9fed 100644 --- a/testdata/fwd_oneport.tdir/fwd_oneport.conf +++ b/testdata/fwd_oneport.tdir/fwd_oneport.conf @@ -13,6 +13,7 @@ server: num-queries-per-thread: 1024 use-syslog: no do-not-query-localhost: no + udp-connect: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/localdata.rpl b/testdata/localdata.rpl index a2e7eeba2..047fbeeba 100644 --- a/testdata/localdata.rpl +++ b/testdata/localdata.rpl @@ -35,6 +35,9 @@ server: local-zone: "redirect.top." redirect local-data: "redirect.top. A 20.30.40.54" + ; null zone + local-zone: "null.top." always_null + ; create implicit data in the IN domain as well local-data: "a.a.implicit. A 20.30.41.50" local-data: "b.a.implicit. A 20.30.42.50" @@ -85,12 +88,12 @@ local. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION local. IN A SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; positive SOA @@ -101,7 +104,7 @@ local. IN SOA ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION local. IN SOA @@ -133,12 +136,12 @@ serv.local. IN MX ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION serv.local. IN MX SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; no such type, empty nonterminal @@ -149,12 +152,12 @@ bla.local. IN MX ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION bla.local. IN MX SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; nxdomain with SOA @@ -165,12 +168,12 @@ doing.local. IN MX ENTRY_END STEP 16 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA NXDOMAIN SECTION QUESTION doing.local. IN MX SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; nxdomain without SOA @@ -355,4 +358,36 @@ SECTION ANSWER www.redirect.top. IN A 20.30.40.54 ENTRY_END +; always_null zone +STEP 60 QUERY +ENTRY_BEGIN +SECTION QUESTION +null.top. IN A +ENTRY_END +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RA AA NOERROR +SECTION QUESTION +null.top. IN A +SECTION ANSWER +null.top. IN A 0.0.0.0 +ENTRY_END + +; always_null zone AAAA +STEP 62 QUERY +ENTRY_BEGIN +SECTION QUESTION +foo.null.top. IN AAAA +ENTRY_END +STEP 63 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RA AA NOERROR +SECTION QUESTION +foo.null.top. IN AAAA +SECTION ANSWER +foo.null.top. IN AAAA ::0 +ENTRY_END + SCENARIO_END diff --git a/testdata/nsid_ascii.rpl b/testdata/nsid_ascii.rpl new file mode 100644 index 000000000..f357db5ae --- /dev/null +++ b/testdata/nsid_ascii.rpl @@ -0,0 +1,54 @@ +; config options +server: + nsid: "ascii_hopsa kidee" + +stub-zone: + name: "example." + stub-addr: 192.0.2.1 +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 192.0.2.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 0b ; Length 11 + 68 6F 70 73 61 20 ; "hopsa " + 6B 69 64 65 65 ; "kidee" + HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END diff --git a/testdata/nsid_hex.rpl b/testdata/nsid_hex.rpl new file mode 100644 index 000000000..0d5e8f40d --- /dev/null +++ b/testdata/nsid_hex.rpl @@ -0,0 +1,54 @@ +; config options +server: + nsid: "0123456789abcdef" + +stub-zone: + name: "example." + stub-addr: 192.0.2.1 +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 192.0.2.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 08 ; Length 8 + 01 23 45 67 ; + 89 ab cd ef ; + HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END diff --git a/testdata/nsid_not_set.rpl b/testdata/nsid_not_set.rpl new file mode 100644 index 000000000..06abe5985 --- /dev/null +++ b/testdata/nsid_not_set.rpl @@ -0,0 +1,47 @@ +; config options +stub-zone: + name: "example." + stub-addr: 192.0.2.1 +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 192.0.2.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END diff --git a/testdata/padding.tdir/padding.conf b/testdata/padding.tdir/padding.conf new file mode 100644 index 000000000..c310d355d --- /dev/null +++ b/testdata/padding.tdir/padding.conf @@ -0,0 +1,27 @@ +server: + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + tls-cert-bundle: "unbound_server.pem" + tls-upstream: yes + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@#unbound" + + diff --git a/testdata/padding.tdir/padding.conf2 b/testdata/padding.tdir/padding.conf2 new file mode 100644 index 000000000..98be8fec7 --- /dev/null +++ b/testdata/padding.tdir/padding.conf2 @@ -0,0 +1,47 @@ +# this is the upstream server that has pipelining and responds to queries. +server: + verbosity: 1 + # num-threads: 1 + interface: 127.0.0.1@@PORT@ + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound2.pid" + chroot: "" + username: "" + do-not-query-localhost: no + tls-port: @PORT@ + tls-service-key: "unbound_server.key" + tls-service-pem: "unbound_server.pem" + tcp-idle-timeout: 10000 + log-queries: yes + log-replies: yes + log-identity: "upstream" + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT2@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: no + dnstap-log-resolver-response-messages: no + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: no + dnstap-log-forwarder-response-messages: no diff --git a/testdata/padding.tdir/padding.dsc b/testdata/padding.tdir/padding.dsc new file mode 100644 index 000000000..37aceb353 --- /dev/null +++ b/testdata/padding.tdir/padding.dsc @@ -0,0 +1,16 @@ +BaseName: padding +Version: 1.0 +Description: Test EDNS0 padding option (RFC7830 and RFC8467). +CreationDate: Sun Jan 24 16:41:42 CET 2021 +Maintainer: Willem Toorop +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: padding.pre +Post: padding.post +Test: padding.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/padding.tdir/padding.msgsizes b/testdata/padding.tdir/padding.msgsizes new file mode 100644 index 000000000..f0d4a496d --- /dev/null +++ b/testdata/padding.tdir/padding.msgsizes @@ -0,0 +1,20 @@ +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 468 +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 936 +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 60 +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 502 +;; MSG SIZE rcvd: 44 +;; MSG SIZE rcvd: 60 +;; MSG SIZE rcvd: 44 +;; MSG SIZE rcvd: 502 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 64 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 512 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 512 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 512 diff --git a/testdata/padding.tdir/padding.post b/testdata/padding.tdir/padding.post new file mode 100644 index 000000000..826798a8f --- /dev/null +++ b/testdata/padding.tdir/padding.post @@ -0,0 +1,23 @@ +# #-- padding.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill_pid `cat unbound2.pid` +if test -f unbound2.log; then + echo ">>> upstream log" + cat unbound2.log +fi +#kill_pid $UNBOUND_PID +kill_pid `cat unbound.pid` +if test -f unbound.log; then + echo ">>> unbound log" + cat unbound.log +fi diff --git a/testdata/padding.tdir/padding.pre b/testdata/padding.tdir/padding.pre new file mode 100644 index 000000000..4a13d0229 --- /dev/null +++ b/testdata/padding.tdir/padding.pre @@ -0,0 +1,69 @@ +# #-- padding.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 5 +UNBOUND_PORT=$RND_PORT +UPSTREAM_PORT=$(($RND_PORT + 1)) +FWD_PORT=$(($RND_PORT + 2)) +CONTROL_PORT=$(($RND_PORT + 3)) +CONTROL_PORT2=$(($RND_PORT + 4)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "CONTROL_PORT2=$CONTROL_PORT2" >> .tpkg.var.test + +# start ldns-testnd +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT padding.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up and make the dnstap.socket file +wait_server_up "tap.errlog" "creating unix socket" +if test ! -S dnstap.socket; then + echo "the dnstap.socket file does not exist!" +fi + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < padding.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +#$PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +# make upstream config file +sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT2\@/'$CONTROL_PORT2'/' < padding.conf2 > ub2.conf +# start upstream unbound in the background +$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & +#$PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & +UPSTREAM_PID=$! +echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test + +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log +wait_unbound_up unbound2.log + +cat .tpkg.var.test + diff --git a/testdata/padding.tdir/padding.test b/testdata/padding.tdir/padding.test new file mode 100644 index 000000000..5111d8139 --- /dev/null +++ b/testdata/padding.tdir/padding.test @@ -0,0 +1,170 @@ +echo There we go... + +# #-- padding.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 +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> wait for log to happen on timer" +sleep 3 +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> check answer" +if grep "Lorem ipsum" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "txt.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> disable padding of responses." +$PRE/unbound-control -c ub2.conf set_option pad-responses: no +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> enable padding of responses." +$PRE/unbound-control -c ub2.conf set_option pad-responses: yes +echo "> set pad responses block size to 64" +$PRE/unbound-control -c ub2.conf set_option pad-responses-block-size: 64 +echo "> disable padding of queries." +$PRE/unbound-control -c ub.conf set_option pad-queries: no +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> enable padding of queries." +$PRE/unbound-control -c ub.conf set_option pad-queries: yes +echo "> set pad queries block size to 48" +$PRE/unbound-control -c ub.conf set_option pad-queries-block-size: 48 +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> set pad responses block size to 512" +$PRE/unbound-control -c ub2.conf set_option pad-responses-block-size: 512 +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query fin.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT fin.example.com. TXT | tee outfile +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 10; fi +if grep "fini" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +grep '^;; MSG SIZE rcvd: ' tap.log > message.sizes + +if diff message.sizes padding.msgsizes +then + echo "OK - Message sizes matched expected sizes" + exit 0 +else + echo "unexpected message sizes" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi diff --git a/testdata/padding.tdir/padding.testns b/testdata/padding.tdir/padding.testns new file mode 100644 index 000000000..bd3718ff6 --- /dev/null +++ b/testdata/padding.tdir/padding.testns @@ -0,0 +1,34 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +txt IN TXT +SECTION ANSWER +txt IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +fin IN TXT +SECTION ANSWER +fin IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." "fini" +ENTRY_END + diff --git a/testdata/padding.tdir/unbound_control.key b/testdata/padding.tdir/unbound_control.key new file mode 100644 index 000000000..753a4ef61 --- /dev/null +++ b/testdata/padding.tdir/unbound_control.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA +1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ +F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR +ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm +vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb +IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL +cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr +lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov +15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf +LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ +Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 +YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 +whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c +lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax +tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ +U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 +Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc +Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 +ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ +1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN +b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz +ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C +TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF +tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y +aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 +A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU +LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U +R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy +7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj +7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw +jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 +BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar +kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR +qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 +VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 +MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa +C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= +-----END RSA PRIVATE KEY----- diff --git a/testdata/padding.tdir/unbound_control.pem b/testdata/padding.tdir/unbound_control.pem new file mode 100644 index 000000000..a1edf7017 --- /dev/null +++ b/testdata/padding.tdir/unbound_control.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte +-----END CERTIFICATE----- diff --git a/testdata/padding.tdir/unbound_server.key b/testdata/padding.tdir/unbound_server.key new file mode 100644 index 000000000..370a7bbb2 --- /dev/null +++ b/testdata/padding.tdir/unbound_server.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== +-----END RSA PRIVATE KEY----- diff --git a/testdata/padding.tdir/unbound_server.pem b/testdata/padding.tdir/unbound_server.pem new file mode 100644 index 000000000..986807310 --- /dev/null +++ b/testdata/padding.tdir/unbound_server.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== +-----END CERTIFICATE----- diff --git a/testdata/serve_original_ttl.rpl b/testdata/serve_original_ttl.rpl new file mode 100644 index 000000000..630fb39a4 --- /dev/null +++ b/testdata/serve_original_ttl.rpl @@ -0,0 +1,136 @@ +; config options +server: + access-control: 127.0.0.1 allow_snoop + module-config: "validator iterator" + qname-minimisation: "no" + minimal-responses: no + serve-original-ttl: yes + cache-max-ttl: 1000 + cache-min-ttl: 20 + serve-expired: yes + serve-expired-reply-ttl: 123 + +stub-zone: + name: "example.com" + stub-addr: 1.2.3.4 +CONFIG_END + +SCENARIO_BEGIN Test serve-original-ttl +; Scenario overview: +; - query for example.com. IN A +; - check that we get an answer for example.com. IN A with the correct TTL +; - query again after a couple seconds and check that we get the original TTL +; (next steps are combination with serve-expired) +; - query again after the TTL expired +; - check that we get the expired cached answer with the original TTL + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN NS + SECTION ANSWER + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 + ENTRY_END +RANGE_END + +; Query with RD flag +STEP 1 QUERY +ENTRY_BEGIN + REPLY RD + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got the correct answer (should be cached) +STEP 10 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RD RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 +ENTRY_END + +; Wait a couple of seconds (< 10) +STEP 11 TIME_PASSES ELAPSE 5 + +; Query again +STEP 20 QUERY +ENTRY_BEGIN + REPLY + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got the cached answer with the original TTL +; (Passively checks that minimum and maximum TTLs are ignored) +STEP 30 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 A 5.6.7.8 + SECTION AUTHORITY + example.com. 3600 NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. 3600 A 1.2.3.4 +ENTRY_END + +; Wait for the TTL to expire +STEP 31 TIME_PASSES ELAPSE 3601 + +; Query again +STEP 40 QUERY +ENTRY_BEGIN + REPLY + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got a stale answer with the original TTL +STEP 50 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 A 5.6.7.8 + SECTION AUTHORITY + example.com. NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. A 1.2.3.4 +ENTRY_END + +; Give time for the pending query to get answered +STEP 51 TRAFFIC + +SCENARIO_END diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.conf b/testdata/tcp_reuse.tdir/tcp_reuse.conf new file mode 100644 index 000000000..e8de8d3f8 --- /dev/null +++ b/testdata/tcp_reuse.tdir/tcp_reuse.conf @@ -0,0 +1,17 @@ +server: + verbosity: 5 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + tcp-upstream: yes + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.conf2 b/testdata/tcp_reuse.tdir/tcp_reuse.conf2 new file mode 100644 index 000000000..55985c83f --- /dev/null +++ b/testdata/tcp_reuse.tdir/tcp_reuse.conf2 @@ -0,0 +1,39 @@ +# this is the upstream server that has pipelining and responds to queries. +server: + verbosity: 1 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound2.pid" + chroot: "" + username: "" + do-not-query-localhost: no + tcp-idle-timeout: 10000 + + log-queries: yes + log-replies: yes + log-identity: "upstream" + + local-zone: "." refuse + local-zone: "example.com" static + local-data: "www.example.com A 10.20.30.40" + local-data: "www1.example.com A 10.20.30.41" + local-data: "www2.example.com A 10.20.30.42" + local-data: "www3.example.com A 10.20.30.43" + local-data: "www4.example.com A 10.20.30.44" + local-data: "www5.example.com A 10.20.30.45" + local-data: "www6.example.com A 10.20.30.46" + local-data: "www7.example.com A 10.20.30.47" + + local-zone: "drop.net" deny + local-zone: "refuse.net" refuse + + local-zone: "more.net" redirect + local-data: "more.net A 10.20.30.40" + +# if queries escape, send them to localhost +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.dsc b/testdata/tcp_reuse.tdir/tcp_reuse.dsc new file mode 100644 index 000000000..8a780480d --- /dev/null +++ b/testdata/tcp_reuse.tdir/tcp_reuse.dsc @@ -0,0 +1,16 @@ +BaseName: tcp_reuse +Version: 1.0 +Description: Test tcp stream reuse. +CreationDate: Wed Jun 03 09:37:00 CET 2020 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: tcp_reuse.pre +Post: tcp_reuse.post +Test: tcp_reuse.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.post b/testdata/tcp_reuse.tdir/tcp_reuse.post new file mode 100644 index 000000000..ca7535471 --- /dev/null +++ b/testdata/tcp_reuse.tdir/tcp_reuse.post @@ -0,0 +1,19 @@ +# #-- tcp_reuse.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 `cat unbound2.pid` +if test -f unbound2.log; then + echo ">>> upstream log" + cat unbound2.log +fi +#kill_pid $UNBOUND_PID +kill_pid `cat unbound.pid` +if test -f unbound.log; then + echo ">>> unbound log" + cat unbound.log +fi diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.pre b/testdata/tcp_reuse.tdir/tcp_reuse.pre new file mode 100644 index 000000000..511dbc6f7 --- /dev/null +++ b/testdata/tcp_reuse.tdir/tcp_reuse.pre @@ -0,0 +1,34 @@ +# #-- tcp_reuse.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +UPSTREAM_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tcp_reuse.conf > ub.conf +# start unbound in the background +#$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +$PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +wait_unbound_up unbound.log + +# make upstream config file +sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tcp_reuse.conf2 > ub2.conf +# start upstream unbound in the background +#$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & +$PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & +UPSTREAM_PID=$! +echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test +wait_unbound_up unbound2.log + +cat .tpkg.var.test + diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.test b/testdata/tcp_reuse.tdir/tcp_reuse.test new file mode 100644 index 000000000..b62ec0d19 --- /dev/null +++ b/testdata/tcp_reuse.tdir/tcp_reuse.test @@ -0,0 +1,309 @@ +# #-- tcp_reuse.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) + +echo "> query www1.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.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 unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.com" outfile | grep "10.20.30.41"; then + echo "content OK" +else + echo "result contents not OK, for www1.example.com" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www1.example.com" + exit 1 +fi +echo "OK" +echo "" + +# this should be reused on the same tcp stream: +echo "> query www2.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.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 unbound2.log + cat unbound.log + echo "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, for www2.example.com" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www2.example.com" + exit 1 +fi + +echo "> query refuse.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "rcode: SERVFAIL" outfile; then + echo "content OK" +else + echo "result contents not OK, for refuse.net" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for refuse.net" + exit 1 +fi + +echo "> query www3.example.com." +echo "> query www4.example.com." +echo "> query www5.example.com." +echo "> query www6.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 & +wait +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www3.example.com" outfile3 | grep "10.20.30.43"; then + echo "content OK" +else + echo "result contents not OK, for www3.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www3.example.com" + exit 1 +fi +if grep "www4.example.com" outfile4 | grep "10.20.30.44"; then + echo "content OK" +else + echo "result contents not OK, for www4.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www4.example.com" + exit 1 +fi +if grep "www5.example.com" outfile5 | grep "10.20.30.45"; then + echo "content OK" +else + echo "result contents not OK, for www5.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www5.example.com" + exit 1 +fi +if grep "www6.example.com" outfile6 | grep "10.20.30.46"; then + echo "content OK" +else + echo "result contents not OK, for www6.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www6.example.com" + exit 1 +fi + +echo "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net" +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +for x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do + if grep "$x" outfile | grep "10.20.30.40"; then + echo "content OK for $x" + else + echo "result contents not OK, for $x" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for $x" + exit 1 + fi +done + +# make the server timeout to drop the upstream connection +echo "> sleep 15" +sleep 15 +# see if we are still up. +echo "> query a7.more.net" +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +for x in a7.more.net; do + if grep "$x" outfile | grep "10.20.30.40"; then + echo "content OK for $x" + else + echo "result contents not OK, for $x" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for $x" + exit 1 + fi +done + +# dropconn.drop.net make the server drop the connection. +echo "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net" +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +# cannot really check outfile, because it may or may not have answers depending +# on how fast the other server responds or the drop happens, but there are +# a bunch of connection drops, whilst resolving the other queries. + +echo "> query drop.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT 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 unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "rcode: SERVFAIL" outfile; then + echo "content OK" +else + echo "result contents not OK, for drop.net" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for drop.net" + exit 1 +fi + + +# timeouts at the end. (so that the server is not marked as failed for +# the other tests). +echo "> query q1.drop.net." +echo "> query q2.drop.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 & +wait +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile1 + cat outfile2 + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile1 +cat outfile2 +if grep "rcode: SERVFAIL" outfile1; then + echo "content OK" +else + echo "result contents not OK, for q1.drop.net" + echo "> cat logfiles" + cat outfile1 + cat outfile2 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for q1.drop.net" + exit 1 +fi +if grep "rcode: SERVFAIL" outfile2; then + echo "content OK" +else + echo "result contents not OK, for q2.drop.net" + echo "> cat logfiles" + cat outfile1 + cat outfile2 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for q2.drop.net" + exit 1 +fi + +echo "OK" +exit 0 diff --git a/testdata/tls_reuse.tdir/tls_reuse.conf b/testdata/tls_reuse.tdir/tls_reuse.conf new file mode 100644 index 000000000..e8200b28b --- /dev/null +++ b/testdata/tls_reuse.tdir/tls_reuse.conf @@ -0,0 +1,18 @@ +server: + verbosity: 5 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + tls-cert-bundle: "unbound_server.pem" + tls-upstream: yes + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@#unbound" diff --git a/testdata/tls_reuse.tdir/tls_reuse.conf2 b/testdata/tls_reuse.tdir/tls_reuse.conf2 new file mode 100644 index 000000000..0b452558d --- /dev/null +++ b/testdata/tls_reuse.tdir/tls_reuse.conf2 @@ -0,0 +1,43 @@ +# this is the upstream server that has pipelining and responds to queries. +server: + verbosity: 1 + # num-threads: 1 + interface: 127.0.0.1@@PORT@ + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound2.pid" + chroot: "" + username: "" + do-not-query-localhost: no + tls-port: @PORT@ + tls-service-key: "unbound_server.key" + tls-service-pem: "unbound_server.pem" + tcp-idle-timeout: 10000 + + log-queries: yes + log-replies: yes + log-identity: "upstream" + + local-zone: "." refuse + local-zone: "example.com" static + local-data: "www.example.com A 10.20.30.40" + local-data: "www1.example.com A 10.20.30.41" + local-data: "www2.example.com A 10.20.30.42" + local-data: "www3.example.com A 10.20.30.43" + local-data: "www4.example.com A 10.20.30.44" + local-data: "www5.example.com A 10.20.30.45" + local-data: "www6.example.com A 10.20.30.46" + local-data: "www7.example.com A 10.20.30.47" + + local-zone: "drop.net" deny + local-zone: "refuse.net" refuse + + local-zone: "more.net" redirect + local-data: "more.net A 10.20.30.40" + +# if queries escape, send them to localhost +forward-zone: + name: "." + forward-tls-upstream: yes + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tls_reuse.tdir/tls_reuse.dsc b/testdata/tls_reuse.tdir/tls_reuse.dsc new file mode 100644 index 000000000..76a80cdad --- /dev/null +++ b/testdata/tls_reuse.tdir/tls_reuse.dsc @@ -0,0 +1,16 @@ +BaseName: tls_reuse +Version: 1.0 +Description: Test tls stream reuse. +CreationDate: Wed Jun 30 16:37:00 CET 2020 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: tls_reuse.pre +Post: tls_reuse.post +Test: tls_reuse.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/tls_reuse.tdir/tls_reuse.post b/testdata/tls_reuse.tdir/tls_reuse.post new file mode 100644 index 000000000..2eef0da96 --- /dev/null +++ b/testdata/tls_reuse.tdir/tls_reuse.post @@ -0,0 +1,19 @@ +# #-- tls_reuse.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 `cat unbound2.pid` +if test -f unbound2.log; then + echo ">>> upstream log" + cat unbound2.log +fi +#kill_pid $UNBOUND_PID +kill_pid `cat unbound.pid` +if test -f unbound.log; then + echo ">>> unbound log" + cat unbound.log +fi diff --git a/testdata/tls_reuse.tdir/tls_reuse.pre b/testdata/tls_reuse.tdir/tls_reuse.pre new file mode 100644 index 000000000..f4ba26372 --- /dev/null +++ b/testdata/tls_reuse.tdir/tls_reuse.pre @@ -0,0 +1,34 @@ +# #-- tls_reuse.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +UPSTREAM_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tls_reuse.conf > ub.conf +# start unbound in the background +#$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +$PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +wait_unbound_up unbound.log + +# make upstream config file +sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tls_reuse.conf2 > ub2.conf +# start upstream unbound in the background +#$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & +$PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & +UPSTREAM_PID=$! +echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test +wait_unbound_up unbound2.log + +cat .tpkg.var.test + diff --git a/testdata/tls_reuse.tdir/tls_reuse.test b/testdata/tls_reuse.tdir/tls_reuse.test new file mode 100644 index 000000000..0f392fba8 --- /dev/null +++ b/testdata/tls_reuse.tdir/tls_reuse.test @@ -0,0 +1,308 @@ +# #-- tls_reuse.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) + +echo "> query www1.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.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 unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www1.example.com" outfile | grep "10.20.30.41"; then + echo "content OK" +else + echo "result contents not OK, for www1.example.com" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www1.example.com" + exit 1 +fi +echo "OK" +echo "" + +# this should be reused on the same tcp stream: +echo "> query www2.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.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 unbound2.log + cat unbound.log + echo "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, for www2.example.com" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www2.example.com" + exit 1 +fi + +echo "> query refuse.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1 +cat outfile +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "rcode: SERVFAIL" outfile; then + echo "content OK" +else + echo "result contents not OK, for refuse.net" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for refuse.net" + exit 1 +fi + +echo "> query www3.example.com." +echo "> query www4.example.com." +echo "> query www5.example.com." +echo "> query www6.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 & +wait +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "www3.example.com" outfile3 | grep "10.20.30.43"; then + echo "content OK" +else + echo "result contents not OK, for www3.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www3.example.com" + exit 1 +fi +if grep "www4.example.com" outfile4 | grep "10.20.30.44"; then + echo "content OK" +else + echo "result contents not OK, for www4.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www4.example.com" + exit 1 +fi +if grep "www5.example.com" outfile5 | grep "10.20.30.45"; then + echo "content OK" +else + echo "result contents not OK, for www5.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www5.example.com" + exit 1 +fi +if grep "www6.example.com" outfile6 | grep "10.20.30.46"; then + echo "content OK" +else + echo "result contents not OK, for www6.example.com" + echo "> cat logfiles" + cat outfile3 + cat outfile4 + cat outfile5 + cat outfile6 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for www6.example.com" + exit 1 +fi + +echo "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net" +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +for x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do + if grep "$x" outfile | grep "10.20.30.40"; then + echo "content OK for $x" + else + echo "result contents not OK, for $x" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for $x" + exit 1 + fi +done + +# make the server timeout to drop the upstream connection +echo "> sleep 15" +sleep 15 +# see if we are still up. +echo "> query a7.more.net" +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +for x in a7.more.net; do + if grep "$x" outfile | grep "10.20.30.40"; then + echo "content OK for $x" + else + echo "result contents not OK, for $x" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for $x" + exit 1 + fi +done + +# dropconn.drop.net make the server drop the connection. +echo "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net" +$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +# cannot really check outfile, because it may or may not have answers depending +# on how fast the other server responds or the drop happens, but there are +# a bunch of connection drops, whilst resolving the other queries. + +echo "> query drop.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT 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 unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +if grep "rcode: SERVFAIL" outfile; then + echo "content OK" +else + echo "result contents not OK, for drop.net" + echo "> cat logfiles" + cat outfile + cat unbound2.log + cat unbound.log + echo "result contents not OK, for drop.net" + exit 1 +fi + +# timeouts at the end. (so that the server is not marked as failed for +# the other tests). +echo "> query q1.drop.net." +echo "> query q2.drop.net." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 & +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 & +wait +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile1 + cat outfile2 + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile1 +cat outfile2 +if grep "rcode: SERVFAIL" outfile1; then + echo "content OK" +else + echo "result contents not OK, for q1.drop.net" + echo "> cat logfiles" + cat outfile1 + cat outfile2 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for q1.drop.net" + exit 1 +fi +if grep "rcode: SERVFAIL" outfile2; then + echo "content OK" +else + echo "result contents not OK, for q2.drop.net" + echo "> cat logfiles" + cat outfile1 + cat outfile2 + cat unbound2.log + cat unbound.log + echo "result contents not OK, for q2.drop.net" + exit 1 +fi + +echo "OK" +exit 0 diff --git a/testdata/tls_reuse.tdir/unbound_control.key b/testdata/tls_reuse.tdir/unbound_control.key new file mode 100644 index 000000000..753a4ef61 --- /dev/null +++ b/testdata/tls_reuse.tdir/unbound_control.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA +1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ +F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR +ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm +vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb +IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL +cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr +lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov +15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf +LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ +Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 +YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 +whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c +lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax +tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ +U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 +Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc +Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 +ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ +1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN +b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz +ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C +TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF +tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y +aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 +A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU +LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U +R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy +7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj +7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw +jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 +BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar +kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR +qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 +VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 +MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa +C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= +-----END RSA PRIVATE KEY----- diff --git a/testdata/tls_reuse.tdir/unbound_control.pem b/testdata/tls_reuse.tdir/unbound_control.pem new file mode 100644 index 000000000..a1edf7017 --- /dev/null +++ b/testdata/tls_reuse.tdir/unbound_control.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte +-----END CERTIFICATE----- diff --git a/testdata/tls_reuse.tdir/unbound_server.key b/testdata/tls_reuse.tdir/unbound_server.key new file mode 100644 index 000000000..370a7bbb2 --- /dev/null +++ b/testdata/tls_reuse.tdir/unbound_server.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== +-----END RSA PRIVATE KEY----- diff --git a/testdata/tls_reuse.tdir/unbound_server.pem b/testdata/tls_reuse.tdir/unbound_server.pem new file mode 100644 index 000000000..986807310 --- /dev/null +++ b/testdata/tls_reuse.tdir/unbound_server.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== +-----END CERTIFICATE----- diff --git a/util/config_file.c b/util/config_file.c index 97aa01896..9090e595c 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -172,6 +172,7 @@ config_create(void) cfg->infra_cache_min_rtt = 50; cfg->infra_keep_probing = 0; cfg->delay_close = 0; + cfg->udp_connect = 1; if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int)))) goto error_exit; init_outgoing_availports(cfg->outgoing_avail_ports, 65536); @@ -219,7 +220,7 @@ config_create(void) cfg->views = NULL; cfg->acls = NULL; cfg->tcp_connection_limits = NULL; - cfg->harden_short_bufsize = 0; + cfg->harden_short_bufsize = 1; cfg->harden_large_queries = 0; cfg->harden_glue = 1; cfg->harden_dnssec_stripped = 1; @@ -236,6 +237,9 @@ config_create(void) cfg->hide_trustanchor = 0; cfg->identity = NULL; cfg->version = NULL; + cfg->nsid_cfg_str = NULL; + cfg->nsid = NULL; + cfg->nsid_len = 0; cfg->auto_trust_anchor_file_list = NULL; cfg->trust_anchor_file_list = NULL; cfg->trust_anchor_list = NULL; @@ -257,6 +261,7 @@ config_create(void) cfg->serve_expired_ttl_reset = 0; cfg->serve_expired_reply_ttl = 30; cfg->serve_expired_client_timeout = 0; + cfg->serve_original_ttl = 0; cfg->zonemd_permissive_mode = 0; cfg->add_holddown = 30*24*3600; cfg->del_holddown = 30*24*3600; @@ -323,8 +328,8 @@ config_create(void) cfg->qname_minimisation_strict = 0; cfg->shm_enable = 0; cfg->shm_key = 11777; - cfg->edns_client_tags = NULL; - cfg->edns_client_tag_opcode = LDNS_EDNS_CLIENT_TAG; + cfg->edns_client_strings = NULL; + cfg->edns_client_string_opcode = 65001; cfg->dnscrypt = 0; cfg->dnscrypt_port = 0; cfg->dnscrypt_provider = NULL; @@ -335,6 +340,10 @@ config_create(void) cfg->dnscrypt_shared_secret_cache_slabs = 4; cfg->dnscrypt_nonce_cache_size = 4*1024*1024; cfg->dnscrypt_nonce_cache_slabs = 4; + cfg->pad_responses = 1; + cfg->pad_responses_block_size = 468; /* from RFC8467 */ + cfg->pad_queries = 1; + cfg->pad_queries_block_size = 128; /* from RFC8467 */ #ifdef USE_IPSECMOD cfg->ipsecmod_enabled = 1; cfg->ipsecmod_ignore_bogus = 0; @@ -388,6 +397,7 @@ struct config_file* config_create_forlib(void) cfg->val_log_level = 2; /* to fill why_bogus with */ cfg->val_log_squelch = 1; cfg->minimal_responses = 0; + cfg->harden_short_bufsize = 1; return cfg; } @@ -570,6 +580,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_POW2("infra-cache-slabs:", infra_cache_slabs) else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts) else S_NUMBER_OR_ZERO("delay-close:", delay_close) + else S_YNO("udp-connect:", udp_connect) else S_STR("chroot:", chrootdir) else S_STR("username:", username) else S_STR("directory:", directory) @@ -579,6 +590,20 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("hide-trustanchor:", hide_trustanchor) else S_STR("identity:", identity) else S_STR("version:", version) + else if(strcmp(opt, "nsid:") == 0) { + free(cfg->nsid_cfg_str); + if (!(cfg->nsid_cfg_str = strdup(val))) + return 0; + /* Empty string is just validly unsetting nsid */ + if (*val == 0) { + free(cfg->nsid); + cfg->nsid = NULL; + cfg->nsid_len = 0; + return 1; + } + cfg->nsid = cfg_parse_nsid(val, &cfg->nsid_len); + return cfg->nsid != NULL; + } else S_STRLIST("root-hints:", root_hints) else S_STR("target-fetch-policy:", target_fetch_policy) else S_YNO("harden-glue:", harden_glue) @@ -623,6 +648,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else if(strcmp(opt, "serve-expired-reply-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->serve_expired_reply_ttl = atoi(val); SERVE_EXPIRED_REPLY_TTL=(time_t)cfg->serve_expired_reply_ttl;} else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout) + else S_YNO("serve-original-ttl:", serve_original_ttl) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) else S_YNO("zonemd-permissive-mode:", zonemd_permissive_mode) else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown) @@ -719,6 +745,10 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil) else S_YNO("qname-minimisation:", qname_minimisation) else S_YNO("qname-minimisation-strict:", qname_minimisation_strict) + else S_YNO("pad-responses:", pad_responses) + else S_SIZET_NONZERO("pad-responses-block-size:", pad_responses_block_size) + else S_YNO("pad-queries:", pad_queries) + else S_SIZET_NONZERO("pad-queries-block-size:", pad_queries_block_size) #ifdef USE_IPSECMOD else S_YNO("ipsecmod-enabled:", ipsecmod_enabled) else S_YNO("ipsecmod-ignore-bogus:", ipsecmod_ignore_bogus) @@ -966,6 +996,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "infra-keep-probing", infra_keep_probing) else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts) else O_UNS(opt, "delay-close", delay_close) + else O_YNO(opt, "udp-connect", udp_connect) else O_YNO(opt, "do-ip4", do_ip4) else O_YNO(opt, "do-ip6", do_ip6) else O_YNO(opt, "do-udp", do_udp) @@ -1014,6 +1045,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "hide-trustanchor", hide_trustanchor) else O_STR(opt, "identity", identity) else O_STR(opt, "version", version) + else O_STR(opt, "nsid", nsid_cfg_str) else O_STR(opt, "target-fetch-policy", target_fetch_policy) else O_YNO(opt, "harden-short-bufsize", harden_short_bufsize) else O_YNO(opt, "harden-large-queries", harden_large_queries) @@ -1038,6 +1070,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "serve-expired-ttl-reset", serve_expired_ttl_reset) else O_DEC(opt, "serve-expired-reply-ttl", serve_expired_reply_ttl) else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout) + else O_YNO(opt, "serve-original-ttl", serve_original_ttl) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) else O_YNO(opt, "zonemd-permissive-mode", zonemd_permissive_mode) else O_UNS(opt, "add-holddown", add_holddown) @@ -1158,7 +1191,11 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LS3(opt, "access-control-tag-action", acl_tag_actions) else O_LS3(opt, "access-control-tag-data", acl_tag_datas) else O_LS2(opt, "access-control-view", acl_view) - else O_LS2(opt, "edns-client-tags", edns_client_tags) + else O_YNO(opt, "pad-responses", pad_responses) + else O_DEC(opt, "pad-responses-block-size", pad_responses_block_size) + else O_YNO(opt, "pad-queries", pad_queries) + else O_DEC(opt, "pad-queries-block-size", pad_queries_block_size) + else O_LS2(opt, "edns-client-strings", edns_client_strings) #ifdef USE_IPSECMOD else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled) else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus) @@ -1482,6 +1519,8 @@ config_delete(struct config_file* cfg) #endif free(cfg->identity); free(cfg->version); + free(cfg->nsid_cfg_str); + free(cfg->nsid); free(cfg->module_conf); free(cfg->outgoing_avail_ports); config_delstrlist(cfg->caps_whitelist); @@ -1527,7 +1566,7 @@ config_delete(struct config_file* cfg) config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); config_delstrlist(cfg->dynlib_file); - config_deldblstrlist(cfg->edns_client_tags); + config_deldblstrlist(cfg->edns_client_strings); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); @@ -2020,6 +2059,38 @@ uint8_t* config_parse_taglist(struct config_file* cfg, char* str, return taglist; } +uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len) +{ + uint8_t* nsid = NULL; + + if (strncasecmp(str, "ascii_", 6) == 0) { + if ((nsid = (uint8_t *)strdup(str + 6))) + *nsid_len = strlen(str + 6); + + } else if (strlen(str) % 2) { + ; /* hex string has even number of characters */ + } + + else if (*str && (nsid = calloc(1, strlen(str) / 2))) { + const char *ch; + uint8_t *dp; + + for ( ch = str, dp = nsid + ; isxdigit(ch[0]) && isxdigit(ch[1]) + ; ch += 2, dp++) { + *dp = (uint8_t)sldns_hexdigit_to_int(ch[0]) * 16; + *dp += (uint8_t)sldns_hexdigit_to_int(ch[1]); + } + if (*ch) { + free(nsid); + nsid = NULL; + } else + *nsid_len = strlen(str) / 2; + } + return nsid; +} + + char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, size_t taglen) { @@ -2062,6 +2133,7 @@ config_apply(struct config_file* config) SERVE_EXPIRED = config->serve_expired; SERVE_EXPIRED_TTL = (time_t)config->serve_expired_ttl; SERVE_EXPIRED_REPLY_TTL = (time_t)config->serve_expired_reply_ttl; + SERVE_ORIGINAL_TTL = config->serve_original_ttl; MAX_NEG_TTL = (time_t)config->max_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; diff --git a/util/config_file.h b/util/config_file.h index 1e71b9367..9d3297f7b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -185,6 +185,8 @@ struct config_file { int infra_keep_probing; /** delay close of udp-timeouted ports, if 0 no delayclose. in msec */ int delay_close; + /** udp_connect enable uses UDP connect to mitigate ICMP side channel */ + int udp_connect; /** the target fetch policy for the iterator */ char* target_fetch_policy; @@ -336,6 +338,10 @@ struct config_file { char* identity; /** version, package version returned if "". */ char* version; + /** nsid */ + char *nsid_cfg_str; + uint8_t *nsid; + uint16_t nsid_len; /** the module configuration string */ char* module_conf; @@ -386,6 +392,8 @@ struct config_file { /** serve expired entries only after trying to update the entries and this * timeout (in milliseconds) is reached */ int serve_expired_client_timeout; + /** serve original TTLs rather than decrementing ones */ + int serve_original_ttl; /** nsec3 maximum iterations per key size, string */ char* val_nsec3_key_iterations; /** if zonemd failures are permitted, only logged */ @@ -568,10 +576,10 @@ struct config_file { /** SHM data - key for the shm */ int shm_key; - /** list of EDNS client tag entries, linked list */ - struct config_str2list* edns_client_tags; - /** EDNS opcode to use for EDNS client tags */ - uint16_t edns_client_tag_opcode; + /** list of EDNS client string entries, linked list */ + struct config_str2list* edns_client_strings; + /** EDNS opcode to use for EDNS client strings */ + uint16_t edns_client_string_opcode; /** DNSCrypt */ /** true to enable dnscrypt */ @@ -596,6 +604,17 @@ struct config_file { size_t dnscrypt_nonce_cache_size; /** number of slabs for dnscrypt nonces cache */ size_t dnscrypt_nonce_cache_slabs; + + /** EDNS padding according to RFC7830 and RFC8467 */ + /** true to enable padding of responses (default: on) */ + int pad_responses; + /** block size with which to pad encrypted responses (default: 468) */ + size_t pad_responses_block_size; + /** true to enable padding of queries (default: on) */ + int pad_queries; + /** block size with which to pad encrypted queries (default: 128) */ + size_t pad_queries_block_size; + /** IPsec module */ #ifdef USE_IPSECMOD /** false to bypass the IPsec module */ @@ -1072,6 +1091,16 @@ int cfg_count_numbers(const char* str); */ int cfg_parse_memsize(const char* str, size_t* res); +/** + * Parse nsid from string into binary nsid. nsid is either a hexidecimal + * string or an ascii string prepended with ascii_ in which case the + * characters after ascii_ are simply copied. + * @param str: the string to parse. + * @param nsid_len: returns length of nsid in bytes. + * @return malloced bytes or NULL on parse error or malloc failure. + */ +uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len); + /** * Add a tag name to the config. It is added at the end with a new ID value. * @param cfg: the config structure. diff --git a/util/configlexer.c b/util/configlexer.c index 003978879..cbf1c103c 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 338 -#define YY_END_OF_BUFFER 339 +#define YY_NUM_RULES 345 +#define YY_END_OF_BUFFER 346 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,373 +363,380 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3315] = +static const flex_int16_t yy_accept[3388] = { 0, - 1, 1, 312, 312, 316, 316, 320, 320, 324, 324, - 1, 1, 328, 328, 332, 332, 339, 336, 1, 310, - 310, 337, 2, 337, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 312, 313, 313, 314, - 337, 316, 317, 317, 318, 337, 323, 320, 321, 321, - 322, 337, 324, 325, 325, 326, 337, 335, 311, 2, - 315, 337, 335, 331, 328, 329, 329, 330, 337, 332, - 333, 333, 334, 337, 336, 0, 1, 2, 2, 2, - 2, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 1, 1, 319, 319, 323, 323, 327, 327, 331, 331, + 1, 1, 335, 335, 339, 339, 346, 343, 1, 317, + 317, 344, 2, 344, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 319, 320, 320, 321, + 344, 323, 324, 324, 325, 344, 330, 327, 328, 328, + 329, 344, 331, 332, 332, 333, 344, 342, 318, 2, + 322, 344, 342, 338, 335, 336, 336, 337, 344, 339, + 340, 340, 341, 344, 343, 0, 1, 2, 2, 2, + 2, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 312, 0, 316, - 0, 323, 0, 320, 324, 0, 335, 0, 2, 2, - 335, 331, 0, 328, 332, 0, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 319, + 0, 323, 0, 330, 0, 327, 331, 0, 342, 0, + 2, 2, 342, 338, 0, 335, 339, 0, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 335, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 342, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 124, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 133, 336, 336, 336, 336, 336, 336, - 336, 335, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 125, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 134, + 343, 343, 343, 343, 343, 343, 343, 342, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 108, 336, 336, 336, 336, 336, 336, 8, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 125, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 109, 343, 316, 343, + 343, 343, 343, 343, 343, 343, 8, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 138, 336, 336, - 335, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 303, 336, + 343, 343, 343, 343, 343, 343, 126, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 139, 343, 343, + 342, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 309, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 335, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 64, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 239, - 336, 14, 15, 336, 19, 18, 336, 336, 223, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 131, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 342, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 64, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 241, 343, 14, 15, 343, 19, 18, 343, + 343, 225, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 221, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 3, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 335, 336, 336, 336, - 336, 336, 336, 336, 297, 336, 336, 296, 336, 336, + 343, 343, 343, 132, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 223, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 3, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 319, 336, 336, 336, 336, - 336, 336, 336, 336, 63, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 67, 336, 270, 336, 336, 336, 336, 336, 336, - 336, 336, 304, 305, 336, 336, 336, 336, 336, 68, + 343, 343, 343, 342, 343, 343, 343, 343, 343, 343, + 343, 303, 343, 343, 302, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 326, 343, 343, 343, 343, 343, 343, 343, + 343, 63, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 67, 343, - 336, 336, 132, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 128, 336, 336, - 336, 336, 336, 336, 336, 336, 210, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 21, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 157, 336, 336, 336, - 336, 335, 319, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 272, 343, 343, 343, 343, 343, 343, 343, 343, 310, + 311, 343, 343, 343, 343, 343, 343, 343, 68, 343, + 343, 133, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 129, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 212, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 21, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 158, 343, 343, - 336, 336, 336, 336, 106, 336, 336, 336, 336, 336, - 336, 336, 278, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 180, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 156, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 342, 326, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 107, 343, 343, 343, 343, + 343, 343, 343, 280, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 182, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 157, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 105, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 32, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 33, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 65, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 130, 336, 336, 335, - 336, 336, 336, 336, 336, 123, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 106, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 32, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 33, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 65, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 66, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 243, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 181, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 54, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 131, 343, 343, 342, 343, 343, 343, 343, 343, + 124, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 66, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 245, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 183, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 54, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 261, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 58, 336, 59, 336, - 336, 336, 336, 336, 109, 336, 110, 336, 336, 336, - 336, 107, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 7, 336, 336, 336, 335, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 263, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 58, 343, 59, 343, 343, 343, + 343, 343, 110, 343, 111, 343, 343, 343, 343, 108, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 232, 336, 336, 336, 336, 159, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 244, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 45, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 55, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 202, 336, 201, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 7, + 343, 343, 343, 342, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 234, 343, 343, 343, 343, 160, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 246, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 45, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 16, 17, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 69, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 209, 336, 336, 336, 336, 336, 336, - 112, 336, 111, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 193, 336, 336, 336, 336, 336, - 336, 336, 336, 139, 336, 336, 335, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 100, 336, 336, + 343, 55, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 204, 343, 203, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 16, 17, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 69, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 211, 343, 343, 343, 343, + 343, 343, 113, 343, 112, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 89, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 222, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 93, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 62, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 196, 197, 336, 336, 336, 272, 336, + 343, 343, 343, 343, 343, 343, 343, 195, 343, 343, + 343, 343, 343, 343, 343, 343, 140, 343, 343, 342, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 101, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 89, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 224, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 94, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 6, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 276, 336, 336, 336, 336, 336, 336, - 298, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 42, 336, 336, 336, 336, 44, 336, 336, 336, - 336, 336, 336, 336, 336, 52, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 335, 336, 189, 336, 336, - 336, 134, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 62, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 198, 199, 343, 343, + 343, 274, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 6, 343, 343, 343, 343, 343, + 343, 293, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 278, + 343, 343, 343, 343, 343, 343, 304, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 42, 343, - 336, 336, 214, 336, 190, 336, 336, 336, 229, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 53, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 136, 117, 336, 118, 336, 336, 336, 116, 336, 336, - 336, 336, 336, 336, 336, 336, 154, 336, 336, 50, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 260, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 191, 336, 336, 336, - 336, 336, 194, 336, 200, 336, 336, 336, 336, 336, + 343, 343, 343, 44, 343, 343, 343, 90, 343, 343, + 343, 343, 343, 52, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 342, 343, 191, 343, 343, 343, 135, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 216, 343, 192, 343, 343, 343, 231, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 53, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 137, 118, + 343, 119, 343, 343, 343, 117, 343, 343, 343, 343, + 343, 343, 343, 343, 155, 343, 343, 50, 343, 343, - 228, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 104, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 129, 336, 336, 336, 336, 336, - 336, 60, 336, 336, 336, 26, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 20, 336, 336, 336, 336, - 336, 336, 27, 36, 336, 164, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 335, 336, 336, 336, 336, 336, 336, 77, 79, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 262, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 193, 343, 343, 343, 343, 343, + 196, 343, 202, 343, 343, 343, 343, 343, 230, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 105, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 130, 343, 343, 343, 343, 343, + 343, 343, 60, 343, 343, 343, 26, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 20, 343, 343, 343, - 336, 336, 336, 280, 336, 336, 336, 336, 240, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 119, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 153, 336, 46, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 291, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 158, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 220, 336, + 343, 343, 343, 27, 36, 343, 165, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 342, 343, 343, 343, 343, 343, 343, 77, + 79, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 282, 343, 343, 343, 343, 242, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 120, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 154, 343, 46, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 301, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 175, 336, 336, 336, 336, 336, 336, 336, 336, 113, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 170, - 336, 182, 336, 336, 336, 336, 336, 336, 335, 336, - 142, 336, 336, 336, 336, 336, 99, 336, 336, 336, - 336, 212, 336, 336, 336, 336, 336, 336, 230, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 252, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 297, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 159, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 291, 343, + 343, 343, 222, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 307, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 176, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 114, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 171, 343, 184, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 135, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 174, 336, 336, 336, 336, 336, 336, 80, 336, - 81, 336, 336, 336, 336, 336, 61, 294, 336, 336, - 336, 336, 336, 88, 183, 336, 203, 336, 233, 336, - 336, 195, 273, 336, 336, 336, 336, 336, 73, 336, - 185, 336, 336, 336, 336, 336, 9, 336, 336, 336, - 103, 336, 336, 336, 336, 265, 336, 336, 336, 336, - 211, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 342, 343, 143, 343, 343, 343, 343, + 343, 100, 343, 343, 343, 343, 214, 343, 343, 343, + 343, 343, 343, 232, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 254, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 136, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 175, 343, 343, 343, + 343, 343, 343, 80, 343, 81, 343, 343, 343, 343, + 343, 61, 300, 343, 343, 343, 343, 343, 88, 185, + 343, 205, 343, 235, 343, 343, 197, 275, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 335, 336, - 336, 336, 336, 173, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 160, 336, 279, 336, 336, 336, - 336, 336, 251, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 224, 336, 336, 308, 336, 336, - 336, 271, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 73, 343, 187, 343, 343, 343, 343, + 343, 9, 343, 343, 343, 343, 343, 104, 343, 343, + 343, 343, 267, 343, 343, 343, 343, 213, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 342, 343, 343, 343, + 343, 174, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 161, 343, 281, 343, 343, 343, 343, 343, - 336, 336, 295, 336, 184, 336, 336, 336, 336, 336, - 336, 336, 72, 74, 336, 336, 336, 336, 336, 336, - 336, 102, 336, 336, 336, 336, 263, 336, 336, 336, - 336, 275, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 216, 34, 28, 30, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 35, 336, 29, 31, - 336, 336, 336, 336, 336, 336, 336, 336, 98, 336, - 336, 336, 336, 336, 336, 336, 336, 335, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 218, - 215, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 253, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 226, 343, 343, 343, 343, 343, 273, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 301, + 343, 186, 343, 343, 343, 343, 343, 343, 343, 72, + 74, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 103, 343, 343, 343, 343, 265, 343, 343, 343, 343, + 277, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 218, 34, 28, 30, 343, 343, 343, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 71, - 336, 336, 336, 137, 336, 120, 336, 336, 336, 336, - 336, 336, 336, 336, 155, 47, 336, 336, 336, 327, - 13, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 289, 336, 292, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 12, 336, 336, 22, 336, 336, - 336, 269, 336, 336, 336, 336, 277, 336, 336, 336, - 75, 336, 226, 336, 336, 336, 336, 217, 336, 336, - 70, 336, 336, 336, 336, 23, 336, 43, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 35, 343, 29, 31, + 343, 343, 343, 343, 343, 343, 343, 343, 99, 343, + 343, 343, 343, 343, 343, 343, 343, 342, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 220, + 217, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 71, + 343, 343, 343, 138, 343, 121, 343, 343, 343, 343, + 343, 343, 343, 343, 156, 47, 343, 343, 343, 334, + 13, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 295, 343, 298, 343, 343, 343, 343, 343, 343, - 169, 168, 336, 336, 327, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 219, 213, 336, 231, 336, 336, - 281, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 82, 336, 336, 336, 336, 264, 336, - 336, 336, 336, 199, 336, 336, 336, 336, 225, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 299, 300, - 166, 336, 336, 76, 336, 336, 336, 336, 176, 336, - 336, 114, 115, 336, 336, 336, 336, 161, 336, 163, + 343, 343, 343, 343, 12, 343, 343, 22, 343, 343, + 343, 343, 343, 271, 343, 343, 343, 343, 279, 343, + 343, 343, 75, 343, 228, 343, 343, 343, 343, 343, + 219, 343, 343, 70, 343, 343, 343, 343, 23, 343, + 43, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 170, 169, 343, 343, 334, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 221, 215, 343, + 233, 343, 343, 283, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 204, 336, 336, 336, 336, 167, 336, 336, 336, - 336, 234, 336, 336, 336, 336, 336, 336, 336, 144, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 242, 336, 336, 336, 336, 336, 336, 336, - 336, 24, 336, 274, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 86, 205, - 336, 336, 262, 336, 293, 336, 198, 336, 336, 336, - 336, 56, 336, 336, 336, 336, 4, 336, 336, 336, - 336, 127, 143, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 343, 343, 343, 343, 343, 343, 82, 343, 343, 343, + 343, 266, 343, 343, 343, 343, 201, 343, 343, 343, + 343, 227, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 305, 306, 167, 343, 343, 76, 343, + 343, 343, 343, 177, 343, 343, 343, 115, 116, 343, + 343, 343, 343, 162, 343, 164, 343, 206, 343, 343, + 343, 343, 168, 343, 343, 343, 343, 236, 343, 343, + 343, 343, 343, 343, 343, 145, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 244, 343, + 343, 343, 343, 343, 343, 343, 314, 343, 24, 343, - 336, 336, 336, 237, 37, 38, 336, 336, 336, 336, - 336, 336, 336, 282, 336, 336, 336, 336, 336, 336, - 336, 250, 336, 336, 336, 336, 336, 336, 336, 336, - 208, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 85, 336, 57, 268, 336, 238, 336, - 336, 336, 336, 11, 336, 336, 336, 336, 336, 336, - 126, 336, 336, 336, 336, 206, 90, 336, 40, 336, - 336, 336, 336, 336, 336, 336, 336, 172, 336, 336, - 336, 336, 336, 336, 336, 146, 336, 336, 336, 336, - 241, 336, 336, 336, 336, 336, 249, 336, 336, 336, + 276, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 86, 207, 343, 343, 264, + 343, 299, 343, 200, 343, 343, 343, 343, 56, 343, + 343, 343, 343, 343, 343, 4, 343, 343, 343, 343, + 128, 144, 343, 343, 343, 181, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 239, 37, 38, 343, 343, 343, 343, + 343, 343, 343, 284, 343, 343, 343, 343, 343, 343, + 343, 252, 343, 343, 343, 343, 343, 343, 343, 343, + 210, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 336, 140, 336, 336, 336, 121, 122, 336, 336, 336, - 92, 96, 91, 336, 336, 336, 336, 83, 336, 336, - 336, 336, 336, 10, 336, 336, 336, 266, 302, 336, - 336, 336, 336, 307, 39, 336, 336, 336, 336, 336, - 171, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 97, 95, 336, 51, - 336, 336, 84, 290, 336, 336, 336, 336, 336, 336, - 336, 192, 336, 336, 336, 336, 336, 207, 336, 336, - 336, 336, 336, 336, 336, 188, 336, 336, 162, 78, + 343, 343, 343, 85, 343, 57, 270, 343, 240, 343, + 343, 343, 343, 11, 343, 343, 343, 343, 343, 343, + 343, 343, 127, 343, 343, 343, 343, 208, 91, 343, + 40, 343, 343, 343, 343, 343, 343, 343, 343, 173, + 343, 343, 343, 343, 343, 343, 343, 147, 343, 343, + 343, 343, 243, 343, 343, 343, 343, 343, 251, 343, + 343, 343, 343, 141, 343, 343, 343, 122, 123, 343, + 343, 343, 93, 97, 92, 343, 343, 343, 343, 83, + 343, 343, 343, 343, 343, 10, 343, 343, 343, 343, + 343, 268, 308, 343, 343, 343, 343, 313, 39, 343, - 336, 336, 336, 336, 336, 283, 336, 336, 336, 336, - 336, 336, 336, 246, 336, 336, 245, 141, 309, 336, - 94, 48, 336, 147, 148, 151, 152, 149, 150, 87, - 336, 267, 336, 336, 336, 336, 165, 336, 336, 336, - 336, 187, 336, 236, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 178, 177, 41, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 101, 336, 235, 336, 259, 287, 336, 336, 336, 336, + 343, 343, 343, 343, 172, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 98, 96, 343, 51, 343, 343, 84, 296, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 194, 343, 343, + 343, 343, 343, 209, 343, 343, 343, 343, 343, 343, + 343, 190, 343, 343, 163, 78, 343, 343, 343, 343, + 343, 285, 343, 343, 343, 343, 343, 343, 343, 248, + 343, 343, 247, 142, 343, 343, 95, 48, 343, 148, + 149, 152, 153, 150, 151, 87, 294, 343, 343, 269, - 336, 336, 336, 336, 336, 336, 336, 336, 49, 5, - 336, 336, 227, 336, 336, 288, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 247, 25, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 248, - 336, 336, 336, 145, 336, 336, 336, 336, 336, 336, - 336, 336, 179, 336, 186, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 284, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 306, 336, 336, 255, 336, 336, 336, 336, - 336, 285, 336, 336, 336, 336, 336, 336, 286, 336, + 343, 343, 343, 343, 166, 343, 343, 343, 343, 189, + 343, 238, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 179, 178, 41, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 292, 343, 343, + 343, 343, 102, 343, 237, 343, 261, 289, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 315, + 343, 49, 5, 343, 343, 229, 343, 343, 290, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 249, 25, - 336, 336, 253, 336, 256, 257, 336, 336, 336, 336, - 336, 254, 258, 0 + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 250, 343, 343, 343, 146, 343, 343, 343, + 343, 343, 343, 343, 343, 180, 343, 188, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 286, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 312, 343, 343, 257, 343, + 343, 343, 343, 343, 287, 343, 343, 343, 343, 343, + 343, 288, 343, 343, 343, 255, 343, 258, 259, 343, + 343, 343, 343, 343, 256, 260, 0 } ; static const YY_CHAR yy_ec[256] = @@ -772,749 +779,765 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3333] = +static const flex_int16_t yy_base[3406] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3501, 3446, 81, 6475, - 6475, 6475, 129, 52, 130, 63, 131, 152, 70, 140, - 149, 156, 57, 88, 76, 173, 175, 95, 184, 145, - 185, 205, 194, 204, 178, 123, 3377, 6475, 6475, 6475, - 107, 3198, 6475, 6475, 6475, 154, 3006, 2683, 6475, 6475, - 6475, 226, 2556, 6475, 6475, 6475, 163, 2418, 6475, 238, - 6475, 242, 148, 2195, 2165, 6475, 6475, 6475, 246, 1973, - 6475, 6475, 6475, 250, 1850, 254, 219, 0, 258, 0, - 0, 165, 250, 191, 215, 243, 252, 256, 92, 260, + 90, 112, 96, 118, 124, 136, 4333, 3646, 81, 6613, + 6613, 6613, 129, 52, 130, 63, 131, 152, 70, 140, + 149, 156, 57, 88, 76, 173, 175, 95, 197, 145, + 185, 199, 208, 213, 178, 123, 3471, 6613, 6613, 6613, + 107, 3089, 6613, 6613, 6613, 154, 2938, 2734, 6613, 6613, + 6613, 245, 2551, 6613, 6613, 6613, 163, 2380, 6613, 249, + 6613, 253, 148, 2167, 2097, 6613, 6613, 6613, 257, 1895, + 6613, 6613, 6613, 233, 1571, 263, 201, 0, 267, 0, + 0, 165, 191, 221, 252, 205, 181, 265, 92, 261, - 261, 262, 264, 265, 266, 273, 270, 277, 278, 281, - 271, 279, 290, 288, 296, 295, 299, 310, 303, 306, - 313, 314, 307, 323, 317, 312, 328, 326, 330, 334, - 337, 340, 342, 343, 344, 346, 349, 354, 348, 356, - 364, 357, 361, 359, 372, 376, 365, 360, 377, 380, - 384, 385, 387, 388, 391, 399, 389, 1688, 411, 1273, - 415, 1153, 422, 1105, 953, 426, 889, 430, 434, 0, - 411, 689, 438, 418, 280, 442, 430, 442, 419, 438, - 439, 441, 440, 443, 444, 445, 446, 449, 463, 455, - 456, 467, 471, 472, 469, 476, 474, 460, 482, 488, + 216, 263, 271, 272, 210, 279, 274, 282, 278, 291, + 283, 286, 276, 285, 295, 293, 306, 314, 297, 313, + 317, 311, 315, 319, 321, 331, 327, 332, 336, 322, + 339, 337, 346, 345, 347, 348, 353, 351, 357, 284, + 358, 359, 369, 360, 380, 365, 381, 379, 375, 366, + 367, 389, 390, 394, 393, 395, 396, 403, 404, 1355, + 419, 1172, 422, 1110, 429, 1014, 912, 433, 781, 437, + 441, 0, 433, 705, 447, 479, 287, 452, 411, 445, + 426, 446, 447, 448, 449, 450, 451, 453, 452, 456, + 470, 234, 463, 473, 481, 479, 476, 483, 486, 487, - 484, 481, 491, 494, 495, 497, 502, 503, 505, 504, - 506, 507, 523, 510, 499, 509, 532, 530, 534, 539, - 535, 542, 544, 537, 551, 547, 554, 556, 557, 508, - 559, 546, 561, 549, 560, 563, 569, 570, 572, 573, - 575, 583, 580, 578, 584, 581, 592, 590, 597, 593, - 594, 598, 601, 604, 612, 616, 602, 623, 607, 614, - 624, 627, 635, 636, 631, 615, 632, 622, 639, 640, - 641, 642, 643, 651, 652, 644, 654, 662, 655, 657, - 660, 663, 664, 665, 673, 676, 680, 668, 684, 674, - 685, 687, 675, 683, 693, 695, 694, 697, 707, 700, + 488, 489, 491, 492, 501, 500, 502, 505, 508, 510, + 511, 460, 509, 513, 527, 515, 516, 519, 538, 529, + 540, 543, 539, 548, 555, 400, 550, 551, 558, 553, + 560, 561, 569, 562, 565, 566, 567, 570, 572, 574, + 576, 579, 578, 582, 577, 590, 591, 585, 595, 594, + 606, 601, 608, 604, 605, 362, 607, 611, 615, 623, + 612, 627, 613, 614, 629, 633, 640, 641, 636, 622, + 637, 639, 643, 644, 646, 648, 647, 656, 660, 659, + 663, 667, 657, 665, 669, 671, 673, 649, 682, 675, + 684, 688, 680, 683, 690, 692, 694, 696, 695, 699, - 708, 709, 710, 712, 717, 715, 719, 727, 705, 722, - 723, 605, 728, 731, 724, 726, 732, 735, 736, 738, - 745, 743, 747, 749, 750, 766, 754, 739, 759, 767, - 758, 760, 768, 774, 793, 779, 781, 789, 790, 791, - 795, 797, 805, 807, 796, 809, 803, 810, 812, 813, - 822, 818, 6475, 817, 820, 833, 826, 834, 835, 836, - 841, 842, 823, 849, 847, 848, 852, 874, 856, 858, - 854, 863, 866, 6475, 864, 868, 898, 870, 872, 892, - 896, 884, 887, 888, 899, 904, 921, 894, 907, 911, - 922, 919, 918, 928, 929, 930, 931, 939, 936, 932, + 697, 700, 708, 704, 713, 712, 721, 716, 722, 719, + 731, 732, 727, 717, 728, 729, 733, 736, 730, 740, + 738, 741, 745, 743, 750, 752, 760, 755, 756, 771, + 763, 766, 762, 773, 774, 769, 775, 793, 798, 799, + 786, 800, 801, 804, 803, 805, 807, 808, 809, 818, + 811, 823, 815, 824, 825, 829, 836, 834, 6613, 831, + 833, 847, 848, 849, 852, 765, 856, 858, 839, 868, + 864, 861, 870, 892, 865, 878, 869, 871, 874, 6613, + 887, 880, 916, 882, 889, 902, 904, 900, 903, 905, + 914, 907, 933, 850, 909, 924, 940, 936, 925, 937, - 859, 940, 947, 934, 945, 950, 960, 943, 949, 951, - 956, 769, 966, 971, 972, 973, 962, 964, 977, 978, - 980, 983, 984, 988, 990, 995, 1004, 1006, 1013, 1009, - 1010, 1014, 1017, 1019, 1011, 1021, 1012, 1027, 1023, 1029, - 1032, 1040, 1035, 1036, 1037, 1038, 1041, 1044, 1047, 1048, - 1049, 1050, 1052, 1056, 1054, 1063, 1065, 1057, 1071, 1061, - 6475, 1073, 1069, 1076, 1077, 1075, 1079, 6475, 1080, 1081, - 1082, 1087, 1094, 1096, 1103, 1104, 1092, 1107, 1108, 1110, - 1112, 1119, 1114, 1117, 1122, 1121, 1123, 1125, 1129, 1085, - 1126, 1130, 1132, 1133, 1136, 1138, 1156, 6475, 1139, 1143, + 939, 942, 943, 952, 948, 950, 951, 953, 961, 956, + 960, 964, 968, 962, 971, 972, 975, 977, 983, 974, + 980, 990, 973, 993, 994, 995, 997, 996, 1007, 1004, + 1000, 1001, 1015, 1014, 1028, 1017, 1026, 1027, 1030, 1029, + 1035, 1036, 1039, 1041, 1042, 1043, 1044, 1054, 1046, 1049, + 1051, 1053, 1057, 1059, 1061, 1063, 1066, 1065, 1067, 1071, + 1069, 1078, 1080, 1074, 1086, 1076, 6613, 1088, 6613, 1082, + 1091, 1092, 1090, 1097, 1093, 1094, 6613, 1096, 1100, 1104, + 1105, 1115, 1108, 1126, 1107, 1121, 1122, 1125, 1123, 1127, + 1138, 1129, 1131, 1145, 1136, 1141, 1140, 1143, 1144, 1147, - 1142, 1141, 1152, 1144, 1169, 1165, 1161, 1167, 1154, 1179, - 1171, 1185, 1177, 1181, 1189, 1191, 1192, 1194, 1195, 1196, - 1198, 1197, 1199, 1203, 1202, 1205, 1208, 6475, 1206, 1218, - 1223, 1230, 1213, 1226, 1210, 1228, 1231, 1232, 1233, 1234, - 985, 1235, 1236, 1239, 1249, 1240, 1251, 1248, 1253, 1254, - 1255, 1257, 1258, 1263, 1264, 1275, 1265, 1267, 1277, 1287, - 1284, 1286, 1294, 1296, 1271, 1289, 1297, 1293, 1291, 1299, - 1302, 1303, 1304, 1306, 1309, 1317, 1312, 1314, 1315, 1319, - 1321, 1323, 1318, 1324, 1326, 1328, 1336, 1335, 1331, 1341, - 1337, 1346, 1343, 1334, 1351, 1354, 1357, 1358, 6475, 1366, + 1151, 1153, 1154, 1155, 1156, 1175, 6613, 1157, 1165, 1167, + 1159, 1168, 1182, 1187, 1173, 1185, 1193, 1197, 1205, 1198, + 1200, 1204, 1179, 1203, 1160, 1208, 1214, 1211, 1217, 1219, + 1218, 1220, 1222, 1221, 1224, 1225, 1232, 6613, 1235, 1241, + 1246, 1253, 1236, 1239, 1249, 1251, 1252, 1255, 1256, 1257, + 1259, 517, 1258, 1263, 1275, 1264, 1277, 1272, 1228, 1274, + 1278, 1280, 1279, 1281, 1283, 1292, 1289, 1295, 1304, 1307, + 1306, 1309, 1316, 1318, 1298, 1311, 1321, 1315, 1313, 1314, + 1325, 1326, 1327, 1329, 1330, 1339, 1336, 1335, 1337, 1338, + 1343, 1341, 1345, 1346, 1347, 1349, 1360, 1357, 1358, 1365, - 1363, 1362, 1364, 1369, 1367, 1375, 1376, 1377, 1378, 1381, - 1379, 1382, 1387, 1388, 1389, 1383, 1391, 1393, 1404, 1401, - 1403, 1412, 1411, 1413, 1415, 1416, 1423, 1419, 1426, 1422, - 1396, 1427, 1435, 1428, 1431, 1437, 1445, 1436, 1438, 1443, - 1440, 1449, 1446, 1451, 1458, 1459, 1461, 1468, 1463, 1465, - 1470, 1473, 1474, 1475, 1477, 1478, 1479, 1480, 1487, 1482, - 1485, 1484, 1488, 1483, 1489, 1497, 1491, 1510, 1502, 1505, - 1507, 1511, 1514, 1513, 1512, 1515, 1519, 1520, 1522, 1521, - 1523, 1525, 1532, 1534, 1536, 1541, 1540, 1542, 1544, 1547, - 1543, 1552, 1553, 1555, 1549, 1562, 1563, 1564, 1565, 1568, + 1361, 1370, 1364, 1359, 1378, 1380, 1367, 1374, 6613, 1390, + 1287, 1388, 1392, 1393, 1394, 1395, 1386, 1387, 1399, 1401, + 1403, 1404, 1410, 1407, 1411, 1412, 1413, 1415, 1423, 1419, + 1426, 1434, 1433, 1435, 1420, 1437, 1439, 1441, 1448, 1445, + 1449, 1452, 1421, 1453, 1462, 1454, 1457, 1459, 1469, 1447, + 1465, 1468, 1471, 1475, 1477, 1480, 1487, 1482, 1485, 1502, + 1488, 1472, 1493, 1486, 1504, 1492, 1499, 1503, 1507, 1508, + 1515, 1512, 1511, 1514, 1518, 1513, 1519, 1522, 1524, 1536, + 1523, 1532, 1527, 1535, 1541, 1525, 1540, 1542, 1547, 1548, + 1550, 1549, 1551, 1553, 1558, 1559, 1562, 1561, 1564, 1568, - 1576, 1566, 1579, 1573, 1575, 1581, 1583, 1585, 1584, 1587, - 1591, 1594, 1596, 1588, 6475, 1595, 1608, 1603, 1606, 1604, - 1607, 1609, 1617, 1612, 1615, 1613, 1618, 1619, 1644, 6475, - 1621, 6475, 6475, 315, 6475, 6475, 1624, 1628, 6475, 1629, - 1638, 1625, 1626, 1650, 1654, 1637, 1640, 1645, 1642, 1667, - 1668, 1652, 1660, 1665, 1673, 1671, 1674, 1679, 1682, 1676, - 1685, 1689, 1699, 1690, 1702, 1696, 1700, 1706, 1704, 1712, - 1708, 1717, 1718, 1714, 1719, 1721, 1722, 1724, 1723, 1727, - 1729, 1732, 1733, 1730, 1735, 1736, 1745, 1749, 1741, 1756, - 6475, 1752, 1759, 1766, 1762, 1769, 1761, 1765, 1768, 1773, + 1570, 1574, 1576, 1577, 1579, 1580, 1588, 1581, 1590, 1591, + 1592, 1594, 1595, 1602, 1604, 1598, 1608, 1605, 1611, 1610, + 1613, 1614, 1616, 1617, 1622, 1623, 1624, 6613, 1629, 1636, + 1631, 1634, 1632, 1637, 1639, 1646, 1641, 1643, 1642, 1645, + 1647, 1671, 6613, 1653, 6613, 6613, 1652, 6613, 6613, 1654, + 1655, 6613, 1658, 1656, 1659, 1674, 1681, 1684, 1666, 1679, + 1672, 1687, 1694, 1708, 1695, 1692, 1696, 1698, 1699, 1701, + 1706, 1703, 1689, 1716, 1725, 1730, 1731, 1717, 1719, 1732, + 1735, 1739, 1740, 1742, 1746, 1748, 1749, 1733, 1751, 1753, + 1756, 1754, 1757, 1759, 1763, 1764, 1760, 1767, 1766, 1776, - 1775, 1770, 1777, 1779, 1780, 1781, 1783, 1785, 1788, 1790, - 1792, 1791, 6475, 1793, 1797, 1798, 1799, 1803, 1805, 1809, - 1737, 1801, 1807, 1811, 1819, 1820, 1815, 1817, 1823, 1825, - 1828, 6475, 1827, 1834, 1835, 1837, 1838, 1840, 1841, 1843, - 1844, 1845, 1846, 1847, 1848, 1852, 1863, 1853, 1855, 1858, - 1868, 1870, 1872, 1873, 1875, 1879, 1880, 1881, 1883, 1884, - 1885, 1887, 1888, 1896, 1898, 1895, 1900, 1893, 1903, 1911, - 1910, 1902, 1912, 1915, 1916, 1917, 1925, 1923, 1922, 1928, - 1933, 1929, 1931, 1934, 1938, 1935, 1945, 1942, 1946, 1947, - 1936, 1954, 1955, 1956, 6475, 1959, 1962, 6475, 1964, 1961, + 1780, 1769, 1787, 6613, 1784, 1796, 1797, 1793, 1800, 1792, + 1799, 1801, 1772, 1783, 1802, 1803, 1806, 1807, 1804, 1808, + 1812, 1816, 1817, 1819, 1829, 1836, 1813, 6613, 1825, 1833, + 1820, 1818, 1837, 1835, 1840, 1839, 1841, 1843, 1847, 1855, + 1850, 1848, 1856, 1858, 1857, 1859, 1861, 6613, 1868, 1874, + 1862, 1871, 1865, 1869, 1878, 1879, 1880, 1882, 1884, 1888, + 1885, 1887, 1896, 1893, 1897, 1894, 1904, 1899, 1908, 1910, + 1912, 1914, 1916, 1917, 1919, 1920, 1921, 1923, 1924, 1932, + 1935, 1931, 1936, 1933, 1928, 1952, 1955, 1950, 1938, 1939, + 1953, 1941, 1960, 1969, 1964, 1956, 1965, 1972, 1968, 1971, - 1963, 1985, 1965, 1967, 1972, 1969, 1970, 1978, 1989, 1979, - 1986, 1997, 2008, 2000, 1998, 1999, 2005, 2013, 1980, 2014, - 2010, 2016, 2017, 2021, 2023, 2022, 2032, 2039, 2035, 2041, - 2044, 2025, 2040, 2042, 2061, 2043, 2045, 2049, 2046, 2051, - 2048, 2056, 2054, 2057, 2065, 2066, 2077, 2073, 2074, 2070, - 2079, 2072, 2092, 2085, 2083, 6475, 2099, 2094, 2096, 2100, - 2098, 2107, 2104, 2102, 6475, 2108, 2110, 2106, 2118, 2114, - 2113, 2120, 2116, 2124, 2126, 2127, 2128, 2131, 2129, 2130, - 2148, 6475, 2133, 6475, 2141, 2134, 2143, 2144, 2145, 2150, - 2151, 2152, 6475, 6475, 2159, 2160, 2166, 2174, 2170, 6475, + 1973, 1975, 1976, 1983, 1981, 1985, 1986, 1979, 1984, 1990, + 1993, 6613, 1997, 1999, 6613, 1998, 2000, 2002, 2024, 2005, + 2003, 2010, 2009, 2014, 2015, 2016, 2018, 2017, 2028, 2044, + 2037, 2034, 2047, 2026, 2049, 2050, 2052, 2053, 2055, 2056, + 2059, 2030, 2060, 2072, 2075, 2074, 2082, 2084, 2058, 2071, + 2061, 2091, 2081, 2083, 2086, 2089, 2094, 2098, 2096, 2102, + 2087, 2107, 2108, 2115, 2113, 2119, 2112, 2120, 2114, 2122, + 2123, 2125, 6613, 2134, 2135, 2129, 2137, 2133, 2147, 2139, + 2140, 6613, 2143, 2149, 2150, 2157, 2153, 2154, 2155, 2156, + 2161, 2163, 2165, 2169, 2170, 2168, 2164, 2186, 6613, 2171, - 2161, 2179, 6475, 2171, 2181, 2176, 2180, 2182, 2185, 2186, - 2187, 2194, 2189, 2197, 2192, 2196, 2204, 6475, 2205, 2193, - 2206, 2210, 2212, 2216, 2217, 2213, 6475, 2220, 2219, 2223, - 2230, 2232, 2227, 2233, 2234, 2238, 2240, 2241, 2242, 2243, - 2244, 2253, 2254, 2245, 2256, 2259, 2255, 6475, 2252, 2263, - 2271, 2267, 2269, 2266, 2273, 2274, 2276, 2277, 2278, 2279, - 2284, 2285, 2286, 2293, 2294, 2289, 2291, 2299, 2300, 2301, - 2306, 2307, 2308, 2311, 2309, 2310, 6475, 2312, 2314, 2316, - 2317, 2323, 221, 2324, 2325, 2327, 2329, 2332, 2337, 2330, - 2348, 2351, 2333, 2347, 2344, 2353, 2354, 2355, 2356, 2357, + 6613, 2182, 2172, 2184, 2185, 2188, 2189, 2190, 2193, 6613, + 6613, 2197, 2191, 2207, 2211, 2201, 2194, 2212, 6613, 2213, + 2220, 6613, 2217, 2223, 2216, 2215, 2222, 2224, 2227, 2228, + 2237, 2232, 2239, 2234, 2236, 2244, 6613, 2245, 2246, 2250, + 2251, 2247, 2253, 2254, 2260, 2257, 6613, 2264, 2261, 2266, + 2274, 2276, 2271, 2273, 2278, 2282, 2279, 2284, 2285, 2286, + 2287, 2294, 2296, 2293, 2299, 2301, 2308, 6613, 2292, 2295, + 2313, 2309, 2312, 2316, 2317, 2318, 2319, 2320, 2321, 2322, + 2327, 2328, 2329, 2330, 2337, 2340, 2335, 2339, 2343, 2345, + 2347, 2348, 2355, 2352, 2353, 2354, 2356, 6613, 2357, 2359, - 2359, 2360, 2362, 2363, 6475, 2365, 2366, 2370, 2371, 2373, - 2374, 2376, 6475, 2383, 2384, 2391, 2398, 2393, 2375, 2399, - 2401, 2403, 2404, 2405, 2406, 2407, 2409, 2408, 2412, 2411, - 6475, 2416, 2424, 2426, 2417, 2427, 2434, 2433, 2428, 2435, - 2436, 2439, 2441, 2440, 2445, 2444, 2446, 2448, 2452, 2449, - 2453, 2454, 2459, 2460, 2461, 2465, 2462, 2469, 2470, 2471, - 6475, 2478, 2482, 2476, 2479, 2483, 2484, 2488, 2486, 2502, - 2489, 2492, 2499, 2504, 2513, 2507, 2510, 2515, 2516, 2523, - 2524, 2531, 2529, 2530, 2537, 2527, 2539, 2541, 2542, 2543, - 2545, 2547, 2550, 2549, 2551, 2558, 2559, 2560, 2564, 2557, + 2363, 2366, 2365, 171, 2369, 2367, 2372, 2374, 2377, 2388, + 2375, 2396, 2397, 2378, 2393, 2399, 2400, 2389, 2392, 2402, + 2404, 2408, 2409, 2410, 2411, 6613, 2413, 2414, 2415, 2417, + 2418, 2420, 2429, 6613, 2422, 2435, 2437, 2439, 2444, 2441, + 2446, 2431, 2447, 2452, 2453, 2454, 2456, 2457, 2460, 2459, + 2463, 6613, 2467, 2464, 2471, 2472, 2475, 2477, 2478, 2479, + 2483, 2484, 2485, 2486, 2488, 2490, 2489, 2491, 2493, 2499, + 2500, 2496, 2504, 2509, 2506, 2507, 2510, 2513, 2514, 2519, + 2517, 6613, 2529, 2520, 2527, 2525, 2528, 2530, 2531, 2538, + 2553, 2540, 2542, 2544, 2554, 2560, 2545, 2562, 2549, 2563, - 2578, 2583, 2574, 6475, 2572, 2582, 2570, 2584, 2592, 2587, - 2589, 2590, 2594, 2598, 2599, 2600, 2601, 2609, 2604, 2602, - 2606, 2612, 2613, 2614, 2616, 2621, 2624, 2626, 2622, 2631, - 2633, 6475, 2636, 2638, 2628, 2632, 2645, 2640, 2649, 2650, - 2652, 2642, 2653, 2655, 2656, 2658, 2659, 2662, 2664, 2666, - 2665, 6475, 2669, 2670, 2675, 2677, 2681, 2682, 2684, 2687, - 2693, 2695, 2678, 2697, 2698, 2688, 6475, 2708, 2710, 2706, - 2713, 2709, 2712, 2714, 2716, 2699, 6475, 2717, 171, 2721, - 2720, 2722, 2729, 2730, 2726, 6475, 2733, 2728, 2734, 2737, - 2738, 2739, 2741, 2743, 2746, 2747, 2749, 2751, 2761, 2752, + 2567, 2566, 2576, 2577, 2580, 2586, 2574, 2588, 2591, 2578, + 2581, 2584, 2590, 2592, 2600, 2601, 2608, 2609, 2606, 2612, + 2604, 2621, 2615, 2627, 2633, 2623, 6613, 2632, 2625, 2617, + 2637, 2644, 2639, 2641, 2642, 2645, 2649, 2650, 2651, 2652, + 2660, 2655, 2653, 2657, 2662, 2664, 2665, 2668, 2672, 2673, + 2676, 2680, 2677, 2683, 2421, 6613, 2684, 2686, 2685, 2688, + 2694, 2689, 2696, 2699, 2701, 2702, 2703, 2708, 2705, 2710, + 2711, 2712, 2718, 2605, 2714, 6613, 2716, 2715, 2721, 2720, + 2728, 2729, 2735, 2736, 2738, 2741, 2744, 2745, 2746, 2747, + 2748, 6613, 2756, 2757, 2753, 2765, 2755, 2760, 2762, 2767, - 2758, 6475, 2755, 2770, 2762, 2768, 2765, 2771, 2776, 2778, - 2779, 2781, 2786, 2783, 6475, 2795, 2794, 2792, 2805, 2782, - 2800, 2802, 2806, 2807, 2809, 2808, 2810, 2813, 6475, 2816, - 2814, 2817, 2818, 2821, 2822, 2823, 2837, 2824, 2829, 2838, - 2834, 2839, 2841, 2845, 2844, 2853, 2843, 2846, 2856, 2847, - 2859, 2863, 2864, 2872, 2873, 2870, 2875, 2871, 2495, 2869, - 2876, 2885, 2886, 2888, 2891, 2893, 6475, 2896, 2897, 2878, - 2889, 2898, 2899, 2900, 2902, 2903, 2905, 2906, 2911, 2908, - 2912, 2924, 2927, 2917, 2919, 2928, 2929, 2930, 2933, 2932, - 2934, 2935, 2942, 2940, 2941, 2949, 2944, 2946, 2956, 2955, + 2768, 6613, 2769, 832, 2770, 2771, 2772, 2780, 2781, 2776, + 6613, 2783, 2778, 2784, 2786, 2789, 2793, 2790, 2796, 2794, + 2799, 2800, 2805, 2803, 2809, 2811, 6613, 2812, 2821, 2817, + 2813, 2819, 2823, 2825, 2826, 2828, 2829, 2843, 2834, 6613, + 2852, 2847, 2839, 2855, 2842, 2830, 2853, 2857, 2858, 2859, + 2860, 2864, 2865, 6613, 2867, 2866, 2868, 2872, 2870, 2875, + 2876, 2888, 2878, 2879, 2883, 2887, 2889, 2891, 2894, 2896, + 2900, 2901, 2906, 2907, 2909, 2911, 2892, 2913, 2922, 2923, + 2918, 2926, 2921, 2928, 2929, 2930, 2937, 2939, 2940, 2941, + 2945, 6613, 2948, 2949, 2943, 2936, 2951, 2955, 2956, 2957, - 2957, 2958, 2959, 2961, 2960, 2964, 2965, 2968, 2970, 2973, - 2984, 2980, 2986, 2987, 2988, 2989, 2992, 6475, 2991, 2996, - 2993, 2995, 3003, 3005, 3007, 3016, 2999, 3013, 3017, 3020, - 3021, 3018, 3023, 3027, 3034, 3030, 6475, 3031, 6475, 3032, - 3035, 3036, 3039, 3042, 6475, 3044, 6475, 3045, 3051, 3052, - 3054, 6475, 3055, 3046, 3056, 3059, 3057, 3061, 3064, 3069, - 3063, 3075, 3071, 3067, 3073, 3078, 3086, 3079, 3081, 3084, - 3090, 3092, 3094, 3095, 3096, 3100, 3101, 3102, 3104, 3108, - 6475, 3110, 3107, 3111, 3114, 3117, 3118, 3119, 3126, 3121, - 3124, 3128, 3127, 3129, 3137, 3134, 3145, 3131, 3142, 3148, + 2958, 2960, 2962, 2961, 2965, 2967, 2974, 2978, 2975, 2981, + 2983, 2984, 2976, 2987, 2988, 2989, 2990, 2997, 2993, 2994, + 3005, 2996, 3000, 3010, 3011, 3012, 3013, 3014, 3021, 3001, + 3019, 3016, 3023, 3018, 3024, 3027, 3029, 3041, 3042, 3044, + 3025, 3036, 3046, 3049, 6613, 3052, 3053, 3050, 3054, 3056, + 3061, 3057, 3069, 3064, 3067, 3066, 3073, 3078, 3075, 3076, + 3081, 3083, 3091, 3087, 6613, 3084, 6613, 3088, 3092, 3098, + 3106, 3093, 6613, 3105, 6613, 3107, 3112, 3101, 3108, 6613, + 3115, 3096, 3114, 3119, 3121, 3122, 3125, 3126, 3127, 3128, + 3130, 3132, 3133, 3134, 3135, 3137, 3140, 3142, 3146, 3147, - 3158, 3141, 3160, 6475, 3155, 3157, 3159, 3162, 6475, 3165, - 3163, 3166, 3171, 3174, 3164, 3175, 3173, 3179, 3177, 3181, - 3183, 3186, 3191, 3194, 3197, 6475, 3196, 3201, 3184, 3207, - 3212, 3208, 3219, 3215, 3217, 3221, 3229, 3225, 3214, 3224, - 3226, 3228, 3231, 3238, 3239, 3235, 3243, 3236, 3241, 3250, - 3247, 3244, 3251, 3253, 3254, 3255, 3256, 3257, 3258, 3260, - 3261, 3265, 6475, 3266, 3267, 3272, 3280, 3276, 3277, 3281, - 3286, 3282, 6475, 3288, 3289, 3290, 3292, 3297, 3291, 3294, - 3299, 3302, 3305, 3307, 2962, 3312, 3310, 6475, 3313, 6475, - 3311, 3315, 3317, 3330, 3319, 3325, 3332, 3338, 3327, 3334, + 3153, 3145, 3156, 3157, 3161, 3163, 3164, 3165, 3166, 6613, + 3170, 3167, 3172, 3173, 3175, 3178, 3179, 3181, 3182, 3185, + 3191, 3188, 3190, 3201, 3194, 3197, 3204, 3209, 3212, 3219, + 3205, 3220, 6613, 3215, 3222, 3187, 3226, 6613, 3218, 3216, + 3227, 3230, 3233, 3234, 3235, 3236, 3237, 3241, 3242, 3243, + 3255, 3251, 3244, 3253, 6613, 3248, 3260, 3246, 3264, 3269, + 3276, 3280, 3277, 3278, 3283, 3281, 3285, 3286, 3287, 3288, + 3289, 3291, 3298, 3301, 3297, 3306, 3293, 3303, 3311, 3312, + 3296, 3304, 3313, 3315, 3318, 3320, 3319, 3321, 3262, 3323, + 3322, 6613, 3326, 3327, 3330, 3342, 3328, 3331, 3335, 3340, - 3339, 3341, 3342, 3347, 3345, 3348, 3350, 3349, 3357, 3356, - 3352, 3360, 3364, 3365, 3368, 3366, 6475, 6475, 3369, 3370, - 3374, 3371, 3376, 3381, 3389, 3383, 3391, 3380, 3393, 3397, - 3406, 6475, 3399, 3401, 3402, 3403, 3417, 3407, 3410, 3418, - 3421, 3428, 3423, 6475, 3419, 3420, 3433, 3430, 3432, 3437, - 6475, 3436, 6475, 3438, 3440, 3442, 3445, 3447, 3448, 3449, - 3451, 3453, 3462, 3464, 3455, 3467, 3469, 3470, 3471, 3472, - 3479, 3475, 3476, 3477, 6475, 3481, 3478, 3482, 3491, 3494, - 3500, 3484, 3483, 6475, 3501, 3504, 3502, 3503, 3509, 3511, - 3512, 3513, 3516, 3517, 3519, 3521, 3522, 6475, 3520, 3523, + 3344, 6613, 3350, 3351, 3352, 3356, 3358, 3345, 3353, 3361, + 3362, 3363, 3364, 3366, 3369, 3370, 6613, 3374, 6613, 3375, + 3384, 3377, 3383, 3390, 3388, 3392, 3397, 3391, 3393, 3398, + 3405, 3399, 3401, 3407, 3408, 3411, 3413, 3415, 3425, 3414, + 3419, 3421, 3426, 3428, 3436, 3433, 3429, 6613, 6613, 3431, + 3437, 3442, 3445, 3448, 3446, 3449, 3453, 3447, 3454, 3458, + 3459, 3469, 6613, 3460, 3466, 3467, 3470, 3482, 3473, 3484, + 3486, 3485, 3478, 3493, 3488, 6613, 3495, 3496, 3503, 3498, + 3499, 3506, 6613, 3501, 6613, 3504, 3505, 3512, 3507, 3513, + 3514, 3517, 3518, 3522, 3525, 3534, 3529, 3536, 3530, 3533, - 3535, 3525, 3527, 3536, 3541, 3544, 3549, 6475, 3546, 3550, - 3558, 3554, 3555, 3560, 3561, 3556, 3557, 3563, 3565, 3566, - 3568, 3569, 3570, 3572, 3575, 3577, 3574, 3584, 3585, 3588, - 3592, 3601, 3593, 6475, 3597, 3598, 3604, 3602, 3605, 3609, - 3610, 3613, 3627, 3608, 3630, 3631, 3600, 3615, 3634, 3635, - 3643, 3638, 6475, 3646, 3606, 3648, 3619, 3647, 3652, 3645, - 3649, 3656, 3653, 3657, 3658, 3659, 3661, 3670, 3662, 3667, - 3671, 3672, 3679, 3677, 6475, 3686, 3669, 3684, 3688, 3682, - 3691, 3700, 3695, 3696, 3698, 3702, 3703, 3707, 3705, 3709, - 3710, 3713, 3714, 6475, 6475, 3718, 3715, 3721, 6475, 3723, + 3537, 3539, 3540, 3547, 3544, 3545, 3546, 6613, 3549, 3552, + 3554, 3555, 3557, 3563, 3565, 3559, 6613, 3567, 3570, 3569, + 3571, 3578, 3575, 3579, 3580, 3584, 3587, 3585, 3588, 3590, + 6613, 3589, 3593, 3603, 3595, 3596, 3598, 3606, 3609, 3611, + 6613, 3615, 3616, 3623, 3619, 3621, 3622, 3626, 3627, 3628, + 3630, 3631, 3632, 3634, 3635, 3640, 3636, 3638, 3645, 3641, + 3653, 3655, 3642, 3663, 3670, 3656, 6613, 3659, 3666, 3668, + 3669, 3671, 3672, 3674, 3680, 3682, 3676, 3691, 3692, 3683, + 3687, 3695, 3697, 3705, 3700, 6613, 3712, 3698, 3713, 3702, + 3711, 3710, 3715, 3717, 3719, 3721, 3720, 3723, 3724, 3726, - 3720, 3728, 3727, 3724, 3733, 3735, 3737, 3736, 3738, 3743, - 3744, 6475, 3747, 3755, 3750, 3751, 3759, 3763, 3765, 3756, - 3766, 3754, 3767, 3768, 3773, 3771, 3772, 3777, 3785, 3787, - 3782, 3784, 3788, 6475, 3783, 3790, 3791, 3794, 3795, 3800, - 6475, 3797, 3801, 3804, 3809, 3807, 3813, 3811, 3820, 3821, - 3823, 3824, 3825, 3826, 3828, 3835, 3832, 3831, 3834, 3838, - 3840, 6475, 3841, 3845, 3849, 3852, 6475, 3854, 3863, 3864, - 3865, 3855, 3866, 3860, 3873, 6475, 3868, 3870, 3875, 3876, - 3883, 3878, 3885, 3884, 3882, 3886, 3892, 6475, 3893, 3888, - 3889, 6475, 3895, 3896, 3909, 3911, 3899, 3912, 3914, 3913, + 3738, 3730, 3733, 3729, 3734, 3745, 3737, 6613, 3752, 3748, + 3740, 3756, 3750, 3759, 3766, 3763, 3764, 3765, 3768, 3769, + 3770, 3773, 3775, 3776, 3779, 3780, 6613, 6613, 3782, 3783, + 3785, 6613, 3787, 3788, 3798, 3790, 3791, 3799, 3803, 3802, + 3801, 3804, 3806, 3807, 6613, 3813, 3821, 3816, 3817, 3825, + 3820, 6613, 3826, 3834, 3830, 3833, 3831, 3835, 3837, 3839, + 3841, 3842, 3843, 3846, 3854, 3858, 3850, 3849, 3853, 6613, + 3859, 3861, 3862, 3866, 3863, 3871, 6613, 3868, 3872, 3874, + 3878, 3880, 3891, 3877, 3885, 3893, 3888, 3894, 3895, 3897, + 3898, 3899, 3906, 3905, 3907, 3904, 3910, 3913, 6613, 3915, - 3915, 3916, 6475, 3917, 6475, 3923, 3924, 3927, 6475, 3929, - 3930, 3932, 3934, 3931, 3938, 3939, 3945, 3947, 3935, 3949, - 3950, 3951, 3952, 3954, 3963, 3953, 3960, 3961, 3962, 6475, - 3965, 3964, 3972, 3973, 3983, 3978, 3980, 3967, 3985, 3986, - 6475, 6475, 3994, 6475, 3995, 3975, 3989, 6475, 3996, 4000, - 4003, 4001, 4006, 4002, 4009, 4012, 6475, 4016, 4021, 6475, - 4010, 4013, 4023, 4024, 4025, 4026, 4027, 4029, 4030, 4032, - 4036, 4034, 4040, 4035, 4039, 4037, 6475, 4042, 4041, 4045, - 4059, 4050, 4053, 4060, 4065, 4055, 6475, 4066, 4067, 4072, - 4074, 4076, 6475, 4077, 6475, 4078, 4080, 4081, 4082, 4085, + 3916, 3921, 3923, 6613, 3926, 3934, 3935, 6613, 3936, 3931, + 3937, 3938, 3945, 6613, 3940, 3943, 3944, 3946, 3954, 3951, + 3955, 3953, 3958, 3959, 3962, 6613, 3963, 3960, 3961, 6613, + 3965, 3969, 3977, 3981, 3967, 3988, 3983, 3985, 3986, 3984, + 6613, 3991, 6613, 3994, 3995, 3998, 6613, 4000, 4001, 4003, + 4005, 4002, 4009, 4010, 4016, 4018, 4006, 4020, 4021, 4022, + 4023, 4025, 4034, 4024, 4031, 4032, 4033, 6613, 4036, 4035, + 4043, 4038, 4044, 4046, 4049, 4051, 4054, 4056, 6613, 6613, + 4063, 6613, 4057, 4064, 4065, 6613, 4067, 4070, 4074, 4066, + 4075, 4071, 4078, 4079, 6613, 4086, 4088, 6613, 4090, 4091, - 6475, 4092, 4087, 4098, 4088, 4095, 4103, 4102, 4106, 4091, - 4099, 4116, 4108, 4112, 4115, 6475, 4117, 4118, 4121, 4126, - 4122, 4124, 4134, 4130, 4129, 4133, 4138, 4140, 4141, 4142, - 4147, 4149, 4145, 4152, 6475, 4155, 4157, 4156, 4166, 4162, - 4161, 6475, 4163, 4169, 4176, 6475, 4172, 4168, 4178, 4180, - 4182, 4183, 4186, 4184, 4189, 6475, 4191, 4193, 4190, 4192, - 4194, 4206, 6475, 6475, 4207, 6475, 4208, 4195, 4196, 4209, - 4212, 4216, 4220, 4221, 4223, 4217, 4224, 4229, 4231, 4232, - 4239, 4235, 4246, 4247, 4248, 4249, 4250, 4243, 6475, 6475, - 4254, 4255, 4259, 4261, 4264, 4262, 4266, 4273, 4271, 4277, + 4098, 4093, 4094, 4095, 4101, 4096, 4099, 4106, 4107, 4108, + 4109, 4103, 4110, 4111, 6613, 4104, 4112, 4114, 4128, 4122, + 4131, 4133, 4132, 4134, 6613, 4138, 4139, 4142, 4144, 4145, + 6613, 4146, 6613, 4147, 4148, 4150, 4156, 4153, 6613, 4159, + 4163, 4167, 4164, 4168, 4169, 4170, 4174, 4176, 4178, 4186, + 4182, 4183, 4181, 4201, 4184, 6613, 4185, 4188, 4206, 4207, + 4197, 4189, 4216, 4213, 4215, 4203, 4211, 4223, 4214, 4224, + 4228, 4230, 4231, 4220, 6613, 4232, 4233, 4234, 4243, 4240, + 4245, 4246, 6613, 4247, 4248, 4251, 6613, 4249, 4250, 4257, + 4261, 4263, 4264, 4267, 4265, 4269, 6613, 4268, 4273, 4271, - 4280, 4282, 4275, 6475, 4285, 4272, 4286, 4283, 6475, 4288, - 4291, 4293, 4294, 4295, 4297, 4298, 4299, 4301, 4302, 4305, - 4307, 4308, 4312, 4310, 4318, 4320, 4321, 4322, 4326, 4328, - 4330, 6475, 4333, 4331, 4334, 4335, 4337, 4338, 4342, 4343, - 4344, 6475, 4345, 6475, 4349, 4352, 4348, 4367, 4371, 4351, - 4372, 4364, 4359, 4368, 4378, 4383, 4374, 4385, 4380, 4386, - 4387, 4389, 4391, 4393, 4397, 6475, 4400, 4394, 4396, 4403, - 4407, 4409, 4404, 4411, 4412, 4418, 4413, 4419, 4421, 4426, - 4422, 4429, 4427, 4431, 6475, 4432, 4434, 4435, 4440, 4442, - 4443, 4444, 4445, 4452, 4448, 4453, 4455, 4457, 6475, 4458, + 4272, 4287, 4286, 6613, 6613, 4288, 6613, 4290, 4274, 4278, + 4298, 4275, 4299, 4302, 4303, 4305, 4306, 4309, 4310, 4276, + 4311, 4320, 4317, 4324, 4327, 4328, 4326, 4191, 4331, 6613, + 6613, 4333, 4334, 4336, 4338, 4340, 4342, 4343, 4350, 4347, + 4355, 4358, 4348, 4365, 6613, 4362, 4363, 4364, 4367, 6613, + 4346, 4369, 4370, 4373, 4372, 4376, 4375, 4378, 4379, 4380, + 4382, 4385, 4386, 4390, 4392, 4396, 4397, 4400, 4399, 4403, + 4405, 4407, 6613, 4412, 4408, 4410, 4411, 4413, 4417, 4421, + 4426, 4422, 6613, 4415, 6613, 4428, 4425, 4440, 4431, 4445, + 4447, 4432, 4448, 4449, 4451, 4453, 4456, 4457, 4466, 4458, - 4459, 4462, 4465, 4464, 4466, 4470, 4471, 4472, 6475, 4480, - 4473, 4476, 4481, 4484, 4488, 4489, 4490, 4492, 4494, 4500, - 6475, 4497, 4499, 4505, 4498, 4508, 4507, 4511, 4512, 6475, - 4514, 4517, 4524, 4531, 4513, 4532, 4530, 4536, 4527, 4529, - 4537, 4544, 4545, 4546, 4547, 4543, 4564, 4565, 4562, 6475, - 4548, 6475, 4551, 4549, 4567, 4569, 4563, 4573, 4571, 4575, - 6475, 4577, 4580, 4582, 4579, 4583, 6475, 4586, 4584, 4587, - 4589, 6475, 4585, 4599, 4590, 4591, 4606, 4607, 6475, 4612, - 4613, 4609, 4621, 4623, 4618, 4620, 4622, 4624, 4626, 4628, - 4629, 4630, 4639, 4632, 4635, 6475, 4637, 4644, 4650, 4651, + 4462, 4467, 4460, 4471, 4477, 4474, 6613, 4478, 4480, 4481, + 4482, 4485, 4487, 4488, 4490, 4491, 4493, 4495, 4497, 4499, + 4504, 4505, 4506, 4508, 4511, 6613, 4512, 4514, 4516, 4521, + 4518, 4523, 4524, 4525, 4532, 4528, 4533, 4537, 6613, 4534, + 4538, 4543, 6613, 4540, 4544, 4546, 4550, 4552, 4545, 4553, + 4555, 4556, 6613, 4563, 4559, 4565, 4566, 4568, 4569, 4424, + 4573, 4575, 4576, 4582, 6613, 4583, 4581, 4589, 4590, 4588, + 4591, 4596, 4592, 4598, 6613, 4601, 4603, 4599, 4611, 4607, + 4615, 4616, 4618, 4610, 4612, 4619, 4620, 4627, 4630, 4631, + 4632, 4643, 4644, 4641, 6613, 4633, 6613, 4642, 4647, 4655, - 4658, 4634, 4645, 4655, 4654, 4660, 6475, 4661, 4662, 4663, - 4664, 4667, 4668, 4669, 4676, 4675, 4672, 4677, 4679, 4680, - 4684, 6475, 4687, 4686, 4689, 4697, 4692, 4693, 6475, 4701, - 6475, 4703, 4706, 4708, 4704, 4712, 6475, 6475, 4714, 4715, - 4716, 4720, 4722, 6475, 6475, 4724, 6475, 4721, 6475, 4726, - 4725, 6475, 6475, 4727, 4729, 4733, 4737, 4735, 6475, 4744, - 6475, 4751, 4746, 4736, 4748, 4749, 6475, 4750, 4753, 4757, - 6475, 4758, 4766, 4759, 4761, 6475, 4763, 4768, 4764, 4772, - 6475, 4773, 4779, 4775, 4781, 4782, 4784, 4785, 4786, 4788, - 4792, 4793, 4794, 4796, 4806, 4808, 4810, 4812, 4803, 4795, + 4656, 4650, 4660, 4658, 4652, 6613, 4654, 4662, 4667, 4664, + 4668, 6613, 4669, 4671, 4673, 4680, 6613, 4682, 4684, 4675, + 4686, 4691, 4693, 6613, 4697, 4699, 4700, 4707, 4709, 4704, + 4711, 4706, 4714, 4712, 4708, 4716, 4717, 4725, 4723, 4721, + 6613, 4727, 4729, 4734, 4736, 4730, 4738, 4728, 4740, 4743, + 4745, 6613, 4746, 4749, 4750, 4752, 4753, 4754, 4755, 4762, + 4759, 4761, 4763, 4764, 4767, 4768, 6613, 4773, 4771, 4775, + 4784, 4626, 4786, 6613, 4781, 6613, 4777, 4792, 4794, 4776, + 4795, 6613, 6613, 4799, 4804, 4800, 4806, 4801, 6613, 6613, + 4808, 6613, 4809, 6613, 4811, 4813, 6613, 6613, 4814, 4815, - 4816, 4817, 4819, 4822, 4823, 4824, 4825, 4827, 4828, 4830, - 4832, 4837, 4833, 4836, 4838, 4839, 4846, 4840, 4842, 4853, - 4849, 4854, 4855, 4856, 4857, 4863, 4861, 4864, 4867, 4870, - 4865, 4872, 4873, 6475, 4868, 4876, 4878, 4882, 4889, 4890, - 4891, 4893, 4900, 4904, 6475, 4906, 6475, 4908, 4884, 4910, - 4894, 4897, 6475, 4911, 4914, 4915, 4916, 4917, 4918, 4920, - 4919, 4923, 4924, 4927, 6475, 4930, 4925, 6475, 4933, 4934, - 4945, 6475, 4947, 4949, 4935, 4946, 4950, 4951, 4952, 4954, - 4958, 4959, 4961, 4963, 4965, 4968, 4967, 4976, 4980, 4977, - 4969, 4981, 4982, 4983, 4984, 4988, 4990, 4993, 4992, 5000, + 4816, 4817, 4824, 6613, 4831, 6613, 4826, 4832, 4818, 4828, + 4835, 6613, 4836, 4839, 4837, 4844, 4846, 6613, 4838, 4854, + 4843, 4851, 6613, 4853, 4857, 4858, 4862, 6613, 4863, 4868, + 4865, 4869, 4872, 4871, 4873, 4874, 4878, 4879, 4884, 4882, + 4883, 4885, 4894, 4896, 4898, 4900, 4901, 4886, 4905, 4906, + 4908, 4911, 4912, 4914, 4915, 4917, 4918, 4920, 4922, 4925, + 4926, 4676, 4927, 4928, 4930, 4929, 4932, 4941, 4933, 4943, + 4944, 4945, 4946, 4947, 4950, 4951, 4954, 4955, 4959, 4960, + 4962, 6613, 4963, 4957, 4965, 4971, 4973, 4978, 4980, 4990, + 4992, 4993, 6613, 4995, 6613, 4997, 4982, 4999, 4967, 5001, - 5002, 5006, 6475, 4995, 6475, 5003, 5007, 5009, 4991, 5013, - 5015, 5017, 6475, 6475, 5019, 5020, 5025, 5016, 5022, 5028, - 5029, 6475, 5030, 5034, 5042, 5037, 6475, 5032, 5043, 5044, - 5049, 6475, 5046, 5051, 5052, 5054, 5055, 5062, 5065, 5057, - 5059, 5067, 5069, 6475, 6475, 6475, 6475, 5071, 5073, 5077, - 5078, 5080, 5081, 5083, 5085, 5082, 6475, 5087, 6475, 6475, - 5089, 5096, 5088, 5098, 5099, 5100, 5104, 5106, 6475, 5105, - 5110, 5111, 5108, 5118, 5122, 5124, 5109, 5126, 5127, 5130, - 5131, 5132, 5139, 5136, 5137, 5140, 5142, 5144, 5146, 6475, - 6475, 5148, 5152, 5153, 5160, 5157, 5158, 5164, 5171, 5166, + 6613, 4984, 5002, 5003, 5006, 5005, 5007, 5009, 5008, 5012, + 5013, 5017, 6613, 5022, 5015, 5019, 5023, 5034, 6613, 5035, + 5037, 5024, 5038, 5039, 5040, 5043, 5045, 5048, 5047, 5050, + 5052, 5053, 5054, 5059, 5058, 5068, 5075, 5060, 5062, 5070, + 5071, 5074, 5076, 5080, 5081, 5082, 5088, 5090, 5094, 6613, + 5083, 6613, 5095, 5091, 5097, 5098, 5101, 5099, 5103, 6613, + 6613, 5105, 5108, 5113, 5114, 5115, 5117, 5120, 5121, 5123, + 6613, 5124, 5126, 5135, 5128, 6613, 5132, 5137, 5138, 5143, + 6613, 5140, 5144, 5145, 5151, 5146, 5155, 5156, 5159, 5148, + 5160, 5162, 5167, 6613, 6613, 6613, 6613, 5169, 5163, 5174, - 5167, 5168, 5169, 5173, 5174, 5182, 5185, 5175, 5186, 6475, - 5183, 5187, 5188, 6475, 5189, 6475, 5197, 5200, 5190, 5193, - 5194, 5204, 5209, 5207, 6475, 6475, 5196, 5217, 5212, 6475, - 6475, 5215, 5219, 5221, 5223, 5220, 5224, 5226, 5229, 5231, - 5228, 6475, 5233, 6475, 5225, 5232, 5238, 5241, 5252, 5255, - 5256, 5254, 5251, 5257, 6475, 5258, 5260, 6475, 5261, 5263, - 5264, 6475, 5268, 5270, 5272, 5275, 6475, 5281, 5278, 5284, - 6475, 5286, 6475, 5276, 5287, 5283, 5299, 6475, 5290, 5300, - 6475, 5303, 5305, 5291, 5306, 6475, 5297, 6475, 5307, 5309, - 5311, 5314, 5316, 5318, 5320, 5321, 5322, 5329, 5325, 5326, + 5171, 5175, 5177, 5178, 5180, 5176, 6613, 5190, 6613, 6613, + 5192, 5193, 5181, 5194, 5196, 5183, 5200, 5203, 6613, 5201, + 5205, 5207, 5206, 5214, 5218, 5215, 5208, 5223, 5219, 5224, + 5225, 5228, 5236, 5232, 5233, 5235, 5239, 5241, 5248, 6613, + 6613, 5238, 5253, 5242, 5255, 5256, 5257, 5258, 5265, 5260, + 5263, 5266, 5267, 5269, 5270, 5279, 5280, 5271, 5278, 6613, + 5281, 5284, 5283, 6613, 5285, 6613, 5287, 5293, 5294, 5295, + 5296, 5300, 5301, 5304, 6613, 6613, 5299, 5316, 5314, 6613, + 6613, 5303, 5306, 5311, 5319, 5321, 5315, 5323, 5324, 5336, + 5325, 6613, 5327, 6613, 5329, 5333, 5341, 5331, 5351, 5352, - 6475, 6475, 5334, 5332, 135, 5341, 5338, 5342, 5343, 5344, - 5351, 5346, 5348, 5354, 6475, 6475, 5355, 6475, 5349, 5356, - 6475, 5347, 5364, 5365, 5358, 5368, 5369, 5370, 5374, 5378, - 5379, 5380, 5381, 5382, 5384, 5386, 5400, 5385, 5397, 5402, - 5405, 5407, 5409, 5398, 5411, 5412, 5413, 5415, 5417, 5418, - 5419, 5421, 5422, 6475, 5425, 5427, 5430, 5429, 6475, 5435, - 5431, 5444, 5440, 6475, 5449, 5437, 5450, 5451, 6475, 5452, - 5454, 5457, 5455, 5456, 5468, 5463, 5465, 5469, 6475, 6475, - 6475, 5472, 5479, 6475, 5481, 5475, 5458, 5466, 6475, 5482, - 5485, 6475, 6475, 5486, 5487, 5488, 5498, 6475, 5490, 6475, + 5353, 5355, 5350, 5338, 6613, 5348, 5359, 6613, 5366, 5361, + 5363, 5362, 5365, 6613, 5368, 5370, 5374, 5378, 6613, 5382, + 5371, 5379, 6613, 5386, 6613, 5383, 5387, 5389, 5396, 5393, + 6613, 5391, 5397, 6613, 5400, 5407, 5409, 5402, 6613, 5404, + 6613, 5394, 5417, 5418, 5421, 5408, 5425, 5413, 5410, 5427, + 5435, 5431, 5432, 6613, 6613, 5439, 5437, 135, 5444, 5434, + 5440, 5445, 5446, 5453, 5448, 5450, 5456, 6613, 6613, 5458, + 6613, 5451, 5461, 6613, 5449, 5466, 5467, 5462, 5470, 5471, + 5472, 5476, 5478, 5481, 5482, 5483, 5484, 5486, 5502, 5505, + 5487, 5508, 5509, 5511, 5513, 5515, 5517, 5518, 5500, 5498, - 5493, 6475, 5494, 5495, 5503, 5501, 6475, 5507, 5505, 5506, - 5515, 6475, 5522, 5524, 5526, 5527, 5509, 5513, 5528, 6475, - 5537, 5530, 5534, 5541, 5538, 5542, 5543, 5544, 5545, 5552, - 5547, 5551, 6475, 5553, 5555, 5561, 5558, 5548, 5562, 5565, - 5568, 6475, 5570, 6475, 5571, 5573, 5574, 5576, 5575, 5579, - 5581, 5582, 5592, 5590, 5583, 5594, 5596, 5597, 6475, 6475, - 5603, 5605, 6475, 5600, 6475, 5607, 6475, 5608, 5609, 5610, - 5612, 6475, 5614, 5611, 5615, 5618, 6475, 5622, 5619, 5627, - 5629, 6475, 6475, 5630, 5640, 5636, 5632, 5643, 5645, 5635, - 5648, 5649, 5652, 5639, 5657, 5653, 5656, 5658, 5663, 5664, + 5521, 5519, 5522, 5525, 5528, 5529, 6613, 5531, 5536, 5488, + 5532, 6613, 5540, 5537, 5542, 5546, 6613, 5553, 5545, 5547, + 5555, 6613, 5543, 5558, 5559, 5560, 5562, 5565, 5567, 5572, + 5570, 5568, 5574, 6613, 6613, 6613, 5575, 5585, 6613, 5587, + 5579, 5573, 5588, 6613, 5590, 5591, 5592, 6613, 6613, 5594, + 5596, 5595, 5603, 6613, 5599, 6613, 5601, 6613, 5602, 5608, + 5609, 5612, 6613, 5618, 5614, 5616, 5624, 6613, 5632, 5634, + 5636, 5617, 5620, 5629, 5637, 6613, 5644, 5641, 5645, 5652, + 5639, 5643, 5647, 5649, 5653, 5662, 5658, 5660, 6613, 5661, + 5664, 5667, 5673, 5663, 5666, 5670, 6613, 5675, 6613, 5677, - 5666, 5670, 5674, 6475, 6475, 6475, 5665, 5671, 5682, 5681, - 5683, 5690, 5685, 6475, 5687, 5689, 5693, 5694, 5701, 5697, - 5700, 6475, 5696, 5702, 5704, 5705, 5707, 5709, 5712, 5710, - 6475, 5722, 5724, 5725, 5717, 5727, 5734, 5736, 5738, 5726, - 5740, 5747, 5743, 6475, 5745, 6475, 6475, 5742, 6475, 5746, - 5749, 5750, 5751, 6475, 5754, 5755, 5756, 5758, 5760, 5763, - 6475, 5770, 5757, 5765, 5773, 6475, 6475, 5775, 6475, 5780, - 5781, 5782, 5789, 5785, 5787, 5791, 5788, 6475, 5794, 5799, - 5792, 5800, 5801, 5802, 5803, 6475, 5805, 5807, 5808, 5810, - 6475, 5811, 5815, 5816, 5817, 5818, 6475, 5819, 5821, 5842, + 6613, 5678, 5679, 5680, 5687, 5686, 5688, 5689, 5693, 5699, + 5694, 5690, 5701, 5705, 5706, 6613, 6613, 5710, 5712, 6613, + 5713, 6613, 5715, 6613, 5716, 5717, 5719, 5718, 6613, 5721, + 5722, 5728, 5730, 5726, 5729, 6613, 5738, 5731, 5736, 5741, + 6613, 6613, 5743, 5750, 5746, 6613, 5747, 5753, 5757, 5754, + 5759, 5760, 5761, 5762, 5772, 5764, 5765, 5767, 5776, 5773, + 5781, 5786, 5779, 6613, 6613, 6613, 5785, 5790, 5798, 5794, + 5796, 5801, 5791, 6613, 5800, 5803, 5806, 5804, 5813, 5808, + 5815, 6613, 5812, 5816, 5817, 5818, 5820, 5821, 5822, 5827, + 6613, 5829, 5833, 5830, 5837, 5839, 5846, 5848, 5850, 5841, - 5822, 6475, 5825, 5832, 5835, 6475, 6475, 5840, 5844, 5846, - 6475, 6475, 6475, 5852, 5849, 5847, 5856, 6475, 5858, 5862, - 5867, 5871, 5870, 6475, 5873, 5861, 5863, 6475, 6475, 5875, - 5876, 5878, 5881, 6475, 6475, 5882, 5884, 5885, 5888, 5886, - 6475, 5887, 5893, 5900, 5894, 5908, 5911, 5913, 5902, 5914, - 5906, 5922, 5926, 5904, 5923, 5924, 5925, 5927, 5928, 5934, - 5937, 5935, 5940, 5943, 5949, 5946, 6475, 6475, 5953, 6475, - 5955, 5950, 6475, 6475, 5957, 5961, 5963, 5965, 5967, 5969, - 5971, 6475, 5972, 5974, 5975, 5976, 5958, 6475, 5977, 5980, - 5982, 5985, 5983, 5986, 5990, 6475, 5991, 5993, 6475, 6475, + 5843, 5858, 5855, 6613, 5857, 6613, 6613, 5853, 6613, 5859, + 5861, 5862, 5863, 6613, 5866, 5867, 5868, 5871, 5870, 5873, + 5875, 5877, 6613, 5886, 5878, 5888, 5889, 6613, 6613, 5892, + 6613, 5896, 5897, 5899, 5906, 5903, 5901, 5905, 5911, 6613, + 5908, 5914, 5910, 5917, 5918, 5920, 5921, 6613, 5925, 5922, + 5924, 5926, 6613, 5929, 5934, 5931, 5935, 5938, 6613, 5940, + 5939, 5942, 5952, 6613, 5951, 5955, 5953, 6613, 6613, 5961, + 5963, 5964, 6613, 6613, 6613, 5970, 5967, 5954, 5975, 6613, + 5977, 5981, 5985, 5989, 5980, 6613, 5988, 5990, 5992, 5994, + 5995, 6613, 6613, 5996, 5997, 5998, 6001, 6613, 6613, 6002, - 5994, 5999, 6000, 6003, 6001, 6475, 6005, 6013, 6009, 6010, - 6011, 6014, 6017, 6475, 6016, 6018, 6475, 6475, 6475, 6020, - 6475, 6475, 6021, 6475, 6475, 6475, 6475, 6475, 6475, 6475, - 6025, 6475, 6024, 6039, 6041, 6043, 6475, 6029, 6036, 6044, - 6031, 6475, 6046, 6475, 6034, 6050, 6049, 5890, 6053, 6055, - 6058, 6059, 6062, 6063, 6064, 6066, 6065, 6070, 6067, 6072, - 6073, 6085, 6475, 6475, 6475, 6069, 6075, 6087, 6091, 6097, - 6098, 6102, 6104, 6092, 6094, 6105, 6107, 6110, 6084, 6106, - 6119, 6116, 6117, 6118, 6120, 6125, 6127, 6122, 6128, 6132, - 6475, 6133, 6475, 6134, 6475, 6475, 6136, 6138, 5936, 6141, + 6004, 6006, 6005, 6007, 6613, 6008, 6013, 6020, 6015, 6028, + 6031, 6033, 6021, 6034, 6035, 6043, 6046, 6023, 6038, 6041, + 6045, 6049, 6051, 6056, 6058, 6057, 6060, 6065, 6061, 6066, + 6613, 6613, 6068, 6613, 6073, 6069, 6613, 6613, 6075, 6080, + 6082, 6084, 6086, 6088, 6090, 6092, 6077, 6613, 6093, 6095, + 6096, 6097, 6098, 6613, 6100, 6107, 6099, 6104, 6101, 6110, + 6116, 6613, 6108, 6121, 6613, 6613, 6112, 6122, 6124, 6126, + 6128, 6613, 6129, 6137, 6133, 6134, 6135, 6138, 6136, 6613, + 6142, 6140, 6613, 6613, 6141, 6143, 6613, 6613, 6144, 6613, + 6613, 6613, 6613, 6613, 6613, 6613, 6613, 6155, 6159, 6613, - 6149, 6150, 6142, 6145, 6146, 6154, 6162, 6164, 6475, 6475, - 6151, 6153, 6475, 6155, 6166, 6475, 6157, 6171, 6167, 6168, - 6174, 6175, 6178, 6179, 6189, 6475, 6475, 6180, 6185, 6182, - 6191, 6192, 6199, 6195, 6202, 6204, 6205, 6198, 6212, 6475, - 6214, 6211, 6219, 6475, 6220, 6208, 6215, 6221, 6223, 6231, - 6226, 6228, 6475, 6229, 6475, 6233, 6234, 6239, 6235, 6236, - 6237, 6247, 6251, 6249, 6475, 6238, 6252, 6257, 6258, 6260, - 6263, 6265, 6266, 6270, 6273, 6275, 6280, 6267, 6281, 6271, - 6282, 6283, 6475, 6292, 6284, 6475, 6289, 6293, 6286, 6295, - 6296, 6475, 6300, 6301, 6304, 6306, 6309, 6310, 6475, 6312, + 6151, 6166, 6168, 6172, 6613, 6153, 6169, 6157, 6163, 6613, + 6173, 6613, 6174, 6175, 6177, 6179, 6180, 6184, 6188, 6189, + 6191, 6190, 6192, 6196, 6193, 6198, 6194, 6200, 6207, 6204, + 6205, 6213, 6613, 6613, 6613, 6214, 6215, 6220, 6222, 6224, + 6226, 6230, 6233, 6234, 6216, 6237, 6238, 6239, 6241, 6242, + 6251, 6246, 6247, 6249, 6256, 6248, 6262, 6613, 6264, 6250, + 6252, 6270, 6613, 6258, 6613, 6267, 6613, 6613, 6275, 6276, + 6272, 6278, 6287, 6288, 6279, 6283, 6284, 6286, 6290, 6613, + 6295, 6613, 6613, 6292, 6298, 6613, 6300, 6301, 6613, 6299, + 6302, 6304, 6308, 6309, 6306, 6310, 6311, 6327, 6613, 6613, - 6316, 6318, 6475, 6319, 6475, 6475, 6321, 6313, 6322, 6328, - 6330, 6475, 6475, 6475, 6355, 6362, 6369, 6376, 6383, 6390, - 6397, 88, 6404, 6411, 6418, 6425, 6432, 6439, 6446, 6453, - 6460, 6467 + 6312, 6317, 6320, 6329, 6331, 6330, 6333, 6337, 6338, 6340, + 6341, 6350, 6613, 6347, 6348, 6352, 6613, 6354, 6349, 6355, + 6356, 6357, 6365, 6361, 6364, 6613, 6366, 6613, 6370, 6372, + 6373, 6363, 6371, 6374, 6385, 6383, 6379, 6613, 6389, 6393, + 6391, 6395, 6397, 6399, 6400, 6401, 6403, 6406, 6412, 6409, + 6416, 6417, 6413, 6421, 6418, 6613, 6428, 6419, 6613, 6425, + 6429, 6422, 6431, 6435, 6613, 6440, 6433, 6442, 6443, 6446, + 6447, 6613, 6449, 6456, 6451, 6613, 6457, 6613, 6613, 6459, + 6453, 6460, 6466, 6468, 6613, 6613, 6613, 6493, 6500, 6507, + 6514, 6521, 6528, 6535, 88, 6542, 6549, 6556, 6563, 6570, + + 6577, 6584, 6591, 6598, 6605 } ; -static const flex_int16_t yy_def[3333] = +static const flex_int16_t yy_def[3406] = { 0, - 3314, 1, 3315, 3315, 3316, 3316, 3317, 3317, 3318, 3318, - 3319, 3319, 3320, 3320, 3321, 3321, 3314, 3322, 3314, 3314, - 3314, 3314, 3323, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3324, 3314, 3314, 3314, - 3324, 3325, 3314, 3314, 3314, 3325, 3326, 3314, 3314, 3314, - 3314, 3326, 3327, 3314, 3314, 3314, 3327, 3328, 3314, 3329, - 3314, 3328, 3328, 3330, 3314, 3314, 3314, 3314, 3330, 3331, - 3314, 3314, 3314, 3331, 3322, 3322, 3314, 3332, 3323, 3332, - 3323, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3387, 1, 3388, 3388, 3389, 3389, 3390, 3390, 3391, 3391, + 3392, 3392, 3393, 3393, 3394, 3394, 3387, 3395, 3387, 3387, + 3387, 3387, 3396, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3397, 3387, 3387, 3387, + 3397, 3398, 3387, 3387, 3387, 3398, 3399, 3387, 3387, 3387, + 3387, 3399, 3400, 3387, 3387, 3387, 3400, 3401, 3387, 3402, + 3387, 3401, 3401, 3403, 3387, 3387, 3387, 3387, 3403, 3404, + 3387, 3387, 3387, 3404, 3395, 3395, 3387, 3405, 3396, 3405, + 3396, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3324, 3324, 3325, - 3325, 3326, 3326, 3314, 3327, 3327, 3328, 3328, 3329, 3329, - 3328, 3330, 3330, 3314, 3331, 3331, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3397, + 3397, 3398, 3398, 3399, 3399, 3387, 3400, 3400, 3401, 3401, + 3402, 3402, 3401, 3403, 3403, 3387, 3404, 3404, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3401, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3401, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3314, 3314, 3322, 3314, 3314, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3387, 3395, 3387, 3387, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3314, + 3395, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3328, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3401, 3401, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3328, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3387, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3328, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3328, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3314, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3401, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3314, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, - 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3314, 3322, 3314, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3401, 3395, 3387, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, + 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3387, 3395, 3395, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3314, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3395, 3395, 3395, 3387, 3387, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, - 3322, 3322, 3322, 3314, 3314, 3322, 3314, 3322, 3314, 3322, - 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3401, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3387, + 3395, 3387, 3395, 3387, 3395, 3395, 3387, 3387, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3401, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, - 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3314, 3314, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3387, 3387, 3395, 3395, 3395, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3314, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3401, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3387, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, - 3314, 3314, 3322, 3322, 3328, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3314, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, - 3314, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, - 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3314, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3395, 3395, 3401, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, + 3387, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, - 3322, 3322, 3314, 3322, 3314, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, - 3322, 3322, 3322, 3314, 3314, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3314, 3314, 3322, 3314, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3314, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, 3395, 3387, + 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3387, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3322, 3314, 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, - 3314, 3314, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3314, 3314, 3322, - 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3314, - 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3314, + 3395, 3395, 3395, 3387, 3395, 3387, 3387, 3395, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3387, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3387, 3395, + 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3387, 3395, 3395, 3395, 3395, 3387, 3387, 3395, - 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3314, 3314, 3322, - 3314, 3314, 3322, 3314, 3314, 3314, 3314, 3314, 3314, 3314, - 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3314, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3314, 3322, 3314, 3322, 3314, 3314, 3322, 3322, 3322, 3322, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3387, 3395, 3387, 3395, 3395, 3387, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3387, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3387, 3387, 3395, 3395, 3387, 3387, 3395, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3395, 3395, 3387, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, - 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, - 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3387, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3387, 3387, 3395, 3395, 3387, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, - 3322, 3322, 3314, 3322, 3314, 3314, 3322, 3322, 3322, 3322, - 3322, 3314, 3314, 0, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314 + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3387, 3387, 3395, + 3395, 3395, 3395, 3395, 3387, 3387, 0, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + + 3387, 3387, 3387, 3387, 3387 } ; -static const flex_int16_t yy_nxt[6516] = +static const flex_int16_t yy_nxt[6654] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1528,714 +1551,729 @@ static const flex_int16_t yy_nxt[6516] = 67, 19, 20, 21, 69, 70, 71, 75, 76, 77, 78, 86, 22, 72, 121, 86, 120, 109, 86, 79, - 158, 158, 73, 19, 20, 21, 69, 70, 71, 75, - 76, 77, 78, 185, 22, 72, 81, 82, 83, 129, + 160, 160, 73, 19, 20, 21, 69, 70, 71, 75, + 76, 77, 78, 187, 22, 72, 81, 82, 83, 130, 90, 79, 90, 90, 73, 90, 86, 84, 81, 82, - 83, 90, 91, 86, 86, 98, 92, 93, 168, 84, - 94, 157, 99, 86, 110, 95, 100, 160, 86, 101, - 160, 168, 86, 112, 96, 86, 165, 165, 111, 86, - 102, 113, 135, 115, 103, 171, 116, 104, 86, 105, - 106, 177, 114, 117, 86, 118, 86, 122, 86, 126, - 107, 86, 154, 127, 1484, 123, 155, 86, 86, 136, + 83, 90, 91, 86, 86, 98, 92, 93, 170, 84, + 94, 159, 99, 86, 110, 95, 100, 162, 86, 101, + 162, 170, 86, 112, 96, 86, 167, 167, 111, 86, + 102, 113, 137, 115, 103, 173, 116, 104, 86, 105, + 106, 179, 114, 117, 170, 118, 86, 122, 86, 126, + 107, 86, 156, 127, 86, 123, 157, 184, 86, 138, - 156, 124, 130, 137, 86, 125, 131, 86, 146, 128, - 147, 179, 132, 138, 139, 133, 140, 86, 86, 148, - 87, 150, 134, 141, 88, 149, 142, 162, 86, 162, - 162, 151, 162, 143, 168, 152, 153, 144, 145, 90, - 180, 90, 90, 167, 90, 167, 167, 172, 167, 172, - 172, 170, 172, 175, 175, 85, 86, 85, 85, 90, - 85, 90, 90, 86, 90, 86, 85, 178, 182, 86, - 90, 91, 183, 86, 86, 86, 181, 86, 86, 86, - 195, 188, 186, 86, 86, 184, 86, 189, 187, 190, - 86, 86, 86, 176, 86, 191, 192, 197, 194, 196, + 158, 124, 87, 139, 86, 125, 88, 128, 180, 129, + 86, 131, 86, 140, 141, 132, 142, 143, 86, 133, + 144, 86, 148, 86, 149, 134, 86, 145, 135, 86, + 152, 146, 147, 150, 86, 136, 177, 177, 183, 151, + 153, 181, 196, 189, 154, 155, 164, 86, 164, 164, + 90, 164, 90, 90, 169, 90, 169, 169, 174, 169, + 174, 174, 172, 174, 85, 86, 85, 85, 90, 85, + 90, 90, 289, 90, 86, 85, 86, 182, 86, 90, + 91, 185, 190, 188, 86, 86, 197, 86, 191, 86, + 192, 86, 86, 207, 186, 86, 86, 86, 86, 86, - 193, 86, 203, 86, 198, 200, 201, 205, 86, 86, - 204, 199, 86, 202, 207, 209, 86, 213, 210, 86, - 86, 206, 208, 86, 216, 86, 86, 86, 86, 218, - 86, 211, 212, 219, 223, 215, 86, 225, 226, 86, - 224, 86, 214, 86, 217, 922, 221, 86, 227, 220, - 86, 222, 228, 86, 231, 86, 86, 86, 236, 86, - 233, 86, 86, 229, 234, 230, 238, 86, 248, 86, - 86, 232, 86, 86, 86, 239, 235, 86, 86, 237, - 244, 240, 241, 247, 249, 86, 250, 242, 243, 86, - 86, 245, 256, 86, 255, 246, 253, 86, 86, 259, + 178, 199, 193, 194, 86, 198, 86, 195, 86, 200, + 86, 201, 245, 209, 205, 202, 203, 206, 208, 86, + 210, 215, 211, 204, 86, 212, 86, 86, 86, 217, + 86, 218, 86, 220, 86, 86, 226, 221, 213, 214, + 86, 227, 225, 223, 86, 86, 216, 229, 224, 86, + 86, 219, 86, 222, 230, 232, 233, 228, 86, 86, + 86, 86, 231, 235, 86, 237, 86, 240, 234, 238, + 86, 86, 86, 86, 242, 86, 236, 370, 86, 86, + 86, 239, 86, 243, 241, 248, 251, 252, 86, 244, + 253, 247, 86, 86, 86, 254, 249, 246, 260, 257, - 86, 86, 86, 251, 86, 263, 252, 254, 260, 258, - 262, 257, 86, 264, 158, 158, 267, 266, 160, 174, - 261, 160, 265, 162, 168, 162, 162, 268, 162, 165, - 165, 167, 86, 167, 167, 90, 167, 90, 90, 172, - 90, 172, 172, 86, 172, 175, 175, 170, 269, 270, - 272, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 274, 277, 86, 280, 271, 276, 273, 275, 86, 86, - 283, 282, 279, 86, 286, 278, 86, 284, 288, 281, - 86, 287, 86, 289, 86, 86, 292, 86, 290, 86, - 297, 293, 299, 285, 86, 86, 294, 86, 304, 298, + 250, 261, 86, 86, 259, 263, 86, 86, 86, 86, + 258, 267, 255, 86, 264, 256, 86, 86, 262, 266, + 268, 270, 160, 160, 86, 162, 265, 269, 162, 273, + 164, 271, 164, 164, 337, 164, 167, 167, 169, 86, + 169, 169, 90, 169, 90, 90, 170, 90, 174, 272, + 174, 174, 274, 174, 172, 177, 177, 276, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 275, 278, 86, + 281, 284, 280, 86, 277, 279, 86, 287, 286, 283, + 176, 290, 282, 86, 288, 285, 86, 291, 292, 86, + 293, 317, 86, 296, 86, 294, 86, 301, 297, 86, - 300, 86, 295, 296, 86, 291, 301, 86, 86, 302, - 86, 306, 86, 307, 303, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 314, 315, 308, 305, 321, 309, - 311, 310, 322, 312, 339, 313, 86, 316, 323, 324, - 317, 326, 318, 86, 325, 86, 328, 86, 86, 330, - 86, 331, 86, 327, 319, 86, 320, 86, 334, 86, - 86, 336, 86, 337, 86, 335, 332, 86, 329, 86, - 86, 333, 86, 86, 86, 343, 86, 338, 340, 341, - 342, 345, 86, 86, 344, 86, 86, 347, 86, 346, - 352, 86, 348, 86, 86, 353, 86, 86, 354, 358, + 86, 86, 86, 298, 86, 86, 304, 305, 308, 299, + 300, 302, 295, 86, 86, 86, 306, 310, 86, 303, + 311, 86, 86, 86, 86, 307, 86, 318, 86, 86, + 86, 319, 86, 325, 312, 313, 315, 309, 314, 316, + 86, 320, 86, 329, 321, 328, 322, 330, 327, 326, + 332, 86, 86, 86, 726, 334, 86, 338, 323, 331, + 324, 86, 335, 86, 86, 340, 86, 342, 86, 339, + 341, 86, 333, 86, 86, 86, 344, 336, 86, 86, + 86, 343, 86, 86, 346, 86, 348, 86, 345, 86, + 86, 86, 86, 351, 353, 86, 349, 358, 86, 347, - 349, 356, 350, 86, 361, 86, 86, 86, 351, 355, - 86, 86, 363, 364, 86, 86, 357, 86, 86, 367, - 86, 359, 360, 368, 366, 86, 362, 86, 86, 86, - 370, 428, 371, 365, 369, 168, 86, 86, 373, 374, - 86, 372, 375, 377, 86, 86, 378, 382, 86, 86, - 381, 380, 86, 86, 86, 86, 86, 86, 388, 389, - 386, 384, 390, 379, 86, 86, 376, 86, 86, 392, - 86, 383, 391, 86, 385, 86, 86, 86, 86, 387, - 399, 86, 402, 393, 394, 397, 86, 86, 86, 86, - 396, 395, 400, 86, 403, 401, 86, 86, 86, 405, + 352, 354, 359, 86, 86, 350, 355, 86, 86, 360, + 357, 356, 362, 364, 86, 367, 361, 86, 86, 86, + 86, 86, 373, 369, 86, 86, 86, 86, 86, 363, + 374, 372, 365, 366, 376, 86, 86, 368, 377, 371, + 86, 378, 86, 379, 375, 380, 86, 381, 383, 86, + 86, 384, 170, 86, 86, 387, 86, 86, 386, 86, + 86, 86, 86, 394, 388, 390, 392, 395, 385, 86, + 86, 382, 86, 86, 398, 389, 86, 396, 86, 391, + 86, 397, 86, 393, 86, 399, 86, 404, 86, 405, + 409, 406, 400, 86, 403, 86, 86, 86, 402, 407, - 86, 406, 173, 398, 407, 404, 86, 86, 86, 409, - 86, 408, 410, 86, 413, 415, 411, 417, 86, 412, - 86, 86, 86, 86, 416, 86, 422, 414, 86, 418, - 86, 420, 86, 421, 423, 86, 86, 86, 425, 86, - 86, 86, 429, 432, 86, 86, 419, 430, 86, 86, - 435, 86, 86, 426, 440, 431, 86, 427, 86, 424, - 86, 437, 86, 86, 433, 441, 434, 86, 439, 436, - 450, 86, 86, 86, 455, 442, 449, 451, 438, 86, - 86, 86, 86, 452, 564, 453, 456, 86, 443, 458, - 459, 444, 86, 457, 86, 462, 445, 446, 447, 448, + 401, 86, 408, 86, 411, 86, 412, 86, 86, 86, + 86, 415, 86, 86, 410, 419, 416, 86, 175, 417, + 421, 86, 418, 413, 414, 86, 86, 422, 423, 86, + 86, 420, 86, 424, 86, 86, 426, 427, 428, 429, + 86, 86, 86, 86, 86, 86, 86, 435, 432, 86, + 425, 86, 436, 86, 86, 434, 86, 438, 86, 441, + 431, 437, 433, 86, 430, 86, 443, 446, 86, 86, + 439, 447, 440, 86, 442, 86, 86, 445, 86, 86, + 457, 448, 86, 444, 86, 455, 86, 86, 86, 458, + 461, 459, 499, 449, 170, 462, 450, 456, 469, 86, - 460, 454, 86, 86, 86, 461, 86, 468, 86, 86, - 86, 463, 466, 467, 464, 469, 86, 465, 86, 470, - 86, 471, 86, 86, 472, 86, 86, 473, 474, 478, - 86, 86, 479, 86, 480, 86, 86, 496, 483, 86, - 484, 477, 475, 481, 485, 476, 86, 86, 86, 86, - 482, 488, 486, 489, 86, 86, 497, 491, 487, 498, - 86, 86, 86, 490, 495, 86, 499, 86, 500, 86, - 492, 86, 86, 493, 501, 494, 86, 86, 502, 86, - 515, 86, 512, 86, 552, 86, 503, 86, 504, 510, - 505, 513, 511, 514, 526, 517, 516, 168, 525, 527, + 463, 451, 452, 453, 454, 466, 86, 460, 464, 465, + 467, 86, 86, 86, 86, 468, 86, 86, 86, 477, + 86, 86, 86, 479, 86, 475, 478, 476, 86, 472, + 470, 86, 480, 471, 473, 474, 86, 86, 86, 481, + 483, 482, 86, 487, 86, 86, 86, 86, 488, 86, + 489, 492, 86, 505, 493, 1513, 484, 486, 485, 490, + 86, 86, 86, 86, 491, 86, 494, 495, 497, 86, + 498, 86, 500, 496, 86, 506, 507, 86, 86, 508, + 504, 86, 86, 86, 86, 501, 509, 86, 502, 547, + 503, 86, 510, 86, 520, 86, 511, 522, 519, 523, - 86, 86, 168, 506, 528, 86, 507, 86, 508, 86, - 509, 86, 86, 518, 519, 529, 533, 86, 531, 532, - 86, 534, 530, 520, 86, 521, 522, 523, 536, 540, - 524, 86, 86, 537, 86, 86, 535, 542, 539, 541, - 538, 86, 86, 86, 86, 86, 549, 86, 547, 86, - 550, 544, 86, 86, 554, 543, 86, 546, 86, 548, - 86, 545, 86, 86, 86, 551, 166, 553, 557, 86, - 558, 559, 555, 86, 556, 86, 560, 86, 561, 86, - 562, 565, 566, 563, 86, 86, 86, 571, 568, 569, - 86, 86, 573, 86, 572, 585, 86, 86, 86, 567, + 86, 524, 86, 525, 512, 86, 513, 527, 514, 537, + 535, 536, 521, 170, 538, 86, 86, 86, 86, 526, + 86, 515, 86, 539, 516, 168, 517, 86, 518, 86, + 540, 528, 529, 543, 541, 542, 544, 86, 86, 545, + 546, 530, 548, 531, 532, 533, 86, 550, 534, 86, + 86, 549, 86, 86, 552, 86, 86, 551, 554, 559, + 557, 86, 560, 86, 86, 86, 86, 556, 564, 86, + 555, 558, 553, 86, 86, 86, 562, 86, 568, 569, + 563, 86, 567, 561, 86, 86, 86, 86, 86, 566, + 86, 578, 574, 86, 565, 570, 86, 579, 575, 576, - 712, 86, 580, 86, 570, 577, 574, 576, 86, 575, - 581, 582, 586, 587, 583, 584, 578, 86, 579, 86, - 590, 588, 86, 86, 86, 86, 86, 86, 589, 592, - 86, 593, 86, 594, 86, 597, 86, 595, 598, 599, - 86, 600, 86, 591, 596, 86, 602, 603, 86, 86, - 86, 86, 604, 86, 86, 601, 607, 86, 609, 608, - 86, 86, 86, 86, 605, 86, 610, 86, 615, 86, - 86, 606, 611, 616, 86, 614, 86, 618, 86, 617, - 613, 612, 86, 619, 86, 621, 86, 623, 86, 86, - 86, 620, 86, 86, 86, 86, 622, 625, 86, 626, + 571, 572, 573, 86, 581, 582, 86, 86, 86, 86, + 86, 595, 580, 86, 86, 166, 577, 86, 587, 597, + 86, 583, 596, 584, 586, 590, 585, 86, 86, 588, + 86, 589, 598, 591, 592, 600, 599, 593, 594, 86, + 86, 86, 86, 86, 603, 602, 604, 605, 86, 86, + 607, 601, 86, 609, 86, 86, 86, 86, 612, 86, + 610, 613, 86, 614, 86, 608, 86, 86, 606, 611, + 86, 617, 86, 619, 86, 618, 86, 615, 86, 86, + 86, 620, 86, 625, 86, 616, 621, 86, 626, 86, + 624, 86, 628, 86, 627, 86, 622, 623, 629, 86, - 86, 634, 653, 624, 628, 86, 164, 86, 627, 86, - 636, 629, 631, 630, 633, 632, 86, 86, 635, 638, - 86, 86, 637, 86, 641, 86, 644, 86, 639, 647, - 86, 640, 86, 646, 86, 86, 86, 642, 86, 86, - 643, 650, 86, 86, 654, 86, 86, 645, 649, 86, - 656, 86, 86, 648, 86, 86, 86, 86, 655, 670, - 651, 673, 657, 652, 659, 86, 163, 86, 658, 86, - 660, 669, 668, 671, 86, 661, 680, 662, 86, 677, - 86, 672, 86, 663, 86, 664, 681, 674, 665, 666, - 86, 675, 86, 676, 86, 667, 678, 682, 86, 679, + 631, 86, 633, 86, 86, 86, 86, 86, 630, 86, + 86, 632, 635, 86, 636, 638, 634, 86, 86, 640, + 86, 86, 646, 165, 637, 649, 639, 641, 86, 642, + 647, 643, 645, 648, 86, 86, 86, 644, 86, 86, + 86, 653, 86, 651, 86, 656, 652, 658, 650, 86, + 654, 86, 659, 86, 86, 655, 86, 86, 86, 662, + 86, 665, 657, 661, 86, 666, 86, 86, 86, 86, + 86, 668, 86, 86, 700, 663, 660, 664, 86, 667, + 86, 86, 671, 669, 682, 163, 86, 670, 86, 672, + 680, 683, 86, 681, 673, 86, 674, 684, 86, 685, - 683, 684, 86, 687, 86, 86, 689, 86, 86, 86, - 86, 86, 86, 685, 686, 86, 86, 695, 86, 86, - 691, 86, 690, 86, 692, 696, 86, 699, 700, 688, - 693, 86, 694, 698, 697, 701, 168, 703, 704, 86, - 702, 86, 706, 86, 86, 86, 86, 86, 86, 86, - 710, 715, 86, 86, 705, 707, 716, 714, 718, 708, - 711, 86, 86, 709, 86, 717, 86, 86, 86, 720, - 86, 86, 713, 719, 724, 723, 86, 86, 86, 732, - 86, 721, 729, 722, 86, 725, 161, 730, 86, 733, - 86, 731, 726, 728, 734, 727, 735, 86, 736, 86, + 86, 688, 675, 689, 676, 686, 86, 677, 678, 687, + 86, 86, 693, 86, 679, 698, 86, 86, 86, 692, + 697, 86, 690, 694, 86, 691, 695, 86, 702, 696, + 86, 86, 86, 86, 86, 86, 699, 86, 86, 703, + 708, 86, 704, 709, 733, 86, 701, 705, 86, 86, + 706, 712, 86, 711, 86, 707, 710, 713, 714, 170, + 716, 717, 86, 715, 86, 86, 86, 718, 86, 86, + 86, 86, 86, 723, 725, 728, 86, 86, 720, 727, + 721, 719, 729, 724, 731, 86, 722, 86, 86, 730, + 86, 86, 86, 86, 86, 737, 86, 732, 736, 742, - 86, 737, 86, 738, 86, 740, 86, 86, 739, 86, - 86, 743, 86, 742, 741, 86, 86, 86, 746, 86, - 745, 747, 86, 744, 751, 86, 750, 86, 86, 752, - 86, 86, 86, 754, 86, 756, 86, 86, 749, 86, - 748, 86, 759, 762, 86, 753, 755, 86, 86, 86, - 86, 757, 758, 763, 86, 760, 86, 765, 764, 86, - 770, 761, 766, 772, 86, 767, 768, 86, 769, 773, - 86, 86, 774, 777, 771, 86, 86, 86, 779, 86, - 86, 780, 86, 783, 775, 778, 776, 782, 86, 86, - 86, 86, 86, 784, 86, 86, 86, 789, 787, 791, + 86, 734, 86, 738, 743, 86, 735, 745, 86, 791, + 739, 86, 741, 740, 747, 744, 746, 86, 748, 86, + 86, 749, 86, 750, 86, 751, 86, 86, 86, 86, + 752, 86, 753, 756, 86, 758, 754, 755, 86, 86, + 86, 759, 86, 86, 760, 757, 764, 763, 86, 86, + 86, 86, 86, 765, 86, 767, 86, 769, 86, 86, + 86, 762, 86, 761, 772, 768, 766, 775, 161, 770, + 86, 86, 86, 86, 86, 776, 773, 86, 86, 771, + 86, 778, 774, 86, 783, 777, 779, 86, 785, 780, + 781, 86, 782, 86, 788, 784, 786, 790, 787, 86, - 86, 86, 86, 781, 86, 785, 86, 788, 786, 86, - 792, 797, 794, 795, 86, 790, 86, 86, 796, 799, - 798, 793, 800, 801, 86, 86, 86, 802, 86, 86, - 806, 803, 86, 808, 810, 86, 86, 807, 809, 86, - 86, 86, 812, 805, 86, 811, 804, 813, 86, 86, - 86, 86, 819, 86, 814, 816, 86, 815, 86, 86, - 821, 822, 86, 824, 86, 828, 825, 826, 820, 817, - 818, 86, 86, 823, 86, 831, 86, 833, 86, 830, - 832, 86, 827, 86, 829, 835, 86, 86, 86, 837, - 86, 86, 86, 86, 843, 86, 86, 86, 86, 844, + 86, 86, 789, 86, 792, 86, 86, 86, 86, 793, + 796, 795, 86, 797, 86, 798, 86, 86, 799, 800, + 86, 802, 804, 86, 86, 86, 86, 801, 86, 805, + 810, 794, 86, 86, 86, 808, 86, 803, 811, 86, + 809, 807, 812, 806, 813, 814, 86, 86, 86, 815, + 86, 817, 86, 816, 86, 821, 823, 819, 86, 825, + 86, 86, 86, 822, 818, 86, 86, 86, 824, 827, + 86, 826, 86, 820, 828, 86, 834, 831, 86, 835, + 829, 86, 86, 830, 86, 86, 837, 836, 86, 839, + 86, 832, 833, 86, 843, 86, 841, 840, 86, 86, - 86, 86, 86, 834, 86, 836, 838, 845, 839, 840, - 86, 841, 846, 842, 848, 86, 847, 852, 86, 851, - 86, 849, 850, 86, 86, 86, 86, 86, 86, 853, - 854, 857, 86, 86, 86, 86, 86, 866, 86, 855, - 864, 859, 867, 856, 858, 86, 860, 86, 865, 86, - 861, 862, 863, 86, 86, 86, 86, 86, 869, 871, - 86, 876, 86, 870, 868, 86, 86, 875, 86, 872, - 874, 878, 877, 879, 873, 86, 86, 86, 86, 168, - 880, 86, 881, 886, 887, 882, 86, 884, 86, 86, - 889, 883, 86, 885, 86, 888, 86, 86, 86, 895, + 86, 86, 849, 845, 838, 86, 86, 844, 851, 847, + 850, 842, 86, 846, 848, 86, 86, 86, 852, 853, + 86, 86, 859, 854, 86, 86, 86, 86, 86, 860, + 855, 86, 86, 861, 856, 86, 86, 86, 86, 857, + 86, 858, 862, 868, 864, 86, 863, 866, 86, 86, + 869, 865, 867, 86, 86, 86, 874, 870, 873, 871, + 86, 86, 86, 86, 86, 882, 86, 872, 880, 875, + 883, 86, 86, 876, 86, 86, 881, 86, 877, 878, + 879, 86, 888, 86, 86, 884, 886, 86, 887, 86, + 86, 885, 86, 86, 86, 893, 892, 889, 895, 894, - 86, 86, 890, 891, 86, 896, 898, 86, 86, 86, - 900, 892, 893, 897, 899, 902, 86, 86, 894, 86, - 86, 86, 86, 904, 908, 86, 86, 901, 86, 905, - 86, 86, 86, 909, 86, 910, 903, 86, 86, 86, - 907, 86, 86, 928, 911, 906, 923, 924, 925, 921, - 86, 86, 913, 86, 927, 86, 912, 86, 86, 914, - 926, 931, 915, 86, 929, 86, 916, 86, 930, 917, - 943, 932, 933, 86, 935, 934, 918, 919, 86, 920, - 86, 86, 936, 937, 86, 938, 86, 86, 939, 86, - 946, 948, 86, 940, 944, 86, 945, 950, 86, 941, + 891, 86, 890, 86, 86, 86, 896, 86, 86, 903, + 898, 86, 897, 899, 905, 86, 901, 170, 86, 900, + 902, 86, 904, 86, 86, 906, 86, 86, 912, 86, + 86, 913, 907, 908, 915, 86, 86, 86, 909, 914, + 910, 916, 86, 919, 86, 86, 917, 86, 911, 86, + 86, 921, 86, 925, 86, 86, 86, 922, 86, 86, + 86, 918, 926, 927, 920, 86, 86, 86, 86, 86, + 924, 86, 86, 928, 941, 923, 940, 942, 943, 86, + 930, 938, 939, 929, 86, 86, 931, 86, 944, 932, + 948, 945, 86, 933, 86, 946, 934, 86, 947, 950, - 942, 159, 86, 86, 952, 954, 955, 949, 947, 86, - 957, 956, 86, 86, 951, 86, 958, 86, 960, 86, - 961, 86, 962, 953, 959, 86, 964, 86, 963, 965, - 86, 86, 86, 966, 86, 86, 86, 86, 969, 967, - 86, 973, 86, 86, 972, 86, 86, 976, 86, 86, - 86, 968, 980, 982, 86, 970, 971, 974, 86, 975, - 978, 977, 86, 983, 1013, 86, 986, 981, 984, 86, - 985, 979, 86, 987, 86, 86, 989, 990, 86, 86, - 988, 86, 86, 86, 991, 993, 86, 994, 86, 992, - 86, 995, 86, 86, 86, 1000, 86, 997, 86, 1004, + 86, 952, 86, 935, 936, 86, 937, 86, 86, 86, + 949, 86, 86, 960, 86, 963, 86, 969, 965, 86, + 951, 86, 953, 954, 967, 955, 961, 962, 956, 86, + 86, 975, 86, 957, 966, 968, 964, 972, 86, 958, + 959, 971, 973, 86, 86, 86, 86, 976, 86, 978, + 977, 974, 86, 86, 970, 86, 980, 979, 982, 86, + 981, 86, 86, 983, 86, 985, 86, 86, 986, 86, + 86, 990, 86, 86, 984, 989, 86, 86, 993, 86, + 86, 999, 86, 997, 1010, 86, 987, 991, 988, 86, + 992, 994, 995, 86, 1000, 1011, 86, 86, 998, 1001, - 998, 86, 1003, 86, 86, 86, 86, 1001, 996, 1002, - 86, 86, 86, 999, 86, 1006, 86, 1009, 86, 1007, - 86, 1011, 86, 1005, 86, 1010, 1017, 1012, 86, 1015, - 86, 1018, 86, 86, 1019, 1008, 86, 1016, 86, 1014, - 86, 86, 1026, 1020, 1024, 1022, 1027, 86, 86, 1021, - 86, 86, 1025, 86, 86, 1029, 86, 86, 86, 86, - 86, 86, 1023, 86, 1037, 86, 86, 1035, 86, 1028, - 1040, 86, 1030, 1031, 1032, 1041, 86, 1034, 1033, 1038, - 1042, 86, 1036, 86, 1039, 86, 86, 1048, 86, 1045, - 1043, 1047, 86, 86, 86, 1044, 86, 86, 86, 1046, + 86, 996, 1002, 1003, 1004, 86, 86, 1006, 1007, 86, + 86, 1005, 86, 86, 86, 86, 86, 86, 1008, 86, + 86, 86, 1009, 1012, 1014, 86, 86, 1015, 1019, 86, + 86, 86, 86, 86, 1013, 1016, 1028, 1017, 86, 1020, + 1021, 1022, 86, 1023, 1018, 1024, 86, 1025, 86, 86, + 86, 1030, 86, 86, 86, 1026, 86, 1027, 1031, 1029, + 86, 86, 1036, 86, 1038, 1034, 1032, 1037, 86, 86, + 86, 86, 86, 1035, 86, 86, 1039, 1044, 86, 1033, + 1041, 86, 86, 1046, 86, 1045, 1047, 86, 1040, 1049, + 1043, 86, 86, 86, 1042, 86, 1048, 86, 86, 1050, - 86, 86, 1050, 1057, 1052, 1058, 86, 1060, 86, 86, - 1062, 86, 1049, 86, 1051, 86, 86, 1053, 1063, 1055, - 1054, 1056, 1059, 86, 86, 86, 1061, 1064, 86, 86, - 86, 1070, 1071, 1068, 1065, 86, 86, 1066, 86, 1072, - 1075, 86, 86, 1077, 86, 1067, 86, 86, 86, 86, - 1069, 86, 1082, 1073, 1074, 86, 1079, 1083, 168, 86, - 86, 1086, 1076, 1085, 1080, 1078, 1081, 86, 86, 86, - 1084, 1087, 86, 1089, 86, 86, 86, 86, 86, 1102, - 86, 1105, 86, 86, 1103, 86, 176, 1088, 1090, 1092, - 1093, 86, 86, 86, 1094, 1107, 1091, 1095, 86, 86, + 86, 86, 1051, 1060, 1055, 1057, 86, 86, 178, 86, + 86, 1052, 86, 1054, 1053, 1061, 1058, 86, 1065, 1059, + 1056, 86, 1062, 86, 1068, 86, 1063, 86, 1067, 86, + 86, 1064, 86, 86, 86, 1066, 86, 86, 1070, 1077, + 1072, 86, 1078, 1080, 86, 86, 86, 1069, 86, 86, + 1071, 86, 86, 1073, 86, 1075, 1074, 1076, 1079, 1083, + 1081, 1082, 1084, 86, 1087, 86, 86, 1085, 86, 86, + 1086, 1089, 1088, 86, 1091, 1090, 1092, 86, 86, 1096, + 1093, 86, 86, 1098, 86, 86, 86, 1094, 86, 86, + 1103, 1095, 86, 1100, 86, 1104, 170, 86, 86, 86, - 1104, 1096, 86, 1097, 1110, 1121, 1109, 1098, 1106, 1099, - 86, 86, 86, 86, 1100, 1112, 1116, 1108, 86, 1101, - 1113, 86, 1114, 86, 1111, 1115, 86, 86, 1117, 86, - 86, 1119, 1122, 1118, 86, 86, 86, 1123, 86, 1129, - 1128, 1120, 1127, 1126, 1125, 86, 1130, 1131, 86, 1132, - 1124, 1133, 86, 86, 86, 86, 86, 86, 86, 86, - 1134, 86, 86, 1145, 86, 1148, 1149, 86, 1144, 86, - 86, 1147, 1135, 1136, 86, 1137, 1146, 1150, 86, 86, - 1138, 1151, 1139, 86, 1155, 86, 86, 86, 1140, 1152, - 86, 1156, 86, 1141, 1142, 1154, 86, 1153, 86, 1157, + 1107, 1097, 1106, 86, 1099, 1101, 86, 1102, 1110, 1105, + 86, 86, 86, 86, 1108, 86, 86, 1109, 86, 1123, + 1124, 1126, 86, 86, 1114, 1111, 1113, 86, 86, 86, + 86, 86, 1128, 1115, 1112, 1131, 1116, 86, 1125, 86, + 1117, 86, 1118, 86, 1129, 1130, 1119, 86, 1120, 1148, + 86, 1133, 1127, 1121, 1139, 1132, 1134, 86, 1122, 1135, + 86, 1136, 86, 86, 1137, 86, 86, 1140, 86, 86, + 1143, 86, 86, 86, 86, 1142, 1138, 1141, 1149, 1150, + 1144, 1147, 1151, 1146, 86, 86, 1152, 86, 86, 1145, + 1153, 1154, 1157, 1155, 86, 86, 86, 86, 176, 86, - 1143, 1158, 1162, 1160, 1161, 86, 1164, 86, 1159, 86, - 1165, 86, 86, 86, 1169, 86, 1163, 86, 1167, 86, - 86, 86, 1170, 86, 1168, 1175, 86, 86, 1166, 86, - 1172, 86, 1173, 86, 1171, 1174, 1176, 86, 1178, 86, - 86, 86, 86, 86, 86, 1177, 86, 86, 1185, 1179, - 1183, 1180, 1182, 1184, 86, 1187, 86, 86, 86, 1181, - 1186, 86, 1188, 86, 86, 86, 174, 1190, 1189, 1195, - 1196, 1192, 86, 86, 86, 1191, 1193, 1197, 1194, 86, - 1199, 1200, 1198, 86, 86, 1205, 1203, 86, 1206, 86, - 1202, 1204, 86, 86, 86, 86, 1201, 1207, 86, 86, + 86, 1166, 86, 1156, 86, 1158, 1165, 86, 1169, 86, + 1159, 86, 1160, 1167, 1168, 86, 1170, 1171, 1161, 1173, + 86, 86, 1176, 1162, 1163, 86, 86, 86, 86, 1172, + 1164, 1177, 86, 86, 1182, 86, 86, 1175, 86, 1174, + 1183, 1185, 86, 1179, 1178, 1181, 86, 86, 86, 1180, + 86, 1186, 86, 86, 1190, 1188, 86, 1191, 1184, 1189, + 86, 1187, 86, 86, 1196, 1193, 86, 86, 86, 86, + 86, 1194, 1192, 1199, 86, 1197, 86, 86, 86, 1195, + 175, 86, 86, 86, 86, 86, 1198, 1206, 1201, 1200, + 1203, 1204, 1205, 1208, 1207, 86, 1202, 86, 86, 86, - 86, 1214, 86, 1208, 1216, 86, 86, 86, 173, 86, - 86, 1210, 1212, 1209, 1218, 1213, 1211, 86, 86, 86, - 1217, 1220, 1215, 86, 1222, 86, 86, 1221, 1223, 86, - 86, 1219, 86, 86, 1225, 1226, 86, 1231, 1227, 1228, - 86, 1224, 1230, 86, 1232, 86, 86, 86, 1229, 1233, - 1235, 86, 1236, 86, 86, 86, 86, 86, 86, 1240, - 1242, 1243, 1247, 1244, 1234, 86, 86, 86, 86, 86, - 1241, 1237, 86, 1238, 1245, 1239, 86, 1246, 1250, 86, - 86, 1252, 86, 1248, 86, 1251, 86, 86, 1253, 86, - 86, 86, 86, 1257, 1258, 1254, 1249, 86, 86, 86, + 1209, 86, 86, 86, 86, 1211, 86, 86, 1216, 1210, + 86, 1217, 1213, 1219, 86, 1218, 1212, 1215, 1221, 1214, + 86, 1220, 1223, 1222, 86, 86, 86, 1226, 86, 86, + 86, 1228, 1227, 86, 1229, 86, 86, 86, 1224, 1230, + 86, 86, 1225, 1231, 1237, 86, 1239, 86, 1232, 86, + 86, 1233, 86, 1235, 1241, 1234, 1236, 86, 86, 86, + 86, 1243, 1240, 86, 86, 1238, 86, 86, 1245, 1246, + 86, 1242, 1249, 86, 86, 1248, 1247, 86, 1250, 86, + 1244, 1255, 1251, 1252, 86, 1254, 86, 86, 1256, 86, + 1253, 86, 86, 1257, 1259, 86, 1260, 86, 86, 86, - 1263, 1264, 86, 1259, 86, 1255, 86, 86, 1256, 1266, - 1261, 1267, 86, 86, 86, 1260, 1271, 1265, 1262, 86, - 86, 86, 86, 86, 86, 86, 1277, 86, 1269, 86, - 86, 1270, 1268, 1273, 1278, 1279, 168, 86, 86, 1272, - 86, 1274, 86, 86, 1276, 86, 86, 1284, 1275, 1286, - 86, 1281, 1283, 1282, 1285, 1288, 1280, 86, 1289, 1292, - 86, 86, 1290, 1287, 86, 1291, 86, 86, 86, 86, - 86, 1293, 86, 86, 1296, 86, 86, 1302, 86, 86, - 1299, 1294, 1295, 86, 86, 1297, 86, 86, 86, 86, - 1300, 1298, 1306, 1303, 1308, 1301, 86, 86, 1313, 1305, + 86, 1266, 1264, 1267, 1258, 86, 86, 86, 86, 86, + 1261, 1268, 86, 1265, 86, 1271, 1262, 1269, 1263, 1270, + 1274, 86, 86, 1272, 1276, 86, 86, 1275, 1273, 86, + 86, 86, 86, 86, 86, 86, 1281, 1282, 1277, 1278, + 86, 86, 86, 86, 1288, 1284, 1283, 1289, 86, 1279, + 86, 1280, 86, 86, 1286, 1292, 86, 1291, 86, 1285, + 86, 86, 1287, 1290, 1296, 86, 86, 86, 86, 86, + 86, 1302, 86, 1295, 1294, 1298, 86, 1293, 170, 86, + 86, 1303, 86, 1297, 1304, 86, 1299, 86, 86, 1301, + 86, 86, 1309, 170, 1300, 1307, 1306, 1308, 1305, 1310, - 1312, 1304, 1317, 1309, 86, 1310, 86, 1307, 1311, 1314, - 1315, 86, 86, 1316, 86, 1318, 86, 86, 86, 86, - 86, 86, 86, 1322, 86, 86, 1321, 1325, 1329, 86, - 86, 168, 1324, 1319, 1320, 1326, 1327, 86, 1323, 86, - 86, 86, 1330, 1328, 1331, 1333, 86, 86, 86, 86, - 1332, 1334, 86, 86, 86, 1335, 1336, 86, 86, 86, - 1341, 86, 86, 1337, 1339, 86, 86, 86, 1338, 1340, - 1342, 1346, 86, 86, 86, 86, 1343, 1347, 86, 1345, - 1344, 1350, 86, 86, 86, 1358, 1348, 1349, 1351, 86, - 1353, 86, 86, 1352, 1354, 86, 86, 86, 1356, 86, + 1311, 86, 86, 1313, 1314, 86, 86, 1315, 1312, 86, + 86, 1316, 86, 86, 1317, 86, 1319, 86, 1318, 1320, + 1321, 86, 86, 86, 86, 1327, 86, 86, 86, 1324, + 86, 86, 1322, 86, 86, 86, 1468, 1331, 1325, 1337, + 1323, 1328, 86, 1326, 86, 1330, 1329, 1333, 86, 1338, + 86, 1340, 86, 1332, 86, 1339, 1334, 86, 1335, 86, + 86, 1336, 1343, 1344, 1341, 86, 86, 86, 1342, 86, + 86, 1347, 86, 86, 1346, 1350, 86, 86, 1345, 1354, + 86, 1349, 1355, 1352, 86, 86, 1348, 1351, 86, 1356, + 86, 86, 86, 1358, 1359, 1353, 86, 86, 86, 86, - 1361, 86, 86, 1360, 1357, 86, 1364, 1355, 86, 1366, - 1359, 1365, 86, 1363, 1367, 86, 1362, 86, 1371, 1369, - 86, 1368, 1381, 86, 1565, 1370, 86, 1372, 86, 86, - 1382, 1373, 1380, 1379, 1374, 1375, 86, 86, 1385, 1376, - 86, 1383, 86, 86, 86, 1377, 1384, 1386, 1387, 1378, - 86, 1388, 86, 1390, 86, 86, 86, 1391, 86, 1392, - 86, 1389, 86, 86, 86, 1400, 1401, 1395, 1397, 166, - 86, 86, 86, 86, 1394, 1393, 1398, 86, 1402, 1404, - 1396, 1403, 1399, 86, 1405, 86, 1406, 86, 1407, 1413, - 1408, 86, 1409, 1410, 1411, 86, 86, 86, 1412, 1417, + 1360, 86, 86, 86, 86, 1357, 86, 1361, 1366, 86, + 1364, 1362, 86, 86, 1365, 1367, 1363, 86, 1371, 86, + 86, 1368, 86, 86, 1370, 1369, 86, 86, 1372, 1373, + 86, 1375, 86, 86, 1376, 1378, 1383, 1374, 86, 1377, + 86, 86, 86, 86, 86, 1379, 1386, 1381, 1384, 1389, + 1382, 86, 1380, 86, 1385, 86, 1406, 86, 86, 1388, + 1391, 1387, 86, 1390, 168, 1392, 86, 86, 1396, 1394, + 1395, 1404, 1393, 86, 1397, 86, 86, 1407, 1398, 86, + 86, 1399, 1400, 1410, 1405, 1408, 1401, 86, 1409, 86, + 86, 86, 1402, 86, 86, 1411, 1403, 86, 1412, 86, - 86, 1415, 86, 86, 1418, 86, 1416, 86, 1421, 1419, - 1414, 86, 86, 86, 86, 86, 1427, 86, 1428, 86, - 1423, 1422, 86, 1429, 1420, 86, 86, 86, 1426, 86, - 1431, 1424, 1425, 1430, 86, 86, 1433, 86, 1437, 86, - 1432, 86, 1436, 1439, 86, 86, 86, 1434, 1440, 86, - 1438, 86, 1441, 86, 1444, 86, 1442, 1445, 86, 1435, - 1443, 1447, 86, 86, 1448, 86, 86, 1452, 86, 86, - 1449, 86, 86, 1446, 1454, 86, 1450, 86, 86, 86, - 1456, 1458, 86, 86, 164, 1460, 1457, 1451, 86, 1453, - 86, 86, 1455, 1462, 86, 86, 1459, 86, 1461, 1464, + 1413, 86, 1415, 86, 86, 86, 1420, 1416, 1414, 1417, + 1422, 1418, 1419, 86, 86, 1425, 1426, 86, 86, 86, + 1486, 86, 86, 1421, 1427, 86, 1429, 1423, 86, 1428, + 86, 1430, 1424, 1431, 86, 1432, 86, 1433, 86, 1434, + 86, 1436, 1435, 1437, 1438, 86, 86, 1439, 1442, 1440, + 86, 1444, 86, 1441, 86, 86, 1445, 86, 86, 1443, + 1448, 1446, 86, 86, 86, 86, 86, 1454, 86, 1455, + 86, 1450, 1449, 86, 1456, 86, 1447, 86, 86, 1453, + 1458, 86, 1451, 1452, 1457, 86, 86, 1460, 1461, 86, + 86, 1459, 1465, 86, 1464, 1467, 86, 86, 86, 86, - 86, 86, 1466, 1465, 1463, 1467, 86, 1468, 86, 1470, - 86, 86, 86, 1469, 1473, 1474, 1471, 1475, 1472, 86, - 1477, 86, 86, 86, 1476, 86, 86, 86, 1481, 86, - 86, 1478, 1482, 86, 168, 86, 1488, 1489, 1480, 86, - 1491, 86, 86, 86, 1479, 1490, 86, 86, 1483, 1485, - 86, 86, 86, 1486, 86, 1492, 86, 1499, 1487, 86, - 86, 1493, 86, 1496, 86, 86, 1497, 1494, 86, 1503, - 1495, 86, 1498, 1504, 86, 86, 1506, 1508, 86, 1500, - 1502, 86, 1509, 86, 86, 1501, 1512, 1507, 1505, 86, - 1511, 86, 86, 1510, 86, 86, 86, 1517, 1513, 86, + 1469, 86, 86, 1462, 1470, 1466, 1473, 86, 1475, 86, + 1472, 1463, 86, 1476, 86, 86, 86, 1471, 86, 1477, + 1480, 86, 1474, 86, 86, 86, 1482, 86, 86, 86, + 1484, 86, 1488, 86, 86, 166, 1478, 1479, 1481, 1490, + 1485, 86, 86, 1489, 1483, 1487, 1492, 1491, 86, 86, + 1493, 86, 1495, 1494, 86, 1497, 1496, 86, 86, 86, + 86, 86, 1498, 1503, 1504, 1500, 86, 1501, 86, 86, + 86, 1505, 1506, 86, 1502, 86, 1499, 1507, 86, 1510, + 86, 86, 86, 170, 86, 86, 1509, 1517, 1518, 86, + 1520, 86, 1508, 86, 86, 1519, 86, 86, 1514, 86, - 1518, 1520, 1522, 1519, 1514, 86, 1515, 86, 86, 1516, - 1521, 1523, 1525, 86, 1527, 86, 1524, 1526, 86, 86, - 86, 86, 86, 86, 1530, 1531, 86, 86, 1534, 86, - 86, 86, 1539, 1529, 86, 86, 86, 86, 1540, 1528, - 1532, 1533, 86, 1536, 1543, 1537, 1535, 86, 1538, 1544, - 86, 86, 86, 1541, 86, 1542, 86, 86, 86, 86, - 86, 1545, 1547, 1550, 1551, 1546, 86, 1548, 1554, 86, - 1555, 1552, 86, 1549, 1553, 1556, 86, 86, 1559, 1560, - 1561, 1557, 86, 86, 86, 86, 86, 1563, 86, 86, - 1564, 86, 1568, 1569, 1567, 1570, 1558, 1562, 86, 86, + 1512, 1511, 86, 86, 1515, 1521, 86, 86, 1516, 86, + 1528, 1522, 86, 86, 1525, 1533, 86, 1523, 86, 1524, + 1526, 1527, 86, 1532, 86, 86, 86, 1529, 1537, 1535, + 86, 1531, 86, 1538, 86, 1540, 86, 1530, 86, 86, + 1541, 86, 86, 86, 1536, 1534, 1546, 86, 1539, 1547, + 1542, 1548, 86, 1543, 1544, 86, 86, 1545, 1549, 1551, + 86, 1550, 1554, 1553, 1552, 86, 86, 1555, 86, 1557, + 86, 86, 86, 86, 1556, 1559, 1560, 86, 86, 86, + 86, 86, 1563, 86, 1558, 86, 1568, 1569, 86, 86, + 1561, 86, 86, 1562, 1565, 1572, 86, 1566, 1564, 1567, - 1575, 86, 86, 1566, 86, 1571, 86, 1572, 1573, 86, - 86, 86, 86, 86, 1574, 86, 86, 1581, 86, 86, - 1576, 86, 1580, 1577, 86, 86, 1578, 1583, 1579, 1584, - 86, 1587, 86, 1592, 1589, 1585, 1588, 86, 1582, 1590, - 86, 86, 86, 86, 1586, 86, 86, 86, 86, 1600, - 1591, 1596, 1595, 86, 86, 86, 1603, 86, 1601, 86, - 1593, 1594, 86, 1606, 1597, 1605, 1599, 1598, 86, 86, - 86, 86, 86, 86, 86, 86, 1604, 86, 86, 1614, - 1602, 86, 1786, 86, 1615, 1617, 86, 1607, 1611, 1608, - 1609, 1610, 1613, 86, 1612, 1616, 1618, 86, 1619, 86, + 86, 86, 86, 1573, 86, 86, 1570, 86, 1571, 86, + 1575, 1574, 1579, 86, 86, 1576, 1580, 1577, 1581, 86, + 86, 1584, 86, 1578, 86, 1587, 86, 1588, 1583, 1589, + 1590, 86, 1582, 1586, 86, 86, 86, 1585, 1592, 86, + 1593, 86, 86, 86, 1597, 1591, 1598, 1599, 1596, 86, + 86, 165, 86, 86, 86, 1600, 86, 1594, 86, 1601, + 1602, 86, 86, 1595, 86, 1604, 1603, 1605, 86, 86, + 86, 86, 1610, 86, 86, 86, 1606, 1609, 86, 1613, + 86, 1616, 1607, 1612, 1608, 1618, 1617, 86, 86, 86, + 1619, 86, 1614, 1611, 86, 1621, 86, 86, 1624, 1615, - 86, 86, 86, 1620, 86, 86, 86, 1624, 86, 86, - 1622, 1625, 86, 1621, 1628, 1623, 86, 1632, 86, 163, - 86, 1629, 1627, 1634, 1626, 1633, 86, 1635, 1630, 86, - 86, 86, 1631, 86, 86, 1637, 86, 1638, 1639, 1636, - 86, 1643, 1644, 86, 86, 86, 1649, 86, 86, 86, - 1648, 1640, 86, 1647, 1641, 86, 1651, 86, 86, 86, - 1642, 1652, 1645, 1653, 86, 86, 1646, 86, 86, 86, - 86, 1656, 86, 1659, 86, 1650, 86, 86, 1658, 1657, - 86, 1654, 86, 1655, 86, 1660, 86, 1663, 86, 1665, - 1664, 86, 86, 1666, 86, 1661, 1662, 86, 1667, 86, + 86, 86, 86, 86, 1629, 1625, 86, 86, 1620, 86, + 86, 1630, 1632, 86, 86, 1622, 1623, 1635, 86, 1634, + 1626, 1628, 1627, 86, 86, 86, 86, 86, 1633, 86, + 1643, 86, 86, 1631, 86, 1641, 86, 86, 86, 1644, + 86, 1648, 86, 1636, 1637, 1638, 1639, 1642, 1640, 86, + 1645, 1652, 1647, 1649, 86, 86, 1646, 86, 1653, 86, + 1650, 1651, 86, 86, 1655, 86, 86, 86, 1656, 86, + 86, 1659, 1654, 1663, 86, 1664, 1665, 86, 1660, 86, + 86, 1657, 86, 1658, 1668, 1662, 86, 1661, 86, 86, + 1669, 86, 1666, 1667, 86, 1670, 86, 86, 1675, 1676, - 1670, 1668, 1673, 86, 1675, 86, 1671, 86, 86, 86, - 1678, 1676, 1672, 86, 86, 86, 1669, 86, 1674, 1681, - 86, 86, 1684, 86, 86, 1680, 1683, 168, 1677, 1686, - 86, 86, 86, 1685, 86, 1679, 1682, 86, 1694, 86, - 86, 86, 86, 1687, 86, 1689, 1695, 86, 1688, 1698, - 86, 1690, 1691, 1692, 86, 86, 1699, 1702, 86, 1693, - 1696, 86, 1697, 1700, 1701, 1704, 1703, 1706, 86, 1708, - 86, 86, 86, 86, 1705, 86, 86, 86, 86, 86, - 1713, 1710, 1707, 1711, 86, 1714, 86, 86, 86, 1718, - 86, 1709, 86, 1719, 86, 1716, 86, 86, 1726, 86, + 86, 86, 163, 1673, 86, 86, 86, 1672, 1671, 86, + 1679, 86, 1680, 1681, 86, 1677, 1674, 1683, 86, 86, + 86, 86, 1678, 1684, 1685, 86, 1682, 86, 86, 1689, + 1686, 1688, 86, 1691, 86, 86, 1690, 1687, 86, 86, + 86, 86, 1697, 86, 1695, 86, 86, 86, 86, 1692, + 86, 1703, 1698, 86, 1696, 86, 1693, 1694, 86, 86, + 86, 1700, 1709, 1699, 1706, 1708, 86, 1704, 1702, 86, + 86, 1711, 1701, 1705, 86, 1707, 86, 86, 86, 86, + 86, 1714, 1717, 86, 1716, 86, 170, 1713, 86, 1710, + 1719, 86, 86, 1718, 86, 86, 1712, 1715, 86, 1727, - 1712, 1715, 1723, 1717, 86, 1724, 1721, 86, 1720, 86, - 86, 161, 1727, 1728, 86, 1735, 1722, 1725, 1730, 1731, - 86, 86, 1732, 1733, 1734, 86, 1736, 86, 86, 1729, - 86, 1738, 86, 1737, 86, 1739, 1740, 86, 86, 86, - 1742, 86, 86, 1741, 86, 1747, 1748, 1746, 86, 86, - 1750, 86, 86, 1749, 86, 1743, 86, 86, 1744, 1752, - 86, 1745, 1753, 86, 86, 1754, 86, 86, 86, 86, - 86, 86, 1751, 86, 86, 1755, 1764, 1763, 86, 86, - 86, 1758, 1759, 1760, 1756, 86, 1757, 1769, 1761, 86, - 86, 1766, 1767, 86, 86, 86, 1762, 1765, 1768, 86, + 86, 86, 1720, 86, 86, 1722, 1721, 86, 1725, 1728, + 86, 1723, 1724, 1731, 86, 1733, 1732, 86, 86, 1742, + 1726, 1729, 86, 1730, 1735, 86, 1737, 1739, 86, 86, + 1736, 86, 86, 86, 1741, 86, 1744, 1734, 1738, 86, + 86, 1746, 1740, 86, 1747, 1743, 86, 86, 86, 86, + 86, 1752, 1751, 1745, 86, 86, 86, 86, 1759, 86, + 1748, 86, 1760, 1750, 86, 1749, 86, 1754, 86, 1761, + 1763, 1756, 1753, 86, 1757, 86, 1755, 86, 1764, 1796, + 1766, 1767, 86, 1768, 1765, 1762, 1758, 1769, 1773, 86, + 86, 86, 1771, 86, 86, 1770, 86, 1772, 86, 86, - 1775, 86, 86, 86, 86, 86, 1771, 86, 1777, 1770, - 86, 1779, 86, 1773, 1772, 86, 1774, 1778, 86, 1780, - 86, 1781, 1776, 86, 86, 86, 86, 1784, 86, 1794, - 86, 1793, 86, 1783, 1787, 1785, 1782, 1788, 86, 1789, - 86, 1790, 1795, 86, 1796, 86, 1791, 86, 1798, 1792, - 1799, 86, 86, 1800, 86, 86, 1797, 1802, 86, 1803, - 86, 86, 86, 86, 1811, 86, 1801, 1806, 1812, 86, - 86, 1810, 1808, 86, 1804, 1809, 1805, 86, 86, 86, - 1807, 86, 86, 86, 86, 1813, 1814, 86, 1821, 86, - 159, 1818, 1816, 86, 86, 1815, 86, 1817, 1823, 1824, + 86, 86, 86, 1774, 86, 1780, 86, 1779, 1781, 86, + 86, 86, 1775, 1783, 86, 1782, 86, 86, 1776, 86, + 1777, 1785, 1778, 1786, 86, 86, 86, 1788, 86, 1784, + 1787, 86, 86, 86, 86, 86, 86, 1789, 1797, 86, + 86, 86, 1791, 86, 86, 1792, 1790, 1793, 86, 1802, + 1794, 1799, 1800, 86, 1798, 86, 1801, 86, 86, 1795, + 1804, 1803, 1808, 86, 86, 86, 86, 1806, 1805, 86, + 1810, 86, 1812, 1813, 86, 86, 86, 86, 1807, 86, + 1814, 1811, 86, 86, 1809, 1817, 1819, 86, 86, 1827, + 86, 1820, 1818, 1816, 1821, 1828, 86, 86, 1815, 1822, - 1822, 1820, 86, 1825, 86, 1827, 86, 1819, 1828, 1829, - 86, 1830, 86, 1833, 86, 86, 86, 1826, 1834, 86, - 86, 1838, 1841, 86, 1839, 1842, 1835, 1831, 1832, 1836, - 86, 86, 86, 86, 86, 1844, 86, 1837, 1840, 1843, - 1848, 86, 1845, 86, 1852, 86, 86, 1847, 1850, 86, - 86, 86, 1846, 86, 1851, 86, 1849, 1853, 86, 86, - 86, 86, 86, 1856, 86, 1862, 86, 1857, 86, 1864, - 1854, 1865, 1855, 1858, 1859, 86, 1860, 86, 1861, 1867, - 86, 1866, 86, 86, 86, 86, 1872, 1863, 86, 86, - 86, 86, 86, 1876, 86, 86, 86, 86, 1871, 1878, + 1826, 86, 1823, 86, 86, 86, 86, 1824, 1831, 1832, + 86, 86, 86, 1825, 86, 1829, 1835, 1833, 86, 1830, + 86, 86, 1844, 1836, 86, 1834, 86, 86, 86, 1839, + 1838, 1837, 86, 1841, 86, 1843, 1842, 1845, 86, 86, + 1840, 86, 86, 1851, 86, 1847, 86, 1846, 1852, 86, + 86, 1853, 1848, 1849, 1854, 86, 1857, 1850, 86, 86, + 86, 86, 86, 1861, 1860, 1865, 86, 86, 1856, 1855, + 1859, 86, 86, 86, 1858, 1863, 1869, 1862, 1864, 86, + 86, 1870, 86, 86, 161, 1866, 86, 1871, 1874, 1875, + 1868, 86, 1867, 1878, 1872, 86, 1877, 86, 86, 86, - 3314, 1869, 1868, 1870, 86, 1874, 1882, 86, 1875, 1879, - 1873, 1877, 1880, 86, 86, 168, 86, 86, 1881, 1883, - 1885, 1888, 86, 1884, 86, 86, 86, 1886, 1892, 86, - 86, 1887, 86, 86, 86, 86, 86, 1890, 86, 1894, - 86, 3314, 1899, 1889, 1893, 1891, 1895, 1896, 86, 86, - 1900, 3314, 1897, 1903, 86, 1902, 1898, 86, 1901, 86, - 1904, 1905, 86, 86, 1906, 1908, 1909, 86, 86, 86, - 86, 86, 1907, 86, 86, 1911, 86, 1912, 86, 86, - 1910, 86, 86, 86, 1917, 86, 1918, 86, 86, 1913, - 86, 1919, 1914, 1922, 1915, 1920, 1916, 86, 86, 1923, + 1881, 86, 1873, 1879, 1876, 1880, 86, 1882, 86, 86, + 1885, 86, 86, 1889, 86, 1887, 86, 86, 86, 86, + 86, 1888, 1890, 1884, 1886, 86, 86, 86, 1883, 1894, + 86, 86, 1901, 1893, 1899, 86, 1891, 1892, 86, 1895, + 1896, 1902, 86, 86, 1897, 1898, 86, 86, 1904, 86, + 86, 1908, 86, 86, 1910, 1903, 1900, 86, 86, 86, + 86, 1914, 86, 1905, 1906, 86, 1909, 86, 86, 1907, + 86, 1916, 86, 1917, 1912, 1918, 86, 1913, 86, 1911, + 86, 1919, 170, 86, 86, 1915, 1923, 1920, 86, 1922, + 1926, 86, 86, 86, 1924, 1921, 1930, 86, 86, 1925, - 1921, 86, 1926, 1928, 1930, 86, 86, 1925, 1931, 1927, - 86, 86, 1924, 86, 86, 86, 1929, 86, 86, 86, - 1937, 86, 86, 86, 1940, 1941, 86, 1932, 86, 1933, - 3314, 1934, 86, 1935, 1946, 1936, 1938, 1953, 1939, 1942, - 86, 1943, 1944, 86, 86, 1945, 1948, 86, 86, 1947, - 1950, 86, 1949, 1952, 1951, 1954, 86, 1955, 86, 86, - 86, 86, 86, 1956, 1957, 86, 86, 1959, 1960, 86, - 86, 86, 86, 1964, 86, 86, 1963, 1966, 1958, 1965, - 86, 1961, 86, 86, 86, 86, 1974, 1967, 1968, 1969, - 86, 1962, 86, 1976, 1970, 86, 1978, 86, 1977, 86, + 86, 86, 86, 86, 1928, 1932, 86, 1927, 86, 86, + 1937, 86, 1929, 1933, 1931, 1934, 86, 1940, 1941, 86, + 1938, 1935, 86, 1943, 86, 1942, 1936, 1939, 86, 86, + 1946, 1947, 86, 1944, 86, 86, 86, 1949, 1945, 86, + 86, 86, 1950, 86, 86, 86, 1948, 86, 86, 86, + 1955, 86, 1956, 86, 86, 86, 1960, 1957, 86, 86, + 1951, 1953, 1954, 1952, 1959, 1958, 86, 1961, 86, 86, + 1967, 1964, 86, 1966, 1963, 1968, 86, 1969, 1965, 86, + 1962, 86, 86, 86, 86, 86, 1975, 86, 1978, 86, + 1970, 1971, 1979, 86, 1980, 86, 86, 1973, 1972, 1976, - 1971, 86, 1972, 1980, 86, 1973, 1981, 1983, 86, 86, - 1975, 86, 1979, 86, 1987, 86, 86, 1984, 86, 1982, - 86, 1989, 86, 86, 1992, 1993, 86, 86, 86, 1985, - 1995, 86, 1986, 86, 86, 2000, 86, 86, 1990, 2001, - 86, 86, 1988, 1997, 1991, 1998, 86, 1994, 86, 86, - 86, 86, 2007, 1996, 1999, 2004, 86, 86, 2002, 2005, - 86, 2003, 2011, 86, 86, 2010, 2014, 86, 86, 86, - 2015, 2013, 86, 2009, 2017, 2006, 86, 2016, 86, 86, - 86, 86, 2008, 2012, 86, 86, 86, 2019, 2018, 2022, - 86, 2025, 2026, 2021, 2027, 86, 86, 86, 86, 2020, + 86, 1977, 1974, 1982, 86, 86, 1983, 1986, 86, 1981, + 86, 86, 1988, 86, 1987, 86, 1989, 1984, 86, 1990, + 1992, 1985, 1995, 86, 86, 86, 86, 1994, 86, 1991, + 86, 1998, 86, 86, 86, 1997, 86, 86, 2002, 86, + 1993, 2001, 86, 86, 2003, 2004, 86, 86, 1996, 1999, + 86, 86, 2012, 86, 2000, 2005, 2006, 2007, 86, 2014, + 2010, 86, 2008, 86, 2015, 86, 2009, 2011, 2017, 86, + 2013, 2018, 86, 2021, 2019, 2016, 86, 86, 86, 86, + 2025, 86, 86, 86, 2027, 2022, 86, 2020, 86, 86, + 2030, 2031, 86, 86, 2033, 86, 86, 2023, 86, 2024, - 86, 86, 2023, 86, 86, 2030, 2035, 86, 86, 2034, - 86, 2024, 2029, 86, 86, 2028, 2032, 86, 2039, 2042, - 86, 2031, 86, 2040, 86, 2033, 86, 2036, 2037, 2038, - 2043, 2041, 2046, 86, 86, 2044, 86, 86, 86, 86, - 2045, 86, 2053, 2050, 86, 86, 2056, 86, 86, 2055, - 2048, 86, 2057, 86, 86, 2047, 2049, 2058, 86, 2051, - 2054, 2052, 86, 2059, 2063, 86, 2064, 86, 86, 2060, - 2065, 2067, 2068, 86, 2061, 2066, 86, 86, 86, 86, - 2072, 86, 2062, 86, 2070, 2071, 86, 2074, 86, 86, - 2077, 86, 2079, 2073, 2069, 86, 86, 86, 86, 168, + 86, 86, 2039, 86, 86, 2038, 2028, 2035, 2026, 2036, + 2029, 86, 86, 2032, 86, 86, 86, 86, 2045, 86, + 86, 2034, 2037, 2042, 2043, 2040, 86, 2041, 2049, 86, + 86, 2048, 2052, 86, 86, 2053, 2047, 2051, 86, 86, + 2044, 2055, 2056, 86, 86, 2046, 86, 86, 86, 2050, + 86, 2057, 86, 2058, 86, 86, 86, 2062, 2054, 86, + 2065, 2066, 86, 86, 2061, 2067, 86, 86, 2059, 2060, + 2070, 86, 86, 2063, 86, 86, 86, 2069, 2075, 86, + 2074, 86, 2064, 2068, 86, 86, 2071, 86, 2080, 2079, + 86, 86, 2072, 86, 2084, 2076, 2073, 2081, 86, 2077, - 2075, 86, 86, 3314, 2082, 86, 86, 2086, 86, 86, - 2088, 2087, 86, 2078, 2076, 2081, 2080, 2083, 2084, 2092, - 2085, 2089, 86, 2090, 86, 86, 86, 86, 86, 86, - 86, 2094, 2091, 2093, 2095, 2097, 86, 86, 2096, 2098, - 86, 2100, 86, 86, 86, 86, 2104, 86, 86, 2099, - 2103, 86, 86, 2105, 2101, 2102, 2106, 2107, 86, 2109, - 86, 2108, 86, 86, 86, 86, 86, 86, 2110, 2114, - 2116, 2111, 2115, 86, 86, 86, 86, 86, 86, 2121, - 86, 2112, 2118, 2113, 2117, 86, 86, 2125, 86, 2120, - 2122, 86, 2119, 86, 2124, 2123, 86, 2126, 86, 86, + 2078, 86, 2082, 2083, 86, 2087, 86, 86, 86, 2085, + 86, 86, 86, 2094, 2086, 2091, 2097, 86, 86, 86, + 86, 2089, 2088, 86, 2098, 2096, 86, 2090, 86, 86, + 2099, 2092, 2093, 2095, 86, 2104, 86, 2100, 2105, 86, + 2101, 2106, 2108, 2109, 86, 2102, 2107, 86, 86, 86, + 86, 86, 2113, 86, 2103, 2111, 86, 86, 86, 86, + 2115, 2118, 2120, 2112, 86, 2114, 86, 86, 86, 2116, + 2110, 86, 170, 86, 86, 86, 86, 2123, 86, 2127, + 86, 2128, 86, 2129, 2117, 2121, 2119, 2124, 2125, 2130, + 86, 2122, 2126, 2131, 86, 2133, 86, 86, 86, 86, - 2127, 2129, 86, 2130, 2134, 2128, 2132, 86, 86, 86, - 2138, 2133, 2131, 86, 86, 86, 86, 2141, 2135, 86, - 2140, 2142, 86, 86, 2136, 86, 86, 2137, 2144, 86, - 2148, 2139, 2147, 2143, 86, 2145, 86, 86, 86, 86, - 86, 2152, 86, 86, 2149, 86, 2146, 86, 86, 86, - 86, 2153, 86, 86, 86, 86, 2161, 2155, 86, 2151, - 2150, 2156, 2157, 86, 2154, 2158, 86, 2160, 86, 2162, - 2165, 2166, 86, 86, 2159, 2163, 2169, 2164, 86, 86, - 86, 2167, 2173, 2170, 2172, 86, 2168, 86, 2171, 86, - 86, 86, 2175, 86, 86, 86, 2176, 2181, 86, 2177, + 2132, 86, 2134, 2135, 86, 2136, 2137, 86, 86, 2138, + 2139, 86, 2141, 86, 86, 86, 86, 2145, 86, 86, + 2140, 2144, 86, 86, 2146, 2142, 2143, 2147, 2148, 86, + 2150, 86, 2149, 86, 86, 86, 86, 86, 86, 2151, + 2155, 2157, 2152, 2156, 86, 86, 86, 86, 86, 86, + 2162, 86, 2153, 2159, 2154, 2158, 86, 86, 2167, 86, + 2161, 2163, 86, 2160, 86, 2165, 2164, 86, 2168, 86, + 86, 2166, 2171, 2174, 2169, 2173, 86, 86, 86, 86, + 86, 2179, 2172, 86, 86, 2170, 2182, 86, 86, 2181, + 2183, 86, 86, 2175, 2176, 2177, 2180, 2178, 2185, 86, - 86, 86, 2179, 2174, 86, 86, 2180, 2183, 86, 2178, - 2185, 86, 86, 2187, 2184, 86, 86, 2182, 2188, 86, - 2189, 86, 2191, 2193, 2190, 86, 2194, 2186, 86, 86, - 86, 86, 2192, 2199, 86, 86, 2196, 86, 2195, 86, - 2200, 2203, 86, 86, 2205, 2198, 86, 86, 2204, 2197, - 2201, 86, 2209, 86, 86, 86, 2211, 2202, 86, 2207, - 86, 2212, 86, 2214, 2206, 86, 2210, 2208, 86, 86, - 86, 2213, 2218, 2220, 86, 86, 86, 2216, 2221, 86, - 2217, 86, 86, 2215, 2222, 86, 2223, 2225, 2224, 86, - 2219, 86, 2230, 86, 2226, 86, 86, 86, 2227, 86, + 2184, 86, 2186, 86, 86, 2189, 86, 86, 86, 86, + 2188, 86, 86, 2190, 86, 2193, 86, 86, 2194, 86, + 86, 86, 86, 86, 86, 86, 2187, 86, 2192, 2191, + 2202, 2196, 2197, 2195, 2199, 86, 2198, 2204, 2201, 2206, + 2207, 86, 2200, 2203, 86, 86, 86, 86, 2205, 2210, + 2211, 86, 86, 2208, 2214, 86, 2213, 86, 86, 86, + 86, 86, 2216, 86, 2209, 2217, 86, 2212, 2218, 86, + 2220, 2222, 86, 2215, 2224, 2221, 86, 86, 2219, 2226, + 86, 86, 86, 86, 2229, 2223, 2228, 86, 2230, 86, + 2225, 86, 2231, 2234, 86, 86, 86, 86, 86, 86, - 2229, 2228, 86, 86, 86, 86, 86, 86, 86, 86, - 2239, 2234, 2240, 2231, 2232, 2233, 2236, 2235, 2237, 86, - 86, 86, 86, 2238, 2246, 86, 2242, 2244, 2241, 86, - 86, 2245, 2250, 86, 86, 2252, 86, 86, 2249, 2243, - 2247, 2254, 86, 2251, 86, 86, 2258, 2255, 168, 2253, - 2248, 3314, 86, 2260, 2262, 2263, 86, 2256, 2261, 86, - 86, 86, 86, 86, 2257, 2264, 2267, 86, 86, 2268, - 2259, 2265, 86, 2272, 86, 86, 2266, 86, 2273, 86, - 2276, 2271, 2281, 2269, 86, 86, 86, 2274, 86, 2277, - 86, 2278, 2279, 86, 2270, 86, 86, 2275, 86, 86, + 2235, 86, 86, 2227, 86, 2240, 2237, 2232, 2238, 2236, + 86, 2233, 2310, 2239, 86, 2242, 86, 2241, 2243, 86, + 86, 2244, 2246, 2247, 86, 2245, 86, 86, 86, 86, + 2249, 2248, 2251, 86, 2250, 2253, 86, 86, 2255, 2254, + 2252, 86, 2256, 86, 86, 86, 86, 86, 2262, 2258, + 2264, 2259, 2257, 86, 2260, 2265, 86, 2261, 86, 86, + 86, 86, 86, 86, 86, 2266, 2270, 2267, 2263, 2271, + 86, 2268, 2269, 2275, 86, 2272, 86, 86, 86, 2274, + 86, 86, 86, 2273, 86, 86, 86, 86, 86, 86, + 2284, 86, 2279, 2281, 2276, 2277, 2278, 2280, 2282, 86, - 2280, 86, 2282, 2284, 86, 2283, 86, 86, 86, 2287, - 86, 86, 86, 2290, 86, 86, 2285, 2296, 86, 2294, - 86, 86, 2289, 86, 2297, 86, 2286, 2292, 2291, 2288, - 2299, 86, 2293, 86, 86, 86, 2298, 2295, 2301, 86, - 2304, 86, 2307, 86, 86, 2302, 86, 86, 86, 2300, - 86, 86, 2305, 2303, 2308, 86, 86, 86, 86, 2306, - 3314, 86, 86, 2309, 86, 86, 2310, 2320, 2315, 2323, - 2313, 2311, 86, 2317, 2312, 2318, 2314, 86, 2316, 2319, - 86, 86, 2321, 2322, 86, 86, 2326, 86, 2324, 2330, - 2325, 86, 2328, 86, 2327, 2329, 86, 2331, 86, 86, + 86, 86, 2301, 86, 2283, 2285, 2291, 2287, 2286, 2289, + 2290, 86, 86, 2293, 2295, 86, 86, 2297, 86, 86, + 2288, 2294, 86, 86, 86, 2296, 2299, 2303, 2300, 2292, + 170, 2305, 3387, 86, 2307, 2308, 2306, 86, 2298, 86, + 86, 86, 2309, 2302, 86, 2312, 86, 86, 2313, 86, + 2317, 86, 2304, 86, 2318, 86, 86, 2321, 2316, 86, + 86, 86, 2314, 86, 2311, 2322, 2325, 2319, 86, 2323, + 2324, 86, 2326, 2315, 2320, 86, 86, 86, 86, 2327, + 86, 2329, 86, 86, 2331, 86, 86, 2332, 86, 86, + 2335, 86, 86, 86, 2341, 86, 2328, 2339, 86, 86, - 86, 2334, 86, 2337, 86, 2338, 86, 86, 2332, 86, - 86, 2335, 2333, 86, 2336, 2339, 86, 86, 2340, 2344, - 86, 2345, 86, 2347, 86, 86, 86, 2341, 2343, 2342, - 2349, 86, 86, 2352, 86, 86, 2346, 2351, 2353, 86, - 86, 2350, 86, 2348, 86, 86, 2359, 86, 86, 2354, - 2358, 2355, 2361, 86, 2356, 86, 86, 86, 86, 2365, - 2364, 86, 2363, 2357, 2367, 86, 86, 2360, 86, 2371, - 86, 86, 86, 2362, 2366, 86, 2376, 86, 86, 86, - 2368, 2369, 2375, 86, 86, 86, 86, 2370, 2378, 86, - 2374, 2372, 2381, 86, 86, 2373, 2383, 86, 2377, 2379, + 2330, 2334, 2342, 86, 2337, 86, 2333, 2336, 2344, 86, + 86, 2338, 86, 86, 2343, 2340, 86, 2349, 86, 2352, + 86, 86, 2347, 86, 86, 86, 86, 2346, 86, 2350, + 86, 2345, 2348, 2353, 86, 86, 2351, 86, 86, 86, + 2354, 86, 2355, 2362, 86, 86, 2366, 2356, 2369, 2358, + 2357, 2360, 2364, 86, 2363, 2359, 2361, 2367, 86, 2365, + 86, 86, 86, 2434, 86, 2368, 86, 2373, 2374, 86, + 86, 86, 2375, 86, 2370, 86, 2371, 2372, 2376, 86, + 86, 2379, 2380, 2382, 86, 2381, 2377, 86, 2378, 2383, + 86, 86, 2384, 86, 86, 86, 2385, 2389, 86, 2390, - 2380, 86, 86, 86, 2388, 86, 2382, 86, 2384, 2390, - 86, 86, 86, 86, 2389, 2385, 2391, 2395, 86, 2386, - 86, 86, 2394, 2396, 86, 86, 86, 86, 2387, 2400, - 86, 2392, 2402, 2393, 2398, 2403, 2397, 86, 2405, 2407, - 86, 2399, 86, 86, 86, 86, 3314, 2406, 2408, 86, - 86, 2401, 2404, 2412, 2409, 2411, 86, 86, 86, 86, - 86, 86, 86, 2423, 86, 2410, 2413, 2414, 2415, 2416, - 2417, 2418, 2419, 2422, 2424, 86, 86, 86, 86, 2420, - 86, 2421, 86, 2425, 168, 2427, 86, 2428, 86, 2429, - 86, 2426, 86, 86, 2434, 86, 86, 86, 86, 86, + 86, 86, 2392, 86, 86, 2394, 86, 2388, 86, 3387, + 86, 2397, 86, 2386, 2387, 2396, 2398, 86, 86, 86, + 2391, 86, 2393, 2395, 86, 86, 2404, 86, 2400, 86, + 2403, 86, 2399, 2406, 86, 2401, 86, 86, 86, 2410, + 2409, 86, 2408, 2402, 2412, 86, 86, 86, 2405, 2407, + 86, 86, 2415, 86, 2411, 2418, 86, 86, 86, 86, + 2413, 2414, 2416, 86, 2423, 86, 86, 2422, 86, 86, + 2417, 2425, 86, 2419, 2421, 2428, 86, 2424, 86, 86, + 2420, 86, 86, 2426, 2427, 2430, 86, 2435, 86, 86, + 2441, 2437, 2429, 2431, 86, 86, 86, 2436, 2438, 2432, - 86, 2441, 86, 86, 86, 2436, 2432, 2435, 2430, 2433, - 2431, 2437, 86, 2438, 2440, 2439, 2444, 2442, 2445, 86, - 86, 2446, 86, 2443, 2447, 86, 86, 2449, 2450, 2448, - 2451, 86, 2453, 86, 86, 86, 86, 86, 2455, 86, - 2452, 86, 86, 86, 2459, 86, 2460, 86, 86, 2454, - 86, 2456, 86, 2462, 2463, 2457, 2469, 86, 86, 2461, - 2464, 2458, 2465, 86, 86, 2467, 2472, 86, 86, 2466, - 2468, 86, 2471, 86, 86, 86, 86, 86, 2470, 2474, - 86, 86, 86, 2481, 2478, 86, 2473, 2480, 86, 86, - 86, 2477, 86, 86, 2482, 2475, 2476, 86, 2486, 86, + 2433, 86, 86, 86, 86, 86, 2442, 2443, 2444, 86, + 2448, 86, 86, 2439, 86, 2440, 86, 2446, 2453, 2450, + 86, 2451, 2455, 86, 86, 86, 2445, 2452, 86, 86, + 2447, 86, 86, 86, 2456, 2460, 2457, 2449, 2459, 86, + 86, 2454, 2461, 86, 86, 86, 86, 2539, 2458, 2462, + 2466, 2467, 2463, 2464, 86, 86, 86, 86, 2468, 2465, + 86, 2471, 2472, 86, 2470, 86, 2469, 86, 86, 86, + 2473, 170, 2475, 86, 2476, 86, 2477, 86, 2474, 2482, + 86, 86, 86, 2480, 86, 2478, 86, 2479, 86, 86, + 2484, 2481, 2483, 86, 2485, 86, 2613, 86, 2489, 86, - 86, 2479, 86, 2483, 2491, 86, 86, 2490, 2493, 2484, - 86, 2485, 2488, 2492, 86, 2489, 86, 86, 2487, 86, - 2496, 86, 2501, 2494, 2497, 86, 2499, 86, 86, 86, - 2495, 2500, 2503, 86, 86, 86, 2505, 86, 86, 86, - 86, 2502, 86, 2498, 2504, 2509, 86, 2513, 86, 86, - 86, 2511, 2506, 2507, 2508, 2512, 2514, 86, 2515, 86, - 2516, 86, 86, 86, 86, 2517, 86, 2519, 2510, 2522, - 86, 86, 86, 2524, 86, 2527, 86, 86, 2521, 86, - 2523, 86, 2520, 2518, 2528, 86, 86, 2531, 86, 2526, - 2525, 2532, 86, 2533, 86, 86, 2529, 86, 86, 86, + 2486, 2487, 2490, 2493, 86, 2488, 86, 2494, 2491, 2495, + 86, 2492, 86, 86, 2498, 2496, 2499, 86, 2497, 86, + 86, 86, 86, 2501, 86, 86, 2500, 86, 2503, 86, + 86, 2507, 2508, 2502, 86, 2505, 86, 2504, 86, 2510, + 86, 86, 86, 86, 2511, 2512, 2513, 86, 2506, 86, + 2509, 86, 2515, 86, 2514, 2519, 86, 2518, 86, 86, + 2516, 2517, 86, 86, 2521, 86, 86, 86, 86, 2528, + 2525, 2520, 86, 2527, 86, 86, 86, 86, 2529, 2524, + 86, 86, 2522, 2523, 86, 2533, 86, 2526, 86, 86, + 86, 2538, 2530, 2537, 86, 2531, 2532, 86, 2535, 86, - 2537, 86, 2536, 2530, 2535, 86, 86, 86, 86, 86, - 3314, 2541, 2534, 2538, 2543, 2539, 86, 2540, 2544, 86, - 2545, 86, 2546, 86, 2547, 86, 2549, 2542, 2548, 86, - 86, 2551, 86, 2552, 2550, 86, 86, 86, 86, 2557, - 86, 86, 2559, 86, 2560, 86, 86, 2553, 2554, 86, - 86, 86, 86, 86, 2556, 86, 2563, 2555, 2562, 86, - 2558, 2561, 86, 2564, 2566, 2569, 86, 86, 86, 86, - 86, 2570, 2565, 2567, 86, 2568, 86, 86, 86, 2577, - 168, 86, 2573, 86, 2579, 86, 86, 2580, 2572, 86, - 2575, 86, 2578, 2571, 2574, 86, 2576, 86, 2586, 2583, + 2536, 2540, 2534, 2541, 2542, 86, 2543, 86, 86, 2546, + 2544, 2548, 86, 86, 86, 2545, 2547, 86, 2550, 86, + 2552, 86, 86, 2551, 86, 2549, 86, 86, 86, 86, + 86, 86, 2556, 2562, 2558, 2559, 2560, 86, 2554, 86, + 2553, 86, 2555, 2561, 86, 86, 2563, 2564, 86, 86, + 86, 86, 86, 2566, 2557, 2568, 86, 86, 2571, 86, + 2572, 2573, 2569, 2565, 86, 2576, 86, 86, 2567, 2570, + 86, 86, 3387, 2577, 2574, 86, 86, 2580, 86, 2575, + 2581, 86, 86, 2582, 86, 86, 86, 86, 2586, 2585, + 2578, 86, 86, 2579, 2584, 86, 86, 86, 86, 86, - 2581, 2582, 86, 86, 86, 2590, 86, 86, 2588, 2589, - 86, 2584, 2591, 86, 2585, 2595, 2587, 86, 2592, 86, - 2593, 86, 2594, 86, 86, 2598, 2597, 86, 86, 86, - 86, 86, 86, 86, 2596, 2605, 86, 86, 86, 2603, - 86, 2609, 2610, 86, 2599, 2600, 86, 86, 86, 2602, - 2601, 2604, 2606, 2611, 2607, 2608, 2613, 2614, 86, 86, - 86, 2616, 86, 86, 86, 86, 2617, 86, 2612, 2615, - 2619, 86, 86, 2625, 86, 2626, 86, 2618, 86, 2620, - 86, 86, 86, 2621, 2632, 2622, 2629, 2623, 2630, 86, - 86, 2624, 2631, 86, 86, 86, 86, 86, 2627, 2628, + 2583, 2587, 2590, 2593, 2589, 2588, 2594, 86, 2595, 86, + 2596, 86, 2597, 86, 86, 2591, 2592, 2599, 86, 86, + 2601, 86, 2602, 2600, 86, 86, 2598, 86, 86, 2607, + 86, 86, 2609, 86, 2610, 86, 2603, 2604, 86, 86, + 86, 86, 86, 86, 2606, 86, 86, 2605, 2616, 2611, + 2608, 2612, 2614, 2619, 86, 2620, 86, 86, 86, 86, + 86, 2615, 2617, 86, 86, 2618, 2627, 170, 86, 2629, + 86, 2623, 86, 86, 2625, 86, 86, 2622, 86, 2628, + 86, 2630, 2621, 2624, 86, 2626, 86, 2636, 2631, 3387, + 2632, 86, 2634, 86, 2633, 86, 2638, 86, 2639, 2647, - 2633, 86, 2637, 86, 86, 86, 86, 2641, 86, 2634, - 2636, 2640, 2642, 86, 2635, 86, 86, 2643, 2644, 86, - 86, 2638, 86, 2639, 2649, 2646, 86, 2645, 86, 86, - 86, 2650, 86, 86, 2648, 86, 2654, 2655, 86, 2647, - 2658, 86, 86, 86, 2656, 86, 2659, 86, 2651, 2652, - 86, 2661, 2653, 2657, 2662, 86, 86, 86, 2660, 86, - 2664, 2667, 86, 2663, 86, 86, 2671, 86, 86, 2670, - 86, 2668, 86, 2669, 2673, 86, 2665, 2666, 86, 2675, - 86, 2678, 86, 2674, 86, 2679, 86, 2672, 2676, 2681, - 86, 86, 2677, 86, 86, 86, 86, 2686, 86, 2688, + 2637, 2635, 2640, 86, 2641, 86, 86, 2642, 86, 2643, + 86, 2644, 86, 2645, 86, 86, 86, 2649, 86, 86, + 86, 86, 86, 2646, 2655, 86, 86, 2653, 86, 2648, + 86, 2659, 86, 2650, 2660, 86, 86, 86, 2651, 2652, + 2654, 2656, 2661, 2657, 2658, 2663, 2664, 86, 86, 2666, + 86, 86, 86, 86, 2662, 2667, 86, 2665, 86, 2669, + 86, 86, 2675, 86, 2676, 86, 86, 86, 2670, 2668, + 2680, 86, 86, 86, 2671, 86, 2672, 2673, 2679, 2674, + 2681, 86, 2682, 86, 86, 2678, 2677, 86, 86, 86, + 2684, 2683, 2687, 86, 86, 86, 86, 2691, 2686, 2690, - 86, 86, 86, 2684, 2682, 2685, 2683, 2689, 2680, 86, - 2687, 86, 86, 86, 2690, 2691, 2692, 86, 86, 86, - 2693, 86, 86, 86, 86, 3314, 2695, 2696, 2698, 2699, - 2701, 86, 2694, 2697, 2702, 86, 2700, 86, 2705, 168, - 86, 2704, 2703, 86, 86, 86, 2710, 2706, 2707, 86, - 86, 2712, 86, 86, 2711, 86, 2715, 86, 2716, 86, - 2714, 86, 2708, 2709, 2718, 86, 86, 2720, 2713, 2719, - 86, 86, 2721, 86, 2717, 2722, 2723, 86, 2725, 86, - 86, 86, 86, 2726, 86, 2727, 86, 86, 86, 2732, - 2728, 2724, 2733, 2734, 2730, 86, 86, 2729, 86, 86, + 2692, 86, 2685, 86, 86, 2693, 2694, 86, 86, 2688, + 86, 86, 86, 2689, 86, 2695, 86, 2696, 86, 2700, + 3387, 86, 2698, 2697, 2704, 2705, 86, 86, 86, 2708, + 86, 2699, 2701, 86, 86, 2702, 86, 86, 2703, 86, + 2711, 86, 2706, 2713, 2709, 86, 2707, 2714, 86, 2710, + 86, 86, 2712, 86, 2715, 2719, 86, 86, 86, 86, + 2716, 86, 2722, 2723, 86, 2720, 2721, 2725, 86, 86, + 2717, 2718, 86, 86, 2726, 86, 86, 2728, 2724, 2731, + 86, 2727, 86, 2732, 86, 2729, 2734, 86, 86, 86, + 86, 86, 2739, 86, 86, 2730, 86, 2735, 2733, 2737, - 86, 86, 86, 86, 2738, 2737, 86, 86, 2731, 86, - 86, 2735, 2736, 86, 2739, 2740, 2744, 86, 2741, 2743, - 86, 2742, 86, 2746, 2749, 86, 2745, 2748, 86, 2747, - 86, 2750, 86, 86, 86, 2754, 86, 86, 86, 86, - 2755, 86, 86, 2759, 86, 86, 86, 2751, 2757, 2763, - 2764, 86, 2752, 2753, 86, 3314, 2756, 2758, 2762, 2766, - 2760, 2761, 2767, 2768, 86, 86, 2769, 86, 86, 86, - 86, 86, 2770, 86, 86, 2771, 86, 86, 2774, 2765, - 2772, 86, 2777, 86, 2779, 86, 2773, 2780, 86, 86, - 2775, 86, 2776, 2781, 86, 2782, 86, 86, 2784, 86, + 2738, 2736, 2741, 86, 2740, 86, 86, 86, 2744, 86, + 2742, 2743, 2745, 86, 86, 2747, 86, 2746, 86, 86, + 86, 86, 2748, 2751, 2749, 2752, 2754, 86, 86, 2750, + 2755, 86, 86, 2756, 2753, 2758, 170, 86, 86, 2759, + 2757, 86, 2760, 2763, 3387, 86, 86, 2765, 86, 86, + 2764, 86, 86, 2768, 86, 86, 2761, 2767, 2772, 2762, + 2769, 86, 2773, 2766, 2770, 2771, 86, 2774, 86, 86, + 86, 86, 2778, 86, 2775, 2776, 86, 2779, 86, 86, + 86, 2780, 86, 86, 86, 2777, 2785, 2786, 2781, 2787, + 2783, 86, 86, 86, 86, 2782, 86, 86, 86, 2791, - 86, 2778, 2783, 86, 86, 2786, 2788, 2794, 2787, 2785, - 86, 2789, 86, 86, 2791, 2792, 86, 2793, 86, 86, - 86, 2798, 86, 2790, 86, 2799, 2800, 86, 2796, 86, - 2802, 86, 2795, 86, 86, 86, 2806, 2807, 86, 86, - 2797, 2809, 86, 2808, 2801, 86, 2803, 86, 2811, 2805, - 2810, 86, 2804, 2812, 86, 86, 86, 86, 2817, 86, - 86, 86, 86, 2816, 86, 2819, 2820, 86, 86, 86, - 2822, 86, 2823, 2821, 2813, 2814, 2815, 86, 86, 2826, - 2825, 86, 86, 86, 2818, 2824, 2829, 86, 2827, 2828, - 2833, 86, 86, 86, 86, 86, 2835, 86, 86, 86, + 86, 2789, 2790, 2788, 2784, 2793, 86, 86, 86, 86, + 2792, 2794, 86, 86, 86, 2799, 86, 86, 2797, 86, + 3387, 2796, 2798, 2802, 86, 2795, 2800, 86, 86, 86, + 2801, 2807, 86, 2803, 86, 2804, 86, 86, 86, 2805, + 86, 2808, 86, 2806, 86, 2810, 86, 2809, 2812, 86, + 2816, 86, 2811, 2817, 86, 2814, 2824, 2813, 2819, 2820, + 2821, 86, 2815, 86, 86, 86, 86, 2822, 86, 2818, + 2825, 2823, 86, 2827, 86, 86, 86, 2828, 86, 86, + 2829, 86, 2832, 86, 86, 2826, 2834, 86, 2837, 2830, + 2835, 86, 86, 2831, 2836, 86, 86, 2838, 2839, 86, - 2830, 2832, 2840, 2831, 2836, 2839, 2834, 2841, 2837, 2844, - 86, 86, 2842, 86, 2838, 86, 2845, 2843, 86, 2846, - 86, 2847, 86, 2848, 86, 86, 86, 2849, 86, 2850, - 86, 86, 86, 2853, 86, 86, 2855, 2859, 86, 2860, - 86, 2856, 86, 86, 86, 2851, 2861, 2863, 86, 2854, - 86, 2864, 2852, 86, 2857, 2858, 2865, 86, 2866, 2868, - 2862, 2867, 86, 86, 86, 86, 2872, 86, 86, 86, - 86, 86, 2869, 2870, 2873, 2876, 86, 2874, 86, 86, - 2877, 86, 86, 2871, 2875, 86, 2880, 2879, 86, 2878, - 2881, 2882, 86, 2883, 86, 86, 2885, 2886, 86, 86, + 86, 2833, 86, 2843, 86, 2841, 86, 86, 2844, 86, + 86, 2847, 2848, 86, 2842, 86, 2840, 86, 2845, 2849, + 86, 86, 86, 86, 2846, 2850, 86, 2853, 2851, 2854, + 86, 86, 2855, 2856, 86, 2852, 2857, 2858, 86, 2859, + 86, 2860, 2862, 2863, 86, 86, 2865, 86, 86, 2864, + 86, 2867, 86, 86, 2861, 2866, 2868, 86, 86, 86, + 2873, 86, 86, 86, 86, 2872, 86, 2875, 2876, 86, + 2869, 86, 2878, 2870, 86, 86, 2877, 2879, 2871, 86, + 86, 2882, 2881, 86, 86, 86, 2874, 2880, 2885, 86, + 2889, 86, 2883, 2884, 86, 86, 86, 86, 2891, 86, - 86, 86, 2884, 86, 2887, 2892, 86, 86, 86, 2890, - 2888, 86, 2895, 2896, 86, 2893, 86, 2897, 86, 86, - 86, 2891, 86, 2898, 2889, 2899, 86, 2894, 86, 2902, - 3314, 2900, 2903, 2901, 2904, 86, 2905, 86, 2906, 86, - 86, 86, 2908, 86, 2911, 2909, 2910, 86, 2912, 2907, - 86, 86, 2913, 2914, 86, 86, 86, 86, 86, 2920, - 86, 86, 2918, 2922, 86, 86, 86, 2916, 86, 2915, - 2923, 86, 2926, 2924, 86, 86, 2919, 2917, 86, 2925, - 2927, 86, 2931, 86, 86, 2921, 86, 86, 86, 86, - 2928, 2934, 86, 2929, 86, 86, 86, 2932, 2935, 2933, + 86, 86, 2886, 2888, 2918, 2887, 2892, 2895, 2890, 2896, + 2893, 86, 2898, 86, 2897, 86, 2894, 2899, 86, 2900, + 2901, 86, 86, 2902, 86, 2903, 86, 2904, 86, 2905, + 86, 86, 86, 2908, 86, 86, 2907, 2909, 86, 2910, + 2912, 86, 86, 2916, 86, 86, 2906, 2913, 2917, 86, + 86, 2911, 2920, 86, 2922, 86, 86, 2921, 86, 86, + 86, 2914, 2915, 2919, 2923, 2924, 86, 2925, 86, 2926, + 2929, 86, 86, 86, 2928, 86, 2930, 2927, 86, 2935, + 86, 86, 2931, 86, 2936, 86, 86, 86, 86, 2933, + 2938, 2939, 86, 2940, 2932, 2934, 2937, 2941, 86, 2942, - 2939, 2930, 2938, 86, 2936, 86, 2940, 86, 2944, 86, - 86, 2937, 2941, 86, 2942, 2946, 86, 2947, 86, 2949, - 86, 86, 86, 86, 86, 86, 2954, 86, 86, 2945, - 2953, 86, 86, 2943, 2948, 86, 2958, 2950, 2951, 2952, - 86, 2961, 86, 86, 2955, 86, 2959, 2963, 86, 86, - 2957, 2956, 86, 86, 2964, 2966, 86, 2967, 86, 2960, - 2969, 86, 86, 2962, 2974, 86, 86, 2965, 2968, 86, - 86, 86, 2973, 2971, 2972, 2978, 86, 86, 86, 86, - 2970, 2976, 2980, 86, 86, 2975, 2981, 86, 2982, 2985, - 2983, 2977, 2979, 2986, 86, 86, 86, 2988, 86, 2987, + 86, 86, 2946, 86, 86, 86, 2943, 86, 86, 86, + 2952, 2944, 86, 2947, 86, 86, 86, 2948, 2950, 2945, + 2955, 86, 86, 2957, 2953, 86, 2956, 86, 2951, 86, + 86, 86, 2949, 86, 2958, 2954, 2959, 86, 2962, 2967, + 2960, 2963, 86, 2961, 2964, 86, 2965, 86, 2966, 86, + 86, 2971, 86, 2968, 86, 2970, 86, 86, 86, 2972, + 86, 2969, 86, 2973, 2974, 86, 86, 2978, 2976, 2980, + 2975, 86, 2982, 86, 86, 86, 86, 86, 2983, 86, + 86, 2977, 2984, 86, 2979, 2985, 86, 2986, 86, 2991, + 86, 86, 86, 86, 2988, 2987, 2981, 2994, 2989, 86, - 86, 2991, 86, 86, 2984, 2990, 86, 86, 2994, 86, - 86, 2992, 2997, 86, 86, 86, 2989, 86, 86, 3002, - 86, 2998, 86, 86, 3314, 86, 2993, 2995, 2996, 3004, - 86, 3001, 3005, 2999, 3006, 86, 3007, 86, 86, 86, - 86, 3003, 3000, 3008, 3009, 3010, 3011, 86, 3012, 86, - 3013, 86, 3014, 86, 3016, 86, 86, 3018, 86, 86, - 86, 3017, 86, 86, 86, 3023, 3024, 86, 86, 86, - 86, 86, 3028, 86, 3019, 3029, 86, 3030, 86, 3015, - 3027, 3020, 3025, 86, 3021, 3022, 86, 3034, 86, 3026, - 3031, 3033, 3035, 86, 86, 86, 3038, 3032, 86, 3036, + 86, 86, 86, 86, 2992, 2993, 86, 86, 2990, 2995, + 2998, 2999, 86, 3000, 86, 2996, 3001, 3004, 86, 86, + 2997, 3002, 3006, 86, 3007, 86, 86, 3009, 86, 86, + 86, 86, 86, 3014, 86, 86, 3013, 3017, 3005, 86, + 3003, 86, 86, 86, 86, 3010, 3011, 3008, 3012, 86, + 3016, 86, 3020, 3023, 86, 3015, 86, 3025, 3021, 86, + 86, 3019, 3018, 86, 3026, 3028, 86, 86, 3022, 3029, + 86, 3031, 86, 86, 86, 86, 3024, 86, 86, 3036, + 86, 3387, 3027, 3034, 3033, 86, 86, 3030, 3040, 86, + 3038, 3032, 86, 3044, 86, 3035, 3037, 3042, 86, 86, - 86, 86, 86, 3041, 86, 86, 3042, 86, 3040, 3037, - 3039, 3043, 86, 86, 86, 86, 86, 3044, 86, 3047, - 86, 86, 3049, 86, 86, 3045, 3050, 3048, 86, 86, - 86, 86, 86, 3046, 86, 86, 3059, 3060, 86, 3051, - 3063, 3052, 3054, 3053, 3055, 86, 3056, 3057, 86, 3062, - 3065, 3058, 3067, 86, 3061, 86, 3068, 86, 3064, 86, - 86, 3066, 86, 3069, 3070, 86, 3314, 3071, 3073, 86, - 3074, 86, 3075, 3076, 86, 86, 86, 3077, 3078, 3072, - 86, 3079, 3080, 86, 86, 3082, 86, 3081, 86, 86, - 3084, 86, 3083, 3088, 86, 86, 3087, 86, 86, 86, + 3039, 3041, 3043, 86, 86, 3047, 3048, 86, 3050, 86, + 3045, 86, 3049, 86, 86, 3053, 86, 86, 3052, 86, + 3056, 86, 3051, 3046, 3054, 86, 86, 3059, 86, 86, + 86, 86, 3064, 86, 86, 86, 3055, 3060, 3057, 3058, + 86, 3068, 86, 86, 3063, 3069, 86, 3061, 3070, 3067, + 86, 3066, 86, 3065, 86, 3062, 86, 3072, 3073, 86, + 3074, 86, 3075, 86, 3071, 3078, 86, 3076, 86, 3080, + 86, 86, 86, 3079, 86, 86, 86, 3085, 3086, 86, + 86, 86, 3077, 86, 86, 3081, 86, 3092, 86, 3093, + 86, 86, 3387, 3094, 3082, 3091, 3083, 3084, 3089, 86, - 86, 86, 3091, 86, 3090, 3174, 86, 86, 3085, 3086, - 3092, 3095, 3096, 86, 3093, 86, 3097, 86, 3094, 86, - 3089, 86, 3098, 3099, 86, 3100, 86, 86, 3103, 3105, - 3101, 3104, 3102, 3107, 3106, 86, 86, 86, 86, 86, - 86, 86, 3108, 3111, 3115, 3112, 3114, 86, 86, 86, - 86, 3109, 3117, 86, 3116, 3118, 86, 3218, 3110, 86, - 3113, 3119, 86, 86, 3120, 3121, 86, 3122, 86, 3124, - 86, 86, 3123, 3125, 86, 3126, 86, 3127, 86, 3128, - 86, 3129, 86, 3130, 86, 86, 3132, 86, 86, 86, - 86, 3135, 3137, 86, 3131, 86, 86, 3133, 86, 86, + 3088, 86, 86, 3090, 3098, 86, 3087, 3097, 3099, 86, + 86, 3095, 86, 3102, 86, 3100, 86, 3105, 86, 86, + 3096, 86, 3104, 86, 86, 3107, 3101, 86, 3103, 3106, + 86, 86, 3108, 86, 86, 86, 3111, 86, 86, 86, + 3113, 3387, 86, 3109, 86, 3112, 3114, 86, 86, 3126, + 3110, 86, 86, 86, 3115, 86, 3123, 3116, 3124, 3117, + 3118, 3120, 3121, 3119, 86, 86, 86, 86, 86, 3122, + 3127, 3129, 3125, 3131, 86, 3132, 86, 86, 3387, 3130, + 86, 3133, 3134, 86, 3128, 3135, 3136, 3137, 86, 3138, + 86, 3139, 3140, 86, 86, 3141, 3142, 3145, 86, 3143, - 3141, 3134, 3142, 86, 86, 3144, 86, 86, 3140, 3136, - 3138, 3139, 86, 86, 86, 3146, 86, 3148, 86, 3143, - 3151, 3150, 86, 86, 86, 3145, 86, 86, 3153, 86, - 86, 86, 3149, 86, 86, 3157, 3152, 86, 86, 3147, - 3158, 3161, 86, 3154, 86, 3155, 3156, 86, 3159, 86, - 3162, 3163, 86, 3164, 86, 3165, 86, 86, 3167, 86, - 3160, 3168, 86, 86, 3169, 3166, 86, 3173, 86, 3176, - 3171, 86, 86, 3170, 3172, 86, 86, 86, 86, 86, - 86, 3175, 86, 86, 3177, 86, 86, 3183, 86, 3314, - 3186, 3178, 3180, 3179, 3182, 3184, 3189, 86, 86, 3191, + 3144, 86, 86, 86, 3148, 86, 3146, 86, 86, 86, + 86, 86, 3147, 3154, 86, 86, 3153, 86, 86, 86, + 86, 86, 3150, 3157, 3156, 3149, 86, 3158, 86, 3151, + 3152, 3161, 3162, 86, 86, 3159, 86, 3163, 3387, 3160, + 3155, 86, 3164, 3165, 86, 3166, 86, 86, 86, 3167, + 3171, 86, 3168, 3173, 86, 3172, 86, 3169, 86, 86, + 3170, 3174, 86, 3177, 86, 3181, 3175, 3178, 3180, 86, + 86, 86, 3183, 86, 86, 3176, 3182, 3184, 86, 86, + 3187, 86, 86, 3179, 3186, 3188, 86, 3190, 86, 3185, + 86, 3189, 3191, 86, 3192, 86, 3193, 86, 3194, 86, - 86, 3185, 3181, 3188, 86, 86, 3187, 86, 3190, 3193, - 86, 86, 3194, 3192, 3195, 86, 3196, 86, 86, 86, - 86, 3199, 3202, 86, 3197, 3200, 3204, 3198, 3201, 86, - 86, 86, 86, 86, 3203, 86, 3207, 3209, 86, 3210, - 86, 86, 3206, 3205, 3213, 86, 86, 86, 3216, 86, - 3211, 86, 3217, 3208, 86, 86, 3220, 3221, 86, 86, - 3212, 3214, 86, 86, 86, 3215, 86, 86, 86, 3222, - 86, 3223, 3225, 3219, 3226, 86, 3227, 86, 3224, 86, - 86, 86, 3230, 3231, 86, 3228, 3229, 86, 86, 3233, - 3232, 86, 86, 86, 3235, 86, 3238, 3239, 86, 3234, + 3195, 86, 3196, 86, 3197, 86, 86, 3200, 86, 86, + 86, 86, 86, 86, 86, 3199, 3198, 86, 3201, 3205, + 86, 86, 3202, 86, 3209, 86, 3208, 3206, 3210, 86, + 3207, 3203, 3204, 3212, 86, 86, 3211, 86, 3214, 86, + 3216, 86, 86, 3213, 3219, 3218, 86, 86, 86, 86, + 86, 86, 3221, 86, 86, 86, 86, 86, 3227, 3217, + 3220, 3225, 3226, 3215, 86, 3224, 86, 3222, 86, 3223, + 86, 3228, 86, 3230, 3238, 3231, 86, 3232, 3233, 86, + 3234, 86, 86, 3229, 3235, 86, 86, 86, 86, 3236, + 86, 3237, 86, 86, 3244, 3243, 3239, 86, 3246, 3242, - 3236, 3240, 86, 3244, 86, 86, 3246, 3237, 86, 3247, - 3245, 86, 86, 3241, 3243, 86, 3242, 86, 86, 3252, - 3248, 86, 3249, 3250, 86, 86, 3253, 86, 86, 3254, - 3251, 3255, 86, 86, 86, 3258, 86, 3256, 3261, 86, - 3257, 86, 86, 3264, 86, 3265, 86, 86, 86, 86, - 86, 86, 86, 3259, 3263, 3260, 3266, 3268, 3262, 3267, - 86, 3272, 86, 3271, 86, 86, 3276, 3269, 3270, 3273, - 86, 86, 3278, 86, 3279, 3274, 86, 3275, 86, 86, - 86, 3280, 3283, 86, 86, 3281, 86, 3287, 86, 3277, - 3285, 3284, 3286, 86, 86, 86, 86, 86, 3282, 86, + 3240, 86, 86, 86, 86, 86, 86, 86, 3245, 86, + 3241, 86, 3255, 86, 3247, 3253, 3258, 86, 86, 3250, + 86, 3248, 3249, 3254, 3252, 3257, 86, 86, 86, 86, + 3251, 3260, 3263, 86, 3256, 86, 3265, 86, 3259, 86, + 3266, 3261, 3267, 86, 3264, 3268, 86, 86, 3262, 3270, + 86, 86, 86, 3271, 86, 86, 3272, 3273, 3276, 86, + 86, 86, 86, 86, 86, 86, 3269, 3279, 3280, 86, + 3275, 86, 3278, 3277, 3282, 86, 3283, 86, 3284, 3274, + 86, 3281, 3286, 86, 3285, 86, 3287, 3289, 86, 86, + 3290, 86, 86, 3291, 3293, 3294, 86, 86, 3288, 86, - 3290, 3288, 86, 3289, 3292, 86, 86, 3294, 86, 86, - 3298, 3295, 3299, 86, 86, 3291, 3293, 86, 3296, 86, - 3302, 3303, 86, 86, 3305, 86, 86, 3297, 3306, 86, - 3304, 86, 86, 3300, 86, 86, 3301, 3308, 3307, 3309, - 3312, 86, 3313, 86, 3314, 3310, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3311, 47, 47, 47, 47, 47, - 47, 47, 52, 52, 52, 52, 52, 52, 52, 57, - 57, 57, 57, 57, 57, 57, 63, 63, 63, 63, - 63, 63, 63, 68, 68, 68, 68, 68, 68, 68, - 74, 74, 74, 74, 74, 74, 74, 80, 80, 80, + 86, 86, 3299, 86, 3298, 86, 3295, 3300, 86, 3296, + 3292, 86, 86, 86, 86, 86, 3297, 86, 3304, 86, + 3306, 86, 86, 86, 86, 86, 3301, 3303, 3311, 3312, + 86, 3302, 3305, 86, 3308, 3309, 3307, 3319, 3310, 3313, + 86, 3317, 86, 86, 86, 3314, 86, 3320, 3315, 3318, + 86, 86, 3316, 86, 86, 3321, 3322, 3325, 3323, 3326, + 86, 86, 86, 86, 3328, 86, 3327, 86, 86, 86, + 86, 3329, 3334, 3324, 86, 3331, 86, 86, 86, 86, + 3337, 3330, 3338, 86, 86, 86, 86, 86, 3332, 3333, + 3336, 3341, 86, 3335, 3339, 3342, 86, 3340, 86, 3345, - 80, 80, 80, 80, 89, 89, 3314, 89, 89, 89, - 89, 158, 158, 3314, 3314, 3314, 158, 158, 160, 160, - 3314, 3314, 160, 3314, 160, 162, 3314, 3314, 3314, 3314, - 3314, 162, 165, 165, 3314, 3314, 3314, 165, 165, 167, - 3314, 3314, 3314, 3314, 3314, 167, 169, 169, 3314, 169, - 169, 169, 169, 172, 3314, 3314, 3314, 3314, 3314, 172, - 175, 175, 3314, 3314, 3314, 175, 175, 90, 90, 3314, - 90, 90, 90, 90, 17, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3344, 3346, 86, 3343, 86, 3347, 86, 3349, 86, 3351, + 86, 3352, 86, 86, 86, 3356, 86, 3353, 3387, 86, + 3354, 3359, 86, 3350, 3357, 86, 86, 3358, 3348, 86, + 86, 86, 86, 3355, 86, 86, 3360, 3361, 86, 3363, + 3365, 86, 86, 3367, 86, 3362, 86, 3368, 86, 3371, + 3364, 3366, 3372, 86, 3369, 86, 86, 3375, 3376, 86, + 86, 3378, 86, 3370, 86, 3373, 86, 3377, 3379, 86, + 86, 3380, 86, 86, 3374, 3381, 3387, 3382, 3385, 86, + 3386, 86, 3387, 3387, 3387, 3383, 3387, 3387, 3387, 3387, + 3387, 3387, 3384, 47, 47, 47, 47, 47, 47, 47, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314 + 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, + 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, + 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, + 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, + 80, 80, 89, 89, 3387, 89, 89, 89, 89, 160, + 160, 3387, 3387, 3387, 160, 160, 162, 162, 3387, 3387, + 162, 3387, 162, 164, 3387, 3387, 3387, 3387, 3387, 164, + 167, 167, 3387, 3387, 3387, 167, 167, 169, 3387, 3387, + 3387, 3387, 3387, 169, 171, 171, 3387, 171, 171, 171, + 171, 174, 3387, 3387, 3387, 3387, 3387, 174, 177, 177, + + 3387, 3387, 3387, 177, 177, 90, 90, 3387, 90, 90, + 90, 90, 17, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387 } ; -static const flex_int16_t yy_chk[6516] = +static const flex_int16_t yy_chk[6654] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2245,715 +2283,730 @@ static const flex_int16_t yy_chk[6516] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3322, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3395, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2705, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2758, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1279, 32, 36, 36, 37, 37, - 28, 45, 45, 37, 1279, 36, 45, 39, 41, 41, + 28, 92, 31, 32, 1104, 32, 36, 36, 37, 37, + 28, 45, 45, 37, 97, 36, 45, 97, 41, 41, - 45, 36, 39, 41, 94, 36, 39, 43, 43, 37, - 43, 94, 39, 41, 41, 39, 41, 44, 42, 43, - 87, 44, 39, 42, 87, 43, 42, 62, 95, 62, - 62, 44, 62, 42, 1083, 44, 44, 42, 42, 70, - 95, 70, 70, 72, 70, 72, 72, 79, 72, 79, - 79, 70, 79, 84, 84, 86, 96, 86, 86, 89, - 86, 89, 89, 93, 89, 97, 86, 93, 97, 98, - 89, 89, 98, 100, 101, 102, 96, 103, 104, 105, - 106, 102, 100, 107, 111, 98, 106, 102, 101, 102, - 108, 109, 112, 175, 110, 103, 103, 107, 105, 106, + 45, 36, 87, 41, 93, 36, 87, 37, 93, 37, + 39, 39, 42, 41, 41, 39, 41, 42, 96, 39, + 42, 43, 43, 105, 43, 39, 44, 42, 39, 101, + 44, 42, 42, 43, 94, 39, 84, 84, 96, 43, + 44, 94, 105, 101, 44, 44, 62, 192, 62, 62, + 70, 62, 70, 70, 72, 70, 72, 72, 79, 72, + 79, 79, 70, 79, 86, 95, 86, 86, 89, 86, + 89, 89, 192, 89, 100, 86, 102, 95, 98, 89, + 89, 98, 102, 100, 103, 104, 106, 107, 102, 113, + 102, 109, 106, 113, 98, 108, 111, 140, 114, 112, - 104, 114, 111, 113, 108, 110, 110, 113, 116, 115, - 112, 109, 117, 110, 115, 117, 119, 118, 117, 120, - 123, 114, 116, 118, 120, 126, 121, 122, 734, 121, - 125, 117, 117, 121, 123, 119, 124, 125, 126, 128, - 124, 127, 118, 129, 120, 734, 122, 130, 127, 121, - 131, 122, 128, 132, 131, 133, 134, 135, 135, 136, - 133, 139, 137, 129, 133, 130, 137, 138, 143, 140, - 142, 132, 144, 148, 143, 137, 134, 141, 147, 136, - 141, 137, 138, 142, 144, 145, 145, 139, 140, 146, - 149, 141, 148, 150, 147, 141, 146, 151, 152, 151, + 177, 107, 103, 103, 110, 106, 116, 104, 115, 108, + 119, 109, 140, 115, 111, 110, 110, 112, 114, 117, + 116, 118, 117, 110, 122, 117, 120, 118, 123, 119, + 121, 120, 124, 121, 125, 130, 124, 121, 117, 117, + 127, 125, 123, 122, 126, 128, 118, 127, 122, 129, + 132, 120, 131, 121, 128, 130, 131, 126, 134, 133, + 135, 136, 129, 133, 138, 135, 137, 137, 132, 135, + 139, 141, 142, 144, 139, 256, 134, 256, 146, 150, + 151, 136, 143, 139, 138, 143, 144, 145, 149, 139, + 146, 142, 148, 145, 147, 147, 143, 141, 150, 148, - 153, 154, 157, 145, 155, 153, 145, 146, 151, 150, - 152, 149, 156, 154, 159, 159, 157, 156, 161, 174, - 151, 161, 155, 163, 171, 163, 163, 171, 163, 166, - 166, 168, 179, 168, 168, 169, 168, 169, 169, 173, - 169, 173, 173, 177, 173, 176, 176, 169, 177, 178, - 179, 180, 181, 183, 182, 178, 184, 185, 186, 187, - 181, 183, 188, 186, 178, 182, 180, 181, 190, 191, - 189, 188, 185, 198, 191, 184, 189, 189, 193, 187, - 192, 192, 195, 194, 193, 194, 195, 197, 194, 196, - 196, 195, 198, 190, 202, 199, 195, 201, 203, 197, + 143, 151, 152, 153, 149, 153, 155, 154, 156, 157, + 148, 155, 147, 226, 153, 147, 158, 159, 152, 154, + 156, 158, 161, 161, 179, 163, 153, 157, 163, 179, + 165, 159, 165, 165, 226, 165, 168, 168, 170, 181, + 170, 170, 171, 170, 171, 171, 173, 171, 175, 173, + 175, 175, 180, 175, 171, 178, 178, 181, 180, 182, + 183, 184, 185, 186, 187, 189, 188, 180, 183, 190, + 185, 188, 184, 212, 182, 183, 193, 191, 190, 187, + 176, 193, 186, 191, 191, 189, 194, 194, 195, 197, + 196, 212, 196, 197, 195, 196, 198, 198, 197, 199, - 199, 200, 195, 195, 203, 194, 200, 204, 205, 201, - 206, 204, 215, 205, 202, 207, 208, 210, 209, 211, - 212, 230, 216, 214, 211, 212, 206, 203, 214, 207, - 209, 208, 215, 209, 230, 210, 213, 213, 216, 217, - 213, 219, 213, 218, 218, 217, 220, 219, 221, 222, - 224, 223, 220, 219, 213, 222, 213, 223, 225, 232, - 226, 227, 234, 228, 225, 226, 223, 227, 221, 228, - 229, 224, 231, 235, 233, 234, 236, 229, 231, 232, - 233, 235, 237, 238, 234, 239, 240, 237, 241, 236, - 242, 244, 238, 243, 246, 242, 242, 245, 243, 247, + 200, 201, 202, 197, 203, 204, 201, 202, 205, 197, + 197, 199, 196, 206, 205, 207, 203, 206, 208, 200, + 207, 209, 213, 210, 211, 204, 214, 213, 216, 217, + 552, 214, 218, 216, 208, 209, 211, 205, 210, 211, + 215, 215, 220, 220, 215, 219, 215, 221, 218, 217, + 222, 219, 223, 221, 552, 224, 222, 227, 215, 221, + 215, 224, 225, 227, 228, 229, 230, 231, 225, 228, + 230, 229, 223, 231, 232, 234, 233, 225, 235, 236, + 237, 232, 233, 238, 235, 239, 237, 240, 234, 241, + 245, 243, 242, 239, 241, 244, 238, 246, 248, 236, - 239, 245, 240, 248, 249, 247, 250, 251, 241, 244, - 249, 252, 251, 252, 253, 257, 246, 254, 312, 255, - 259, 248, 248, 256, 254, 255, 250, 260, 266, 256, - 258, 312, 259, 253, 257, 268, 258, 261, 261, 262, - 262, 260, 263, 264, 265, 267, 265, 268, 263, 264, - 267, 266, 269, 270, 271, 272, 273, 276, 274, 275, - 272, 270, 276, 265, 274, 275, 263, 277, 279, 278, - 280, 269, 277, 281, 271, 278, 282, 283, 284, 273, - 285, 288, 288, 279, 280, 283, 285, 290, 293, 286, - 282, 281, 286, 287, 289, 287, 294, 289, 291, 291, + 240, 242, 246, 246, 247, 238, 243, 250, 249, 247, + 245, 244, 249, 251, 252, 253, 248, 254, 255, 251, + 257, 253, 259, 255, 258, 261, 263, 264, 259, 250, + 260, 258, 252, 252, 262, 270, 260, 254, 263, 257, + 262, 264, 265, 265, 261, 266, 266, 267, 268, 269, + 271, 269, 272, 267, 268, 271, 273, 274, 270, 275, + 277, 276, 288, 278, 272, 274, 276, 279, 269, 278, + 283, 267, 280, 279, 282, 273, 281, 280, 284, 275, + 282, 281, 285, 277, 286, 283, 287, 288, 290, 289, + 293, 290, 284, 293, 287, 289, 294, 291, 286, 291, - 292, 292, 172, 284, 293, 290, 295, 297, 296, 295, - 298, 294, 296, 300, 299, 301, 297, 303, 309, 298, - 299, 301, 302, 303, 302, 304, 307, 300, 306, 304, - 305, 305, 307, 306, 308, 310, 311, 315, 309, 316, - 308, 313, 313, 316, 314, 317, 304, 314, 318, 319, - 319, 320, 328, 310, 323, 315, 322, 311, 321, 308, - 323, 321, 324, 325, 317, 324, 318, 327, 322, 320, - 328, 331, 329, 332, 331, 325, 327, 329, 321, 326, - 330, 333, 412, 330, 412, 330, 332, 334, 326, 334, - 334, 326, 336, 333, 337, 336, 326, 326, 326, 326, + 285, 292, 292, 295, 295, 296, 296, 297, 299, 298, + 301, 299, 300, 302, 294, 303, 300, 304, 174, 301, + 305, 303, 302, 297, 298, 306, 305, 306, 307, 308, + 314, 304, 310, 308, 307, 309, 309, 310, 311, 312, + 313, 315, 316, 319, 311, 312, 317, 317, 314, 318, + 308, 321, 318, 320, 322, 316, 324, 320, 323, 323, + 313, 319, 315, 325, 312, 326, 325, 327, 328, 329, + 321, 328, 322, 327, 324, 333, 331, 326, 366, 332, + 333, 329, 336, 325, 330, 331, 334, 335, 337, 334, + 335, 334, 366, 330, 169, 336, 330, 332, 341, 341, - 335, 330, 338, 339, 340, 335, 335, 341, 341, 345, - 342, 337, 339, 340, 337, 342, 347, 338, 343, 343, - 344, 344, 346, 348, 345, 349, 350, 346, 347, 351, - 354, 352, 352, 355, 352, 351, 363, 363, 355, 357, - 356, 350, 348, 352, 357, 349, 356, 358, 359, 360, - 354, 359, 358, 359, 361, 362, 364, 361, 358, 365, - 365, 366, 364, 360, 362, 367, 366, 371, 367, 369, - 361, 370, 401, 361, 367, 361, 372, 375, 367, 373, - 375, 376, 371, 378, 401, 379, 367, 368, 368, 369, - 368, 372, 370, 373, 379, 376, 375, 382, 378, 380, + 337, 330, 330, 330, 330, 339, 338, 334, 338, 338, + 339, 339, 340, 342, 343, 340, 345, 344, 346, 347, + 347, 348, 349, 349, 351, 345, 348, 346, 353, 343, + 342, 350, 350, 342, 344, 344, 352, 354, 355, 351, + 353, 352, 356, 357, 360, 1304, 361, 358, 358, 357, + 358, 361, 369, 369, 362, 1304, 354, 356, 355, 358, + 362, 363, 364, 394, 360, 365, 363, 364, 365, 367, + 365, 368, 367, 364, 372, 370, 371, 371, 375, 372, + 368, 370, 377, 373, 378, 367, 373, 379, 367, 394, + 367, 376, 373, 382, 376, 384, 373, 377, 375, 378, - 383, 384, 167, 368, 380, 380, 368, 388, 368, 381, - 368, 377, 385, 377, 377, 381, 384, 386, 382, 383, - 389, 385, 381, 377, 390, 377, 377, 377, 387, 391, - 377, 393, 392, 388, 387, 391, 386, 392, 390, 391, - 389, 394, 395, 396, 397, 400, 398, 404, 396, 399, - 399, 393, 398, 402, 403, 392, 408, 395, 405, 397, - 403, 394, 409, 406, 410, 400, 165, 402, 406, 411, - 407, 407, 404, 407, 405, 417, 408, 418, 409, 413, - 410, 413, 413, 411, 414, 415, 416, 416, 414, 415, - 419, 420, 418, 421, 417, 424, 422, 423, 541, 413, + 381, 379, 385, 381, 373, 374, 374, 382, 374, 386, + 384, 385, 376, 388, 386, 386, 389, 387, 390, 381, + 392, 374, 395, 387, 374, 167, 374, 391, 374, 383, + 387, 383, 383, 390, 388, 389, 391, 396, 399, 392, + 393, 383, 395, 383, 383, 383, 393, 397, 383, 398, + 400, 396, 401, 397, 398, 402, 403, 397, 399, 404, + 402, 405, 405, 406, 407, 404, 408, 401, 409, 410, + 400, 403, 398, 411, 409, 414, 407, 412, 413, 413, + 408, 413, 412, 406, 415, 416, 423, 420, 417, 411, + 418, 420, 418, 421, 410, 414, 419, 421, 419, 419, - 541, 424, 423, 425, 415, 422, 419, 421, 426, 420, - 423, 423, 425, 426, 423, 423, 422, 427, 422, 428, - 429, 427, 430, 431, 435, 437, 429, 432, 428, 431, - 433, 432, 434, 433, 436, 436, 439, 434, 437, 438, - 438, 439, 440, 430, 435, 441, 441, 442, 443, 444, - 445, 446, 443, 442, 447, 440, 446, 448, 448, 447, - 449, 450, 451, 452, 444, 453, 448, 455, 453, 454, - 458, 445, 449, 454, 460, 452, 456, 456, 457, 455, - 451, 450, 463, 457, 459, 459, 462, 462, 466, 464, - 465, 458, 467, 469, 470, 471, 460, 464, 490, 465, + 415, 416, 417, 422, 422, 423, 424, 425, 426, 428, + 427, 430, 421, 431, 432, 166, 419, 430, 428, 432, + 429, 424, 431, 425, 427, 429, 426, 434, 433, 428, + 436, 428, 433, 429, 429, 435, 434, 429, 429, 437, + 438, 435, 440, 439, 438, 437, 439, 440, 441, 442, + 442, 436, 443, 444, 444, 445, 446, 447, 447, 449, + 445, 448, 450, 449, 451, 443, 452, 448, 441, 446, + 453, 452, 454, 454, 455, 453, 456, 450, 458, 457, + 459, 454, 461, 459, 460, 451, 455, 464, 460, 466, + 458, 462, 462, 463, 461, 470, 456, 457, 463, 465, - 472, 473, 490, 463, 467, 477, 164, 473, 466, 474, - 475, 469, 470, 469, 472, 471, 475, 476, 474, 477, - 478, 479, 476, 480, 479, 481, 482, 483, 478, 485, - 484, 478, 482, 484, 486, 485, 487, 480, 488, 491, - 481, 487, 489, 492, 491, 493, 494, 483, 486, 495, - 493, 496, 499, 485, 502, 501, 500, 504, 492, 501, - 488, 504, 494, 489, 496, 503, 162, 509, 495, 497, - 497, 500, 499, 502, 507, 497, 509, 497, 506, 507, - 508, 503, 505, 497, 511, 497, 510, 505, 497, 497, - 513, 505, 510, 506, 514, 497, 508, 510, 512, 508, + 465, 468, 468, 473, 471, 472, 475, 476, 464, 478, + 474, 466, 471, 479, 472, 474, 470, 480, 481, 476, + 485, 483, 482, 164, 473, 485, 475, 478, 482, 478, + 483, 479, 481, 484, 486, 487, 489, 480, 488, 484, + 490, 488, 492, 487, 493, 491, 487, 493, 486, 495, + 489, 491, 494, 497, 496, 490, 498, 499, 494, 496, + 500, 499, 492, 495, 501, 500, 502, 503, 504, 505, + 508, 502, 511, 525, 525, 497, 494, 498, 509, 501, + 510, 512, 505, 503, 510, 162, 515, 504, 506, 506, + 508, 511, 523, 509, 506, 513, 506, 512, 516, 513, - 511, 512, 515, 515, 516, 517, 517, 518, 519, 520, - 522, 521, 523, 513, 514, 525, 524, 523, 526, 529, - 519, 527, 518, 535, 520, 524, 533, 527, 529, 516, - 521, 530, 522, 526, 525, 530, 531, 532, 533, 534, - 531, 536, 535, 532, 537, 538, 539, 540, 542, 543, - 539, 544, 544, 546, 534, 536, 545, 543, 547, 537, - 540, 548, 545, 538, 547, 546, 549, 550, 551, 549, - 552, 553, 542, 548, 553, 552, 554, 555, 557, 558, - 558, 550, 556, 551, 565, 554, 160, 556, 556, 559, - 559, 557, 554, 555, 560, 554, 561, 561, 562, 562, + 514, 515, 506, 516, 506, 514, 517, 506, 506, 514, + 518, 520, 519, 521, 506, 523, 524, 522, 519, 518, + 522, 526, 517, 519, 528, 517, 520, 527, 527, 521, + 529, 531, 530, 532, 534, 533, 524, 535, 536, 528, + 533, 559, 529, 534, 559, 537, 526, 530, 539, 543, + 531, 537, 544, 536, 540, 532, 535, 539, 540, 541, + 542, 543, 545, 541, 546, 547, 542, 544, 548, 549, + 550, 553, 551, 549, 551, 554, 554, 556, 546, 553, + 547, 545, 555, 550, 557, 558, 548, 560, 555, 556, + 557, 561, 563, 562, 564, 563, 565, 558, 562, 566, - 560, 563, 566, 564, 569, 565, 568, 563, 564, 564, - 567, 568, 570, 567, 566, 571, 572, 573, 571, 574, - 570, 572, 575, 569, 576, 577, 575, 578, 579, 577, - 576, 583, 580, 579, 581, 581, 582, 584, 574, 585, - 573, 586, 584, 587, 589, 578, 580, 594, 588, 587, - 591, 582, 583, 588, 590, 585, 593, 590, 589, 592, - 592, 586, 590, 594, 595, 590, 590, 596, 591, 595, - 597, 598, 596, 600, 593, 602, 601, 603, 602, 600, - 605, 603, 604, 605, 597, 601, 598, 604, 606, 607, - 608, 609, 611, 606, 610, 612, 616, 611, 609, 613, + 611, 560, 567, 564, 566, 566, 561, 568, 568, 611, + 564, 575, 565, 564, 570, 567, 569, 569, 571, 571, + 570, 572, 572, 573, 576, 574, 579, 580, 578, 573, + 574, 574, 575, 578, 577, 580, 576, 577, 581, 582, + 583, 581, 584, 585, 582, 579, 586, 585, 588, 587, + 589, 590, 586, 587, 592, 589, 591, 591, 593, 594, + 595, 584, 596, 583, 594, 590, 588, 597, 160, 592, + 598, 599, 604, 597, 601, 598, 595, 603, 600, 593, + 607, 600, 596, 602, 602, 599, 600, 608, 604, 600, + 600, 605, 601, 606, 607, 603, 605, 610, 606, 617, - 613, 614, 615, 603, 617, 607, 618, 610, 608, 631, - 614, 619, 616, 617, 620, 612, 621, 619, 618, 621, - 620, 615, 622, 622, 623, 622, 624, 623, 625, 626, - 627, 624, 628, 629, 631, 630, 627, 628, 630, 629, - 632, 634, 633, 626, 635, 632, 625, 633, 633, 638, - 636, 639, 637, 641, 634, 636, 640, 635, 637, 643, - 639, 640, 642, 642, 644, 645, 643, 644, 638, 636, - 636, 645, 646, 641, 647, 648, 649, 649, 650, 647, - 648, 648, 644, 651, 646, 651, 652, 653, 654, 653, - 655, 656, 657, 658, 659, 660, 664, 662, 661, 660, + 618, 612, 608, 610, 612, 613, 614, 615, 616, 613, + 615, 614, 619, 616, 620, 617, 621, 622, 618, 619, + 624, 621, 623, 623, 625, 626, 627, 620, 628, 624, + 629, 613, 630, 635, 643, 627, 629, 622, 630, 631, + 628, 626, 631, 625, 632, 632, 633, 632, 634, 633, + 636, 635, 637, 634, 638, 639, 641, 637, 640, 643, + 650, 639, 641, 640, 636, 642, 644, 646, 642, 645, + 647, 644, 648, 638, 645, 645, 649, 648, 651, 650, + 646, 652, 649, 647, 653, 662, 652, 651, 654, 654, + 655, 648, 648, 656, 657, 658, 656, 655, 659, 664, - 659, 663, 665, 650, 667, 652, 654, 661, 655, 656, - 666, 657, 662, 658, 664, 669, 663, 668, 670, 667, - 671, 665, 666, 668, 672, 675, 674, 673, 676, 669, - 670, 673, 677, 678, 680, 679, 681, 681, 682, 671, - 679, 675, 682, 672, 674, 683, 676, 684, 680, 685, - 677, 677, 678, 687, 686, 688, 691, 689, 684, 686, - 690, 691, 695, 685, 683, 692, 693, 690, 694, 687, - 689, 693, 692, 694, 688, 696, 697, 698, 699, 702, - 695, 700, 696, 701, 702, 697, 704, 699, 705, 701, - 704, 698, 703, 700, 706, 703, 707, 709, 708, 710, + 657, 661, 661, 659, 653, 666, 663, 658, 663, 660, + 662, 656, 667, 659, 660, 660, 668, 665, 664, 665, + 669, 670, 671, 666, 673, 672, 676, 674, 671, 672, + 667, 675, 677, 673, 668, 678, 681, 679, 686, 669, + 683, 670, 674, 680, 676, 682, 675, 678, 684, 680, + 681, 677, 679, 687, 685, 688, 686, 682, 685, 683, + 689, 690, 692, 691, 693, 693, 694, 684, 691, 687, + 694, 695, 696, 688, 698, 697, 692, 699, 689, 689, + 690, 700, 699, 701, 85, 695, 697, 702, 698, 703, + 704, 696, 705, 706, 708, 704, 703, 700, 706, 705, - 710, 714, 705, 706, 711, 711, 712, 712, 716, 713, - 714, 707, 708, 711, 713, 717, 718, 720, 709, 719, - 721, 717, 722, 719, 723, 724, 726, 716, 725, 720, - 723, 727, 728, 724, 731, 725, 718, 737, 742, 743, - 722, 738, 740, 743, 726, 721, 737, 738, 740, 731, - 746, 741, 728, 747, 742, 749, 727, 729, 748, 729, - 741, 746, 729, 744, 744, 752, 729, 745, 745, 729, - 752, 747, 748, 753, 750, 749, 729, 729, 754, 729, - 750, 751, 751, 751, 756, 751, 755, 757, 751, 760, - 755, 757, 758, 751, 753, 759, 754, 758, 761, 751, + 702, 707, 701, 709, 710, 711, 707, 712, 713, 714, + 709, 716, 708, 710, 716, 714, 712, 715, 718, 711, + 713, 717, 715, 720, 719, 717, 721, 722, 723, 723, + 724, 724, 718, 719, 725, 725, 726, 727, 720, 724, + 721, 726, 729, 730, 731, 733, 727, 732, 722, 730, + 734, 732, 735, 736, 737, 739, 738, 733, 740, 736, + 741, 729, 737, 738, 731, 747, 744, 750, 751, 754, + 735, 753, 755, 739, 751, 734, 750, 753, 754, 759, + 741, 744, 747, 740, 742, 761, 742, 756, 755, 742, + 759, 756, 760, 742, 757, 757, 742, 758, 758, 761, - 751, 158, 762, 764, 760, 762, 763, 757, 756, 766, - 764, 763, 763, 767, 759, 765, 765, 769, 767, 768, - 768, 771, 769, 761, 766, 770, 771, 774, 770, 772, - 772, 773, 775, 773, 776, 777, 779, 778, 776, 774, - 780, 780, 781, 784, 779, 782, 783, 783, 785, 786, - 821, 775, 787, 789, 789, 777, 778, 781, 787, 782, - 785, 784, 788, 790, 821, 792, 793, 788, 790, 790, - 792, 786, 793, 794, 797, 795, 796, 797, 798, 794, - 795, 799, 796, 802, 798, 800, 800, 801, 801, 799, - 803, 802, 804, 805, 806, 807, 807, 804, 808, 811, + 762, 763, 773, 742, 742, 766, 742, 763, 765, 767, + 760, 768, 769, 765, 770, 768, 772, 773, 770, 771, + 762, 764, 764, 764, 771, 764, 766, 767, 764, 774, + 778, 778, 779, 764, 770, 772, 769, 776, 775, 764, + 764, 775, 776, 776, 777, 780, 788, 779, 781, 781, + 780, 777, 782, 783, 774, 784, 783, 782, 785, 785, + 784, 786, 787, 786, 789, 788, 790, 792, 789, 791, + 793, 793, 794, 797, 787, 792, 795, 796, 796, 799, + 798, 802, 802, 800, 813, 813, 790, 794, 791, 800, + 795, 797, 798, 801, 803, 814, 814, 805, 801, 803, - 805, 809, 810, 810, 812, 811, 814, 808, 803, 809, - 815, 816, 817, 806, 822, 814, 818, 817, 819, 815, - 823, 819, 820, 812, 824, 818, 825, 820, 827, 823, - 828, 825, 825, 826, 826, 816, 829, 824, 830, 822, - 833, 831, 833, 827, 831, 829, 834, 834, 835, 828, - 836, 837, 831, 838, 839, 836, 840, 841, 842, 843, - 844, 845, 830, 85, 844, 846, 848, 842, 849, 835, - 847, 850, 837, 838, 839, 848, 847, 841, 840, 845, - 849, 851, 843, 852, 846, 853, 854, 855, 855, 852, - 850, 854, 856, 857, 858, 851, 859, 860, 861, 853, + 803, 799, 805, 806, 807, 810, 808, 809, 810, 806, + 807, 808, 811, 809, 812, 815, 816, 819, 811, 817, + 818, 820, 812, 815, 817, 821, 827, 818, 822, 822, + 823, 832, 824, 831, 816, 819, 832, 820, 829, 823, + 824, 825, 825, 826, 821, 827, 830, 829, 834, 826, + 833, 834, 836, 835, 837, 830, 838, 831, 835, 833, + 839, 842, 840, 841, 841, 838, 836, 840, 840, 843, + 845, 844, 846, 839, 847, 851, 842, 847, 853, 837, + 844, 849, 854, 849, 852, 847, 850, 850, 843, 852, + 846, 855, 856, 857, 845, 858, 851, 859, 861, 853, - 862, 863, 857, 864, 859, 865, 868, 867, 866, 864, - 869, 865, 856, 867, 858, 872, 869, 860, 870, 862, - 861, 863, 866, 871, 870, 873, 868, 871, 874, 875, - 876, 876, 877, 874, 872, 879, 878, 873, 877, 878, - 881, 880, 882, 883, 883, 873, 881, 884, 886, 891, - 875, 885, 887, 879, 880, 888, 885, 887, 887, 889, - 890, 890, 882, 889, 886, 884, 886, 892, 893, 894, - 888, 891, 896, 893, 900, 897, 901, 899, 903, 903, - 904, 906, 906, 907, 904, 905, 80, 892, 894, 897, - 899, 908, 910, 919, 900, 908, 896, 901, 902, 911, + 862, 860, 854, 863, 858, 860, 864, 866, 80, 863, + 865, 855, 868, 857, 856, 864, 861, 867, 868, 862, + 859, 869, 865, 870, 871, 871, 866, 872, 870, 873, + 874, 867, 875, 876, 877, 869, 878, 879, 873, 880, + 875, 885, 881, 883, 882, 880, 884, 872, 881, 883, + 874, 889, 890, 876, 892, 878, 877, 879, 882, 886, + 884, 885, 887, 888, 890, 886, 891, 888, 887, 896, + 889, 891, 890, 893, 893, 892, 894, 895, 897, 898, + 895, 899, 894, 900, 900, 898, 901, 896, 902, 903, + 904, 897, 908, 902, 905, 904, 904, 909, 906, 907, - 905, 902, 909, 902, 911, 919, 910, 902, 907, 902, - 912, 915, 916, 914, 902, 913, 916, 909, 917, 902, - 913, 913, 914, 921, 912, 915, 918, 920, 916, 922, - 923, 918, 920, 917, 924, 926, 925, 921, 932, 927, - 926, 918, 925, 924, 923, 927, 928, 929, 929, 930, - 922, 931, 928, 933, 930, 934, 936, 931, 937, 939, - 932, 941, 938, 937, 940, 940, 941, 943, 936, 942, - 944, 939, 933, 934, 935, 935, 938, 942, 945, 946, - 935, 943, 935, 950, 947, 952, 948, 949, 935, 944, - 947, 948, 951, 935, 935, 946, 955, 945, 954, 949, + 907, 899, 906, 910, 901, 903, 911, 903, 910, 905, + 913, 916, 914, 917, 908, 918, 921, 909, 920, 920, + 921, 923, 923, 922, 916, 911, 914, 924, 925, 926, + 928, 927, 925, 917, 913, 928, 918, 919, 922, 934, + 919, 929, 919, 942, 926, 927, 919, 932, 919, 942, + 931, 930, 924, 919, 934, 929, 930, 930, 919, 931, + 933, 932, 935, 936, 933, 937, 938, 935, 939, 940, + 937, 949, 941, 943, 951, 936, 933, 935, 943, 944, + 938, 941, 945, 940, 950, 944, 946, 946, 945, 939, + 947, 948, 951, 949, 953, 947, 954, 948, 75, 955, - 935, 950, 954, 952, 953, 953, 957, 958, 951, 959, - 958, 961, 957, 960, 962, 964, 955, 963, 960, 968, - 962, 966, 963, 967, 961, 969, 971, 970, 959, 973, - 966, 969, 967, 972, 964, 968, 970, 974, 972, 975, - 976, 977, 979, 980, 978, 971, 983, 986, 979, 973, - 977, 974, 976, 978, 985, 981, 987, 988, 989, 975, - 980, 981, 983, 990, 991, 992, 75, 986, 985, 991, - 992, 988, 995, 996, 1001, 987, 989, 995, 990, 997, - 997, 998, 996, 999, 1004, 1004, 1002, 998, 1004, 1006, - 1001, 1002, 1002, 1007, 1005, 1008, 999, 1005, 1009, 1010, + 961, 954, 956, 950, 952, 952, 953, 957, 957, 959, + 952, 958, 952, 955, 956, 960, 958, 959, 952, 961, + 962, 963, 964, 952, 952, 967, 965, 969, 964, 960, + 952, 965, 966, 968, 970, 970, 971, 963, 972, 962, + 971, 974, 976, 967, 966, 969, 978, 974, 975, 968, + 977, 975, 980, 981, 979, 977, 983, 980, 972, 978, + 979, 976, 984, 985, 986, 983, 987, 988, 989, 990, + 986, 984, 981, 989, 991, 987, 992, 997, 993, 985, + 74, 996, 994, 995, 1000, 1003, 988, 996, 991, 990, + 993, 994, 995, 998, 997, 1002, 992, 1004, 1005, 998, - 1011, 1012, 1013, 1006, 1014, 1015, 1020, 1012, 74, 1016, - 1014, 1008, 1010, 1007, 1016, 1011, 1009, 1017, 1019, 1021, - 1015, 1019, 1013, 1022, 1021, 1023, 1026, 1020, 1022, 1024, - 1025, 1017, 1029, 1028, 1024, 1025, 1030, 1031, 1026, 1028, - 1033, 1023, 1030, 1031, 1032, 1032, 1034, 1035, 1029, 1033, - 1035, 1036, 1036, 1037, 1038, 1039, 1040, 1041, 1044, 1040, - 1042, 1043, 1047, 1044, 1034, 1049, 1042, 1043, 1047, 1045, - 1041, 1037, 1046, 1038, 1045, 1039, 1050, 1046, 1051, 1054, - 1052, 1053, 1053, 1049, 1051, 1052, 1055, 1056, 1054, 1057, - 1058, 1059, 1060, 1058, 1059, 1055, 1050, 1061, 1062, 1063, + 1000, 1006, 1007, 1008, 1013, 1003, 1009, 1017, 1008, 1002, + 1012, 1009, 1005, 1013, 1016, 1012, 1004, 1007, 1015, 1006, + 1014, 1014, 1017, 1016, 1015, 1018, 1020, 1021, 1026, 1025, + 1023, 1023, 1021, 1021, 1023, 1027, 1024, 1028, 1018, 1024, + 1029, 1030, 1020, 1025, 1031, 1032, 1033, 1034, 1026, 1035, + 1031, 1027, 1033, 1029, 1035, 1028, 1030, 1036, 1038, 1039, + 1042, 1038, 1034, 1040, 1041, 1032, 1043, 1044, 1040, 1041, + 1046, 1036, 1044, 1045, 1049, 1043, 1042, 1048, 1045, 1050, + 1039, 1051, 1046, 1048, 1053, 1050, 1054, 1051, 1052, 1052, + 1049, 1055, 1057, 1053, 1055, 1056, 1056, 1058, 1059, 1060, - 1064, 1065, 1066, 1060, 1067, 1056, 1064, 1065, 1057, 1067, - 1062, 1068, 1068, 1069, 1070, 1061, 1072, 1066, 1063, 1071, - 1072, 1073, 1075, 1076, 1074, 1078, 1079, 1079, 1070, 1080, - 1081, 1071, 1069, 1074, 1080, 1081, 1082, 1084, 1085, 1073, - 1086, 1075, 1087, 1090, 1078, 1088, 1093, 1087, 1076, 1089, - 1089, 1084, 1086, 1085, 1088, 1091, 1082, 1095, 1092, 1095, - 1094, 1091, 1093, 1090, 1092, 1094, 1096, 1097, 1098, 1099, - 1100, 1096, 1101, 1102, 1099, 1103, 1104, 1106, 1106, 1107, - 1102, 1097, 1098, 1108, 1109, 1100, 1110, 1111, 1119, 1112, - 1103, 1101, 1110, 1107, 1112, 1104, 1114, 1115, 1115, 1109, + 1061, 1062, 1060, 1063, 1054, 1069, 1064, 1062, 1070, 1063, + 1057, 1064, 1065, 1061, 1066, 1067, 1058, 1065, 1059, 1066, + 1071, 1067, 1072, 1069, 1073, 1073, 1071, 1072, 1070, 1074, + 1075, 1076, 1077, 1078, 1079, 1080, 1078, 1079, 1074, 1075, + 1081, 1082, 1083, 1084, 1085, 1081, 1080, 1086, 1087, 1076, + 1085, 1077, 1088, 1086, 1083, 1089, 1089, 1088, 1090, 1082, + 1091, 1092, 1084, 1087, 1093, 1094, 1095, 1096, 1093, 1097, + 1099, 1100, 1100, 1092, 1091, 1095, 1101, 1090, 1103, 1102, + 1106, 1101, 1105, 1094, 1102, 1107, 1096, 1108, 1111, 1099, + 1109, 1114, 1108, 68, 1097, 1106, 1105, 1107, 1103, 1109, - 1114, 1108, 1119, 1112, 1116, 1112, 1118, 1111, 1112, 1116, - 1117, 1117, 1120, 1118, 1121, 1120, 1122, 1123, 1124, 1125, - 1126, 1128, 1127, 1124, 1130, 1129, 1123, 1127, 1132, 1132, - 1135, 68, 1126, 1121, 1122, 1128, 1129, 1133, 1125, 1134, - 1136, 1139, 1133, 1130, 1134, 1136, 1138, 1137, 1140, 1141, - 1135, 1137, 1142, 1144, 1143, 1138, 1139, 1146, 1145, 1147, - 1144, 1148, 1150, 1140, 1142, 1149, 1151, 1152, 1141, 1143, - 1145, 1149, 1153, 1154, 1155, 1157, 1146, 1150, 1156, 1148, - 1147, 1153, 1158, 1159, 1160, 1162, 1151, 1152, 1154, 1164, - 1156, 1162, 1165, 1155, 1157, 1163, 1166, 1167, 1159, 1169, + 1110, 1110, 1118, 1112, 1113, 1119, 1115, 1114, 1111, 1112, + 1113, 1115, 1116, 1117, 1116, 1120, 1118, 1121, 1117, 1119, + 1120, 1122, 1123, 1124, 1125, 1127, 1127, 1128, 1129, 1123, + 1130, 1131, 1121, 1132, 1255, 1135, 1255, 1131, 1124, 1135, + 1122, 1128, 1133, 1125, 1142, 1130, 1129, 1133, 1136, 1136, + 1137, 1138, 1138, 1132, 1140, 1137, 1133, 1139, 1133, 1141, + 1143, 1133, 1141, 1142, 1139, 1144, 1145, 1146, 1140, 1147, + 1148, 1145, 1150, 1149, 1144, 1148, 1151, 1154, 1143, 1153, + 1153, 1147, 1154, 1150, 1155, 1156, 1146, 1149, 1157, 1155, + 1158, 1159, 1160, 1157, 1158, 1151, 1161, 1162, 1163, 1164, - 1165, 1168, 1171, 1164, 1160, 1172, 1168, 1158, 1359, 1170, - 1163, 1169, 1173, 1167, 1170, 1170, 1166, 1174, 1174, 1172, - 1176, 1171, 1178, 1177, 1359, 1173, 1175, 1175, 1178, 1179, - 1179, 1175, 1177, 1176, 1175, 1175, 1180, 1181, 1182, 1175, - 1186, 1180, 1183, 1184, 1182, 1175, 1181, 1183, 1184, 1175, - 1185, 1185, 1187, 1187, 1188, 1189, 1190, 1188, 1191, 1188, - 1192, 1186, 1194, 1193, 1195, 1196, 1197, 1191, 1193, 63, - 1200, 1196, 1197, 1198, 1190, 1189, 1194, 1199, 1198, 1200, - 1192, 1199, 1195, 1207, 1200, 1205, 1200, 1203, 1200, 1205, - 1200, 1201, 1201, 1202, 1202, 1206, 1202, 1208, 1203, 1209, + 1159, 1165, 1167, 1166, 1168, 1156, 1169, 1160, 1165, 1172, + 1163, 1161, 1170, 1171, 1164, 1166, 1162, 1173, 1170, 1175, + 1176, 1167, 1174, 1177, 1169, 1168, 1178, 1179, 1171, 1172, + 1181, 1174, 1180, 1184, 1175, 1177, 1183, 1173, 1186, 1176, + 1185, 1187, 1183, 1188, 1189, 1178, 1186, 1180, 1184, 1189, + 1181, 1190, 1179, 1192, 1185, 1193, 1199, 1194, 1197, 1188, + 1191, 1187, 1199, 1190, 63, 1191, 1191, 1195, 1195, 1193, + 1194, 1197, 1192, 1196, 1196, 1198, 1200, 1200, 1196, 1202, + 1201, 1196, 1196, 1203, 1198, 1201, 1196, 1207, 1202, 1203, + 1204, 1210, 1196, 1205, 1211, 1204, 1196, 1212, 1205, 1206, - 1210, 1207, 1211, 1212, 1209, 1209, 1208, 1213, 1212, 1210, - 1206, 1214, 1215, 1216, 1217, 1220, 1218, 1219, 1219, 1221, - 1214, 1213, 1218, 1220, 1211, 1222, 1223, 1224, 1217, 1225, - 1222, 1215, 1216, 1221, 1226, 1229, 1224, 1227, 1228, 1228, - 1223, 1235, 1227, 1230, 1230, 1236, 1231, 1225, 1231, 1233, - 1229, 1234, 1233, 1238, 1236, 1242, 1234, 1237, 1237, 1226, - 1235, 1239, 1239, 1240, 1240, 1241, 1243, 1244, 1244, 1245, - 1241, 1246, 1247, 1238, 1246, 1248, 1242, 1249, 1251, 1250, - 1248, 1250, 1253, 1254, 58, 1253, 1249, 1243, 1255, 1245, - 1256, 1263, 1247, 1255, 1257, 1258, 1251, 1259, 1254, 1257, + 1206, 1208, 1208, 1213, 1209, 1214, 1212, 1209, 1207, 1209, + 1214, 1210, 1211, 1215, 1216, 1217, 1218, 1221, 1274, 1219, + 1274, 1217, 1218, 1213, 1219, 1220, 1221, 1215, 1223, 1220, + 1230, 1221, 1216, 1221, 1222, 1221, 1226, 1221, 1229, 1222, + 1224, 1224, 1223, 1225, 1225, 1228, 1225, 1226, 1230, 1228, + 1231, 1232, 1233, 1229, 1234, 1235, 1232, 1232, 1236, 1231, + 1235, 1233, 1237, 1238, 1239, 1240, 1243, 1241, 1242, 1242, + 1244, 1237, 1236, 1241, 1243, 1245, 1234, 1246, 1247, 1240, + 1245, 1248, 1238, 1239, 1244, 1249, 1250, 1247, 1248, 1251, + 1253, 1246, 1252, 1252, 1251, 1254, 1254, 1257, 1259, 1258, - 1260, 1266, 1259, 1258, 1256, 1260, 1261, 1261, 1262, 1263, - 1264, 1265, 1276, 1262, 1266, 1268, 1264, 1269, 1265, 1270, - 1271, 1268, 1272, 1269, 1270, 1273, 1271, 1274, 1275, 1275, - 1278, 1272, 1276, 1281, 1280, 1282, 1283, 1284, 1274, 1285, - 1287, 1288, 1283, 1284, 1273, 1285, 1287, 1289, 1278, 1280, - 1290, 1291, 1292, 1281, 1293, 1288, 1294, 1294, 1282, 1295, - 1296, 1288, 1297, 1291, 1298, 1300, 1292, 1289, 1303, 1298, - 1290, 1301, 1293, 1299, 1299, 1305, 1301, 1304, 1307, 1295, - 1297, 1306, 1304, 1304, 1308, 1296, 1307, 1303, 1300, 1309, - 1306, 1310, 1311, 1305, 1312, 1320, 1314, 1311, 1308, 1313, + 1257, 1260, 1262, 1249, 1258, 1253, 1261, 1261, 1263, 1263, + 1260, 1250, 1264, 1264, 1265, 1266, 1267, 1259, 1269, 1265, + 1268, 1268, 1262, 1270, 1271, 1272, 1270, 1275, 1278, 1277, + 1272, 1273, 1277, 1280, 1279, 58, 1266, 1267, 1269, 1279, + 1273, 1281, 1282, 1278, 1271, 1275, 1281, 1280, 1283, 1284, + 1282, 1285, 1284, 1283, 1286, 1286, 1285, 1287, 1288, 1289, + 1290, 1291, 1287, 1293, 1294, 1289, 1295, 1290, 1297, 1293, + 1294, 1295, 1296, 1298, 1291, 1299, 1288, 1297, 1296, 1300, + 1300, 1301, 1303, 1305, 1306, 1307, 1299, 1308, 1309, 1310, + 1312, 1313, 1298, 1308, 1309, 1310, 1312, 1314, 1305, 1315, - 1311, 1313, 1316, 1312, 1309, 1318, 1310, 1317, 1316, 1310, - 1314, 1317, 1319, 1321, 1320, 1322, 1318, 1319, 1319, 1323, - 1324, 1326, 1325, 1327, 1323, 1324, 1328, 1331, 1327, 1330, - 1332, 1333, 1333, 1322, 1334, 1335, 1336, 1338, 1334, 1321, - 1325, 1326, 1339, 1330, 1337, 1331, 1328, 1341, 1332, 1338, - 1337, 1340, 1342, 1335, 1343, 1336, 1347, 1345, 1344, 1348, - 1350, 1339, 1341, 1344, 1345, 1340, 1346, 1342, 1348, 1349, - 1349, 1346, 1351, 1343, 1347, 1350, 1352, 1353, 1353, 1354, - 1355, 1351, 1360, 1356, 1358, 1354, 1355, 1357, 1357, 1361, - 1358, 1370, 1362, 1363, 1361, 1364, 1352, 1356, 1362, 1363, + 1303, 1301, 1316, 1318, 1306, 1313, 1317, 1320, 1307, 1319, + 1319, 1313, 1321, 1322, 1316, 1324, 1324, 1314, 1323, 1315, + 1317, 1318, 1325, 1323, 1326, 1328, 1331, 1320, 1329, 1326, + 1330, 1322, 1332, 1329, 1329, 1331, 1333, 1321, 1334, 1335, + 1332, 1336, 1337, 1346, 1328, 1325, 1336, 1339, 1330, 1336, + 1333, 1337, 1343, 1334, 1335, 1345, 1338, 1335, 1338, 1341, + 1342, 1339, 1344, 1343, 1342, 1341, 1347, 1344, 1344, 1346, + 1348, 1349, 1350, 1351, 1345, 1348, 1349, 1352, 1353, 1356, + 1355, 1357, 1352, 1359, 1347, 1358, 1358, 1359, 1360, 1361, + 1350, 1363, 1364, 1351, 1355, 1362, 1365, 1356, 1353, 1357, - 1370, 1364, 1371, 1360, 1365, 1365, 1366, 1366, 1368, 1368, - 1369, 1372, 1373, 1374, 1369, 1375, 1376, 1376, 1377, 1378, - 1371, 1380, 1375, 1372, 1379, 1381, 1373, 1378, 1374, 1379, - 1384, 1382, 1385, 1385, 1383, 1380, 1382, 1382, 1377, 1383, - 1383, 1386, 1387, 1388, 1381, 1390, 1389, 1391, 1392, 1393, - 1384, 1389, 1388, 1394, 1395, 1393, 1396, 1397, 1394, 1398, - 1386, 1387, 1396, 1399, 1390, 1398, 1392, 1391, 1400, 1399, - 1401, 1402, 1403, 1405, 1404, 1585, 1397, 1406, 1407, 1407, - 1395, 1408, 1585, 1409, 1408, 1410, 1410, 1400, 1404, 1401, - 1402, 1403, 1406, 1412, 1405, 1409, 1411, 1411, 1412, 1413, + 1366, 1362, 1367, 1363, 1368, 1377, 1360, 1369, 1361, 1370, + 1365, 1364, 1369, 1371, 1372, 1366, 1370, 1367, 1371, 1373, + 1374, 1374, 1375, 1368, 1376, 1377, 1378, 1378, 1373, 1379, + 1380, 1381, 1372, 1376, 1383, 1379, 1380, 1375, 1382, 1382, + 1383, 1384, 1385, 1386, 1387, 1381, 1388, 1389, 1386, 1396, + 1387, 57, 1388, 1389, 1390, 1390, 1395, 1384, 1391, 1391, + 1393, 1393, 1394, 1385, 1397, 1395, 1394, 1396, 1398, 1399, + 1400, 1401, 1401, 1402, 1404, 1403, 1397, 1400, 1405, 1404, + 1406, 1407, 1398, 1403, 1399, 1408, 1407, 1407, 1409, 1413, + 1408, 1408, 1405, 1402, 1410, 1410, 1411, 1412, 1413, 1406, - 1414, 1415, 1416, 1413, 1419, 1417, 1421, 1417, 1422, 1420, - 1415, 1417, 1427, 1414, 1420, 1416, 1423, 1424, 1424, 57, - 1425, 1421, 1419, 1426, 1417, 1425, 1428, 1427, 1422, 1426, - 1429, 1432, 1423, 1430, 1431, 1429, 1433, 1430, 1431, 1428, - 1434, 1435, 1436, 1436, 1438, 1440, 1443, 1435, 1441, 1442, - 1442, 1432, 1443, 1441, 1433, 1444, 1446, 1446, 1448, 1454, - 1434, 1448, 1438, 1449, 1449, 1450, 1440, 1451, 1453, 1455, - 1457, 1453, 1456, 1456, 1458, 1444, 1461, 1459, 1455, 1454, - 1464, 1450, 1460, 1451, 1463, 1457, 1465, 1460, 1462, 1462, - 1461, 1466, 1468, 1463, 1469, 1458, 1459, 1470, 1464, 1467, + 1414, 1415, 1416, 1417, 1418, 1414, 1419, 1420, 1409, 1422, + 1418, 1419, 1421, 1423, 1430, 1411, 1412, 1424, 1421, 1423, + 1415, 1417, 1416, 1424, 1425, 1426, 1427, 1428, 1422, 1432, + 1432, 1434, 1431, 1420, 1429, 1430, 1433, 1435, 1441, 1433, + 1436, 1437, 1437, 1425, 1426, 1427, 1428, 1431, 1429, 1442, + 1434, 1441, 1436, 1438, 1438, 1439, 1435, 1440, 1442, 1443, + 1439, 1440, 1444, 1448, 1444, 1446, 1447, 1449, 1444, 1450, + 1452, 1447, 1443, 1451, 1451, 1452, 1453, 1454, 1448, 1456, + 1455, 1444, 1453, 1446, 1456, 1450, 1457, 1449, 1459, 1460, + 1457, 1458, 1454, 1455, 1461, 1458, 1462, 1466, 1463, 1464, - 1467, 1465, 1470, 1471, 1472, 1472, 1468, 1473, 1474, 1475, - 1475, 1473, 1469, 1476, 1477, 1478, 1466, 1479, 1471, 1478, - 1483, 1480, 1482, 1482, 1484, 1477, 1480, 1485, 1474, 1484, - 1486, 1487, 1488, 1483, 1490, 1476, 1479, 1491, 1491, 1489, - 1493, 1492, 1494, 1485, 1498, 1487, 1492, 1496, 1486, 1495, - 1495, 1488, 1488, 1489, 1502, 1499, 1496, 1499, 1497, 1490, - 1493, 1500, 1494, 1497, 1498, 1501, 1500, 1503, 1505, 1506, - 1506, 1501, 1507, 1503, 1502, 1508, 1511, 1515, 1510, 1512, - 1512, 1508, 1505, 1510, 1513, 1513, 1517, 1514, 1516, 1517, - 1519, 1507, 1518, 1518, 1520, 1515, 1521, 1529, 1523, 1522, + 1464, 1468, 52, 1461, 1463, 1469, 1472, 1460, 1459, 1482, + 1469, 1470, 1470, 1471, 1478, 1466, 1462, 1474, 1474, 1471, + 1476, 1479, 1468, 1476, 1477, 1477, 1472, 1483, 1481, 1482, + 1478, 1481, 1484, 1484, 1485, 1486, 1483, 1479, 1487, 1488, + 1489, 1490, 1490, 1491, 1488, 1492, 1493, 1494, 1495, 1485, + 1496, 1496, 1491, 1497, 1489, 1498, 1486, 1487, 1502, 1499, + 1500, 1493, 1502, 1492, 1499, 1501, 1501, 1497, 1495, 1503, + 1504, 1504, 1494, 1498, 1505, 1500, 1506, 1507, 1508, 1509, + 1512, 1507, 1511, 1511, 1509, 1513, 1514, 1506, 1515, 1503, + 1513, 1516, 1517, 1512, 1518, 1519, 1505, 1508, 1520, 1520, - 1511, 1514, 1522, 1516, 1523, 1522, 1520, 1524, 1519, 1527, - 1525, 52, 1524, 1525, 1528, 1532, 1521, 1522, 1527, 1528, - 1530, 1532, 1529, 1530, 1531, 1531, 1533, 1539, 1534, 1525, - 1535, 1535, 1533, 1534, 1536, 1536, 1537, 1540, 1538, 1541, - 1539, 1542, 1537, 1538, 1543, 1544, 1545, 1543, 1546, 1548, - 1547, 1544, 1545, 1546, 1549, 1540, 1547, 1552, 1541, 1549, - 1551, 1542, 1550, 1550, 1553, 1551, 1554, 1555, 1556, 1557, - 1558, 1559, 1548, 1560, 1561, 1552, 1561, 1560, 1562, 1564, - 1565, 1555, 1556, 1557, 1553, 1566, 1554, 1567, 1558, 1568, - 1569, 1564, 1565, 1567, 1570, 1572, 1559, 1562, 1566, 1571, + 1536, 1522, 1514, 1523, 1521, 1516, 1515, 1525, 1518, 1521, + 1526, 1517, 1517, 1524, 1524, 1526, 1525, 1527, 1531, 1536, + 1519, 1522, 1528, 1523, 1528, 1529, 1530, 1532, 1534, 1540, + 1529, 1539, 1530, 1532, 1535, 1535, 1539, 1527, 1531, 1537, + 1541, 1541, 1534, 1542, 1542, 1537, 1543, 1544, 1545, 1546, + 1547, 1547, 1546, 1540, 1548, 1549, 1550, 1553, 1552, 1558, + 1543, 1556, 1553, 1545, 1552, 1544, 1554, 1549, 1551, 1554, + 1556, 1551, 1548, 1557, 1551, 1589, 1550, 1559, 1557, 1589, + 1559, 1560, 1560, 1561, 1558, 1554, 1551, 1562, 1566, 1561, + 1563, 1564, 1564, 1562, 1566, 1563, 1565, 1565, 1567, 1568, - 1574, 1574, 1575, 1576, 1579, 1577, 1569, 1580, 1576, 1568, - 1578, 1578, 1581, 1571, 1570, 1582, 1572, 1577, 1583, 1579, - 1584, 1580, 1575, 1587, 1591, 1586, 1589, 1583, 1592, 1593, - 1593, 1592, 1595, 1582, 1586, 1584, 1581, 1586, 1596, 1587, - 1599, 1589, 1594, 1594, 1595, 1597, 1589, 1600, 1597, 1591, - 1598, 1598, 1601, 1599, 1602, 1603, 1596, 1601, 1605, 1602, - 1604, 1606, 1608, 1607, 1609, 1611, 1600, 1605, 1610, 1610, - 1609, 1608, 1607, 1612, 1603, 1607, 1604, 1613, 1614, 1616, - 1606, 1615, 1619, 1620, 1622, 1611, 1612, 1621, 1621, 1623, - 47, 1616, 1614, 1628, 1624, 1613, 1626, 1615, 1623, 1624, + 1569, 1570, 1571, 1567, 1572, 1573, 1577, 1572, 1574, 1581, + 1575, 1573, 1568, 1576, 1574, 1575, 1578, 1582, 1569, 1576, + 1570, 1578, 1571, 1579, 1579, 1580, 1583, 1581, 1584, 1577, + 1580, 1585, 1587, 1586, 1588, 1591, 1590, 1582, 1590, 1593, + 1594, 1597, 1584, 1595, 1598, 1585, 1583, 1586, 1599, 1596, + 1587, 1593, 1594, 1600, 1591, 1596, 1595, 1601, 1608, 1588, + 1598, 1597, 1603, 1603, 1604, 1605, 1609, 1600, 1599, 1606, + 1605, 1607, 1607, 1608, 1610, 1611, 1612, 1613, 1601, 1614, + 1609, 1606, 1615, 1616, 1604, 1612, 1614, 1618, 1620, 1622, + 1622, 1615, 1613, 1611, 1615, 1623, 1623, 1621, 1610, 1616, - 1622, 1620, 1625, 1625, 1627, 1626, 1629, 1619, 1626, 1627, - 1630, 1628, 1633, 1631, 1634, 1635, 1636, 1625, 1631, 1631, - 1638, 1636, 1639, 1639, 1637, 1640, 1633, 1629, 1630, 1634, - 1637, 1640, 1645, 1646, 1641, 1642, 1643, 1635, 1638, 1641, - 1647, 1642, 1643, 1648, 1650, 1649, 1647, 1646, 1649, 1652, - 1650, 1654, 1645, 1655, 1649, 1656, 1648, 1652, 1657, 18, - 1658, 1659, 1660, 1656, 1661, 1662, 1662, 1657, 1665, 1663, - 1654, 1664, 1655, 1658, 1659, 1663, 1660, 1664, 1661, 1666, - 1666, 1665, 1667, 1668, 1669, 1670, 1671, 1662, 1672, 1673, - 1674, 1677, 1671, 1676, 1676, 1678, 1683, 1682, 1670, 1678, + 1621, 1625, 1618, 1624, 1628, 1626, 1629, 1618, 1626, 1627, + 1627, 1630, 1632, 1620, 1633, 1624, 1630, 1628, 1631, 1625, + 1634, 1635, 1638, 1631, 1636, 1629, 1637, 1640, 1638, 1634, + 1633, 1632, 1641, 1636, 1642, 1637, 1636, 1639, 1639, 1643, + 1635, 1644, 1647, 1645, 1650, 1641, 1646, 1640, 1645, 1645, + 1651, 1646, 1642, 1643, 1647, 1652, 1652, 1644, 1653, 1655, + 1658, 1654, 1656, 1656, 1655, 1658, 1657, 1659, 1651, 1650, + 1654, 1660, 1661, 1664, 1653, 1657, 1662, 1656, 1657, 1665, + 1666, 1662, 1662, 1667, 47, 1659, 1669, 1664, 1667, 1668, + 1661, 1673, 1660, 1671, 1665, 1668, 1670, 1670, 1672, 1671, - 17, 1668, 1667, 1669, 1679, 1673, 1682, 1680, 1674, 1679, - 1672, 1677, 1680, 1681, 1685, 1687, 1688, 1686, 1681, 1683, - 1686, 1689, 1689, 1685, 1690, 1691, 1692, 1687, 1693, 1693, - 1694, 1688, 1695, 1699, 1696, 1697, 1700, 1691, 1702, 1695, - 1703, 0, 1701, 1690, 1694, 1692, 1696, 1697, 1701, 1704, - 1702, 0, 1699, 1705, 1705, 1704, 1700, 1706, 1703, 1709, - 1706, 1707, 1707, 1710, 1709, 1711, 1712, 1712, 1713, 1716, - 1717, 1711, 1710, 1714, 1715, 1714, 1718, 1715, 1719, 1720, - 1713, 1721, 1722, 1723, 1720, 1724, 1721, 1727, 1725, 1716, - 1726, 1722, 1717, 1725, 1718, 1723, 1719, 1728, 1729, 1726, + 1674, 1675, 1666, 1672, 1669, 1673, 1674, 1675, 1677, 1678, + 1679, 1680, 1681, 1682, 1684, 1681, 1679, 1686, 1687, 1682, + 1689, 1681, 1684, 1678, 1680, 1688, 1690, 1691, 1677, 1689, + 1692, 1693, 1695, 1688, 1694, 1694, 1686, 1687, 1695, 1690, + 1691, 1696, 1697, 1699, 1692, 1693, 1700, 1696, 1698, 1698, + 1701, 1702, 1702, 1703, 1704, 1697, 1694, 1705, 1706, 1707, + 1704, 1709, 1709, 1699, 1700, 1710, 1703, 1711, 1712, 1701, + 1713, 1711, 1716, 1712, 1706, 1713, 1714, 1707, 1715, 1705, + 1718, 1714, 1720, 1719, 1721, 1710, 1719, 1715, 1723, 1718, + 1722, 1722, 1724, 1725, 1720, 1716, 1726, 1726, 1728, 1721, - 1724, 1730, 1728, 1729, 1731, 1731, 1733, 1727, 1732, 1728, - 1735, 1736, 1726, 1747, 1732, 1738, 1730, 1737, 1739, 1755, - 1739, 1744, 1740, 1741, 1741, 1742, 1742, 1733, 1748, 1735, - 0, 1736, 1757, 1737, 1747, 1738, 1740, 1755, 1740, 1743, - 1743, 1744, 1745, 1745, 1746, 1746, 1749, 1749, 1750, 1748, - 1751, 1752, 1750, 1754, 1752, 1756, 1751, 1757, 1760, 1754, - 1758, 1756, 1761, 1758, 1759, 1759, 1763, 1761, 1762, 1762, - 1764, 1765, 1766, 1766, 1767, 1769, 1765, 1768, 1760, 1767, - 1770, 1763, 1777, 1768, 1771, 1772, 1773, 1769, 1769, 1769, - 1774, 1764, 1773, 1776, 1769, 1780, 1777, 1778, 1776, 1776, + 1727, 1729, 1732, 1730, 1724, 1728, 1733, 1723, 1735, 1736, + 1734, 1737, 1725, 1729, 1727, 1730, 1734, 1737, 1738, 1738, + 1735, 1732, 1739, 1740, 1740, 1739, 1733, 1736, 1742, 1743, + 1744, 1745, 1745, 1742, 1746, 1747, 1744, 1747, 1743, 1748, + 1749, 1750, 1748, 1751, 1752, 1753, 1746, 1754, 1755, 1757, + 1753, 1758, 1754, 1756, 1760, 1763, 1758, 1755, 1759, 18, + 1749, 1751, 1752, 1750, 1757, 1756, 1761, 1759, 1762, 1766, + 1763, 1761, 1768, 1762, 1760, 1764, 1764, 1765, 1761, 1769, + 1759, 1770, 1771, 1765, 1772, 1773, 1772, 1774, 1774, 1777, + 1766, 1768, 1775, 1775, 1776, 1776, 1780, 1770, 1769, 1773, - 1770, 1779, 1771, 1779, 1781, 1772, 1780, 1782, 1783, 1784, - 1774, 1785, 1778, 1782, 1786, 1786, 1787, 1783, 1789, 1781, - 1788, 1788, 1790, 1791, 1791, 1792, 1792, 1793, 1797, 1784, - 1796, 1796, 1785, 1801, 1798, 1802, 1800, 1804, 1789, 1803, - 1803, 1802, 1787, 1798, 1790, 1800, 1805, 1793, 1806, 1808, - 1807, 1809, 1809, 1797, 1801, 1806, 1810, 1811, 1804, 1807, - 1813, 1805, 1814, 1815, 1816, 1813, 1817, 1822, 1814, 1820, - 1818, 1816, 1817, 1811, 1820, 1808, 1818, 1819, 1819, 1821, - 1823, 1824, 1810, 1815, 1826, 1827, 1825, 1822, 1821, 1825, - 1828, 1828, 1829, 1824, 1830, 1831, 1835, 1832, 1829, 1823, + 1781, 1773, 1771, 1778, 1778, 1779, 1779, 1782, 1782, 1777, + 1783, 1788, 1784, 1785, 1783, 1790, 1785, 1780, 1784, 1787, + 1789, 1781, 1792, 1792, 1791, 1787, 1789, 1791, 1793, 1788, + 1794, 1795, 1795, 1797, 1796, 1794, 1798, 1799, 1799, 1800, + 1790, 1798, 1804, 1802, 1800, 1801, 1803, 1805, 1793, 1796, + 1807, 1801, 1806, 1811, 1797, 1802, 1802, 1802, 1806, 1809, + 1804, 1810, 1802, 1813, 1809, 1809, 1803, 1805, 1811, 1812, + 1807, 1812, 1814, 1815, 1813, 1810, 1816, 1817, 1818, 1815, + 1819, 1819, 1820, 1821, 1821, 1816, 1822, 1814, 1823, 1824, + 1824, 1825, 1825, 1826, 1829, 1829, 1830, 1817, 1831, 1818, - 1830, 1833, 1826, 1836, 1837, 1833, 1838, 1838, 1839, 1837, - 1842, 1827, 1832, 1840, 1843, 1831, 1835, 1844, 1843, 1846, - 1846, 1833, 1845, 1844, 1848, 1836, 1847, 1839, 1840, 1842, - 1847, 1845, 1849, 1849, 1850, 1848, 1851, 1852, 1853, 1854, - 1848, 1855, 1856, 1853, 1858, 1857, 1859, 1859, 1856, 1858, - 1851, 1860, 1860, 1861, 1863, 1850, 1852, 1861, 1864, 1854, - 1857, 1855, 1865, 1863, 1866, 1866, 1868, 1868, 1872, 1864, - 1869, 1870, 1871, 1874, 1864, 1869, 1869, 1870, 1871, 1873, - 1875, 1877, 1865, 1878, 1873, 1874, 1875, 1878, 1879, 1880, - 1881, 1882, 1883, 1877, 1872, 1885, 1881, 1884, 1883, 1886, + 1833, 1834, 1836, 1836, 1837, 1835, 1822, 1831, 1820, 1833, + 1823, 1835, 1838, 1826, 1841, 1840, 1839, 1842, 1842, 1843, + 1844, 1830, 1834, 1839, 1840, 1837, 1846, 1838, 1847, 1848, + 1849, 1846, 1850, 1851, 1847, 1851, 1844, 1849, 1850, 1853, + 1841, 1854, 1855, 1855, 1857, 1843, 1856, 1854, 1858, 1848, + 1859, 1856, 1860, 1857, 1861, 1862, 1863, 1861, 1853, 1864, + 1864, 1865, 1868, 1867, 1860, 1866, 1869, 1865, 1858, 1859, + 1869, 1866, 1871, 1862, 1872, 1873, 1875, 1868, 1874, 1874, + 1873, 1878, 1863, 1867, 1876, 1879, 1869, 1880, 1880, 1879, + 1884, 1881, 1871, 1882, 1884, 1875, 1872, 1881, 1885, 1876, - 1879, 1890, 1891, 0, 1886, 1887, 1889, 1891, 1893, 1894, - 1894, 1893, 1897, 1882, 1880, 1885, 1884, 1887, 1889, 1898, - 1890, 1895, 1895, 1896, 1896, 1898, 1900, 1899, 1901, 1902, - 1904, 1900, 1897, 1899, 1901, 1904, 1906, 1907, 1902, 1906, - 1908, 1908, 1910, 1911, 1914, 1912, 1913, 1913, 1919, 1907, - 1912, 1915, 1916, 1914, 1910, 1911, 1915, 1916, 1917, 1918, - 1918, 1917, 1920, 1921, 1922, 1923, 1926, 1924, 1919, 1923, - 1925, 1920, 1924, 1927, 1928, 1929, 1925, 1932, 1931, 1931, - 1938, 1921, 1927, 1922, 1926, 1933, 1934, 1934, 1946, 1929, - 1931, 1936, 1928, 1937, 1933, 1932, 1935, 1935, 1939, 1940, + 1878, 1887, 1882, 1883, 1883, 1886, 1886, 1888, 1889, 1885, + 1890, 1891, 1892, 1893, 1885, 1890, 1896, 1896, 1894, 1893, + 1895, 1888, 1887, 1897, 1897, 1895, 1898, 1889, 1900, 1901, + 1898, 1891, 1892, 1894, 1902, 1903, 1903, 1900, 1905, 1905, + 1901, 1906, 1907, 1909, 1910, 1901, 1906, 1906, 1907, 1909, + 1911, 1912, 1913, 1915, 1902, 1911, 1916, 1917, 1913, 1918, + 1916, 1919, 1921, 1912, 1920, 1915, 1922, 1919, 1921, 1917, + 1910, 1923, 1924, 1928, 1929, 1925, 1927, 1924, 1931, 1929, + 1935, 1931, 1932, 1932, 1918, 1922, 1920, 1925, 1927, 1933, + 1933, 1923, 1928, 1934, 1934, 1936, 1937, 1940, 1938, 1939, - 1936, 1938, 1947, 1939, 1946, 1937, 1943, 1943, 1945, 1949, - 1951, 1945, 1940, 1950, 1952, 1954, 1951, 1954, 1947, 1953, - 1953, 1955, 1955, 1961, 1949, 1956, 1962, 1950, 1958, 1958, - 1963, 1952, 1962, 1956, 1959, 1959, 1963, 1964, 1965, 1966, - 1967, 1967, 1968, 1969, 1964, 1970, 1961, 1972, 1974, 1971, - 1976, 1968, 1975, 1973, 1979, 1978, 1976, 1970, 1980, 1966, - 1965, 1971, 1972, 1982, 1969, 1973, 1983, 1975, 1986, 1976, - 1980, 1981, 1981, 1984, 1974, 1978, 1984, 1979, 1985, 1988, - 1989, 1982, 1989, 1985, 1988, 1990, 1983, 1991, 1986, 1992, - 1994, 1996, 1991, 1997, 1998, 1999, 1992, 1999, 2000, 1994, + 1935, 1936, 1937, 1938, 1942, 1939, 1940, 1944, 1945, 1942, + 1944, 1946, 1946, 1948, 1949, 1952, 1950, 1951, 1951, 1957, + 1945, 1950, 1953, 1954, 1952, 1948, 1949, 1953, 1954, 1955, + 1956, 1956, 1955, 1958, 1959, 1960, 1961, 1964, 1962, 1957, + 1961, 1963, 1958, 1962, 1965, 1966, 1967, 1963, 1970, 1969, + 1969, 1972, 1959, 1965, 1960, 1964, 1971, 1973, 1973, 1974, + 1967, 1969, 1975, 1966, 1976, 1971, 1970, 1977, 1974, 1978, + 1983, 1972, 1977, 1983, 1975, 1981, 1981, 1984, 1985, 1990, + 1987, 1989, 1978, 1988, 1992, 1976, 1992, 1989, 1991, 1991, + 1993, 1993, 1994, 1984, 1985, 1987, 1990, 1988, 1996, 1996, - 2003, 2005, 1997, 1990, 2010, 2002, 1998, 2002, 2006, 1996, - 2004, 2004, 2011, 2006, 2003, 2008, 2007, 2000, 2007, 2009, - 2008, 2013, 2010, 2012, 2009, 2014, 2013, 2005, 2015, 2012, - 2017, 2018, 2011, 2019, 2019, 2021, 2015, 2022, 2014, 2020, - 2020, 2023, 2025, 2024, 2025, 2018, 2026, 2023, 2024, 2017, - 2021, 2027, 2028, 2028, 2029, 2030, 2030, 2022, 2033, 2027, - 2031, 2031, 2032, 2033, 2026, 2034, 2029, 2027, 2036, 2038, - 2037, 2032, 2037, 2039, 2041, 2040, 2043, 2036, 2039, 2039, - 2036, 2048, 2044, 2034, 2040, 2047, 2041, 2044, 2043, 2045, - 2038, 2049, 2050, 2050, 2045, 2051, 2052, 2054, 2047, 2053, + 1994, 1997, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2006, + 2000, 2001, 2007, 2002, 2005, 2005, 2012, 2016, 2006, 2008, + 2009, 2010, 2011, 2013, 2014, 2017, 1999, 2018, 2004, 2003, + 2014, 2008, 2009, 2007, 2011, 2020, 2010, 2016, 2013, 2018, + 2019, 2019, 2012, 2014, 2021, 2023, 2022, 2024, 2017, 2022, + 2023, 2026, 2027, 2020, 2027, 2028, 2026, 2029, 2030, 2032, + 2034, 2035, 2029, 2036, 2021, 2030, 2038, 2024, 2032, 2037, + 2035, 2037, 2040, 2028, 2040, 2036, 2041, 2043, 2034, 2042, + 2042, 2044, 2045, 2046, 2045, 2038, 2044, 2047, 2046, 2048, + 2041, 2049, 2047, 2050, 2053, 2051, 2052, 2055, 2057, 2050, - 2049, 2048, 2055, 2059, 2057, 2060, 2058, 2061, 2068, 2069, - 2060, 2054, 2061, 2051, 2052, 2053, 2057, 2055, 2058, 2062, - 2065, 2067, 2070, 2059, 2069, 2071, 2065, 2067, 2062, 2072, - 2076, 2068, 2073, 2073, 2074, 2075, 2075, 2077, 2072, 2065, - 2070, 2077, 2078, 2074, 2079, 2080, 2081, 2078, 2082, 2076, - 2071, 0, 2081, 2083, 2084, 2085, 2088, 2079, 2083, 2083, - 2084, 2085, 2086, 2087, 2080, 2086, 2091, 2091, 2092, 2092, - 2082, 2087, 2093, 2094, 2094, 2096, 2088, 2095, 2095, 2097, - 2098, 2093, 2103, 2092, 2099, 2106, 2098, 2096, 2103, 2099, - 2100, 2100, 2101, 2101, 2092, 2102, 2108, 2097, 2105, 2107, + 2051, 2058, 2062, 2043, 2128, 2055, 2053, 2048, 2054, 2052, + 2061, 2049, 2128, 2054, 2054, 2058, 2066, 2057, 2059, 2059, + 2060, 2060, 2062, 2063, 2067, 2061, 2064, 2069, 2065, 2063, + 2065, 2064, 2067, 2074, 2066, 2068, 2068, 2070, 2070, 2069, + 2067, 2071, 2071, 2072, 2073, 2076, 2077, 2078, 2077, 2073, + 2079, 2074, 2072, 2080, 2076, 2079, 2079, 2076, 2081, 2082, + 2084, 2085, 2088, 2089, 2086, 2080, 2085, 2081, 2078, 2086, + 2090, 2082, 2084, 2091, 2091, 2088, 2092, 2093, 2095, 2090, + 2094, 2098, 2096, 2089, 2100, 2101, 2099, 2109, 2112, 2120, + 2101, 2110, 2095, 2098, 2092, 2093, 2094, 2096, 2099, 2103, - 2102, 2110, 2105, 2107, 2111, 2106, 2112, 2113, 2114, 2111, - 2115, 2116, 2117, 2114, 2118, 2119, 2108, 2120, 2120, 2118, - 2121, 2122, 2113, 2124, 2121, 2123, 2110, 2116, 2115, 2112, - 2123, 2125, 2117, 2126, 2127, 2128, 2122, 2119, 2125, 2129, - 2128, 2130, 2131, 2131, 2134, 2126, 2133, 2135, 2136, 2124, - 2137, 2138, 2129, 2127, 2133, 2139, 2140, 2141, 2143, 2130, - 0, 2147, 2145, 2134, 2150, 2146, 2135, 2147, 2140, 2150, - 2138, 2136, 2153, 2143, 2137, 2145, 2139, 2152, 2141, 2146, - 2148, 2154, 2148, 2149, 2149, 2151, 2153, 2157, 2151, 2157, - 2152, 2155, 2155, 2159, 2154, 2156, 2156, 2158, 2158, 2160, + 2102, 2106, 2120, 2108, 2100, 2102, 2110, 2106, 2103, 2108, + 2109, 2111, 2113, 2112, 2114, 2114, 2115, 2116, 2116, 2117, + 2106, 2113, 2118, 2119, 2121, 2115, 2118, 2122, 2119, 2111, + 2123, 2124, 17, 2122, 2125, 2126, 2124, 2124, 2117, 2127, + 2125, 2126, 2127, 2121, 2129, 2132, 2132, 2133, 2133, 2134, + 2135, 2135, 2123, 2136, 2136, 2137, 2138, 2139, 2134, 2151, + 2140, 2143, 2133, 2139, 2129, 2140, 2143, 2137, 2141, 2141, + 2142, 2142, 2144, 2133, 2138, 2146, 2147, 2148, 2144, 2146, + 2149, 2148, 2152, 2153, 2151, 2155, 2154, 2152, 2157, 2156, + 2155, 2158, 2159, 2160, 2161, 2161, 2147, 2159, 2162, 2163, - 2161, 2161, 2162, 2163, 2163, 2164, 2164, 2168, 2159, 2169, - 2165, 2162, 2160, 2167, 2162, 2165, 2170, 2173, 2167, 2171, - 2171, 2172, 2172, 2174, 2174, 2175, 2177, 2168, 2170, 2169, - 2176, 2176, 2178, 2179, 2179, 2181, 2173, 2178, 2180, 2180, - 2183, 2177, 2182, 2175, 2184, 2186, 2187, 2187, 2188, 2181, - 2186, 2182, 2189, 2189, 2183, 2190, 2191, 2192, 2193, 2193, - 2192, 2195, 2191, 2184, 2194, 2194, 2196, 2188, 2197, 2198, - 2198, 2200, 2201, 2190, 2193, 2202, 2204, 2204, 2203, 2205, - 2195, 2196, 2203, 2206, 2207, 2208, 2211, 2197, 2206, 2212, - 2202, 2200, 2210, 2210, 2213, 2201, 2212, 2214, 2205, 2207, + 2149, 2154, 2162, 2164, 2157, 2165, 2153, 2156, 2164, 2166, + 2167, 2158, 2169, 2168, 2163, 2160, 2170, 2169, 2171, 2172, + 2172, 2175, 2167, 2176, 2177, 2174, 2178, 2166, 2184, 2170, + 2179, 2165, 2168, 2174, 2180, 2182, 2171, 2260, 2187, 2181, + 2175, 2186, 2176, 2184, 2189, 2192, 2189, 2177, 2192, 2179, + 2178, 2181, 2187, 2188, 2186, 2180, 2182, 2190, 2190, 2188, + 2191, 2193, 2194, 2260, 2195, 2191, 2196, 2196, 2197, 2197, + 2198, 2200, 2198, 2203, 2193, 2201, 2194, 2195, 2199, 2199, + 2202, 2202, 2203, 2204, 2204, 2203, 2200, 2206, 2201, 2205, + 2205, 2208, 2206, 2209, 2210, 2211, 2208, 2212, 2212, 2213, - 2208, 2215, 2216, 2217, 2217, 2218, 2211, 2219, 2213, 2219, - 2222, 2225, 2223, 2220, 2218, 2214, 2220, 2223, 2224, 2215, - 2227, 2226, 2222, 2224, 2228, 2229, 2235, 2231, 2216, 2228, - 2232, 2220, 2231, 2220, 2226, 2232, 2225, 2233, 2234, 2236, - 2239, 2227, 2240, 2237, 2234, 2236, 0, 2235, 2237, 2238, - 2241, 2229, 2233, 2241, 2238, 2240, 2246, 2242, 2243, 2244, - 2245, 2251, 2254, 2254, 2253, 2239, 2242, 2243, 2244, 2245, - 2246, 2247, 2248, 2253, 2255, 2249, 2257, 2247, 2248, 2249, - 2255, 2251, 2256, 2256, 2259, 2257, 2258, 2258, 2260, 2259, - 2262, 2256, 2265, 2263, 2264, 2264, 2266, 2269, 2273, 2268, + 2213, 2214, 2215, 2215, 2216, 2217, 2217, 2211, 2218, 0, + 2219, 2220, 2220, 2209, 2210, 2219, 2221, 2221, 2222, 2223, + 2214, 2224, 2216, 2218, 2225, 2227, 2228, 2228, 2223, 2229, + 2227, 2231, 2222, 2230, 2230, 2224, 2232, 2233, 2234, 2234, + 2233, 2236, 2232, 2225, 2235, 2235, 2237, 2240, 2229, 2231, + 2238, 2241, 2238, 2244, 2234, 2242, 2242, 2245, 2249, 2246, + 2236, 2237, 2240, 2247, 2248, 2248, 2250, 2247, 2251, 2252, + 2241, 2250, 2255, 2244, 2246, 2254, 2254, 2249, 2256, 2257, + 2245, 2258, 2259, 2251, 2252, 2256, 2261, 2261, 2262, 2263, + 2266, 2263, 2255, 2257, 2267, 2264, 2266, 2262, 2264, 2258, - 2270, 2273, 2271, 2275, 2276, 2266, 2262, 2265, 2260, 2263, - 2260, 2268, 2274, 2269, 2271, 2270, 2276, 2274, 2277, 2277, - 2278, 2278, 2282, 2275, 2280, 2280, 2281, 2282, 2283, 2281, - 2284, 2285, 2286, 2286, 2283, 2287, 2284, 2288, 2288, 2289, - 2285, 2290, 2291, 2292, 2292, 2294, 2293, 2302, 2295, 2287, - 2297, 2289, 2293, 2295, 2297, 2290, 2302, 2298, 2303, 2294, - 2298, 2291, 2299, 2299, 2300, 2301, 2305, 2305, 2304, 2300, - 2301, 2301, 2304, 2306, 2308, 2309, 2310, 2311, 2303, 2308, - 2312, 2313, 2314, 2315, 2312, 2317, 2306, 2314, 2316, 2315, - 2318, 2311, 2319, 2320, 2316, 2309, 2310, 2321, 2320, 2324, + 2259, 2270, 2268, 2269, 2271, 2273, 2267, 2268, 2269, 2272, + 2273, 2274, 2278, 2264, 2276, 2264, 2277, 2271, 2279, 2276, + 2280, 2277, 2281, 2284, 2279, 2285, 2270, 2278, 2281, 2282, + 2272, 2283, 2286, 2287, 2282, 2286, 2283, 2274, 2285, 2372, + 2288, 2280, 2287, 2289, 2290, 2291, 2296, 2372, 2284, 2288, + 2292, 2293, 2289, 2290, 2294, 2298, 2292, 2293, 2294, 2291, + 2299, 2299, 2300, 2302, 2298, 2305, 2296, 2307, 2300, 2301, + 2301, 2304, 2302, 2303, 2303, 2308, 2304, 2310, 2301, 2309, + 2309, 2311, 2313, 2307, 2314, 2305, 2315, 2305, 2320, 2462, + 2311, 2308, 2310, 2316, 2313, 2318, 2462, 2319, 2318, 2321, - 2323, 2313, 2325, 2317, 2326, 2327, 2328, 2325, 2328, 2318, - 2326, 2319, 2323, 2327, 2330, 2324, 2332, 2335, 2321, 2333, - 2333, 2334, 2340, 2330, 2334, 2336, 2336, 2339, 2340, 2341, - 2332, 2339, 2342, 2342, 2348, 2343, 2346, 2346, 2351, 2350, - 2354, 2341, 2355, 2335, 2343, 2354, 2356, 2358, 2358, 2364, - 2357, 2356, 2348, 2350, 2351, 2357, 2360, 2360, 2362, 2363, - 2363, 2365, 2366, 2368, 2362, 2364, 2369, 2366, 2355, 2370, - 2370, 2372, 2374, 2373, 2375, 2377, 2377, 2379, 2369, 2373, - 2372, 2378, 2368, 2365, 2378, 2380, 2382, 2382, 2384, 2375, - 2374, 2383, 2383, 2384, 2385, 2386, 2379, 2387, 2388, 2389, + 2314, 2315, 2319, 2322, 2322, 2316, 2323, 2323, 2320, 2325, + 2325, 2321, 2326, 2327, 2328, 2326, 2329, 2330, 2327, 2332, + 2328, 2335, 2329, 2331, 2331, 2334, 2330, 2333, 2333, 2336, + 2337, 2337, 2338, 2332, 2340, 2335, 2339, 2334, 2338, 2340, + 2342, 2348, 2343, 2346, 2342, 2343, 2344, 2344, 2336, 2345, + 2339, 2347, 2346, 2349, 2345, 2350, 2350, 2349, 2351, 2353, + 2347, 2348, 2354, 2355, 2353, 2356, 2357, 2358, 2359, 2360, + 2357, 2351, 2361, 2359, 2362, 2360, 2363, 2364, 2361, 2356, + 2365, 2366, 2354, 2355, 2369, 2365, 2368, 2358, 2370, 2380, + 2377, 2371, 2362, 2370, 2375, 2363, 2364, 2371, 2368, 2373, - 2388, 2390, 2387, 2380, 2386, 2391, 2392, 2393, 2400, 2394, - 0, 2392, 2385, 2389, 2394, 2390, 2399, 2391, 2395, 2395, - 2396, 2396, 2397, 2397, 2398, 2398, 2400, 2393, 2399, 2401, - 2402, 2402, 2403, 2403, 2401, 2404, 2405, 2406, 2407, 2408, - 2408, 2409, 2410, 2410, 2411, 2411, 2413, 2404, 2405, 2414, - 2412, 2415, 2416, 2418, 2407, 2419, 2414, 2406, 2413, 2417, - 2409, 2412, 2421, 2415, 2417, 2420, 2420, 2422, 2423, 2424, - 2425, 2421, 2416, 2418, 2427, 2419, 2426, 2428, 2431, 2428, - 2429, 2435, 2424, 2430, 2430, 2432, 2433, 2431, 2423, 2436, - 2426, 2437, 2429, 2422, 2425, 2438, 2427, 2449, 2438, 2435, + 2369, 2373, 2366, 2375, 2377, 2378, 2378, 2379, 2381, 2381, + 2379, 2385, 2384, 2386, 2388, 2380, 2384, 2385, 2387, 2387, + 2391, 2391, 2393, 2388, 2395, 2386, 2396, 2399, 2400, 2401, + 2402, 2409, 2399, 2407, 2401, 2402, 2403, 2403, 2395, 2407, + 2393, 2410, 2396, 2405, 2405, 2408, 2408, 2409, 2411, 2413, + 2415, 2419, 2414, 2411, 2400, 2414, 2421, 2416, 2417, 2417, + 2419, 2420, 2415, 2410, 2422, 2424, 2424, 2420, 2413, 2416, + 2425, 2426, 0, 2425, 2421, 2427, 2429, 2429, 2431, 2422, + 2430, 2430, 2432, 2431, 2434, 2433, 2435, 2436, 2435, 2434, + 2426, 2437, 2438, 2427, 2433, 2440, 2441, 2439, 2442, 2448, - 2432, 2433, 2439, 2440, 2441, 2442, 2442, 2451, 2440, 2441, - 2452, 2436, 2443, 2443, 2437, 2449, 2439, 2444, 2444, 2446, - 2446, 2448, 2448, 2450, 2454, 2452, 2451, 2455, 2456, 2457, - 2458, 2459, 2461, 2460, 2450, 2460, 2462, 2463, 2467, 2458, - 2464, 2464, 2466, 2466, 2454, 2455, 2469, 2470, 2475, 2457, - 2456, 2459, 2461, 2467, 2462, 2463, 2470, 2471, 2471, 2476, - 2473, 2474, 2474, 2477, 2478, 2479, 2475, 2480, 2469, 2473, - 2477, 2481, 2482, 2483, 2483, 2484, 2484, 2476, 2485, 2478, - 2487, 2486, 2491, 2479, 2490, 2480, 2487, 2481, 2488, 2488, - 2490, 2482, 2489, 2489, 2492, 2493, 2494, 2495, 2485, 2486, + 2432, 2436, 2439, 2442, 2438, 2437, 2443, 2443, 2444, 2444, + 2445, 2445, 2446, 2446, 2447, 2440, 2441, 2448, 2449, 2450, + 2450, 2451, 2451, 2449, 2452, 2453, 2447, 2454, 2455, 2456, + 2456, 2457, 2458, 2458, 2459, 2459, 2452, 2453, 2460, 2461, + 2463, 2464, 2466, 2465, 2455, 2467, 2469, 2454, 2465, 2460, + 2457, 2461, 2463, 2468, 2468, 2469, 2470, 2471, 2472, 2473, + 2474, 2464, 2466, 2475, 2476, 2467, 2476, 2477, 2478, 2478, + 2484, 2472, 2479, 2480, 2474, 2481, 2483, 2471, 2485, 2477, + 2499, 2479, 2470, 2473, 2486, 2475, 2487, 2486, 2480, 0, + 2481, 2488, 2484, 2489, 2483, 2497, 2488, 2502, 2489, 2499, - 2491, 2496, 2495, 2497, 2509, 2499, 2498, 2499, 2504, 2492, - 2494, 2498, 2500, 2500, 2493, 2501, 2506, 2501, 2502, 2502, - 2507, 2496, 2508, 2497, 2509, 2506, 2510, 2504, 2511, 2518, - 2512, 2510, 2515, 2516, 2508, 2519, 2516, 2517, 2517, 2507, - 2520, 2520, 2521, 2523, 2518, 2528, 2521, 2524, 2511, 2512, - 2526, 2524, 2515, 2519, 2525, 2525, 2529, 2530, 2523, 2533, - 2528, 2531, 2531, 2526, 2534, 2535, 2536, 2536, 2537, 2535, - 2540, 2533, 2541, 2534, 2538, 2538, 2529, 2530, 2539, 2540, - 2542, 2543, 2543, 2539, 2548, 2548, 2549, 2537, 2541, 2550, - 2550, 2551, 2542, 2552, 2553, 2556, 2554, 2555, 2555, 2558, + 2487, 2485, 2490, 2490, 2491, 2491, 2492, 2492, 2494, 2494, + 2496, 2496, 2498, 2497, 2500, 2503, 2504, 2502, 2506, 2505, + 2507, 2509, 2508, 2498, 2508, 2510, 2511, 2506, 2515, 2500, + 2512, 2512, 2516, 2503, 2514, 2514, 2517, 2522, 2504, 2505, + 2507, 2509, 2515, 2510, 2511, 2517, 2518, 2518, 2520, 2521, + 2521, 2523, 2524, 2525, 2516, 2522, 2526, 2520, 2527, 2524, + 2529, 2528, 2530, 2530, 2531, 2531, 2532, 2533, 2525, 2523, + 2535, 2535, 2534, 2538, 2526, 2539, 2527, 2528, 2534, 2529, + 2536, 2536, 2537, 2540, 2541, 2533, 2532, 2542, 2537, 2543, + 2539, 2538, 2542, 2544, 2545, 2546, 2551, 2546, 2541, 2545, - 2558, 2563, 2561, 2553, 2551, 2554, 2552, 2561, 2549, 2562, - 2556, 2564, 2565, 2566, 2562, 2563, 2564, 2567, 2570, 2568, - 2565, 2573, 2577, 2571, 2572, 0, 2567, 2568, 2571, 2572, - 2574, 2574, 2566, 2570, 2575, 2575, 2573, 2576, 2578, 2578, - 2579, 2577, 2576, 2580, 2581, 2582, 2583, 2579, 2580, 2584, - 2585, 2585, 2583, 2586, 2584, 2587, 2588, 2588, 2589, 2589, - 2587, 2592, 2581, 2582, 2593, 2593, 2594, 2595, 2586, 2594, - 2596, 2597, 2595, 2595, 2592, 2596, 2597, 2598, 2599, 2600, - 2601, 2602, 2603, 2600, 2599, 2601, 2604, 2605, 2608, 2606, - 2602, 2598, 2607, 2608, 2604, 2606, 2611, 2603, 2607, 2609, + 2547, 2547, 2540, 2548, 2554, 2548, 2549, 2549, 2553, 2543, + 2555, 2556, 2558, 2544, 2557, 2551, 2559, 2553, 2562, 2557, + 0, 2563, 2555, 2554, 2563, 2564, 2564, 2565, 2566, 2567, + 2567, 2556, 2558, 2568, 2569, 2559, 2570, 2572, 2562, 2573, + 2570, 2575, 2565, 2573, 2568, 2577, 2566, 2574, 2574, 2569, + 2578, 2579, 2572, 2582, 2575, 2580, 2580, 2583, 2584, 2586, + 2577, 2590, 2584, 2585, 2585, 2582, 2583, 2587, 2587, 2588, + 2578, 2579, 2589, 2591, 2588, 2592, 2599, 2590, 2586, 2593, + 2593, 2589, 2598, 2598, 2601, 2591, 2600, 2600, 2602, 2606, + 2603, 2604, 2605, 2605, 2613, 2592, 2616, 2601, 2599, 2603, - 2612, 2613, 2615, 2619, 2613, 2612, 2620, 2621, 2605, 2627, - 2617, 2609, 2611, 2618, 2615, 2617, 2621, 2622, 2618, 2620, - 2624, 2619, 2623, 2623, 2628, 2629, 2622, 2627, 2632, 2624, - 2628, 2629, 2633, 2636, 2634, 2635, 2635, 2637, 2645, 2638, - 2636, 2641, 2639, 2640, 2640, 2646, 2643, 2632, 2638, 2646, - 2647, 2647, 2633, 2634, 2648, 0, 2637, 2639, 2645, 2649, - 2641, 2643, 2650, 2651, 2653, 2649, 2652, 2652, 2650, 2651, - 2654, 2656, 2653, 2657, 2659, 2654, 2660, 2661, 2659, 2648, - 2656, 2663, 2663, 2664, 2665, 2665, 2657, 2666, 2666, 2674, - 2660, 2669, 2661, 2668, 2668, 2669, 2676, 2670, 2672, 2672, + 2604, 2602, 2608, 2608, 2606, 2611, 2612, 2614, 2613, 2615, + 2611, 2612, 2614, 2617, 2620, 2616, 2618, 2615, 2621, 2623, + 2622, 2627, 2617, 2621, 2618, 2622, 2624, 2624, 2626, 2620, + 2625, 2625, 2629, 2626, 2623, 2628, 2628, 2630, 2631, 2629, + 2627, 2632, 2630, 2633, 0, 2634, 2635, 2635, 2636, 2633, + 2634, 2642, 2637, 2638, 2638, 2644, 2631, 2637, 2644, 2632, + 2639, 2639, 2645, 2636, 2642, 2643, 2643, 2645, 2645, 2646, + 2647, 2648, 2649, 2650, 2646, 2647, 2651, 2650, 2649, 2652, + 2653, 2651, 2654, 2655, 2658, 2648, 2656, 2657, 2652, 2658, + 2654, 2659, 2656, 2657, 2661, 2653, 2663, 2662, 2665, 2663, - 2675, 2664, 2670, 2679, 2684, 2675, 2677, 2684, 2676, 2674, - 2687, 2677, 2677, 2680, 2680, 2682, 2682, 2683, 2683, 2685, - 2689, 2690, 2690, 2679, 2691, 2691, 2692, 2692, 2687, 2693, - 2694, 2694, 2685, 2695, 2696, 2697, 2698, 2699, 2699, 2700, - 2689, 2703, 2698, 2700, 2693, 2704, 2695, 2703, 2706, 2697, - 2704, 2707, 2696, 2706, 2706, 2708, 2709, 2710, 2711, 2712, - 2722, 2713, 2719, 2710, 2711, 2713, 2714, 2714, 2717, 2720, - 2719, 2725, 2720, 2717, 2707, 2708, 2709, 2723, 2724, 2724, - 2723, 2726, 2727, 2728, 2712, 2722, 2726, 2729, 2725, 2725, - 2730, 2730, 2731, 2732, 2733, 2734, 2732, 2735, 2738, 2736, + 2667, 2661, 2662, 2659, 2655, 2667, 2668, 2669, 2670, 2671, + 2665, 2668, 2677, 2672, 2673, 2673, 2682, 2674, 2671, 2683, + 0, 2670, 2672, 2678, 2684, 2669, 2674, 2679, 2687, 2678, + 2677, 2685, 2685, 2679, 2686, 2682, 2688, 2689, 2691, 2683, + 2693, 2686, 2695, 2684, 2698, 2688, 2696, 2687, 2690, 2690, + 2696, 2704, 2689, 2697, 2697, 2693, 2704, 2691, 2699, 2700, + 2701, 2706, 2695, 2703, 2699, 2700, 2701, 2702, 2702, 2698, + 2706, 2703, 2707, 2709, 2710, 2712, 2711, 2710, 2713, 2709, + 2711, 2715, 2715, 2716, 2721, 2707, 2717, 2717, 2721, 2712, + 2718, 2718, 2722, 2713, 2720, 2720, 2726, 2722, 2724, 2724, - 2727, 2729, 2736, 2728, 2732, 2735, 2731, 2737, 2733, 2739, - 2739, 2744, 2737, 2737, 2734, 2740, 2740, 2738, 2741, 2741, - 2742, 2742, 2743, 2743, 2745, 2746, 2747, 2744, 2748, 2745, - 2749, 2750, 2751, 2748, 2752, 2753, 2750, 2755, 2755, 2756, - 2756, 2751, 2758, 2757, 2761, 2746, 2757, 2760, 2760, 2749, - 2766, 2761, 2747, 2763, 2752, 2753, 2762, 2762, 2763, 2766, - 2758, 2765, 2765, 2767, 2768, 2770, 2771, 2771, 2773, 2774, - 2772, 2787, 2767, 2768, 2772, 2775, 2776, 2773, 2777, 2788, - 2775, 2775, 2778, 2770, 2774, 2782, 2778, 2777, 2786, 2776, - 2782, 2783, 2783, 2785, 2785, 2790, 2787, 2788, 2791, 2794, + 2727, 2716, 2728, 2729, 2732, 2727, 2730, 2742, 2729, 2729, + 2733, 2733, 2735, 2735, 2728, 2738, 2726, 2740, 2730, 2736, + 2736, 2746, 2737, 2749, 2732, 2737, 2748, 2742, 2738, 2743, + 2743, 2744, 2744, 2745, 2745, 2740, 2746, 2747, 2747, 2748, + 2750, 2749, 2751, 2752, 2752, 2753, 2756, 2760, 2751, 2753, + 2757, 2759, 2756, 2761, 2750, 2757, 2759, 2759, 2762, 2763, + 2764, 2765, 2775, 2766, 2772, 2763, 2764, 2766, 2767, 2767, + 2760, 2770, 2772, 2761, 2773, 2778, 2770, 2773, 2762, 2776, + 2777, 2777, 2776, 2779, 2780, 2781, 2765, 2775, 2779, 2782, + 2783, 2783, 2778, 2778, 2784, 2785, 2786, 2787, 2785, 2788, - 2795, 2796, 2786, 2799, 2790, 2797, 2801, 2803, 2804, 2795, - 2791, 2797, 2803, 2804, 2806, 2799, 2805, 2805, 2809, 2810, - 2808, 2796, 2817, 2806, 2794, 2808, 2818, 2801, 2811, 2811, - 0, 2809, 2811, 2810, 2813, 2813, 2814, 2814, 2815, 2815, - 2816, 2819, 2817, 2822, 2821, 2818, 2819, 2823, 2822, 2816, - 2821, 2825, 2823, 2824, 2824, 2826, 2827, 2828, 2829, 2830, - 2831, 2838, 2828, 2832, 2832, 2830, 2834, 2826, 2835, 2825, - 2834, 2837, 2837, 2835, 2836, 2839, 2829, 2827, 2840, 2836, - 2838, 2841, 2843, 2843, 2845, 2831, 2846, 2847, 2849, 2848, - 2839, 2847, 2850, 2840, 2851, 2852, 2855, 2845, 2848, 2846, + 2791, 2810, 2780, 2782, 2810, 2781, 2785, 2788, 2784, 2789, + 2786, 2800, 2790, 2799, 2789, 2789, 2787, 2790, 2790, 2791, + 2792, 2792, 2793, 2793, 2794, 2794, 2795, 2795, 2796, 2796, + 2797, 2798, 2802, 2799, 2801, 2803, 2798, 2800, 2804, 2801, + 2803, 2805, 2806, 2808, 2808, 2811, 2797, 2804, 2809, 2809, + 2814, 2802, 2813, 2813, 2815, 2815, 2823, 2814, 2819, 2816, + 2820, 2805, 2806, 2811, 2816, 2818, 2818, 2819, 2821, 2820, + 2824, 2824, 2825, 2826, 2823, 2827, 2825, 2821, 2828, 2830, + 2829, 2832, 2826, 2831, 2830, 2830, 2842, 2833, 2837, 2828, + 2832, 2833, 2841, 2837, 2827, 2829, 2831, 2838, 2838, 2840, - 2852, 2841, 2851, 2854, 2849, 2853, 2853, 2856, 2857, 2857, - 2858, 2850, 2854, 2864, 2855, 2861, 2861, 2862, 2862, 2866, - 2866, 2868, 2869, 2870, 2874, 2871, 2873, 2873, 2875, 2858, - 2871, 2876, 2879, 2856, 2864, 2878, 2878, 2868, 2869, 2870, - 2880, 2881, 2881, 2884, 2874, 2887, 2879, 2885, 2890, 2886, - 2876, 2875, 2894, 2885, 2886, 2888, 2888, 2889, 2889, 2880, - 2891, 2891, 2892, 2884, 2895, 2893, 2896, 2887, 2890, 2897, - 2895, 2898, 2894, 2892, 2893, 2899, 2899, 2900, 2907, 2901, - 2891, 2897, 2901, 2902, 2908, 2896, 2902, 2903, 2903, 2909, - 2907, 2898, 2900, 2910, 2910, 2909, 2911, 2912, 2913, 2911, + 2840, 2843, 2845, 2845, 2846, 2847, 2841, 2850, 2852, 2851, + 2853, 2842, 2855, 2846, 2857, 2859, 2853, 2847, 2851, 2843, + 2859, 2860, 2861, 2861, 2855, 2862, 2860, 2865, 2852, 2866, + 2872, 2864, 2850, 2873, 2862, 2857, 2864, 2867, 2867, 2872, + 2865, 2867, 2874, 2866, 2869, 2869, 2870, 2870, 2871, 2871, + 2875, 2877, 2881, 2873, 2878, 2875, 2882, 2877, 2879, 2878, + 2883, 2874, 2884, 2879, 2880, 2880, 2885, 2884, 2882, 2886, + 2881, 2887, 2888, 2888, 2890, 2886, 2894, 2891, 2890, 2895, + 2892, 2883, 2891, 2896, 2885, 2892, 2893, 2893, 2898, 2900, + 2900, 2902, 2903, 2904, 2895, 2894, 2887, 2904, 2896, 2906, - 2915, 2916, 2916, 2912, 2908, 2915, 2917, 2918, 2919, 2923, - 2920, 2917, 2921, 2921, 2919, 2924, 2913, 2925, 2926, 2927, - 2927, 2923, 2928, 2930, 0, 2929, 2918, 2920, 2920, 2929, - 2935, 2926, 2930, 2924, 2932, 2932, 2933, 2933, 2934, 2940, - 2936, 2928, 2925, 2934, 2935, 2936, 2937, 2937, 2938, 2938, - 2939, 2939, 2940, 2941, 2942, 2948, 2943, 2945, 2945, 2950, - 2942, 2943, 2951, 2952, 2953, 2953, 2955, 2955, 2956, 2957, - 2963, 2958, 2959, 2959, 2948, 2960, 2960, 2962, 2964, 2941, - 2958, 2950, 2956, 2962, 2951, 2952, 2965, 2968, 2968, 2957, - 2963, 2965, 2970, 2970, 2971, 2972, 2973, 2964, 2974, 2971, + 2905, 2907, 2908, 2912, 2902, 2903, 2909, 2911, 2898, 2905, + 2908, 2909, 2910, 2910, 2913, 2906, 2911, 2914, 2914, 2915, + 2907, 2912, 2918, 2918, 2919, 2919, 2921, 2923, 2923, 2925, + 2926, 2928, 2927, 2930, 2930, 2931, 2928, 2933, 2915, 2934, + 2913, 2932, 2935, 2933, 2938, 2925, 2926, 2921, 2927, 2939, + 2932, 2937, 2937, 2940, 2940, 2931, 2943, 2944, 2938, 2945, + 2947, 2935, 2934, 2944, 2945, 2948, 2948, 2950, 2939, 2949, + 2949, 2951, 2951, 2952, 2953, 2954, 2943, 2956, 2957, 2955, + 2958, 0, 2947, 2953, 2952, 2955, 2960, 2950, 2959, 2959, + 2957, 2951, 2963, 2963, 2961, 2954, 2956, 2961, 2967, 2962, - 2975, 2977, 2973, 2976, 2976, 2981, 2977, 2979, 2975, 2972, - 2974, 2979, 2980, 2982, 2983, 2984, 2985, 2980, 2987, 2983, - 2988, 2989, 2985, 2990, 2992, 2981, 2987, 2984, 2993, 2994, - 2995, 2996, 2998, 2982, 2999, 3001, 2996, 2998, 3003, 2988, - 3001, 2989, 2992, 2990, 2993, 3004, 2994, 2994, 3005, 3000, - 3004, 2995, 3008, 3008, 2999, 3000, 3009, 3009, 3003, 3010, - 3016, 3005, 3015, 3010, 3014, 3014, 0, 3015, 3017, 3017, - 3019, 3019, 3020, 3020, 3026, 3020, 3027, 3021, 3021, 3016, - 3021, 3022, 3022, 3023, 3022, 3025, 3025, 3023, 3030, 3031, - 3027, 3032, 3026, 3033, 3033, 3036, 3032, 3037, 3038, 3040, + 2958, 2960, 2962, 2968, 2973, 2969, 2970, 2970, 2972, 2971, + 2967, 2969, 2971, 2975, 2972, 2976, 2976, 2978, 2975, 2977, + 2979, 2980, 2973, 2968, 2977, 2983, 2979, 2981, 2981, 2984, + 2985, 2986, 2987, 2987, 2988, 2989, 2978, 2983, 2980, 2980, + 2990, 2992, 2992, 2994, 2986, 2993, 2993, 2984, 2994, 2990, + 2995, 2989, 2996, 2988, 3000, 2985, 3001, 2996, 2997, 2997, + 2998, 2998, 2999, 2999, 2995, 3002, 3008, 3000, 3003, 3005, + 3005, 3002, 3010, 3003, 3011, 3012, 3013, 3013, 3015, 3015, + 3016, 3017, 3001, 3019, 3018, 3008, 3020, 3021, 3021, 3022, + 3022, 3025, 0, 3024, 3010, 3020, 3011, 3012, 3018, 3024, - 3042, 3039, 3038, 3148, 3037, 3148, 3043, 3045, 3030, 3031, - 3039, 3043, 3044, 3044, 3040, 3049, 3045, 3054, 3042, 3051, - 3036, 3046, 3046, 3047, 3047, 3048, 3048, 3050, 3051, 3052, - 3049, 3051, 3050, 3053, 3052, 3052, 3055, 3056, 3057, 3053, - 3058, 3059, 3054, 3057, 3061, 3058, 3060, 3060, 3062, 3199, - 3061, 3055, 3063, 3063, 3062, 3064, 3064, 3199, 3056, 3066, - 3059, 3065, 3065, 3072, 3066, 3069, 3069, 3071, 3071, 3075, - 3075, 3087, 3072, 3076, 3076, 3077, 3077, 3078, 3078, 3079, - 3079, 3080, 3080, 3081, 3081, 3083, 3084, 3084, 3085, 3086, - 3089, 3087, 3090, 3090, 3083, 3091, 3093, 3085, 3092, 3094, + 3017, 3026, 3027, 3019, 3030, 3030, 3016, 3027, 3032, 3032, + 3033, 3025, 3034, 3035, 3037, 3033, 3036, 3038, 3038, 3035, + 3026, 3041, 3037, 3043, 3039, 3041, 3034, 3042, 3036, 3039, + 3044, 3045, 3042, 3046, 3047, 3050, 3045, 3051, 3049, 3052, + 3047, 0, 3054, 3043, 3056, 3046, 3049, 3055, 3057, 3062, + 3044, 3058, 3061, 3060, 3050, 3062, 3058, 3051, 3060, 3052, + 3054, 3056, 3056, 3055, 3065, 3063, 3067, 3078, 3066, 3057, + 3063, 3066, 3061, 3070, 3070, 3071, 3071, 3072, 0, 3067, + 3077, 3072, 3076, 3076, 3065, 3077, 3078, 3079, 3079, 3081, + 3081, 3082, 3082, 3085, 3082, 3083, 3083, 3085, 3083, 3084, - 3094, 3086, 3095, 3095, 3097, 3098, 3098, 3101, 3093, 3089, - 3091, 3092, 3102, 3103, 3105, 3102, 3104, 3104, 3107, 3097, - 3108, 3107, 3109, 3110, 3111, 3101, 3108, 3112, 3110, 3115, - 3113, 3116, 3105, 3120, 3123, 3115, 3109, 3133, 3131, 3103, - 3116, 3131, 3138, 3111, 3141, 3112, 3113, 3145, 3120, 3139, - 3133, 3134, 3134, 3135, 3135, 3136, 3136, 3140, 3139, 3143, - 3123, 3140, 3147, 3146, 3141, 3138, 3149, 3147, 3150, 3150, - 3145, 3151, 3152, 3143, 3146, 3153, 3154, 3155, 3157, 3156, - 3159, 3149, 3166, 3158, 3151, 3160, 3161, 3157, 3167, 0, - 3160, 3152, 3154, 3153, 3156, 3158, 3166, 3179, 3162, 3168, + 3084, 3087, 3084, 3088, 3089, 3089, 3087, 3090, 3091, 3094, + 3095, 3096, 3088, 3097, 3097, 3100, 3096, 3101, 3103, 3102, + 3104, 3106, 3091, 3102, 3101, 3090, 3107, 3103, 3109, 3094, + 3095, 3107, 3108, 3108, 3113, 3104, 3118, 3109, 0, 3106, + 3100, 3110, 3110, 3111, 3111, 3112, 3112, 3114, 3115, 3113, + 3116, 3119, 3114, 3117, 3120, 3116, 3116, 3115, 3121, 3117, + 3115, 3118, 3122, 3121, 3123, 3125, 3119, 3122, 3124, 3124, + 3126, 3125, 3127, 3127, 3129, 3120, 3126, 3128, 3128, 3130, + 3133, 3133, 3136, 3123, 3130, 3135, 3135, 3139, 3139, 3129, + 3147, 3136, 3140, 3140, 3141, 3141, 3142, 3142, 3143, 3143, - 3168, 3159, 3155, 3162, 3169, 3174, 3161, 3175, 3167, 3170, - 3170, 3171, 3171, 3169, 3172, 3172, 3173, 3173, 3176, 3180, - 3177, 3176, 3179, 3178, 3174, 3177, 3181, 3175, 3178, 3182, - 3183, 3184, 3181, 3185, 3180, 3188, 3184, 3186, 3186, 3187, - 3187, 3189, 3183, 3182, 3190, 3190, 3192, 3194, 3197, 3197, - 3188, 3198, 3198, 3185, 3200, 3203, 3201, 3202, 3204, 3205, - 3189, 3192, 3201, 3202, 3211, 3194, 3212, 3206, 3214, 3203, - 3217, 3204, 3206, 3200, 3207, 3207, 3208, 3208, 3205, 3215, - 3219, 3220, 3214, 3215, 3218, 3211, 3212, 3221, 3222, 3218, - 3217, 3223, 3224, 3228, 3220, 3230, 3223, 3224, 3229, 3219, + 3144, 3144, 3145, 3145, 3146, 3146, 3149, 3150, 3150, 3151, + 3152, 3153, 3157, 3155, 3159, 3149, 3147, 3158, 3151, 3156, + 3156, 3163, 3152, 3160, 3160, 3167, 3159, 3157, 3161, 3161, + 3158, 3153, 3155, 3164, 3164, 3168, 3163, 3169, 3168, 3170, + 3170, 3171, 3173, 3167, 3174, 3173, 3175, 3176, 3177, 3179, + 3174, 3178, 3176, 3182, 3185, 3181, 3186, 3189, 3185, 3171, + 3175, 3181, 3182, 3169, 3201, 3179, 3206, 3177, 3198, 3178, + 3208, 3186, 3199, 3198, 3208, 3199, 3209, 3201, 3202, 3202, + 3203, 3203, 3207, 3189, 3204, 3204, 3211, 3213, 3214, 3206, + 3215, 3207, 3216, 3217, 3216, 3215, 3209, 3218, 3218, 3214, - 3221, 3225, 3225, 3231, 3231, 3232, 3233, 3222, 3234, 3234, - 3232, 3238, 3233, 3228, 3230, 3235, 3229, 3236, 3237, 3239, - 3235, 3246, 3236, 3237, 3242, 3239, 3241, 3241, 3247, 3242, - 3238, 3243, 3243, 3245, 3248, 3247, 3249, 3245, 3250, 3251, - 3246, 3252, 3254, 3254, 3250, 3256, 3256, 3257, 3259, 3260, - 3261, 3266, 3258, 3248, 3252, 3249, 3257, 3258, 3251, 3257, - 3262, 3262, 3264, 3261, 3263, 3267, 3267, 3259, 3260, 3263, - 3268, 3269, 3269, 3270, 3270, 3264, 3271, 3266, 3272, 3273, - 3278, 3271, 3274, 3274, 3280, 3272, 3275, 3278, 3276, 3268, - 3276, 3275, 3277, 3277, 3279, 3281, 3282, 3285, 3273, 3289, + 3211, 3219, 3220, 3222, 3221, 3223, 3225, 3227, 3217, 3224, + 3213, 3226, 3227, 3228, 3219, 3225, 3230, 3230, 3231, 3222, + 3229, 3220, 3221, 3226, 3224, 3229, 3232, 3236, 3237, 3245, + 3223, 3232, 3238, 3238, 3228, 3239, 3240, 3240, 3231, 3241, + 3241, 3236, 3242, 3242, 3239, 3243, 3243, 3244, 3237, 3245, + 3246, 3247, 3248, 3246, 3249, 3250, 3247, 3248, 3251, 3252, + 3253, 3256, 3254, 3260, 3251, 3261, 3244, 3254, 3255, 3255, + 3250, 3264, 3253, 3252, 3257, 3257, 3259, 3259, 3260, 3249, + 3266, 3256, 3262, 3262, 3261, 3271, 3264, 3269, 3269, 3270, + 3270, 3272, 3275, 3271, 3273, 3274, 3276, 3277, 3266, 3278, - 3281, 3279, 3287, 3280, 3284, 3284, 3288, 3287, 3290, 3291, - 3291, 3288, 3293, 3293, 3294, 3282, 3285, 3295, 3289, 3296, - 3296, 3297, 3297, 3298, 3300, 3300, 3308, 3290, 3301, 3301, - 3298, 3302, 3304, 3294, 3307, 3309, 3295, 3304, 3302, 3307, - 3310, 3310, 3311, 3311, 0, 3308, 0, 0, 0, 0, - 0, 0, 0, 0, 3309, 3315, 3315, 3315, 3315, 3315, - 3315, 3315, 3316, 3316, 3316, 3316, 3316, 3316, 3316, 3317, - 3317, 3317, 3317, 3317, 3317, 3317, 3318, 3318, 3318, 3318, - 3318, 3318, 3318, 3319, 3319, 3319, 3319, 3319, 3319, 3319, - 3320, 3320, 3320, 3320, 3320, 3320, 3320, 3321, 3321, 3321, + 3273, 3274, 3279, 3279, 3278, 3284, 3275, 3281, 3281, 3276, + 3272, 3285, 3290, 3287, 3288, 3291, 3277, 3292, 3288, 3295, + 3291, 3293, 3294, 3296, 3297, 3301, 3284, 3287, 3296, 3297, + 3302, 3285, 3290, 3303, 3293, 3294, 3292, 3306, 3295, 3298, + 3298, 3304, 3304, 3306, 3305, 3301, 3307, 3307, 3302, 3305, + 3308, 3309, 3303, 3310, 3311, 3308, 3309, 3312, 3310, 3314, + 3314, 3315, 3319, 3312, 3316, 3316, 3315, 3318, 3320, 3321, + 3322, 3318, 3323, 3311, 3324, 3320, 3332, 3325, 3323, 3327, + 3327, 3319, 3329, 3329, 3333, 3330, 3331, 3334, 3321, 3322, + 3325, 3331, 3337, 3324, 3330, 3332, 3336, 3330, 3335, 3335, - 3321, 3321, 3321, 3321, 3323, 3323, 0, 3323, 3323, 3323, - 3323, 3324, 3324, 0, 0, 0, 3324, 3324, 3325, 3325, - 0, 0, 3325, 0, 3325, 3326, 0, 0, 0, 0, - 0, 3326, 3327, 3327, 0, 0, 0, 3327, 3327, 3328, - 0, 0, 0, 0, 0, 3328, 3329, 3329, 0, 3329, - 3329, 3329, 3329, 3330, 0, 0, 0, 0, 0, 3330, - 3331, 3331, 0, 0, 0, 3331, 3331, 3332, 3332, 0, - 3332, 3332, 3332, 3332, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3334, 3336, 3339, 3333, 3341, 3337, 3340, 3340, 3342, 3342, + 3343, 3343, 3344, 3345, 3346, 3347, 3347, 3344, 0, 3348, + 3345, 3350, 3350, 3341, 3348, 3349, 3353, 3349, 3339, 3351, + 3352, 3355, 3358, 3346, 3354, 3362, 3351, 3352, 3360, 3354, + 3357, 3357, 3361, 3360, 3363, 3353, 3367, 3361, 3364, 3364, + 3355, 3358, 3366, 3366, 3362, 3368, 3369, 3369, 3370, 3370, + 3371, 3373, 3373, 3363, 3375, 3367, 3381, 3371, 3374, 3374, + 3377, 3375, 3380, 3382, 3368, 3377, 0, 3380, 3383, 3383, + 3384, 3384, 0, 0, 0, 3381, 0, 0, 0, 0, + 0, 0, 3382, 3388, 3388, 3388, 3388, 3388, 3388, 3388, - 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, - 3314, 3314, 3314, 3314, 3314 + 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3390, 3390, 3390, + 3390, 3390, 3390, 3390, 3391, 3391, 3391, 3391, 3391, 3391, + 3391, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3393, 3393, + 3393, 3393, 3393, 3393, 3393, 3394, 3394, 3394, 3394, 3394, + 3394, 3394, 3396, 3396, 0, 3396, 3396, 3396, 3396, 3397, + 3397, 0, 0, 0, 3397, 3397, 3398, 3398, 0, 0, + 3398, 0, 3398, 3399, 0, 0, 0, 0, 0, 3399, + 3400, 3400, 0, 0, 0, 3400, 3400, 3401, 0, 0, + 0, 0, 0, 3401, 3402, 3402, 0, 3402, 3402, 3402, + 3402, 3403, 0, 0, 0, 0, 0, 3403, 3404, 3404, + + 0, 0, 0, 3404, 3404, 3405, 3405, 0, 3405, 3405, + 3405, 3405, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387 } ; static yy_state_type yy_last_accepting_state; @@ -3159,7 +3212,7 @@ static void config_end_include(void) } #endif -#line 3160 "" +#line 3213 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3168,9 +3221,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3169 "" +#line 3222 "" -#line 3171 "" +#line 3224 "" #define INITIAL 0 #define quotedstring 1 @@ -3394,7 +3447,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3395 "" +#line 3448 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3427,13 +3480,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 >= 3315 ) + if ( yy_current_state >= 3388 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6475 ); + while ( yy_base[yy_current_state] != 6613 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3908,52 +3961,52 @@ YY_RULE_SETUP case 90: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_UDP_CONNECT) } YY_BREAK case 91: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 92: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 93: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 94: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 95: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 96: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 97: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 98: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 99: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 100: YY_RULE_SETUP @@ -3963,72 +4016,72 @@ YY_RULE_SETUP case 101: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 102: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 103: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 104: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 105: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 106: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 107: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 108: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 109: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 110: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 111: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 112: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 113: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 114: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 115: YY_RULE_SETUP @@ -4038,32 +4091,32 @@ YY_RULE_SETUP case 116: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 117: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 118: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 119: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 120: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 121: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 122: YY_RULE_SETUP @@ -4073,47 +4126,47 @@ YY_RULE_SETUP case 123: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 125: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 126: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 127: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 128: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 129: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 130: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 131: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 132: YY_RULE_SETUP @@ -4123,716 +4176,716 @@ YY_RULE_SETUP case 133: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 134: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 135: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 136: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 137: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 138: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 139: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 140: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 141: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 142: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 143: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 144: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 145: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 146: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 147: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 148: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 149: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 150: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 151: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 152: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 153: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 185: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 186: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 187: YY_RULE_SETUP -#line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +#line 401 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 188: YY_RULE_SETUP -#line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } +#line 402 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 189: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 190: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 191: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 192: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 193: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 194: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 195: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 196: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 197: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 248: YY_RULE_SETUP -#line 464 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 463 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 249: YY_RULE_SETUP -#line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 464 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 250: YY_RULE_SETUP -#line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 466 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 251: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 252: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 253: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 254: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 471 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 255: YY_RULE_SETUP -#line 474 "./util/configlexer.lex" +#line 472 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 256: YY_RULE_SETUP -#line 476 "./util/configlexer.lex" +#line 474 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 257: YY_RULE_SETUP -#line 478 "./util/configlexer.lex" +#line 476 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 258: YY_RULE_SETUP -#line 480 "./util/configlexer.lex" +#line 478 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 259: YY_RULE_SETUP -#line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 480 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 260: YY_RULE_SETUP -#line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 482 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 261: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 262: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 263: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 264: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 265: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 266: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 267: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 268: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 269: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 270: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 271: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 272: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 273: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 274: YY_RULE_SETUP @@ -4842,215 +4895,250 @@ YY_RULE_SETUP case 275: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 285: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 286: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 509 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 287: YY_RULE_SETUP -#line 512 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 510 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 288: YY_RULE_SETUP -#line 513 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 512 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 289: YY_RULE_SETUP #line 514 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 290: YY_RULE_SETUP #line 515 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 291: YY_RULE_SETUP #line 516 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 292: YY_RULE_SETUP #line 517 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 293: YY_RULE_SETUP #line 518 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 294: YY_RULE_SETUP #line 519 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 295: YY_RULE_SETUP #line 520 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 296: YY_RULE_SETUP #line 521 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 297: YY_RULE_SETUP #line 522 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 298: YY_RULE_SETUP #line 523 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 299: YY_RULE_SETUP #line 524 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 300: YY_RULE_SETUP #line 525 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 301: YY_RULE_SETUP #line 526 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 308: YY_RULE_SETUP #line 533 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_TAG) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 309: YY_RULE_SETUP #line 534 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 310: -/* rule 310 can match eol */ YY_RULE_SETUP #line 535 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V4) } + YY_BREAK +case 311: +YY_RULE_SETUP +#line 536 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V6) } + YY_BREAK +case 312: +YY_RULE_SETUP +#line 537 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 313: +YY_RULE_SETUP +#line 538 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 314: +YY_RULE_SETUP +#line 539 "./util/configlexer.lex" +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } + YY_BREAK +case 315: +YY_RULE_SETUP +#line 540 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } + YY_BREAK +case 316: +YY_RULE_SETUP +#line 541 "./util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 317: +/* rule 317 can match eol */ +YY_RULE_SETUP +#line 542 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 311: +case 318: YY_RULE_SETUP -#line 538 "./util/configlexer.lex" +#line 545 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 539 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 312: +case 319: YY_RULE_SETUP -#line 544 "./util/configlexer.lex" +#line 551 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 313: -/* rule 313 can match eol */ +case 320: +/* rule 320 can match eol */ YY_RULE_SETUP -#line 545 "./util/configlexer.lex" +#line 552 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 314: +case 321: YY_RULE_SETUP -#line 547 "./util/configlexer.lex" +#line 554 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5063,34 +5151,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 315: +case 322: YY_RULE_SETUP -#line 559 "./util/configlexer.lex" +#line 566 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 560 "./util/configlexer.lex" +#line 567 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 316: +case 323: YY_RULE_SETUP -#line 565 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 317: -/* rule 317 can match eol */ +case 324: +/* rule 324 can match eol */ YY_RULE_SETUP -#line 566 "./util/configlexer.lex" +#line 573 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 318: +case 325: YY_RULE_SETUP -#line 568 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5103,38 +5191,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 319: +case 326: YY_RULE_SETUP -#line 580 "./util/configlexer.lex" +#line 587 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 582 "./util/configlexer.lex" +#line 589 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 320: +case 327: YY_RULE_SETUP -#line 586 "./util/configlexer.lex" +#line 593 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 321: -/* rule 321 can match eol */ +case 328: +/* rule 328 can match eol */ YY_RULE_SETUP -#line 587 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 322: +case 329: YY_RULE_SETUP -#line 588 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 323: +case 330: YY_RULE_SETUP -#line 589 "./util/configlexer.lex" +#line 596 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5142,27 +5230,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 594 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 324: +case 331: YY_RULE_SETUP -#line 598 "./util/configlexer.lex" +#line 605 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 325: -/* rule 325 can match eol */ +case 332: +/* rule 332 can match eol */ YY_RULE_SETUP -#line 599 "./util/configlexer.lex" +#line 606 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 326: +case 333: YY_RULE_SETUP -#line 601 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5172,7 +5260,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 607 "./util/configlexer.lex" +#line 614 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5187,39 +5275,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 327: +case 334: YY_RULE_SETUP -#line 621 "./util/configlexer.lex" +#line 628 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 624 "./util/configlexer.lex" +#line 631 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 328: +case 335: YY_RULE_SETUP -#line 628 "./util/configlexer.lex" +#line 635 "./util/configlexer.lex" { LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK -case 329: -/* rule 329 can match eol */ +case 336: +/* rule 336 can match eol */ YY_RULE_SETUP -#line 629 "./util/configlexer.lex" +#line 636 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK -case 330: +case 337: YY_RULE_SETUP -#line 630 "./util/configlexer.lex" +#line 637 "./util/configlexer.lex" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } YY_BREAK -case 331: +case 338: YY_RULE_SETUP -#line 631 "./util/configlexer.lex" +#line 638 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5228,29 +5316,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 637 "./util/configlexer.lex" +#line 644 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 332: +case 339: YY_RULE_SETUP -#line 641 "./util/configlexer.lex" +#line 648 "./util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 333: -/* rule 333 can match eol */ +case 340: +/* rule 340 can match eol */ YY_RULE_SETUP -#line 642 "./util/configlexer.lex" +#line 649 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 334: +case 341: YY_RULE_SETUP -#line 646 "./util/configlexer.lex" +#line 653 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5259,33 +5347,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 335: +case 342: YY_RULE_SETUP -#line 654 "./util/configlexer.lex" +#line 661 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 336: +case 343: YY_RULE_SETUP -#line 658 "./util/configlexer.lex" +#line 665 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 337: +case 344: YY_RULE_SETUP -#line 662 "./util/configlexer.lex" +#line 669 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 338: +case 345: YY_RULE_SETUP -#line 666 "./util/configlexer.lex" +#line 673 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5286 "" +#line 5374 "" case YY_END_OF_BUFFER: { @@ -5580,7 +5668,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 >= 3315 ) + if ( yy_current_state >= 3388 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5608,11 +5696,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 >= 3315 ) + if ( yy_current_state >= 3388 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3314); + yy_is_jam = (yy_current_state == 3387); return yy_is_jam ? 0 : yy_current_state; } @@ -6251,6 +6339,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 666 "./util/configlexer.lex" +#line 673 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 632952651..b52ddf81e 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -301,6 +301,7 @@ infra-keep-probing{COLON} { YDVAR(1, VAR_INFRA_KEEP_PROBING) } num-queries-per-thread{COLON} { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } jostle-timeout{COLON} { YDVAR(1, VAR_JOSTLE_TIMEOUT) } delay-close{COLON} { YDVAR(1, VAR_DELAY_CLOSE) } +udp-connect{COLON} { YDVAR(1, VAR_UDP_CONNECT) } target-fetch-policy{COLON} { YDVAR(1, VAR_TARGET_FETCH_POLICY) } harden-short-bufsize{COLON} { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } harden-large-queries{COLON} { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } @@ -391,6 +392,7 @@ serve-expired-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL) } serve-expired-ttl-reset{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } serve-expired-reply-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } serve-expired-client-timeout{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +serve-original-ttl{COLON} { YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } fake-dsa{COLON} { YDVAR(1, VAR_FAKE_DSA) } fake-sha1{COLON} { YDVAR(1, VAR_FAKE_SHA1) } val-log-level{COLON} { YDVAR(1, VAR_VAL_LOG_LEVEL) } @@ -511,6 +513,10 @@ dnscrypt-shared-secret-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } dnscrypt-nonce-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } dnscrypt-nonce-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +pad-responses{COLON} { YDVAR(1, VAR_PAD_RESPONSES) } +pad-responses-block-size{COLON} { YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +pad-queries{COLON} { YDVAR(1, VAR_PAD_QUERIES) } +pad-queries-block-size{COLON} { YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } ipsecmod-enabled{COLON} { YDVAR(1, VAR_IPSECMOD_ENABLED) } ipsecmod-ignore-bogus{COLON} { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } ipsecmod-hook{COLON} { YDVAR(1, VAR_IPSECMOD_HOOK) } @@ -530,8 +536,9 @@ name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } -edns-client-tag{COLON} { YDVAR(2, VAR_EDNS_CLIENT_TAG) } -edns-client-tag-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } +edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) } +edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +nsid{COLON} { YDVAR(1, VAR_NSID ) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 68ca1e9f3..4da644d3a 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.6.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -34,6 +34,10 @@ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. @@ -41,14 +45,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "3.6.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -95,8 +96,17 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" +#line 100 "util/configparser.c" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -109,14 +119,6 @@ extern struct config_parser_state* cfg_parser; # endif # endif -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - /* Use api.header.include to #include this header instead of duplicating it here. */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED @@ -129,315 +131,330 @@ extern struct config_parser_state* cfg_parser; extern int yydebug; #endif -/* Token type. */ +/* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_FORCE_TOPLEVEL = 266, - VAR_SERVER = 267, - VAR_VERBOSITY = 268, - VAR_NUM_THREADS = 269, - VAR_PORT = 270, - VAR_OUTGOING_RANGE = 271, - VAR_INTERFACE = 272, - VAR_PREFER_IP4 = 273, - VAR_DO_IP4 = 274, - VAR_DO_IP6 = 275, - VAR_PREFER_IP6 = 276, - VAR_DO_UDP = 277, - VAR_DO_TCP = 278, - VAR_TCP_MSS = 279, - VAR_OUTGOING_TCP_MSS = 280, - VAR_TCP_IDLE_TIMEOUT = 281, - VAR_EDNS_TCP_KEEPALIVE = 282, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, - VAR_CHROOT = 284, - VAR_USERNAME = 285, - VAR_DIRECTORY = 286, - VAR_LOGFILE = 287, - VAR_PIDFILE = 288, - VAR_MSG_CACHE_SIZE = 289, - VAR_MSG_CACHE_SLABS = 290, - VAR_NUM_QUERIES_PER_THREAD = 291, - VAR_RRSET_CACHE_SIZE = 292, - VAR_RRSET_CACHE_SLABS = 293, - VAR_OUTGOING_NUM_TCP = 294, - VAR_INFRA_HOST_TTL = 295, - VAR_INFRA_LAME_TTL = 296, - VAR_INFRA_CACHE_SLABS = 297, - VAR_INFRA_CACHE_NUMHOSTS = 298, - VAR_INFRA_CACHE_LAME_SIZE = 299, - VAR_NAME = 300, - VAR_STUB_ZONE = 301, - VAR_STUB_HOST = 302, - VAR_STUB_ADDR = 303, - VAR_TARGET_FETCH_POLICY = 304, - VAR_HARDEN_SHORT_BUFSIZE = 305, - VAR_HARDEN_LARGE_QUERIES = 306, - VAR_FORWARD_ZONE = 307, - VAR_FORWARD_HOST = 308, - VAR_FORWARD_ADDR = 309, - VAR_DO_NOT_QUERY_ADDRESS = 310, - VAR_HIDE_IDENTITY = 311, - VAR_HIDE_VERSION = 312, - VAR_IDENTITY = 313, - VAR_VERSION = 314, - VAR_HARDEN_GLUE = 315, - VAR_MODULE_CONF = 316, - VAR_TRUST_ANCHOR_FILE = 317, - VAR_TRUST_ANCHOR = 318, - VAR_VAL_OVERRIDE_DATE = 319, - VAR_BOGUS_TTL = 320, - VAR_VAL_CLEAN_ADDITIONAL = 321, - VAR_VAL_PERMISSIVE_MODE = 322, - VAR_INCOMING_NUM_TCP = 323, - VAR_MSG_BUFFER_SIZE = 324, - VAR_KEY_CACHE_SIZE = 325, - VAR_KEY_CACHE_SLABS = 326, - VAR_TRUSTED_KEYS_FILE = 327, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, - VAR_USE_SYSLOG = 329, - VAR_OUTGOING_INTERFACE = 330, - VAR_ROOT_HINTS = 331, - VAR_DO_NOT_QUERY_LOCALHOST = 332, - VAR_CACHE_MAX_TTL = 333, - VAR_HARDEN_DNSSEC_STRIPPED = 334, - VAR_ACCESS_CONTROL = 335, - VAR_LOCAL_ZONE = 336, - VAR_LOCAL_DATA = 337, - VAR_INTERFACE_AUTOMATIC = 338, - VAR_STATISTICS_INTERVAL = 339, - VAR_DO_DAEMONIZE = 340, - VAR_USE_CAPS_FOR_ID = 341, - VAR_STATISTICS_CUMULATIVE = 342, - VAR_OUTGOING_PORT_PERMIT = 343, - VAR_OUTGOING_PORT_AVOID = 344, - VAR_DLV_ANCHOR_FILE = 345, - VAR_DLV_ANCHOR = 346, - VAR_NEG_CACHE_SIZE = 347, - VAR_HARDEN_REFERRAL_PATH = 348, - VAR_PRIVATE_ADDRESS = 349, - VAR_PRIVATE_DOMAIN = 350, - VAR_REMOTE_CONTROL = 351, - VAR_CONTROL_ENABLE = 352, - VAR_CONTROL_INTERFACE = 353, - VAR_CONTROL_PORT = 354, - VAR_SERVER_KEY_FILE = 355, - VAR_SERVER_CERT_FILE = 356, - VAR_CONTROL_KEY_FILE = 357, - VAR_CONTROL_CERT_FILE = 358, - VAR_CONTROL_USE_CERT = 359, - VAR_EXTENDED_STATISTICS = 360, - VAR_LOCAL_DATA_PTR = 361, - VAR_JOSTLE_TIMEOUT = 362, - VAR_STUB_PRIME = 363, - VAR_UNWANTED_REPLY_THRESHOLD = 364, - VAR_LOG_TIME_ASCII = 365, - VAR_DOMAIN_INSECURE = 366, - VAR_PYTHON = 367, - VAR_PYTHON_SCRIPT = 368, - VAR_VAL_SIG_SKEW_MIN = 369, - VAR_VAL_SIG_SKEW_MAX = 370, - VAR_CACHE_MIN_TTL = 371, - VAR_VAL_LOG_LEVEL = 372, - VAR_AUTO_TRUST_ANCHOR_FILE = 373, - VAR_KEEP_MISSING = 374, - VAR_ADD_HOLDDOWN = 375, - VAR_DEL_HOLDDOWN = 376, - VAR_SO_RCVBUF = 377, - VAR_EDNS_BUFFER_SIZE = 378, - VAR_PREFETCH = 379, - VAR_PREFETCH_KEY = 380, - VAR_SO_SNDBUF = 381, - VAR_SO_REUSEPORT = 382, - VAR_HARDEN_BELOW_NXDOMAIN = 383, - VAR_IGNORE_CD_FLAG = 384, - VAR_LOG_QUERIES = 385, - VAR_LOG_REPLIES = 386, - VAR_LOG_LOCAL_ACTIONS = 387, - VAR_TCP_UPSTREAM = 388, - VAR_SSL_UPSTREAM = 389, - VAR_SSL_SERVICE_KEY = 390, - VAR_SSL_SERVICE_PEM = 391, - VAR_SSL_PORT = 392, - VAR_FORWARD_FIRST = 393, - VAR_STUB_SSL_UPSTREAM = 394, - VAR_FORWARD_SSL_UPSTREAM = 395, - VAR_TLS_CERT_BUNDLE = 396, - VAR_HTTPS_PORT = 397, - VAR_HTTP_ENDPOINT = 398, - VAR_HTTP_MAX_STREAMS = 399, - VAR_HTTP_QUERY_BUFFER_SIZE = 400, - VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, - VAR_HTTP_NODELAY = 402, - VAR_HTTP_NOTLS_DOWNSTREAM = 403, - VAR_STUB_FIRST = 404, - VAR_MINIMAL_RESPONSES = 405, - VAR_RRSET_ROUNDROBIN = 406, - VAR_MAX_UDP_SIZE = 407, - VAR_DELAY_CLOSE = 408, - VAR_UNBLOCK_LAN_ZONES = 409, - VAR_INSECURE_LAN_ZONES = 410, - VAR_INFRA_CACHE_MIN_RTT = 411, - VAR_INFRA_KEEP_PROBING = 412, - VAR_DNS64_PREFIX = 413, - VAR_DNS64_SYNTHALL = 414, - VAR_DNS64_IGNORE_AAAA = 415, - VAR_DNSTAP = 416, - VAR_DNSTAP_ENABLE = 417, - VAR_DNSTAP_SOCKET_PATH = 418, - VAR_DNSTAP_IP = 419, - VAR_DNSTAP_TLS = 420, - VAR_DNSTAP_TLS_SERVER_NAME = 421, - VAR_DNSTAP_TLS_CERT_BUNDLE = 422, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 423, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 424, - VAR_DNSTAP_SEND_IDENTITY = 425, - VAR_DNSTAP_SEND_VERSION = 426, - VAR_DNSTAP_BIDIRECTIONAL = 427, - VAR_DNSTAP_IDENTITY = 428, - VAR_DNSTAP_VERSION = 429, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 430, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 431, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 432, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 433, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 434, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 435, - VAR_RESPONSE_IP_TAG = 436, - VAR_RESPONSE_IP = 437, - VAR_RESPONSE_IP_DATA = 438, - VAR_HARDEN_ALGO_DOWNGRADE = 439, - VAR_IP_TRANSPARENT = 440, - VAR_IP_DSCP = 441, - VAR_DISABLE_DNSSEC_LAME_CHECK = 442, - VAR_IP_RATELIMIT = 443, - VAR_IP_RATELIMIT_SLABS = 444, - VAR_IP_RATELIMIT_SIZE = 445, - VAR_RATELIMIT = 446, - VAR_RATELIMIT_SLABS = 447, - VAR_RATELIMIT_SIZE = 448, - VAR_RATELIMIT_FOR_DOMAIN = 449, - VAR_RATELIMIT_BELOW_DOMAIN = 450, - VAR_IP_RATELIMIT_FACTOR = 451, - VAR_RATELIMIT_FACTOR = 452, - VAR_SEND_CLIENT_SUBNET = 453, - VAR_CLIENT_SUBNET_ZONE = 454, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 455, - VAR_CLIENT_SUBNET_OPCODE = 456, - VAR_MAX_CLIENT_SUBNET_IPV4 = 457, - VAR_MAX_CLIENT_SUBNET_IPV6 = 458, - VAR_MIN_CLIENT_SUBNET_IPV4 = 459, - VAR_MIN_CLIENT_SUBNET_IPV6 = 460, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 461, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 462, - VAR_CAPS_WHITELIST = 463, - VAR_CACHE_MAX_NEGATIVE_TTL = 464, - VAR_PERMIT_SMALL_HOLDDOWN = 465, - VAR_QNAME_MINIMISATION = 466, - VAR_QNAME_MINIMISATION_STRICT = 467, - VAR_IP_FREEBIND = 468, - VAR_DEFINE_TAG = 469, - VAR_LOCAL_ZONE_TAG = 470, - VAR_ACCESS_CONTROL_TAG = 471, - VAR_LOCAL_ZONE_OVERRIDE = 472, - VAR_ACCESS_CONTROL_TAG_ACTION = 473, - VAR_ACCESS_CONTROL_TAG_DATA = 474, - VAR_VIEW = 475, - VAR_ACCESS_CONTROL_VIEW = 476, - VAR_VIEW_FIRST = 477, - VAR_SERVE_EXPIRED = 478, - VAR_SERVE_EXPIRED_TTL = 479, - VAR_SERVE_EXPIRED_TTL_RESET = 480, - VAR_SERVE_EXPIRED_REPLY_TTL = 481, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 482, - VAR_FAKE_DSA = 483, - VAR_FAKE_SHA1 = 484, - VAR_LOG_IDENTITY = 485, - VAR_HIDE_TRUSTANCHOR = 486, - VAR_TRUST_ANCHOR_SIGNALING = 487, - VAR_AGGRESSIVE_NSEC = 488, - VAR_USE_SYSTEMD = 489, - VAR_SHM_ENABLE = 490, - VAR_SHM_KEY = 491, - VAR_ROOT_KEY_SENTINEL = 492, - VAR_DNSCRYPT = 493, - VAR_DNSCRYPT_ENABLE = 494, - VAR_DNSCRYPT_PORT = 495, - VAR_DNSCRYPT_PROVIDER = 496, - VAR_DNSCRYPT_SECRET_KEY = 497, - VAR_DNSCRYPT_PROVIDER_CERT = 498, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 499, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 500, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 501, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 502, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 503, - VAR_IPSECMOD_ENABLED = 504, - VAR_IPSECMOD_HOOK = 505, - VAR_IPSECMOD_IGNORE_BOGUS = 506, - VAR_IPSECMOD_MAX_TTL = 507, - VAR_IPSECMOD_WHITELIST = 508, - VAR_IPSECMOD_STRICT = 509, - VAR_CACHEDB = 510, - VAR_CACHEDB_BACKEND = 511, - VAR_CACHEDB_SECRETSEED = 512, - VAR_CACHEDB_REDISHOST = 513, - VAR_CACHEDB_REDISPORT = 514, - VAR_CACHEDB_REDISTIMEOUT = 515, - VAR_CACHEDB_REDISEXPIRERECORDS = 516, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 517, - VAR_FOR_UPSTREAM = 518, - VAR_AUTH_ZONE = 519, - VAR_ZONEFILE = 520, - VAR_MASTER = 521, - VAR_URL = 522, - VAR_FOR_DOWNSTREAM = 523, - VAR_FALLBACK_ENABLED = 524, - VAR_TLS_ADDITIONAL_PORT = 525, - VAR_LOW_RTT = 526, - VAR_LOW_RTT_PERMIL = 527, - VAR_FAST_SERVER_PERMIL = 528, - VAR_FAST_SERVER_NUM = 529, - VAR_ALLOW_NOTIFY = 530, - VAR_TLS_WIN_CERT = 531, - VAR_TCP_CONNECTION_LIMIT = 532, - VAR_FORWARD_NO_CACHE = 533, - VAR_STUB_NO_CACHE = 534, - VAR_LOG_SERVFAIL = 535, - VAR_DENY_ANY = 536, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 537, - VAR_LOG_TAG_QUERYREPLY = 538, - VAR_STREAM_WAIT_SIZE = 539, - VAR_TLS_CIPHERS = 540, - VAR_TLS_CIPHERSUITES = 541, - VAR_TLS_USE_SNI = 542, - VAR_IPSET = 543, - VAR_IPSET_NAME_V4 = 544, - VAR_IPSET_NAME_V6 = 545, - VAR_TLS_SESSION_TICKET_KEYS = 546, - VAR_RPZ = 547, - VAR_TAGS = 548, - VAR_RPZ_ACTION_OVERRIDE = 549, - VAR_RPZ_CNAME_OVERRIDE = 550, - VAR_RPZ_LOG = 551, - VAR_RPZ_LOG_NAME = 552, - VAR_DYNLIB = 553, - VAR_DYNLIB_FILE = 554, - VAR_EDNS_CLIENT_TAG = 555, - VAR_EDNS_CLIENT_TAG_OPCODE = 556, - VAR_ZONEMD_PERMISSIVE_MODE = 557, - VAR_ZONEMD_REJECT_ABSENCE = 558 + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + SPACE = 258, /* SPACE */ + LETTER = 259, /* LETTER */ + NEWLINE = 260, /* NEWLINE */ + COMMENT = 261, /* COMMENT */ + COLON = 262, /* COLON */ + ANY = 263, /* ANY */ + ZONESTR = 264, /* ZONESTR */ + STRING_ARG = 265, /* STRING_ARG */ + VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */ + VAR_SERVER = 267, /* VAR_SERVER */ + VAR_VERBOSITY = 268, /* VAR_VERBOSITY */ + VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */ + VAR_PORT = 270, /* VAR_PORT */ + VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */ + VAR_INTERFACE = 272, /* VAR_INTERFACE */ + VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */ + VAR_DO_IP4 = 274, /* VAR_DO_IP4 */ + VAR_DO_IP6 = 275, /* VAR_DO_IP6 */ + VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */ + VAR_DO_UDP = 277, /* VAR_DO_UDP */ + VAR_DO_TCP = 278, /* VAR_DO_TCP */ + VAR_TCP_MSS = 279, /* VAR_TCP_MSS */ + VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */ + VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */ + VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */ + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ + VAR_CHROOT = 284, /* VAR_CHROOT */ + VAR_USERNAME = 285, /* VAR_USERNAME */ + VAR_DIRECTORY = 286, /* VAR_DIRECTORY */ + VAR_LOGFILE = 287, /* VAR_LOGFILE */ + VAR_PIDFILE = 288, /* VAR_PIDFILE */ + VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */ + VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */ + VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */ + VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */ + VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */ + VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */ + VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */ + VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */ + VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */ + VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */ + VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */ + VAR_NAME = 300, /* VAR_NAME */ + VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */ + VAR_STUB_HOST = 302, /* VAR_STUB_HOST */ + VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */ + VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */ + VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */ + VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */ + VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */ + VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */ + VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */ + VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */ + VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */ + VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */ + VAR_IDENTITY = 313, /* VAR_IDENTITY */ + VAR_VERSION = 314, /* VAR_VERSION */ + VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */ + VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */ + VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */ + VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */ + VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */ + VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */ + VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */ + VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */ + VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */ + VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */ + VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */ + VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */ + VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */ + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ + VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */ + VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */ + VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */ + VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */ + VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */ + VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */ + VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */ + VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */ + VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */ + VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */ + VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */ + VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */ + VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */ + VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */ + VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */ + VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */ + VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */ + VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */ + VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */ + VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */ + VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */ + VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */ + VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */ + VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */ + VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */ + VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */ + VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */ + VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */ + VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */ + VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */ + VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */ + VAR_EXTENDED_STATISTICS = 360, /* VAR_EXTENDED_STATISTICS */ + VAR_LOCAL_DATA_PTR = 361, /* VAR_LOCAL_DATA_PTR */ + VAR_JOSTLE_TIMEOUT = 362, /* VAR_JOSTLE_TIMEOUT */ + VAR_STUB_PRIME = 363, /* VAR_STUB_PRIME */ + VAR_UNWANTED_REPLY_THRESHOLD = 364, /* VAR_UNWANTED_REPLY_THRESHOLD */ + VAR_LOG_TIME_ASCII = 365, /* VAR_LOG_TIME_ASCII */ + VAR_DOMAIN_INSECURE = 366, /* VAR_DOMAIN_INSECURE */ + VAR_PYTHON = 367, /* VAR_PYTHON */ + VAR_PYTHON_SCRIPT = 368, /* VAR_PYTHON_SCRIPT */ + VAR_VAL_SIG_SKEW_MIN = 369, /* VAR_VAL_SIG_SKEW_MIN */ + VAR_VAL_SIG_SKEW_MAX = 370, /* VAR_VAL_SIG_SKEW_MAX */ + VAR_CACHE_MIN_TTL = 371, /* VAR_CACHE_MIN_TTL */ + VAR_VAL_LOG_LEVEL = 372, /* VAR_VAL_LOG_LEVEL */ + VAR_AUTO_TRUST_ANCHOR_FILE = 373, /* VAR_AUTO_TRUST_ANCHOR_FILE */ + VAR_KEEP_MISSING = 374, /* VAR_KEEP_MISSING */ + VAR_ADD_HOLDDOWN = 375, /* VAR_ADD_HOLDDOWN */ + VAR_DEL_HOLDDOWN = 376, /* VAR_DEL_HOLDDOWN */ + VAR_SO_RCVBUF = 377, /* VAR_SO_RCVBUF */ + VAR_EDNS_BUFFER_SIZE = 378, /* VAR_EDNS_BUFFER_SIZE */ + VAR_PREFETCH = 379, /* VAR_PREFETCH */ + VAR_PREFETCH_KEY = 380, /* VAR_PREFETCH_KEY */ + VAR_SO_SNDBUF = 381, /* VAR_SO_SNDBUF */ + VAR_SO_REUSEPORT = 382, /* VAR_SO_REUSEPORT */ + VAR_HARDEN_BELOW_NXDOMAIN = 383, /* VAR_HARDEN_BELOW_NXDOMAIN */ + VAR_IGNORE_CD_FLAG = 384, /* VAR_IGNORE_CD_FLAG */ + VAR_LOG_QUERIES = 385, /* VAR_LOG_QUERIES */ + VAR_LOG_REPLIES = 386, /* VAR_LOG_REPLIES */ + VAR_LOG_LOCAL_ACTIONS = 387, /* VAR_LOG_LOCAL_ACTIONS */ + VAR_TCP_UPSTREAM = 388, /* VAR_TCP_UPSTREAM */ + VAR_SSL_UPSTREAM = 389, /* VAR_SSL_UPSTREAM */ + VAR_SSL_SERVICE_KEY = 390, /* VAR_SSL_SERVICE_KEY */ + VAR_SSL_SERVICE_PEM = 391, /* VAR_SSL_SERVICE_PEM */ + VAR_SSL_PORT = 392, /* VAR_SSL_PORT */ + VAR_FORWARD_FIRST = 393, /* VAR_FORWARD_FIRST */ + VAR_STUB_SSL_UPSTREAM = 394, /* VAR_STUB_SSL_UPSTREAM */ + VAR_FORWARD_SSL_UPSTREAM = 395, /* VAR_FORWARD_SSL_UPSTREAM */ + VAR_TLS_CERT_BUNDLE = 396, /* VAR_TLS_CERT_BUNDLE */ + VAR_HTTPS_PORT = 397, /* VAR_HTTPS_PORT */ + VAR_HTTP_ENDPOINT = 398, /* VAR_HTTP_ENDPOINT */ + VAR_HTTP_MAX_STREAMS = 399, /* VAR_HTTP_MAX_STREAMS */ + VAR_HTTP_QUERY_BUFFER_SIZE = 400, /* VAR_HTTP_QUERY_BUFFER_SIZE */ + VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ + VAR_HTTP_NODELAY = 402, /* VAR_HTTP_NODELAY */ + VAR_HTTP_NOTLS_DOWNSTREAM = 403, /* VAR_HTTP_NOTLS_DOWNSTREAM */ + VAR_STUB_FIRST = 404, /* VAR_STUB_FIRST */ + VAR_MINIMAL_RESPONSES = 405, /* VAR_MINIMAL_RESPONSES */ + VAR_RRSET_ROUNDROBIN = 406, /* VAR_RRSET_ROUNDROBIN */ + VAR_MAX_UDP_SIZE = 407, /* VAR_MAX_UDP_SIZE */ + VAR_DELAY_CLOSE = 408, /* VAR_DELAY_CLOSE */ + VAR_UDP_CONNECT = 409, /* VAR_UDP_CONNECT */ + VAR_UNBLOCK_LAN_ZONES = 410, /* VAR_UNBLOCK_LAN_ZONES */ + VAR_INSECURE_LAN_ZONES = 411, /* VAR_INSECURE_LAN_ZONES */ + VAR_INFRA_CACHE_MIN_RTT = 412, /* VAR_INFRA_CACHE_MIN_RTT */ + VAR_INFRA_KEEP_PROBING = 413, /* VAR_INFRA_KEEP_PROBING */ + VAR_DNS64_PREFIX = 414, /* VAR_DNS64_PREFIX */ + VAR_DNS64_SYNTHALL = 415, /* VAR_DNS64_SYNTHALL */ + VAR_DNS64_IGNORE_AAAA = 416, /* VAR_DNS64_IGNORE_AAAA */ + VAR_DNSTAP = 417, /* VAR_DNSTAP */ + VAR_DNSTAP_ENABLE = 418, /* VAR_DNSTAP_ENABLE */ + VAR_DNSTAP_SOCKET_PATH = 419, /* VAR_DNSTAP_SOCKET_PATH */ + VAR_DNSTAP_IP = 420, /* VAR_DNSTAP_IP */ + VAR_DNSTAP_TLS = 421, /* VAR_DNSTAP_TLS */ + VAR_DNSTAP_TLS_SERVER_NAME = 422, /* VAR_DNSTAP_TLS_SERVER_NAME */ + VAR_DNSTAP_TLS_CERT_BUNDLE = 423, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ + VAR_DNSTAP_SEND_IDENTITY = 426, /* VAR_DNSTAP_SEND_IDENTITY */ + VAR_DNSTAP_SEND_VERSION = 427, /* VAR_DNSTAP_SEND_VERSION */ + VAR_DNSTAP_BIDIRECTIONAL = 428, /* VAR_DNSTAP_BIDIRECTIONAL */ + VAR_DNSTAP_IDENTITY = 429, /* VAR_DNSTAP_IDENTITY */ + VAR_DNSTAP_VERSION = 430, /* VAR_DNSTAP_VERSION */ + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ + VAR_RESPONSE_IP_TAG = 437, /* VAR_RESPONSE_IP_TAG */ + VAR_RESPONSE_IP = 438, /* VAR_RESPONSE_IP */ + VAR_RESPONSE_IP_DATA = 439, /* VAR_RESPONSE_IP_DATA */ + VAR_HARDEN_ALGO_DOWNGRADE = 440, /* VAR_HARDEN_ALGO_DOWNGRADE */ + VAR_IP_TRANSPARENT = 441, /* VAR_IP_TRANSPARENT */ + VAR_IP_DSCP = 442, /* VAR_IP_DSCP */ + VAR_DISABLE_DNSSEC_LAME_CHECK = 443, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ + VAR_IP_RATELIMIT = 444, /* VAR_IP_RATELIMIT */ + VAR_IP_RATELIMIT_SLABS = 445, /* VAR_IP_RATELIMIT_SLABS */ + VAR_IP_RATELIMIT_SIZE = 446, /* VAR_IP_RATELIMIT_SIZE */ + VAR_RATELIMIT = 447, /* VAR_RATELIMIT */ + VAR_RATELIMIT_SLABS = 448, /* VAR_RATELIMIT_SLABS */ + VAR_RATELIMIT_SIZE = 449, /* VAR_RATELIMIT_SIZE */ + VAR_RATELIMIT_FOR_DOMAIN = 450, /* VAR_RATELIMIT_FOR_DOMAIN */ + VAR_RATELIMIT_BELOW_DOMAIN = 451, /* VAR_RATELIMIT_BELOW_DOMAIN */ + VAR_IP_RATELIMIT_FACTOR = 452, /* VAR_IP_RATELIMIT_FACTOR */ + VAR_RATELIMIT_FACTOR = 453, /* VAR_RATELIMIT_FACTOR */ + VAR_SEND_CLIENT_SUBNET = 454, /* VAR_SEND_CLIENT_SUBNET */ + VAR_CLIENT_SUBNET_ZONE = 455, /* VAR_CLIENT_SUBNET_ZONE */ + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + VAR_CLIENT_SUBNET_OPCODE = 457, /* VAR_CLIENT_SUBNET_OPCODE */ + VAR_MAX_CLIENT_SUBNET_IPV4 = 458, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + VAR_MAX_CLIENT_SUBNET_IPV6 = 459, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + VAR_MIN_CLIENT_SUBNET_IPV4 = 460, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + VAR_MIN_CLIENT_SUBNET_IPV6 = 461, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + VAR_CAPS_WHITELIST = 464, /* VAR_CAPS_WHITELIST */ + VAR_CACHE_MAX_NEGATIVE_TTL = 465, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + VAR_PERMIT_SMALL_HOLDDOWN = 466, /* VAR_PERMIT_SMALL_HOLDDOWN */ + VAR_QNAME_MINIMISATION = 467, /* VAR_QNAME_MINIMISATION */ + VAR_QNAME_MINIMISATION_STRICT = 468, /* VAR_QNAME_MINIMISATION_STRICT */ + VAR_IP_FREEBIND = 469, /* VAR_IP_FREEBIND */ + VAR_DEFINE_TAG = 470, /* VAR_DEFINE_TAG */ + VAR_LOCAL_ZONE_TAG = 471, /* VAR_LOCAL_ZONE_TAG */ + VAR_ACCESS_CONTROL_TAG = 472, /* VAR_ACCESS_CONTROL_TAG */ + VAR_LOCAL_ZONE_OVERRIDE = 473, /* VAR_LOCAL_ZONE_OVERRIDE */ + VAR_ACCESS_CONTROL_TAG_ACTION = 474, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + VAR_ACCESS_CONTROL_TAG_DATA = 475, /* VAR_ACCESS_CONTROL_TAG_DATA */ + VAR_VIEW = 476, /* VAR_VIEW */ + VAR_ACCESS_CONTROL_VIEW = 477, /* VAR_ACCESS_CONTROL_VIEW */ + VAR_VIEW_FIRST = 478, /* VAR_VIEW_FIRST */ + VAR_SERVE_EXPIRED = 479, /* VAR_SERVE_EXPIRED */ + VAR_SERVE_EXPIRED_TTL = 480, /* VAR_SERVE_EXPIRED_TTL */ + VAR_SERVE_EXPIRED_TTL_RESET = 481, /* VAR_SERVE_EXPIRED_TTL_RESET */ + VAR_SERVE_EXPIRED_REPLY_TTL = 482, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + VAR_SERVE_ORIGINAL_TTL = 484, /* VAR_SERVE_ORIGINAL_TTL */ + VAR_FAKE_DSA = 485, /* VAR_FAKE_DSA */ + VAR_FAKE_SHA1 = 486, /* VAR_FAKE_SHA1 */ + VAR_LOG_IDENTITY = 487, /* VAR_LOG_IDENTITY */ + VAR_HIDE_TRUSTANCHOR = 488, /* VAR_HIDE_TRUSTANCHOR */ + VAR_TRUST_ANCHOR_SIGNALING = 489, /* VAR_TRUST_ANCHOR_SIGNALING */ + VAR_AGGRESSIVE_NSEC = 490, /* VAR_AGGRESSIVE_NSEC */ + VAR_USE_SYSTEMD = 491, /* VAR_USE_SYSTEMD */ + VAR_SHM_ENABLE = 492, /* VAR_SHM_ENABLE */ + VAR_SHM_KEY = 493, /* VAR_SHM_KEY */ + VAR_ROOT_KEY_SENTINEL = 494, /* VAR_ROOT_KEY_SENTINEL */ + VAR_DNSCRYPT = 495, /* VAR_DNSCRYPT */ + VAR_DNSCRYPT_ENABLE = 496, /* VAR_DNSCRYPT_ENABLE */ + VAR_DNSCRYPT_PORT = 497, /* VAR_DNSCRYPT_PORT */ + VAR_DNSCRYPT_PROVIDER = 498, /* VAR_DNSCRYPT_PROVIDER */ + VAR_DNSCRYPT_SECRET_KEY = 499, /* VAR_DNSCRYPT_SECRET_KEY */ + VAR_DNSCRYPT_PROVIDER_CERT = 500, /* VAR_DNSCRYPT_PROVIDER_CERT */ + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 501, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 502, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 503, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 504, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 505, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + VAR_PAD_RESPONSES = 506, /* VAR_PAD_RESPONSES */ + VAR_PAD_RESPONSES_BLOCK_SIZE = 507, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ + VAR_PAD_QUERIES = 508, /* VAR_PAD_QUERIES */ + VAR_PAD_QUERIES_BLOCK_SIZE = 509, /* VAR_PAD_QUERIES_BLOCK_SIZE */ + VAR_IPSECMOD_ENABLED = 510, /* VAR_IPSECMOD_ENABLED */ + VAR_IPSECMOD_HOOK = 511, /* VAR_IPSECMOD_HOOK */ + VAR_IPSECMOD_IGNORE_BOGUS = 512, /* VAR_IPSECMOD_IGNORE_BOGUS */ + VAR_IPSECMOD_MAX_TTL = 513, /* VAR_IPSECMOD_MAX_TTL */ + VAR_IPSECMOD_WHITELIST = 514, /* VAR_IPSECMOD_WHITELIST */ + VAR_IPSECMOD_STRICT = 515, /* VAR_IPSECMOD_STRICT */ + VAR_CACHEDB = 516, /* VAR_CACHEDB */ + VAR_CACHEDB_BACKEND = 517, /* VAR_CACHEDB_BACKEND */ + VAR_CACHEDB_SECRETSEED = 518, /* VAR_CACHEDB_SECRETSEED */ + VAR_CACHEDB_REDISHOST = 519, /* VAR_CACHEDB_REDISHOST */ + VAR_CACHEDB_REDISPORT = 520, /* VAR_CACHEDB_REDISPORT */ + VAR_CACHEDB_REDISTIMEOUT = 521, /* VAR_CACHEDB_REDISTIMEOUT */ + VAR_CACHEDB_REDISEXPIRERECORDS = 522, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 523, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + VAR_FOR_UPSTREAM = 524, /* VAR_FOR_UPSTREAM */ + VAR_AUTH_ZONE = 525, /* VAR_AUTH_ZONE */ + VAR_ZONEFILE = 526, /* VAR_ZONEFILE */ + VAR_MASTER = 527, /* VAR_MASTER */ + VAR_URL = 528, /* VAR_URL */ + VAR_FOR_DOWNSTREAM = 529, /* VAR_FOR_DOWNSTREAM */ + VAR_FALLBACK_ENABLED = 530, /* VAR_FALLBACK_ENABLED */ + VAR_TLS_ADDITIONAL_PORT = 531, /* VAR_TLS_ADDITIONAL_PORT */ + VAR_LOW_RTT = 532, /* VAR_LOW_RTT */ + VAR_LOW_RTT_PERMIL = 533, /* VAR_LOW_RTT_PERMIL */ + VAR_FAST_SERVER_PERMIL = 534, /* VAR_FAST_SERVER_PERMIL */ + VAR_FAST_SERVER_NUM = 535, /* VAR_FAST_SERVER_NUM */ + VAR_ALLOW_NOTIFY = 536, /* VAR_ALLOW_NOTIFY */ + VAR_TLS_WIN_CERT = 537, /* VAR_TLS_WIN_CERT */ + VAR_TCP_CONNECTION_LIMIT = 538, /* VAR_TCP_CONNECTION_LIMIT */ + VAR_FORWARD_NO_CACHE = 539, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 540, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 541, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 542, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 543, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 544, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 545, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 546, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 547, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 548, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 549, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 550, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 551, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 552, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 553, /* VAR_RPZ */ + VAR_TAGS = 554, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 555, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 556, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 557, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 558, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 559, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 560, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 561, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 562, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 563, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 564, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_REJECT_ABSENCE = 565 /* VAR_ZONEMD_REJECT_ABSENCE */ }; + typedef enum yytokentype yytoken_kind_t; #endif -/* Tokens. */ +/* Token kinds. */ +#define YYEOF 0 +#define YYerror 256 +#define YYUNDEF 257 #define SPACE 258 #define LETTER 259 #define NEWLINE 260 @@ -589,156 +606,163 @@ extern int yydebug; #define VAR_RRSET_ROUNDROBIN 406 #define VAR_MAX_UDP_SIZE 407 #define VAR_DELAY_CLOSE 408 -#define VAR_UNBLOCK_LAN_ZONES 409 -#define VAR_INSECURE_LAN_ZONES 410 -#define VAR_INFRA_CACHE_MIN_RTT 411 -#define VAR_INFRA_KEEP_PROBING 412 -#define VAR_DNS64_PREFIX 413 -#define VAR_DNS64_SYNTHALL 414 -#define VAR_DNS64_IGNORE_AAAA 415 -#define VAR_DNSTAP 416 -#define VAR_DNSTAP_ENABLE 417 -#define VAR_DNSTAP_SOCKET_PATH 418 -#define VAR_DNSTAP_IP 419 -#define VAR_DNSTAP_TLS 420 -#define VAR_DNSTAP_TLS_SERVER_NAME 421 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 422 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 423 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 424 -#define VAR_DNSTAP_SEND_IDENTITY 425 -#define VAR_DNSTAP_SEND_VERSION 426 -#define VAR_DNSTAP_BIDIRECTIONAL 427 -#define VAR_DNSTAP_IDENTITY 428 -#define VAR_DNSTAP_VERSION 429 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 430 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 431 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 432 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 433 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 434 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 435 -#define VAR_RESPONSE_IP_TAG 436 -#define VAR_RESPONSE_IP 437 -#define VAR_RESPONSE_IP_DATA 438 -#define VAR_HARDEN_ALGO_DOWNGRADE 439 -#define VAR_IP_TRANSPARENT 440 -#define VAR_IP_DSCP 441 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 442 -#define VAR_IP_RATELIMIT 443 -#define VAR_IP_RATELIMIT_SLABS 444 -#define VAR_IP_RATELIMIT_SIZE 445 -#define VAR_RATELIMIT 446 -#define VAR_RATELIMIT_SLABS 447 -#define VAR_RATELIMIT_SIZE 448 -#define VAR_RATELIMIT_FOR_DOMAIN 449 -#define VAR_RATELIMIT_BELOW_DOMAIN 450 -#define VAR_IP_RATELIMIT_FACTOR 451 -#define VAR_RATELIMIT_FACTOR 452 -#define VAR_SEND_CLIENT_SUBNET 453 -#define VAR_CLIENT_SUBNET_ZONE 454 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 455 -#define VAR_CLIENT_SUBNET_OPCODE 456 -#define VAR_MAX_CLIENT_SUBNET_IPV4 457 -#define VAR_MAX_CLIENT_SUBNET_IPV6 458 -#define VAR_MIN_CLIENT_SUBNET_IPV4 459 -#define VAR_MIN_CLIENT_SUBNET_IPV6 460 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 461 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 462 -#define VAR_CAPS_WHITELIST 463 -#define VAR_CACHE_MAX_NEGATIVE_TTL 464 -#define VAR_PERMIT_SMALL_HOLDDOWN 465 -#define VAR_QNAME_MINIMISATION 466 -#define VAR_QNAME_MINIMISATION_STRICT 467 -#define VAR_IP_FREEBIND 468 -#define VAR_DEFINE_TAG 469 -#define VAR_LOCAL_ZONE_TAG 470 -#define VAR_ACCESS_CONTROL_TAG 471 -#define VAR_LOCAL_ZONE_OVERRIDE 472 -#define VAR_ACCESS_CONTROL_TAG_ACTION 473 -#define VAR_ACCESS_CONTROL_TAG_DATA 474 -#define VAR_VIEW 475 -#define VAR_ACCESS_CONTROL_VIEW 476 -#define VAR_VIEW_FIRST 477 -#define VAR_SERVE_EXPIRED 478 -#define VAR_SERVE_EXPIRED_TTL 479 -#define VAR_SERVE_EXPIRED_TTL_RESET 480 -#define VAR_SERVE_EXPIRED_REPLY_TTL 481 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 482 -#define VAR_FAKE_DSA 483 -#define VAR_FAKE_SHA1 484 -#define VAR_LOG_IDENTITY 485 -#define VAR_HIDE_TRUSTANCHOR 486 -#define VAR_TRUST_ANCHOR_SIGNALING 487 -#define VAR_AGGRESSIVE_NSEC 488 -#define VAR_USE_SYSTEMD 489 -#define VAR_SHM_ENABLE 490 -#define VAR_SHM_KEY 491 -#define VAR_ROOT_KEY_SENTINEL 492 -#define VAR_DNSCRYPT 493 -#define VAR_DNSCRYPT_ENABLE 494 -#define VAR_DNSCRYPT_PORT 495 -#define VAR_DNSCRYPT_PROVIDER 496 -#define VAR_DNSCRYPT_SECRET_KEY 497 -#define VAR_DNSCRYPT_PROVIDER_CERT 498 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 499 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 500 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 501 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 502 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 503 -#define VAR_IPSECMOD_ENABLED 504 -#define VAR_IPSECMOD_HOOK 505 -#define VAR_IPSECMOD_IGNORE_BOGUS 506 -#define VAR_IPSECMOD_MAX_TTL 507 -#define VAR_IPSECMOD_WHITELIST 508 -#define VAR_IPSECMOD_STRICT 509 -#define VAR_CACHEDB 510 -#define VAR_CACHEDB_BACKEND 511 -#define VAR_CACHEDB_SECRETSEED 512 -#define VAR_CACHEDB_REDISHOST 513 -#define VAR_CACHEDB_REDISPORT 514 -#define VAR_CACHEDB_REDISTIMEOUT 515 -#define VAR_CACHEDB_REDISEXPIRERECORDS 516 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 517 -#define VAR_FOR_UPSTREAM 518 -#define VAR_AUTH_ZONE 519 -#define VAR_ZONEFILE 520 -#define VAR_MASTER 521 -#define VAR_URL 522 -#define VAR_FOR_DOWNSTREAM 523 -#define VAR_FALLBACK_ENABLED 524 -#define VAR_TLS_ADDITIONAL_PORT 525 -#define VAR_LOW_RTT 526 -#define VAR_LOW_RTT_PERMIL 527 -#define VAR_FAST_SERVER_PERMIL 528 -#define VAR_FAST_SERVER_NUM 529 -#define VAR_ALLOW_NOTIFY 530 -#define VAR_TLS_WIN_CERT 531 -#define VAR_TCP_CONNECTION_LIMIT 532 -#define VAR_FORWARD_NO_CACHE 533 -#define VAR_STUB_NO_CACHE 534 -#define VAR_LOG_SERVFAIL 535 -#define VAR_DENY_ANY 536 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 537 -#define VAR_LOG_TAG_QUERYREPLY 538 -#define VAR_STREAM_WAIT_SIZE 539 -#define VAR_TLS_CIPHERS 540 -#define VAR_TLS_CIPHERSUITES 541 -#define VAR_TLS_USE_SNI 542 -#define VAR_IPSET 543 -#define VAR_IPSET_NAME_V4 544 -#define VAR_IPSET_NAME_V6 545 -#define VAR_TLS_SESSION_TICKET_KEYS 546 -#define VAR_RPZ 547 -#define VAR_TAGS 548 -#define VAR_RPZ_ACTION_OVERRIDE 549 -#define VAR_RPZ_CNAME_OVERRIDE 550 -#define VAR_RPZ_LOG 551 -#define VAR_RPZ_LOG_NAME 552 -#define VAR_DYNLIB 553 -#define VAR_DYNLIB_FILE 554 -#define VAR_EDNS_CLIENT_TAG 555 -#define VAR_EDNS_CLIENT_TAG_OPCODE 556 -#define VAR_ZONEMD_PERMISSIVE_MODE 557 -#define VAR_ZONEMD_REJECT_ABSENCE 558 +#define VAR_UDP_CONNECT 409 +#define VAR_UNBLOCK_LAN_ZONES 410 +#define VAR_INSECURE_LAN_ZONES 411 +#define VAR_INFRA_CACHE_MIN_RTT 412 +#define VAR_INFRA_KEEP_PROBING 413 +#define VAR_DNS64_PREFIX 414 +#define VAR_DNS64_SYNTHALL 415 +#define VAR_DNS64_IGNORE_AAAA 416 +#define VAR_DNSTAP 417 +#define VAR_DNSTAP_ENABLE 418 +#define VAR_DNSTAP_SOCKET_PATH 419 +#define VAR_DNSTAP_IP 420 +#define VAR_DNSTAP_TLS 421 +#define VAR_DNSTAP_TLS_SERVER_NAME 422 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 423 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425 +#define VAR_DNSTAP_SEND_IDENTITY 426 +#define VAR_DNSTAP_SEND_VERSION 427 +#define VAR_DNSTAP_BIDIRECTIONAL 428 +#define VAR_DNSTAP_IDENTITY 429 +#define VAR_DNSTAP_VERSION 430 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436 +#define VAR_RESPONSE_IP_TAG 437 +#define VAR_RESPONSE_IP 438 +#define VAR_RESPONSE_IP_DATA 439 +#define VAR_HARDEN_ALGO_DOWNGRADE 440 +#define VAR_IP_TRANSPARENT 441 +#define VAR_IP_DSCP 442 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 443 +#define VAR_IP_RATELIMIT 444 +#define VAR_IP_RATELIMIT_SLABS 445 +#define VAR_IP_RATELIMIT_SIZE 446 +#define VAR_RATELIMIT 447 +#define VAR_RATELIMIT_SLABS 448 +#define VAR_RATELIMIT_SIZE 449 +#define VAR_RATELIMIT_FOR_DOMAIN 450 +#define VAR_RATELIMIT_BELOW_DOMAIN 451 +#define VAR_IP_RATELIMIT_FACTOR 452 +#define VAR_RATELIMIT_FACTOR 453 +#define VAR_SEND_CLIENT_SUBNET 454 +#define VAR_CLIENT_SUBNET_ZONE 455 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456 +#define VAR_CLIENT_SUBNET_OPCODE 457 +#define VAR_MAX_CLIENT_SUBNET_IPV4 458 +#define VAR_MAX_CLIENT_SUBNET_IPV6 459 +#define VAR_MIN_CLIENT_SUBNET_IPV4 460 +#define VAR_MIN_CLIENT_SUBNET_IPV6 461 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 462 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 463 +#define VAR_CAPS_WHITELIST 464 +#define VAR_CACHE_MAX_NEGATIVE_TTL 465 +#define VAR_PERMIT_SMALL_HOLDDOWN 466 +#define VAR_QNAME_MINIMISATION 467 +#define VAR_QNAME_MINIMISATION_STRICT 468 +#define VAR_IP_FREEBIND 469 +#define VAR_DEFINE_TAG 470 +#define VAR_LOCAL_ZONE_TAG 471 +#define VAR_ACCESS_CONTROL_TAG 472 +#define VAR_LOCAL_ZONE_OVERRIDE 473 +#define VAR_ACCESS_CONTROL_TAG_ACTION 474 +#define VAR_ACCESS_CONTROL_TAG_DATA 475 +#define VAR_VIEW 476 +#define VAR_ACCESS_CONTROL_VIEW 477 +#define VAR_VIEW_FIRST 478 +#define VAR_SERVE_EXPIRED 479 +#define VAR_SERVE_EXPIRED_TTL 480 +#define VAR_SERVE_EXPIRED_TTL_RESET 481 +#define VAR_SERVE_EXPIRED_REPLY_TTL 482 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483 +#define VAR_SERVE_ORIGINAL_TTL 484 +#define VAR_FAKE_DSA 485 +#define VAR_FAKE_SHA1 486 +#define VAR_LOG_IDENTITY 487 +#define VAR_HIDE_TRUSTANCHOR 488 +#define VAR_TRUST_ANCHOR_SIGNALING 489 +#define VAR_AGGRESSIVE_NSEC 490 +#define VAR_USE_SYSTEMD 491 +#define VAR_SHM_ENABLE 492 +#define VAR_SHM_KEY 493 +#define VAR_ROOT_KEY_SENTINEL 494 +#define VAR_DNSCRYPT 495 +#define VAR_DNSCRYPT_ENABLE 496 +#define VAR_DNSCRYPT_PORT 497 +#define VAR_DNSCRYPT_PROVIDER 498 +#define VAR_DNSCRYPT_SECRET_KEY 499 +#define VAR_DNSCRYPT_PROVIDER_CERT 500 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 501 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 502 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 503 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 504 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 505 +#define VAR_PAD_RESPONSES 506 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 507 +#define VAR_PAD_QUERIES 508 +#define VAR_PAD_QUERIES_BLOCK_SIZE 509 +#define VAR_IPSECMOD_ENABLED 510 +#define VAR_IPSECMOD_HOOK 511 +#define VAR_IPSECMOD_IGNORE_BOGUS 512 +#define VAR_IPSECMOD_MAX_TTL 513 +#define VAR_IPSECMOD_WHITELIST 514 +#define VAR_IPSECMOD_STRICT 515 +#define VAR_CACHEDB 516 +#define VAR_CACHEDB_BACKEND 517 +#define VAR_CACHEDB_SECRETSEED 518 +#define VAR_CACHEDB_REDISHOST 519 +#define VAR_CACHEDB_REDISPORT 520 +#define VAR_CACHEDB_REDISTIMEOUT 521 +#define VAR_CACHEDB_REDISEXPIRERECORDS 522 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 523 +#define VAR_FOR_UPSTREAM 524 +#define VAR_AUTH_ZONE 525 +#define VAR_ZONEFILE 526 +#define VAR_MASTER 527 +#define VAR_URL 528 +#define VAR_FOR_DOWNSTREAM 529 +#define VAR_FALLBACK_ENABLED 530 +#define VAR_TLS_ADDITIONAL_PORT 531 +#define VAR_LOW_RTT 532 +#define VAR_LOW_RTT_PERMIL 533 +#define VAR_FAST_SERVER_PERMIL 534 +#define VAR_FAST_SERVER_NUM 535 +#define VAR_ALLOW_NOTIFY 536 +#define VAR_TLS_WIN_CERT 537 +#define VAR_TCP_CONNECTION_LIMIT 538 +#define VAR_FORWARD_NO_CACHE 539 +#define VAR_STUB_NO_CACHE 540 +#define VAR_LOG_SERVFAIL 541 +#define VAR_DENY_ANY 542 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 543 +#define VAR_LOG_TAG_QUERYREPLY 544 +#define VAR_STREAM_WAIT_SIZE 545 +#define VAR_TLS_CIPHERS 546 +#define VAR_TLS_CIPHERSUITES 547 +#define VAR_TLS_USE_SNI 548 +#define VAR_IPSET 549 +#define VAR_IPSET_NAME_V4 550 +#define VAR_IPSET_NAME_V6 551 +#define VAR_TLS_SESSION_TICKET_KEYS 552 +#define VAR_RPZ 553 +#define VAR_TAGS 554 +#define VAR_RPZ_ACTION_OVERRIDE 555 +#define VAR_RPZ_CNAME_OVERRIDE 556 +#define VAR_RPZ_LOG 557 +#define VAR_RPZ_LOG_NAME 558 +#define VAR_DYNLIB 559 +#define VAR_DYNLIB_FILE 560 +#define VAR_EDNS_CLIENT_STRING 561 +#define VAR_EDNS_CLIENT_STRING_OPCODE 562 +#define VAR_NSID 563 +#define VAR_ZONEMD_PERMISSIVE_MODE 564 +#define VAR_ZONEMD_REJECT_ABSENCE 565 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -748,7 +772,7 @@ union YYSTYPE char* str; -#line 752 "util/configparser.c" +#line 776 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -762,6 +786,660 @@ extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_SPACE = 3, /* SPACE */ + YYSYMBOL_LETTER = 4, /* LETTER */ + YYSYMBOL_NEWLINE = 5, /* NEWLINE */ + YYSYMBOL_COMMENT = 6, /* COMMENT */ + YYSYMBOL_COLON = 7, /* COLON */ + YYSYMBOL_ANY = 8, /* ANY */ + YYSYMBOL_ZONESTR = 9, /* ZONESTR */ + YYSYMBOL_STRING_ARG = 10, /* STRING_ARG */ + YYSYMBOL_VAR_FORCE_TOPLEVEL = 11, /* VAR_FORCE_TOPLEVEL */ + YYSYMBOL_VAR_SERVER = 12, /* VAR_SERVER */ + YYSYMBOL_VAR_VERBOSITY = 13, /* VAR_VERBOSITY */ + YYSYMBOL_VAR_NUM_THREADS = 14, /* VAR_NUM_THREADS */ + YYSYMBOL_VAR_PORT = 15, /* VAR_PORT */ + YYSYMBOL_VAR_OUTGOING_RANGE = 16, /* VAR_OUTGOING_RANGE */ + YYSYMBOL_VAR_INTERFACE = 17, /* VAR_INTERFACE */ + YYSYMBOL_VAR_PREFER_IP4 = 18, /* VAR_PREFER_IP4 */ + YYSYMBOL_VAR_DO_IP4 = 19, /* VAR_DO_IP4 */ + YYSYMBOL_VAR_DO_IP6 = 20, /* VAR_DO_IP6 */ + YYSYMBOL_VAR_PREFER_IP6 = 21, /* VAR_PREFER_IP6 */ + YYSYMBOL_VAR_DO_UDP = 22, /* VAR_DO_UDP */ + YYSYMBOL_VAR_DO_TCP = 23, /* VAR_DO_TCP */ + YYSYMBOL_VAR_TCP_MSS = 24, /* VAR_TCP_MSS */ + YYSYMBOL_VAR_OUTGOING_TCP_MSS = 25, /* VAR_OUTGOING_TCP_MSS */ + YYSYMBOL_VAR_TCP_IDLE_TIMEOUT = 26, /* VAR_TCP_IDLE_TIMEOUT */ + YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE = 27, /* VAR_EDNS_TCP_KEEPALIVE */ + YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 28, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ + YYSYMBOL_VAR_CHROOT = 29, /* VAR_CHROOT */ + YYSYMBOL_VAR_USERNAME = 30, /* VAR_USERNAME */ + YYSYMBOL_VAR_DIRECTORY = 31, /* VAR_DIRECTORY */ + YYSYMBOL_VAR_LOGFILE = 32, /* VAR_LOGFILE */ + YYSYMBOL_VAR_PIDFILE = 33, /* VAR_PIDFILE */ + YYSYMBOL_VAR_MSG_CACHE_SIZE = 34, /* VAR_MSG_CACHE_SIZE */ + YYSYMBOL_VAR_MSG_CACHE_SLABS = 35, /* VAR_MSG_CACHE_SLABS */ + YYSYMBOL_VAR_NUM_QUERIES_PER_THREAD = 36, /* VAR_NUM_QUERIES_PER_THREAD */ + YYSYMBOL_VAR_RRSET_CACHE_SIZE = 37, /* VAR_RRSET_CACHE_SIZE */ + YYSYMBOL_VAR_RRSET_CACHE_SLABS = 38, /* VAR_RRSET_CACHE_SLABS */ + YYSYMBOL_VAR_OUTGOING_NUM_TCP = 39, /* VAR_OUTGOING_NUM_TCP */ + YYSYMBOL_VAR_INFRA_HOST_TTL = 40, /* VAR_INFRA_HOST_TTL */ + YYSYMBOL_VAR_INFRA_LAME_TTL = 41, /* VAR_INFRA_LAME_TTL */ + YYSYMBOL_VAR_INFRA_CACHE_SLABS = 42, /* VAR_INFRA_CACHE_SLABS */ + YYSYMBOL_VAR_INFRA_CACHE_NUMHOSTS = 43, /* VAR_INFRA_CACHE_NUMHOSTS */ + YYSYMBOL_VAR_INFRA_CACHE_LAME_SIZE = 44, /* VAR_INFRA_CACHE_LAME_SIZE */ + YYSYMBOL_VAR_NAME = 45, /* VAR_NAME */ + YYSYMBOL_VAR_STUB_ZONE = 46, /* VAR_STUB_ZONE */ + YYSYMBOL_VAR_STUB_HOST = 47, /* VAR_STUB_HOST */ + YYSYMBOL_VAR_STUB_ADDR = 48, /* VAR_STUB_ADDR */ + YYSYMBOL_VAR_TARGET_FETCH_POLICY = 49, /* VAR_TARGET_FETCH_POLICY */ + YYSYMBOL_VAR_HARDEN_SHORT_BUFSIZE = 50, /* VAR_HARDEN_SHORT_BUFSIZE */ + YYSYMBOL_VAR_HARDEN_LARGE_QUERIES = 51, /* VAR_HARDEN_LARGE_QUERIES */ + YYSYMBOL_VAR_FORWARD_ZONE = 52, /* VAR_FORWARD_ZONE */ + YYSYMBOL_VAR_FORWARD_HOST = 53, /* VAR_FORWARD_HOST */ + YYSYMBOL_VAR_FORWARD_ADDR = 54, /* VAR_FORWARD_ADDR */ + YYSYMBOL_VAR_DO_NOT_QUERY_ADDRESS = 55, /* VAR_DO_NOT_QUERY_ADDRESS */ + YYSYMBOL_VAR_HIDE_IDENTITY = 56, /* VAR_HIDE_IDENTITY */ + YYSYMBOL_VAR_HIDE_VERSION = 57, /* VAR_HIDE_VERSION */ + YYSYMBOL_VAR_IDENTITY = 58, /* VAR_IDENTITY */ + YYSYMBOL_VAR_VERSION = 59, /* VAR_VERSION */ + YYSYMBOL_VAR_HARDEN_GLUE = 60, /* VAR_HARDEN_GLUE */ + YYSYMBOL_VAR_MODULE_CONF = 61, /* VAR_MODULE_CONF */ + YYSYMBOL_VAR_TRUST_ANCHOR_FILE = 62, /* VAR_TRUST_ANCHOR_FILE */ + YYSYMBOL_VAR_TRUST_ANCHOR = 63, /* VAR_TRUST_ANCHOR */ + YYSYMBOL_VAR_VAL_OVERRIDE_DATE = 64, /* VAR_VAL_OVERRIDE_DATE */ + YYSYMBOL_VAR_BOGUS_TTL = 65, /* VAR_BOGUS_TTL */ + YYSYMBOL_VAR_VAL_CLEAN_ADDITIONAL = 66, /* VAR_VAL_CLEAN_ADDITIONAL */ + YYSYMBOL_VAR_VAL_PERMISSIVE_MODE = 67, /* VAR_VAL_PERMISSIVE_MODE */ + YYSYMBOL_VAR_INCOMING_NUM_TCP = 68, /* VAR_INCOMING_NUM_TCP */ + YYSYMBOL_VAR_MSG_BUFFER_SIZE = 69, /* VAR_MSG_BUFFER_SIZE */ + YYSYMBOL_VAR_KEY_CACHE_SIZE = 70, /* VAR_KEY_CACHE_SIZE */ + YYSYMBOL_VAR_KEY_CACHE_SLABS = 71, /* VAR_KEY_CACHE_SLABS */ + YYSYMBOL_VAR_TRUSTED_KEYS_FILE = 72, /* VAR_TRUSTED_KEYS_FILE */ + YYSYMBOL_VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 73, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ + YYSYMBOL_VAR_USE_SYSLOG = 74, /* VAR_USE_SYSLOG */ + YYSYMBOL_VAR_OUTGOING_INTERFACE = 75, /* VAR_OUTGOING_INTERFACE */ + YYSYMBOL_VAR_ROOT_HINTS = 76, /* VAR_ROOT_HINTS */ + YYSYMBOL_VAR_DO_NOT_QUERY_LOCALHOST = 77, /* VAR_DO_NOT_QUERY_LOCALHOST */ + YYSYMBOL_VAR_CACHE_MAX_TTL = 78, /* VAR_CACHE_MAX_TTL */ + YYSYMBOL_VAR_HARDEN_DNSSEC_STRIPPED = 79, /* VAR_HARDEN_DNSSEC_STRIPPED */ + YYSYMBOL_VAR_ACCESS_CONTROL = 80, /* VAR_ACCESS_CONTROL */ + YYSYMBOL_VAR_LOCAL_ZONE = 81, /* VAR_LOCAL_ZONE */ + YYSYMBOL_VAR_LOCAL_DATA = 82, /* VAR_LOCAL_DATA */ + YYSYMBOL_VAR_INTERFACE_AUTOMATIC = 83, /* VAR_INTERFACE_AUTOMATIC */ + YYSYMBOL_VAR_STATISTICS_INTERVAL = 84, /* VAR_STATISTICS_INTERVAL */ + YYSYMBOL_VAR_DO_DAEMONIZE = 85, /* VAR_DO_DAEMONIZE */ + YYSYMBOL_VAR_USE_CAPS_FOR_ID = 86, /* VAR_USE_CAPS_FOR_ID */ + YYSYMBOL_VAR_STATISTICS_CUMULATIVE = 87, /* VAR_STATISTICS_CUMULATIVE */ + YYSYMBOL_VAR_OUTGOING_PORT_PERMIT = 88, /* VAR_OUTGOING_PORT_PERMIT */ + YYSYMBOL_VAR_OUTGOING_PORT_AVOID = 89, /* VAR_OUTGOING_PORT_AVOID */ + YYSYMBOL_VAR_DLV_ANCHOR_FILE = 90, /* VAR_DLV_ANCHOR_FILE */ + YYSYMBOL_VAR_DLV_ANCHOR = 91, /* VAR_DLV_ANCHOR */ + YYSYMBOL_VAR_NEG_CACHE_SIZE = 92, /* VAR_NEG_CACHE_SIZE */ + YYSYMBOL_VAR_HARDEN_REFERRAL_PATH = 93, /* VAR_HARDEN_REFERRAL_PATH */ + YYSYMBOL_VAR_PRIVATE_ADDRESS = 94, /* VAR_PRIVATE_ADDRESS */ + YYSYMBOL_VAR_PRIVATE_DOMAIN = 95, /* VAR_PRIVATE_DOMAIN */ + YYSYMBOL_VAR_REMOTE_CONTROL = 96, /* VAR_REMOTE_CONTROL */ + YYSYMBOL_VAR_CONTROL_ENABLE = 97, /* VAR_CONTROL_ENABLE */ + YYSYMBOL_VAR_CONTROL_INTERFACE = 98, /* VAR_CONTROL_INTERFACE */ + YYSYMBOL_VAR_CONTROL_PORT = 99, /* VAR_CONTROL_PORT */ + YYSYMBOL_VAR_SERVER_KEY_FILE = 100, /* VAR_SERVER_KEY_FILE */ + YYSYMBOL_VAR_SERVER_CERT_FILE = 101, /* VAR_SERVER_CERT_FILE */ + YYSYMBOL_VAR_CONTROL_KEY_FILE = 102, /* VAR_CONTROL_KEY_FILE */ + YYSYMBOL_VAR_CONTROL_CERT_FILE = 103, /* VAR_CONTROL_CERT_FILE */ + YYSYMBOL_VAR_CONTROL_USE_CERT = 104, /* VAR_CONTROL_USE_CERT */ + YYSYMBOL_VAR_EXTENDED_STATISTICS = 105, /* VAR_EXTENDED_STATISTICS */ + YYSYMBOL_VAR_LOCAL_DATA_PTR = 106, /* VAR_LOCAL_DATA_PTR */ + YYSYMBOL_VAR_JOSTLE_TIMEOUT = 107, /* VAR_JOSTLE_TIMEOUT */ + YYSYMBOL_VAR_STUB_PRIME = 108, /* VAR_STUB_PRIME */ + YYSYMBOL_VAR_UNWANTED_REPLY_THRESHOLD = 109, /* VAR_UNWANTED_REPLY_THRESHOLD */ + YYSYMBOL_VAR_LOG_TIME_ASCII = 110, /* VAR_LOG_TIME_ASCII */ + YYSYMBOL_VAR_DOMAIN_INSECURE = 111, /* VAR_DOMAIN_INSECURE */ + YYSYMBOL_VAR_PYTHON = 112, /* VAR_PYTHON */ + YYSYMBOL_VAR_PYTHON_SCRIPT = 113, /* VAR_PYTHON_SCRIPT */ + YYSYMBOL_VAR_VAL_SIG_SKEW_MIN = 114, /* VAR_VAL_SIG_SKEW_MIN */ + YYSYMBOL_VAR_VAL_SIG_SKEW_MAX = 115, /* VAR_VAL_SIG_SKEW_MAX */ + YYSYMBOL_VAR_CACHE_MIN_TTL = 116, /* VAR_CACHE_MIN_TTL */ + YYSYMBOL_VAR_VAL_LOG_LEVEL = 117, /* VAR_VAL_LOG_LEVEL */ + YYSYMBOL_VAR_AUTO_TRUST_ANCHOR_FILE = 118, /* VAR_AUTO_TRUST_ANCHOR_FILE */ + YYSYMBOL_VAR_KEEP_MISSING = 119, /* VAR_KEEP_MISSING */ + YYSYMBOL_VAR_ADD_HOLDDOWN = 120, /* VAR_ADD_HOLDDOWN */ + YYSYMBOL_VAR_DEL_HOLDDOWN = 121, /* VAR_DEL_HOLDDOWN */ + YYSYMBOL_VAR_SO_RCVBUF = 122, /* VAR_SO_RCVBUF */ + YYSYMBOL_VAR_EDNS_BUFFER_SIZE = 123, /* VAR_EDNS_BUFFER_SIZE */ + YYSYMBOL_VAR_PREFETCH = 124, /* VAR_PREFETCH */ + YYSYMBOL_VAR_PREFETCH_KEY = 125, /* VAR_PREFETCH_KEY */ + YYSYMBOL_VAR_SO_SNDBUF = 126, /* VAR_SO_SNDBUF */ + YYSYMBOL_VAR_SO_REUSEPORT = 127, /* VAR_SO_REUSEPORT */ + YYSYMBOL_VAR_HARDEN_BELOW_NXDOMAIN = 128, /* VAR_HARDEN_BELOW_NXDOMAIN */ + YYSYMBOL_VAR_IGNORE_CD_FLAG = 129, /* VAR_IGNORE_CD_FLAG */ + YYSYMBOL_VAR_LOG_QUERIES = 130, /* VAR_LOG_QUERIES */ + YYSYMBOL_VAR_LOG_REPLIES = 131, /* VAR_LOG_REPLIES */ + YYSYMBOL_VAR_LOG_LOCAL_ACTIONS = 132, /* VAR_LOG_LOCAL_ACTIONS */ + YYSYMBOL_VAR_TCP_UPSTREAM = 133, /* VAR_TCP_UPSTREAM */ + YYSYMBOL_VAR_SSL_UPSTREAM = 134, /* VAR_SSL_UPSTREAM */ + YYSYMBOL_VAR_SSL_SERVICE_KEY = 135, /* VAR_SSL_SERVICE_KEY */ + YYSYMBOL_VAR_SSL_SERVICE_PEM = 136, /* VAR_SSL_SERVICE_PEM */ + YYSYMBOL_VAR_SSL_PORT = 137, /* VAR_SSL_PORT */ + YYSYMBOL_VAR_FORWARD_FIRST = 138, /* VAR_FORWARD_FIRST */ + YYSYMBOL_VAR_STUB_SSL_UPSTREAM = 139, /* VAR_STUB_SSL_UPSTREAM */ + YYSYMBOL_VAR_FORWARD_SSL_UPSTREAM = 140, /* VAR_FORWARD_SSL_UPSTREAM */ + YYSYMBOL_VAR_TLS_CERT_BUNDLE = 141, /* VAR_TLS_CERT_BUNDLE */ + YYSYMBOL_VAR_HTTPS_PORT = 142, /* VAR_HTTPS_PORT */ + YYSYMBOL_VAR_HTTP_ENDPOINT = 143, /* VAR_HTTP_ENDPOINT */ + YYSYMBOL_VAR_HTTP_MAX_STREAMS = 144, /* VAR_HTTP_MAX_STREAMS */ + YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 145, /* VAR_HTTP_QUERY_BUFFER_SIZE */ + YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 146, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ + YYSYMBOL_VAR_HTTP_NODELAY = 147, /* VAR_HTTP_NODELAY */ + YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 148, /* VAR_HTTP_NOTLS_DOWNSTREAM */ + YYSYMBOL_VAR_STUB_FIRST = 149, /* VAR_STUB_FIRST */ + YYSYMBOL_VAR_MINIMAL_RESPONSES = 150, /* VAR_MINIMAL_RESPONSES */ + YYSYMBOL_VAR_RRSET_ROUNDROBIN = 151, /* VAR_RRSET_ROUNDROBIN */ + YYSYMBOL_VAR_MAX_UDP_SIZE = 152, /* VAR_MAX_UDP_SIZE */ + YYSYMBOL_VAR_DELAY_CLOSE = 153, /* VAR_DELAY_CLOSE */ + YYSYMBOL_VAR_UDP_CONNECT = 154, /* VAR_UDP_CONNECT */ + YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 155, /* VAR_UNBLOCK_LAN_ZONES */ + YYSYMBOL_VAR_INSECURE_LAN_ZONES = 156, /* VAR_INSECURE_LAN_ZONES */ + YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 157, /* VAR_INFRA_CACHE_MIN_RTT */ + YYSYMBOL_VAR_INFRA_KEEP_PROBING = 158, /* VAR_INFRA_KEEP_PROBING */ + YYSYMBOL_VAR_DNS64_PREFIX = 159, /* VAR_DNS64_PREFIX */ + YYSYMBOL_VAR_DNS64_SYNTHALL = 160, /* VAR_DNS64_SYNTHALL */ + YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 161, /* VAR_DNS64_IGNORE_AAAA */ + YYSYMBOL_VAR_DNSTAP = 162, /* VAR_DNSTAP */ + YYSYMBOL_VAR_DNSTAP_ENABLE = 163, /* VAR_DNSTAP_ENABLE */ + YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 164, /* VAR_DNSTAP_SOCKET_PATH */ + YYSYMBOL_VAR_DNSTAP_IP = 165, /* VAR_DNSTAP_IP */ + YYSYMBOL_VAR_DNSTAP_TLS = 166, /* VAR_DNSTAP_TLS */ + YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 167, /* VAR_DNSTAP_TLS_SERVER_NAME */ + YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 168, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ + YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 169, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ + YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 170, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ + YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 171, /* VAR_DNSTAP_SEND_IDENTITY */ + YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 172, /* VAR_DNSTAP_SEND_VERSION */ + YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 173, /* VAR_DNSTAP_BIDIRECTIONAL */ + YYSYMBOL_VAR_DNSTAP_IDENTITY = 174, /* VAR_DNSTAP_IDENTITY */ + YYSYMBOL_VAR_DNSTAP_VERSION = 175, /* VAR_DNSTAP_VERSION */ + YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 176, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 177, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 178, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 179, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 180, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 181, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ + YYSYMBOL_VAR_RESPONSE_IP_TAG = 182, /* VAR_RESPONSE_IP_TAG */ + YYSYMBOL_VAR_RESPONSE_IP = 183, /* VAR_RESPONSE_IP */ + YYSYMBOL_VAR_RESPONSE_IP_DATA = 184, /* VAR_RESPONSE_IP_DATA */ + YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 185, /* VAR_HARDEN_ALGO_DOWNGRADE */ + YYSYMBOL_VAR_IP_TRANSPARENT = 186, /* VAR_IP_TRANSPARENT */ + YYSYMBOL_VAR_IP_DSCP = 187, /* VAR_IP_DSCP */ + YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 188, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ + YYSYMBOL_VAR_IP_RATELIMIT = 189, /* VAR_IP_RATELIMIT */ + YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 190, /* VAR_IP_RATELIMIT_SLABS */ + YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 191, /* VAR_IP_RATELIMIT_SIZE */ + YYSYMBOL_VAR_RATELIMIT = 192, /* VAR_RATELIMIT */ + YYSYMBOL_VAR_RATELIMIT_SLABS = 193, /* VAR_RATELIMIT_SLABS */ + YYSYMBOL_VAR_RATELIMIT_SIZE = 194, /* VAR_RATELIMIT_SIZE */ + YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 195, /* VAR_RATELIMIT_FOR_DOMAIN */ + YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 196, /* VAR_RATELIMIT_BELOW_DOMAIN */ + YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 197, /* VAR_IP_RATELIMIT_FACTOR */ + YYSYMBOL_VAR_RATELIMIT_FACTOR = 198, /* VAR_RATELIMIT_FACTOR */ + YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 199, /* VAR_SEND_CLIENT_SUBNET */ + YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 200, /* VAR_CLIENT_SUBNET_ZONE */ + YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 201, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 202, /* VAR_CLIENT_SUBNET_OPCODE */ + YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 203, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 204, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 205, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 206, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 207, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 208, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + YYSYMBOL_VAR_CAPS_WHITELIST = 209, /* VAR_CAPS_WHITELIST */ + YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 210, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 211, /* VAR_PERMIT_SMALL_HOLDDOWN */ + YYSYMBOL_VAR_QNAME_MINIMISATION = 212, /* VAR_QNAME_MINIMISATION */ + YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 213, /* VAR_QNAME_MINIMISATION_STRICT */ + YYSYMBOL_VAR_IP_FREEBIND = 214, /* VAR_IP_FREEBIND */ + YYSYMBOL_VAR_DEFINE_TAG = 215, /* VAR_DEFINE_TAG */ + YYSYMBOL_VAR_LOCAL_ZONE_TAG = 216, /* VAR_LOCAL_ZONE_TAG */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 217, /* VAR_ACCESS_CONTROL_TAG */ + YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 218, /* VAR_LOCAL_ZONE_OVERRIDE */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 219, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 220, /* VAR_ACCESS_CONTROL_TAG_DATA */ + YYSYMBOL_VAR_VIEW = 221, /* VAR_VIEW */ + YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 222, /* VAR_ACCESS_CONTROL_VIEW */ + YYSYMBOL_VAR_VIEW_FIRST = 223, /* VAR_VIEW_FIRST */ + YYSYMBOL_VAR_SERVE_EXPIRED = 224, /* VAR_SERVE_EXPIRED */ + YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 225, /* VAR_SERVE_EXPIRED_TTL */ + YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 226, /* VAR_SERVE_EXPIRED_TTL_RESET */ + YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 227, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 228, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 229, /* VAR_SERVE_ORIGINAL_TTL */ + YYSYMBOL_VAR_FAKE_DSA = 230, /* VAR_FAKE_DSA */ + YYSYMBOL_VAR_FAKE_SHA1 = 231, /* VAR_FAKE_SHA1 */ + YYSYMBOL_VAR_LOG_IDENTITY = 232, /* VAR_LOG_IDENTITY */ + YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 233, /* VAR_HIDE_TRUSTANCHOR */ + YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 234, /* VAR_TRUST_ANCHOR_SIGNALING */ + YYSYMBOL_VAR_AGGRESSIVE_NSEC = 235, /* VAR_AGGRESSIVE_NSEC */ + YYSYMBOL_VAR_USE_SYSTEMD = 236, /* VAR_USE_SYSTEMD */ + YYSYMBOL_VAR_SHM_ENABLE = 237, /* VAR_SHM_ENABLE */ + YYSYMBOL_VAR_SHM_KEY = 238, /* VAR_SHM_KEY */ + YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 239, /* VAR_ROOT_KEY_SENTINEL */ + YYSYMBOL_VAR_DNSCRYPT = 240, /* VAR_DNSCRYPT */ + YYSYMBOL_VAR_DNSCRYPT_ENABLE = 241, /* VAR_DNSCRYPT_ENABLE */ + YYSYMBOL_VAR_DNSCRYPT_PORT = 242, /* VAR_DNSCRYPT_PORT */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 243, /* VAR_DNSCRYPT_PROVIDER */ + YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 244, /* VAR_DNSCRYPT_SECRET_KEY */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 245, /* VAR_DNSCRYPT_PROVIDER_CERT */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 246, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 247, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 248, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 249, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 250, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + YYSYMBOL_VAR_PAD_RESPONSES = 251, /* VAR_PAD_RESPONSES */ + YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 252, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ + YYSYMBOL_VAR_PAD_QUERIES = 253, /* VAR_PAD_QUERIES */ + YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 254, /* VAR_PAD_QUERIES_BLOCK_SIZE */ + YYSYMBOL_VAR_IPSECMOD_ENABLED = 255, /* VAR_IPSECMOD_ENABLED */ + YYSYMBOL_VAR_IPSECMOD_HOOK = 256, /* VAR_IPSECMOD_HOOK */ + YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 257, /* VAR_IPSECMOD_IGNORE_BOGUS */ + YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 258, /* VAR_IPSECMOD_MAX_TTL */ + YYSYMBOL_VAR_IPSECMOD_WHITELIST = 259, /* VAR_IPSECMOD_WHITELIST */ + YYSYMBOL_VAR_IPSECMOD_STRICT = 260, /* VAR_IPSECMOD_STRICT */ + YYSYMBOL_VAR_CACHEDB = 261, /* VAR_CACHEDB */ + YYSYMBOL_VAR_CACHEDB_BACKEND = 262, /* VAR_CACHEDB_BACKEND */ + YYSYMBOL_VAR_CACHEDB_SECRETSEED = 263, /* VAR_CACHEDB_SECRETSEED */ + YYSYMBOL_VAR_CACHEDB_REDISHOST = 264, /* VAR_CACHEDB_REDISHOST */ + YYSYMBOL_VAR_CACHEDB_REDISPORT = 265, /* VAR_CACHEDB_REDISPORT */ + YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 266, /* VAR_CACHEDB_REDISTIMEOUT */ + YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 267, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 268, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + YYSYMBOL_VAR_FOR_UPSTREAM = 269, /* VAR_FOR_UPSTREAM */ + YYSYMBOL_VAR_AUTH_ZONE = 270, /* VAR_AUTH_ZONE */ + YYSYMBOL_VAR_ZONEFILE = 271, /* VAR_ZONEFILE */ + YYSYMBOL_VAR_MASTER = 272, /* VAR_MASTER */ + YYSYMBOL_VAR_URL = 273, /* VAR_URL */ + YYSYMBOL_VAR_FOR_DOWNSTREAM = 274, /* VAR_FOR_DOWNSTREAM */ + YYSYMBOL_VAR_FALLBACK_ENABLED = 275, /* VAR_FALLBACK_ENABLED */ + YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 276, /* VAR_TLS_ADDITIONAL_PORT */ + YYSYMBOL_VAR_LOW_RTT = 277, /* VAR_LOW_RTT */ + YYSYMBOL_VAR_LOW_RTT_PERMIL = 278, /* VAR_LOW_RTT_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_PERMIL = 279, /* VAR_FAST_SERVER_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_NUM = 280, /* VAR_FAST_SERVER_NUM */ + YYSYMBOL_VAR_ALLOW_NOTIFY = 281, /* VAR_ALLOW_NOTIFY */ + YYSYMBOL_VAR_TLS_WIN_CERT = 282, /* VAR_TLS_WIN_CERT */ + YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 283, /* VAR_TCP_CONNECTION_LIMIT */ + YYSYMBOL_VAR_FORWARD_NO_CACHE = 284, /* VAR_FORWARD_NO_CACHE */ + YYSYMBOL_VAR_STUB_NO_CACHE = 285, /* VAR_STUB_NO_CACHE */ + YYSYMBOL_VAR_LOG_SERVFAIL = 286, /* VAR_LOG_SERVFAIL */ + YYSYMBOL_VAR_DENY_ANY = 287, /* VAR_DENY_ANY */ + YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 288, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 289, /* VAR_LOG_TAG_QUERYREPLY */ + YYSYMBOL_VAR_STREAM_WAIT_SIZE = 290, /* VAR_STREAM_WAIT_SIZE */ + YYSYMBOL_VAR_TLS_CIPHERS = 291, /* VAR_TLS_CIPHERS */ + YYSYMBOL_VAR_TLS_CIPHERSUITES = 292, /* VAR_TLS_CIPHERSUITES */ + YYSYMBOL_VAR_TLS_USE_SNI = 293, /* VAR_TLS_USE_SNI */ + YYSYMBOL_VAR_IPSET = 294, /* VAR_IPSET */ + YYSYMBOL_VAR_IPSET_NAME_V4 = 295, /* VAR_IPSET_NAME_V4 */ + YYSYMBOL_VAR_IPSET_NAME_V6 = 296, /* VAR_IPSET_NAME_V6 */ + YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 297, /* VAR_TLS_SESSION_TICKET_KEYS */ + YYSYMBOL_VAR_RPZ = 298, /* VAR_RPZ */ + YYSYMBOL_VAR_TAGS = 299, /* VAR_TAGS */ + YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 300, /* VAR_RPZ_ACTION_OVERRIDE */ + YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 301, /* VAR_RPZ_CNAME_OVERRIDE */ + YYSYMBOL_VAR_RPZ_LOG = 302, /* VAR_RPZ_LOG */ + YYSYMBOL_VAR_RPZ_LOG_NAME = 303, /* VAR_RPZ_LOG_NAME */ + YYSYMBOL_VAR_DYNLIB = 304, /* VAR_DYNLIB */ + YYSYMBOL_VAR_DYNLIB_FILE = 305, /* VAR_DYNLIB_FILE */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING = 306, /* VAR_EDNS_CLIENT_STRING */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 307, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + YYSYMBOL_VAR_NSID = 308, /* VAR_NSID */ + YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 309, /* VAR_ZONEMD_PERMISSIVE_MODE */ + YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 310, /* VAR_ZONEMD_REJECT_ABSENCE */ + YYSYMBOL_YYACCEPT = 311, /* $accept */ + YYSYMBOL_toplevelvars = 312, /* toplevelvars */ + YYSYMBOL_toplevelvar = 313, /* toplevelvar */ + YYSYMBOL_force_toplevel = 314, /* force_toplevel */ + YYSYMBOL_serverstart = 315, /* serverstart */ + YYSYMBOL_contents_server = 316, /* contents_server */ + YYSYMBOL_content_server = 317, /* content_server */ + YYSYMBOL_stubstart = 318, /* stubstart */ + YYSYMBOL_contents_stub = 319, /* contents_stub */ + YYSYMBOL_content_stub = 320, /* content_stub */ + YYSYMBOL_forwardstart = 321, /* forwardstart */ + YYSYMBOL_contents_forward = 322, /* contents_forward */ + YYSYMBOL_content_forward = 323, /* content_forward */ + YYSYMBOL_viewstart = 324, /* viewstart */ + YYSYMBOL_contents_view = 325, /* contents_view */ + YYSYMBOL_content_view = 326, /* content_view */ + YYSYMBOL_authstart = 327, /* authstart */ + YYSYMBOL_contents_auth = 328, /* contents_auth */ + YYSYMBOL_content_auth = 329, /* content_auth */ + YYSYMBOL_rpz_tag = 330, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 331, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 332, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 333, /* rpz_log */ + YYSYMBOL_rpz_log_name = 334, /* rpz_log_name */ + YYSYMBOL_rpzstart = 335, /* rpzstart */ + YYSYMBOL_contents_rpz = 336, /* contents_rpz */ + YYSYMBOL_content_rpz = 337, /* content_rpz */ + YYSYMBOL_server_num_threads = 338, /* server_num_threads */ + YYSYMBOL_server_verbosity = 339, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 340, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 341, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 342, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 343, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 344, /* server_shm_key */ + YYSYMBOL_server_port = 345, /* server_port */ + YYSYMBOL_server_send_client_subnet = 346, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 347, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 348, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 349, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 350, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 351, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 352, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 353, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 354, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 355, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 356, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 357, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 358, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 359, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 360, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 361, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 362, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 363, /* server_interface_automatic */ + YYSYMBOL_server_do_ip4 = 364, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 365, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 366, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 367, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 368, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 369, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 370, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 371, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 372, /* server_tcp_idle_timeout */ + YYSYMBOL_server_tcp_keepalive = 373, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 374, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 375, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 376, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 377, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 378, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 379, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 380, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 381, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 382, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 383, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 384, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 385, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 386, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 387, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 388, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 389, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 390, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 391, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 392, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 393, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 394, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 395, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 396, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 397, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 398, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 399, /* server_log_queries */ + YYSYMBOL_server_log_replies = 400, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 401, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 402, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 403, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 404, /* server_chroot */ + YYSYMBOL_server_username = 405, /* server_username */ + YYSYMBOL_server_directory = 406, /* server_directory */ + YYSYMBOL_server_logfile = 407, /* server_logfile */ + YYSYMBOL_server_pidfile = 408, /* server_pidfile */ + YYSYMBOL_server_root_hints = 409, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 410, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 411, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 412, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 413, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 414, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 415, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 416, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 417, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 418, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 419, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 420, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 421, /* server_hide_trustanchor */ + YYSYMBOL_server_identity = 422, /* server_identity */ + YYSYMBOL_server_version = 423, /* server_version */ + YYSYMBOL_server_nsid = 424, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 425, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 426, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 427, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 428, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 429, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 430, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 431, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 432, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 433, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 434, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 435, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 436, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 437, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 438, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 439, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 440, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 441, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 442, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 443, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 444, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 445, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 446, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 447, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 448, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 449, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_keep_probing = 450, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 451, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 452, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 453, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 454, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 455, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 456, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 457, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 458, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 459, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 460, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 461, /* server_private_address */ + YYSYMBOL_server_private_domain = 462, /* server_private_domain */ + YYSYMBOL_server_prefetch = 463, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 464, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 465, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 466, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 467, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 468, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 469, /* server_access_control */ + YYSYMBOL_server_module_conf = 470, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 471, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 472, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 473, /* server_val_sig_skew_max */ + YYSYMBOL_server_cache_max_ttl = 474, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 475, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 476, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 477, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 478, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 479, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 480, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 481, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 482, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 483, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 484, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 485, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 486, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_serve_original_ttl = 487, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 488, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 489, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 490, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 491, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 492, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 493, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 494, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 495, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 496, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 497, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 498, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 499, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 500, /* server_local_zone */ + YYSYMBOL_server_local_data = 501, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 502, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 503, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 504, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 505, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 506, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 507, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 508, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 509, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 510, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 511, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 512, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 513, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 514, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 515, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 516, /* server_access_control_view */ + YYSYMBOL_server_response_ip_tag = 517, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 518, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 519, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 520, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 521, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 522, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 523, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 524, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 525, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 526, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 527, /* server_ratelimit_factor */ + YYSYMBOL_server_low_rtt = 528, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 529, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 530, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 531, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 532, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 533, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 534, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 535, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 536, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 537, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 538, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 539, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 540, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 541, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 542, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 543, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 544, /* server_edns_client_string_opcode */ + YYSYMBOL_stub_name = 545, /* stub_name */ + YYSYMBOL_stub_host = 546, /* stub_host */ + YYSYMBOL_stub_addr = 547, /* stub_addr */ + YYSYMBOL_stub_first = 548, /* stub_first */ + YYSYMBOL_stub_no_cache = 549, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 550, /* stub_ssl_upstream */ + YYSYMBOL_stub_prime = 551, /* stub_prime */ + YYSYMBOL_forward_name = 552, /* forward_name */ + YYSYMBOL_forward_host = 553, /* forward_host */ + YYSYMBOL_forward_addr = 554, /* forward_addr */ + YYSYMBOL_forward_first = 555, /* forward_first */ + YYSYMBOL_forward_no_cache = 556, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 557, /* forward_ssl_upstream */ + YYSYMBOL_auth_name = 558, /* auth_name */ + YYSYMBOL_auth_zonefile = 559, /* auth_zonefile */ + YYSYMBOL_auth_master = 560, /* auth_master */ + YYSYMBOL_auth_url = 561, /* auth_url */ + YYSYMBOL_auth_allow_notify = 562, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_reject_absence = 563, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 564, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 565, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 566, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 567, /* view_name */ + YYSYMBOL_view_local_zone = 568, /* view_local_zone */ + YYSYMBOL_view_response_ip = 569, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 570, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 571, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 572, /* view_local_data_ptr */ + YYSYMBOL_view_first = 573, /* view_first */ + YYSYMBOL_rcstart = 574, /* rcstart */ + YYSYMBOL_contents_rc = 575, /* contents_rc */ + YYSYMBOL_content_rc = 576, /* content_rc */ + YYSYMBOL_rc_control_enable = 577, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 578, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 579, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 580, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 581, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 582, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 583, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 584, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 585, /* dtstart */ + YYSYMBOL_contents_dt = 586, /* contents_dt */ + YYSYMBOL_content_dt = 587, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 588, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 589, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 590, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 591, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 592, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 593, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 594, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 595, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 596, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 597, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 598, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 599, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 600, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 601, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 602, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 603, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 604, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 605, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 606, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 607, /* pythonstart */ + YYSYMBOL_contents_py = 608, /* contents_py */ + YYSYMBOL_content_py = 609, /* content_py */ + YYSYMBOL_py_script = 610, /* py_script */ + YYSYMBOL_dynlibstart = 611, /* dynlibstart */ + YYSYMBOL_contents_dl = 612, /* contents_dl */ + YYSYMBOL_content_dl = 613, /* content_dl */ + YYSYMBOL_dl_file = 614, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 615, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 616, /* server_log_identity */ + YYSYMBOL_server_response_ip = 617, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 618, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 619, /* dnscstart */ + YYSYMBOL_contents_dnsc = 620, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 621, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 622, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 623, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 624, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 625, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 626, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 627, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 628, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 629, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 630, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 631, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 632, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 633, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 634, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 635, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 636, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 637, /* redis_server_host */ + YYSYMBOL_redis_server_port = 638, /* redis_server_port */ + YYSYMBOL_redis_timeout = 639, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 640, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 641, /* server_tcp_connection_limit */ + YYSYMBOL_ipsetstart = 642, /* ipsetstart */ + YYSYMBOL_contents_ipset = 643, /* contents_ipset */ + YYSYMBOL_content_ipset = 644, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 645, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 646 /* ipset_name_v6 */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + @@ -769,36 +1447,83 @@ int yyparse (void); # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -806,7 +1531,20 @@ typedef short yytype_int16; # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -820,22 +1558,21 @@ typedef short yytype_int16; # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif #endif /* Suppress unused-variable warnings by "using" E. */ @@ -847,11 +1584,11 @@ typedef short yytype_int16; #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -864,10 +1601,22 @@ typedef short yytype_int16; # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + #define YY_ASSERT(E) ((void) (0 && (E))) -#if ! defined yyoverflow || YYERROR_VERBOSE +#if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -932,8 +1681,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - +#endif /* !defined yyoverflow */ #if (! defined yyoverflow \ && (! defined __cplusplus \ @@ -942,17 +1690,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -965,11 +1713,11 @@ union yyalloc # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -981,12 +1729,12 @@ union yyalloc # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -998,28 +1746,30 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 642 +#define YYLAST 657 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 304 +#define YYNTOKENS 311 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 329 +#define YYNNTS 336 /* YYNRULES -- Number of rules. */ -#define YYNRULES 634 +#define YYNRULES 648 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 942 +#define YYNSTATES 963 + +#define YYMAXUTOK 565 -#define YYUNDEFTOK 2 -#define YYMAXUTOK 558 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ -static const yytype_uint16 yytranslate[] = +static const yytype_int16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1076,90 +1826,99 @@ static const yytype_uint16 yytranslate[] = 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 + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { - 0, 185, 185, 185, 186, 186, 187, 187, 188, 188, - 188, 189, 189, 190, 190, 191, 191, 192, 194, 200, - 205, 206, 207, 207, 207, 208, 208, 209, 209, 209, - 210, 210, 211, 211, 211, 212, 212, 213, 213, 213, - 214, 214, 214, 215, 215, 216, 216, 217, 217, 218, - 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, - 223, 223, 224, 224, 224, 225, 225, 225, 226, 226, - 227, 227, 228, 228, 229, 229, 230, 230, 230, 231, - 231, 232, 232, 233, 233, 233, 234, 234, 235, 235, - 236, 236, 237, 237, 237, 238, 238, 239, 239, 240, - 240, 241, 241, 242, 242, 243, 243, 243, 244, 244, - 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, - 248, 248, 248, 249, 250, 250, 250, 251, 251, 251, - 252, 252, 253, 253, 254, 254, 254, 255, 255, 256, - 256, 257, 257, 257, 258, 258, 259, 259, 259, 260, - 260, 261, 261, 262, 262, 263, 264, 264, 265, 265, - 266, 266, 267, 268, 268, 269, 269, 270, 270, 271, - 271, 272, 272, 273, 273, 273, 274, 274, 275, 275, - 276, 276, 277, 277, 278, 278, 279, 279, 280, 280, - 280, 281, 281, 281, 282, 282, 282, 283, 283, 284, - 285, 285, 286, 286, 287, 287, 288, 288, 289, 289, - 289, 290, 290, 290, 291, 291, 291, 292, 292, 293, - 293, 294, 294, 295, 295, 296, 296, 298, 310, 311, - 312, 312, 312, 312, 312, 313, 313, 315, 327, 328, - 329, 329, 329, 329, 330, 330, 332, 346, 347, 348, - 348, 348, 348, 349, 349, 349, 351, 369, 370, 371, - 371, 371, 371, 372, 372, 372, 373, 373, 376, 395, - 412, 420, 430, 438, 455, 456, 457, 457, 457, 457, - 457, 458, 458, 458, 459, 459, 461, 470, 479, 490, - 499, 508, 517, 528, 537, 549, 563, 578, 589, 606, - 623, 640, 657, 672, 687, 700, 715, 724, 733, 742, - 751, 760, 769, 778, 787, 796, 805, 814, 823, 832, - 841, 854, 863, 876, 885, 894, 903, 910, 917, 926, - 933, 942, 950, 957, 964, 972, 981, 989, 1005, 1013, - 1021, 1029, 1037, 1045, 1054, 1063, 1077, 1086, 1095, 1104, - 1113, 1122, 1131, 1138, 1145, 1171, 1179, 1186, 1193, 1200, - 1207, 1215, 1223, 1231, 1238, 1249, 1260, 1267, 1276, 1285, - 1294, 1301, 1308, 1316, 1324, 1334, 1344, 1354, 1368, 1376, - 1389, 1400, 1408, 1421, 1430, 1439, 1448, 1458, 1468, 1476, - 1489, 1498, 1506, 1515, 1523, 1536, 1545, 1555, 1562, 1572, - 1582, 1592, 1602, 1612, 1622, 1632, 1642, 1649, 1656, 1663, - 1672, 1681, 1690, 1699, 1706, 1716, 1736, 1743, 1761, 1774, - 1787, 1796, 1805, 1814, 1823, 1833, 1843, 1854, 1863, 1872, - 1881, 1890, 1899, 1908, 1921, 1934, 1943, 1950, 1959, 1968, - 1977, 1986, 1995, 2003, 2016, 2024, 2065, 2072, 2087, 2097, - 2107, 2114, 2121, 2128, 2137, 2145, 2159, 2180, 2201, 2213, - 2225, 2237, 2246, 2267, 2277, 2286, 2294, 2302, 2315, 2328, - 2343, 2358, 2367, 2376, 2382, 2391, 2400, 2410, 2420, 2433, - 2446, 2458, 2472, 2484, 2498, 2513, 2524, 2534, 2541, 2548, - 2557, 2566, 2576, 2586, 2596, 2603, 2610, 2619, 2628, 2638, - 2648, 2655, 2662, 2669, 2677, 2687, 2697, 2707, 2717, 2727, - 2766, 2776, 2784, 2792, 2807, 2816, 2821, 2822, 2823, 2823, - 2823, 2824, 2824, 2824, 2825, 2825, 2827, 2837, 2846, 2853, - 2860, 2867, 2874, 2881, 2888, 2893, 2894, 2895, 2895, 2895, - 2896, 2896, 2896, 2897, 2898, 2898, 2899, 2899, 2900, 2900, - 2901, 2902, 2903, 2904, 2905, 2906, 2908, 2917, 2927, 2934, - 2941, 2950, 2957, 2964, 2971, 2978, 2987, 2996, 3003, 3010, - 3020, 3030, 3040, 3050, 3060, 3070, 3075, 3076, 3077, 3079, - 3085, 3090, 3091, 3092, 3094, 3100, 3110, 3117, 3126, 3134, - 3139, 3140, 3142, 3142, 3142, 3143, 3143, 3144, 3145, 3146, - 3147, 3148, 3150, 3160, 3169, 3176, 3185, 3192, 3201, 3209, - 3222, 3230, 3243, 3248, 3249, 3250, 3250, 3251, 3251, 3251, - 3252, 3254, 3266, 3278, 3290, 3305, 3318, 3331, 3342, 3347, - 3348, 3349, 3349, 3351, 3366 + 0, 188, 188, 188, 189, 189, 190, 190, 191, 191, + 191, 192, 192, 193, 193, 194, 194, 195, 197, 203, + 208, 209, 210, 210, 210, 211, 211, 212, 212, 212, + 213, 213, 214, 214, 214, 215, 215, 216, 216, 216, + 217, 217, 217, 218, 218, 219, 219, 220, 220, 221, + 221, 222, 222, 223, 223, 224, 224, 225, 225, 226, + 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, + 230, 230, 231, 231, 232, 232, 233, 233, 233, 234, + 234, 235, 235, 236, 236, 236, 237, 237, 238, 238, + 239, 239, 240, 240, 240, 241, 241, 242, 242, 243, + 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, + 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, + 251, 251, 251, 252, 253, 253, 253, 254, 254, 254, + 255, 255, 256, 256, 257, 257, 257, 258, 258, 258, + 259, 259, 260, 260, 260, 261, 261, 262, 262, 262, + 263, 263, 264, 264, 265, 265, 266, 267, 267, 268, + 268, 269, 269, 270, 271, 271, 272, 272, 273, 273, + 274, 274, 275, 275, 276, 276, 276, 277, 277, 278, + 278, 279, 279, 280, 281, 281, 282, 282, 283, 284, + 284, 285, 285, 286, 286, 287, 287, 288, 288, 288, + 289, 289, 289, 290, 290, 291, 292, 292, 293, 293, + 294, 294, 295, 295, 296, 296, 296, 297, 297, 297, + 298, 298, 298, 299, 299, 300, 300, 301, 301, 302, + 302, 303, 303, 304, 306, 318, 319, 320, 320, 320, + 320, 320, 321, 321, 323, 335, 336, 337, 337, 337, + 337, 338, 338, 340, 354, 355, 356, 356, 356, 356, + 357, 357, 357, 359, 377, 378, 379, 379, 379, 379, + 380, 380, 380, 381, 381, 384, 403, 420, 428, 438, + 446, 463, 464, 465, 465, 465, 465, 465, 466, 466, + 466, 467, 467, 469, 478, 487, 498, 507, 516, 525, + 536, 545, 557, 571, 586, 597, 614, 631, 648, 665, + 680, 695, 708, 723, 732, 741, 750, 759, 768, 777, + 786, 795, 804, 813, 822, 831, 840, 849, 862, 871, + 884, 893, 902, 911, 918, 925, 934, 941, 950, 958, + 965, 972, 980, 989, 997, 1013, 1021, 1029, 1037, 1045, + 1053, 1062, 1071, 1085, 1094, 1103, 1112, 1121, 1130, 1139, + 1146, 1153, 1179, 1187, 1194, 1201, 1208, 1215, 1223, 1231, + 1239, 1246, 1257, 1268, 1275, 1284, 1293, 1302, 1309, 1316, + 1332, 1340, 1348, 1358, 1368, 1378, 1392, 1400, 1413, 1424, + 1432, 1445, 1454, 1463, 1472, 1481, 1491, 1501, 1509, 1522, + 1531, 1539, 1548, 1556, 1569, 1578, 1588, 1595, 1605, 1615, + 1625, 1635, 1645, 1655, 1665, 1675, 1682, 1689, 1696, 1705, + 1714, 1723, 1732, 1739, 1749, 1769, 1776, 1794, 1807, 1820, + 1829, 1838, 1847, 1856, 1866, 1876, 1887, 1896, 1905, 1914, + 1923, 1932, 1941, 1950, 1963, 1976, 1985, 1992, 2001, 2010, + 2019, 2028, 2037, 2045, 2058, 2066, 2111, 2118, 2133, 2143, + 2153, 2160, 2167, 2174, 2183, 2191, 2205, 2226, 2247, 2259, + 2271, 2283, 2292, 2313, 2323, 2332, 2340, 2348, 2361, 2374, + 2389, 2404, 2413, 2422, 2428, 2437, 2446, 2456, 2466, 2476, + 2485, 2495, 2504, 2517, 2530, 2542, 2556, 2568, 2582, 2591, + 2603, 2613, 2620, 2627, 2636, 2645, 2655, 2665, 2675, 2682, + 2689, 2698, 2707, 2717, 2727, 2734, 2741, 2748, 2756, 2766, + 2776, 2786, 2796, 2806, 2845, 2855, 2863, 2871, 2886, 2895, + 2900, 2901, 2902, 2902, 2902, 2903, 2903, 2903, 2904, 2904, + 2906, 2916, 2925, 2932, 2939, 2946, 2953, 2960, 2967, 2972, + 2973, 2974, 2974, 2974, 2975, 2975, 2975, 2976, 2977, 2977, + 2978, 2978, 2979, 2979, 2980, 2981, 2982, 2983, 2984, 2985, + 2987, 2996, 3006, 3013, 3020, 3029, 3036, 3043, 3050, 3057, + 3066, 3075, 3082, 3089, 3099, 3109, 3119, 3129, 3139, 3149, + 3154, 3155, 3156, 3158, 3164, 3169, 3170, 3171, 3173, 3179, + 3189, 3196, 3205, 3213, 3218, 3219, 3221, 3221, 3221, 3222, + 3222, 3223, 3224, 3225, 3226, 3227, 3229, 3239, 3248, 3255, + 3264, 3271, 3280, 3288, 3301, 3309, 3322, 3327, 3328, 3329, + 3329, 3330, 3330, 3330, 3331, 3333, 3345, 3357, 3369, 3384, + 3397, 3410, 3421, 3426, 3427, 3428, 3428, 3430, 3445 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT", - "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL", - "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT", - "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4", - "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP", + "\"end of file\"", "error", "\"invalid token\"", "SPACE", "LETTER", + "NEWLINE", "COMMENT", "COLON", "ANY", "ZONESTR", "STRING_ARG", + "VAR_FORCE_TOPLEVEL", "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", + "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", + "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE", "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_CHROOT", "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE", @@ -1205,15 +1964,15 @@ static const char *const yytname[] = "VAR_HTTP_QUERY_BUFFER_SIZE", "VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY", "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", - "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", - "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", - "VAR_DNS64_SYNTHALL", "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", - "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", - "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME", - "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", - "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY", - "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL", - "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", + "VAR_DELAY_CLOSE", "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", + "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", + "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", + "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", + "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS", + "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE", + "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", + "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", + "VAR_DNSTAP_BIDIRECTIONAL", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", @@ -1239,8 +1998,9 @@ static const char *const yytname[] = "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL", "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL", - "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", - "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", + "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_SERVE_ORIGINAL_TTL", + "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY", + "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", @@ -1249,36 +2009,37 @@ static const char *const yytname[] = "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS", - "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", - "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", - "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", - "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT", - "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS", - "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", - "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", - "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT", - "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL", - "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", - "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE", - "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT", - "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", - "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", - "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", - "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", - "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", - "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_TAG", - "VAR_EDNS_CLIENT_TAG_OPCODE", "VAR_ZONEMD_PERMISSIVE_MODE", - "VAR_ZONEMD_REJECT_ABSENCE", "$accept", "toplevelvars", "toplevelvar", - "force_toplevel", "serverstart", "contents_server", "content_server", - "stubstart", "contents_stub", "content_stub", "forwardstart", - "contents_forward", "content_forward", "viewstart", "contents_view", - "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", - "server_verbosity", "server_statistics_interval", - "server_statistics_cumulative", "server_extended_statistics", - "server_shm_enable", "server_shm_key", "server_port", - "server_send_client_subnet", "server_client_subnet_zone", + "VAR_PAD_RESPONSES", "VAR_PAD_RESPONSES_BLOCK_SIZE", "VAR_PAD_QUERIES", + "VAR_PAD_QUERIES_BLOCK_SIZE", "VAR_IPSECMOD_ENABLED", + "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL", + "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB", + "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST", + "VAR_CACHEDB_REDISPORT", "VAR_CACHEDB_REDISTIMEOUT", + "VAR_CACHEDB_REDISEXPIRERECORDS", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", + "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", + "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", + "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", + "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", + "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", + "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", + "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", + "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", + "VAR_TLS_USE_SNI", "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", + "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", + "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", + "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", + "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", + "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_REJECT_ABSENCE", "$accept", + "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "authstart", + "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", + "rpz_cname_override", "rpz_log", "rpz_log_name", "rpzstart", + "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", + "server_statistics_interval", "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", @@ -1310,13 +2071,13 @@ static const char *const yytname[] = "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_identity", "server_version", "server_nsid", "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent", "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size", "server_msg_buffer_size", "server_msg_cache_size", "server_msg_cache_slabs", "server_num_queries_per_thread", "server_jostle_timeout", - "server_delay_close", "server_unblock_lan_zones", + "server_delay_close", "server_udp_connect", "server_unblock_lan_zones", "server_insecure_lan_zones", "server_rrset_cache_size", "server_rrset_cache_slabs", "server_infra_host_ttl", "server_infra_lame_ttl", "server_infra_cache_numhosts", @@ -1339,8 +2100,8 @@ static const char *const yytname[] = "server_aggressive_nsec", "server_ignore_cd_flag", "server_serve_expired", "server_serve_expired_ttl", "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", - "server_serve_expired_client_timeout", "server_fake_dsa", - "server_fake_sha1", "server_val_log_level", + "server_serve_expired_client_timeout", "server_serve_original_ttl", + "server_fake_dsa", "server_fake_sha1", "server_val_log_level", "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode", "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", @@ -1358,15 +2119,17 @@ static const char *const yytname[] = "server_ratelimit_below_domain", "server_ip_ratelimit_factor", "server_ratelimit_factor", "server_low_rtt", "server_fast_server_num", "server_fast_server_permil", "server_qname_minimisation", - "server_qname_minimisation_strict", "server_ipsecmod_enabled", + "server_qname_minimisation_strict", "server_pad_responses", + "server_pad_responses_block_size", "server_pad_queries", + "server_pad_queries_block_size", "server_ipsecmod_enabled", "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist", - "server_ipsecmod_strict", "server_edns_client_tag", - "server_edns_client_tag_opcode", "stub_name", "stub_host", "stub_addr", - "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_prime", - "forward_name", "forward_host", "forward_addr", "forward_first", - "forward_no_cache", "forward_ssl_upstream", "auth_name", "auth_zonefile", - "auth_master", "auth_url", "auth_allow_notify", + "server_ipsecmod_strict", "server_edns_client_string", + "server_edns_client_string_opcode", "stub_name", "stub_host", + "stub_addr", "stub_first", "stub_no_cache", "stub_ssl_upstream", + "stub_prime", "forward_name", "forward_host", "forward_addr", + "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name", + "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify", "auth_zonemd_reject_absence", "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled", "view_name", "view_local_zone", "view_response_ip", "view_response_ip_data", "view_local_data", @@ -1401,12 +2164,18 @@ static const char *const yytname[] = "server_tcp_connection_limit", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} #endif -# ifdef YYPRINT +#ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -1438,130 +2207,133 @@ static const yytype_uint16 yytoknum[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558 + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565 }; -# endif +#endif -#define YYPACT_NINF -290 +#define YYPACT_NINF (-299) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-290))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -1 +#define YYTABLE_NINF (-1) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - -290, 0, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, 286, -42, -36, -43, -44, -26, -67, -95, - -109, -289, -219, -216, -282, 3, 4, 5, 6, 37, + -299, 0, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, 292, -39, -35, -43, -44, -28, -67, -93, + -108, -298, -221, -222, -292, 3, 4, 5, 6, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 54, 55, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 88, 89, 90, 91, - 93, 95, 96, 98, 99, 100, 101, 103, 104, 105, + 49, 50, 51, 52, 54, 55, 56, 57, 58, 79, + 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, + 92, 94, 96, 97, 98, 99, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 131, 132, 133, 134, 135, 136, 137, + 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, + 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 216, - 217, 218, 219, 220, 222, 223, 224, 225, 226, 233, - 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, - 246, 247, 248, 250, 251, 252, 253, 255, 256, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 279, 280, 281, 283, 284, - 285, 287, 321, 322, 323, 324, 328, 329, 330, 372, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, 373, 374, 375, 376, - 377, 378, 379, -290, -290, -290, -290, -290, -290, -290, - -290, 380, 384, 388, 389, 414, 415, -290, -290, -290, - -290, -290, -290, -290, 416, 425, 437, 438, 439, 440, - 441, -290, -290, -290, -290, -290, -290, -290, -290, 442, - 443, 444, 445, 446, 447, 448, 449, 450, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, 451, 452, - 453, 454, 455, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 456, 496, 498, 514, 515, 516, - 517, 518, -290, -290, -290, -290, -290, -290, -290, -290, - -290, 519, 520, 521, 522, 523, 524, 531, 532, 533, - 534, 535, 536, 537, 539, 540, 541, 542, 543, 544, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 545, -290, -290, 548, -290, -290, 551, 554, 555, 564, - 565, 566, 568, 569, 570, 571, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, 572, 573, 574, - 575, 579, 580, -290, -290, -290, -290, -290, -290, -290, - 581, 582, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, 583, 584, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 585, 586, 587, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, 588, 589, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 590, 591, 592, 593, 594, 595, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, 596, -290, -290, - -290, -290, -290, -290, -290, -290, -290, 597, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 598, -290, -290, 599, 600, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 601, 602, 603, -290, -290, -290, -290, -290, -290, -290, - -290, -290 + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 212, 213, 214, 216, 222, 223, 224, 225, 226, + 228, 229, 231, 232, 237, 238, 240, 241, 242, 244, + 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, + 257, 258, 259, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 285, 286, 287, 289, 290, 291, 293, 327, 328, + 329, 330, 334, 335, 336, 378, 379, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + 380, 381, 382, 383, 384, 385, 386, -299, -299, -299, + -299, -299, -299, -299, -299, 390, 394, 395, 420, 421, + 422, -299, -299, -299, -299, -299, -299, -299, 431, 444, + 445, 446, 447, 448, 449, -299, -299, -299, -299, -299, + -299, -299, -299, 450, 451, 452, 453, 454, 455, 456, + 457, 458, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, 459, 460, 461, 462, 463, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 503, 505, + 522, 523, 524, 525, 526, 527, -299, -299, -299, -299, + -299, -299, -299, -299, -299, 528, 529, 530, 531, 532, + 543, 544, 545, 546, 547, 548, 549, 551, 552, 553, + 554, 555, 556, 557, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, 560, -299, -299, 563, -299, -299, + 566, 567, 576, 577, 578, 580, 581, 582, 583, 584, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, 585, 586, 587, 592, 593, 594, -299, -299, -299, + -299, -299, -299, -299, 595, 596, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, 597, + 598, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, 599, 600, 601, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 602, 603, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, 604, + 605, 606, 607, 608, 609, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, 610, -299, -299, + -299, -299, -299, -299, -299, -299, -299, 611, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, 612, -299, -299, 613, 614, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, 615, 616, 617, -299, -299, -299, -299, -299, -299, + -299, -299, -299 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint16 yydefact[] = +static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 227, 237, 515, 575, 534, - 246, 589, 612, 256, 628, 273, 580, 3, 17, 21, - 229, 239, 248, 258, 275, 517, 536, 577, 582, 591, - 614, 630, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 234, 244, 529, 589, 548, + 253, 603, 626, 263, 642, 280, 594, 3, 17, 21, + 236, 246, 255, 265, 282, 531, 550, 591, 596, 605, + 628, 644, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1583,304 +2355,310 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 22, 23, 86, 89, 98, 194, 195, 24, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 37, - 77, 25, 90, 91, 48, 70, 85, 26, 27, 30, - 31, 28, 29, 32, 33, 34, 35, 36, 121, 206, - 122, 124, 125, 126, 208, 213, 209, 220, 221, 222, - 223, 127, 128, 129, 130, 131, 132, 133, 190, 87, - 76, 102, 119, 120, 218, 215, 123, 38, 39, 40, - 41, 42, 78, 92, 93, 108, 64, 74, 65, 198, - 199, 103, 58, 59, 197, 60, 61, 112, 116, 137, - 146, 173, 149, 219, 113, 71, 43, 44, 45, 100, - 138, 139, 140, 46, 47, 49, 50, 52, 53, 51, - 144, 150, 54, 55, 56, 62, 81, 117, 95, 145, - 88, 169, 96, 97, 114, 115, 216, 101, 57, 79, - 82, 63, 66, 104, 105, 80, 170, 106, 67, 68, - 69, 207, 118, 183, 184, 185, 186, 187, 188, 196, - 107, 75, 226, 109, 110, 111, 171, 72, 73, 94, - 83, 84, 99, 134, 135, 217, 136, 141, 142, 143, - 174, 175, 177, 179, 180, 178, 181, 191, 147, 148, - 153, 154, 151, 152, 155, 156, 158, 157, 210, 212, - 211, 172, 182, 200, 202, 201, 203, 204, 205, 224, - 225, 176, 189, 192, 193, 214, 0, 0, 0, 0, - 0, 0, 0, 228, 230, 231, 232, 234, 235, 236, - 233, 0, 0, 0, 0, 0, 0, 238, 240, 241, - 242, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 247, 249, 250, 253, 254, 251, 255, 252, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 257, 259, - 260, 261, 262, 266, 267, 263, 264, 265, 0, 0, - 0, 0, 0, 278, 282, 283, 284, 285, 274, 276, - 277, 279, 280, 281, 0, 0, 0, 0, 0, 0, - 0, 0, 516, 518, 520, 519, 525, 521, 522, 523, - 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 22, 23, + 86, 89, 98, 200, 201, 24, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 37, 77, 25, 90, + 91, 48, 70, 85, 26, 27, 30, 31, 28, 29, + 32, 33, 34, 35, 36, 121, 212, 122, 124, 125, + 126, 214, 219, 215, 226, 227, 228, 229, 127, 128, + 129, 130, 131, 132, 133, 196, 87, 76, 102, 119, + 120, 224, 221, 123, 38, 39, 40, 41, 42, 78, + 92, 93, 108, 64, 74, 65, 204, 205, 103, 58, + 59, 203, 60, 61, 232, 112, 116, 137, 147, 174, + 150, 225, 113, 71, 43, 44, 45, 100, 138, 139, + 140, 141, 46, 47, 49, 50, 52, 53, 51, 145, + 151, 54, 55, 56, 62, 81, 117, 95, 146, 88, + 170, 96, 97, 114, 115, 222, 101, 57, 79, 82, + 63, 66, 104, 105, 80, 171, 106, 67, 68, 69, + 213, 118, 188, 189, 190, 191, 192, 193, 194, 202, + 107, 75, 233, 109, 110, 111, 172, 72, 73, 94, + 83, 84, 99, 134, 135, 223, 136, 142, 143, 144, + 175, 176, 178, 180, 181, 179, 182, 197, 148, 149, + 154, 155, 152, 153, 156, 157, 159, 158, 216, 218, + 217, 173, 183, 184, 185, 186, 187, 206, 208, 207, + 209, 210, 211, 230, 231, 177, 195, 198, 199, 220, + 0, 0, 0, 0, 0, 0, 0, 235, 237, 238, + 239, 241, 242, 243, 240, 0, 0, 0, 0, 0, + 0, 245, 247, 248, 249, 250, 251, 252, 0, 0, + 0, 0, 0, 0, 0, 254, 256, 257, 260, 261, + 258, 262, 259, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 264, 266, 267, 268, 269, 273, 274, 270, + 271, 272, 0, 0, 0, 0, 0, 285, 289, 290, + 291, 292, 281, 283, 284, 286, 287, 288, 0, 0, + 0, 0, 0, 0, 0, 0, 530, 532, 534, 533, + 539, 535, 536, 537, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 535, 537, 539, 538, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 0, 576, 578, 0, 581, 583, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 590, 592, 593, 594, - 596, 597, 595, 598, 599, 600, 601, 0, 0, 0, - 0, 0, 0, 613, 615, 616, 617, 618, 619, 620, - 0, 0, 629, 631, 632, 287, 286, 293, 306, 304, - 316, 312, 313, 317, 314, 315, 318, 319, 320, 321, - 322, 352, 353, 354, 355, 356, 381, 382, 383, 388, - 389, 309, 390, 391, 394, 392, 393, 397, 398, 399, - 413, 367, 368, 370, 371, 400, 416, 361, 363, 417, - 423, 424, 425, 310, 380, 442, 443, 362, 436, 345, - 305, 357, 414, 420, 401, 0, 0, 446, 311, 288, - 344, 405, 289, 307, 308, 358, 359, 444, 403, 407, - 408, 290, 447, 384, 412, 346, 366, 418, 419, 422, - 435, 360, 440, 438, 439, 372, 379, 409, 410, 373, - 374, 402, 427, 347, 348, 351, 323, 325, 326, 327, - 328, 329, 336, 337, 338, 339, 340, 341, 342, 448, - 449, 451, 385, 386, 387, 395, 396, 452, 453, 454, - 0, 0, 0, 404, 375, 377, 585, 463, 467, 465, - 464, 468, 466, 0, 0, 471, 472, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 406, 421, 441, - 476, 477, 376, 455, 0, 0, 0, 0, 0, 0, - 428, 429, 430, 431, 432, 433, 434, 586, 369, 364, - 426, 343, 291, 292, 365, 478, 480, 479, 481, 482, - 483, 324, 331, 473, 475, 474, 330, 0, 350, 411, - 450, 349, 378, 332, 333, 335, 334, 0, 485, 437, - 486, 487, 488, 492, 491, 489, 490, 493, 494, 495, - 496, 498, 497, 508, 0, 512, 513, 0, 0, 514, - 499, 506, 500, 501, 502, 505, 507, 503, 504, 268, - 269, 270, 271, 272, 526, 528, 527, 530, 531, 532, - 533, 529, 556, 558, 559, 560, 561, 562, 563, 564, - 565, 566, 557, 567, 568, 569, 570, 571, 572, 573, - 574, 579, 584, 602, 603, 604, 607, 605, 606, 608, - 609, 610, 611, 621, 622, 623, 624, 625, 626, 633, - 634, 415, 445, 462, 587, 588, 469, 470, 456, 457, - 0, 0, 0, 461, 627, 484, 509, 510, 511, 460, - 458, 459 + 0, 0, 0, 0, 549, 551, 553, 552, 554, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, + 566, 567, 568, 569, 0, 590, 592, 0, 595, 597, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 604, 606, 607, 608, 610, 611, 609, 612, 613, 614, + 615, 0, 0, 0, 0, 0, 0, 627, 629, 630, + 631, 632, 633, 634, 0, 0, 643, 645, 646, 294, + 293, 300, 313, 311, 323, 319, 320, 324, 321, 322, + 325, 326, 327, 328, 329, 359, 360, 361, 362, 363, + 389, 390, 391, 397, 398, 316, 399, 400, 403, 401, + 402, 406, 407, 408, 422, 374, 375, 377, 378, 409, + 425, 368, 370, 426, 432, 433, 434, 317, 388, 452, + 453, 369, 446, 352, 312, 364, 423, 429, 410, 0, + 0, 456, 318, 295, 351, 414, 296, 314, 315, 365, + 366, 454, 412, 416, 417, 297, 457, 392, 421, 353, + 373, 427, 428, 431, 445, 367, 450, 448, 449, 380, + 387, 418, 419, 381, 382, 411, 436, 354, 355, 358, + 330, 332, 333, 334, 335, 336, 343, 344, 345, 346, + 347, 348, 349, 458, 459, 461, 393, 394, 395, 396, + 404, 405, 462, 463, 464, 0, 0, 0, 413, 383, + 385, 599, 473, 477, 475, 474, 478, 476, 0, 0, + 481, 482, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 415, 430, 451, 486, 487, 384, 465, 0, + 0, 0, 0, 0, 0, 437, 438, 439, 440, 441, + 442, 443, 444, 600, 376, 371, 435, 350, 298, 299, + 372, 488, 489, 490, 491, 492, 494, 493, 495, 496, + 497, 331, 338, 483, 485, 484, 337, 0, 357, 420, + 460, 356, 386, 339, 340, 342, 341, 0, 499, 379, + 447, 500, 501, 502, 506, 505, 503, 504, 507, 508, + 509, 510, 512, 511, 522, 0, 526, 527, 0, 0, + 528, 513, 520, 514, 515, 516, 519, 521, 517, 518, + 275, 276, 277, 278, 279, 540, 542, 541, 544, 545, + 546, 547, 543, 570, 572, 573, 574, 575, 576, 577, + 578, 579, 580, 571, 581, 582, 583, 584, 585, 586, + 587, 588, 593, 598, 616, 617, 618, 621, 619, 620, + 622, 623, 624, 625, 635, 636, 637, 638, 639, 640, + 647, 648, 424, 455, 472, 601, 602, 479, 480, 466, + 467, 0, 0, 0, 471, 641, 498, 523, 524, 525, + 470, 468, 469 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 259, 577, 578, 604, 605, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290 + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, 265, 591, 618, + 619, 620, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 32, 250, 20, 33, 463, - 21, 34, 477, 22, 35, 491, 23, 36, 508, 523, - 524, 525, 526, 527, 24, 37, 528, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 464, 465, 466, - 467, 468, 469, 470, 478, 479, 480, 481, 482, 483, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 492, - 493, 494, 495, 496, 497, 498, 25, 38, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 26, 39, 570, - 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, - 581, 582, 583, 584, 585, 586, 587, 588, 589, 27, - 40, 591, 592, 28, 41, 594, 595, 451, 452, 453, - 454, 29, 42, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 30, 43, 623, 624, 625, 626, - 627, 628, 629, 455, 31, 44, 632, 633, 634 + -1, 1, 17, 18, 19, 32, 257, 20, 33, 477, + 21, 34, 491, 22, 35, 505, 23, 36, 522, 537, + 538, 539, 540, 541, 24, 37, 542, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 478, 479, 480, 481, 482, 483, + 484, 492, 493, 494, 495, 496, 497, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 506, 507, 508, 509, + 510, 511, 512, 25, 38, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 26, 39, 584, 585, 586, 587, + 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 27, 40, 605, 606, + 28, 41, 608, 609, 465, 466, 467, 468, 29, 42, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, + 630, 30, 43, 637, 638, 639, 640, 641, 642, 643, + 469, 31, 44, 646, 647, 648 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint16 yytable[] = +static const yytype_int16 yytable[] = { - 2, 499, 484, 456, 590, 457, 458, 630, 631, 471, - 593, 3, 4, 635, 636, 637, 638, 472, 473, 499, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 534, 535, 536, 537, 538, 539, 540, 541, 485, 486, - 617, 618, 619, 620, 621, 622, 5, 639, 640, 641, - 642, 643, 6, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 487, 654, 655, 459, 551, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, - 564, 565, 566, 567, 568, 569, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 7, 460, 666, 667, - 668, 669, 474, 670, 475, 671, 672, 461, 673, 674, - 675, 676, 8, 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, 488, - 489, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, - 722, 9, 723, 724, 725, 726, 727, 728, 729, 730, - 731, 732, 733, 734, 735, 736, 737, 738, 739, 490, - 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, 500, - 10, 501, 502, 503, 504, 505, 779, 780, 781, 782, - 783, 506, 784, 785, 786, 787, 788, 462, 11, 501, - 502, 503, 476, 789, 790, 791, 792, 793, 794, 506, - 795, 796, 797, 798, 799, 12, 800, 801, 802, 507, - 803, 804, 805, 806, 13, 807, 808, 518, 519, 520, - 521, 522, 809, 810, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, 14, 825, - 826, 827, 15, 828, 829, 830, 529, 831, 16, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 832, 833, 834, 835, 77, 78, 79, 836, 837, - 838, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 839, 840, 841, 842, 843, 844, 845, 846, - 847, 121, 122, 123, 848, 124, 125, 126, 849, 850, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 851, 852, 853, 151, 152, 153, - 154, 155, 156, 157, 158, 854, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 855, 856, 857, - 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 875, 209, 876, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 225, 226, 227, 228, 229, - 230, 888, 889, 890, 891, 892, 893, 894, 231, 895, - 896, 897, 898, 899, 900, 901, 232, 233, 902, 234, - 235, 903, 236, 237, 904, 905, 238, 239, 240, 241, - 242, 243, 244, 245, 906, 907, 908, 246, 909, 910, - 911, 912, 913, 914, 915, 916, 247, 248, 249, 917, - 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, - 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, - 938, 939, 940, 941, 530, 531, 0, 0, 0, 0, + 2, 513, 498, 644, 645, 604, 470, 607, 471, 472, + 485, 3, 4, 649, 650, 651, 652, 513, 486, 487, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 548, 549, 550, 551, 552, 553, 554, 555, 499, 500, + 631, 632, 633, 634, 635, 636, 5, 653, 654, 655, + 656, 657, 6, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 501, 668, 669, 670, 671, 672, 473, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 673, + 674, 675, 676, 677, 678, 679, 7, 680, 681, 682, + 474, 683, 684, 488, 685, 489, 686, 687, 688, 689, + 475, 690, 8, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, + 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, + 502, 503, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, + 736, 737, 9, 738, 739, 740, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 504, 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, 10, 795, 796, 797, 514, 798, 515, 516, 517, + 518, 519, 799, 800, 801, 802, 803, 520, 804, 805, + 11, 806, 807, 515, 516, 517, 476, 808, 809, 490, + 810, 811, 812, 520, 813, 814, 815, 816, 817, 818, + 819, 12, 820, 821, 822, 823, 521, 824, 825, 826, + 13, 532, 533, 534, 535, 536, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 14, 845, 846, 847, 15, 848, + 849, 850, 543, 851, 16, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 852, 853, 854, + 855, 77, 78, 79, 856, 857, 858, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 121, 122, 123, + 868, 124, 125, 126, 869, 870, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 871, 872, 873, 151, 152, 153, 154, 155, 156, 157, + 158, 874, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 895, 210, 896, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 908, 909, 910, 911, 912, 913, 914, + 237, 915, 916, 917, 918, 919, 920, 921, 238, 239, + 922, 240, 241, 923, 242, 243, 924, 925, 244, 245, + 246, 247, 248, 249, 250, 251, 926, 927, 928, 252, + 929, 930, 931, 932, 933, 934, 935, 936, 253, 254, + 255, 256, 937, 938, 939, 940, 941, 942, 943, 944, + 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, + 955, 956, 957, 958, 959, 960, 961, 962, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 532, 533 + 0, 0, 0, 0, 0, 545, 546, 547 }; static const yytype_int16 yycheck[] = { - 0, 45, 45, 45, 113, 47, 48, 289, 290, 45, - 299, 11, 12, 10, 10, 10, 10, 53, 54, 45, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 0, 45, 45, 295, 296, 113, 45, 305, 47, 48, + 45, 11, 12, 10, 10, 10, 10, 45, 53, 54, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 97, 98, 99, 100, 101, 102, 103, 104, 81, 82, - 256, 257, 258, 259, 260, 261, 46, 10, 10, 10, + 262, 263, 264, 265, 266, 267, 46, 10, 10, 10, 10, 10, 52, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 106, 10, 10, 108, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 96, 139, 10, 10, - 10, 10, 138, 10, 140, 10, 10, 149, 10, 10, - 10, 10, 112, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 106, 10, 10, 10, 10, 10, 108, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 10, + 10, 10, 10, 10, 10, 10, 96, 10, 10, 10, + 139, 10, 10, 138, 10, 140, 10, 10, 10, 10, + 149, 10, 112, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 182, - 183, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 161, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 222, + 183, 184, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 162, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 223, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 263, - 220, 265, 266, 267, 268, 269, 10, 10, 10, 10, - 10, 275, 10, 10, 10, 10, 10, 279, 238, 265, - 266, 267, 278, 10, 10, 10, 10, 10, 10, 275, - 10, 10, 10, 10, 10, 255, 10, 10, 10, 303, - 10, 10, 10, 10, 264, 10, 10, 293, 294, 295, - 296, 297, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 288, 10, - 10, 10, 292, 10, 10, 10, 37, 10, 298, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 10, 10, 10, 10, 49, 50, 51, 10, 10, - 10, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 105, 106, 107, 10, 109, 110, 111, 10, 10, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 10, 10, 10, 141, 142, 143, - 144, 145, 146, 147, 148, 10, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 10, 10, 10, + 10, 221, 10, 10, 10, 269, 10, 271, 272, 273, + 274, 275, 10, 10, 10, 10, 10, 281, 10, 10, + 240, 10, 10, 271, 272, 273, 285, 10, 10, 284, + 10, 10, 10, 281, 10, 10, 10, 10, 10, 10, + 10, 261, 10, 10, 10, 10, 310, 10, 10, 10, + 270, 299, 300, 301, 302, 303, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 10, 221, 10, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 249, 250, 251, 252, 253, - 254, 10, 10, 10, 10, 10, 10, 10, 262, 10, - 10, 10, 10, 10, 10, 10, 270, 271, 10, 273, - 274, 10, 276, 277, 10, 10, 280, 281, 282, 283, - 284, 285, 286, 287, 10, 10, 10, 291, 10, 10, - 10, 10, 10, 10, 10, 10, 300, 301, 302, 10, + 10, 10, 10, 10, 294, 10, 10, 10, 298, 10, + 10, 10, 37, 10, 304, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 10, 10, 10, + 10, 49, 50, 51, 10, 10, 10, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 105, 106, 107, + 10, 109, 110, 111, 10, 10, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 10, 10, 10, 141, 142, 143, 144, 145, 146, 147, + 148, 10, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 10, 222, 10, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 10, 10, 10, 10, 10, 10, 10, + 268, 10, 10, 10, 10, 10, 10, 10, 276, 277, + 10, 279, 280, 10, 282, 283, 10, 10, 286, 287, + 288, 289, 290, 291, 292, 293, 10, 10, 10, 297, + 10, 10, 10, 10, 10, 10, 10, 10, 306, 307, + 308, 309, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 37, 37, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, 10, 10, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 37 + -1, -1, -1, -1, -1, 37, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = +static const yytype_int16 yystos[] = { - 0, 305, 0, 11, 12, 46, 52, 96, 112, 161, - 220, 238, 255, 264, 288, 292, 298, 306, 307, 308, - 311, 314, 317, 320, 328, 560, 571, 593, 597, 605, - 618, 628, 309, 312, 315, 318, 321, 329, 561, 572, - 594, 598, 606, 619, 629, 13, 14, 15, 16, 17, + 0, 312, 0, 11, 12, 46, 52, 96, 112, 162, + 221, 240, 261, 270, 294, 298, 304, 313, 314, 315, + 318, 321, 324, 327, 335, 574, 585, 607, 611, 619, + 632, 642, 316, 319, 322, 325, 328, 336, 575, 586, + 608, 612, 620, 633, 643, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -1893,15 +2671,15 @@ static const yytype_uint16 yystos[] = 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 161, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 221, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 249, 250, 251, 252, 253, - 254, 262, 270, 271, 273, 274, 276, 277, 280, 281, - 282, 283, 284, 285, 286, 287, 291, 300, 301, 302, - 310, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 268, 276, 277, + 279, 280, 282, 283, 286, 287, 288, 289, 290, 291, + 292, 293, 297, 306, 307, 308, 309, 317, 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, @@ -1921,25 +2699,26 @@ static const yytype_uint16 yystos[] = 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, - 530, 601, 602, 603, 604, 627, 45, 47, 48, 108, - 139, 149, 279, 313, 531, 532, 533, 534, 535, 536, - 537, 45, 53, 54, 138, 140, 278, 316, 538, 539, - 540, 541, 542, 543, 45, 81, 82, 106, 182, 183, - 222, 319, 553, 554, 555, 556, 557, 558, 559, 45, - 263, 265, 266, 267, 268, 269, 275, 303, 322, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 293, 294, - 295, 296, 297, 323, 324, 325, 326, 327, 330, 544, - 545, 546, 547, 548, 97, 98, 99, 100, 101, 102, - 103, 104, 562, 563, 564, 565, 566, 567, 568, 569, - 570, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, - 113, 595, 596, 299, 599, 600, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 256, 257, 258, - 259, 260, 261, 620, 621, 622, 623, 624, 625, 626, - 289, 290, 630, 631, 632, 10, 10, 10, 10, 10, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 615, 616, 617, 618, 641, + 45, 47, 48, 108, 139, 149, 285, 320, 545, 546, + 547, 548, 549, 550, 551, 45, 53, 54, 138, 140, + 284, 323, 552, 553, 554, 555, 556, 557, 45, 81, + 82, 106, 183, 184, 223, 326, 567, 568, 569, 570, + 571, 572, 573, 45, 269, 271, 272, 273, 274, 275, + 281, 310, 329, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 299, 300, 301, 302, 303, 330, 331, 332, + 333, 334, 337, 558, 559, 560, 561, 562, 97, 98, + 99, 100, 101, 102, 103, 104, 576, 577, 578, 579, + 580, 581, 582, 583, 584, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 113, 609, 610, 305, 613, 614, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, + 631, 262, 263, 264, 265, 266, 267, 634, 635, 636, + 637, 638, 639, 640, 295, 296, 644, 645, 646, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1970,42 +2749,43 @@ 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = +static const yytype_int16 yyr1[] = { - 0, 304, 305, 305, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 307, 308, - 309, 309, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 311, 312, 312, - 313, 313, 313, 313, 313, 313, 313, 314, 315, 315, - 316, 316, 316, 316, 316, 316, 317, 318, 318, 319, - 319, 319, 319, 319, 319, 319, 320, 321, 321, 322, - 322, 322, 322, 322, 322, 322, 322, 322, 323, 324, - 325, 326, 327, 328, 329, 329, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 0, 311, 312, 312, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 314, 315, + 316, 316, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 318, 319, 319, 320, 320, 320, + 320, 320, 320, 320, 321, 322, 322, 323, 323, 323, + 323, 323, 323, 324, 325, 325, 326, 326, 326, 326, + 326, 326, 326, 327, 328, 328, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 330, 331, 332, 333, 334, + 335, 336, 336, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 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, @@ -2027,23 +2807,24 @@ static const yytype_uint16 yyr1[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 560, 561, 561, 562, 562, - 562, 562, 562, 562, 562, 562, 563, 564, 565, 566, - 567, 568, 569, 570, 571, 572, 572, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 574, 575, 576, 577, - 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, - 588, 589, 590, 591, 592, 593, 594, 594, 595, 596, - 597, 598, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 606, 607, 607, 607, 607, 607, 607, 607, 607, - 607, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 619, 620, 620, 620, 620, 620, - 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, - 629, 630, 630, 631, 632 + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 575, 576, 576, 576, 576, 576, 576, 576, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, + 586, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 608, 609, 610, 611, 612, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 620, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 633, 634, + 634, 634, 634, 634, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 643, 644, 644, 645, 646 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, @@ -2067,13 +2848,14 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 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, 1, 2, 2, 2, 2, 2, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2086,36 +2868,36 @@ 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, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 3, - 3, 3, 2, 2, 2, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 2, - 1, 2, 0, 1, 2, 2, 2, 3, 3, 1, + 2, 2, 2, 3, 3, 3, 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, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 3, 1, 2, - 0, 1, 1, 2, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 1, 2, 0, 1, 1, 2, 2 }; +enum { YYENOMEM = -2 }; + #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab @@ -2141,10 +2923,9 @@ static const yytype_uint8 yyr2[] = } \ while (0) -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF /* Enable debugging if requested. */ @@ -2162,18 +2943,18 @@ do { \ } while (0) /* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif +# ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value); \ + Kind, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) @@ -2184,17 +2965,20 @@ do { \ `-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { FILE *yyoutput = yyo; YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); + if (yykind < YYNTOKENS) + YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif - YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -2203,12 +2987,13 @@ yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) `---------------------------*/ static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyo, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - yy_symbol_value_print (yyo, yytype, yyvaluep); + yy_symbol_value_print (yyo, yykind, yyvaluep); YYFPRINTF (yyo, ")"); } @@ -2218,7 +3003,7 @@ yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -2241,21 +3026,21 @@ do { \ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, + int yyrule) { - unsigned long yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] - ); + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)]); YYFPRINTF (stderr, "\n"); } } @@ -2270,8 +3055,8 @@ do { \ multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ @@ -2294,253 +3079,29 @@ int yydebug; #endif -#if YYERROR_VERBOSE -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -yystrlen (const char *yystr) -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - default: /* Avoid compiler warnings. */ - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep) { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); + YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } - - /* The lookahead symbol. */ int yychar; @@ -2550,6 +3111,8 @@ YYSTYPE yylval; int yynerrs; + + /*----------. | yyparse. | `----------*/ @@ -2557,7 +3120,7 @@ int yynerrs; int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -2568,32 +3131,29 @@ yyparse (void) Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ + /* Their size. */ + YYPTRDIFF_T yystacksize; + /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; - int yyn; + /* The return value of yyparse. */ int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif + #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -2601,15 +3161,17 @@ yyparse (void) Keep to zero when no symbol should be popped. */ int yylen = 0; + yynerrs = 0; + yystate = 0; + yyerrstatus = 0; + + yystacksize = YYINITDEPTH; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; @@ -2624,12 +3186,15 @@ yynewstate: /*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | +| yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE @@ -2637,23 +3202,23 @@ yysetstate: #else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; @@ -2667,14 +3232,15 @@ yysetstate: yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } @@ -2683,8 +3249,10 @@ yysetstate: yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; @@ -2711,18 +3279,29 @@ yybackup: /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); + YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (); } if (yychar <= YYEOF) { - yychar = yytoken = YYEOF; + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + goto yyerrlab1; + } else { yytoken = YYTRANSLATE (yychar); @@ -2750,14 +3329,13 @@ yybackup: /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -2793,24 +3371,24 @@ yyreduce: switch (yyn) { case 18: -#line 195 "./util/configparser.y" - { +#line 198 "./util/configparser.y" + { OUTYY(("\nP(force-toplevel)\n")); } -#line 2801 "util/configparser.c" +#line 3379 "util/configparser.c" break; case 19: -#line 201 "./util/configparser.y" - { +#line 204 "./util/configparser.y" + { OUTYY(("\nP(server:)\n")); } -#line 2809 "util/configparser.c" +#line 3387 "util/configparser.c" break; - case 227: -#line 299 "./util/configparser.y" - { + case 234: +#line 307 "./util/configparser.y" + { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); @@ -2820,12 +3398,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2824 "util/configparser.c" +#line 3402 "util/configparser.c" break; - case 237: -#line 316 "./util/configparser.y" - { + case 244: +#line 324 "./util/configparser.y" + { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); @@ -2835,12 +3413,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2839 "util/configparser.c" +#line 3417 "util/configparser.c" break; - case 246: -#line 333 "./util/configparser.y" - { + case 253: +#line 341 "./util/configparser.y" + { struct config_view* s; OUTYY(("\nP(view:)\n")); s = (struct config_view*)calloc(1, sizeof(struct config_view)); @@ -2852,12 +3430,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2856 "util/configparser.c" +#line 3434 "util/configparser.c" break; - case 256: -#line 352 "./util/configparser.y" - { + case 263: +#line 360 "./util/configparser.y" + { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); @@ -2873,12 +3451,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2877 "util/configparser.c" +#line 3455 "util/configparser.c" break; - case 268: -#line 377 "./util/configparser.y" - { + case 275: +#line 385 "./util/configparser.y" + { uint8_t* bitlist; size_t len = 0; OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); @@ -2894,12 +3472,12 @@ yyreduce: } } -#line 2898 "util/configparser.c" +#line 3476 "util/configparser.c" break; - case 269: -#line 396 "./util/configparser.y" - { + case 276: +#line 404 "./util/configparser.y" + { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && @@ -2913,44 +3491,44 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2917 "util/configparser.c" +#line 3495 "util/configparser.c" break; - case 270: -#line 413 "./util/configparser.y" - { + case 277: +#line 421 "./util/configparser.y" + { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2927 "util/configparser.c" +#line 3505 "util/configparser.c" break; - case 271: -#line 421 "./util/configparser.y" - { + case 278: +#line 429 "./util/configparser.y" + { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2939 "util/configparser.c" +#line 3517 "util/configparser.c" break; - case 272: -#line 431 "./util/configparser.y" - { + case 279: +#line 439 "./util/configparser.y" + { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2949 "util/configparser.c" +#line 3527 "util/configparser.c" break; - case 273: -#line 439 "./util/configparser.y" - { + case 280: +#line 447 "./util/configparser.y" + { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); @@ -2965,36 +3543,36 @@ yyreduce: } else yyerror("out of memory"); } -#line 2969 "util/configparser.c" +#line 3547 "util/configparser.c" break; - case 286: -#line 462 "./util/configparser.y" - { + case 293: +#line 470 "./util/configparser.y" + { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2981 "util/configparser.c" +#line 3559 "util/configparser.c" break; - case 287: -#line 471 "./util/configparser.y" - { + case 294: +#line 479 "./util/configparser.y" + { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2993 "util/configparser.c" +#line 3571 "util/configparser.c" break; - case 288: -#line 480 "./util/configparser.y" - { + case 295: +#line 488 "./util/configparser.y" + { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) cfg_parser->cfg->stat_interval = 0; @@ -3003,48 +3581,48 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3007 "util/configparser.c" +#line 3585 "util/configparser.c" break; - case 289: -#line 491 "./util/configparser.y" - { + case 296: +#line 499 "./util/configparser.y" + { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3019 "util/configparser.c" +#line 3597 "util/configparser.c" break; - case 290: -#line 500 "./util/configparser.y" - { + case 297: +#line 508 "./util/configparser.y" + { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3031 "util/configparser.c" +#line 3609 "util/configparser.c" break; - case 291: -#line 509 "./util/configparser.y" - { + case 298: +#line 517 "./util/configparser.y" + { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3043 "util/configparser.c" +#line 3621 "util/configparser.c" break; - case 292: -#line 518 "./util/configparser.y" - { + case 299: +#line 526 "./util/configparser.y" + { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) cfg_parser->cfg->shm_key = 0; @@ -3053,24 +3631,24 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3057 "util/configparser.c" +#line 3635 "util/configparser.c" break; - case 293: -#line 529 "./util/configparser.y" - { + case 300: +#line 537 "./util/configparser.y" + { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3069 "util/configparser.c" +#line 3647 "util/configparser.c" break; - case 294: -#line 538 "./util/configparser.y" - { + case 301: +#line 546 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str))) @@ -3080,12 +3658,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3084 "util/configparser.c" +#line 3662 "util/configparser.c" break; - case 295: -#line 550 "./util/configparser.y" - { + case 302: +#line 558 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, @@ -3096,12 +3674,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3100 "util/configparser.c" +#line 3678 "util/configparser.c" break; - case 296: -#line 564 "./util/configparser.y" - { + case 303: +#line 572 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3114,12 +3692,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3118 "util/configparser.c" +#line 3696 "util/configparser.c" break; - case 297: -#line 579 "./util/configparser.y" - { + case 304: +#line 587 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); OUTYY(("P(Deprecated option, ignoring)\n")); @@ -3128,12 +3706,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3132 "util/configparser.c" +#line 3710 "util/configparser.c" break; - case 298: -#line 590 "./util/configparser.y" - { + case 305: +#line 598 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3148,12 +3726,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3152 "util/configparser.c" +#line 3730 "util/configparser.c" break; - case 299: -#line 607 "./util/configparser.y" - { + case 306: +#line 615 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3168,12 +3746,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3172 "util/configparser.c" +#line 3750 "util/configparser.c" break; - case 300: -#line 624 "./util/configparser.y" - { + case 307: +#line 632 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3188,12 +3766,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3192 "util/configparser.c" +#line 3770 "util/configparser.c" break; - case 301: -#line 641 "./util/configparser.y" - { + case 308: +#line 649 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3208,12 +3786,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3212 "util/configparser.c" +#line 3790 "util/configparser.c" break; - case 302: -#line 658 "./util/configparser.y" - { + case 309: +#line 666 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3226,12 +3804,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3230 "util/configparser.c" +#line 3808 "util/configparser.c" break; - case 303: -#line 673 "./util/configparser.y" - { + case 310: +#line 681 "./util/configparser.y" + { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3244,12 +3822,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3248 "util/configparser.c" +#line 3826 "util/configparser.c" break; - case 304: -#line 688 "./util/configparser.y" - { + case 311: +#line 696 "./util/configparser.y" + { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); @@ -3260,12 +3838,12 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3264 "util/configparser.c" +#line 3842 "util/configparser.c" break; - case 305: -#line 701 "./util/configparser.y" - { + case 312: +#line 709 "./util/configparser.y" + { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); @@ -3278,180 +3856,180 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3282 "util/configparser.c" +#line 3860 "util/configparser.c" break; - case 306: -#line 716 "./util/configparser.y" - { + case 313: +#line 724 "./util/configparser.y" + { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3294 "util/configparser.c" +#line 3872 "util/configparser.c" break; - case 307: -#line 725 "./util/configparser.y" - { + case 314: +#line 733 "./util/configparser.y" + { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3306 "util/configparser.c" +#line 3884 "util/configparser.c" break; - case 308: -#line 734 "./util/configparser.y" - { + case 315: +#line 742 "./util/configparser.y" + { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3318 "util/configparser.c" +#line 3896 "util/configparser.c" break; - case 309: -#line 743 "./util/configparser.y" - { + case 316: +#line 751 "./util/configparser.y" + { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3330 "util/configparser.c" +#line 3908 "util/configparser.c" break; - case 310: -#line 752 "./util/configparser.y" - { + case 317: +#line 760 "./util/configparser.y" + { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3342 "util/configparser.c" +#line 3920 "util/configparser.c" break; - case 311: -#line 761 "./util/configparser.y" - { + case 318: +#line 769 "./util/configparser.y" + { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3354 "util/configparser.c" +#line 3932 "util/configparser.c" break; - case 312: -#line 770 "./util/configparser.y" - { + case 319: +#line 778 "./util/configparser.y" + { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3366 "util/configparser.c" +#line 3944 "util/configparser.c" break; - case 313: -#line 779 "./util/configparser.y" - { + case 320: +#line 787 "./util/configparser.y" + { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" +#line 3956 "util/configparser.c" break; - case 314: -#line 788 "./util/configparser.y" - { + case 321: +#line 796 "./util/configparser.y" + { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" +#line 3968 "util/configparser.c" break; - case 315: -#line 797 "./util/configparser.y" - { + case 322: +#line 805 "./util/configparser.y" + { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" +#line 3980 "util/configparser.c" break; - case 316: -#line 806 "./util/configparser.y" - { + case 323: +#line 814 "./util/configparser.y" + { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3414 "util/configparser.c" +#line 3992 "util/configparser.c" break; - case 317: -#line 815 "./util/configparser.y" - { + case 324: +#line 823 "./util/configparser.y" + { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3426 "util/configparser.c" +#line 4004 "util/configparser.c" break; - case 318: -#line 824 "./util/configparser.y" - { + case 325: +#line 832 "./util/configparser.y" + { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3438 "util/configparser.c" +#line 4016 "util/configparser.c" break; - case 319: -#line 833 "./util/configparser.y" - { + case 326: +#line 841 "./util/configparser.y" + { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3450 "util/configparser.c" +#line 4028 "util/configparser.c" break; - case 320: -#line 842 "./util/configparser.y" - { + case 327: +#line 850 "./util/configparser.y" + { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); @@ -3462,24 +4040,24 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3466 "util/configparser.c" +#line 4044 "util/configparser.c" break; - case 321: -#line 855 "./util/configparser.y" - { + case 328: +#line 863 "./util/configparser.y" + { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3478 "util/configparser.c" +#line 4056 "util/configparser.c" break; - case 322: -#line 864 "./util/configparser.y" - { + case 329: +#line 872 "./util/configparser.y" + { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); @@ -3490,168 +4068,168 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3494 "util/configparser.c" +#line 4072 "util/configparser.c" break; - case 323: -#line 877 "./util/configparser.y" - { + case 330: +#line 885 "./util/configparser.y" + { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3506 "util/configparser.c" +#line 4084 "util/configparser.c" break; - case 324: -#line 886 "./util/configparser.y" - { + case 331: +#line 894 "./util/configparser.y" + { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3518 "util/configparser.c" +#line 4096 "util/configparser.c" break; - case 325: -#line 895 "./util/configparser.y" - { + case 332: +#line 903 "./util/configparser.y" + { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3530 "util/configparser.c" +#line 4108 "util/configparser.c" break; - case 326: -#line 904 "./util/configparser.y" - { + case 333: +#line 912 "./util/configparser.y" + { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3540 "util/configparser.c" +#line 4118 "util/configparser.c" break; - case 327: -#line 911 "./util/configparser.y" - { + case 334: +#line 919 "./util/configparser.y" + { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3550 "util/configparser.c" +#line 4128 "util/configparser.c" break; - case 328: -#line 918 "./util/configparser.y" - { + case 335: +#line 926 "./util/configparser.y" + { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3562 "util/configparser.c" +#line 4140 "util/configparser.c" break; - case 329: -#line 927 "./util/configparser.y" - { + case 336: +#line 935 "./util/configparser.y" + { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3572 "util/configparser.c" +#line 4150 "util/configparser.c" break; - case 330: -#line 934 "./util/configparser.y" - { + case 337: +#line 942 "./util/configparser.y" + { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3584 "util/configparser.c" +#line 4162 "util/configparser.c" break; - case 331: -#line 943 "./util/configparser.y" - { + case 338: +#line 951 "./util/configparser.y" + { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3595 "util/configparser.c" +#line 4173 "util/configparser.c" break; - case 332: -#line 951 "./util/configparser.y" - { + case 339: +#line 959 "./util/configparser.y" + { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3605 "util/configparser.c" +#line 4183 "util/configparser.c" break; - case 333: -#line 958 "./util/configparser.y" - { + case 340: +#line 966 "./util/configparser.y" + { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3615 "util/configparser.c" +#line 4193 "util/configparser.c" break; - case 334: -#line 965 "./util/configparser.y" - { + case 341: +#line 973 "./util/configparser.y" + { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3626 "util/configparser.c" +#line 4204 "util/configparser.c" break; - case 335: -#line 973 "./util/configparser.y" - { + case 342: +#line 981 "./util/configparser.y" + { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3638 "util/configparser.c" +#line 4216 "util/configparser.c" break; - case 336: -#line 982 "./util/configparser.y" - { + case 343: +#line 990 "./util/configparser.y" + { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3650 "util/configparser.c" +#line 4228 "util/configparser.c" break; - case 337: -#line 990 "./util/configparser.y" - { + case 344: +#line 998 "./util/configparser.y" + { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') { @@ -3666,96 +4244,96 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3670 "util/configparser.c" +#line 4248 "util/configparser.c" break; - case 338: -#line 1006 "./util/configparser.y" - { + case 345: +#line 1014 "./util/configparser.y" + { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3682 "util/configparser.c" +#line 4260 "util/configparser.c" break; - case 339: -#line 1014 "./util/configparser.y" - { + case 346: +#line 1022 "./util/configparser.y" + { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->http_query_buffer_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3694 "util/configparser.c" +#line 4272 "util/configparser.c" break; - case 340: -#line 1022 "./util/configparser.y" - { + case 347: +#line 1030 "./util/configparser.y" + { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->http_response_buffer_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3706 "util/configparser.c" +#line 4284 "util/configparser.c" break; - case 341: -#line 1030 "./util/configparser.y" - { + case 348: +#line 1038 "./util/configparser.y" + { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3718 "util/configparser.c" +#line 4296 "util/configparser.c" break; - case 342: -#line 1038 "./util/configparser.y" - { + case 349: +#line 1046 "./util/configparser.y" + { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3730 "util/configparser.c" +#line 4308 "util/configparser.c" break; - case 343: -#line 1046 "./util/configparser.y" - { + case 350: +#line 1054 "./util/configparser.y" + { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3742 "util/configparser.c" +#line 4320 "util/configparser.c" break; - case 344: -#line 1055 "./util/configparser.y" - { + case 351: +#line 1063 "./util/configparser.y" + { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3754 "util/configparser.c" +#line 4332 "util/configparser.c" break; - case 345: -#line 1064 "./util/configparser.y" - { + case 352: +#line 1072 "./util/configparser.y" + { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -3767,104 +4345,104 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3771 "util/configparser.c" +#line 4349 "util/configparser.c" break; - case 346: -#line 1078 "./util/configparser.y" - { + case 353: +#line 1086 "./util/configparser.y" + { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3783 "util/configparser.c" +#line 4361 "util/configparser.c" break; - case 347: -#line 1087 "./util/configparser.y" - { + case 354: +#line 1095 "./util/configparser.y" + { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3795 "util/configparser.c" +#line 4373 "util/configparser.c" break; - case 348: -#line 1096 "./util/configparser.y" - { + case 355: +#line 1104 "./util/configparser.y" + { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3807 "util/configparser.c" +#line 4385 "util/configparser.c" break; - case 349: -#line 1105 "./util/configparser.y" - { + case 356: +#line 1113 "./util/configparser.y" + { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3819 "util/configparser.c" +#line 4397 "util/configparser.c" break; - case 350: -#line 1114 "./util/configparser.y" - { + case 357: +#line 1122 "./util/configparser.y" + { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3831 "util/configparser.c" +#line 4409 "util/configparser.c" break; - case 351: -#line 1123 "./util/configparser.y" - { + case 358: +#line 1131 "./util/configparser.y" + { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3843 "util/configparser.c" +#line 4421 "util/configparser.c" break; - case 352: -#line 1132 "./util/configparser.y" - { + case 359: +#line 1140 "./util/configparser.y" + { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3853 "util/configparser.c" +#line 4431 "util/configparser.c" break; - case 353: -#line 1139 "./util/configparser.y" - { + case 360: +#line 1147 "./util/configparser.y" + { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3863 "util/configparser.c" +#line 4441 "util/configparser.c" break; - case 354: -#line 1146 "./util/configparser.y" - { + case 361: +#line 1154 "./util/configparser.y" + { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); cfg_parser->cfg->directory = (yyvsp[0].str); @@ -3888,106 +4466,106 @@ yyreduce: } } } -#line 3892 "util/configparser.c" +#line 4470 "util/configparser.c" break; - case 355: -#line 1172 "./util/configparser.y" - { + case 362: +#line 1180 "./util/configparser.y" + { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3903 "util/configparser.c" +#line 4481 "util/configparser.c" break; - case 356: -#line 1180 "./util/configparser.y" - { + case 363: +#line 1188 "./util/configparser.y" + { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3913 "util/configparser.c" +#line 4491 "util/configparser.c" break; - case 357: -#line 1187 "./util/configparser.y" - { + case 364: +#line 1195 "./util/configparser.y" + { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3923 "util/configparser.c" +#line 4501 "util/configparser.c" break; - case 358: -#line 1194 "./util/configparser.y" - { + case 365: +#line 1202 "./util/configparser.y" + { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3933 "util/configparser.c" +#line 4511 "util/configparser.c" break; - case 359: -#line 1201 "./util/configparser.y" - { + case 366: +#line 1209 "./util/configparser.y" + { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3943 "util/configparser.c" +#line 4521 "util/configparser.c" break; - case 360: -#line 1208 "./util/configparser.y" - { + case 367: +#line 1216 "./util/configparser.y" + { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3954 "util/configparser.c" +#line 4532 "util/configparser.c" break; - case 361: -#line 1216 "./util/configparser.y" - { + case 368: +#line 1224 "./util/configparser.y" + { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3965 "util/configparser.c" +#line 4543 "util/configparser.c" break; - case 362: -#line 1224 "./util/configparser.y" - { + case 369: +#line 1232 "./util/configparser.y" + { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3976 "util/configparser.c" +#line 4554 "util/configparser.c" break; - case 363: -#line 1232 "./util/configparser.y" - { + case 370: +#line 1240 "./util/configparser.y" + { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3986 "util/configparser.c" +#line 4564 "util/configparser.c" break; - case 364: -#line 1239 "./util/configparser.y" - { + case 371: +#line 1247 "./util/configparser.y" + { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -3996,12 +4574,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4000 "util/configparser.c" +#line 4578 "util/configparser.c" break; - case 365: -#line 1250 "./util/configparser.y" - { + case 372: +#line 1258 "./util/configparser.y" + { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4010,99 +4588,118 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4014 "util/configparser.c" +#line 4592 "util/configparser.c" break; - case 366: -#line 1261 "./util/configparser.y" - { + case 373: +#line 1269 "./util/configparser.y" + { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4024 "util/configparser.c" +#line 4602 "util/configparser.c" break; - case 367: -#line 1268 "./util/configparser.y" - { + case 374: +#line 1276 "./util/configparser.y" + { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4036 "util/configparser.c" +#line 4614 "util/configparser.c" break; - case 368: -#line 1277 "./util/configparser.y" - { + case 375: +#line 1285 "./util/configparser.y" + { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4048 "util/configparser.c" +#line 4626 "util/configparser.c" break; - case 369: -#line 1286 "./util/configparser.y" - { + case 376: +#line 1294 "./util/configparser.y" + { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4060 "util/configparser.c" +#line 4638 "util/configparser.c" break; - case 370: -#line 1295 "./util/configparser.y" - { + case 377: +#line 1303 "./util/configparser.y" + { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4070 "util/configparser.c" +#line 4648 "util/configparser.c" break; - case 371: -#line 1302 "./util/configparser.y" - { + case 378: +#line 1310 "./util/configparser.y" + { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4080 "util/configparser.c" +#line 4658 "util/configparser.c" break; - case 372: -#line 1309 "./util/configparser.y" - { + case 379: +#line 1317 "./util/configparser.y" + { + OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->nsid_cfg_str); + cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str); + free(cfg_parser->cfg->nsid); + cfg_parser->cfg->nsid = NULL; + cfg_parser->cfg->nsid_len = 0; + if (*(yyvsp[0].str) == 0) + ; /* pass; empty string is not setting nsid */ + else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( + (yyvsp[0].str), &cfg_parser->cfg->nsid_len))) + yyerror("the NSID must be either a hex string or an " + "ascii character string prepended with ascii_."); + } +#line 4677 "util/configparser.c" + break; + + case 380: +#line 1333 "./util/configparser.y" + { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4091 "util/configparser.c" +#line 4688 "util/configparser.c" break; - case 373: -#line 1317 "./util/configparser.y" - { + case 381: +#line 1341 "./util/configparser.y" + { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4102 "util/configparser.c" +#line 4699 "util/configparser.c" break; - case 374: -#line 1325 "./util/configparser.y" + case 382: +#line 1349 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4111,11 +4708,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4115 "util/configparser.c" +#line 4712 "util/configparser.c" break; - case 375: -#line 1335 "./util/configparser.y" + case 383: +#line 1359 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4124,11 +4721,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4128 "util/configparser.c" +#line 4725 "util/configparser.c" break; - case 376: -#line 1345 "./util/configparser.y" + case 384: +#line 1369 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4137,12 +4734,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4141 "util/configparser.c" +#line 4738 "util/configparser.c" break; - case 377: -#line 1355 "./util/configparser.y" - { + case 385: +#line 1379 "./util/configparser.y" + { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); @@ -4154,23 +4751,23 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4158 "util/configparser.c" +#line 4755 "util/configparser.c" break; - case 378: -#line 1369 "./util/configparser.y" - { + case 386: +#line 1393 "./util/configparser.y" + { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4169 "util/configparser.c" +#line 4766 "util/configparser.c" break; - case 379: -#line 1377 "./util/configparser.y" - { + case 387: +#line 1401 "./util/configparser.y" + { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4181,12 +4778,12 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4185 "util/configparser.c" +#line 4782 "util/configparser.c" break; - case 380: -#line 1390 "./util/configparser.y" - { + case 388: +#line 1414 "./util/configparser.y" + { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4195,23 +4792,23 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4199 "util/configparser.c" +#line 4796 "util/configparser.c" break; - case 381: -#line 1401 "./util/configparser.y" - { + case 389: +#line 1425 "./util/configparser.y" + { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4210 "util/configparser.c" +#line 4807 "util/configparser.c" break; - case 382: -#line 1409 "./util/configparser.y" - { + case 390: +#line 1433 "./util/configparser.y" + { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4222,48 +4819,60 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4226 "util/configparser.c" +#line 4823 "util/configparser.c" break; - case 383: -#line 1422 "./util/configparser.y" - { + case 391: +#line 1446 "./util/configparser.y" + { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4238 "util/configparser.c" +#line 4835 "util/configparser.c" break; - case 384: -#line 1431 "./util/configparser.y" - { + case 392: +#line 1455 "./util/configparser.y" + { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4250 "util/configparser.c" +#line 4847 "util/configparser.c" break; - case 385: -#line 1440 "./util/configparser.y" - { + case 393: +#line 1464 "./util/configparser.y" + { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4262 "util/configparser.c" +#line 4859 "util/configparser.c" break; - case 386: -#line 1449 "./util/configparser.y" - { + case 394: +#line 1473 "./util/configparser.y" + { + OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 4871 "util/configparser.c" + break; + + case 395: +#line 1482 "./util/configparser.y" + { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4271,12 +4880,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4275 "util/configparser.c" +#line 4884 "util/configparser.c" break; - case 387: -#line 1459 "./util/configparser.y" - { + case 396: +#line 1492 "./util/configparser.y" + { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4284,23 +4893,23 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4288 "util/configparser.c" +#line 4897 "util/configparser.c" break; - case 388: -#line 1469 "./util/configparser.y" - { + case 397: +#line 1502 "./util/configparser.y" + { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4299 "util/configparser.c" +#line 4908 "util/configparser.c" break; - case 389: -#line 1477 "./util/configparser.y" - { + case 398: +#line 1510 "./util/configparser.y" + { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4311,58 +4920,58 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4315 "util/configparser.c" +#line 4924 "util/configparser.c" break; - case 390: -#line 1490 "./util/configparser.y" - { + case 399: +#line 1523 "./util/configparser.y" + { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4327 "util/configparser.c" +#line 4936 "util/configparser.c" break; - case 391: -#line 1499 "./util/configparser.y" - { + case 400: +#line 1532 "./util/configparser.y" + { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4338 "util/configparser.c" +#line 4947 "util/configparser.c" break; - case 392: -#line 1507 "./util/configparser.y" - { + case 401: +#line 1540 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" +#line 4959 "util/configparser.c" break; - case 393: -#line 1516 "./util/configparser.y" - { + case 402: +#line 1549 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4970 "util/configparser.c" break; - case 394: -#line 1524 "./util/configparser.y" - { + case 403: +#line 1557 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4373,24 +4982,24 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4377 "util/configparser.c" +#line 4986 "util/configparser.c" break; - case 395: -#line 1537 "./util/configparser.y" - { + case 404: +#line 1570 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4389 "util/configparser.c" +#line 4998 "util/configparser.c" break; - case 396: -#line 1546 "./util/configparser.y" - { + case 405: +#line 1579 "./util/configparser.y" + { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4398,22 +5007,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4402 "util/configparser.c" +#line 5011 "util/configparser.c" break; - case 397: -#line 1556 "./util/configparser.y" - { + case 406: +#line 1589 "./util/configparser.y" + { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4412 "util/configparser.c" +#line 5021 "util/configparser.c" break; - case 398: -#line 1563 "./util/configparser.y" - { + case 407: +#line 1596 "./util/configparser.y" + { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4421,12 +5030,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4425 "util/configparser.c" +#line 5034 "util/configparser.c" break; - case 399: -#line 1573 "./util/configparser.y" - { + case 408: +#line 1606 "./util/configparser.y" + { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4434,12 +5043,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4438 "util/configparser.c" +#line 5047 "util/configparser.c" break; - case 400: -#line 1583 "./util/configparser.y" - { + case 409: +#line 1616 "./util/configparser.y" + { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4447,12 +5056,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4451 "util/configparser.c" +#line 5060 "util/configparser.c" break; - case 401: -#line 1593 "./util/configparser.y" - { + case 410: +#line 1626 "./util/configparser.y" + { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4460,12 +5069,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4464 "util/configparser.c" +#line 5073 "util/configparser.c" break; - case 402: -#line 1603 "./util/configparser.y" - { + case 411: +#line 1636 "./util/configparser.y" + { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4473,12 +5082,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4477 "util/configparser.c" +#line 5086 "util/configparser.c" break; - case 403: -#line 1613 "./util/configparser.y" - { + case 412: +#line 1646 "./util/configparser.y" + { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4486,12 +5095,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4490 "util/configparser.c" +#line 5099 "util/configparser.c" break; - case 404: -#line 1623 "./util/configparser.y" - { + case 413: +#line 1656 "./util/configparser.y" + { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4499,12 +5108,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4503 "util/configparser.c" +#line 5112 "util/configparser.c" break; - case 405: -#line 1633 "./util/configparser.y" - { + case 414: +#line 1666 "./util/configparser.y" + { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4512,100 +5121,100 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4516 "util/configparser.c" +#line 5125 "util/configparser.c" break; - case 406: -#line 1643 "./util/configparser.y" - { + case 415: +#line 1676 "./util/configparser.y" + { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4526 "util/configparser.c" +#line 5135 "util/configparser.c" break; - case 407: -#line 1650 "./util/configparser.y" - { + case 416: +#line 1683 "./util/configparser.y" + { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4536 "util/configparser.c" +#line 5145 "util/configparser.c" break; - case 408: -#line 1657 "./util/configparser.y" - { + case 417: +#line 1690 "./util/configparser.y" + { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4546 "util/configparser.c" +#line 5155 "util/configparser.c" break; - case 409: -#line 1664 "./util/configparser.y" - { + case 418: +#line 1697 "./util/configparser.y" + { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4558 "util/configparser.c" +#line 5167 "util/configparser.c" break; - case 410: -#line 1673 "./util/configparser.y" - { + case 419: +#line 1706 "./util/configparser.y" + { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4570 "util/configparser.c" +#line 5179 "util/configparser.c" break; - case 411: -#line 1682 "./util/configparser.y" - { + case 420: +#line 1715 "./util/configparser.y" + { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4582 "util/configparser.c" +#line 5191 "util/configparser.c" break; - case 412: -#line 1691 "./util/configparser.y" - { + case 421: +#line 1724 "./util/configparser.y" + { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4594 "util/configparser.c" +#line 5203 "util/configparser.c" break; - case 413: -#line 1700 "./util/configparser.y" - { + case 422: +#line 1733 "./util/configparser.y" + { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4604 "util/configparser.c" +#line 5213 "util/configparser.c" break; - case 414: -#line 1707 "./util/configparser.y" - { + case 423: +#line 1740 "./util/configparser.y" + { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4613,12 +5222,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4617 "util/configparser.c" +#line 5226 "util/configparser.c" break; - case 415: -#line 1717 "./util/configparser.y" - { + case 424: +#line 1750 "./util/configparser.y" + { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "deny_non_local")!=0 && @@ -4636,22 +5245,22 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4640 "util/configparser.c" +#line 5249 "util/configparser.c" break; - case 416: -#line 1737 "./util/configparser.y" - { + case 425: +#line 1770 "./util/configparser.y" + { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4650 "util/configparser.c" +#line 5259 "util/configparser.c" break; - case 417: -#line 1744 "./util/configparser.y" - { + case 426: +#line 1777 "./util/configparser.y" + { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_date_override = 0; @@ -4667,12 +5276,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4671 "util/configparser.c" +#line 5280 "util/configparser.c" break; - case 418: -#line 1762 "./util/configparser.y" - { + case 427: +#line 1795 "./util/configparser.y" + { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_sig_skew_min = 0; @@ -4683,12 +5292,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4687 "util/configparser.c" +#line 5296 "util/configparser.c" break; - case 419: -#line 1775 "./util/configparser.y" - { + case 428: +#line 1808 "./util/configparser.y" + { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_sig_skew_max = 0; @@ -4699,60 +5308,60 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4703 "util/configparser.c" +#line 5312 "util/configparser.c" break; - case 420: -#line 1788 "./util/configparser.y" - { + case 429: +#line 1821 "./util/configparser.y" + { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4715 "util/configparser.c" +#line 5324 "util/configparser.c" break; - case 421: -#line 1797 "./util/configparser.y" - { + case 430: +#line 1830 "./util/configparser.y" + { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4727 "util/configparser.c" +#line 5336 "util/configparser.c" break; - case 422: -#line 1806 "./util/configparser.y" - { + case 431: +#line 1839 "./util/configparser.y" + { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4739 "util/configparser.c" +#line 5348 "util/configparser.c" break; - case 423: -#line 1815 "./util/configparser.y" - { + case 432: +#line 1848 "./util/configparser.y" + { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4751 "util/configparser.c" +#line 5360 "util/configparser.c" break; - case 424: -#line 1824 "./util/configparser.y" - { + case 433: +#line 1857 "./util/configparser.y" + { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4760,12 +5369,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4764 "util/configparser.c" +#line 5373 "util/configparser.c" break; - case 425: -#line 1834 "./util/configparser.y" - { + case 434: +#line 1867 "./util/configparser.y" + { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4773,12 +5382,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4777 "util/configparser.c" +#line 5386 "util/configparser.c" break; - case 426: -#line 1844 "./util/configparser.y" - { + case 435: +#line 1877 "./util/configparser.y" + { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4787,84 +5396,96 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4791 "util/configparser.c" +#line 5400 "util/configparser.c" break; - case 427: -#line 1855 "./util/configparser.y" - { + case 436: +#line 1888 "./util/configparser.y" + { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4803 "util/configparser.c" +#line 5412 "util/configparser.c" break; - case 428: -#line 1864 "./util/configparser.y" - { + case 437: +#line 1897 "./util/configparser.y" + { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4815 "util/configparser.c" +#line 5424 "util/configparser.c" break; - case 429: -#line 1873 "./util/configparser.y" - { + case 438: +#line 1906 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4827 "util/configparser.c" +#line 5436 "util/configparser.c" break; - case 430: -#line 1882 "./util/configparser.y" - { + case 439: +#line 1915 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4839 "util/configparser.c" +#line 5448 "util/configparser.c" break; - case 431: -#line 1891 "./util/configparser.y" - { + case 440: +#line 1924 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4851 "util/configparser.c" +#line 5460 "util/configparser.c" break; - case 432: -#line 1900 "./util/configparser.y" - { + case 441: +#line 1933 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4863 "util/configparser.c" +#line 5472 "util/configparser.c" break; - case 433: -#line 1909 "./util/configparser.y" - { + case 442: +#line 1942 "./util/configparser.y" + { + OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 5484 "util/configparser.c" + break; + + case 443: +#line 1951 "./util/configparser.y" + { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4875,12 +5496,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4879 "util/configparser.c" +#line 5500 "util/configparser.c" break; - case 434: -#line 1922 "./util/configparser.y" - { + case 444: +#line 1964 "./util/configparser.y" + { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4891,82 +5512,82 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4895 "util/configparser.c" +#line 5516 "util/configparser.c" break; - case 435: -#line 1935 "./util/configparser.y" - { + case 445: +#line 1977 "./util/configparser.y" + { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4907 "util/configparser.c" +#line 5528 "util/configparser.c" break; - case 436: -#line 1944 "./util/configparser.y" - { + case 446: +#line 1986 "./util/configparser.y" + { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4917 "util/configparser.c" +#line 5538 "util/configparser.c" break; - case 437: -#line 1951 "./util/configparser.y" - { + case 447: +#line 1993 "./util/configparser.y" + { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4929 "util/configparser.c" +#line 5550 "util/configparser.c" break; - case 438: -#line 1960 "./util/configparser.y" - { + case 448: +#line 2002 "./util/configparser.y" + { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4941 "util/configparser.c" +#line 5562 "util/configparser.c" break; - case 439: -#line 1969 "./util/configparser.y" - { + case 449: +#line 2011 "./util/configparser.y" + { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4953 "util/configparser.c" +#line 5574 "util/configparser.c" break; - case 440: -#line 1978 "./util/configparser.y" - { + case 450: +#line 2020 "./util/configparser.y" + { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4965 "util/configparser.c" +#line 5586 "util/configparser.c" break; - case 441: -#line 1987 "./util/configparser.y" - { + case 451: +#line 2029 "./util/configparser.y" + { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4974,23 +5595,23 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4978 "util/configparser.c" +#line 5599 "util/configparser.c" break; - case 442: -#line 1996 "./util/configparser.y" - { + case 452: +#line 2038 "./util/configparser.y" + { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4989 "util/configparser.c" +#line 5610 "util/configparser.c" break; - case 443: -#line 2004 "./util/configparser.y" - { + case 453: +#line 2046 "./util/configparser.y" + { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -5001,23 +5622,23 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5005 "util/configparser.c" +#line 5626 "util/configparser.c" break; - case 444: -#line 2017 "./util/configparser.y" - { + case 454: +#line 2059 "./util/configparser.y" + { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5016 "util/configparser.c" +#line 5637 "util/configparser.c" break; - case 445: -#line 2025 "./util/configparser.y" - { + case 455: +#line 2067 "./util/configparser.y" + { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && @@ -5026,6 +5647,9 @@ yyreduce: && strcmp((yyvsp[0].str), "always_transparent")!=0 && strcmp((yyvsp[0].str), "always_refuse")!=0 && strcmp((yyvsp[0].str), "always_nxdomain")!=0 + && strcmp((yyvsp[0].str), "always_nodata")!=0 + && strcmp((yyvsp[0].str), "always_deny")!=0 + && strcmp((yyvsp[0].str), "always_null")!=0 && strcmp((yyvsp[0].str), "noview")!=0 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0 && strcmp((yyvsp[0].str), "inform_redirect") != 0 @@ -5034,8 +5658,9 @@ yyreduce: "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "inform_redirect, always_transparent, " - "always_refuse, always_nxdomain, noview " - ", nodefault or ipset"); + "always_refuse, always_nxdomain, " + "always_nodata, always_deny, always_null, " + "noview, nodefault or ipset"); free((yyvsp[-1].str)); free((yyvsp[0].str)); } else if(strcmp((yyvsp[0].str), "nodefault")==0) { @@ -5056,22 +5681,22 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5060 "util/configparser.c" +#line 5685 "util/configparser.c" break; - case 446: -#line 2066 "./util/configparser.y" - { + case 456: +#line 2112 "./util/configparser.y" + { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5070 "util/configparser.c" +#line 5695 "util/configparser.c" break; - case 447: -#line 2073 "./util/configparser.y" - { + case 457: +#line 2119 "./util/configparser.y" + { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); ptr = cfg_ptr_reverse((yyvsp[0].str)); @@ -5084,12 +5709,12 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5088 "util/configparser.c" +#line 5713 "util/configparser.c" break; - case 448: -#line 2088 "./util/configparser.y" - { + case 458: +#line 2134 "./util/configparser.y" + { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5097,12 +5722,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5101 "util/configparser.c" +#line 5726 "util/configparser.c" break; - case 449: -#line 2098 "./util/configparser.y" - { + case 459: +#line 2144 "./util/configparser.y" + { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5110,65 +5735,65 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5114 "util/configparser.c" +#line 5739 "util/configparser.c" break; - case 450: -#line 2108 "./util/configparser.y" - { + case 460: +#line 2154 "./util/configparser.y" + { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5124 "util/configparser.c" +#line 5749 "util/configparser.c" break; - case 451: -#line 2115 "./util/configparser.y" - { + case 461: +#line 2161 "./util/configparser.y" + { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5134 "util/configparser.c" +#line 5759 "util/configparser.c" break; - case 452: -#line 2122 "./util/configparser.y" - { + case 462: +#line 2168 "./util/configparser.y" + { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5144 "util/configparser.c" +#line 5769 "util/configparser.c" break; - case 453: -#line 2129 "./util/configparser.y" - { + case 463: +#line 2175 "./util/configparser.y" + { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5156 "util/configparser.c" +#line 5781 "util/configparser.c" break; - case 454: -#line 2138 "./util/configparser.y" - { + case 464: +#line 2184 "./util/configparser.y" + { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5167 "util/configparser.c" +#line 5792 "util/configparser.c" break; - case 455: -#line 2146 "./util/configparser.y" - { + case 465: +#line 2192 "./util/configparser.y" + { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); while((p=strsep(&s, " \t\n")) != NULL) { @@ -5180,12 +5805,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5184 "util/configparser.c" +#line 5809 "util/configparser.c" break; - case 456: -#line 2160 "./util/configparser.y" - { + case 466: +#line 2206 "./util/configparser.y" + { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); @@ -5204,12 +5829,12 @@ yyreduce: } } } -#line 5208 "util/configparser.c" +#line 5833 "util/configparser.c" break; - case 457: -#line 2181 "./util/configparser.y" - { + case 467: +#line 2227 "./util/configparser.y" + { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); @@ -5228,12 +5853,12 @@ yyreduce: } } } -#line 5232 "util/configparser.c" +#line 5857 "util/configparser.c" break; - case 458: -#line 2202 "./util/configparser.y" - { + case 468: +#line 2248 "./util/configparser.y" + { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { @@ -5243,12 +5868,12 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5247 "util/configparser.c" +#line 5872 "util/configparser.c" break; - case 459: -#line 2214 "./util/configparser.y" - { + case 469: +#line 2260 "./util/configparser.y" + { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { @@ -5258,12 +5883,12 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5262 "util/configparser.c" +#line 5887 "util/configparser.c" break; - case 460: -#line 2226 "./util/configparser.y" - { + case 470: +#line 2272 "./util/configparser.y" + { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { @@ -5273,24 +5898,24 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5277 "util/configparser.c" +#line 5902 "util/configparser.c" break; - case 461: -#line 2238 "./util/configparser.y" - { + case 471: +#line 2284 "./util/configparser.y" + { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); } } -#line 5289 "util/configparser.c" +#line 5914 "util/configparser.c" break; - case 462: -#line 2247 "./util/configparser.y" - { + case 472: +#line 2293 "./util/configparser.y" + { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); @@ -5309,58 +5934,58 @@ yyreduce: } } } -#line 5313 "util/configparser.c" +#line 5938 "util/configparser.c" break; - case 463: -#line 2268 "./util/configparser.y" - { + case 473: +#line 2314 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5325 "util/configparser.c" +#line 5950 "util/configparser.c" break; - case 464: -#line 2278 "./util/configparser.y" - { + case 474: +#line 2324 "./util/configparser.y" + { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5337 "util/configparser.c" +#line 5962 "util/configparser.c" break; - case 465: -#line 2287 "./util/configparser.y" - { + case 475: +#line 2333 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5348 "util/configparser.c" +#line 5973 "util/configparser.c" break; - case 466: -#line 2295 "./util/configparser.y" - { + case 476: +#line 2341 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5359 "util/configparser.c" +#line 5984 "util/configparser.c" break; - case 467: -#line 2303 "./util/configparser.y" - { + case 477: +#line 2349 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -5371,12 +5996,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5375 "util/configparser.c" +#line 6000 "util/configparser.c" break; - case 468: -#line 2316 "./util/configparser.y" - { + case 478: +#line 2362 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -5387,12 +6012,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5391 "util/configparser.c" +#line 6016 "util/configparser.c" break; - case 469: -#line 2329 "./util/configparser.y" - { + case 479: +#line 2375 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { yyerror("number expected"); @@ -5405,12 +6030,12 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5409 "util/configparser.c" +#line 6034 "util/configparser.c" break; - case 470: -#line 2344 "./util/configparser.y" - { + case 480: +#line 2390 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { yyerror("number expected"); @@ -5423,69 +6048,69 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5427 "util/configparser.c" +#line 6052 "util/configparser.c" break; - case 471: -#line 2359 "./util/configparser.y" - { + case 481: +#line 2405 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5439 "util/configparser.c" +#line 6064 "util/configparser.c" break; - case 472: -#line 2368 "./util/configparser.y" - { + case 482: +#line 2414 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5451 "util/configparser.c" +#line 6076 "util/configparser.c" break; - case 473: -#line 2377 "./util/configparser.y" - { + case 483: +#line 2423 "./util/configparser.y" + { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5460 "util/configparser.c" +#line 6085 "util/configparser.c" break; - case 474: -#line 2383 "./util/configparser.y" - { + case 484: +#line 2429 "./util/configparser.y" + { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5472 "util/configparser.c" +#line 6097 "util/configparser.c" break; - case 475: -#line 2392 "./util/configparser.y" - { + case 485: +#line 2438 "./util/configparser.y" + { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5484 "util/configparser.c" +#line 6109 "util/configparser.c" break; - case 476: -#line 2401 "./util/configparser.y" - { + case 486: +#line 2447 "./util/configparser.y" + { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5493,12 +6118,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5497 "util/configparser.c" +#line 6122 "util/configparser.c" break; - case 477: -#line 2411 "./util/configparser.y" - { + case 487: +#line 2457 "./util/configparser.y" + { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5506,12 +6131,62 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5510 "util/configparser.c" +#line 6135 "util/configparser.c" break; - case 478: -#line 2421 "./util/configparser.y" - { + case 488: +#line 2467 "./util/configparser.y" + { + OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_responses = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 6148 "util/configparser.c" + break; + + case 489: +#line 2477 "./util/configparser.y" + { + OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 6160 "util/configparser.c" + break; + + case 490: +#line 2486 "./util/configparser.y" + { + OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_queries = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 6173 "util/configparser.c" + break; + + case 491: +#line 2496 "./util/configparser.y" + { + OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 6185 "util/configparser.c" + break; + + case 492: +#line 2505 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5522,12 +6197,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5526 "util/configparser.c" +#line 6201 "util/configparser.c" break; - case 479: -#line 2434 "./util/configparser.y" - { + case 493: +#line 2518 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5538,12 +6213,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5542 "util/configparser.c" +#line 6217 "util/configparser.c" break; - case 480: -#line 2447 "./util/configparser.y" - { + case 494: +#line 2531 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ipsecmod_hook); @@ -5553,12 +6228,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5557 "util/configparser.c" +#line 6232 "util/configparser.c" break; - case 481: -#line 2459 "./util/configparser.y" - { + case 495: +#line 2543 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5570,12 +6245,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5574 "util/configparser.c" +#line 6249 "util/configparser.c" break; - case 482: -#line 2473 "./util/configparser.y" - { + case 496: +#line 2557 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str))) @@ -5585,12 +6260,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5589 "util/configparser.c" +#line 6264 "util/configparser.c" break; - case 483: -#line 2485 "./util/configparser.y" - { + case 497: +#line 2569 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5602,44 +6277,39 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5606 "util/configparser.c" +#line 6281 "util/configparser.c" break; - case 484: -#line 2499 "./util/configparser.y" - { - int tag_data; - OUTYY(("P(server_edns_client_tag:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - tag_data = atoi((yyvsp[0].str)); - if(tag_data > 65535 || tag_data < 0 || - (tag_data == 0 && (strlen((yyvsp[0].str)) != 1 || (yyvsp[0].str)[0] != '0'))) - yyerror("edns-client-tag data invalid, needs to be a " - "number from 0 to 65535"); + case 498: +#line 2583 "./util/configparser.y" + { + OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( - &cfg_parser->cfg->edns_client_tags, (yyvsp[-1].str), (yyvsp[0].str))) + &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " - "edns-client-tag"); + "edns-client-string"); } -#line 5624 "util/configparser.c" +#line 6293 "util/configparser.c" break; - case 485: -#line 2514 "./util/configparser.y" - { - OUTYY(("P(edns_client_tag_opcode:%s)\n", (yyvsp[0].str))); + case 499: +#line 2592 "./util/configparser.y" + { + OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("option code expected"); else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0) yyerror("option code must be in interval [0, 65535]"); - else cfg_parser->cfg->edns_client_tag_opcode = atoi((yyvsp[0].str)); + else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); } -#line 5638 "util/configparser.c" +#line 6308 "util/configparser.c" break; - case 486: -#line 2525 "./util/configparser.y" - { + case 500: +#line 2604 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) yyerror("stub name override, there must be one name " @@ -5647,56 +6317,56 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5651 "util/configparser.c" +#line 6321 "util/configparser.c" break; - case 487: -#line 2535 "./util/configparser.y" - { + case 501: +#line 2614 "./util/configparser.y" + { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5661 "util/configparser.c" +#line 6331 "util/configparser.c" break; - case 488: -#line 2542 "./util/configparser.y" - { + case 502: +#line 2621 "./util/configparser.y" + { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5671 "util/configparser.c" +#line 6341 "util/configparser.c" break; - case 489: -#line 2549 "./util/configparser.y" - { + case 503: +#line 2628 "./util/configparser.y" + { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5683 "util/configparser.c" +#line 6353 "util/configparser.c" break; - case 490: -#line 2558 "./util/configparser.y" - { + case 504: +#line 2637 "./util/configparser.y" + { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5695 "util/configparser.c" +#line 6365 "util/configparser.c" break; - case 491: -#line 2567 "./util/configparser.y" - { + case 505: +#line 2646 "./util/configparser.y" + { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5704,12 +6374,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5708 "util/configparser.c" +#line 6378 "util/configparser.c" break; - case 492: -#line 2577 "./util/configparser.y" - { + case 506: +#line 2656 "./util/configparser.y" + { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5717,12 +6387,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5721 "util/configparser.c" +#line 6391 "util/configparser.c" break; - case 493: -#line 2587 "./util/configparser.y" - { + case 507: +#line 2666 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) yyerror("forward name override, there must be one " @@ -5730,56 +6400,56 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5734 "util/configparser.c" +#line 6404 "util/configparser.c" break; - case 494: -#line 2597 "./util/configparser.y" - { + case 508: +#line 2676 "./util/configparser.y" + { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5744 "util/configparser.c" +#line 6414 "util/configparser.c" break; - case 495: -#line 2604 "./util/configparser.y" - { + case 509: +#line 2683 "./util/configparser.y" + { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5754 "util/configparser.c" +#line 6424 "util/configparser.c" break; - case 496: -#line 2611 "./util/configparser.y" - { + case 510: +#line 2690 "./util/configparser.y" + { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5766 "util/configparser.c" +#line 6436 "util/configparser.c" break; - case 497: -#line 2620 "./util/configparser.y" - { + case 511: +#line 2699 "./util/configparser.y" + { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5778 "util/configparser.c" +#line 6448 "util/configparser.c" break; - case 498: -#line 2629 "./util/configparser.y" - { + case 512: +#line 2708 "./util/configparser.y" + { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5787,12 +6457,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5791 "util/configparser.c" +#line 6461 "util/configparser.c" break; - case 499: -#line 2639 "./util/configparser.y" - { + case 513: +#line 2718 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) yyerror("auth name override, there must be one name " @@ -5800,53 +6470,53 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5804 "util/configparser.c" +#line 6474 "util/configparser.c" break; - case 500: -#line 2649 "./util/configparser.y" - { + case 514: +#line 2728 "./util/configparser.y" + { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5814 "util/configparser.c" +#line 6484 "util/configparser.c" break; - case 501: -#line 2656 "./util/configparser.y" - { + case 515: +#line 2735 "./util/configparser.y" + { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5824 "util/configparser.c" +#line 6494 "util/configparser.c" break; - case 502: -#line 2663 "./util/configparser.y" - { + case 516: +#line 2742 "./util/configparser.y" + { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5834 "util/configparser.c" +#line 6504 "util/configparser.c" break; - case 503: -#line 2670 "./util/configparser.y" - { + case 517: +#line 2749 "./util/configparser.y" + { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5845 "util/configparser.c" +#line 6515 "util/configparser.c" break; - case 504: -#line 2678 "./util/configparser.y" - { + case 518: +#line 2757 "./util/configparser.y" + { OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5854,12 +6524,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5858 "util/configparser.c" +#line 6528 "util/configparser.c" break; - case 505: -#line 2688 "./util/configparser.y" - { + case 519: +#line 2767 "./util/configparser.y" + { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5867,12 +6537,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5871 "util/configparser.c" +#line 6541 "util/configparser.c" break; - case 506: -#line 2698 "./util/configparser.y" - { + case 520: +#line 2777 "./util/configparser.y" + { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5880,12 +6550,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5884 "util/configparser.c" +#line 6554 "util/configparser.c" break; - case 507: -#line 2708 "./util/configparser.y" - { + case 521: +#line 2787 "./util/configparser.y" + { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5893,12 +6563,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5897 "util/configparser.c" +#line 6567 "util/configparser.c" break; - case 508: -#line 2718 "./util/configparser.y" - { + case 522: +#line 2797 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) yyerror("view name override, there must be one " @@ -5906,12 +6576,12 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5910 "util/configparser.c" +#line 6580 "util/configparser.c" break; - case 509: -#line 2728 "./util/configparser.y" - { + case 523: +#line 2807 "./util/configparser.y" + { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && @@ -5948,12 +6618,12 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5952 "util/configparser.c" +#line 6622 "util/configparser.c" break; - case 510: -#line 2767 "./util/configparser.y" - { + case 524: +#line 2846 "./util/configparser.y" + { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); if(!cfg_str2list_insert( @@ -5961,34 +6631,34 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5965 "util/configparser.c" +#line 6635 "util/configparser.c" break; - case 511: -#line 2777 "./util/configparser.y" - { + case 525: +#line 2856 "./util/configparser.y" + { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5976 "util/configparser.c" +#line 6646 "util/configparser.c" break; - case 512: -#line 2785 "./util/configparser.y" - { + case 526: +#line 2864 "./util/configparser.y" + { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5987 "util/configparser.c" +#line 6657 "util/configparser.c" break; - case 513: -#line 2793 "./util/configparser.y" - { + case 527: +#line 2872 "./util/configparser.y" + { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); ptr = cfg_ptr_reverse((yyvsp[0].str)); @@ -6001,32 +6671,32 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 6005 "util/configparser.c" +#line 6675 "util/configparser.c" break; - case 514: -#line 2808 "./util/configparser.y" - { + case 528: +#line 2887 "./util/configparser.y" + { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6017 "util/configparser.c" +#line 6687 "util/configparser.c" break; - case 515: -#line 2817 "./util/configparser.y" - { + case 529: +#line 2896 "./util/configparser.y" + { OUTYY(("\nP(remote-control:)\n")); } -#line 6025 "util/configparser.c" +#line 6695 "util/configparser.c" break; - case 526: -#line 2828 "./util/configparser.y" - { + case 540: +#line 2907 "./util/configparser.y" + { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6034,104 +6704,104 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6038 "util/configparser.c" +#line 6708 "util/configparser.c" break; - case 527: -#line 2838 "./util/configparser.y" - { + case 541: +#line 2917 "./util/configparser.y" + { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("control port number expected"); else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6050 "util/configparser.c" +#line 6720 "util/configparser.c" break; - case 528: -#line 2847 "./util/configparser.y" - { + case 542: +#line 2926 "./util/configparser.y" + { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6060 "util/configparser.c" +#line 6730 "util/configparser.c" break; - case 529: -#line 2854 "./util/configparser.y" - { + case 543: +#line 2933 "./util/configparser.y" + { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6070 "util/configparser.c" +#line 6740 "util/configparser.c" break; - case 530: -#line 2861 "./util/configparser.y" - { + case 544: +#line 2940 "./util/configparser.y" + { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6080 "util/configparser.c" +#line 6750 "util/configparser.c" break; - case 531: -#line 2868 "./util/configparser.y" - { + case 545: +#line 2947 "./util/configparser.y" + { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6090 "util/configparser.c" +#line 6760 "util/configparser.c" break; - case 532: -#line 2875 "./util/configparser.y" - { + case 546: +#line 2954 "./util/configparser.y" + { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6100 "util/configparser.c" +#line 6770 "util/configparser.c" break; - case 533: -#line 2882 "./util/configparser.y" - { + case 547: +#line 2961 "./util/configparser.y" + { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6110 "util/configparser.c" +#line 6780 "util/configparser.c" break; - case 534: -#line 2889 "./util/configparser.y" - { + case 548: +#line 2968 "./util/configparser.y" + { OUTYY(("\nP(dnstap:)\n")); } -#line 6118 "util/configparser.c" +#line 6788 "util/configparser.c" break; - case 556: -#line 2909 "./util/configparser.y" - { + case 570: +#line 2988 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6130 "util/configparser.c" +#line 6800 "util/configparser.c" break; - case 557: -#line 2918 "./util/configparser.y" - { + case 571: +#line 2997 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6139,128 +6809,128 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6143 "util/configparser.c" +#line 6813 "util/configparser.c" break; - case 558: -#line 2928 "./util/configparser.y" - { + case 572: +#line 3007 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6153 "util/configparser.c" +#line 6823 "util/configparser.c" break; - case 559: -#line 2935 "./util/configparser.y" - { + case 573: +#line 3014 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6163 "util/configparser.c" +#line 6833 "util/configparser.c" break; - case 560: -#line 2942 "./util/configparser.y" - { + case 574: +#line 3021 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6175 "util/configparser.c" +#line 6845 "util/configparser.c" break; - case 561: -#line 2951 "./util/configparser.y" - { + case 575: +#line 3030 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6185 "util/configparser.c" +#line 6855 "util/configparser.c" break; - case 562: -#line 2958 "./util/configparser.y" - { + case 576: +#line 3037 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6195 "util/configparser.c" +#line 6865 "util/configparser.c" break; - case 563: -#line 2965 "./util/configparser.y" - { + case 577: +#line 3044 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6205 "util/configparser.c" +#line 6875 "util/configparser.c" break; - case 564: -#line 2972 "./util/configparser.y" - { + case 578: +#line 3051 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6215 "util/configparser.c" +#line 6885 "util/configparser.c" break; - case 565: -#line 2979 "./util/configparser.y" - { + case 579: +#line 3058 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6227 "util/configparser.c" +#line 6897 "util/configparser.c" break; - case 566: -#line 2988 "./util/configparser.y" - { + case 580: +#line 3067 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6239 "util/configparser.c" +#line 6909 "util/configparser.c" break; - case 567: -#line 2997 "./util/configparser.y" - { + case 581: +#line 3076 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6249 "util/configparser.c" +#line 6919 "util/configparser.c" break; - case 568: -#line 3004 "./util/configparser.y" - { + case 582: +#line 3083 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6259 "util/configparser.c" +#line 6929 "util/configparser.c" break; - case 569: -#line 3011 "./util/configparser.y" - { + case 583: +#line 3090 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6268,12 +6938,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6272 "util/configparser.c" +#line 6942 "util/configparser.c" break; - case 570: -#line 3021 "./util/configparser.y" - { + case 584: +#line 3100 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6281,12 +6951,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6285 "util/configparser.c" +#line 6955 "util/configparser.c" break; - case 571: -#line 3031 "./util/configparser.y" - { + case 585: +#line 3110 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6294,12 +6964,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6298 "util/configparser.c" +#line 6968 "util/configparser.c" break; - case 572: -#line 3041 "./util/configparser.y" - { + case 586: +#line 3120 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6307,12 +6977,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6311 "util/configparser.c" +#line 6981 "util/configparser.c" break; - case 573: -#line 3051 "./util/configparser.y" - { + case 587: +#line 3130 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6320,12 +6990,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6324 "util/configparser.c" +#line 6994 "util/configparser.c" break; - case 574: -#line 3061 "./util/configparser.y" - { + case 588: +#line 3140 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6333,48 +7003,48 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6337 "util/configparser.c" +#line 7007 "util/configparser.c" break; - case 575: -#line 3071 "./util/configparser.y" - { + case 589: +#line 3150 "./util/configparser.y" + { OUTYY(("\nP(python:)\n")); } -#line 6345 "util/configparser.c" +#line 7015 "util/configparser.c" break; - case 579: -#line 3080 "./util/configparser.y" - { + case 593: +#line 3159 "./util/configparser.y" + { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6355 "util/configparser.c" +#line 7025 "util/configparser.c" break; - case 580: -#line 3086 "./util/configparser.y" - { + case 594: +#line 3165 "./util/configparser.y" + { OUTYY(("\nP(dynlib:)\n")); } -#line 6363 "util/configparser.c" +#line 7033 "util/configparser.c" break; - case 584: -#line 3095 "./util/configparser.y" - { + case 598: +#line 3174 "./util/configparser.y" + { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6373 "util/configparser.c" +#line 7043 "util/configparser.c" break; - case 585: -#line 3101 "./util/configparser.y" - { + case 599: +#line 3180 "./util/configparser.y" + { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6382,132 +7052,132 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6386 "util/configparser.c" +#line 7056 "util/configparser.c" break; - case 586: -#line 3111 "./util/configparser.y" - { + case 600: +#line 3190 "./util/configparser.y" + { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6396 "util/configparser.c" +#line 7066 "util/configparser.c" break; - case 587: -#line 3118 "./util/configparser.y" - { + case 601: +#line 3197 "./util/configparser.y" + { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6408 "util/configparser.c" +#line 7078 "util/configparser.c" break; - case 588: -#line 3127 "./util/configparser.y" - { + case 602: +#line 3206 "./util/configparser.y" + { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6419 "util/configparser.c" +#line 7089 "util/configparser.c" break; - case 589: -#line 3135 "./util/configparser.y" - { + case 603: +#line 3214 "./util/configparser.y" + { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6427 "util/configparser.c" +#line 7097 "util/configparser.c" break; - case 602: -#line 3151 "./util/configparser.y" - { + case 616: +#line 3230 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6439 "util/configparser.c" +#line 7109 "util/configparser.c" break; - case 603: -#line 3161 "./util/configparser.y" - { + case 617: +#line 3240 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6451 "util/configparser.c" +#line 7121 "util/configparser.c" break; - case 604: -#line 3170 "./util/configparser.y" - { + case 618: +#line 3249 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6461 "util/configparser.c" +#line 7131 "util/configparser.c" break; - case 605: -#line 3177 "./util/configparser.y" - { + case 619: +#line 3256 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6473 "util/configparser.c" +#line 7143 "util/configparser.c" break; - case 606: -#line 3186 "./util/configparser.y" - { + case 620: +#line 3265 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6483 "util/configparser.c" +#line 7153 "util/configparser.c" break; - case 607: -#line 3193 "./util/configparser.y" - { + case 621: +#line 3272 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6495 "util/configparser.c" +#line 7165 "util/configparser.c" break; - case 608: -#line 3202 "./util/configparser.y" - { + case 622: +#line 3281 "./util/configparser.y" + { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6506 "util/configparser.c" +#line 7176 "util/configparser.c" break; - case 609: -#line 3210 "./util/configparser.y" - { + case 623: +#line 3289 "./util/configparser.y" + { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -6518,23 +7188,23 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6522 "util/configparser.c" +#line 7192 "util/configparser.c" break; - case 610: -#line 3223 "./util/configparser.y" - { + case 624: +#line 3302 "./util/configparser.y" + { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6533 "util/configparser.c" +#line 7203 "util/configparser.c" break; - case 611: -#line 3231 "./util/configparser.y" - { + case 625: +#line 3310 "./util/configparser.y" + { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -6545,20 +7215,20 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6549 "util/configparser.c" +#line 7219 "util/configparser.c" break; - case 612: -#line 3244 "./util/configparser.y" - { + case 626: +#line 3323 "./util/configparser.y" + { OUTYY(("\nP(cachedb:)\n")); } -#line 6557 "util/configparser.c" +#line 7227 "util/configparser.c" break; - case 621: -#line 3255 "./util/configparser.y" - { + case 635: +#line 3334 "./util/configparser.y" + { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_backend); @@ -6568,12 +7238,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6572 "util/configparser.c" +#line 7242 "util/configparser.c" break; - case 622: -#line 3267 "./util/configparser.y" - { + case 636: +#line 3346 "./util/configparser.y" + { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_secret); @@ -6583,12 +7253,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6587 "util/configparser.c" +#line 7257 "util/configparser.c" break; - case 623: -#line 3279 "./util/configparser.y" - { + case 637: +#line 3358 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->redis_server_host); @@ -6598,12 +7268,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6602 "util/configparser.c" +#line 7272 "util/configparser.c" break; - case 624: -#line 3291 "./util/configparser.y" - { + case 638: +#line 3370 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str))); @@ -6616,12 +7286,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6620 "util/configparser.c" +#line 7290 "util/configparser.c" break; - case 625: -#line 3306 "./util/configparser.y" - { + case 639: +#line 3385 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6632,12 +7302,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6636 "util/configparser.c" +#line 7306 "util/configparser.c" break; - case 626: -#line 3319 "./util/configparser.y" - { + case 640: +#line 3398 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6648,12 +7318,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6652 "util/configparser.c" +#line 7322 "util/configparser.c" break; - case 627: -#line 3332 "./util/configparser.y" - { + case 641: +#line 3411 "./util/configparser.y" + { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) yyerror("positive number expected"); @@ -6662,20 +7332,20 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6666 "util/configparser.c" +#line 7336 "util/configparser.c" break; - case 628: -#line 3343 "./util/configparser.y" - { + case 642: +#line 3422 "./util/configparser.y" + { OUTYY(("\nP(ipset:)\n")); } -#line 6674 "util/configparser.c" +#line 7344 "util/configparser.c" break; - case 633: -#line 3352 "./util/configparser.y" - { + case 647: +#line 3431 "./util/configparser.y" + { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->ipset_name_v4) @@ -6688,12 +7358,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6692 "util/configparser.c" +#line 7362 "util/configparser.c" break; - case 634: -#line 3367 "./util/configparser.y" - { + case 648: +#line 3446 "./util/configparser.y" + { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->ipset_name_v6) @@ -6706,11 +7376,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6710 "util/configparser.c" +#line 7380 "util/configparser.c" break; -#line 6714 "util/configparser.c" +#line 7384 "util/configparser.c" default: break; } @@ -6725,11 +7395,10 @@ yyreduce: case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; - YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; @@ -6753,50 +7422,14 @@ yyreduce: yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; -#if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif } - - if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an @@ -6845,13 +7478,14 @@ yyerrorlab: yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ + /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) @@ -6865,7 +7499,7 @@ yyerrlab1: yydestruct ("Error: popping", - yystos[yystate], yyvsp); + YY_ACCESSING_SYMBOL (yystate), yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -6877,7 +7511,7 @@ yyerrlab1: /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -6899,7 +7533,7 @@ yyabortlab: goto yyreturn; -#if !defined yyoverflow || YYERROR_VERBOSE +#if !defined yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -6929,20 +7563,18 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif + return yyresult; } -#line 3381 "./util/configparser.y" + +#line 3460 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 50782ec34..fcbb51ec4 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.6.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -31,8 +31,9 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED @@ -44,315 +45,330 @@ extern int yydebug; #endif -/* Token type. */ +/* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_FORCE_TOPLEVEL = 266, - VAR_SERVER = 267, - VAR_VERBOSITY = 268, - VAR_NUM_THREADS = 269, - VAR_PORT = 270, - VAR_OUTGOING_RANGE = 271, - VAR_INTERFACE = 272, - VAR_PREFER_IP4 = 273, - VAR_DO_IP4 = 274, - VAR_DO_IP6 = 275, - VAR_PREFER_IP6 = 276, - VAR_DO_UDP = 277, - VAR_DO_TCP = 278, - VAR_TCP_MSS = 279, - VAR_OUTGOING_TCP_MSS = 280, - VAR_TCP_IDLE_TIMEOUT = 281, - VAR_EDNS_TCP_KEEPALIVE = 282, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, - VAR_CHROOT = 284, - VAR_USERNAME = 285, - VAR_DIRECTORY = 286, - VAR_LOGFILE = 287, - VAR_PIDFILE = 288, - VAR_MSG_CACHE_SIZE = 289, - VAR_MSG_CACHE_SLABS = 290, - VAR_NUM_QUERIES_PER_THREAD = 291, - VAR_RRSET_CACHE_SIZE = 292, - VAR_RRSET_CACHE_SLABS = 293, - VAR_OUTGOING_NUM_TCP = 294, - VAR_INFRA_HOST_TTL = 295, - VAR_INFRA_LAME_TTL = 296, - VAR_INFRA_CACHE_SLABS = 297, - VAR_INFRA_CACHE_NUMHOSTS = 298, - VAR_INFRA_CACHE_LAME_SIZE = 299, - VAR_NAME = 300, - VAR_STUB_ZONE = 301, - VAR_STUB_HOST = 302, - VAR_STUB_ADDR = 303, - VAR_TARGET_FETCH_POLICY = 304, - VAR_HARDEN_SHORT_BUFSIZE = 305, - VAR_HARDEN_LARGE_QUERIES = 306, - VAR_FORWARD_ZONE = 307, - VAR_FORWARD_HOST = 308, - VAR_FORWARD_ADDR = 309, - VAR_DO_NOT_QUERY_ADDRESS = 310, - VAR_HIDE_IDENTITY = 311, - VAR_HIDE_VERSION = 312, - VAR_IDENTITY = 313, - VAR_VERSION = 314, - VAR_HARDEN_GLUE = 315, - VAR_MODULE_CONF = 316, - VAR_TRUST_ANCHOR_FILE = 317, - VAR_TRUST_ANCHOR = 318, - VAR_VAL_OVERRIDE_DATE = 319, - VAR_BOGUS_TTL = 320, - VAR_VAL_CLEAN_ADDITIONAL = 321, - VAR_VAL_PERMISSIVE_MODE = 322, - VAR_INCOMING_NUM_TCP = 323, - VAR_MSG_BUFFER_SIZE = 324, - VAR_KEY_CACHE_SIZE = 325, - VAR_KEY_CACHE_SLABS = 326, - VAR_TRUSTED_KEYS_FILE = 327, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, - VAR_USE_SYSLOG = 329, - VAR_OUTGOING_INTERFACE = 330, - VAR_ROOT_HINTS = 331, - VAR_DO_NOT_QUERY_LOCALHOST = 332, - VAR_CACHE_MAX_TTL = 333, - VAR_HARDEN_DNSSEC_STRIPPED = 334, - VAR_ACCESS_CONTROL = 335, - VAR_LOCAL_ZONE = 336, - VAR_LOCAL_DATA = 337, - VAR_INTERFACE_AUTOMATIC = 338, - VAR_STATISTICS_INTERVAL = 339, - VAR_DO_DAEMONIZE = 340, - VAR_USE_CAPS_FOR_ID = 341, - VAR_STATISTICS_CUMULATIVE = 342, - VAR_OUTGOING_PORT_PERMIT = 343, - VAR_OUTGOING_PORT_AVOID = 344, - VAR_DLV_ANCHOR_FILE = 345, - VAR_DLV_ANCHOR = 346, - VAR_NEG_CACHE_SIZE = 347, - VAR_HARDEN_REFERRAL_PATH = 348, - VAR_PRIVATE_ADDRESS = 349, - VAR_PRIVATE_DOMAIN = 350, - VAR_REMOTE_CONTROL = 351, - VAR_CONTROL_ENABLE = 352, - VAR_CONTROL_INTERFACE = 353, - VAR_CONTROL_PORT = 354, - VAR_SERVER_KEY_FILE = 355, - VAR_SERVER_CERT_FILE = 356, - VAR_CONTROL_KEY_FILE = 357, - VAR_CONTROL_CERT_FILE = 358, - VAR_CONTROL_USE_CERT = 359, - VAR_EXTENDED_STATISTICS = 360, - VAR_LOCAL_DATA_PTR = 361, - VAR_JOSTLE_TIMEOUT = 362, - VAR_STUB_PRIME = 363, - VAR_UNWANTED_REPLY_THRESHOLD = 364, - VAR_LOG_TIME_ASCII = 365, - VAR_DOMAIN_INSECURE = 366, - VAR_PYTHON = 367, - VAR_PYTHON_SCRIPT = 368, - VAR_VAL_SIG_SKEW_MIN = 369, - VAR_VAL_SIG_SKEW_MAX = 370, - VAR_CACHE_MIN_TTL = 371, - VAR_VAL_LOG_LEVEL = 372, - VAR_AUTO_TRUST_ANCHOR_FILE = 373, - VAR_KEEP_MISSING = 374, - VAR_ADD_HOLDDOWN = 375, - VAR_DEL_HOLDDOWN = 376, - VAR_SO_RCVBUF = 377, - VAR_EDNS_BUFFER_SIZE = 378, - VAR_PREFETCH = 379, - VAR_PREFETCH_KEY = 380, - VAR_SO_SNDBUF = 381, - VAR_SO_REUSEPORT = 382, - VAR_HARDEN_BELOW_NXDOMAIN = 383, - VAR_IGNORE_CD_FLAG = 384, - VAR_LOG_QUERIES = 385, - VAR_LOG_REPLIES = 386, - VAR_LOG_LOCAL_ACTIONS = 387, - VAR_TCP_UPSTREAM = 388, - VAR_SSL_UPSTREAM = 389, - VAR_SSL_SERVICE_KEY = 390, - VAR_SSL_SERVICE_PEM = 391, - VAR_SSL_PORT = 392, - VAR_FORWARD_FIRST = 393, - VAR_STUB_SSL_UPSTREAM = 394, - VAR_FORWARD_SSL_UPSTREAM = 395, - VAR_TLS_CERT_BUNDLE = 396, - VAR_HTTPS_PORT = 397, - VAR_HTTP_ENDPOINT = 398, - VAR_HTTP_MAX_STREAMS = 399, - VAR_HTTP_QUERY_BUFFER_SIZE = 400, - VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, - VAR_HTTP_NODELAY = 402, - VAR_HTTP_NOTLS_DOWNSTREAM = 403, - VAR_STUB_FIRST = 404, - VAR_MINIMAL_RESPONSES = 405, - VAR_RRSET_ROUNDROBIN = 406, - VAR_MAX_UDP_SIZE = 407, - VAR_DELAY_CLOSE = 408, - VAR_UNBLOCK_LAN_ZONES = 409, - VAR_INSECURE_LAN_ZONES = 410, - VAR_INFRA_CACHE_MIN_RTT = 411, - VAR_INFRA_KEEP_PROBING = 412, - VAR_DNS64_PREFIX = 413, - VAR_DNS64_SYNTHALL = 414, - VAR_DNS64_IGNORE_AAAA = 415, - VAR_DNSTAP = 416, - VAR_DNSTAP_ENABLE = 417, - VAR_DNSTAP_SOCKET_PATH = 418, - VAR_DNSTAP_IP = 419, - VAR_DNSTAP_TLS = 420, - VAR_DNSTAP_TLS_SERVER_NAME = 421, - VAR_DNSTAP_TLS_CERT_BUNDLE = 422, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 423, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 424, - VAR_DNSTAP_SEND_IDENTITY = 425, - VAR_DNSTAP_SEND_VERSION = 426, - VAR_DNSTAP_BIDIRECTIONAL = 427, - VAR_DNSTAP_IDENTITY = 428, - VAR_DNSTAP_VERSION = 429, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 430, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 431, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 432, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 433, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 434, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 435, - VAR_RESPONSE_IP_TAG = 436, - VAR_RESPONSE_IP = 437, - VAR_RESPONSE_IP_DATA = 438, - VAR_HARDEN_ALGO_DOWNGRADE = 439, - VAR_IP_TRANSPARENT = 440, - VAR_IP_DSCP = 441, - VAR_DISABLE_DNSSEC_LAME_CHECK = 442, - VAR_IP_RATELIMIT = 443, - VAR_IP_RATELIMIT_SLABS = 444, - VAR_IP_RATELIMIT_SIZE = 445, - VAR_RATELIMIT = 446, - VAR_RATELIMIT_SLABS = 447, - VAR_RATELIMIT_SIZE = 448, - VAR_RATELIMIT_FOR_DOMAIN = 449, - VAR_RATELIMIT_BELOW_DOMAIN = 450, - VAR_IP_RATELIMIT_FACTOR = 451, - VAR_RATELIMIT_FACTOR = 452, - VAR_SEND_CLIENT_SUBNET = 453, - VAR_CLIENT_SUBNET_ZONE = 454, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 455, - VAR_CLIENT_SUBNET_OPCODE = 456, - VAR_MAX_CLIENT_SUBNET_IPV4 = 457, - VAR_MAX_CLIENT_SUBNET_IPV6 = 458, - VAR_MIN_CLIENT_SUBNET_IPV4 = 459, - VAR_MIN_CLIENT_SUBNET_IPV6 = 460, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 461, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 462, - VAR_CAPS_WHITELIST = 463, - VAR_CACHE_MAX_NEGATIVE_TTL = 464, - VAR_PERMIT_SMALL_HOLDDOWN = 465, - VAR_QNAME_MINIMISATION = 466, - VAR_QNAME_MINIMISATION_STRICT = 467, - VAR_IP_FREEBIND = 468, - VAR_DEFINE_TAG = 469, - VAR_LOCAL_ZONE_TAG = 470, - VAR_ACCESS_CONTROL_TAG = 471, - VAR_LOCAL_ZONE_OVERRIDE = 472, - VAR_ACCESS_CONTROL_TAG_ACTION = 473, - VAR_ACCESS_CONTROL_TAG_DATA = 474, - VAR_VIEW = 475, - VAR_ACCESS_CONTROL_VIEW = 476, - VAR_VIEW_FIRST = 477, - VAR_SERVE_EXPIRED = 478, - VAR_SERVE_EXPIRED_TTL = 479, - VAR_SERVE_EXPIRED_TTL_RESET = 480, - VAR_SERVE_EXPIRED_REPLY_TTL = 481, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 482, - VAR_FAKE_DSA = 483, - VAR_FAKE_SHA1 = 484, - VAR_LOG_IDENTITY = 485, - VAR_HIDE_TRUSTANCHOR = 486, - VAR_TRUST_ANCHOR_SIGNALING = 487, - VAR_AGGRESSIVE_NSEC = 488, - VAR_USE_SYSTEMD = 489, - VAR_SHM_ENABLE = 490, - VAR_SHM_KEY = 491, - VAR_ROOT_KEY_SENTINEL = 492, - VAR_DNSCRYPT = 493, - VAR_DNSCRYPT_ENABLE = 494, - VAR_DNSCRYPT_PORT = 495, - VAR_DNSCRYPT_PROVIDER = 496, - VAR_DNSCRYPT_SECRET_KEY = 497, - VAR_DNSCRYPT_PROVIDER_CERT = 498, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 499, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 500, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 501, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 502, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 503, - VAR_IPSECMOD_ENABLED = 504, - VAR_IPSECMOD_HOOK = 505, - VAR_IPSECMOD_IGNORE_BOGUS = 506, - VAR_IPSECMOD_MAX_TTL = 507, - VAR_IPSECMOD_WHITELIST = 508, - VAR_IPSECMOD_STRICT = 509, - VAR_CACHEDB = 510, - VAR_CACHEDB_BACKEND = 511, - VAR_CACHEDB_SECRETSEED = 512, - VAR_CACHEDB_REDISHOST = 513, - VAR_CACHEDB_REDISPORT = 514, - VAR_CACHEDB_REDISTIMEOUT = 515, - VAR_CACHEDB_REDISEXPIRERECORDS = 516, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 517, - VAR_FOR_UPSTREAM = 518, - VAR_AUTH_ZONE = 519, - VAR_ZONEFILE = 520, - VAR_MASTER = 521, - VAR_URL = 522, - VAR_FOR_DOWNSTREAM = 523, - VAR_FALLBACK_ENABLED = 524, - VAR_TLS_ADDITIONAL_PORT = 525, - VAR_LOW_RTT = 526, - VAR_LOW_RTT_PERMIL = 527, - VAR_FAST_SERVER_PERMIL = 528, - VAR_FAST_SERVER_NUM = 529, - VAR_ALLOW_NOTIFY = 530, - VAR_TLS_WIN_CERT = 531, - VAR_TCP_CONNECTION_LIMIT = 532, - VAR_FORWARD_NO_CACHE = 533, - VAR_STUB_NO_CACHE = 534, - VAR_LOG_SERVFAIL = 535, - VAR_DENY_ANY = 536, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 537, - VAR_LOG_TAG_QUERYREPLY = 538, - VAR_STREAM_WAIT_SIZE = 539, - VAR_TLS_CIPHERS = 540, - VAR_TLS_CIPHERSUITES = 541, - VAR_TLS_USE_SNI = 542, - VAR_IPSET = 543, - VAR_IPSET_NAME_V4 = 544, - VAR_IPSET_NAME_V6 = 545, - VAR_TLS_SESSION_TICKET_KEYS = 546, - VAR_RPZ = 547, - VAR_TAGS = 548, - VAR_RPZ_ACTION_OVERRIDE = 549, - VAR_RPZ_CNAME_OVERRIDE = 550, - VAR_RPZ_LOG = 551, - VAR_RPZ_LOG_NAME = 552, - VAR_DYNLIB = 553, - VAR_DYNLIB_FILE = 554, - VAR_EDNS_CLIENT_TAG = 555, - VAR_EDNS_CLIENT_TAG_OPCODE = 556, - VAR_ZONEMD_PERMISSIVE_MODE = 557, - VAR_ZONEMD_REJECT_ABSENCE = 558 + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + SPACE = 258, /* SPACE */ + LETTER = 259, /* LETTER */ + NEWLINE = 260, /* NEWLINE */ + COMMENT = 261, /* COMMENT */ + COLON = 262, /* COLON */ + ANY = 263, /* ANY */ + ZONESTR = 264, /* ZONESTR */ + STRING_ARG = 265, /* STRING_ARG */ + VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */ + VAR_SERVER = 267, /* VAR_SERVER */ + VAR_VERBOSITY = 268, /* VAR_VERBOSITY */ + VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */ + VAR_PORT = 270, /* VAR_PORT */ + VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */ + VAR_INTERFACE = 272, /* VAR_INTERFACE */ + VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */ + VAR_DO_IP4 = 274, /* VAR_DO_IP4 */ + VAR_DO_IP6 = 275, /* VAR_DO_IP6 */ + VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */ + VAR_DO_UDP = 277, /* VAR_DO_UDP */ + VAR_DO_TCP = 278, /* VAR_DO_TCP */ + VAR_TCP_MSS = 279, /* VAR_TCP_MSS */ + VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */ + VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */ + VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */ + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ + VAR_CHROOT = 284, /* VAR_CHROOT */ + VAR_USERNAME = 285, /* VAR_USERNAME */ + VAR_DIRECTORY = 286, /* VAR_DIRECTORY */ + VAR_LOGFILE = 287, /* VAR_LOGFILE */ + VAR_PIDFILE = 288, /* VAR_PIDFILE */ + VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */ + VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */ + VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */ + VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */ + VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */ + VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */ + VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */ + VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */ + VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */ + VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */ + VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */ + VAR_NAME = 300, /* VAR_NAME */ + VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */ + VAR_STUB_HOST = 302, /* VAR_STUB_HOST */ + VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */ + VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */ + VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */ + VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */ + VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */ + VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */ + VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */ + VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */ + VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */ + VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */ + VAR_IDENTITY = 313, /* VAR_IDENTITY */ + VAR_VERSION = 314, /* VAR_VERSION */ + VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */ + VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */ + VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */ + VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */ + VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */ + VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */ + VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */ + VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */ + VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */ + VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */ + VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */ + VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */ + VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */ + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ + VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */ + VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */ + VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */ + VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */ + VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */ + VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */ + VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */ + VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */ + VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */ + VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */ + VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */ + VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */ + VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */ + VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */ + VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */ + VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */ + VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */ + VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */ + VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */ + VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */ + VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */ + VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */ + VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */ + VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */ + VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */ + VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */ + VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */ + VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */ + VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */ + VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */ + VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */ + VAR_EXTENDED_STATISTICS = 360, /* VAR_EXTENDED_STATISTICS */ + VAR_LOCAL_DATA_PTR = 361, /* VAR_LOCAL_DATA_PTR */ + VAR_JOSTLE_TIMEOUT = 362, /* VAR_JOSTLE_TIMEOUT */ + VAR_STUB_PRIME = 363, /* VAR_STUB_PRIME */ + VAR_UNWANTED_REPLY_THRESHOLD = 364, /* VAR_UNWANTED_REPLY_THRESHOLD */ + VAR_LOG_TIME_ASCII = 365, /* VAR_LOG_TIME_ASCII */ + VAR_DOMAIN_INSECURE = 366, /* VAR_DOMAIN_INSECURE */ + VAR_PYTHON = 367, /* VAR_PYTHON */ + VAR_PYTHON_SCRIPT = 368, /* VAR_PYTHON_SCRIPT */ + VAR_VAL_SIG_SKEW_MIN = 369, /* VAR_VAL_SIG_SKEW_MIN */ + VAR_VAL_SIG_SKEW_MAX = 370, /* VAR_VAL_SIG_SKEW_MAX */ + VAR_CACHE_MIN_TTL = 371, /* VAR_CACHE_MIN_TTL */ + VAR_VAL_LOG_LEVEL = 372, /* VAR_VAL_LOG_LEVEL */ + VAR_AUTO_TRUST_ANCHOR_FILE = 373, /* VAR_AUTO_TRUST_ANCHOR_FILE */ + VAR_KEEP_MISSING = 374, /* VAR_KEEP_MISSING */ + VAR_ADD_HOLDDOWN = 375, /* VAR_ADD_HOLDDOWN */ + VAR_DEL_HOLDDOWN = 376, /* VAR_DEL_HOLDDOWN */ + VAR_SO_RCVBUF = 377, /* VAR_SO_RCVBUF */ + VAR_EDNS_BUFFER_SIZE = 378, /* VAR_EDNS_BUFFER_SIZE */ + VAR_PREFETCH = 379, /* VAR_PREFETCH */ + VAR_PREFETCH_KEY = 380, /* VAR_PREFETCH_KEY */ + VAR_SO_SNDBUF = 381, /* VAR_SO_SNDBUF */ + VAR_SO_REUSEPORT = 382, /* VAR_SO_REUSEPORT */ + VAR_HARDEN_BELOW_NXDOMAIN = 383, /* VAR_HARDEN_BELOW_NXDOMAIN */ + VAR_IGNORE_CD_FLAG = 384, /* VAR_IGNORE_CD_FLAG */ + VAR_LOG_QUERIES = 385, /* VAR_LOG_QUERIES */ + VAR_LOG_REPLIES = 386, /* VAR_LOG_REPLIES */ + VAR_LOG_LOCAL_ACTIONS = 387, /* VAR_LOG_LOCAL_ACTIONS */ + VAR_TCP_UPSTREAM = 388, /* VAR_TCP_UPSTREAM */ + VAR_SSL_UPSTREAM = 389, /* VAR_SSL_UPSTREAM */ + VAR_SSL_SERVICE_KEY = 390, /* VAR_SSL_SERVICE_KEY */ + VAR_SSL_SERVICE_PEM = 391, /* VAR_SSL_SERVICE_PEM */ + VAR_SSL_PORT = 392, /* VAR_SSL_PORT */ + VAR_FORWARD_FIRST = 393, /* VAR_FORWARD_FIRST */ + VAR_STUB_SSL_UPSTREAM = 394, /* VAR_STUB_SSL_UPSTREAM */ + VAR_FORWARD_SSL_UPSTREAM = 395, /* VAR_FORWARD_SSL_UPSTREAM */ + VAR_TLS_CERT_BUNDLE = 396, /* VAR_TLS_CERT_BUNDLE */ + VAR_HTTPS_PORT = 397, /* VAR_HTTPS_PORT */ + VAR_HTTP_ENDPOINT = 398, /* VAR_HTTP_ENDPOINT */ + VAR_HTTP_MAX_STREAMS = 399, /* VAR_HTTP_MAX_STREAMS */ + VAR_HTTP_QUERY_BUFFER_SIZE = 400, /* VAR_HTTP_QUERY_BUFFER_SIZE */ + VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ + VAR_HTTP_NODELAY = 402, /* VAR_HTTP_NODELAY */ + VAR_HTTP_NOTLS_DOWNSTREAM = 403, /* VAR_HTTP_NOTLS_DOWNSTREAM */ + VAR_STUB_FIRST = 404, /* VAR_STUB_FIRST */ + VAR_MINIMAL_RESPONSES = 405, /* VAR_MINIMAL_RESPONSES */ + VAR_RRSET_ROUNDROBIN = 406, /* VAR_RRSET_ROUNDROBIN */ + VAR_MAX_UDP_SIZE = 407, /* VAR_MAX_UDP_SIZE */ + VAR_DELAY_CLOSE = 408, /* VAR_DELAY_CLOSE */ + VAR_UDP_CONNECT = 409, /* VAR_UDP_CONNECT */ + VAR_UNBLOCK_LAN_ZONES = 410, /* VAR_UNBLOCK_LAN_ZONES */ + VAR_INSECURE_LAN_ZONES = 411, /* VAR_INSECURE_LAN_ZONES */ + VAR_INFRA_CACHE_MIN_RTT = 412, /* VAR_INFRA_CACHE_MIN_RTT */ + VAR_INFRA_KEEP_PROBING = 413, /* VAR_INFRA_KEEP_PROBING */ + VAR_DNS64_PREFIX = 414, /* VAR_DNS64_PREFIX */ + VAR_DNS64_SYNTHALL = 415, /* VAR_DNS64_SYNTHALL */ + VAR_DNS64_IGNORE_AAAA = 416, /* VAR_DNS64_IGNORE_AAAA */ + VAR_DNSTAP = 417, /* VAR_DNSTAP */ + VAR_DNSTAP_ENABLE = 418, /* VAR_DNSTAP_ENABLE */ + VAR_DNSTAP_SOCKET_PATH = 419, /* VAR_DNSTAP_SOCKET_PATH */ + VAR_DNSTAP_IP = 420, /* VAR_DNSTAP_IP */ + VAR_DNSTAP_TLS = 421, /* VAR_DNSTAP_TLS */ + VAR_DNSTAP_TLS_SERVER_NAME = 422, /* VAR_DNSTAP_TLS_SERVER_NAME */ + VAR_DNSTAP_TLS_CERT_BUNDLE = 423, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ + VAR_DNSTAP_SEND_IDENTITY = 426, /* VAR_DNSTAP_SEND_IDENTITY */ + VAR_DNSTAP_SEND_VERSION = 427, /* VAR_DNSTAP_SEND_VERSION */ + VAR_DNSTAP_BIDIRECTIONAL = 428, /* VAR_DNSTAP_BIDIRECTIONAL */ + VAR_DNSTAP_IDENTITY = 429, /* VAR_DNSTAP_IDENTITY */ + VAR_DNSTAP_VERSION = 430, /* VAR_DNSTAP_VERSION */ + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ + VAR_RESPONSE_IP_TAG = 437, /* VAR_RESPONSE_IP_TAG */ + VAR_RESPONSE_IP = 438, /* VAR_RESPONSE_IP */ + VAR_RESPONSE_IP_DATA = 439, /* VAR_RESPONSE_IP_DATA */ + VAR_HARDEN_ALGO_DOWNGRADE = 440, /* VAR_HARDEN_ALGO_DOWNGRADE */ + VAR_IP_TRANSPARENT = 441, /* VAR_IP_TRANSPARENT */ + VAR_IP_DSCP = 442, /* VAR_IP_DSCP */ + VAR_DISABLE_DNSSEC_LAME_CHECK = 443, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ + VAR_IP_RATELIMIT = 444, /* VAR_IP_RATELIMIT */ + VAR_IP_RATELIMIT_SLABS = 445, /* VAR_IP_RATELIMIT_SLABS */ + VAR_IP_RATELIMIT_SIZE = 446, /* VAR_IP_RATELIMIT_SIZE */ + VAR_RATELIMIT = 447, /* VAR_RATELIMIT */ + VAR_RATELIMIT_SLABS = 448, /* VAR_RATELIMIT_SLABS */ + VAR_RATELIMIT_SIZE = 449, /* VAR_RATELIMIT_SIZE */ + VAR_RATELIMIT_FOR_DOMAIN = 450, /* VAR_RATELIMIT_FOR_DOMAIN */ + VAR_RATELIMIT_BELOW_DOMAIN = 451, /* VAR_RATELIMIT_BELOW_DOMAIN */ + VAR_IP_RATELIMIT_FACTOR = 452, /* VAR_IP_RATELIMIT_FACTOR */ + VAR_RATELIMIT_FACTOR = 453, /* VAR_RATELIMIT_FACTOR */ + VAR_SEND_CLIENT_SUBNET = 454, /* VAR_SEND_CLIENT_SUBNET */ + VAR_CLIENT_SUBNET_ZONE = 455, /* VAR_CLIENT_SUBNET_ZONE */ + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + VAR_CLIENT_SUBNET_OPCODE = 457, /* VAR_CLIENT_SUBNET_OPCODE */ + VAR_MAX_CLIENT_SUBNET_IPV4 = 458, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + VAR_MAX_CLIENT_SUBNET_IPV6 = 459, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + VAR_MIN_CLIENT_SUBNET_IPV4 = 460, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + VAR_MIN_CLIENT_SUBNET_IPV6 = 461, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + VAR_CAPS_WHITELIST = 464, /* VAR_CAPS_WHITELIST */ + VAR_CACHE_MAX_NEGATIVE_TTL = 465, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + VAR_PERMIT_SMALL_HOLDDOWN = 466, /* VAR_PERMIT_SMALL_HOLDDOWN */ + VAR_QNAME_MINIMISATION = 467, /* VAR_QNAME_MINIMISATION */ + VAR_QNAME_MINIMISATION_STRICT = 468, /* VAR_QNAME_MINIMISATION_STRICT */ + VAR_IP_FREEBIND = 469, /* VAR_IP_FREEBIND */ + VAR_DEFINE_TAG = 470, /* VAR_DEFINE_TAG */ + VAR_LOCAL_ZONE_TAG = 471, /* VAR_LOCAL_ZONE_TAG */ + VAR_ACCESS_CONTROL_TAG = 472, /* VAR_ACCESS_CONTROL_TAG */ + VAR_LOCAL_ZONE_OVERRIDE = 473, /* VAR_LOCAL_ZONE_OVERRIDE */ + VAR_ACCESS_CONTROL_TAG_ACTION = 474, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + VAR_ACCESS_CONTROL_TAG_DATA = 475, /* VAR_ACCESS_CONTROL_TAG_DATA */ + VAR_VIEW = 476, /* VAR_VIEW */ + VAR_ACCESS_CONTROL_VIEW = 477, /* VAR_ACCESS_CONTROL_VIEW */ + VAR_VIEW_FIRST = 478, /* VAR_VIEW_FIRST */ + VAR_SERVE_EXPIRED = 479, /* VAR_SERVE_EXPIRED */ + VAR_SERVE_EXPIRED_TTL = 480, /* VAR_SERVE_EXPIRED_TTL */ + VAR_SERVE_EXPIRED_TTL_RESET = 481, /* VAR_SERVE_EXPIRED_TTL_RESET */ + VAR_SERVE_EXPIRED_REPLY_TTL = 482, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + VAR_SERVE_ORIGINAL_TTL = 484, /* VAR_SERVE_ORIGINAL_TTL */ + VAR_FAKE_DSA = 485, /* VAR_FAKE_DSA */ + VAR_FAKE_SHA1 = 486, /* VAR_FAKE_SHA1 */ + VAR_LOG_IDENTITY = 487, /* VAR_LOG_IDENTITY */ + VAR_HIDE_TRUSTANCHOR = 488, /* VAR_HIDE_TRUSTANCHOR */ + VAR_TRUST_ANCHOR_SIGNALING = 489, /* VAR_TRUST_ANCHOR_SIGNALING */ + VAR_AGGRESSIVE_NSEC = 490, /* VAR_AGGRESSIVE_NSEC */ + VAR_USE_SYSTEMD = 491, /* VAR_USE_SYSTEMD */ + VAR_SHM_ENABLE = 492, /* VAR_SHM_ENABLE */ + VAR_SHM_KEY = 493, /* VAR_SHM_KEY */ + VAR_ROOT_KEY_SENTINEL = 494, /* VAR_ROOT_KEY_SENTINEL */ + VAR_DNSCRYPT = 495, /* VAR_DNSCRYPT */ + VAR_DNSCRYPT_ENABLE = 496, /* VAR_DNSCRYPT_ENABLE */ + VAR_DNSCRYPT_PORT = 497, /* VAR_DNSCRYPT_PORT */ + VAR_DNSCRYPT_PROVIDER = 498, /* VAR_DNSCRYPT_PROVIDER */ + VAR_DNSCRYPT_SECRET_KEY = 499, /* VAR_DNSCRYPT_SECRET_KEY */ + VAR_DNSCRYPT_PROVIDER_CERT = 500, /* VAR_DNSCRYPT_PROVIDER_CERT */ + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 501, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 502, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 503, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 504, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 505, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + VAR_PAD_RESPONSES = 506, /* VAR_PAD_RESPONSES */ + VAR_PAD_RESPONSES_BLOCK_SIZE = 507, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ + VAR_PAD_QUERIES = 508, /* VAR_PAD_QUERIES */ + VAR_PAD_QUERIES_BLOCK_SIZE = 509, /* VAR_PAD_QUERIES_BLOCK_SIZE */ + VAR_IPSECMOD_ENABLED = 510, /* VAR_IPSECMOD_ENABLED */ + VAR_IPSECMOD_HOOK = 511, /* VAR_IPSECMOD_HOOK */ + VAR_IPSECMOD_IGNORE_BOGUS = 512, /* VAR_IPSECMOD_IGNORE_BOGUS */ + VAR_IPSECMOD_MAX_TTL = 513, /* VAR_IPSECMOD_MAX_TTL */ + VAR_IPSECMOD_WHITELIST = 514, /* VAR_IPSECMOD_WHITELIST */ + VAR_IPSECMOD_STRICT = 515, /* VAR_IPSECMOD_STRICT */ + VAR_CACHEDB = 516, /* VAR_CACHEDB */ + VAR_CACHEDB_BACKEND = 517, /* VAR_CACHEDB_BACKEND */ + VAR_CACHEDB_SECRETSEED = 518, /* VAR_CACHEDB_SECRETSEED */ + VAR_CACHEDB_REDISHOST = 519, /* VAR_CACHEDB_REDISHOST */ + VAR_CACHEDB_REDISPORT = 520, /* VAR_CACHEDB_REDISPORT */ + VAR_CACHEDB_REDISTIMEOUT = 521, /* VAR_CACHEDB_REDISTIMEOUT */ + VAR_CACHEDB_REDISEXPIRERECORDS = 522, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 523, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + VAR_FOR_UPSTREAM = 524, /* VAR_FOR_UPSTREAM */ + VAR_AUTH_ZONE = 525, /* VAR_AUTH_ZONE */ + VAR_ZONEFILE = 526, /* VAR_ZONEFILE */ + VAR_MASTER = 527, /* VAR_MASTER */ + VAR_URL = 528, /* VAR_URL */ + VAR_FOR_DOWNSTREAM = 529, /* VAR_FOR_DOWNSTREAM */ + VAR_FALLBACK_ENABLED = 530, /* VAR_FALLBACK_ENABLED */ + VAR_TLS_ADDITIONAL_PORT = 531, /* VAR_TLS_ADDITIONAL_PORT */ + VAR_LOW_RTT = 532, /* VAR_LOW_RTT */ + VAR_LOW_RTT_PERMIL = 533, /* VAR_LOW_RTT_PERMIL */ + VAR_FAST_SERVER_PERMIL = 534, /* VAR_FAST_SERVER_PERMIL */ + VAR_FAST_SERVER_NUM = 535, /* VAR_FAST_SERVER_NUM */ + VAR_ALLOW_NOTIFY = 536, /* VAR_ALLOW_NOTIFY */ + VAR_TLS_WIN_CERT = 537, /* VAR_TLS_WIN_CERT */ + VAR_TCP_CONNECTION_LIMIT = 538, /* VAR_TCP_CONNECTION_LIMIT */ + VAR_FORWARD_NO_CACHE = 539, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 540, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 541, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 542, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 543, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 544, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 545, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 546, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 547, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 548, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 549, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 550, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 551, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 552, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 553, /* VAR_RPZ */ + VAR_TAGS = 554, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 555, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 556, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 557, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 558, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 559, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 560, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 561, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 562, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 563, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 564, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_REJECT_ABSENCE = 565 /* VAR_ZONEMD_REJECT_ABSENCE */ }; + typedef enum yytokentype yytoken_kind_t; #endif -/* Tokens. */ +/* Token kinds. */ +#define YYEOF 0 +#define YYerror 256 +#define YYUNDEF 257 #define SPACE 258 #define LETTER 259 #define NEWLINE 260 @@ -504,156 +520,163 @@ extern int yydebug; #define VAR_RRSET_ROUNDROBIN 406 #define VAR_MAX_UDP_SIZE 407 #define VAR_DELAY_CLOSE 408 -#define VAR_UNBLOCK_LAN_ZONES 409 -#define VAR_INSECURE_LAN_ZONES 410 -#define VAR_INFRA_CACHE_MIN_RTT 411 -#define VAR_INFRA_KEEP_PROBING 412 -#define VAR_DNS64_PREFIX 413 -#define VAR_DNS64_SYNTHALL 414 -#define VAR_DNS64_IGNORE_AAAA 415 -#define VAR_DNSTAP 416 -#define VAR_DNSTAP_ENABLE 417 -#define VAR_DNSTAP_SOCKET_PATH 418 -#define VAR_DNSTAP_IP 419 -#define VAR_DNSTAP_TLS 420 -#define VAR_DNSTAP_TLS_SERVER_NAME 421 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 422 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 423 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 424 -#define VAR_DNSTAP_SEND_IDENTITY 425 -#define VAR_DNSTAP_SEND_VERSION 426 -#define VAR_DNSTAP_BIDIRECTIONAL 427 -#define VAR_DNSTAP_IDENTITY 428 -#define VAR_DNSTAP_VERSION 429 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 430 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 431 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 432 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 433 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 434 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 435 -#define VAR_RESPONSE_IP_TAG 436 -#define VAR_RESPONSE_IP 437 -#define VAR_RESPONSE_IP_DATA 438 -#define VAR_HARDEN_ALGO_DOWNGRADE 439 -#define VAR_IP_TRANSPARENT 440 -#define VAR_IP_DSCP 441 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 442 -#define VAR_IP_RATELIMIT 443 -#define VAR_IP_RATELIMIT_SLABS 444 -#define VAR_IP_RATELIMIT_SIZE 445 -#define VAR_RATELIMIT 446 -#define VAR_RATELIMIT_SLABS 447 -#define VAR_RATELIMIT_SIZE 448 -#define VAR_RATELIMIT_FOR_DOMAIN 449 -#define VAR_RATELIMIT_BELOW_DOMAIN 450 -#define VAR_IP_RATELIMIT_FACTOR 451 -#define VAR_RATELIMIT_FACTOR 452 -#define VAR_SEND_CLIENT_SUBNET 453 -#define VAR_CLIENT_SUBNET_ZONE 454 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 455 -#define VAR_CLIENT_SUBNET_OPCODE 456 -#define VAR_MAX_CLIENT_SUBNET_IPV4 457 -#define VAR_MAX_CLIENT_SUBNET_IPV6 458 -#define VAR_MIN_CLIENT_SUBNET_IPV4 459 -#define VAR_MIN_CLIENT_SUBNET_IPV6 460 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 461 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 462 -#define VAR_CAPS_WHITELIST 463 -#define VAR_CACHE_MAX_NEGATIVE_TTL 464 -#define VAR_PERMIT_SMALL_HOLDDOWN 465 -#define VAR_QNAME_MINIMISATION 466 -#define VAR_QNAME_MINIMISATION_STRICT 467 -#define VAR_IP_FREEBIND 468 -#define VAR_DEFINE_TAG 469 -#define VAR_LOCAL_ZONE_TAG 470 -#define VAR_ACCESS_CONTROL_TAG 471 -#define VAR_LOCAL_ZONE_OVERRIDE 472 -#define VAR_ACCESS_CONTROL_TAG_ACTION 473 -#define VAR_ACCESS_CONTROL_TAG_DATA 474 -#define VAR_VIEW 475 -#define VAR_ACCESS_CONTROL_VIEW 476 -#define VAR_VIEW_FIRST 477 -#define VAR_SERVE_EXPIRED 478 -#define VAR_SERVE_EXPIRED_TTL 479 -#define VAR_SERVE_EXPIRED_TTL_RESET 480 -#define VAR_SERVE_EXPIRED_REPLY_TTL 481 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 482 -#define VAR_FAKE_DSA 483 -#define VAR_FAKE_SHA1 484 -#define VAR_LOG_IDENTITY 485 -#define VAR_HIDE_TRUSTANCHOR 486 -#define VAR_TRUST_ANCHOR_SIGNALING 487 -#define VAR_AGGRESSIVE_NSEC 488 -#define VAR_USE_SYSTEMD 489 -#define VAR_SHM_ENABLE 490 -#define VAR_SHM_KEY 491 -#define VAR_ROOT_KEY_SENTINEL 492 -#define VAR_DNSCRYPT 493 -#define VAR_DNSCRYPT_ENABLE 494 -#define VAR_DNSCRYPT_PORT 495 -#define VAR_DNSCRYPT_PROVIDER 496 -#define VAR_DNSCRYPT_SECRET_KEY 497 -#define VAR_DNSCRYPT_PROVIDER_CERT 498 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 499 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 500 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 501 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 502 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 503 -#define VAR_IPSECMOD_ENABLED 504 -#define VAR_IPSECMOD_HOOK 505 -#define VAR_IPSECMOD_IGNORE_BOGUS 506 -#define VAR_IPSECMOD_MAX_TTL 507 -#define VAR_IPSECMOD_WHITELIST 508 -#define VAR_IPSECMOD_STRICT 509 -#define VAR_CACHEDB 510 -#define VAR_CACHEDB_BACKEND 511 -#define VAR_CACHEDB_SECRETSEED 512 -#define VAR_CACHEDB_REDISHOST 513 -#define VAR_CACHEDB_REDISPORT 514 -#define VAR_CACHEDB_REDISTIMEOUT 515 -#define VAR_CACHEDB_REDISEXPIRERECORDS 516 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 517 -#define VAR_FOR_UPSTREAM 518 -#define VAR_AUTH_ZONE 519 -#define VAR_ZONEFILE 520 -#define VAR_MASTER 521 -#define VAR_URL 522 -#define VAR_FOR_DOWNSTREAM 523 -#define VAR_FALLBACK_ENABLED 524 -#define VAR_TLS_ADDITIONAL_PORT 525 -#define VAR_LOW_RTT 526 -#define VAR_LOW_RTT_PERMIL 527 -#define VAR_FAST_SERVER_PERMIL 528 -#define VAR_FAST_SERVER_NUM 529 -#define VAR_ALLOW_NOTIFY 530 -#define VAR_TLS_WIN_CERT 531 -#define VAR_TCP_CONNECTION_LIMIT 532 -#define VAR_FORWARD_NO_CACHE 533 -#define VAR_STUB_NO_CACHE 534 -#define VAR_LOG_SERVFAIL 535 -#define VAR_DENY_ANY 536 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 537 -#define VAR_LOG_TAG_QUERYREPLY 538 -#define VAR_STREAM_WAIT_SIZE 539 -#define VAR_TLS_CIPHERS 540 -#define VAR_TLS_CIPHERSUITES 541 -#define VAR_TLS_USE_SNI 542 -#define VAR_IPSET 543 -#define VAR_IPSET_NAME_V4 544 -#define VAR_IPSET_NAME_V6 545 -#define VAR_TLS_SESSION_TICKET_KEYS 546 -#define VAR_RPZ 547 -#define VAR_TAGS 548 -#define VAR_RPZ_ACTION_OVERRIDE 549 -#define VAR_RPZ_CNAME_OVERRIDE 550 -#define VAR_RPZ_LOG 551 -#define VAR_RPZ_LOG_NAME 552 -#define VAR_DYNLIB 553 -#define VAR_DYNLIB_FILE 554 -#define VAR_EDNS_CLIENT_TAG 555 -#define VAR_EDNS_CLIENT_TAG_OPCODE 556 -#define VAR_ZONEMD_PERMISSIVE_MODE 557 -#define VAR_ZONEMD_REJECT_ABSENCE 558 +#define VAR_UDP_CONNECT 409 +#define VAR_UNBLOCK_LAN_ZONES 410 +#define VAR_INSECURE_LAN_ZONES 411 +#define VAR_INFRA_CACHE_MIN_RTT 412 +#define VAR_INFRA_KEEP_PROBING 413 +#define VAR_DNS64_PREFIX 414 +#define VAR_DNS64_SYNTHALL 415 +#define VAR_DNS64_IGNORE_AAAA 416 +#define VAR_DNSTAP 417 +#define VAR_DNSTAP_ENABLE 418 +#define VAR_DNSTAP_SOCKET_PATH 419 +#define VAR_DNSTAP_IP 420 +#define VAR_DNSTAP_TLS 421 +#define VAR_DNSTAP_TLS_SERVER_NAME 422 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 423 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425 +#define VAR_DNSTAP_SEND_IDENTITY 426 +#define VAR_DNSTAP_SEND_VERSION 427 +#define VAR_DNSTAP_BIDIRECTIONAL 428 +#define VAR_DNSTAP_IDENTITY 429 +#define VAR_DNSTAP_VERSION 430 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436 +#define VAR_RESPONSE_IP_TAG 437 +#define VAR_RESPONSE_IP 438 +#define VAR_RESPONSE_IP_DATA 439 +#define VAR_HARDEN_ALGO_DOWNGRADE 440 +#define VAR_IP_TRANSPARENT 441 +#define VAR_IP_DSCP 442 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 443 +#define VAR_IP_RATELIMIT 444 +#define VAR_IP_RATELIMIT_SLABS 445 +#define VAR_IP_RATELIMIT_SIZE 446 +#define VAR_RATELIMIT 447 +#define VAR_RATELIMIT_SLABS 448 +#define VAR_RATELIMIT_SIZE 449 +#define VAR_RATELIMIT_FOR_DOMAIN 450 +#define VAR_RATELIMIT_BELOW_DOMAIN 451 +#define VAR_IP_RATELIMIT_FACTOR 452 +#define VAR_RATELIMIT_FACTOR 453 +#define VAR_SEND_CLIENT_SUBNET 454 +#define VAR_CLIENT_SUBNET_ZONE 455 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456 +#define VAR_CLIENT_SUBNET_OPCODE 457 +#define VAR_MAX_CLIENT_SUBNET_IPV4 458 +#define VAR_MAX_CLIENT_SUBNET_IPV6 459 +#define VAR_MIN_CLIENT_SUBNET_IPV4 460 +#define VAR_MIN_CLIENT_SUBNET_IPV6 461 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 462 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 463 +#define VAR_CAPS_WHITELIST 464 +#define VAR_CACHE_MAX_NEGATIVE_TTL 465 +#define VAR_PERMIT_SMALL_HOLDDOWN 466 +#define VAR_QNAME_MINIMISATION 467 +#define VAR_QNAME_MINIMISATION_STRICT 468 +#define VAR_IP_FREEBIND 469 +#define VAR_DEFINE_TAG 470 +#define VAR_LOCAL_ZONE_TAG 471 +#define VAR_ACCESS_CONTROL_TAG 472 +#define VAR_LOCAL_ZONE_OVERRIDE 473 +#define VAR_ACCESS_CONTROL_TAG_ACTION 474 +#define VAR_ACCESS_CONTROL_TAG_DATA 475 +#define VAR_VIEW 476 +#define VAR_ACCESS_CONTROL_VIEW 477 +#define VAR_VIEW_FIRST 478 +#define VAR_SERVE_EXPIRED 479 +#define VAR_SERVE_EXPIRED_TTL 480 +#define VAR_SERVE_EXPIRED_TTL_RESET 481 +#define VAR_SERVE_EXPIRED_REPLY_TTL 482 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483 +#define VAR_SERVE_ORIGINAL_TTL 484 +#define VAR_FAKE_DSA 485 +#define VAR_FAKE_SHA1 486 +#define VAR_LOG_IDENTITY 487 +#define VAR_HIDE_TRUSTANCHOR 488 +#define VAR_TRUST_ANCHOR_SIGNALING 489 +#define VAR_AGGRESSIVE_NSEC 490 +#define VAR_USE_SYSTEMD 491 +#define VAR_SHM_ENABLE 492 +#define VAR_SHM_KEY 493 +#define VAR_ROOT_KEY_SENTINEL 494 +#define VAR_DNSCRYPT 495 +#define VAR_DNSCRYPT_ENABLE 496 +#define VAR_DNSCRYPT_PORT 497 +#define VAR_DNSCRYPT_PROVIDER 498 +#define VAR_DNSCRYPT_SECRET_KEY 499 +#define VAR_DNSCRYPT_PROVIDER_CERT 500 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 501 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 502 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 503 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 504 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 505 +#define VAR_PAD_RESPONSES 506 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 507 +#define VAR_PAD_QUERIES 508 +#define VAR_PAD_QUERIES_BLOCK_SIZE 509 +#define VAR_IPSECMOD_ENABLED 510 +#define VAR_IPSECMOD_HOOK 511 +#define VAR_IPSECMOD_IGNORE_BOGUS 512 +#define VAR_IPSECMOD_MAX_TTL 513 +#define VAR_IPSECMOD_WHITELIST 514 +#define VAR_IPSECMOD_STRICT 515 +#define VAR_CACHEDB 516 +#define VAR_CACHEDB_BACKEND 517 +#define VAR_CACHEDB_SECRETSEED 518 +#define VAR_CACHEDB_REDISHOST 519 +#define VAR_CACHEDB_REDISPORT 520 +#define VAR_CACHEDB_REDISTIMEOUT 521 +#define VAR_CACHEDB_REDISEXPIRERECORDS 522 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 523 +#define VAR_FOR_UPSTREAM 524 +#define VAR_AUTH_ZONE 525 +#define VAR_ZONEFILE 526 +#define VAR_MASTER 527 +#define VAR_URL 528 +#define VAR_FOR_DOWNSTREAM 529 +#define VAR_FALLBACK_ENABLED 530 +#define VAR_TLS_ADDITIONAL_PORT 531 +#define VAR_LOW_RTT 532 +#define VAR_LOW_RTT_PERMIL 533 +#define VAR_FAST_SERVER_PERMIL 534 +#define VAR_FAST_SERVER_NUM 535 +#define VAR_ALLOW_NOTIFY 536 +#define VAR_TLS_WIN_CERT 537 +#define VAR_TCP_CONNECTION_LIMIT 538 +#define VAR_FORWARD_NO_CACHE 539 +#define VAR_STUB_NO_CACHE 540 +#define VAR_LOG_SERVFAIL 541 +#define VAR_DENY_ANY 542 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 543 +#define VAR_LOG_TAG_QUERYREPLY 544 +#define VAR_STREAM_WAIT_SIZE 545 +#define VAR_TLS_CIPHERS 546 +#define VAR_TLS_CIPHERSUITES 547 +#define VAR_TLS_USE_SNI 548 +#define VAR_IPSET 549 +#define VAR_IPSET_NAME_V4 550 +#define VAR_IPSET_NAME_V6 551 +#define VAR_TLS_SESSION_TICKET_KEYS 552 +#define VAR_RPZ 553 +#define VAR_TAGS 554 +#define VAR_RPZ_ACTION_OVERRIDE 555 +#define VAR_RPZ_CNAME_OVERRIDE 556 +#define VAR_RPZ_LOG 557 +#define VAR_RPZ_LOG_NAME 558 +#define VAR_DYNLIB 559 +#define VAR_DYNLIB_FILE 560 +#define VAR_EDNS_CLIENT_STRING 561 +#define VAR_EDNS_CLIENT_STRING_OPCODE 562 +#define VAR_NSID 563 +#define VAR_ZONEMD_PERMISSIVE_MODE 564 +#define VAR_ZONEMD_REJECT_ABSENCE 565 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -663,7 +686,7 @@ union YYSTYPE char* str; -#line 667 "util/configparser.h" +#line 690 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 4f808723f..10f5ac1c4 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -116,7 +116,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE %token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN -%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE +%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES %token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_KEEP_PROBING %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA @@ -151,7 +151,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_SERVE_EXPIRED_TTL %token VAR_SERVE_EXPIRED_TTL_RESET VAR_SERVE_EXPIRED_REPLY_TTL -%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_FAKE_DSA +%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA %token VAR_FAKE_SHA1 VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR %token VAR_TRUST_ANCHOR_SIGNALING VAR_AGGRESSIVE_NSEC VAR_USE_SYSTEMD %token VAR_SHM_ENABLE VAR_SHM_KEY VAR_ROOT_KEY_SENTINEL @@ -162,6 +162,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS %token VAR_DNSCRYPT_NONCE_CACHE_SIZE %token VAR_DNSCRYPT_NONCE_CACHE_SLABS +%token VAR_PAD_RESPONSES VAR_PAD_RESPONSES_BLOCK_SIZE +%token VAR_PAD_QUERIES VAR_PAD_QUERIES_BLOCK_SIZE %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED @@ -178,7 +180,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME -%token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_TAG VAR_EDNS_CLIENT_TAG_OPCODE +%token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING +%token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID %token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_REJECT_ABSENCE %% @@ -252,7 +255,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_http_query_buffer_size | server_http_response_buffer_size | server_http_nodelay | server_http_notls_downstream | server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | - server_so_reuseport | server_delay_close | + server_so_reuseport | server_delay_close | server_udp_connect | server_unblock_lan_zones | server_insecure_lan_zones | server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | server_infra_cache_min_rtt | server_harden_algo_downgrade | @@ -274,10 +277,14 @@ content_server: server_num_threads | server_verbosity | server_port | server_disable_dnssec_lame_check | server_access_control_tag | server_local_zone_override | server_access_control_tag_action | server_access_control_tag_data | server_access_control_view | - server_qname_minimisation_strict | server_serve_expired | + server_qname_minimisation_strict | + server_pad_responses | server_pad_responses_block_size | + server_pad_queries | server_pad_queries_block_size | + server_serve_expired | server_serve_expired_ttl | server_serve_expired_ttl_reset | server_serve_expired_reply_ttl | server_serve_expired_client_timeout | - server_fake_dsa | server_log_identity | server_use_systemd | + server_serve_original_ttl | server_fake_dsa | + server_log_identity | server_use_systemd | server_response_ip_tag | server_response_ip | server_response_ip_data | server_shm_enable | server_shm_key | server_fake_sha1 | server_hide_trustanchor | server_trust_anchor_signaling | @@ -292,8 +299,9 @@ content_server: server_num_threads | server_verbosity | server_port | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | - server_tls_use_sni | server_edns_client_tag | - server_edns_client_tag_opcode | server_zonemd_permissive_mode + server_tls_use_sni | server_edns_client_string | + server_edns_client_string_opcode | server_nsid | + server_zonemd_permissive_mode ; stubstart: VAR_STUB_ZONE { @@ -1305,6 +1313,22 @@ server_version: VAR_VERSION STRING_ARG cfg_parser->cfg->version = $2; } ; +server_nsid: VAR_NSID STRING_ARG + { + OUTYY(("P(server_nsid:%s)\n", $2)); + free(cfg_parser->cfg->nsid_cfg_str); + cfg_parser->cfg->nsid_cfg_str = $2; + free(cfg_parser->cfg->nsid); + cfg_parser->cfg->nsid = NULL; + cfg_parser->cfg->nsid_len = 0; + if (*$2 == 0) + ; /* pass; empty string is not setting nsid */ + else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( + $2, &cfg_parser->cfg->nsid_len))) + yyerror("the NSID must be either a hex string or an " + "ascii character string prepended with ascii_."); + } + ; server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG { OUTYY(("P(server_so_rcvbuf:%s)\n", $2)); @@ -1445,6 +1469,15 @@ server_delay_close: VAR_DELAY_CLOSE STRING_ARG free($2); } ; +server_udp_connect: VAR_UDP_CONNECT STRING_ARG + { + OUTYY(("P(server_udp_connect:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->udp_connect = (strcmp($2, "yes")==0); + free($2); + } + ; server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG { OUTYY(("P(server_unblock_lan_zones:%s)\n", $2)); @@ -1905,6 +1938,15 @@ server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG free($2); } ; +server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG + { + OUTYY(("P(server_serve_original_ttl:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_original_ttl = (strcmp($2, "yes")==0); + free($2); + } + ; server_fake_dsa: VAR_FAKE_DSA STRING_ARG { OUTYY(("P(server_fake_dsa:%s)\n", $2)); @@ -2031,6 +2073,9 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG && strcmp($3, "always_transparent")!=0 && strcmp($3, "always_refuse")!=0 && strcmp($3, "always_nxdomain")!=0 + && strcmp($3, "always_nodata")!=0 + && strcmp($3, "always_deny")!=0 + && strcmp($3, "always_null")!=0 && strcmp($3, "noview")!=0 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0 && strcmp($3, "inform_redirect") != 0 @@ -2039,8 +2084,9 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "inform_redirect, always_transparent, " - "always_refuse, always_nxdomain, noview " - ", nodefault or ipset"); + "always_refuse, always_nxdomain, " + "always_nodata, always_deny, always_null, " + "noview, nodefault or ipset"); free($2); free($3); } else if(strcmp($3, "nodefault")==0) { @@ -2417,6 +2463,44 @@ server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG free($2); } ; +server_pad_responses: VAR_PAD_RESPONSES STRING_ARG + { + OUTYY(("P(server_pad_responses:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_responses = + (strcmp($2, "yes")==0); + free($2); + } + ; +server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG + { + OUTYY(("P(server_pad_responses_block_size:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_responses_block_size = atoi($2); + free($2); + } + ; +server_pad_queries: VAR_PAD_QUERIES STRING_ARG + { + OUTYY(("P(server_pad_queries:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_queries = + (strcmp($2, "yes")==0); + free($2); + } + ; +server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG + { + OUTYY(("P(server_pad_queries_block_size:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_queries_block_size = atoi($2); + free($2); + } + ; server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG { #ifdef USE_IPSECMOD @@ -2495,29 +2579,24 @@ server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG #endif } ; -server_edns_client_tag: VAR_EDNS_CLIENT_TAG STRING_ARG STRING_ARG +server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG { - int tag_data; - OUTYY(("P(server_edns_client_tag:%s %s)\n", $2, $3)); - tag_data = atoi($3); - if(tag_data > 65535 || tag_data < 0 || - (tag_data == 0 && (strlen($3) != 1 || $3[0] != '0'))) - yyerror("edns-client-tag data invalid, needs to be a " - "number from 0 to 65535"); + OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3)); if(!cfg_str2list_insert( - &cfg_parser->cfg->edns_client_tags, $2, $3)) + &cfg_parser->cfg->edns_client_strings, $2, $3)) fatal_exit("out of memory adding " - "edns-client-tag"); + "edns-client-string"); } ; -server_edns_client_tag_opcode: VAR_EDNS_CLIENT_TAG_OPCODE STRING_ARG +server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG { - OUTYY(("P(edns_client_tag_opcode:%s)\n", $2)); + OUTYY(("P(edns_client_string_opcode:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("option code expected"); else if(atoi($2) > 65535 || atoi($2) < 0) yyerror("option code must be in interval [0, 65535]"); - else cfg_parser->cfg->edns_client_tag_opcode = atoi($2); + else cfg_parser->cfg->edns_client_string_opcode = atoi($2); + free($2); } ; diff --git a/util/configyyrename.h b/util/configyyrename.h index f529be577..8c7ff5b5c 100644 --- a/util/configyyrename.h +++ b/util/configyyrename.h @@ -84,5 +84,11 @@ #define yyget_leng ub_c_get_leng #define yylineno ub_c_lineno #define yyget_text ub_c_get_text +#define yyss ub_c_ss +#define yysslim ub_c_sslim +#define yyssp ub_c_ssp +#define yystacksize ub_c_stacksize +#define yyvs ub_c_vs +#define yyvsp ub_c_vsp #endif /* UTIL_CONFIGYYRENAME_H */ diff --git a/util/data/msgencode.c b/util/data/msgencode.c index 1746cfbb8..5f297b551 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -454,6 +454,7 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, size_t i, j, owner_pos; int r, owner_labs; uint16_t owner_ptr = 0; + time_t adjust = 0; struct packed_rrset_data* data = (struct packed_rrset_data*) key->entry.data; @@ -464,9 +465,12 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, owner_labs = dname_count_labels(key->rk.dname); owner_pos = sldns_buffer_position(pkt); - /* For an rrset with a fixed TTL, use the rrset's TTL as given */ + /** Determine relative time adjustment for TTL values. + * For an rrset with a fixed TTL, use the rrset's TTL as given. */ if((key->rk.flags & PACKED_RRSET_FIXEDTTL) != 0) - timenow = 0; + adjust = 0; + else + adjust = SERVE_ORIGINAL_TTL ? data->ttl_add : timenow; if(do_data) { const sldns_rr_descriptor* c = type_rdata_compressable(key); @@ -479,11 +483,10 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, return r; sldns_buffer_write(pkt, &key->rk.type, 2); sldns_buffer_write(pkt, &key->rk.rrset_class, 2); - if(data->rr_ttl[j] < timenow) + if(data->rr_ttl[j] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); - else sldns_buffer_write_u32(pkt, - data->rr_ttl[j]-timenow); + else sldns_buffer_write_u32(pkt, data->rr_ttl[j]-adjust); if(c) { if((r=compress_rdata(pkt, data->rr_data[j], data->rr_len[j], region, tree, c)) @@ -517,11 +520,10 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, } sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_RRSIG); sldns_buffer_write(pkt, &key->rk.rrset_class, 2); - if(data->rr_ttl[i] < timenow) + if(data->rr_ttl[i] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); - else sldns_buffer_write_u32(pkt, - data->rr_ttl[i]-timenow); + else sldns_buffer_write_u32(pkt, data->rr_ttl[i]-adjust); /* rrsig rdata cannot be compressed, perform 100+ byte * memcopy. */ sldns_buffer_write(pkt, data->rr_data[i], @@ -801,14 +803,14 @@ calc_edns_field_size(struct edns_data* edns) return 1 + 2 + 2 + 4 + 2 + rdatalen; } -void -attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) +static void +attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns, + uint16_t max_msg_sz) { size_t len; size_t rdatapos; struct edns_option* opt; - if(!edns || !edns->edns_present) - return; + struct edns_option* padding_option = NULL; /* inc additional count */ sldns_buffer_write_u16_at(pkt, 10, sldns_buffer_read_u16_at(pkt, 10) + 1); @@ -826,17 +828,52 @@ attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) sldns_buffer_write_u16(pkt, 0); /* rdatalen */ /* write rdata */ for(opt=edns->opt_list; opt; opt=opt->next) { + if (opt->opt_code == LDNS_EDNS_PADDING) { + padding_option = opt; + continue; + } sldns_buffer_write_u16(pkt, opt->opt_code); sldns_buffer_write_u16(pkt, opt->opt_len); if(opt->opt_len != 0) sldns_buffer_write(pkt, opt->opt_data, opt->opt_len); } + if (padding_option && edns->padding_block_size ) { + size_t pad_pos = sldns_buffer_position(pkt); + size_t msg_sz = ((pad_pos + 3) / edns->padding_block_size + 1) + * edns->padding_block_size; + size_t pad_sz; + + if (msg_sz > max_msg_sz) + msg_sz = max_msg_sz; + + /* By use of calc_edns_field_size, calling functions should + * have made sure that there is enough space for at least a + * zero sized padding option. + */ + log_assert(pad_pos + 4 <= msg_sz); + + pad_sz = msg_sz - pad_pos - 4; + sldns_buffer_write_u16(pkt, LDNS_EDNS_PADDING); + sldns_buffer_write_u16(pkt, pad_sz); + if (pad_sz) { + memset(sldns_buffer_current(pkt), 0, pad_sz); + sldns_buffer_skip(pkt, pad_sz); + } + } if(edns->opt_list) sldns_buffer_write_u16_at(pkt, rdatapos, sldns_buffer_position(pkt)-rdatapos-2); sldns_buffer_flip(pkt); } +void +attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) +{ + if(!edns || !edns->edns_present) + return; + attach_edns_record_max_msg_sz(pkt, edns, edns->udp_size); +} + int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, uint16_t id, uint16_t qflags, sldns_buffer* pkt, time_t timenow, @@ -885,7 +922,7 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, } if(attach_edns && sldns_buffer_capacity(pkt) >= sldns_buffer_limit(pkt)+attach_edns) - attach_edns_record(pkt, edns); + attach_edns_record_max_msg_sz(pkt, edns, udpsize+attach_edns); return 1; } diff --git a/util/data/msgparse.c b/util/data/msgparse.c index 7c32618a3..6ee5559db 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -1020,6 +1020,7 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns, edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]); edns->udp_size = ntohs(found->rrset_class); edns->opt_list = NULL; + edns->padding_block_size = 0; /* take the options */ rdata_len = found->rr_first->size-2; @@ -1093,6 +1094,7 @@ parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns, edns->edns_version = sldns_buffer_read_u8(pkt); edns->bits = sldns_buffer_read_u16(pkt); edns->opt_list = NULL; + edns->padding_block_size = 0; /* take the options */ rdata_len = sldns_buffer_read_u16(pkt); diff --git a/util/data/msgparse.h b/util/data/msgparse.h index fd04f9f6f..d2fd9c806 100644 --- a/util/data/msgparse.h +++ b/util/data/msgparse.h @@ -87,6 +87,8 @@ extern time_t SERVE_EXPIRED_TTL; extern time_t SERVE_EXPIRED_REPLY_TTL; /** Negative cache time (for entries without any RRs.) */ #define NORR_TTL 5 /* seconds */ +/** If we serve the original TTL or decrementing TTLs */ +extern int SERVE_ORIGINAL_TTL; /** * Data stored in scratch pad memory during parsing. @@ -225,6 +227,8 @@ struct edns_data { uint16_t udp_size; /** rdata element list, or NULL if none */ struct edns_option* opt_list; + /** block size to pad */ + uint16_t padding_block_size; }; /** diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 927bf09a2..4830b343f 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -67,6 +67,8 @@ int SERVE_EXPIRED = 0; time_t SERVE_EXPIRED_TTL = 0; /** TTL to use for expired records */ time_t SERVE_EXPIRED_REPLY_TTL = 30; +/** If we serve the original TTL or decrementing TTLs */ +int SERVE_ORIGINAL_TTL = 0; /** allocate qinfo, return 0 on error */ static int @@ -197,9 +199,9 @@ rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to, if(*rr_ttl > MAX_NEG_TTL) *rr_ttl = MAX_NEG_TTL; } - if(*rr_ttl < MIN_TTL) + if(!SERVE_ORIGINAL_TTL && (*rr_ttl < MIN_TTL)) *rr_ttl = MIN_TTL; - if(*rr_ttl > MAX_TTL) + if(!SERVE_ORIGINAL_TTL && (*rr_ttl > MAX_TTL)) *rr_ttl = MAX_TTL; if(*rr_ttl < data->ttl) data->ttl = *rr_ttl; @@ -321,8 +323,8 @@ parse_create_rrset(sldns_buffer* pkt, struct rrset_parse* pset, (sizeof(size_t)+sizeof(uint8_t*)+sizeof(time_t)) + pset->size; if(region) - *data = regional_alloc(region, s); - else *data = malloc(s); + *data = regional_alloc_zero(region, s); + else *data = calloc(1, s); if(!*data) return 0; /* copy & decompress */ @@ -526,6 +528,7 @@ reply_info_set_ttls(struct reply_info* rep, time_t timenow) for(j=0; jcount + data->rrsig_count; j++) { data->rr_ttl[j] += timenow; } + data->ttl_add = timenow; } } @@ -1035,7 +1038,8 @@ static int inplace_cb_reply_call_generic( struct inplace_cb* callback_list, enum inplace_cb_list_type type, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region) + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time) { struct inplace_cb* cb; struct edns_option* opt_list_out = NULL; @@ -1048,7 +1052,7 @@ static int inplace_cb_reply_call_generic( fptr_ok(fptr_whitelist_inplace_cb_reply_generic( (inplace_cb_reply_func_type*)cb->cb, type)); (void)(*(inplace_cb_reply_func_type*)cb->cb)(qinfo, qstate, rep, - rcode, edns, &opt_list_out, repinfo, region, cb->id, cb->cb_arg); + rcode, edns, &opt_list_out, repinfo, region, start_time, cb->id, cb->cb_arg); } edns->opt_list = opt_list_out; return 1; @@ -1056,37 +1060,41 @@ static int inplace_cb_reply_call_generic( int inplace_cb_reply_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, - struct edns_data* edns, struct comm_reply* repinfo, struct regional* region) + struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time) { return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply], inplace_cb_reply, qinfo, - qstate, rep, rcode, edns, repinfo, region); + qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_reply_cache_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region) + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time) { return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply_cache], inplace_cb_reply_cache, - qinfo, qstate, rep, rcode, edns, repinfo, region); + qinfo, qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_reply_local_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region) + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time) { return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply_local], inplace_cb_reply_local, - qinfo, qstate, rep, rcode, edns, repinfo, region); + qinfo, qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_reply_servfail_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region) + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time) { /* We are going to servfail. Remove any potential edns options. */ if(qstate) @@ -1094,7 +1102,7 @@ int inplace_cb_reply_servfail_call(struct module_env* env, return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply_servfail], inplace_cb_reply_servfail, qinfo, qstate, rep, rcode, edns, repinfo, - region); + region, start_time); } int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo, diff --git a/util/data/msgreply.h b/util/data/msgreply.h index 385780268..c6b220ed8 100644 --- a/util/data/msgreply.h +++ b/util/data/msgreply.h @@ -554,11 +554,14 @@ struct edns_option* edns_opt_list_find(struct edns_option* list, uint16_t code); * @param edns: edns data of the reply. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. + * @param start_time: the start time of recursion, when the packet arrived, + * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, - struct edns_data* edns, struct comm_reply* repinfo, struct regional* region); + struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time); /** * Call the registered functions in the inplace_cb_reply_cache linked list. @@ -571,12 +574,15 @@ int inplace_cb_reply_call(struct module_env* env, struct query_info* qinfo, * @param edns: edns data of the reply. Edns input can be found here. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. + * @param start_time: the start time of recursion, when the packet arrived, + * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_cache_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time); /** * Call the registered functions in the inplace_cb_reply_local linked list. @@ -589,12 +595,15 @@ int inplace_cb_reply_cache_call(struct module_env* env, * @param edns: edns data of the reply. Edns input can be found here. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. + * @param start_time: the start time of recursion, when the packet arrived, + * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_local_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time); /** * Call the registered functions in the inplace_cb_reply linked list. @@ -608,12 +617,15 @@ int inplace_cb_reply_local_call(struct module_env* env, * is NULL. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. + * @param start_time: the start time of recursion, when the packet arrived, + * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_servfail_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, - struct comm_reply* repinfo, struct regional* region); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time); /** * Call the registered functions in the inplace_cb_query linked list. diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 4b0294f97..e1a0833a2 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -220,6 +220,7 @@ packed_rrset_ttl_add(struct packed_rrset_data* data, time_t add) { size_t i; size_t total = data->count + data->rrsig_count; + data->ttl_add = add; data->ttl += add; for(i=0; irr_ttl[i] += add; @@ -275,6 +276,7 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, entry.data; uint8_t rr[65535]; size_t rlen = rrset->rk.dname_len + 2 + 2 + 4 + d->rr_len[i]; + time_t adjust = 0; log_assert(dest_len > 0 && dest); if(rlen > dest_len) { dest[0] = 0; @@ -285,8 +287,10 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, memmove(rr+rrset->rk.dname_len, &rrset->rk.type, 2); else sldns_write_uint16(rr+rrset->rk.dname_len, LDNS_RR_TYPE_RRSIG); memmove(rr+rrset->rk.dname_len+2, &rrset->rk.rrset_class, 2); + adjust = SERVE_ORIGINAL_TTL ? d->ttl_add : now; + if (d->rr_ttl[i] < adjust) adjust = d->rr_ttl[i]; /* Prevent negative TTL overflow */ sldns_write_uint32(rr+rrset->rk.dname_len+4, - (uint32_t)(d->rr_ttl[i]-now)); + (uint32_t)(d->rr_ttl[i]-adjust)); memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]); if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) { log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest); @@ -332,6 +336,7 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key, struct packed_rrset_data* data = (struct packed_rrset_data*) key->entry.data; size_t dsize, i; + time_t adjust = 0; if(!ck) return NULL; ck->id = key->id; @@ -350,14 +355,16 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key, ck->entry.data = d; packed_rrset_ptr_fixup(d); /* make TTLs relative - once per rrset */ + adjust = SERVE_ORIGINAL_TTL ? data->ttl_add : now; for(i=0; icount + d->rrsig_count; i++) { - if(d->rr_ttl[i] < now) + if(d->rr_ttl[i] < adjust) d->rr_ttl[i] = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; - else d->rr_ttl[i] -= now; + else d->rr_ttl[i] -= adjust; } - if(d->ttl < now) + if(d->ttl < adjust) d->ttl = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; - else d->ttl -= now; + else d->ttl -= adjust; + d->ttl_add = 0; /* TTLs have been made relative */ return ck; } diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index 729877bab..ff95c0af0 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -233,6 +233,9 @@ enum sec_status { * the ttl value to send changes due to time. */ struct packed_rrset_data { + /** Timestamp added to TTLs in the packed data. + * Needed to support serving original TTLs. */ + time_t ttl_add; /** TTL (in seconds like time()) of the rrset. * Same for all RRs see rfc2181(5.2). */ time_t ttl; diff --git a/util/edns.c b/util/edns.c index c83a4a545..84308449c 100644 --- a/util/edns.c +++ b/util/edns.c @@ -48,81 +48,84 @@ #include "util/data/msgparse.h" #include "util/data/msgreply.h" -struct edns_tags* edns_tags_create(void) +struct edns_strings* edns_strings_create(void) { - struct edns_tags* edns_tags = calloc(1, sizeof(struct edns_tags)); - if(!edns_tags) + struct edns_strings* edns_strings = calloc(1, + sizeof(struct edns_strings)); + if(!edns_strings) return NULL; - if(!(edns_tags->region = regional_create())) { - edns_tags_delete(edns_tags); + if(!(edns_strings->region = regional_create())) { + edns_strings_delete(edns_strings); return NULL; } - return edns_tags; + return edns_strings; } -void edns_tags_delete(struct edns_tags* edns_tags) +void edns_strings_delete(struct edns_strings* edns_strings) { - if(!edns_tags) + if(!edns_strings) return; - regional_destroy(edns_tags->region); - free(edns_tags); + regional_destroy(edns_strings->region); + free(edns_strings); } static int -edns_tags_client_insert(struct edns_tags* edns_tags, +edns_strings_client_insert(struct edns_strings* edns_strings, struct sockaddr_storage* addr, socklen_t addrlen, int net, - uint16_t tag_data) + const char* string) { - struct edns_tag_addr* eta = regional_alloc_zero(edns_tags->region, - sizeof(struct edns_tag_addr)); - if(!eta) + struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region, + sizeof(struct edns_string_addr)); + if(!esa) return 0; - eta->tag_data = tag_data; - if(!addr_tree_insert(&edns_tags->client_tags, &eta->node, addr, addrlen, - net)) { - verbose(VERB_QUERY, "duplicate EDNS client tag ignored."); + esa->string_len = strlen(string); + esa->string = regional_alloc_init(edns_strings->region, string, + esa->string_len); + if(!esa->string) + return 0; + if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr, + addrlen, net)) { + verbose(VERB_QUERY, "duplicate EDNS client string ignored."); } return 1; } -int edns_tags_apply_cfg(struct edns_tags* edns_tags, +int edns_strings_apply_cfg(struct edns_strings* edns_strings, struct config_file* config) { struct config_str2list* c; - regional_free_all(edns_tags->region); - addr_tree_init(&edns_tags->client_tags); + regional_free_all(edns_strings->region); + addr_tree_init(&edns_strings->client_strings); - for(c=config->edns_client_tags; c; c=c->next) { + for(c=config->edns_client_strings; c; c=c->next) { struct sockaddr_storage addr; socklen_t addrlen; int net; - uint16_t tag_data; log_assert(c->str && c->str2); if(!netblockstrtoaddr(c->str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { - log_err("cannot parse EDNS client tag IP netblock: %s", - c->str); + log_err("cannot parse EDNS client string IP netblock: " + "%s", c->str); return 0; } - tag_data = atoi(c->str2); /* validated in config parser */ - if(!edns_tags_client_insert(edns_tags, &addr, addrlen, net, - tag_data)) { - log_err("out of memory while adding EDNS tags"); + if(!edns_strings_client_insert(edns_strings, &addr, addrlen, + net, c->str2)) { + log_err("out of memory while adding EDNS strings"); return 0; } } - edns_tags->client_tag_opcode = config->edns_client_tag_opcode; + edns_strings->client_string_opcode = config->edns_client_string_opcode; - addr_tree_init_parents(&edns_tags->client_tags); + addr_tree_init_parents(&edns_strings->client_strings); return 1; } -struct edns_tag_addr* -edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, +struct edns_string_addr* +edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen) { - return (struct edns_tag_addr*)addr_tree_lookup(tree, addr, addrlen); + return (struct edns_string_addr*)addr_tree_lookup(tree, addr, addrlen); } static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in, @@ -157,5 +160,21 @@ int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in, !edns_keepalive(edns_out, edns_in, c, region)) return 0; + if (cfg->nsid && edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_NSID) + && !edns_opt_list_append(&edns_out->opt_list, + LDNS_EDNS_NSID, cfg->nsid_len, cfg->nsid, region)) + return 0; + + if(!cfg->pad_responses || c->type != comm_tcp || !c->ssl + || !edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_PADDING)) { + ; /* pass */ + } + + else if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_PADDING + , 0, NULL, region)) + return 0; + else + edns_out->padding_block_size = cfg->pad_responses_block_size; + return 1; } diff --git a/util/edns.h b/util/edns.h index cf9f8707e..11742eb5b 100644 --- a/util/edns.h +++ b/util/edns.h @@ -50,58 +50,60 @@ struct comm_point; struct regional; /** - * Structure containing all EDNS tags. + * Structure containing all EDNS strings. */ -struct edns_tags { - /** Tree of EDNS client tags to use in upstream queries, per address - * prefix. Contains nodes of type edns_tag_addr. */ - rbtree_type client_tags; - /** EDNS opcode to use for client tags */ - uint16_t client_tag_opcode; +struct edns_strings { + /** Tree of EDNS client strings to use in upstream queries, per address + * prefix. Contains nodes of type edns_string_addr. */ + rbtree_type client_strings; + /** EDNS opcode to use for client strings */ + uint16_t client_string_opcode; /** region to allocate tree nodes in */ struct regional* region; }; /** - * EDNS tag. Node of rbtree, containing tag and prefix. + * EDNS string. Node of rbtree, containing string and prefix. */ -struct edns_tag_addr { +struct edns_string_addr { /** node in address tree, used for tree lookups. Need to be the first * member of this struct. */ struct addr_tree_node node; - /** tag data, in host byte ordering */ - uint16_t tag_data; + /** string, ascii format */ + uint8_t* string; + /** length of string */ + size_t string_len; }; /** - * Create structure to hold EDNS tags - * @return: newly created edns_tags, NULL on alloc failure. + * Create structure to hold EDNS strings + * @return: newly created edns_strings, NULL on alloc failure. */ -struct edns_tags* edns_tags_create(void); +struct edns_strings* edns_strings_create(void); -/** Delete EDNS tags structure - * @param edns_tags: struct to delete +/** Delete EDNS strings structure + * @param edns_strings: struct to delete */ -void edns_tags_delete(struct edns_tags* edns_tags); +void edns_strings_delete(struct edns_strings* edns_strings); /** - * Add configured EDNS tags - * @param edns_tags: edns tags to apply config to - * @param config: struct containing EDNS tags configuration + * Add configured EDNS strings + * @param edns_strings: edns strings to apply config to + * @param config: struct containing EDNS strings configuration * @return 0 on error */ -int edns_tags_apply_cfg(struct edns_tags* edns_tags, +int edns_strings_apply_cfg(struct edns_strings* edns_strings, struct config_file* config); /** - * Find tag for address. - * @param tree: tree containing EDNS tags per address prefix. + * Find string for address. + * @param tree: tree containing EDNS strings per address prefix. * @param addr: address to use for tree lookup * @param addrlen: length of address * @return: matching tree node, NULL otherwise */ -struct edns_tag_addr* -edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, +struct edns_string_addr* +edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen); /** diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 1469e8213..2b01e533c 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -229,6 +229,8 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) else if(fptr == &fwd_cmp) return 1; else if(fptr == &pending_cmp) return 1; else if(fptr == &serviced_cmp) return 1; + else if(fptr == &reuse_cmp) return 1; + else if(fptr == &reuse_id_cmp) return 1; else if(fptr == &name_tree_compare) return 1; else if(fptr == &order_lock_cmp) return 1; else if(fptr == &codeline_cmp) return 1; diff --git a/util/iana_ports.inc b/util/iana_ports.inc index fa25869d3..875851e6a 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -2014,6 +2014,7 @@ 2368, 2370, 2372, +2378, 2381, 2382, 2383, @@ -3574,7 +3575,6 @@ 3977, 3978, 3979, -3980, 3981, 3982, 3983, @@ -5290,6 +5290,7 @@ 22005, 22273, 22305, +22333, 22335, 22343, 22347, diff --git a/util/module.h b/util/module.h index 1eed21300..81a31a9cc 100644 --- a/util/module.h +++ b/util/module.h @@ -257,8 +257,8 @@ struct inplace_cb { typedef int inplace_cb_reply_func_type(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, - struct comm_reply* repinfo, struct regional* region, int id, - void* callback); + struct comm_reply* repinfo, struct regional* region, + struct timeval* start_time, int id, void* callback); /** * Inplace callback function called before sending the query to a nameserver. @@ -520,8 +520,8 @@ struct module_env { struct edns_known_option* edns_known_options; /* Number of known edns options */ size_t edns_known_options_num; - /** EDNS client tag information */ - struct edns_tags* edns_tags; + /** EDNS client string information */ + struct edns_strings* edns_strings; /* Make every mesh state unique, do not aggregate mesh states. */ int unique_mesh; diff --git a/util/net_help.c b/util/net_help.c index c5216bc2d..3b5527adf 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -321,7 +321,7 @@ static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, struct sockaddr_storage* addr, socklen_t* addrlen, int* af) { uint8_t* ia; - size_t dnamelabs = dname_count_labels(dname); + int dnamelabs = dname_count_labels(dname); uint8_t lablen; char* e = NULL; int z = 0; diff --git a/util/netevent.c b/util/netevent.c index 2428417fa..a2c0e6073 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -333,7 +333,7 @@ int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen) /* send a UDP reply */ int comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, - struct sockaddr* addr, socklen_t addrlen) + struct sockaddr* addr, socklen_t addrlen, int is_connected) { ssize_t sent; log_assert(c->fd != -1); @@ -342,9 +342,14 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, log_err("error: send empty UDP packet"); #endif log_assert(addr && addrlen > 0); - sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), - sldns_buffer_remaining(packet), 0, - addr, addrlen); + if(!is_connected) { + sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0, + addr, addrlen); + } else { + sent = send(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0); + } if(sent == -1) { /* try again and block, waiting for IO to complete, * we want to send the answer, and we will wait for @@ -362,9 +367,14 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, #endif int e; fd_set_block(c->fd); - sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), - sldns_buffer_remaining(packet), 0, - addr, addrlen); + if (!is_connected) { + sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0, + addr, addrlen); + } else { + sent = send(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0); + } e = errno; fd_set_nonblock(c->fd); errno = e; @@ -373,9 +383,14 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, if(sent == -1) { if(!udp_send_errno_needs_log(addr, addrlen)) return 0; - verbose(VERB_OPS, "sendto failed: %s", sock_strerror(errno)); - log_addr(VERB_OPS, "remote address is", - (struct sockaddr_storage*)addr, addrlen); + if (!is_connected) { + verbose(VERB_OPS, "sendto failed: %s", sock_strerror(errno)); + } else { + verbose(VERB_OPS, "send failed: %s", sock_strerror(errno)); + } + if(addr) + log_addr(VERB_OPS, "remote address is", + (struct sockaddr_storage*)addr, addrlen); return 0; } else if((size_t)sent != sldns_buffer_remaining(packet)) { log_err("sent %d in place of %d bytes", @@ -574,6 +589,41 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_SENDMSG */ } +/** return true is UDP receive error needs to be logged */ +static int udp_recv_needs_log(int err) +{ + switch(err) { + case EACCES: /* some hosts send ICMP 'Permission Denied' */ +#ifndef USE_WINSOCK + case ECONNREFUSED: +# ifdef ENETUNREACH + case ENETUNREACH: +# endif +# ifdef EHOSTDOWN + case EHOSTDOWN: +# endif +# ifdef EHOSTUNREACH + case EHOSTUNREACH: +# endif +# ifdef ENETDOWN + case ENETDOWN: +# endif +#else /* USE_WINSOCK */ + case WSAECONNREFUSED: + case WSAENETUNREACH: + case WSAEHOSTDOWN: + case WSAEHOSTUNREACH: + case WSAENETDOWN: +#endif + if(verbosity >= VERB_ALGO) + return 1; + return 0; + default: + break; + } + return 1; +} + void comm_point_udp_ancil_callback(int fd, short event, void* arg) { @@ -616,7 +666,8 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) msg.msg_flags = 0; rcv = recvmsg(fd, &msg, 0); if(rcv == -1) { - if(errno != EAGAIN && errno != EINTR) { + if(errno != EAGAIN && errno != EINTR + && udp_recv_needs_log(errno)) { log_err("recvmsg failed: %s", strerror(errno)); } return; @@ -697,13 +748,15 @@ comm_point_udp_callback(int fd, short event, void* arg) (struct sockaddr*)&rep.addr, &rep.addrlen); if(rcv == -1) { #ifndef USE_WINSOCK - if(errno != EAGAIN && errno != EINTR) + if(errno != EAGAIN && errno != EINTR + && udp_recv_needs_log(errno)) log_err("recvfrom %d failed: %s", fd, strerror(errno)); #else if(WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAECONNRESET && - WSAGetLastError()!= WSAEWOULDBLOCK) + WSAGetLastError()!= WSAEWOULDBLOCK && + udp_recv_needs_log(WSAGetLastError())) log_err("recvfrom failed: %s", wsa_strerror(WSAGetLastError())); #endif @@ -721,7 +774,7 @@ comm_point_udp_callback(int fd, short event, void* arg) buffer = rep.c->buffer; #endif (void)comm_point_send_udp_msg(rep.c, buffer, - (struct sockaddr*)&rep.addr, rep.addrlen); + (struct sockaddr*)&rep.addr, rep.addrlen, 0); } 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. */ @@ -729,6 +782,13 @@ comm_point_udp_callback(int fd, short event, void* arg) } } +int adjusted_tcp_timeout(struct comm_point* c) +{ + if(c->tcp_timeout_msec < TCP_QUERY_TIMEOUT_MINIMUM) + return TCP_QUERY_TIMEOUT_MINIMUM; + return c->tcp_timeout_msec; +} + /** Use a new tcp handler for new query fd, set to read query */ static void setup_tcp_handler(struct comm_point* c, int fd, int cur, int max) @@ -762,10 +822,7 @@ setup_tcp_handler(struct comm_point* c, int fd, int cur, int max) c->tcp_timeout_msec /= 500; else if (handler_usage > 80) c->tcp_timeout_msec = 0; - comm_point_start_listening(c, fd, - c->tcp_timeout_msec < TCP_QUERY_TIMEOUT_MINIMUM - ? TCP_QUERY_TIMEOUT_MINIMUM - : c->tcp_timeout_msec); + comm_point_start_listening(c, fd, adjusted_tcp_timeout(c)); } void comm_base_handle_slow_accept(int ATTR_UNUSED(fd), @@ -1050,6 +1107,8 @@ reclaim_tcp_handler(struct comm_point* c) comm_point_start_listening(c->tcp_parent, -1, -1); } } + c->tcp_more_read_again = NULL; + c->tcp_more_write_again = NULL; } /** do the callback when writing is done */ @@ -1057,16 +1116,28 @@ static void tcp_callback_writer(struct comm_point* c) { log_assert(c->type == comm_tcp); - sldns_buffer_clear(c->buffer); + if(!c->tcp_write_and_read) { + sldns_buffer_clear(c->buffer); + c->tcp_byte_count = 0; + } if(c->tcp_do_toggle_rw) c->tcp_is_reading = 1; - c->tcp_byte_count = 0; /* switch from listening(write) to listening(read) */ 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, c->tcp_timeout_msec); + if(c->tcp_write_and_read) { + fptr_ok(fptr_whitelist_comm_point(c->callback)); + if( (*c->callback)(c, c->cb_arg, NETEVENT_PKT_WRITTEN, + &c->repinfo) ) { + comm_point_start_listening(c, -1, + adjusted_tcp_timeout(c)); + } + } else { + comm_point_start_listening(c, -1, + adjusted_tcp_timeout(c)); + } } } @@ -1086,7 +1157,8 @@ tcp_callback_reader(struct comm_point* c) 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); + comm_point_start_listening(c, -1, + adjusted_tcp_timeout(c)); } } } @@ -1369,10 +1441,28 @@ ssl_handle_write(struct comm_point* c) } /* ignore return, if fails we may simply block */ (void)SSL_set_mode(c->ssl, (long)SSL_MODE_ENABLE_PARTIAL_WRITE); - if(c->tcp_byte_count < sizeof(uint16_t)) { - uint16_t len = htons(sldns_buffer_limit(c->buffer)); + if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) { + uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(c->buffer)); ERR_clear_error(); - if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) < + if(c->tcp_write_and_read) { + if(c->tcp_write_pkt_len + 2 < LDNS_RR_BUF_SIZE) { + /* combine the tcp length and the query for + * write, this emulates writev */ + uint8_t buf[LDNS_RR_BUF_SIZE]; + memmove(buf, &len, sizeof(uint16_t)); + memmove(buf+sizeof(uint16_t), + c->tcp_write_pkt, + c->tcp_write_pkt_len); + r = SSL_write(c->ssl, + (void*)(buf+c->tcp_write_byte_count), + c->tcp_write_pkt_len + 2 - + c->tcp_write_byte_count); + } else { + r = SSL_write(c->ssl, + (void*)(((uint8_t*)&len)+c->tcp_write_byte_count), + (int)(sizeof(uint16_t)-c->tcp_write_byte_count)); + } + } else if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) < LDNS_RR_BUF_SIZE) { /* combine the tcp length and the query for write, * this emulates writev */ @@ -1414,20 +1504,32 @@ ssl_handle_write(struct comm_point* c) log_crypto_err("could not SSL_write"); return 0; } - c->tcp_byte_count += r; - if(c->tcp_byte_count < sizeof(uint16_t)) - return 1; - sldns_buffer_set_position(c->buffer, c->tcp_byte_count - - sizeof(uint16_t)); - if(sldns_buffer_remaining(c->buffer) == 0) { + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + if(c->tcp_write_byte_count < sizeof(uint16_t)) + return 1; + } else { + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + sldns_buffer_set_position(c->buffer, c->tcp_byte_count - + sizeof(uint16_t)); + } + if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } - log_assert(sldns_buffer_remaining(c->buffer) > 0); + log_assert(c->tcp_write_and_read || sldns_buffer_remaining(c->buffer) > 0); + log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2); ERR_clear_error(); - r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), - (int)sldns_buffer_remaining(c->buffer)); + if(c->tcp_write_and_read) { + r = SSL_write(c->ssl, (void*)(c->tcp_write_pkt + c->tcp_write_byte_count - 2), + (int)(c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count)); + } else { + r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), + (int)sldns_buffer_remaining(c->buffer)); + } if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { @@ -1452,9 +1554,13 @@ ssl_handle_write(struct comm_point* c) log_crypto_err("could not SSL_write"); return 0; } - sldns_buffer_skip(c->buffer, (ssize_t)r); + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + } else { + sldns_buffer_skip(c->buffer, (ssize_t)r); + } - if(sldns_buffer_remaining(c->buffer) == 0) { + if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } return 1; @@ -1466,9 +1572,17 @@ ssl_handle_write(struct comm_point* c) /** handle ssl tcp connection with dns contents */ static int -ssl_handle_it(struct comm_point* c) +ssl_handle_it(struct comm_point* c, int is_write) { - if(c->tcp_is_reading) + /* handle case where renegotiation wants read during write call + * or write during read calls */ + if(is_write && c->ssl_shake_state == comm_ssl_shake_hs_write) + return ssl_handle_read(c); + else if(!is_write && c->ssl_shake_state == comm_ssl_shake_hs_read) + return ssl_handle_write(c); + /* handle read events for read operation and write events for a + * write operation */ + else if(!is_write) return ssl_handle_read(c); return ssl_handle_write(c); } @@ -1485,8 +1599,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) ssize_t r; log_assert(c->type == comm_tcp || c->type == comm_local); if(c->ssl) - return ssl_handle_it(c); - if(!c->tcp_is_reading) + return ssl_handle_it(c, 0); + if(!c->tcp_is_reading && !c->tcp_write_and_read) return 0; log_assert(fd != -1); @@ -1506,6 +1620,33 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif +#ifdef ENETUNREACH + if(errno == ENETUNREACH && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef EHOSTDOWN + if(errno == EHOSTDOWN && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef EHOSTUNREACH + if(errno == EHOSTUNREACH && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef ENETDOWN + if(errno == ENETDOWN && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef EACCES + if(errno == EACCES && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef ENOTCONN + if(errno == ENOTCONN) { + log_err_addr("read (in tcp s) failed and this could be because TCP Fast Open is enabled [--disable-tfo-client --disable-tfo-server] but does not work", sock_strerror(errno), + &c->repinfo.addr, c->repinfo.addrlen); + return 0; + } +#endif #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAECONNRESET) return 0; @@ -1589,10 +1730,10 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) #else buffer = c->buffer; #endif - if(c->tcp_is_reading && !c->ssl) + if(c->tcp_is_reading && !c->ssl && !c->tcp_write_and_read) return 0; log_assert(fd != -1); - if(c->tcp_byte_count == 0 && c->tcp_check_nb_connect) { + if(((!c->tcp_write_and_read && c->tcp_byte_count == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == 0)) && c->tcp_check_nb_connect) { /* check for pending error from nonblocking connect */ /* from Stevens, unix network programming, vol1, 3rd ed, p450*/ int error = 0; @@ -1633,7 +1774,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) } } if(c->ssl) - return ssl_handle_it(c); + return ssl_handle_it(c, 1); #ifdef USE_MSG_FASTOPEN /* Only try this on first use of a connection that uses tfo, @@ -1642,15 +1783,22 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) if(c->tcp_do_fastopen == 1) { /* this form of sendmsg() does both a connect() and send() so need to look for various flavours of error*/ - uint16_t len = htons(sldns_buffer_limit(buffer)); + uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer)); struct msghdr msg; struct iovec iov[2]; c->tcp_do_fastopen = 0; memset(&msg, 0, sizeof(msg)); - iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; - iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; - iov[1].iov_base = sldns_buffer_begin(buffer); - iov[1].iov_len = sldns_buffer_limit(buffer); + if(c->tcp_write_and_read) { + iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count; + iov[1].iov_base = c->tcp_write_pkt; + iov[1].iov_len = c->tcp_write_pkt_len; + } else { + iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; + iov[1].iov_base = sldns_buffer_begin(buffer); + iov[1].iov_len = sldns_buffer_limit(buffer); + } log_assert(iov[0].iov_len > 0); msg.msg_name = &c->repinfo.addr; msg.msg_namelen = c->repinfo.addrlen; @@ -1696,12 +1844,18 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) } } else { - c->tcp_byte_count += r; - if(c->tcp_byte_count < sizeof(uint16_t)) - return 1; - sldns_buffer_set_position(buffer, c->tcp_byte_count - - sizeof(uint16_t)); - if(sldns_buffer_remaining(buffer) == 0) { + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + if(c->tcp_write_byte_count < sizeof(uint16_t)) + return 1; + } else { + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + sldns_buffer_set_position(buffer, c->tcp_byte_count - + sizeof(uint16_t)); + } + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } @@ -1709,19 +1863,31 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) } #endif /* USE_MSG_FASTOPEN */ - if(c->tcp_byte_count < sizeof(uint16_t)) { - uint16_t len = htons(sldns_buffer_limit(buffer)); + if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) { + uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer)); #ifdef HAVE_WRITEV struct iovec iov[2]; - iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; - iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; - iov[1].iov_base = sldns_buffer_begin(buffer); - iov[1].iov_len = sldns_buffer_limit(buffer); + if(c->tcp_write_and_read) { + iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count; + iov[1].iov_base = c->tcp_write_pkt; + iov[1].iov_len = c->tcp_write_pkt_len; + } else { + iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; + iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; + iov[1].iov_base = sldns_buffer_begin(buffer); + iov[1].iov_len = sldns_buffer_limit(buffer); + } log_assert(iov[0].iov_len > 0); r = writev(fd, iov, 2); #else /* HAVE_WRITEV */ - r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count), - sizeof(uint16_t)-c->tcp_byte_count, 0); + if(c->tcp_write_and_read) { + r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_write_byte_count), + sizeof(uint16_t)-c->tcp_write_byte_count, 0); + } else { + r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count), + sizeof(uint16_t)-c->tcp_byte_count, 0); + } #endif /* HAVE_WRITEV */ if(r == -1) { #ifndef USE_WINSOCK @@ -1760,19 +1926,31 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) #endif return 0; } - c->tcp_byte_count += r; - if(c->tcp_byte_count < sizeof(uint16_t)) - return 1; - sldns_buffer_set_position(buffer, c->tcp_byte_count - - sizeof(uint16_t)); - if(sldns_buffer_remaining(buffer) == 0) { + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + if(c->tcp_write_byte_count < sizeof(uint16_t)) + return 1; + } else { + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + sldns_buffer_set_position(buffer, c->tcp_byte_count - + sizeof(uint16_t)); + } + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } - log_assert(sldns_buffer_remaining(buffer) > 0); - r = send(fd, (void*)sldns_buffer_current(buffer), - sldns_buffer_remaining(buffer), 0); + log_assert(c->tcp_write_and_read || sldns_buffer_remaining(buffer) > 0); + log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2); + if(c->tcp_write_and_read) { + r = send(fd, (void*)(c->tcp_write_pkt + c->tcp_write_byte_count - 2), + c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count, 0); + } else { + r = send(fd, (void*)sldns_buffer_current(buffer), + sldns_buffer_remaining(buffer), 0); + } if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) @@ -1795,9 +1973,13 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) &c->repinfo.addr, c->repinfo.addrlen); return 0; } - sldns_buffer_skip(buffer, r); + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + } else { + sldns_buffer_skip(buffer, r); + } - if(sldns_buffer_remaining(buffer) == 0) { + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } @@ -1827,6 +2009,54 @@ tcp_req_info_read_again(int fd, struct comm_point* c) } } +/** read again to drain buffers when there could be more to read */ +static void +tcp_more_read_again(int fd, struct comm_point* c) +{ + /* if the packet is done, but another one could be waiting on + * the connection, the callback signals this, and we try again */ + /* this continues until the read routines get EAGAIN or so, + * and thus does not call the callback, and the bool is 0 */ + int* moreread = c->tcp_more_read_again; + while(moreread && *moreread) { + *moreread = 0; + if(!comm_point_tcp_handle_read(fd, c, 0)) { + 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; + } + } +} + +/** write again to fill up when there could be more to write */ +static void +tcp_more_write_again(int fd, struct comm_point* c) +{ + /* if the packet is done, but another is waiting to be written, + * the callback signals it and we try again. */ + /* this continues until the write routines get EAGAIN or so, + * and thus does not call the callback, and the bool is 0 */ + int* morewrite = c->tcp_more_write_again; + while(morewrite && *morewrite) { + *morewrite = 0; + if(!comm_point_tcp_handle_write(fd, c)) { + 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) { @@ -1847,7 +2077,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; @@ -1865,34 +2095,46 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) } return; } - if(event&UB_EV_READ) { + if(event&UB_EV_READ +#ifdef USE_MSG_FASTOPEN + && !(c->tcp_do_fastopen && (event&UB_EV_WRITE)) +#endif + ) { int has_tcpq = (c->tcp_req_info != NULL); + int* moreread = c->tcp_more_read_again; if(!comm_point_tcp_handle_read(fd, c, 0)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } + return; } if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); + if(moreread && *moreread) + tcp_more_read_again(fd, c); return; } if(event&UB_EV_WRITE) { int has_tcpq = (c->tcp_req_info != NULL); + int* morewrite = c->tcp_more_write_again; if(!comm_point_tcp_handle_write(fd, c)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } + return; } if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); + if(morewrite && *morewrite) + tcp_more_write_again(fd, c); return; } log_err("Ignored event %d for tcphdl.", event); @@ -2171,7 +2413,7 @@ http_nonchunk_segment(struct comm_point* c) return 1; } -/** handle nonchunked data segment, return 0=fail, 1=wait, 2=process more */ +/** handle chunked data segment, return 0=fail, 1=wait, 2=process more */ static int http_chunked_segment(struct comm_point* c) { @@ -2181,6 +2423,7 @@ http_chunked_segment(struct comm_point* c) */ size_t remainbufferlen; size_t got_now = sldns_buffer_limit(c->buffer) - c->http_stored; + verbose(VERB_ALGO, "http_chunked_segment: got now %d, tcpbytcount %d, http_stored %d, buffer pos %d, buffer limit %d", (int)got_now, (int)c->tcp_byte_count, (int)c->http_stored, (int)sldns_buffer_position(c->buffer), (int)sldns_buffer_limit(c->buffer)); if(c->tcp_byte_count <= got_now) { /* the chunk has completed (with perhaps some extra data * from next chunk header and next chunk) */ @@ -2248,7 +2491,7 @@ http_chunked_segment(struct comm_point* c) #ifdef HAVE_NGHTTP2 /** Create new http2 session. Called when creating handling comm point. */ -struct http2_session* http2_session_create(struct comm_point* c) +static struct http2_session* http2_session_create(struct comm_point* c) { struct http2_session* session = calloc(1, sizeof(*session)); if(!session) { @@ -2262,7 +2505,7 @@ struct http2_session* http2_session_create(struct comm_point* c) #endif /** Delete http2 session. After closing connection or on error */ -void http2_session_delete(struct http2_session* h2_session) +static void http2_session_delete(struct http2_session* h2_session) { #ifdef HAVE_NGHTTP2 if(h2_session->callbacks) @@ -2338,7 +2581,7 @@ void http2_session_add_stream(struct http2_session* h2_session, /** remove stream from session linked list. After stream close callback or * closing connection */ -void http2_session_remove_stream(struct http2_session* h2_session, +static void http2_session_remove_stream(struct http2_session* h2_session, struct http2_stream* h2_stream) { if(h2_stream->prev) @@ -2464,7 +2707,7 @@ comm_point_http2_handle_read(int ATTR_UNUSED(fd), struct comm_point* c) if(nghttp2_session_want_write(c->h2_session->session)) { c->tcp_is_reading = 0; comm_point_stop_listening(c); - comm_point_start_listening(c, -1, c->tcp_timeout_msec); + comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } else if(!nghttp2_session_want_read(c->h2_session->session)) return 0; /* connection can be closed */ return 1; @@ -2520,6 +2763,11 @@ comm_point_http_handle_read(int fd, struct comm_point* c) } sldns_buffer_flip(c->buffer); + /* if we are partway in a segment of data, position us at the point + * where we left off previously */ + if(c->http_stored < sldns_buffer_limit(c->buffer)) + sldns_buffer_set_position(c->buffer, c->http_stored); + else sldns_buffer_set_position(c->buffer, sldns_buffer_limit(c->buffer)); while(sldns_buffer_remaining(c->buffer) > 0) { /* Handle HTTP/1.x data */ @@ -2782,7 +3030,7 @@ comm_point_http2_handle_write(int ATTR_UNUSED(fd), struct comm_point* c) if(nghttp2_session_want_read(c->h2_session->session)) { c->tcp_is_reading = 1; comm_point_stop_listening(c); - comm_point_start_listening(c, -1, c->tcp_timeout_msec); + comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } else if(!nghttp2_session_want_write(c->h2_session->session)) return 0; /* connection can be closed */ return 1; @@ -2882,7 +3130,7 @@ comm_point_http_handle_callback(int fd, short event, void* arg) if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } } @@ -2894,7 +3142,7 @@ comm_point_http_handle_callback(int fd, short event, void* arg) if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); - (void)(*c->callback)(c, c->cb_arg, + (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } } @@ -2989,6 +3237,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, comm_point_delete(c); return NULL; } + c->event_added = 1; return c; } @@ -3048,6 +3297,7 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd, comm_point_delete(c); return NULL; } + c->event_added = 1; return c; } @@ -3332,6 +3582,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, comm_point_delete(c); return NULL; } + c->event_added = 1; /* now prealloc the handlers */ for(i=0; ievent_added = 1; return c; } @@ -3617,6 +3869,7 @@ comm_point_create_raw(struct comm_base* base, int fd, int writing, free(c); return NULL; } + c->event_added = 1; return c; } @@ -3626,8 +3879,12 @@ comm_point_close(struct comm_point* c) if(!c) return; if(c->fd != -1) { - if(ub_event_del(c->ev->ev) != 0) { - log_err("could not event_del on close"); + verbose(5, "comm_point_close of %d: event_del", c->fd); + if(c->event_added) { + if(ub_event_del(c->ev->ev) != 0) { + log_err("could not event_del on close"); + } + c->event_added = 0; } } tcl_close_connection(c->tcl_addr); @@ -3711,7 +3968,7 @@ comm_point_send_reply(struct comm_reply *repinfo) repinfo->addrlen, repinfo); else comm_point_send_udp_msg(repinfo->c, buffer, - (struct sockaddr*)&repinfo->addr, repinfo->addrlen); + (struct sockaddr*)&repinfo->addr, repinfo->addrlen, 0); #ifdef USE_DNSTAP if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) @@ -3739,11 +3996,11 @@ comm_point_send_reply(struct comm_reply *repinfo) repinfo->c->tcp_is_reading = 0; comm_point_stop_listening(repinfo->c); comm_point_start_listening(repinfo->c, -1, - repinfo->c->tcp_timeout_msec); + adjusted_tcp_timeout(repinfo->c)); return; } else { comm_point_start_listening(repinfo->c, -1, - repinfo->c->tcp_timeout_msec); + adjusted_tcp_timeout(repinfo->c)); } } } @@ -3776,8 +4033,11 @@ void comm_point_stop_listening(struct comm_point* c) { verbose(VERB_ALGO, "comm point stop listening %d", c->fd); - if(ub_event_del(c->ev->ev) != 0) { - log_err("event_del error to stoplisten"); + if(c->event_added) { + if(ub_event_del(c->ev->ev) != 0) { + log_err("event_del error to stoplisten"); + } + c->event_added = 0; } } @@ -3790,6 +4050,12 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec) /* no use to start listening no free slots. */ return; } + if(c->event_added) { + if(ub_event_del(c->ev->ev) != 0) { + log_err("event_del error to startlisten"); + } + c->event_added = 0; + } if(msec != -1 && msec != 0) { if(!c->timeout) { c->timeout = (struct timeval*)malloc(sizeof( @@ -3807,12 +4073,20 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec) } if(c->type == comm_tcp || c->type == comm_http) { ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); - if(c->tcp_is_reading) + if(c->tcp_write_and_read) { + verbose(5, "startlistening %d mode rw", (newfd==-1?c->fd:newfd)); + ub_event_add_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); + } else if(c->tcp_is_reading) { + verbose(5, "startlistening %d mode r", (newfd==-1?c->fd:newfd)); ub_event_add_bits(c->ev->ev, UB_EV_READ); - else ub_event_add_bits(c->ev->ev, UB_EV_WRITE); + } else { + verbose(5, "startlistening %d mode w", (newfd==-1?c->fd:newfd)); + ub_event_add_bits(c->ev->ev, UB_EV_WRITE); + } } if(newfd != -1) { - if(c->fd != -1) { + if(c->fd != -1 && c->fd != newfd) { + verbose(5, "cpsl close of fd %d for %d", c->fd, newfd); sock_close(c->fd); } c->fd = newfd; @@ -3821,13 +4095,17 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec) if(ub_event_add(c->ev->ev, msec==0?NULL:c->timeout) != 0) { log_err("event_add failed. in cpsl."); } + c->event_added = 1; } void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr) { verbose(VERB_ALGO, "comm point listen_for_rw %d %d", c->fd, wr); - if(ub_event_del(c->ev->ev) != 0) { - log_err("event_del error to cplf"); + if(c->event_added) { + if(ub_event_del(c->ev->ev) != 0) { + log_err("event_del error to cplf"); + } + c->event_added = 0; } ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); if(rd) ub_event_add_bits(c->ev->ev, UB_EV_READ); @@ -3835,6 +4113,7 @@ void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr) if(ub_event_add(c->ev->ev, c->timeout) != 0) { log_err("event_add failed. in cplf."); } + c->event_added = 1; } size_t comm_point_get_mem(struct comm_point* c) diff --git a/util/netevent.h b/util/netevent.h index 6986f881b..4a2aa1677 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -95,6 +95,9 @@ typedef int comm_point_callback_type(struct comm_point*, void*, int, #define NETEVENT_CAPSFAIL -3 /** to pass done transfer to callback function; http file is complete */ #define NETEVENT_DONE -4 +/** to pass write of the write packet is done to callback function + * used when tcp_write_and_read is enabled */ +#define NETEVENT_PKT_WRITTEN -5 /** timeout to slow accept calls when not possible, in msec. */ #define NETEVENT_SLOW_ACCEPT_TIME 2000 @@ -163,6 +166,8 @@ struct comm_reply { struct comm_point { /** behind the scenes structure, with say libevent info. alloced. */ struct internal_event* ev; + /** if the event is added or not */ + int event_added; /** file descriptor for communication point */ int fd; @@ -276,6 +281,44 @@ struct comm_point { and after read/write completes. No callback is done. */ int tcp_do_close; + /** flag that indicates the stream is both written and read from. */ + int tcp_write_and_read; + + /** byte count for written length over write channel, for when + * tcp_write_and_read is enabled. When tcp_write_and_read is enabled, + * this is the counter for writing, the one for reading is in the + * commpoint.buffer sldns buffer. The counter counts from 0 to + * 2+tcp_write_pkt_len, and includes the tcp length bytes. */ + size_t tcp_write_byte_count; + + /** packet to write currently over the write channel. for when + * tcp_write_and_read is enabled. When tcp_write_and_read is enabled, + * this is the buffer for the written packet, the commpoint.buffer + * sldns buffer is the buffer for the received packet. */ + uint8_t* tcp_write_pkt; + /** length of tcp_write_pkt in bytes */ + size_t tcp_write_pkt_len; + + /** if set try to read another packet again (over connection with + * multiple packets), once set, tries once, then zero again, + * so set it in the packet complete section. + * The pointer itself has to be set before the callback is invoked, + * when you set things up, and continue to exist also after the + * commpoint is closed and deleted in your callback. So that after + * the callback cleans up netevent can see what it has to do. + * Or leave NULL if it is not used at all. */ + int* tcp_more_read_again; + + /** if set try to write another packet (over connection with + * multiple packets), once set, tries once, then zero again, + * so set it in the packet complete section. + * The pointer itself has to be set before the callback is invoked, + * when you set things up, and continue to exist also after the + * commpoint is closed and deleted in your callback. So that after + * the callback cleans up netevent can see what it has to do. + * Or leave NULL if it is not used at all. */ + int* tcp_more_write_again; + /** if set, read/write completes: read/write state of tcp is toggled. buffer reset/bytecount reset. @@ -589,12 +632,14 @@ void comm_point_drop_reply(struct comm_reply* repinfo); * Send an udp message over a commpoint. * @param c: commpoint to send it from. * @param packet: what to send. - * @param addr: where to send it to. + * @param addr: where to send it to. If NULL, send is performed, + * for connected sockets, to the connected address. * @param addrlen: length of addr. + * @param is_connected: if the UDP socket is connect()ed. * @return: false on a failure. */ int comm_point_send_udp_msg(struct comm_point* c, struct sldns_buffer* packet, - struct sockaddr* addr, socklen_t addrlen); + struct sockaddr* addr, socklen_t addrlen,int is_connected); /** * Stop listening for input on the commpoint. No callbacks will happen. @@ -619,6 +664,16 @@ void comm_point_start_listening(struct comm_point* c, int newfd, int msec); */ void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr); +/** + * For TCP handlers that use c->tcp_timeout_msec, this routine adjusts + * it with the minimum. Otherwise, a 0 value advertised without the + * minimum applied moves to a 0 in comm_point_start_listening and that + * routine treats it as no timeout, listen forever, which is not wanted. + * @param c: comm point to use the tcp_timeout_msec of. + * @return adjusted tcp_timeout_msec value with the minimum if smaller. + */ +int adjusted_tcp_timeout(struct comm_point* c); + /** * Get size of memory used by comm point. * For TCP handlers this includes subhandlers. diff --git a/util/regional.h b/util/regional.h index eeb7de7b5..b439897d5 100644 --- a/util/regional.h +++ b/util/regional.h @@ -76,6 +76,9 @@ struct regional char* data; /** threshold for outside of chunk allocations */ size_t large_object_size; + /** padding for sizeof8 alignment of sizeof(struct regional) + * for 32bit systems */ + size_t padding; }; /** diff --git a/util/storage/lruhash.c b/util/storage/lruhash.c index 0003ff491..3500a4ef0 100644 --- a/util/storage/lruhash.c +++ b/util/storage/lruhash.c @@ -398,13 +398,13 @@ lruhash_remove(struct lruhash* table, hashvalue_type hash, void* key) return; } table->num--; - table->space_used -= (*table->sizefunc)(entry->key, entry->data); - lock_quick_unlock(&table->lock); + table->space_used -= (*table->sizefunc)(entry->key, entry->data); lock_rw_wrlock(&entry->lock); if(table->markdelfunc) (*table->markdelfunc)(entry->key); lock_rw_unlock(&entry->lock); lock_quick_unlock(&bin->lock); + lock_quick_unlock(&table->lock); /* finish removal */ d = entry->data; (*table->delkeyfunc)(entry->key, table->cb_arg); diff --git a/validator/autotrust.c b/validator/autotrust.c index fd9fb3cf1..7ce07e0d8 100644 --- a/validator/autotrust.c +++ b/validator/autotrust.c @@ -2365,6 +2365,7 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535;